From cc960249bd70d9c4624f599a8730c9907ecd3f63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:47:36 +0000 Subject: [PATCH] vendor: bump github.com/operator-framework/operator-sdk Bumps the github-dependencies group in /tools with 1 update: [github.com/operator-framework/operator-sdk](https://github.com/operator-framework/operator-sdk). Updates `github.com/operator-framework/operator-sdk` from 1.37.0 to 1.38.0 - [Release notes](https://github.com/operator-framework/operator-sdk/releases) - [Changelog](https://github.com/operator-framework/operator-sdk/blob/master/.goreleaser.yml) - [Commits](https://github.com/operator-framework/operator-sdk/compare/v1.37.0...v1.38.0) --- updated-dependencies: - dependency-name: github.com/operator-framework/operator-sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies ... Signed-off-by: dependabot[bot] --- tools/go.mod | 85 +- tools/go.sum | 221 ++- .../github.com/BurntSushi/toml/README.md | 2 +- .../github.com/BurntSushi/toml/decode.go | 93 +- .../BurntSushi/toml/decode_go116.go | 19 - .../github.com/BurntSushi/toml/deprecated.go | 12 +- .../vendor/github.com/BurntSushi/toml/doc.go | 3 - .../github.com/BurntSushi/toml/encode.go | 45 +- .../github.com/BurntSushi/toml/error.go | 111 +- .../vendor/github.com/BurntSushi/toml/lex.go | 50 +- .../vendor/github.com/BurntSushi/toml/meta.go | 49 +- .../github.com/BurntSushi/toml/parse.go | 269 ++-- .../github.com/BurntSushi/toml/type_fields.go | 8 +- .../github.com/BurntSushi/toml/type_toml.go | 11 +- .../Microsoft/go-winio/.golangci.yml | 10 +- .../github.com/Microsoft/go-winio/backup.go | 33 +- .../Microsoft/go-winio/backuptar/tar.go | 9 +- .../github.com/Microsoft/go-winio/file.go | 85 +- .../github.com/Microsoft/go-winio/fileinfo.go | 22 +- .../github.com/Microsoft/go-winio/hvsock.go | 47 +- .../Microsoft/go-winio/internal/fs/fs.go | 72 +- .../go-winio/internal/fs/zsyscall_windows.go | 9 +- .../go-winio/internal/socket/socket.go | 8 +- .../internal/socket/zsyscall_windows.go | 9 +- .../go-winio/internal/stringbuffer/wstring.go | 2 +- .../github.com/Microsoft/go-winio/pipe.go | 125 +- .../go-winio/pkg/bindfilter/bind_filter.go | 3 +- .../pkg/bindfilter/zsyscall_windows.go | 9 +- .../Microsoft/go-winio/privilege.go | 9 +- .../github.com/Microsoft/go-winio/sd.go | 37 +- .../github.com/Microsoft/go-winio/tools.go | 5 - .../Microsoft/go-winio/vhd/zvhd_windows.go | 13 +- .../Microsoft/go-winio/zsyscall_windows.go | 205 ++- .../Microsoft/hcsshim/.golangci.yml | 7 + .../github.com/Microsoft/hcsshim/Makefile | 87 +- .../github.com/Microsoft/hcsshim/README.md | 84 +- .../hcsshim/computestorage/attach.go | 28 + .../hcsshim/computestorage/detach.go | 26 + .../hcsshim/computestorage/storage.go | 7 +- .../computestorage/zsyscall_windows.go | 83 +- .../github.com/Microsoft/hcsshim/container.go | 2 +- .../github.com/Microsoft/hcsshim/errors.go | 11 +- .../Microsoft/hcsshim/hnsaccelnet.go | 46 + .../Microsoft/hcsshim/internal/hcs/process.go | 2 +- .../hcsshim/internal/hcs/schema2/layer.go | 7 + .../internal/hcs/schema2/registry_hive.go | 13 + .../internal/hcs/schema2/registry_key.go | 2 +- .../internal/hcs/schema2/registry_value.go | 2 +- .../hcs/schema2/registry_value_type.go | 17 + .../Microsoft/hcsshim/internal/hcs/system.go | 8 +- .../Microsoft/hcsshim/internal/hcs/utils.go | 4 +- .../hcsshim/internal/hns/hnsaccelnet.go | 60 + .../hcsshim/internal/hns/hnsendpoint.go | 23 + .../hcsshim/internal/hns/hnsfuncs.go | 2 +- .../hcsshim/internal/hns/hnspolicy.go | 7 +- .../hcsshim/internal/hns/namespace.go | 4 +- .../hcsshim/internal/hns/zsyscall_windows.go | 5 +- .../internal/interop/zsyscall_windows.go | 5 +- .../hcsshim/internal/jobobject/iocp.go | 3 +- .../hcsshim/internal/jobobject/jobobject.go | 2 +- .../hcsshim/internal/jobobject/limits.go | 7 + .../Microsoft/hcsshim/internal/log/format.go | 1 + .../hcsshim/internal/logfields/fields.go | 1 + .../Microsoft/hcsshim/internal/memory/pool.go | 6 +- .../Microsoft/hcsshim/internal/oc/errors.go | 4 +- .../hcsshim/internal/safefile/safeopen.go | 2 +- .../internal/security/zsyscall_windows.go | 9 +- .../hcsshim/internal/vmcompute/vmcompute.go | 16 +- .../internal/vmcompute/zsyscall_windows.go | 55 +- .../internal/wclayer/baselayerreader.go | 6 +- .../internal/wclayer/converttobaselayer.go | 2 + .../internal/wclayer/expandscratchsize.go | 18 +- .../hcsshim/internal/wclayer/legacy.go | 8 +- .../internal/wclayer/zsyscall_windows.go | 45 +- .../hcsshim/internal/winapi/cimfs.go | 4 +- .../hcsshim/internal/winapi/utils.go | 7 +- .../internal/winapi/zsyscall_windows.go | 127 +- .../hcsshim/pkg/ociwclayer/export.go | 3 +- .../hcsshim/pkg/ociwclayer/import.go | 9 +- .../Microsoft/hcsshim/zsyscall_windows.go | 5 +- .../archive/compression/compression.go | 2 +- .../containerd/containerd/archive/tar.go | 2 +- .../containerd/containerd/content/content.go | 6 + .../containerd/containerd/content/helpers.go | 12 +- .../containerd/content/local/locks.go | 2 +- .../containerd/content/local/readerat.go | 2 +- .../containerd/content/local/store.go | 4 +- .../containerd/content/local/writer.go | 4 +- .../seccomp/kernelversion/kernel_linux.go | 92 ++ .../containerd/errdefs/errdefs_deprecated.go | 116 ++ .../containerd/containerd/filters/filter.go | 2 +- .../containerd/containerd/filters/parser.go | 2 +- .../containerd/identifiers/validate.go | 2 +- .../containerd/containerd/images/diffid.go | 2 +- .../containerd/containerd/images/handlers.go | 2 +- .../containerd/containerd/images/image.go | 7 +- .../containerd/images/mediatypes.go | 4 +- .../containerd/containerd/labels/validate.go | 2 +- .../containerd/metadata/containers.go | 2 +- .../containerd/containerd/metadata/content.go | 4 +- .../containerd/containerd/metadata/db.go | 6 +- .../containerd/containerd/metadata/gc.go | 2 +- .../containerd/containerd/metadata/images.go | 2 +- .../containerd/containerd/metadata/leases.go | 2 +- .../containerd/metadata/namespaces.go | 2 +- .../containerd/containerd/metadata/sandbox.go | 2 +- .../containerd/metadata/snapshot.go | 40 +- .../containerd/mount/losetup_linux.go | 27 + .../containerd/mount/mount_linux.go | 47 +- .../containerd/mount/mount_windows.go | 2 +- .../containerd/containerd/mount/temp.go | 2 +- .../containerd/namespaces/context.go | 2 +- .../containerd/platforms/cpuinfo.go | 2 +- .../containerd/platforms/cpuinfo_linux.go | 2 +- .../containerd/platforms/cpuinfo_other.go | 2 +- .../containerd/platforms/platforms.go | 2 +- .../containerd/remotes/docker/auth/fetch.go | 2 +- .../containerd/remotes/docker/authorizer.go | 22 +- .../containerd/remotes/docker/converter.go | 2 +- .../remotes/docker/converter_fuzz.go | 2 +- .../containerd/remotes/docker/fetcher.go | 4 +- .../containerd/remotes/docker/handler.go | 2 +- .../remotes/docker/httpreadseeker.go | 4 +- .../containerd/remotes/docker/pusher.go | 113 +- .../containerd/remotes/docker/resolver.go | 74 +- .../remotes/docker/schema1/converter.go | 4 +- .../containerd/remotes/docker/status.go | 2 +- .../containerd/containerd/remotes/handlers.go | 4 +- .../containerd/sandbox/controller.go | 4 +- .../containerd/containerd/sandbox/store.go | 2 +- .../containerd/containerd/version/version.go | 2 +- .../runc => containerd/errdefs}/LICENSE | 6 +- .../github.com/containerd/errdefs/README.md | 13 + .../{containerd => }/errdefs/errors.go | 0 .../{containerd => }/errdefs/grpc.go | 0 .../github.com/containerd/ttrpc/client.go | 80 +- .../github.com/containerd/ttrpc/config.go | 38 +- .../github.com/containerd/ttrpc/services.go | 6 +- .../containers/common/pkg/auth/auth.go | 5 +- .../common/pkg/capabilities/capabilities.go | 29 +- .../common/pkg/password/password_supported.go | 3 +- .../common/pkg/password/password_windows.go | 1 - .../image/v5/docker/distribution_error.go | 2 +- .../image/v5/docker/docker_client.go | 169 ++- .../image/v5/docker/docker_image.go | 19 +- .../image/v5/docker/docker_image_dest.go | 110 +- .../image/v5/docker/docker_image_src.go | 87 +- .../image/v5/docker/docker_transport.go | 63 +- .../image/v5/docker/registries_d.go | 16 +- .../internal/blobinfocache/blobinfocache.go | 33 +- .../image/v5/internal/blobinfocache/types.go | 58 +- .../image/v5/internal/image/docker_schema2.go | 2 +- .../image/v5/internal/image/manifest.go | 2 +- .../containers/image/v5/internal/image/oci.go | 2 +- .../internal/imagedestination/impl/helpers.go | 26 +- .../stubs/put_blob_partial.go | 3 +- .../internal/imagesource/stubs/get_blob_at.go | 2 + .../image/v5/internal/imagesource/wrapper.go | 2 +- .../internal/manifest/docker_schema2_list.go | 4 +- .../image/v5/internal/manifest/list.go | 4 +- .../image/v5/internal/manifest/manifest.go | 61 +- .../image/v5/internal/manifest/oci_index.go | 75 +- .../image/v5/internal/multierr/multierr.go | 34 + .../internal/pkg/platform/platform_matcher.go | 40 +- .../image/v5/internal/private/private.go | 33 +- .../image/v5/internal/signature/sigstore.go | 9 +- .../image/v5/internal/signature/simple.go | 8 +- .../containers/image/v5/manifest/common.go | 8 +- .../image/v5/manifest/docker_schema1.go | 21 +- .../image/v5/manifest/docker_schema2.go | 11 +- .../containers/image/v5/manifest/manifest.go | 4 +- .../containers/image/v5/manifest/oci.go | 21 +- .../image/v5/pkg/blobinfocache/none/none.go | 13 + .../image/v5/pkg/compression/compression.go | 165 --- .../v5/pkg/compression/internal/types.go | 36 +- .../image/v5/pkg/compression/zstd.go | 59 - .../image/v5/pkg/docker/config/config.go | 55 +- .../v5/pkg/sysregistriesv2/shortnames.go | 9 +- .../sysregistriesv2/system_registries_v2.go | 23 +- .../v5/pkg/tlsclientconfig/tlsclientconfig.go | 10 +- .../containers/image/v5/types/types.go | 4 +- .../containers/image/v5/version/version.go | 4 +- .../pkg/chunked/compressor/compressor.go | 513 ------- .../storage/pkg/chunked/compressor/rollsum.go | 85 -- .../pkg/chunked/internal/compression.go | 283 ---- .../storage/pkg/fileutils/exists_unix.go | 34 + .../storage/pkg/fileutils/exists_windows.go | 18 + .../storage/pkg/fileutils/fileutils.go | 371 +++++ .../storage/pkg/fileutils/fileutils_darwin.go | 27 + .../pkg/fileutils/fileutils_solaris.go | 7 + .../storage/pkg/fileutils/fileutils_unix.go | 22 + .../pkg/fileutils/fileutils_windows.go | 7 + .../containers/storage/pkg/homedir/homedir.go | 15 - .../storage/pkg/homedir/homedir_others.go | 21 - .../storage/pkg/homedir/homedir_unix.go | 113 +- .../storage/pkg/homedir/homedir_windows.go | 29 + .../containers/storage/pkg/idtools/idtools.go | 74 +- .../storage/pkg/idtools/idtools_unix.go | 5 +- .../storage/pkg/ioutils/fswriters.go | 5 +- .../storage/pkg/lockfile/lockfile.go | 61 +- .../storage/pkg/lockfile/lockfile_unix.go | 20 +- .../storage/pkg/lockfile/lockfile_windows.go | 13 +- .../storage/pkg/mount/mountinfo_linux.go | 17 +- .../storage/pkg/system/syscall_unix.go | 4 +- .../containers/storage/pkg/unshare/unshare.c | 1 + .../storage/pkg/unshare/unshare_linux.go | 12 +- .../pkg/unshare/unshare_unsupported.go | 2 +- .../cyphar/filepath-securejoin/CHANGELOG.md | 138 ++ .../cyphar/filepath-securejoin/LICENSE | 2 +- .../cyphar/filepath-securejoin/README.md | 139 +- .../cyphar/filepath-securejoin/VERSION | 2 +- .../cyphar/filepath-securejoin/join.go | 85 +- .../filepath-securejoin/lookup_linux.go | 389 +++++ .../cyphar/filepath-securejoin/mkdir_linux.go | 229 +++ .../cyphar/filepath-securejoin/open_linux.go | 101 ++ .../filepath-securejoin/openat2_linux.go | 141 ++ .../filepath-securejoin/openat_linux.go | 59 + .../filepath-securejoin/procfs_linux.go | 474 ++++++ .../testing_mocks_linux.go | 68 + .../cyphar/filepath-securejoin/vfs.go | 2 +- .../client/client.go | 17 +- .../credentials/error.go | 11 +- .../json-patch/v5/internal/json/encode.go | 13 + .../json-patch/v5/internal/json/stream.go | 24 +- .../github.com/evanphx/json-patch/v5/merge.go | 52 +- .../github.com/evanphx/json-patch/v5/patch.go | 68 +- .../go-openapi/jsonpointer/pointer.go | 2 +- .../go-openapi/swag/initialism_index.go | 2 +- .../go-openapi/swag/string_bytes.go | 14 - .../vendor/github.com/go-openapi/swag/yaml.go | 3 +- .../go-containerregistry/pkg/authn/authn.go | 17 + .../pkg/authn/keychain.go | 61 +- .../pkg/authn/multikeychain.go | 8 +- .../go-containerregistry/pkg/name/digest.go | 20 + .../pkg/v1/layout/write.go | 10 + .../pkg/v1/remote/fetcher.go | 2 +- .../pkg/v1/remote/pusher.go | 14 + .../pkg/v1/remote/referrers.go | 2 +- .../pkg/v1/remote/transport/basic.go | 2 +- .../pkg/v1/remote/transport/bearer.go | 6 +- .../pkg/v1/remote/write.go | 4 +- .../joelanford/ignore/.golangci.yml | 17 + .../klauspost/compress/.goreleaser.yml | 4 - .../github.com/klauspost/compress/README.md | 33 +- .../klauspost/compress/flate/deflate.go | 1017 ------------- .../klauspost/compress/flate/dict_decoder.go | 184 --- .../klauspost/compress/flate/fast_encoder.go | 193 --- .../compress/flate/huffman_bit_writer.go | 1182 --------------- .../klauspost/compress/flate/huffman_code.go | 417 ------ .../compress/flate/huffman_sortByFreq.go | 159 -- .../compress/flate/huffman_sortByLiteral.go | 201 --- .../klauspost/compress/flate/inflate.go | 829 ----------- .../klauspost/compress/flate/inflate_gen.go | 1283 ----------------- .../klauspost/compress/flate/level1.go | 241 ---- .../klauspost/compress/flate/level2.go | 214 --- .../klauspost/compress/flate/level3.go | 241 ---- .../klauspost/compress/flate/level4.go | 221 --- .../klauspost/compress/flate/level5.go | 708 --------- .../klauspost/compress/flate/level6.go | 325 ----- .../compress/flate/matchlen_amd64.go | 16 - .../klauspost/compress/flate/matchlen_amd64.s | 68 - .../compress/flate/matchlen_generic.go | 33 - .../klauspost/compress/flate/regmask_amd64.go | 37 - .../klauspost/compress/flate/regmask_other.go | 40 - .../klauspost/compress/flate/stateless.go | 318 ---- .../klauspost/compress/flate/token.go | 379 ----- .../compress/internal/snapref/encode_other.go | 2 +- .../github.com/klauspost/compress/s2sx.mod | 2 +- .../klauspost/compress/zstd/blockdec.go | 3 + .../klauspost/compress/zstd/blockenc.go | 20 + .../klauspost/compress/zstd/decodeheader.go | 56 +- .../klauspost/compress/zstd/decoder.go | 2 +- .../klauspost/compress/zstd/dict.go | 31 + .../klauspost/compress/zstd/enc_best.go | 49 +- .../klauspost/compress/zstd/enc_better.go | 13 +- .../compress/zstd/encoder_options.go | 6 +- .../klauspost/compress/zstd/frameenc.go | 2 +- .../compress/zstd/fse_decoder_generic.go | 11 +- .../zstd/internal/xxhash/xxhash_arm64.s | 4 +- .../klauspost/compress/zstd/matchlen_amd64.s | 10 +- .../klauspost/compress/zstd/seqdec_amd64.s | 136 +- .../github.com/klauspost/pgzip/.gitignore | 24 - .../github.com/klauspost/pgzip/.travis.yml | 28 - .../vendor/github.com/klauspost/pgzip/LICENSE | 22 - .../github.com/klauspost/pgzip/README.md | 134 -- .../github.com/klauspost/pgzip/gunzip.go | 597 -------- .../vendor/github.com/klauspost/pgzip/gzip.go | 519 ------- .../mattn/go-runewidth/runewidth_table.go | 323 +++-- .../moby/sys/mountinfo/mounted_linux.go | 2 +- tools/vendor/github.com/moby/sys/user/LICENSE | 202 +++ .../sys}/user/lookup_unix.go | 0 .../libcontainer => moby/sys}/user/user.go | 0 .../sys}/user/user_fuzzer.go | 0 .../image-spec/specs-go/version.go | 2 +- .../github.com/opencontainers/runc/NOTICE | 17 - .../runtime-spec/specs-go/config.go | 10 + .../runtime-spec/specs-go/version.go | 2 +- .../internal/version/version.go | 2 +- .../pkg/plugins/ansible/v1/api.go | 21 +- .../pkg/plugins/ansible/v1/init.go | 96 +- .../pkg/plugins/ansible/v1/plugin.go | 6 +- .../pkg/plugins/ansible/v1/scaffolds/api.go | 8 +- .../pkg/plugins/ansible/v1/scaffolds/init.go | 8 +- .../internal/templates/config/crd/crd.go | 2 +- .../templates/config/crd/kustomization.go | 2 +- .../internal/templates/config/rbac/role.go | 2 +- .../config/testing/debug_logs_patch.go | 2 +- .../templates/config/testing/kustomization.go | 12 +- .../templates/config/testing/manager_image.go | 2 +- .../testing/pullpolicy/always_pull_patch.go | 2 +- .../pullpolicy/ifnotpresent_pull_patch.go | 2 +- .../testing/pullpolicy/never_pull_patch.go | 2 +- .../internal/templates/dockerfile.go | 2 +- .../scaffolds/internal/templates/gitignore.go | 2 +- .../scaffolds/internal/templates/makefile.go | 2 +- .../templates/molecule/mdefault/converge.go | 2 +- .../templates/molecule/mdefault/create.go | 2 +- .../templates/molecule/mdefault/destroy.go | 2 +- .../templates/molecule/mdefault/kustomize.go | 2 +- .../templates/molecule/mdefault/molecule.go | 2 +- .../templates/molecule/mdefault/prepare.go | 2 +- .../molecule/mdefault/tasks_test_resource.go | 2 +- .../templates/molecule/mdefault/verify.go | 2 +- .../templates/molecule/mkind/converge.go | 2 +- .../templates/molecule/mkind/create.go | 2 +- .../templates/molecule/mkind/destroy.go | 2 +- .../templates/molecule/mkind/molecule.go | 2 +- .../templates/playbooks/placeholder.go | 2 +- .../internal/templates/playbooks/playbook.go | 2 +- .../internal/templates/requirements.go | 8 +- .../internal/templates/roles/defaults_main.go | 2 +- .../internal/templates/roles/files_dir.go | 2 +- .../internal/templates/roles/handlers_main.go | 2 +- .../internal/templates/roles/meta_main.go | 2 +- .../internal/templates/roles/placeholder.go | 2 +- .../internal/templates/roles/readme.go | 2 +- .../internal/templates/roles/tasks_main.go | 2 +- .../internal/templates/roles/templates_dir.go | 2 +- .../internal/templates/roles/vars_main.go | 2 +- .../scaffolds/internal/templates/watches.go | 2 +- .../pkg/plugins/util/cleanup.go | 6 +- .../operator-registry/alpha/action/render.go | 11 +- .../alpha/declcfg/declcfg_to_model.go | 5 + .../operator-registry/alpha/declcfg/load.go | 263 ++-- .../alpha/property/property.go | 1 + .../operator-registry/pkg/lib/log/null.go | 13 + .../pkg/lib/log/writerhook.go | 76 + .../internal/bindata/olm/manifests.go | 96 +- .../convert_config_3-alpha_to_3.go | 2 +- .../internal/cmd/operator-sdk/cli/cli.go | 56 +- .../operator-sdk/generate/internal/genutil.go | 16 +- .../generate/kustomize/manifests.go | 10 +- .../operator-sdk/internal/olm/fbcutil/util.go | 2 +- .../internal/olm/installer/manager.go | 4 +- .../registry/fbcindex/fbc_registry_pod.go | 22 +- .../internal/plugins/envtest/v1/init.go | 76 - .../internal/plugins/envtest/v1/plugin.go | 49 - .../internal/plugins/helm/v1/api.go | 24 +- .../internal/plugins/helm/v1/init.go | 78 +- .../internal/plugins/helm/v1/plugin.go | 6 +- .../internal/plugins/helm/v1/scaffolds/api.go | 8 +- .../plugins/helm/v1/scaffolds/init.go | 8 +- .../internal/templates/config/crd/crd.go | 2 +- .../templates/config/crd/kustomization.go | 2 +- .../templates/config/rbac/manager_role.go | 2 +- .../config/samples/custom_resource.go | 2 +- .../internal/templates/dockerfile.go | 2 +- .../scaffolds/internal/templates/gitignore.go | 2 +- .../scaffolds/internal/templates/makefile.go | 2 +- .../scaffolds/internal/templates/watches.go | 2 +- .../internal/plugins/manifests/v2/api.go | 8 +- .../internal/plugins/manifests/v2/init.go | 6 +- .../internal/plugins/manifests/v2/plugin.go | 9 +- .../config/manifests/kustomization.go | 4 +- .../templates/config/samples/kustomization.go | 2 +- .../internal/plugins/manifests/v2/utils.go | 2 +- .../internal/plugins/scorecard/v2/init.go | 18 +- .../internal/plugins/scorecard/v2/plugin.go | 9 +- .../internal/plugins/util/cleanup.go | 2 +- .../internal/plugins/util/legacy_keys.go | 4 +- .../internal/util/projutil/project_util.go | 9 +- .../pelletier/go-toml/v2/.gitignore | 3 +- .../pelletier/go-toml/v2/CONTRIBUTING.md | 31 +- .../github.com/pelletier/go-toml/v2/README.md | 117 +- .../pelletier/go-toml/v2/SECURITY.md | 3 - .../github.com/pelletier/go-toml/v2/ci.sh | 22 +- .../go-toml/v2/internal/tracker/seen.go | 74 +- .../pelletier/go-toml/v2/marshaler.go | 39 +- .../pelletier/go-toml/v2/unmarshaler.go | 57 +- .../go-toml/v2/unstable/unmarshaler.go | 7 + .../prometheus/client_golang/NOTICE | 5 - .../internal/github.com/golang/gddo/LICENSE} | 2 +- .../golang/gddo/httputil/header/header.go | 145 ++ .../golang/gddo/httputil/negotiate.go | 36 + .../collectors/go_collector_latest.go | 4 +- .../client_golang/prometheus/go_collector.go | 55 +- .../prometheus/go_collector_latest.go | 19 +- .../client_golang/prometheus/histogram.go | 268 +++- .../internal/go_collector_options.go | 2 + .../client_golang/prometheus/metric.go | 2 +- .../prometheus/process_collector.go | 29 +- .../prometheus/process_collector_other.go | 14 + .../prometheus/promhttp/delegator.go | 6 + .../client_golang/prometheus/promhttp/http.go | 113 +- .../client_golang/prometheus/registry.go | 17 +- .../client_golang/prometheus/summary.go | 42 + .../client_golang/prometheus/vec.go | 2 +- tools/vendor/github.com/rivo/uniseg/README.md | 30 +- .../github.com/rivo/uniseg/eastasianwidth.go | 78 +- .../rivo/uniseg/emojipresentation.go | 18 +- .../github.com/rivo/uniseg/gen_breaktest.go | 10 +- .../github.com/rivo/uniseg/gen_properties.go | 13 +- .../vendor/github.com/rivo/uniseg/grapheme.go | 31 +- .../rivo/uniseg/graphemeproperties.go | 58 +- .../github.com/rivo/uniseg/graphemerules.go | 176 ++- tools/vendor/github.com/rivo/uniseg/line.go | 10 +- .../github.com/rivo/uniseg/lineproperties.go | 109 +- .../github.com/rivo/uniseg/linerules.go | 522 ++++--- .../github.com/rivo/uniseg/properties.go | 48 +- .../rivo/uniseg/sentenceproperties.go | 54 +- .../github.com/rivo/uniseg/sentencerules.go | 265 ++-- tools/vendor/github.com/rivo/uniseg/step.go | 24 +- tools/vendor/github.com/rivo/uniseg/width.go | 9 +- .../github.com/rivo/uniseg/wordproperties.go | 71 +- .../github.com/rivo/uniseg/wordrules.go | 160 +- tools/vendor/github.com/spf13/viper/README.md | 8 +- .../github.com/spf13/viper/TROUBLESHOOTING.md | 4 +- .../vendor/github.com/spf13/viper/flake.lock | 62 +- tools/vendor/github.com/spf13/viper/flake.nix | 1 + tools/vendor/github.com/spf13/viper/viper.go | 8 +- .../vendor/github.com/ulikunitz/xz/.gitignore | 28 - tools/vendor/github.com/ulikunitz/xz/LICENSE | 26 - .../vendor/github.com/ulikunitz/xz/README.md | 77 - .../github.com/ulikunitz/xz/SECURITY.md | 10 - tools/vendor/github.com/ulikunitz/xz/TODO.md | 372 ----- tools/vendor/github.com/ulikunitz/xz/bits.go | 79 - tools/vendor/github.com/ulikunitz/xz/crc.go | 54 - .../vendor/github.com/ulikunitz/xz/format.go | 721 --------- .../github.com/ulikunitz/xz/fox-check-none.xz | Bin 96 -> 0 bytes tools/vendor/github.com/ulikunitz/xz/fox.xz | Bin 104 -> 0 bytes .../ulikunitz/xz/internal/hash/cyclic_poly.go | 181 --- .../ulikunitz/xz/internal/hash/doc.go | 14 - .../ulikunitz/xz/internal/hash/rabin_karp.go | 66 - .../ulikunitz/xz/internal/hash/roller.go | 29 - .../ulikunitz/xz/internal/xlog/xlog.go | 456 ------ .../github.com/ulikunitz/xz/lzma/bintree.go | 522 ------- .../github.com/ulikunitz/xz/lzma/bitops.go | 47 - .../github.com/ulikunitz/xz/lzma/breader.go | 39 - .../github.com/ulikunitz/xz/lzma/buffer.go | 171 --- .../ulikunitz/xz/lzma/bytewriter.go | 37 - .../github.com/ulikunitz/xz/lzma/decoder.go | 277 ---- .../ulikunitz/xz/lzma/decoderdict.go | 128 -- .../ulikunitz/xz/lzma/directcodec.go | 38 - .../github.com/ulikunitz/xz/lzma/distcodec.go | 140 -- .../github.com/ulikunitz/xz/lzma/encoder.go | 268 ---- .../ulikunitz/xz/lzma/encoderdict.go | 149 -- .../github.com/ulikunitz/xz/lzma/fox.lzma | Bin 67 -> 0 bytes .../github.com/ulikunitz/xz/lzma/hashtable.go | 309 ---- .../github.com/ulikunitz/xz/lzma/header.go | 167 --- .../github.com/ulikunitz/xz/lzma/header2.go | 398 ----- .../ulikunitz/xz/lzma/lengthcodec.go | 115 -- .../ulikunitz/xz/lzma/literalcodec.go | 125 -- .../ulikunitz/xz/lzma/matchalgorithm.go | 52 - .../github.com/ulikunitz/xz/lzma/operation.go | 55 - .../github.com/ulikunitz/xz/lzma/prob.go | 53 - .../ulikunitz/xz/lzma/properties.go | 69 - .../ulikunitz/xz/lzma/rangecodec.go | 222 --- .../github.com/ulikunitz/xz/lzma/reader.go | 100 -- .../github.com/ulikunitz/xz/lzma/reader2.go | 231 --- .../github.com/ulikunitz/xz/lzma/state.go | 145 -- .../ulikunitz/xz/lzma/treecodecs.go | 133 -- .../github.com/ulikunitz/xz/lzma/writer.go | 209 --- .../github.com/ulikunitz/xz/lzma/writer2.go | 305 ---- .../github.com/ulikunitz/xz/lzmafilter.go | 117 -- .../vendor/github.com/ulikunitz/xz/make-docs | 5 - .../github.com/ulikunitz/xz/none-check.go | 23 - .../vendor/github.com/ulikunitz/xz/reader.go | 359 ----- .../vendor/github.com/ulikunitz/xz/writer.go | 399 ----- .../vbatts/tar-split/tar/asm/README.md | 44 - .../vbatts/tar-split/tar/asm/assemble.go | 132 -- .../vbatts/tar-split/tar/asm/disassemble.go | 156 -- .../vbatts/tar-split/tar/asm/doc.go | 9 - .../vbatts/tar-split/tar/storage/doc.go | 12 - .../vbatts/tar-split/tar/storage/entry.go | 78 - .../vbatts/tar-split/tar/storage/getter.go | 105 -- .../vbatts/tar-split/tar/storage/packer.go | 110 -- tools/vendor/go.etcd.io/bbolt/.go-version | 1 + tools/vendor/go.etcd.io/bbolt/README.md | 23 +- tools/vendor/go.etcd.io/bbolt/cursor.go | 11 +- tools/vendor/go.etcd.io/bbolt/freelist.go | 11 +- tools/vendor/go.etcd.io/bbolt/page.go | 6 +- tools/vendor/go.etcd.io/bbolt/unsafe.go | 12 - tools/vendor/golang.org/x/oauth2/LICENSE | 4 +- .../x/tools/cmd/stringer/stringer.go | 739 ---------- .../helm/v3/internal/version/version.go | 2 +- .../helm.sh/helm/v3/pkg/action/action.go | 8 +- .../helm.sh/helm/v3/pkg/action/install.go | 20 +- .../helm.sh/helm/v3/pkg/action/package.go | 2 +- .../helm.sh/helm/v3/pkg/action/upgrade.go | 10 +- .../helm.sh/helm/v3/pkg/chart/loader/load.go | 3 + .../helm.sh/helm/v3/pkg/chartutil/create.go | 2 +- .../helm.sh/helm/v3/pkg/cli/environment.go | 12 +- .../helm.sh/helm/v3/pkg/downloader/manager.go | 2 +- .../helm.sh/helm/v3/pkg/engine/engine.go | 2 +- .../helm.sh/helm/v3/pkg/getter/ocigetter.go | 1 + .../helm.sh/helm/v3/pkg/ignore/rules.go | 6 +- tools/vendor/helm.sh/helm/v3/pkg/kube/wait.go | 44 +- .../helm/v3/pkg/lint/rules/template.go | 4 +- .../helm.sh/helm/v3/pkg/pusher/ocipusher.go | 4 + .../helm.sh/helm/v3/pkg/registry/client.go | 18 +- .../helm.sh/helm/v3/pkg/registry/util.go | 13 +- .../helm.sh/helm/v3/pkg/repo/chartrepo.go | 2 +- .../helm.sh/helm/v3/pkg/storage/driver/sql.go | 12 +- .../helm.sh/helm/v3/pkg/storage/storage.go | 6 +- .../helm/v3/pkg/time/ctime/ctime.go} | 15 +- .../helm/v3/pkg/time/ctime/ctime_linux.go | 30 + .../helm/v3/pkg/time/ctime/ctime_other.go} | 17 +- .../k8s.io/cli-runtime/pkg/resource/mapper.go | 2 +- .../k8s.io/kubectl/pkg/cmd/util/helpers.go | 7 +- .../k8s.io/kubectl/pkg/scheme/install.go | 3 +- .../kubectl/de_DE/LC_MESSAGES/k8s.po | 4 +- .../kubectl/default/LC_MESSAGES/k8s.po | 4 +- .../kubectl/en_US/LC_MESSAGES/k8s.po | 4 +- .../kubectl/it_IT/LC_MESSAGES/k8s.po | 4 +- .../kubectl/ja_JP/LC_MESSAGES/k8s.po | 4 +- .../kubectl/pt_BR/LC_MESSAGES/k8s.po | 4 +- .../kubectl/zh_CN/LC_MESSAGES/k8s.po | 4 +- .../k8s.io/kubectl/pkg/util/openapi/doc.go | 2 +- tools/vendor/modules.txt | 291 ++-- .../controller-runtime/pkg/client/client.go | 26 +- .../pkg/client/fieldowner.go | 20 +- .../controllerutil/controllerutil.go | 20 +- .../kubebuilder/v3/pkg/config/v2/config.go | 267 ---- .../kubebuilder/v3/pkg/plugin/util/helpers.go | 38 - .../v3/pkg/plugins/common/kustomize/v1/api.go | 39 - .../pkg/plugins/common/kustomize/v1/create.go | 59 - .../pkg/plugins/common/kustomize/v1/init.go | 147 -- .../pkg/plugins/common/kustomize/v1/plugin.go | 73 - .../common/kustomize/v1/scaffolds/api.go | 89 -- .../common/kustomize/v1/scaffolds/init.go | 89 -- .../config/certmanager/certificate.go | 86 -- .../config/certmanager/kustomization.go | 51 - .../config/certmanager/kustomizeconfig.go | 63 - .../templates/config/crd/kustomization.go | 126 -- .../templates/config/crd/kustomizeconfig.go | 72 - .../crd/patches/enablecainjection_patch.go | 61 - .../config/crd/patches/enablewebhook_patch.go | 78 - .../config/kdefault/enablecainection_patch.go | 77 - .../config/kdefault/kustomization.go | 122 -- .../kdefault/manager_auth_proxy_patch.go | 87 -- .../config/kdefault/manager_config_patch.go | 66 - .../config/kdefault/webhook_manager_patch.go | 75 - .../templates/config/manager/config.go | 152 -- .../manager/controller_manager_config.go | 77 - .../templates/config/manager/kustomization.go | 59 - .../templates/config/prometheus/monitor.go | 70 - .../config/rbac/auth_proxy_client_role.go | 60 - .../templates/config/rbac/auth_proxy_role.go | 68 - .../config/rbac/auth_proxy_role_binding.go | 63 - .../config/rbac/auth_proxy_service.go | 65 - .../templates/config/rbac/crd_editor_role.go | 83 -- .../templates/config/rbac/crd_viewer_role.go | 79 - .../templates/config/rbac/kustomization.go | 63 - .../config/rbac/leader_election_role.go | 88 -- .../rbac/leader_election_role_binding.go | 63 - .../templates/config/rbac/role_binding.go | 63 - .../templates/config/rbac/service_account.go | 56 - .../templates/config/samples/crd_sample.go | 66 - .../config/webhook/kustomizeconfig.go | 72 - .../templates/config/webhook/service.go | 67 - .../common/kustomize/v1/scaffolds/webhook.go | 86 -- .../plugins/common/kustomize/v1/webhook.go | 39 - .../kdefault/manager_auth_proxy_patch.go | 87 -- .../config/kdefault/manager_config_patch.go | 66 - .../manager/controller_manager_config.go | 73 - .../config/prometheus/kustomization.go | 45 - .../config/rbac/auth_proxy_client_role.go | 56 - .../templates/config/rbac/auth_proxy_role.go | 64 - .../config/rbac/auth_proxy_role_binding.go | 59 - .../templates/config/webhook/kustomization.go | 59 - .../pkg/plugins/golang/declarative/v1/api.go | 150 -- .../pkg/plugins/golang/declarative/v1/init.go | 95 -- .../plugins/golang/declarative/v1/plugin.go | 82 -- .../golang/declarative/v1/scaffolds/api.go | 85 -- .../scaffolds/internal/templates/channel.go | 53 - .../internal/templates/controller.go | 150 -- .../scaffolds/internal/templates/manifest.go | 53 - .../v1/scaffolds/internal/templates/types.go | 157 -- .../v3/pkg/plugins/golang/v2/api.go | 176 --- .../v3/pkg/plugins/golang/v2/edit.go | 66 - .../v3/pkg/plugins/golang/v2/init.go | 187 --- .../v3/pkg/plugins/golang/v2/plugin.go | 75 - .../v3/pkg/plugins/golang/v2/scaffolds/api.go | 139 -- .../pkg/plugins/golang/v2/scaffolds/edit.go | 101 -- .../pkg/plugins/golang/v2/scaffolds/init.go | 145 -- .../scaffolds/internal/templates/api/group.go | 74 - .../scaffolds/internal/templates/api/types.go | 116 -- .../internal/templates/api/webhook.go | 141 -- .../config/certmanager/certificate.go | 69 - .../config/certmanager/kustomization.go | 48 - .../config/certmanager/kustomizeconfig.go | 60 - .../templates/config/crd/kustomization.go | 126 -- .../templates/config/crd/kustomizeconfig.go | 61 - .../crd/patches/enablecainjection_patch.go | 58 - .../config/crd/patches/enablewebhook_patch.go | 62 - .../config/kdefault/enablecainection_patch.go | 60 - .../config/kdefault/kustomization.go | 127 -- .../kdefault/manager_auth_proxy_patch.go | 70 - .../config/kdefault/webhook_manager_patch.go | 66 - .../templates/config/manager/config.go | 85 -- .../config/prometheus/kustomization.go | 45 - .../templates/config/prometheus/monitor.go | 63 - .../config/rbac/auth_proxy_client_role.go | 50 - .../templates/config/rbac/auth_proxy_role.go | 56 - .../config/rbac/auth_proxy_role_binding.go | 55 - .../config/rbac/auth_proxy_service.go | 57 - .../templates/config/rbac/crd_editor_role.go | 69 - .../templates/config/rbac/crd_viewer_role.go | 65 - .../templates/config/rbac/kustomization.go | 57 - .../config/rbac/leader_election_role.go | 76 - .../rbac/leader_election_role_binding.go | 55 - .../templates/config/rbac/role_binding.go | 55 - .../templates/config/samples/crd_sample.go | 59 - .../templates/config/webhook/kustomization.go | 51 - .../config/webhook/kustomizeconfig.go | 71 - .../templates/config/webhook/service.go | 57 - .../templates/controllers/controller.go | 120 -- .../controllers/controller_suitetest.go | 184 --- .../internal/templates/dockerfile.go | 68 - .../scaffolds/internal/templates/gitignore.go | 66 - .../v2/scaffolds/internal/templates/gomod.go | 54 - .../internal/templates/hack/boilerplate.go | 125 -- .../v2/scaffolds/internal/templates/main.go | 242 ---- .../scaffolds/internal/templates/makefile.go | 182 --- .../plugins/golang/v2/scaffolds/webhook.go | 91 -- .../v3/pkg/plugins/golang/v2/webhook.go | 119 -- .../v3/pkg/plugins/golang/v3/api.go | 214 --- .../v3/pkg/plugins/golang/v3/commons.go | 172 --- .../v3/pkg/plugins/golang/v3/edit.go | 66 - .../v3/pkg/plugins/golang/v3/init.go | 211 --- .../v3/pkg/plugins/golang/v3/plugin.go | 73 - .../v3/pkg/plugins/golang/v3/scaffolds/api.go | 114 -- .../pkg/plugins/golang/v3/scaffolds/edit.go | 102 -- .../pkg/plugins/golang/v3/scaffolds/init.go | 134 -- .../scaffolds/internal/templates/api/group.go | 78 - .../scaffolds/internal/templates/api/types.go | 124 -- .../internal/templates/api/webhook.go | 160 -- .../templates/api/webhook_suitetest.go | 244 ---- .../templates/controllers/controller.go | 119 -- .../controllers/controller_suitetest.go | 187 --- .../internal/templates/dockerfile.go | 74 - .../internal/templates/dockerignore.go | 45 - .../scaffolds/internal/templates/gitignore.go | 68 - .../v3/scaffolds/internal/templates/gomod.go | 54 - .../internal/templates/hack/boilerplate.go | 125 -- .../v3/scaffolds/internal/templates/main.go | 319 ---- .../scaffolds/internal/templates/makefile.go | 218 --- .../v3/scaffolds/internal/templates/readme.go | 129 -- .../plugins/golang/v3/scaffolds/webhook.go | 109 -- .../v3/pkg/plugins/golang/v3/webhook.go | 151 -- .../kubebuilder/{v3 => v4}/LICENSE | 0 .../kubebuilder/{v3 => v4}/pkg/cli/alpha.go | 4 +- .../{v3 => v4}/pkg/cli/alpha/generate.go | 2 +- .../kubebuilder/{v3 => v4}/pkg/cli/api.go | 2 +- .../kubebuilder/{v3 => v4}/pkg/cli/cli.go | 17 +- .../{v3 => v4}/pkg/cli/cmd_helpers.go | 12 +- .../{v3 => v4}/pkg/cli/completion.go | 0 .../kubebuilder/{v3 => v4}/pkg/cli/create.go | 0 .../kubebuilder/{v3 => v4}/pkg/cli/doc.go | 0 .../kubebuilder/{v3 => v4}/pkg/cli/edit.go | 2 +- .../kubebuilder/{v3 => v4}/pkg/cli/init.go | 4 +- .../kubebuilder/{v3 => v4}/pkg/cli/options.go | 24 +- .../{v3 => v4}/pkg/cli/resource.go | 2 +- .../kubebuilder/{v3 => v4}/pkg/cli/root.go | 0 .../kubebuilder/{v3 => v4}/pkg/cli/version.go | 0 .../kubebuilder/{v3 => v4}/pkg/cli/webhook.go | 2 +- .../{v3 => v4}/pkg/config/errors.go | 2 +- .../{v3 => v4}/pkg/config/interface.go | 12 +- .../{v3 => v4}/pkg/config/registry.go | 0 .../{v3 => v4}/pkg/config/store/errors.go | 0 .../{v3 => v4}/pkg/config/store/interface.go | 2 +- .../{v3 => v4}/pkg/config/store/yaml/store.go | 6 +- .../{v3 => v4}/pkg/config/v3/config.go | 24 +- .../{v3 => v4}/pkg/config/version.go | 2 +- .../{v3 => v4}/pkg/internal/validation/dns.go | 0 .../{v3 => v4}/pkg/machinery/errors.go | 0 .../{v3 => v4}/pkg/machinery/file.go | 0 .../{v3 => v4}/pkg/machinery/filesystem.go | 0 .../{v3 => v4}/pkg/machinery/funcmap.go | 0 .../{v3 => v4}/pkg/machinery/injector.go | 7 +- .../{v3 => v4}/pkg/machinery/interfaces.go | 16 +- .../{v3 => v4}/pkg/machinery/marker.go | 38 +- .../{v3 => v4}/pkg/machinery/mixins.go | 21 +- .../{v3 => v4}/pkg/machinery/scaffold.go | 4 +- .../{v3 => v4}/pkg/model/resource/api.go | 0 .../{v3 => v4}/pkg/model/resource/gvk.go | 14 +- .../{v3 => v4}/pkg/model/resource/resource.go | 2 +- .../{v3 => v4}/pkg/model/resource/utils.go | 0 .../{v3 => v4}/pkg/model/resource/webhooks.go | 0 .../{v3 => v4}/pkg/model/stage/stage.go | 0 .../{v3 => v4}/pkg/plugin/bundle.go | 40 +- .../{v3 => v4}/pkg/plugin/errors.go | 0 .../{v3 => v4}/pkg/plugin/external/types.go | 2 +- .../{v3 => v4}/pkg/plugin/filter.go | 2 +- .../{v3 => v4}/pkg/plugin/helpers.go | 24 +- .../{v3 => v4}/pkg/plugin/metadata.go | 0 .../{v3 => v4}/pkg/plugin/plugin.go | 2 +- .../{v3 => v4}/pkg/plugin/subcommand.go | 6 +- .../{v3 => v4}/pkg/plugin/util/exec.go | 0 .../{v3 => v4}/pkg/plugin/util/stdin.go | 0 .../{v3 => v4}/pkg/plugin/util/util.go | 72 + .../{v3 => v4}/pkg/plugin/version.go | 2 +- .../pkg/plugins/common/kustomize/v2/api.go | 6 +- .../pkg/plugins/common/kustomize/v2/create.go | 4 +- .../pkg/plugins/common/kustomize/v2/init.go | 28 +- .../pkg/plugins/common/kustomize/v2/plugin.go | 12 +- .../common/kustomize/v2/scaffolds/api.go | 43 +- .../common/kustomize/v2/scaffolds/init.go | 29 +- .../config/certmanager/certificate.go | 2 +- .../config/certmanager/kustomization.go | 2 +- .../config/certmanager/kustomizeconfig.go | 2 +- .../templates/config/crd/kustomization.go | 2 +- .../templates/config/crd/kustomizeconfig.go | 2 +- .../crd/patches/enablecainjection_patch.go | 2 +- .../config/crd/patches/enablewebhook_patch.go | 2 +- .../config/kdefault/enablecainection_patch.go | 2 +- .../config/kdefault/kustomization.go | 22 +- .../config/kdefault/manager_metrics_patch.go} | 34 +- .../config/kdefault/metrics_service.go} | 20 +- .../config/kdefault/webhook_manager_patch.go | 6 +- .../templates/config/manager/config.go | 8 +- .../templates/config/manager/kustomization.go | 4 +- .../config/prometheus/kustomization.go | 2 +- .../templates/config/prometheus/monitor.go | 13 +- .../templates/config/rbac/crd_editor_role.go | 2 +- .../templates/config/rbac/crd_viewer_role.go | 2 +- .../templates/config/rbac/kustomization.go | 18 +- .../config/rbac/leader_election_role.go | 2 +- .../rbac/leader_election_role_binding.go | 2 +- .../config/rbac/metrics_auth_role.go | 58 + .../config/rbac/metrics_auth_role_binding.go | 53 + .../config/rbac/metrics_reader_role.go | 50 + .../internal/templates/config/rbac/role.go | 2 +- .../templates/config/rbac/role_binding.go | 2 +- .../templates/config/rbac/service_account.go | 2 +- .../templates/config/samples/crd_sample.go | 2 +- .../templates/config/samples/kustomization.go | 2 +- .../templates/config/webhook/kustomization.go | 2 +- .../config/webhook/kustomizeconfig.go | 2 +- .../templates/config/webhook/service.go | 2 +- .../common/kustomize/v2/scaffolds/webhook.go | 31 +- .../plugins/common/kustomize/v2/webhook.go | 6 +- .../{v3 => v4}/pkg/plugins/domain.go | 0 .../{v3 => v4}/pkg/plugins/external/api.go | 8 +- .../{v3 => v4}/pkg/plugins/external/edit.go | 6 +- .../pkg/plugins/external/helpers.go | 6 +- .../{v3 => v4}/pkg/plugins/external/init.go | 6 +- .../{v3 => v4}/pkg/plugins/external/plugin.go | 4 +- .../pkg/plugins/external/webhook.go | 8 +- .../golang/deploy-image/v1alpha1/api.go | 45 +- .../golang/deploy-image/v1alpha1/plugin.go | 10 +- .../deploy-image/v1alpha1/scaffolds/api.go | 86 +- .../scaffolds/internal/templates/api/types.go | 35 +- .../templates/config/samples/crd_sample.go | 2 +- .../templates/controllers/controller-test.go | 23 +- .../templates/controllers/controller.go | 34 +- .../{v3 => v4}/pkg/plugins/golang/domain.go | 2 +- .../pkg/plugins/golang/go_version.go | 0 .../{v3 => v4}/pkg/plugins/golang/options.go | 38 +- .../pkg/plugins/golang/repository.go | 0 .../{v3 => v4}/pkg/plugins/golang/v4/api.go | 21 +- .../{v3 => v4}/pkg/plugins/golang/v4/edit.go | 8 +- .../{v3 => v4}/pkg/plugins/golang/v4/init.go | 12 +- .../pkg/plugins/golang/v4/plugin.go | 10 +- .../pkg/plugins/golang/v4/scaffolds/api.go | 16 +- .../pkg/plugins/golang/v4/scaffolds/doc.go | 0 .../pkg/plugins/golang/v4/scaffolds/edit.go | 6 +- .../pkg/plugins/golang/v4/scaffolds/init.go | 34 +- .../scaffolds/internal/templates/api/group.go | 6 +- .../scaffolds/internal/templates/api/types.go | 14 +- .../internal/templates/api/webhook.go | 6 +- .../templates/api/webhook_suitetest.go | 2 +- .../templates/api/webhook_test_template.go | 2 +- .../templates/controllers/controller.go | 8 +- .../controllers/controller_suitetest.go | 2 +- .../controllers/controller_test_template.go | 2 +- .../internal/templates/dockerfile.go | 4 +- .../internal/templates/dockerignore.go | 2 +- .../scaffolds/internal/templates/gitignore.go | 2 +- .../scaffolds/internal/templates/golangci.go | 9 +- .../v4/scaffolds/internal/templates/gomod.go | 4 +- .../internal/templates/hack/boilerplate.go | 2 +- .../v4/scaffolds/internal/templates/main.go | 80 +- .../scaffolds/internal/templates/makefile.go | 35 +- .../v4/scaffolds/internal/templates/readme.go | 4 +- .../internal/templates/test/e2e/suite.go | 4 +- .../internal/templates/test/e2e/test.go | 2 +- .../internal/templates/test/utils/utils.go | 10 +- .../plugins/golang/v4/scaffolds/webhook.go | 14 +- .../pkg/plugins/golang/v4/webhook.go | 19 +- .../optional/grafana/v1alpha/commons.go | 2 +- .../optional/grafana/v1alpha/constants.go | 0 .../plugins/optional/grafana/v1alpha/edit.go | 8 +- .../plugins/optional/grafana/v1alpha/init.go | 8 +- .../optional/grafana/v1alpha/plugin.go | 10 +- .../grafana/v1alpha/scaffolds/edit.go | 8 +- .../grafana/v1alpha/scaffolds/init.go | 7 +- .../scaffolds/internal/templates/custom.go | 2 +- .../internal/templates/custom_metrics.go | 2 +- .../scaffolds/internal/templates/resources.go | 2 +- .../scaffolds/internal/templates/runtime.go | 2 +- .../{v3 => v4}/pkg/plugins/scaffolder.go | 2 +- .../{v3 => v4}/pkg/rescaffold/migrate.go | 18 +- 813 files changed, 10216 insertions(+), 36387 deletions(-) delete mode 100644 tools/vendor/github.com/BurntSushi/toml/decode_go116.go delete mode 100644 tools/vendor/github.com/Microsoft/go-winio/tools.go create mode 100644 tools/vendor/github.com/Microsoft/hcsshim/hnsaccelnet.go create mode 100644 tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_hive.go create mode 100644 tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value_type.go create mode 100644 tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsaccelnet.go create mode 100644 tools/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go create mode 100644 tools/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go rename tools/vendor/github.com/{opencontainers/runc => containerd/errdefs}/LICENSE (98%) create mode 100644 tools/vendor/github.com/containerd/errdefs/README.md rename tools/vendor/github.com/containerd/{containerd => }/errdefs/errors.go (100%) rename tools/vendor/github.com/containerd/{containerd => }/errdefs/grpc.go (100%) create mode 100644 tools/vendor/github.com/containers/image/v5/internal/multierr/multierr.go delete mode 100644 tools/vendor/github.com/containers/image/v5/pkg/compression/compression.go delete mode 100644 tools/vendor/github.com/containers/image/v5/pkg/compression/zstd.go delete mode 100644 tools/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go delete mode 100644 tools/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go delete mode 100644 tools/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go create mode 100644 tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go delete mode 100644 tools/vendor/github.com/containers/storage/pkg/homedir/homedir_others.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/open_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go create mode 100644 tools/vendor/github.com/cyphar/filepath-securejoin/testing_mocks_linux.go create mode 100644 tools/vendor/github.com/joelanford/ignore/.golangci.yml delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/deflate.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/dict_decoder.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/fast_encoder.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/huffman_code.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/inflate.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/inflate_gen.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level1.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level2.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level3.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level4.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level5.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/level6.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/matchlen_generic.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/regmask_amd64.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/regmask_other.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/stateless.go delete mode 100644 tools/vendor/github.com/klauspost/compress/flate/token.go delete mode 100644 tools/vendor/github.com/klauspost/pgzip/.gitignore delete mode 100644 tools/vendor/github.com/klauspost/pgzip/.travis.yml delete mode 100644 tools/vendor/github.com/klauspost/pgzip/LICENSE delete mode 100644 tools/vendor/github.com/klauspost/pgzip/README.md delete mode 100644 tools/vendor/github.com/klauspost/pgzip/gunzip.go delete mode 100644 tools/vendor/github.com/klauspost/pgzip/gzip.go create mode 100644 tools/vendor/github.com/moby/sys/user/LICENSE rename tools/vendor/github.com/{opencontainers/runc/libcontainer => moby/sys}/user/lookup_unix.go (100%) rename tools/vendor/github.com/{opencontainers/runc/libcontainer => moby/sys}/user/user.go (100%) rename tools/vendor/github.com/{opencontainers/runc/libcontainer => moby/sys}/user/user_fuzzer.go (100%) delete mode 100644 tools/vendor/github.com/opencontainers/runc/NOTICE create mode 100644 tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/null.go create mode 100644 tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/writerhook.go delete mode 100644 tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/init.go delete mode 100644 tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/plugin.go create mode 100644 tools/vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go rename tools/vendor/github.com/{klauspost/pgzip/GO_LICENSE => prometheus/client_golang/internal/github.com/golang/gddo/LICENSE} (96%) create mode 100644 tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go create mode 100644 tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/.gitignore delete mode 100644 tools/vendor/github.com/ulikunitz/xz/LICENSE delete mode 100644 tools/vendor/github.com/ulikunitz/xz/README.md delete mode 100644 tools/vendor/github.com/ulikunitz/xz/SECURITY.md delete mode 100644 tools/vendor/github.com/ulikunitz/xz/TODO.md delete mode 100644 tools/vendor/github.com/ulikunitz/xz/bits.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/crc.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/format.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/fox-check-none.xz delete mode 100644 tools/vendor/github.com/ulikunitz/xz/fox.xz delete mode 100644 tools/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/internal/hash/doc.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/internal/hash/roller.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/bintree.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/bitops.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/breader.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/buffer.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/decoder.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/directcodec.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/distcodec.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/encoder.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/fox.lzma delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/hashtable.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/header.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/header2.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/operation.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/prob.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/properties.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/reader.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/reader2.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/state.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/writer.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzma/writer2.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/lzmafilter.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/make-docs delete mode 100644 tools/vendor/github.com/ulikunitz/xz/none-check.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/reader.go delete mode 100644 tools/vendor/github.com/ulikunitz/xz/writer.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/asm/README.md delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/asm/doc.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/storage/doc.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/storage/entry.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/storage/getter.go delete mode 100644 tools/vendor/github.com/vbatts/tar-split/tar/storage/packer.go create mode 100644 tools/vendor/go.etcd.io/bbolt/.go-version delete mode 100644 tools/vendor/golang.org/x/tools/cmd/stringer/stringer.go rename tools/vendor/{sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/doc.go => helm.sh/helm/v3/pkg/time/ctime/ctime.go} (71%) create mode 100644 tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go rename tools/vendor/{sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/doc.go => helm.sh/helm/v3/pkg/time/ctime/ctime_other.go} (71%) delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v2/config.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/helpers.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/create.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/plugin.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/certificate.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_config_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/config.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/controller_manager_config.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/monitor.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_service.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_editor_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_viewer_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/service_account.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples/crd_sample.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/service.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_config_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/controller_manager_config.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/plugin.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/channel.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/controller.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/manifest.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/types.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/edit.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/plugin.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/edit.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/group.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/types.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/certificate.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/config.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/monitor.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/role_binding.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples/crd_sample.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomization.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/service.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller_suitetest.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/dockerfile.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gitignore.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gomod.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack/boilerplate.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/main.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/makefile.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/commons.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/edit.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/plugin.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/api.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/edit.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/init.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/group.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/types.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook_suitetest.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller_suitetest.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerfile.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerignore.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gitignore.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gomod.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack/boilerplate.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/makefile.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/readme.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/webhook.go delete mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/webhook.go rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/LICENSE (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/alpha.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/alpha/generate.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/api.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/cli.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/cmd_helpers.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/completion.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/create.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/doc.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/edit.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/init.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/options.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/resource.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/root.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/version.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/cli/webhook.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/errors.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/interface.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/registry.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/store/errors.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/store/interface.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/store/yaml/store.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/v3/config.go (93%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/config/version.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/internal/validation/dns.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/errors.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/file.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/filesystem.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/funcmap.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/injector.go (88%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/interfaces.go (78%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/marker.go (69%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/mixins.go (80%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/machinery/scaffold.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/resource/api.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/resource/gvk.go (90%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/resource/resource.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/resource/utils.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/resource/webhooks.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/model/stage/stage.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/bundle.go (64%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/errors.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/external/types.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/filter.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/helpers.go (82%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/metadata.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/plugin.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/subcommand.go (95%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/util/exec.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/util/stdin.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/util/util.go (78%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugin/version.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/api.go (86%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/create.go (93%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/init.go (70%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/plugin.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/api.go (78%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/init.go (76%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go (92%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go => v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_metrics_patch.go} (53%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go => v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/metrics_service.go} (70%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3/pkg/plugins/golang => v4/pkg/plugins/common/kustomize}/v2/scaffolds/internal/templates/config/manager/kustomization.go (93%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3/pkg/plugins/common/kustomize/v1 => v4/pkg/plugins/common/kustomize/v2}/scaffolds/internal/templates/config/prometheus/kustomization.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go (65%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go (76%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go (97%) create mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role.go create mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role_binding.go create mode 100644 tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_reader_role.go rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3/pkg/plugins/common/kustomize/v1 => v4/pkg/plugins/common/kustomize/v2}/scaffolds/internal/templates/config/webhook/kustomization.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go (82%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/common/kustomize/v2/webhook.go (86%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/domain.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/api.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/edit.go (90%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/helpers.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/init.go (90%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/plugin.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/external/webhook.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/api.go (83%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go (90%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go (76%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go (83%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/domain.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/go_version.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/options.go (70%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/repository.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/api.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/edit.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/init.go (95%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/plugin.go (90%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/api.go (88%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/doc.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/edit.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/init.go (83%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go (81%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go (88%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go (92%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go (95%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go (79%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go (92%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go (98%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go (93%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/scaffolds/webhook.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/golang/v4/webhook.go (86%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/commons.go (96%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/constants.go (100%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/edit.go (88%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/init.go (88%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/plugin.go (89%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go (95%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go (91%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go (97%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go (99%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/plugins/scaffolder.go (94%) rename tools/vendor/sigs.k8s.io/kubebuilder/{v3 => v4}/pkg/rescaffold/migrate.go (95%) diff --git a/tools/go.mod b/tools/go.mod index c489bc502..8202f5b96 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -4,7 +4,7 @@ go 1.22.0 toolchain go1.22.8 require ( - github.com/operator-framework/operator-sdk v1.37.0 + github.com/operator-framework/operator-sdk v1.38.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 google.golang.org/protobuf v1.35.2 sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20240102165319-7f316f1309b1 @@ -15,14 +15,14 @@ require ( require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/BurntSushi/toml v1.3.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Masterminds/squirrel v1.5.4 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/Microsoft/hcsshim v0.12.0-rc.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/hcsshim v0.12.5 // indirect github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -30,31 +30,32 @@ require ( github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect - github.com/containerd/cgroups/v3 v3.0.2 // indirect - github.com/containerd/containerd v1.7.12 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect + github.com/containerd/containerd v1.7.18 // indirect github.com/containerd/continuity v0.4.2 // indirect + github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect - github.com/containerd/ttrpc v1.2.2 // indirect + github.com/containerd/ttrpc v1.2.4 // indirect github.com/containerd/typeurl/v2 v2.1.1 // indirect - github.com/containers/common v0.57.1 // indirect - github.com/containers/image/v5 v5.29.0 // indirect + github.com/containers/common v0.60.4 // indirect + github.com/containers/image/v5 v5.32.2 // indirect github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect - github.com/containers/ocicrypt v1.1.9 // indirect - github.com/containers/storage v1.51.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/containers/ocicrypt v1.2.0 // indirect + github.com/containers/storage v1.55.0 // indirect + github.com/cyphar/filepath-securejoin v0.3.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v27.2.0+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v27.2.0+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.0 // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.11.2 // indirect github.com/evanphx/json-patch v5.7.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.8.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.18.0 // indirect github.com/fatih/structtag v1.1.0 // indirect @@ -69,21 +70,21 @@ require ( github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/jsonreference v0.20.4 // indirect - github.com/go-openapi/swag v0.22.9 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/gobuffalo/envy v1.6.5 // indirect github.com/gobuffalo/flect v1.0.3 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-migrate/migrate/v4 v4.17.0 // indirect + github.com/golang-migrate/migrate/v4 v4.17.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/cel-go v0.20.1 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-containerregistry v0.19.1 // indirect + github.com/google/go-containerregistry v0.20.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.6.0 // indirect @@ -103,12 +104,11 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect - github.com/joelanford/ignore v0.0.0-20210607151042-0d25dc18b62d // indirect + github.com/joelanford/ignore v0.1.0 // indirect github.com/joho/godotenv v1.3.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.4 // indirect - github.com/klauspost/pgzip v1.2.6 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/text v0.2.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect @@ -119,7 +119,7 @@ require ( github.com/markbates/inflect v1.0.4 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -128,8 +128,9 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/spdystream v0.4.0 // indirect - github.com/moby/sys/mountinfo v0.7.1 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/user v0.2.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -138,23 +139,22 @@ require ( github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/onsi/gomega v1.34.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc6 // indirect - github.com/opencontainers/runc v1.1.14 // indirect - github.com/opencontainers/runtime-spec v1.1.0 // indirect - github.com/operator-framework/ansible-operator-plugins v1.35.0 // indirect - github.com/operator-framework/api v0.23.0 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/operator-framework/ansible-operator-plugins v1.36.1 // indirect + github.com/operator-framework/api v0.24.0 // indirect github.com/operator-framework/operator-manifest-tools v0.6.0 // indirect - github.com/operator-framework/operator-registry v1.39.0 // indirect + github.com/operator-framework/operator-registry v1.42.0 // indirect github.com/otiai10/copy v1.14.0 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect @@ -167,20 +167,19 @@ require ( github.com/spf13/cast v1.6.0 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.2 // indirect + github.com/spf13/viper v1.19.0 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect github.com/stretchr/testify v1.9.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/thoas/go-funk v0.8.0 // indirect - github.com/ulikunitz/xz v0.5.11 // indirect github.com/vbatts/tar-split v0.11.5 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect - go.etcd.io/bbolt v1.3.9 // indirect + go.etcd.io/bbolt v1.3.10 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect go.opentelemetry.io/otel v1.28.0 // indirect @@ -196,14 +195,14 @@ require ( golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/mod v0.21.0 // indirect golang.org/x/net v0.30.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.26.0 // indirect golang.org/x/term v0.25.0 // indirect golang.org/x/text v0.19.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.26.0 // indirect - google.golang.org/genproto v0.0.0-20240221002015-b0ce06bbee7c // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/grpc v1.65.0 // indirect @@ -213,23 +212,23 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - helm.sh/helm/v3 v3.14.3 // indirect + helm.sh/helm/v3 v3.15.4 // indirect k8s.io/api v0.31.2 // indirect k8s.io/apiextensions-apiserver v0.31.2 // indirect k8s.io/apimachinery v0.31.2 // indirect k8s.io/apiserver v0.31.2 // indirect - k8s.io/cli-runtime v0.29.3 // indirect + k8s.io/cli-runtime v0.30.5 // indirect k8s.io/client-go v0.31.2 // indirect k8s.io/component-base v0.31.2 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect - k8s.io/kubectl v0.29.3 // indirect + k8s.io/kubectl v0.30.5 // indirect k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect oras.land/oras-go v1.2.5 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect - sigs.k8s.io/controller-runtime v0.17.4 // indirect + sigs.k8s.io/controller-runtime v0.18.5 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/kubebuilder/v3 v3.14.2 // indirect + sigs.k8s.io/kubebuilder/v4 v4.1.1 // indirect sigs.k8s.io/kustomize/api v0.18.0 // indirect sigs.k8s.io/kustomize/cmd/config v0.15.0 // indirect sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect diff --git a/tools/go.sum b/tools/go.sum index 227ed1a51..58c6184de 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -4,8 +4,8 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= @@ -19,16 +19,12 @@ github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Microsoft/hcsshim v0.12.0-rc.1 h1:Hy+xzYujv7urO5wrgcG58SPMOXNLrj4WCJbySs2XX/A= -github.com/Microsoft/hcsshim v0.12.0-rc.1/go.mod h1:Y1a1S0QlYp1mBpyvGiuEdOfZqnao+0uX5AWHXQ5NhZU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.5 h1:bpTInLlDy/nDRWFVcefDZZ1+U8tS+rz3MxjKgu9boo0= +github.com/Microsoft/hcsshim v0.12.5/go.mod h1:tIUGego4G1EN5Hb6KC90aDYiUI2dqLSTTOCjVNpOgZ8= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= @@ -52,30 +48,32 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= 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/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0= -github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= -github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0= -github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJPUuO8nao= +github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4= github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= +github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= -github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs= -github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak= +github.com/containerd/ttrpc v1.2.4 h1:eQCQK4h9dxDmpOb9QOOMh2NHTfzroH1IkmHiKZi05Oo= +github.com/containerd/ttrpc v1.2.4/go.mod h1:ojvb8SJBSch0XkqNO0L0YX/5NxR3UnVk2LzFKBK0upc= github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= -github.com/containers/common v0.57.1 h1:KWAs4PMPgBFmBV4QNbXhUB8TqvlgR95BJN2sbbXkWHY= -github.com/containers/common v0.57.1/go.mod h1:t/Z+/sFrapvFMEJe3YnecN49/Tae2wYEQShbEN6SRaU= -github.com/containers/image/v5 v5.29.0 h1:9+nhS/ZM7c4Kuzu5tJ0NMpxrgoryOJ2HAYTgG8Ny7j4= -github.com/containers/image/v5 v5.29.0/go.mod h1:kQ7qcDsps424ZAz24thD+x7+dJw1vgur3A9tTDsj97E= +github.com/containers/common v0.60.4 h1:H5+LAMHPZEqX6vVNOQ+IguVsaFl8kbO/SZ/VPXjxhy0= +github.com/containers/common v0.60.4/go.mod h1:I0upBi1qJX3QmzGbUOBN1LVP6RvkKhd3qQpZbQT+Q54= +github.com/containers/image/v5 v5.32.2 h1:SzNE2Y6sf9b1GJoC8qjCuMBXwQrACFp4p0RK15+4gmQ= +github.com/containers/image/v5 v5.32.2/go.mod h1:v1l73VeMugfj/QtKI+jhYbwnwFCFnNGckvbST3rQ5Hk= github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 h1:Qzk5C6cYglewc+UyGf6lc8Mj2UaPTHy/iF2De0/77CA= github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY= -github.com/containers/ocicrypt v1.1.9 h1:2Csfba4jse85Raxk5HIyEk8OwZNjRvfkhEGijOjIdEM= -github.com/containers/ocicrypt v1.1.9/go.mod h1:dTKx1918d8TDkxXvarscpNVY+lyPakPNFN4jwA9GBys= -github.com/containers/storage v1.51.0 h1:AowbcpiWXzAjHosKz7MKvPEqpyX+ryZA/ZurytRrFNA= -github.com/containers/storage v1.51.0/go.mod h1:ybl8a3j1PPtpyaEi/5A6TOFs+5TrEyObeKJzVtkUlfc= +github.com/containers/ocicrypt v1.2.0 h1:X14EgRK3xNFvJEfI5O4Qn4T3E25ANudSOZz/sirVuPM= +github.com/containers/ocicrypt v1.2.0/go.mod h1:ZNviigQajtdlxIZGibvblVuIFBKIuUI2M0QM12SD31U= +github.com/containers/storage v1.55.0 h1:wTWZ3YpcQf1F+dSP4KxG9iqDfpQY1otaUXjPpffuhgg= +github.com/containers/storage v1.55.0/go.mod h1:28cB81IDk+y7ok60Of6u52RbCeBRucbFOeLunhER1RQ= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -84,8 +82,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.3.1 h1:1V7cHiaW+C+39wEfpH6XlLBQo3j/PciWFrgfCLS8XrE= +github.com/cyphar/filepath-securejoin v0.3.1/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -102,8 +100,8 @@ github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBi github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v27.2.0+incompatible h1:Rk9nIVdfH3+Vz4cyI/uhbINhEZ/oLmc+CBXmH6fbNk4= github.com/docker/docker v27.2.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= -github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= @@ -116,15 +114,14 @@ github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/emicklei/go-restful/v3 v3.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU= github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro= -github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -133,7 +130,6 @@ github.com/fatih/structtag v1.1.0 h1:6j4mUV/ES2duvnAzKMFkN6/A5mCaNYPD3xfbAkLLOF8 github.com/fatih/structtag v1.1.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -142,18 +138,12 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.1.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= @@ -168,12 +158,12 @@ 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-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= -github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= -github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= -github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= +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/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-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -195,8 +185,8 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA 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-migrate/migrate/v4 v4.17.0 h1:rd40H3QXU0AA4IoLllFcEAEo9dYKRHYND2gB4p7xcaU= -github.com/golang-migrate/migrate/v4 v4.17.0/go.mod h1:+Cp2mtLP4/aXDTKb9wmXYitdrNx2HGs45rbWAo6OsKM= +github.com/golang-migrate/migrate/v4 v4.17.1 h1:4zQ6iqL6t6AiItphxJctQb3cFqWiSpMnX7wLTPnnYO4= +github.com/golang-migrate/migrate/v4 v4.17.1/go.mod h1:m8hinFyWBn0SA4QKHuKh175Pm9wjmxj3S2Mia7dbXzM= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -207,7 +197,6 @@ github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+Licev 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.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= @@ -230,13 +219,12 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/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.9/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/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= -github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/go-containerregistry v0.20.0 h1:wRqHpOeVh3DnenOrPy9xDOLdnLatiGuuNRVelR2gSbg= +github.com/google/go-containerregistry v0.20.0/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -284,18 +272,16 @@ github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= -github.com/joelanford/ignore v0.0.0-20210607151042-0d25dc18b62d h1:A2/B900ip/Z20TzkLeGRNy1s6J2HmH9AmGt+dHyqb4I= -github.com/joelanford/ignore v0.0.0-20210607151042-0d25dc18b62d/go.mod h1:7HQupe4vyNxMKXmM5DFuwXHsqwMyglcYmZBtlDPIcZ8= +github.com/joelanford/ignore v0.1.0 h1:VawbTDeg5EL+PN7W8gxVzGerfGpVo3gFdR5ZAqnkYRk= +github.com/joelanford/ignore v0.1.0/go.mod h1:Vb0PQMAQXK29fmiPjDukpO8I2NTcp1y8LbhFijD1/0o= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -307,23 +293,23 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 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.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 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/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= @@ -350,8 +336,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= @@ -374,10 +360,12 @@ github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= -github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= -github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.2.0 h1:OnpapJsRp25vkhw8TFG6OLJODNh/3rEwRWtJ3kakwRM= +github.com/moby/sys/user v0.2.0/go.mod h1:RYstrcWOJpVh+6qzUqp2bU3eaRpdiQeKGlKitaH0PM8= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -394,45 +382,41 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= -github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc6 h1:XDqvyKsJEbRtATzkgItUqBA7QHk58yxX1Ov9HERHNqU= -github.com/opencontainers/image-spec v1.1.0-rc6/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.14 h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w= -github.com/opencontainers/runc v1.1.14/go.mod h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA= -github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= -github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/operator-framework/ansible-operator-plugins v1.35.0 h1:ranI6NhcnAl2sokuwWI0OYqtcT/1fPIfEfWcMFLXUBg= -github.com/operator-framework/ansible-operator-plugins v1.35.0/go.mod h1:ehsR1S7COaxHD54t7/1CXuvnTkSiMxUqgJhTGVcH6Fs= -github.com/operator-framework/api v0.23.0 h1:kHymOwcHBpBVujT49SKOCd4EVG7Odwj4wl3NbOR2LLA= -github.com/operator-framework/api v0.23.0/go.mod h1:oKcFOz+Xc1UhMi2Pzcp6qsO7wjS4r+yP7EQprQBXrfM= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/operator-framework/ansible-operator-plugins v1.36.1 h1:6TNrJ04JWey/7McBzrawe9HQWGjSMtILfahC4nRKDx0= +github.com/operator-framework/ansible-operator-plugins v1.36.1/go.mod h1:vX76IEGaJ09L83swBQrfCwN5a4KErCpH5S+YMRZKOL0= +github.com/operator-framework/api v0.24.0 h1:fHynWEzuY/YhUTlsK9hd+QQ0bZcFakxCTdaZbFaVXbc= +github.com/operator-framework/api v0.24.0/go.mod h1:EXKrka63NyQDDpWZ+DGTDEliNV0xRq6UMZRoUPhilVM= github.com/operator-framework/operator-manifest-tools v0.6.0 h1:1fUP0ki3plXM6WivlcE6m5cV8fO2ZZVPHJM93vlgWJo= github.com/operator-framework/operator-manifest-tools v0.6.0/go.mod h1:rL+U7e+hpH87/kq88mbEprZpq25lwtJofsAFhq6Y/Wc= -github.com/operator-framework/operator-registry v1.39.0 h1:GiAlmA2h16sLpLjVIuURd2ANm7wYoUbssGCJbdGauYw= -github.com/operator-framework/operator-registry v1.39.0/go.mod h1:PxN7myibIBIHeXTNu65tIJkCl1HuFDMU3NN6jrPHJLs= -github.com/operator-framework/operator-sdk v1.37.0 h1:yRRv2+MNvGgWgPsrg4snJj1dsmkrjkrIQsI7sPGjCvY= -github.com/operator-framework/operator-sdk v1.37.0/go.mod h1:DAxga5gdjFfhRGZ8Cmqaz2ltwhqA+kr+pZ+jtImHgX0= +github.com/operator-framework/operator-registry v1.42.0 h1:nA52riRPqjbPY0fWzLyNlQWCeRNrj6yl6sl1V/i9WlA= +github.com/operator-framework/operator-registry v1.42.0/go.mod h1:885aA8D67sri3OWmNMFcplB/a3K7krWHJkLZUcSqDJ8= +github.com/operator-framework/operator-sdk v1.38.0 h1:chas0+n8WqUL7jzR98wBhoYsRWf9o30RIEKhQaxQWYw= +github.com/operator-framework/operator-sdk v1.38.0/go.mod h1:kOkheqZAf6lMPi/09ihOQvq9ZN0sbWu5zXnVX7oCIc4= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -443,8 +427,8 @@ github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjz 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.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +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= @@ -457,7 +441,6 @@ github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65 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.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -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/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= @@ -467,8 +450,8 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnA github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0= @@ -479,15 +462,12 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= @@ -501,8 +481,8 @@ github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -529,13 +509,12 @@ github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtse github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/thoas/go-funk v0.8.0 h1:JP9tKSvnpFVclYgDM0Is7FD9M4fhPvqA0s0BsXmzSRQ= github.com/thoas/go-funk v0.8.0/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -548,8 +527,8 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= -go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= +go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0= +go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ= go.etcd.io/etcd/api/v3 v3.5.14 h1:vHObSCxyB9zlF60w7qzAdTcGaglbJOpSj1Xj9+WGxq0= go.etcd.io/etcd/api/v3 v3.5.14/go.mod h1:BmtWcRlQvwa1h3G2jvKYwIQy4PkHlDej5t7uLMUdJUU= go.etcd.io/etcd/client/pkg/v3 v3.5.14 h1:SaNH6Y+rVEdxfpA2Jr5wkEvN6Zykme5+YnbCkxvuWxQ= @@ -601,11 +580,9 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/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-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-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= @@ -633,21 +610,19 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= @@ -656,23 +631,15 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h 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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= @@ -709,10 +676,9 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240221002015-b0ce06bbee7c h1:Zmyn5CV/jxzKnF+3d+xzbomACPwLQqVpLTpyXN5uTaQ= -google.golang.org/genproto v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= @@ -721,7 +687,6 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= @@ -743,7 +708,6 @@ google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt 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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= @@ -758,7 +722,6 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/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= @@ -767,10 +730,10 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= -gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -helm.sh/helm/v3 v3.14.3 h1:HmvRJlwyyt9HjgmAuxHbHv3PhMz9ir/XNWHyXfmnOP4= -helm.sh/helm/v3 v3.14.3/go.mod h1:v6myVbyseSBJTzhmeE39UcPLNv6cQK6qss3dvgAySaE= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +helm.sh/helm/v3 v3.15.4 h1:UFHd6oZ1IN3FsUZ7XNhOQDyQ2QYknBNWRHH57e9cbHY= +helm.sh/helm/v3 v3.15.4/go.mod h1:phOwlxqGSgppCY/ysWBNRhG3MtnpsttOzxaTK+Mt40E= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= @@ -781,8 +744,8 @@ k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.31.2 h1:VUzOEUGRCDi6kX1OyQ801m4A7AUPglpsmGvdsekmcI4= k8s.io/apiserver v0.31.2/go.mod h1:o3nKZR7lPlJqkU5I3Ove+Zx3JuoFjQobGX1Gctw6XuE= -k8s.io/cli-runtime v0.29.3 h1:r68rephmmytoywkw2MyJ+CxjpasJDQY7AGc3XY2iv1k= -k8s.io/cli-runtime v0.29.3/go.mod h1:aqVUsk86/RhaGJwDhHXH0jcdqBrgdF3bZWk4Z9D4mkM= +k8s.io/cli-runtime v0.30.5 h1:MWY6efoBVH3h0O6p2DgaQszabV5ZntHZwTHBkiz+PSI= +k8s.io/cli-runtime v0.30.5/go.mod h1:AKMWLDIJQUA5a7yEh5gmzkhpZqYpuDEVovanugfSnQk= k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= k8s.io/component-base v0.31.2 h1:Z1J1LIaC0AV+nzcPRFqfK09af6bZ4D1nAOpWsy9owlA= @@ -791,24 +754,24 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/kubectl v0.29.3 h1:RuwyyIU42MAISRIePaa8Q7A3U74Q9P4MoJbDFz9o3us= -k8s.io/kubectl v0.29.3/go.mod h1:yCxfY1dbwgVdEt2zkJ6d5NNLOhhWgTyrqACIoFhpdd4= +k8s.io/kubectl v0.30.5 h1:UHIdbLWHjL/+CaFc9ZESwpwdvpp9EDPLdgGolhMv8tQ= +k8s.io/kubectl v0.30.5/go.mod h1:Pr+NYcX5Lx8eG04B/0t1rzjWcXsvvbda8swiZV9plQw= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/controller-runtime v0.17.4 h1:AMf1E0+93/jLQ13fb76S6Atwqp24EQFCmNbG84GJxew= -sigs.k8s.io/controller-runtime v0.17.4/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +sigs.k8s.io/controller-runtime v0.18.5 h1:nTHio/W+Q4aBlQMgbnC5hZb4IjIidyrizMai9P6n4Rk= +sigs.k8s.io/controller-runtime v0.18.5/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20240102165319-7f316f1309b1 h1:1/GQWB9rabeYd3oANeTQH7OHrtShvVgH0FmqHWBpR6I= sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20240102165319-7f316f1309b1/go.mod h1:TF/lVLWS+JNNaVqJuDDictY2hZSXSsIHCx4FClMvqFg= sigs.k8s.io/controller-tools v0.16.5 h1:5k9FNRqziBPwqr17AMEPPV/En39ZBplLAdOwwQHruP4= sigs.k8s.io/controller-tools v0.16.5/go.mod h1:8vztuRVzs8IuuJqKqbXCSlXcw+lkAv/M2sTpg55qjMY= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kubebuilder/v3 v3.14.2 h1:LMZW8Y5eItnP4kh9tpp4Gs2Gd5V3DgLgzbNnXfMAShY= -sigs.k8s.io/kubebuilder/v3 v3.14.2/go.mod h1:gEZM8SUkewOQnpRDiewh4gmbQ1FMkT/CDlMddOg053M= +sigs.k8s.io/kubebuilder/v4 v4.1.1 h1:aUdzTq3FjpuNIqzlJRTtRJMKZBNQnTwd05PCu7xVeAY= +sigs.k8s.io/kubebuilder/v4 v4.1.1/go.mod h1:h5VTUGFardXU5BCjEgGuOkSzb86/Nhd3ojmcMZseiVU= sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= sigs.k8s.io/kustomize/api v0.18.0/go.mod h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U= sigs.k8s.io/kustomize/cmd/config v0.15.0 h1:WkdY8V2+8J+W00YbImXa2ke9oegfrHH79e+kywW7EdU= diff --git a/tools/vendor/github.com/BurntSushi/toml/README.md b/tools/vendor/github.com/BurntSushi/toml/README.md index 3651cfa96..639e6c399 100644 --- a/tools/vendor/github.com/BurntSushi/toml/README.md +++ b/tools/vendor/github.com/BurntSushi/toml/README.md @@ -9,7 +9,7 @@ See the [releases page](https://github.com/BurntSushi/toml/releases) for a changelog; this information is also in the git tag annotations (e.g. `git show v0.4.0`). -This library requires Go 1.13 or newer; add it to your go.mod with: +This library requires Go 1.18 or newer; add it to your go.mod with: % go get github.com/BurntSushi/toml@latest diff --git a/tools/vendor/github.com/BurntSushi/toml/decode.go b/tools/vendor/github.com/BurntSushi/toml/decode.go index 4d38f3bfc..7aaf462c9 100644 --- a/tools/vendor/github.com/BurntSushi/toml/decode.go +++ b/tools/vendor/github.com/BurntSushi/toml/decode.go @@ -6,7 +6,7 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" + "io/fs" "math" "os" "reflect" @@ -18,13 +18,13 @@ import ( // Unmarshaler is the interface implemented by objects that can unmarshal a // TOML description of themselves. type Unmarshaler interface { - UnmarshalTOML(interface{}) error + UnmarshalTOML(any) error } // Unmarshal decodes the contents of data in TOML format into a pointer v. // // See [Decoder] for a description of the decoding process. -func Unmarshal(data []byte, v interface{}) error { +func Unmarshal(data []byte, v any) error { _, err := NewDecoder(bytes.NewReader(data)).Decode(v) return err } @@ -32,12 +32,12 @@ func Unmarshal(data []byte, v interface{}) error { // Decode the TOML data in to the pointer v. // // See [Decoder] for a description of the decoding process. -func Decode(data string, v interface{}) (MetaData, error) { +func Decode(data string, v any) (MetaData, error) { return NewDecoder(strings.NewReader(data)).Decode(v) } // DecodeFile reads the contents of a file and decodes it with [Decode]. -func DecodeFile(path string, v interface{}) (MetaData, error) { +func DecodeFile(path string, v any) (MetaData, error) { fp, err := os.Open(path) if err != nil { return MetaData{}, err @@ -46,6 +46,17 @@ func DecodeFile(path string, v interface{}) (MetaData, error) { return NewDecoder(fp).Decode(v) } +// DecodeFS reads the contents of a file from [fs.FS] and decodes it with +// [Decode]. +func DecodeFS(fsys fs.FS, path string, v any) (MetaData, error) { + fp, err := fsys.Open(path) + if err != nil { + return MetaData{}, err + } + defer fp.Close() + return NewDecoder(fp).Decode(v) +} + // Primitive is a TOML value that hasn't been decoded into a Go value. // // This type can be used for any value, which will cause decoding to be delayed. @@ -58,7 +69,7 @@ func DecodeFile(path string, v interface{}) (MetaData, error) { // overhead of reflection. They can be useful when you don't know the exact type // of TOML data until runtime. type Primitive struct { - undecoded interface{} + undecoded any context Key } @@ -122,7 +133,7 @@ var ( ) // Decode TOML data in to the pointer `v`. -func (dec *Decoder) Decode(v interface{}) (MetaData, error) { +func (dec *Decoder) Decode(v any) (MetaData, error) { rv := reflect.ValueOf(v) if rv.Kind() != reflect.Ptr { s := "%q" @@ -136,8 +147,8 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) { return MetaData{}, fmt.Errorf("toml: cannot decode to nil value of %q", reflect.TypeOf(v)) } - // Check if this is a supported type: struct, map, interface{}, or something - // that implements UnmarshalTOML or UnmarshalText. + // Check if this is a supported type: struct, map, any, or something that + // implements UnmarshalTOML or UnmarshalText. rv = indirect(rv) rt := rv.Type() if rv.Kind() != reflect.Struct && rv.Kind() != reflect.Map && @@ -148,7 +159,7 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) { // TODO: parser should read from io.Reader? Or at the very least, make it // read from []byte rather than string - data, err := ioutil.ReadAll(dec.r) + data, err := io.ReadAll(dec.r) if err != nil { return MetaData{}, err } @@ -179,7 +190,7 @@ func (dec *Decoder) Decode(v interface{}) (MetaData, error) { // will only reflect keys that were decoded. Namely, any keys hidden behind a // Primitive will be considered undecoded. Executing this method will update the // undecoded keys in the meta data. (See the example.) -func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error { +func (md *MetaData) PrimitiveDecode(primValue Primitive, v any) error { md.context = primValue.context defer func() { md.context = nil }() return md.unify(primValue.undecoded, rvalue(v)) @@ -190,7 +201,7 @@ func (md *MetaData) PrimitiveDecode(primValue Primitive, v interface{}) error { // // Any type mismatch produces an error. Finding a type that we don't know // how to handle produces an unsupported type error. -func (md *MetaData) unify(data interface{}, rv reflect.Value) error { +func (md *MetaData) unify(data any, rv reflect.Value) error { // Special case. Look for a `Primitive` value. // TODO: #76 would make this superfluous after implemented. if rv.Type() == primitiveType { @@ -207,7 +218,11 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error { rvi := rv.Interface() if v, ok := rvi.(Unmarshaler); ok { - return v.UnmarshalTOML(data) + err := v.UnmarshalTOML(data) + if err != nil { + return md.parseErr(err) + } + return nil } if v, ok := rvi.(encoding.TextUnmarshaler); ok { return md.unifyText(data, v) @@ -227,14 +242,6 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error { return md.unifyInt(data, rv) } switch k { - case reflect.Ptr: - elem := reflect.New(rv.Type().Elem()) - err := md.unify(data, reflect.Indirect(elem)) - if err != nil { - return err - } - rv.Set(elem) - return nil case reflect.Struct: return md.unifyStruct(data, rv) case reflect.Map: @@ -258,14 +265,13 @@ func (md *MetaData) unify(data interface{}, rv reflect.Value) error { return md.e("unsupported type %s", rv.Kind()) } -func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error { - tmap, ok := mapping.(map[string]interface{}) +func (md *MetaData) unifyStruct(mapping any, rv reflect.Value) error { + tmap, ok := mapping.(map[string]any) if !ok { if mapping == nil { return nil } - return md.e("type mismatch for %s: expected table but found %T", - rv.Type().String(), mapping) + return md.e("type mismatch for %s: expected table but found %s", rv.Type().String(), fmtType(mapping)) } for key, datum := range tmap { @@ -304,14 +310,14 @@ func (md *MetaData) unifyStruct(mapping interface{}, rv reflect.Value) error { return nil } -func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error { +func (md *MetaData) unifyMap(mapping any, rv reflect.Value) error { keyType := rv.Type().Key().Kind() if keyType != reflect.String && keyType != reflect.Interface { return fmt.Errorf("toml: cannot decode to a map with non-string key type (%s in %q)", keyType, rv.Type()) } - tmap, ok := mapping.(map[string]interface{}) + tmap, ok := mapping.(map[string]any) if !ok { if tmap == nil { return nil @@ -347,7 +353,7 @@ func (md *MetaData) unifyMap(mapping interface{}, rv reflect.Value) error { return nil } -func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyArray(data any, rv reflect.Value) error { datav := reflect.ValueOf(data) if datav.Kind() != reflect.Slice { if !datav.IsValid() { @@ -361,7 +367,7 @@ func (md *MetaData) unifyArray(data interface{}, rv reflect.Value) error { return md.unifySliceArray(datav, rv) } -func (md *MetaData) unifySlice(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifySlice(data any, rv reflect.Value) error { datav := reflect.ValueOf(data) if datav.Kind() != reflect.Slice { if !datav.IsValid() { @@ -388,7 +394,7 @@ func (md *MetaData) unifySliceArray(data, rv reflect.Value) error { return nil } -func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyString(data any, rv reflect.Value) error { _, ok := rv.Interface().(json.Number) if ok { if i, ok := data.(int64); ok { @@ -408,7 +414,7 @@ func (md *MetaData) unifyString(data interface{}, rv reflect.Value) error { return md.badtype("string", data) } -func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyFloat64(data any, rv reflect.Value) error { rvk := rv.Kind() if num, ok := data.(float64); ok { @@ -429,7 +435,7 @@ func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { if num, ok := data.(int64); ok { if (rvk == reflect.Float32 && (num < -maxSafeFloat32Int || num > maxSafeFloat32Int)) || (rvk == reflect.Float64 && (num < -maxSafeFloat64Int || num > maxSafeFloat64Int)) { - return md.parseErr(errParseRange{i: num, size: rvk.String()}) + return md.parseErr(errUnsafeFloat{i: num, size: rvk.String()}) } rv.SetFloat(float64(num)) return nil @@ -438,7 +444,7 @@ func (md *MetaData) unifyFloat64(data interface{}, rv reflect.Value) error { return md.badtype("float", data) } -func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyInt(data any, rv reflect.Value) error { _, ok := rv.Interface().(time.Duration) if ok { // Parse as string duration, and fall back to regular integer parsing @@ -481,7 +487,7 @@ func (md *MetaData) unifyInt(data interface{}, rv reflect.Value) error { return nil } -func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyBool(data any, rv reflect.Value) error { if b, ok := data.(bool); ok { rv.SetBool(b) return nil @@ -489,12 +495,12 @@ func (md *MetaData) unifyBool(data interface{}, rv reflect.Value) error { return md.badtype("boolean", data) } -func (md *MetaData) unifyAnything(data interface{}, rv reflect.Value) error { +func (md *MetaData) unifyAnything(data any, rv reflect.Value) error { rv.Set(reflect.ValueOf(data)) return nil } -func (md *MetaData) unifyText(data interface{}, v encoding.TextUnmarshaler) error { +func (md *MetaData) unifyText(data any, v encoding.TextUnmarshaler) error { var s string switch sdata := data.(type) { case Marshaler: @@ -523,13 +529,13 @@ func (md *MetaData) unifyText(data interface{}, v encoding.TextUnmarshaler) erro return md.badtype("primitive (string-like)", data) } if err := v.UnmarshalText([]byte(s)); err != nil { - return err + return md.parseErr(err) } return nil } -func (md *MetaData) badtype(dst string, data interface{}) error { - return md.e("incompatible types: TOML value has type %T; destination has type %s", data, dst) +func (md *MetaData) badtype(dst string, data any) error { + return md.e("incompatible types: TOML value has type %s; destination has type %s", fmtType(data), dst) } func (md *MetaData) parseErr(err error) error { @@ -543,7 +549,7 @@ func (md *MetaData) parseErr(err error) error { } } -func (md *MetaData) e(format string, args ...interface{}) error { +func (md *MetaData) e(format string, args ...any) error { f := "toml: " if len(md.context) > 0 { f = fmt.Sprintf("toml: (last key %q): ", md.context) @@ -556,7 +562,7 @@ func (md *MetaData) e(format string, args ...interface{}) error { } // rvalue returns a reflect.Value of `v`. All pointers are resolved. -func rvalue(v interface{}) reflect.Value { +func rvalue(v any) reflect.Value { return indirect(reflect.ValueOf(v)) } @@ -600,3 +606,8 @@ func isUnifiable(rv reflect.Value) bool { } return false } + +// fmt %T with "interface {}" replaced with "any", which is far more readable. +func fmtType(t any) string { + return strings.ReplaceAll(fmt.Sprintf("%T", t), "interface {}", "any") +} diff --git a/tools/vendor/github.com/BurntSushi/toml/decode_go116.go b/tools/vendor/github.com/BurntSushi/toml/decode_go116.go deleted file mode 100644 index 086d0b686..000000000 --- a/tools/vendor/github.com/BurntSushi/toml/decode_go116.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build go1.16 -// +build go1.16 - -package toml - -import ( - "io/fs" -) - -// DecodeFS reads the contents of a file from [fs.FS] and decodes it with -// [Decode]. -func DecodeFS(fsys fs.FS, path string, v interface{}) (MetaData, error) { - fp, err := fsys.Open(path) - if err != nil { - return MetaData{}, err - } - defer fp.Close() - return NewDecoder(fp).Decode(v) -} diff --git a/tools/vendor/github.com/BurntSushi/toml/deprecated.go b/tools/vendor/github.com/BurntSushi/toml/deprecated.go index b9e309717..155709a80 100644 --- a/tools/vendor/github.com/BurntSushi/toml/deprecated.go +++ b/tools/vendor/github.com/BurntSushi/toml/deprecated.go @@ -15,15 +15,15 @@ type TextMarshaler encoding.TextMarshaler // Deprecated: use encoding.TextUnmarshaler type TextUnmarshaler encoding.TextUnmarshaler +// DecodeReader is an alias for NewDecoder(r).Decode(v). +// +// Deprecated: use NewDecoder(reader).Decode(&value). +func DecodeReader(r io.Reader, v any) (MetaData, error) { return NewDecoder(r).Decode(v) } + // PrimitiveDecode is an alias for MetaData.PrimitiveDecode(). // // Deprecated: use MetaData.PrimitiveDecode. -func PrimitiveDecode(primValue Primitive, v interface{}) error { +func PrimitiveDecode(primValue Primitive, v any) error { md := MetaData{decoded: make(map[string]struct{})} return md.unify(primValue.undecoded, rvalue(v)) } - -// DecodeReader is an alias for NewDecoder(r).Decode(v). -// -// Deprecated: use NewDecoder(reader).Decode(&value). -func DecodeReader(r io.Reader, v interface{}) (MetaData, error) { return NewDecoder(r).Decode(v) } diff --git a/tools/vendor/github.com/BurntSushi/toml/doc.go b/tools/vendor/github.com/BurntSushi/toml/doc.go index 81a7c0fe9..82c90a905 100644 --- a/tools/vendor/github.com/BurntSushi/toml/doc.go +++ b/tools/vendor/github.com/BurntSushi/toml/doc.go @@ -2,9 +2,6 @@ // // This package supports TOML v1.0.0, as specified at https://toml.io // -// There is also support for delaying decoding with the Primitive type, and -// querying the set of keys in a TOML document with the MetaData type. -// // The github.com/BurntSushi/toml/cmd/tomlv package implements a TOML validator, // and can be used to verify if TOML document is valid. It can also be used to // print the type of each key. diff --git a/tools/vendor/github.com/BurntSushi/toml/encode.go b/tools/vendor/github.com/BurntSushi/toml/encode.go index 9cd25d757..73366c0d9 100644 --- a/tools/vendor/github.com/BurntSushi/toml/encode.go +++ b/tools/vendor/github.com/BurntSushi/toml/encode.go @@ -2,6 +2,7 @@ package toml import ( "bufio" + "bytes" "encoding" "encoding/json" "errors" @@ -76,6 +77,17 @@ type Marshaler interface { MarshalTOML() ([]byte, error) } +// Marshal returns a TOML representation of the Go value. +// +// See [Encoder] for a description of the encoding process. +func Marshal(v any) ([]byte, error) { + buff := new(bytes.Buffer) + if err := NewEncoder(buff).Encode(v); err != nil { + return nil, err + } + return buff.Bytes(), nil +} + // Encoder encodes a Go to a TOML document. // // The mapping between Go values and TOML values should be precisely the same as @@ -115,26 +127,21 @@ type Marshaler interface { // NOTE: only exported keys are encoded due to the use of reflection. Unexported // keys are silently discarded. type Encoder struct { - // String to use for a single indentation level; default is two spaces. - Indent string - + Indent string // string for a single indentation level; default is two spaces. + hasWritten bool // written any output to w yet? w *bufio.Writer - hasWritten bool // written any output to w yet? } // NewEncoder create a new Encoder. func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - w: bufio.NewWriter(w), - Indent: " ", - } + return &Encoder{w: bufio.NewWriter(w), Indent: " "} } // Encode writes a TOML representation of the Go value to the [Encoder]'s writer. // // An error is returned if the value given cannot be encoded to a valid TOML // document. -func (enc *Encoder) Encode(v interface{}) error { +func (enc *Encoder) Encode(v any) error { rv := eindirect(reflect.ValueOf(v)) err := enc.safeEncode(Key([]string{}), rv) if err != nil { @@ -280,18 +287,30 @@ func (enc *Encoder) eElement(rv reflect.Value) { case reflect.Float32: f := rv.Float() if math.IsNaN(f) { + if math.Signbit(f) { + enc.wf("-") + } enc.wf("nan") } else if math.IsInf(f, 0) { - enc.wf("%cinf", map[bool]byte{true: '-', false: '+'}[math.Signbit(f)]) + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("inf") } else { enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 32))) } case reflect.Float64: f := rv.Float() if math.IsNaN(f) { + if math.Signbit(f) { + enc.wf("-") + } enc.wf("nan") } else if math.IsInf(f, 0) { - enc.wf("%cinf", map[bool]byte{true: '-', false: '+'}[math.Signbit(f)]) + if math.Signbit(f) { + enc.wf("-") + } + enc.wf("inf") } else { enc.wf(floatAddDecimal(strconv.FormatFloat(f, 'f', -1, 64))) } @@ -304,7 +323,7 @@ func (enc *Encoder) eElement(rv reflect.Value) { case reflect.Interface: enc.eElement(rv.Elem()) default: - encPanic(fmt.Errorf("unexpected type: %T", rv.Interface())) + encPanic(fmt.Errorf("unexpected type: %s", fmtType(rv.Interface()))) } } @@ -712,7 +731,7 @@ func (enc *Encoder) writeKeyValue(key Key, val reflect.Value, inline bool) { } } -func (enc *Encoder) wf(format string, v ...interface{}) { +func (enc *Encoder) wf(format string, v ...any) { _, err := fmt.Fprintf(enc.w, format, v...) if err != nil { encPanic(err) diff --git a/tools/vendor/github.com/BurntSushi/toml/error.go b/tools/vendor/github.com/BurntSushi/toml/error.go index efd68865b..b45a3f45f 100644 --- a/tools/vendor/github.com/BurntSushi/toml/error.go +++ b/tools/vendor/github.com/BurntSushi/toml/error.go @@ -114,13 +114,22 @@ func (pe ParseError) ErrorWithPosition() string { msg, pe.Position.Line, col, col+pe.Position.Len) } if pe.Position.Line > 2 { - fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-2, lines[pe.Position.Line-3]) + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-2, expandTab(lines[pe.Position.Line-3])) } if pe.Position.Line > 1 { - fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-1, lines[pe.Position.Line-2]) + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line-1, expandTab(lines[pe.Position.Line-2])) } - fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line, lines[pe.Position.Line-1]) - fmt.Fprintf(b, "% 10s%s%s\n", "", strings.Repeat(" ", col), strings.Repeat("^", pe.Position.Len)) + + /// Expand tabs, so that the ^^^s are at the correct position, but leave + /// "column 10-13" intact. Adjusting this to the visual column would be + /// better, but we don't know the tabsize of the user in their editor, which + /// can be 8, 4, 2, or something else. We can't know. So leaving it as the + /// character index is probably the "most correct". + expanded := expandTab(lines[pe.Position.Line-1]) + diff := len(expanded) - len(lines[pe.Position.Line-1]) + + fmt.Fprintf(b, "% 7d | %s\n", pe.Position.Line, expanded) + fmt.Fprintf(b, "% 10s%s%s\n", "", strings.Repeat(" ", col+diff), strings.Repeat("^", pe.Position.Len)) return b.String() } @@ -159,17 +168,47 @@ func (pe ParseError) column(lines []string) int { return col } +func expandTab(s string) string { + var ( + b strings.Builder + l int + fill = func(n int) string { + b := make([]byte, n) + for i := range b { + b[i] = ' ' + } + return string(b) + } + ) + b.Grow(len(s)) + for _, r := range s { + switch r { + case '\t': + tw := 8 - l%8 + b.WriteString(fill(tw)) + l += tw + default: + b.WriteRune(r) + l += 1 + } + } + return b.String() +} + type ( errLexControl struct{ r rune } errLexEscape struct{ r rune } errLexUTF8 struct{ b byte } - errLexInvalidNum struct{ v string } - errLexInvalidDate struct{ v string } + errParseDate struct{ v string } errLexInlineTableNL struct{} errLexStringNL struct{} errParseRange struct { - i interface{} // int or float - size string // "int64", "uint16", etc. + i any // int or float + size string // "int64", "uint16", etc. + } + errUnsafeFloat struct { + i interface{} // float32 or float64 + size string // "float32" or "float64" } errParseDuration struct{ d string } ) @@ -183,18 +222,20 @@ func (e errLexEscape) Error() string { return fmt.Sprintf(`invalid escape func (e errLexEscape) Usage() string { return usageEscape } func (e errLexUTF8) Error() string { return fmt.Sprintf("invalid UTF-8 byte: 0x%02x", e.b) } func (e errLexUTF8) Usage() string { return "" } -func (e errLexInvalidNum) Error() string { return fmt.Sprintf("invalid number: %q", e.v) } -func (e errLexInvalidNum) Usage() string { return "" } -func (e errLexInvalidDate) Error() string { return fmt.Sprintf("invalid date: %q", e.v) } -func (e errLexInvalidDate) Usage() string { return "" } +func (e errParseDate) Error() string { return fmt.Sprintf("invalid datetime: %q", e.v) } +func (e errParseDate) Usage() string { return usageDate } func (e errLexInlineTableNL) Error() string { return "newlines not allowed within inline tables" } func (e errLexInlineTableNL) Usage() string { return usageInlineNewline } func (e errLexStringNL) Error() string { return "strings cannot contain newlines" } func (e errLexStringNL) Usage() string { return usageStringNewline } func (e errParseRange) Error() string { return fmt.Sprintf("%v is out of range for %s", e.i, e.size) } func (e errParseRange) Usage() string { return usageIntOverflow } -func (e errParseDuration) Error() string { return fmt.Sprintf("invalid duration: %q", e.d) } -func (e errParseDuration) Usage() string { return usageDuration } +func (e errUnsafeFloat) Error() string { + return fmt.Sprintf("%v is out of the safe %s range", e.i, e.size) +} +func (e errUnsafeFloat) Usage() string { return usageUnsafeFloat } +func (e errParseDuration) Error() string { return fmt.Sprintf("invalid duration: %q", e.d) } +func (e errParseDuration) Usage() string { return usageDuration } const usageEscape = ` A '\' inside a "-delimited string is interpreted as an escape character. @@ -251,19 +292,35 @@ bug in the program that uses too small of an integer. The maximum and minimum values are: size │ lowest │ highest - ───────┼────────────────┼────────── + ───────┼────────────────┼────────────── int8 │ -128 │ 127 int16 │ -32,768 │ 32,767 int32 │ -2,147,483,648 │ 2,147,483,647 int64 │ -9.2 × 10¹⁷ │ 9.2 × 10¹⁷ uint8 │ 0 │ 255 - uint16 │ 0 │ 65535 - uint32 │ 0 │ 4294967295 + uint16 │ 0 │ 65,535 + uint32 │ 0 │ 4,294,967,295 uint64 │ 0 │ 1.8 × 10¹⁸ int refers to int32 on 32-bit systems and int64 on 64-bit systems. ` +const usageUnsafeFloat = ` +This number is outside of the "safe" range for floating point numbers; whole +(non-fractional) numbers outside the below range can not always be represented +accurately in a float, leading to some loss of accuracy. + +Explicitly mark a number as a fractional unit by adding ".0", which will incur +some loss of accuracy; for example: + + f = 2_000_000_000.0 + +Accuracy ranges: + + float32 = 16,777,215 + float64 = 9,007,199,254,740,991 +` + const usageDuration = ` A duration must be as "number", without any spaces. Valid units are: @@ -277,3 +334,23 @@ A duration must be as "number", without any spaces. Valid units are: You can combine multiple units; for example "5m10s" for 5 minutes and 10 seconds. ` + +const usageDate = ` +A TOML datetime must be in one of the following formats: + + 2006-01-02T15:04:05Z07:00 Date and time, with timezone. + 2006-01-02T15:04:05 Date and time, but without timezone. + 2006-01-02 Date without a time or timezone. + 15:04:05 Just a time, without any timezone. + +Seconds may optionally have a fraction, up to nanosecond precision: + + 15:04:05.123 + 15:04:05.856018510 +` + +// TOML 1.1: +// The seconds part in times is optional, and may be omitted: +// 2006-01-02T15:04Z07:00 +// 2006-01-02T15:04 +// 15:04 diff --git a/tools/vendor/github.com/BurntSushi/toml/lex.go b/tools/vendor/github.com/BurntSushi/toml/lex.go index 3545a6ad6..a1016d98a 100644 --- a/tools/vendor/github.com/BurntSushi/toml/lex.go +++ b/tools/vendor/github.com/BurntSushi/toml/lex.go @@ -17,6 +17,7 @@ const ( itemEOF itemText itemString + itemStringEsc itemRawString itemMultilineString itemRawMultilineString @@ -53,6 +54,7 @@ type lexer struct { state stateFn items chan item tomlNext bool + esc bool // Allow for backing up up to 4 runes. This is necessary because TOML // contains 3-rune tokens (""" and '''). @@ -164,7 +166,7 @@ func (lx *lexer) next() (r rune) { } r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) - if r == utf8.RuneError { + if r == utf8.RuneError && w == 1 { lx.error(errLexUTF8{lx.input[lx.pos]}) return utf8.RuneError } @@ -270,7 +272,7 @@ func (lx *lexer) errorPos(start, length int, err error) stateFn { } // errorf is like error, and creates a new error. -func (lx *lexer) errorf(format string, values ...interface{}) stateFn { +func (lx *lexer) errorf(format string, values ...any) stateFn { if lx.atEOF { pos := lx.getPos() pos.Line-- @@ -333,9 +335,7 @@ func lexTopEnd(lx *lexer) stateFn { lx.emit(itemEOF) return nil } - return lx.errorf( - "expected a top-level item to end with a newline, comment, or EOF, but got %q instead", - r) + return lx.errorf("expected a top-level item to end with a newline, comment, or EOF, but got %q instead", r) } // lexTable lexes the beginning of a table. Namely, it makes sure that @@ -698,7 +698,12 @@ func lexString(lx *lexer) stateFn { return lexStringEscape case r == '"': lx.backup() - lx.emit(itemString) + if lx.esc { + lx.esc = false + lx.emit(itemStringEsc) + } else { + lx.emit(itemString) + } lx.next() lx.ignore() return lx.pop() @@ -748,6 +753,7 @@ func lexMultilineString(lx *lexer) stateFn { lx.backup() /// backup: don't include the """ in the item. lx.backup() lx.backup() + lx.esc = false lx.emit(itemMultilineString) lx.next() /// Read over ''' again and discard it. lx.next() @@ -837,6 +843,7 @@ func lexMultilineStringEscape(lx *lexer) stateFn { } func lexStringEscape(lx *lexer) stateFn { + lx.esc = true r := lx.next() switch r { case 'e': @@ -879,10 +886,8 @@ func lexHexEscape(lx *lexer) stateFn { var r rune for i := 0; i < 2; i++ { r = lx.next() - if !isHexadecimal(r) { - return lx.errorf( - `expected two hexadecimal digits after '\x', but got %q instead`, - lx.current()) + if !isHex(r) { + return lx.errorf(`expected two hexadecimal digits after '\x', but got %q instead`, lx.current()) } } return lx.pop() @@ -892,10 +897,8 @@ func lexShortUnicodeEscape(lx *lexer) stateFn { var r rune for i := 0; i < 4; i++ { r = lx.next() - if !isHexadecimal(r) { - return lx.errorf( - `expected four hexadecimal digits after '\u', but got %q instead`, - lx.current()) + if !isHex(r) { + return lx.errorf(`expected four hexadecimal digits after '\u', but got %q instead`, lx.current()) } } return lx.pop() @@ -905,10 +908,8 @@ func lexLongUnicodeEscape(lx *lexer) stateFn { var r rune for i := 0; i < 8; i++ { r = lx.next() - if !isHexadecimal(r) { - return lx.errorf( - `expected eight hexadecimal digits after '\U', but got %q instead`, - lx.current()) + if !isHex(r) { + return lx.errorf(`expected eight hexadecimal digits after '\U', but got %q instead`, lx.current()) } } return lx.pop() @@ -975,7 +976,7 @@ func lexDatetime(lx *lexer) stateFn { // lexHexInteger consumes a hexadecimal integer after seeing the '0x' prefix. func lexHexInteger(lx *lexer) stateFn { r := lx.next() - if isHexadecimal(r) { + if isHex(r) { return lexHexInteger } switch r { @@ -1109,7 +1110,7 @@ func lexBaseNumberOrDate(lx *lexer) stateFn { return lexOctalInteger case 'x': r = lx.peek() - if !isHexadecimal(r) { + if !isHex(r) { lx.errorf("not a hexidecimal number: '%s%c'", lx.current(), r) } return lexHexInteger @@ -1207,7 +1208,7 @@ func (itype itemType) String() string { return "EOF" case itemText: return "Text" - case itemString, itemRawString, itemMultilineString, itemRawMultilineString: + case itemString, itemStringEsc, itemRawString, itemMultilineString, itemRawMultilineString: return "String" case itemBool: return "Bool" @@ -1240,7 +1241,7 @@ func (itype itemType) String() string { } func (item item) String() string { - return fmt.Sprintf("(%s, %s)", item.typ.String(), item.val) + return fmt.Sprintf("(%s, %s)", item.typ, item.val) } func isWhitespace(r rune) bool { return r == '\t' || r == ' ' } @@ -1256,10 +1257,7 @@ func isControl(r rune) bool { // Control characters except \t, \r, \n func isDigit(r rune) bool { return r >= '0' && r <= '9' } func isBinary(r rune) bool { return r == '0' || r == '1' } func isOctal(r rune) bool { return r >= '0' && r <= '7' } -func isHexadecimal(r rune) bool { - return (r >= '0' && r <= '9') || (r >= 'a' && r <= 'f') || (r >= 'A' && r <= 'F') -} - +func isHex(r rune) bool { return (r >= '0' && r <= '9') || (r|0x20 >= 'a' && r|0x20 <= 'f') } func isBareKeyChar(r rune, tomlNext bool) bool { if tomlNext { return (r >= 'A' && r <= 'Z') || diff --git a/tools/vendor/github.com/BurntSushi/toml/meta.go b/tools/vendor/github.com/BurntSushi/toml/meta.go index 2e78b24e9..e61453730 100644 --- a/tools/vendor/github.com/BurntSushi/toml/meta.go +++ b/tools/vendor/github.com/BurntSushi/toml/meta.go @@ -13,7 +13,7 @@ type MetaData struct { context Key // Used only during decoding. keyInfo map[string]keyInfo - mapping map[string]interface{} + mapping map[string]any keys []Key decoded map[string]struct{} data []byte // Input file; for errors. @@ -31,12 +31,12 @@ func (md *MetaData) IsDefined(key ...string) bool { } var ( - hash map[string]interface{} + hash map[string]any ok bool - hashOrVal interface{} = md.mapping + hashOrVal any = md.mapping ) for _, k := range key { - if hash, ok = hashOrVal.(map[string]interface{}); !ok { + if hash, ok = hashOrVal.(map[string]any); !ok { return false } if hashOrVal, ok = hash[k]; !ok { @@ -94,28 +94,55 @@ func (md *MetaData) Undecoded() []Key { type Key []string func (k Key) String() string { - ss := make([]string, len(k)) - for i := range k { - ss[i] = k.maybeQuoted(i) + // This is called quite often, so it's a bit funky to make it faster. + var b strings.Builder + b.Grow(len(k) * 25) +outer: + for i, kk := range k { + if i > 0 { + b.WriteByte('.') + } + if kk == "" { + b.WriteString(`""`) + } else { + for _, r := range kk { + // "Inline" isBareKeyChar + if !((r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-') { + b.WriteByte('"') + b.WriteString(dblQuotedReplacer.Replace(kk)) + b.WriteByte('"') + continue outer + } + } + b.WriteString(kk) + } } - return strings.Join(ss, ".") + return b.String() } func (k Key) maybeQuoted(i int) string { if k[i] == "" { return `""` } - for _, c := range k[i] { - if !isBareKeyChar(c, false) { - return `"` + dblQuotedReplacer.Replace(k[i]) + `"` + for _, r := range k[i] { + if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-' { + continue } + return `"` + dblQuotedReplacer.Replace(k[i]) + `"` } return k[i] } +// Like append(), but only increase the cap by 1. func (k Key) add(piece string) Key { + if cap(k) > len(k) { + return append(k, piece) + } newKey := make(Key, len(k)+1) copy(newKey, k) newKey[len(k)] = piece return newKey } + +func (k Key) parent() Key { return k[:len(k)-1] } // all except the last piece. +func (k Key) last() string { return k[len(k)-1] } // last piece of this key. diff --git a/tools/vendor/github.com/BurntSushi/toml/parse.go b/tools/vendor/github.com/BurntSushi/toml/parse.go index 9c1915369..11ac3108b 100644 --- a/tools/vendor/github.com/BurntSushi/toml/parse.go +++ b/tools/vendor/github.com/BurntSushi/toml/parse.go @@ -2,6 +2,7 @@ package toml import ( "fmt" + "math" "os" "strconv" "strings" @@ -20,9 +21,9 @@ type parser struct { ordered []Key // List of keys in the order that they appear in the TOML data. - keyInfo map[string]keyInfo // Map keyname → info about the TOML key. - mapping map[string]interface{} // Map keyname → key value. - implicits map[string]struct{} // Record implicit keys (e.g. "key.group.names"). + keyInfo map[string]keyInfo // Map keyname → info about the TOML key. + mapping map[string]any // Map keyname → key value. + implicits map[string]struct{} // Record implicit keys (e.g. "key.group.names"). } type keyInfo struct { @@ -49,6 +50,7 @@ func parse(data string) (p *parser, err error) { // it anyway. if strings.HasPrefix(data, "\xff\xfe") || strings.HasPrefix(data, "\xfe\xff") { // UTF-16 data = data[2:] + //lint:ignore S1017 https://github.com/dominikh/go-tools/issues/1447 } else if strings.HasPrefix(data, "\xef\xbb\xbf") { // UTF-8 data = data[3:] } @@ -71,7 +73,7 @@ func parse(data string) (p *parser, err error) { p = &parser{ keyInfo: make(map[string]keyInfo), - mapping: make(map[string]interface{}), + mapping: make(map[string]any), lx: lex(data, tomlNext), ordered: make([]Key, 0), implicits: make(map[string]struct{}), @@ -97,7 +99,7 @@ func (p *parser) panicErr(it item, err error) { }) } -func (p *parser) panicItemf(it item, format string, v ...interface{}) { +func (p *parser) panicItemf(it item, format string, v ...any) { panic(ParseError{ Message: fmt.Sprintf(format, v...), Position: it.pos, @@ -106,7 +108,7 @@ func (p *parser) panicItemf(it item, format string, v ...interface{}) { }) } -func (p *parser) panicf(format string, v ...interface{}) { +func (p *parser) panicf(format string, v ...any) { panic(ParseError{ Message: fmt.Sprintf(format, v...), Position: p.pos, @@ -139,7 +141,7 @@ func (p *parser) nextPos() item { return it } -func (p *parser) bug(format string, v ...interface{}) { +func (p *parser) bug(format string, v ...any) { panic(fmt.Sprintf("BUG: "+format+"\n\n", v...)) } @@ -194,11 +196,11 @@ func (p *parser) topLevel(item item) { p.assertEqual(itemKeyEnd, k.typ) /// The current key is the last part. - p.currentKey = key[len(key)-1] + p.currentKey = key.last() /// All the other parts (if any) are the context; need to set each part /// as implicit. - context := key[:len(key)-1] + context := key.parent() for i := range context { p.addImplicitContext(append(p.context, context[i:i+1]...)) } @@ -207,7 +209,8 @@ func (p *parser) topLevel(item item) { /// Set value. vItem := p.next() val, typ := p.value(vItem, false) - p.set(p.currentKey, val, typ, vItem.pos) + p.setValue(p.currentKey, val) + p.setType(p.currentKey, typ, vItem.pos) /// Remove the context we added (preserving any context from [tbl] lines). p.context = outerContext @@ -222,7 +225,7 @@ func (p *parser) keyString(it item) string { switch it.typ { case itemText: return it.val - case itemString, itemMultilineString, + case itemString, itemStringEsc, itemMultilineString, itemRawString, itemRawMultilineString: s, _ := p.value(it, false) return s.(string) @@ -239,9 +242,11 @@ var datetimeRepl = strings.NewReplacer( // value translates an expected value from the lexer into a Go value wrapped // as an empty interface. -func (p *parser) value(it item, parentIsArray bool) (interface{}, tomlType) { +func (p *parser) value(it item, parentIsArray bool) (any, tomlType) { switch it.typ { case itemString: + return it.val, p.typeOfPrimitive(it) + case itemStringEsc: return p.replaceEscapes(it, it.val), p.typeOfPrimitive(it) case itemMultilineString: return p.replaceEscapes(it, p.stripEscapedNewlines(stripFirstNewline(it.val))), p.typeOfPrimitive(it) @@ -274,7 +279,7 @@ func (p *parser) value(it item, parentIsArray bool) (interface{}, tomlType) { panic("unreachable") } -func (p *parser) valueInteger(it item) (interface{}, tomlType) { +func (p *parser) valueInteger(it item) (any, tomlType) { if !numUnderscoresOK(it.val) { p.panicItemf(it, "Invalid integer %q: underscores must be surrounded by digits", it.val) } @@ -298,7 +303,7 @@ func (p *parser) valueInteger(it item) (interface{}, tomlType) { return num, p.typeOfPrimitive(it) } -func (p *parser) valueFloat(it item) (interface{}, tomlType) { +func (p *parser) valueFloat(it item) (any, tomlType) { parts := strings.FieldsFunc(it.val, func(r rune) bool { switch r { case '.', 'e', 'E': @@ -322,7 +327,9 @@ func (p *parser) valueFloat(it item) (interface{}, tomlType) { p.panicItemf(it, "Invalid float %q: '.' must be followed by one or more digits", it.val) } val := strings.Replace(it.val, "_", "", -1) - if val == "+nan" || val == "-nan" { // Go doesn't support this, but TOML spec does. + signbit := false + if val == "+nan" || val == "-nan" { + signbit = val == "-nan" val = "nan" } num, err := strconv.ParseFloat(val, 64) @@ -333,6 +340,9 @@ func (p *parser) valueFloat(it item) (interface{}, tomlType) { p.panicItemf(it, "Invalid float value: %q", it.val) } } + if signbit { + num = math.Copysign(num, -1) + } return num, p.typeOfPrimitive(it) } @@ -352,7 +362,7 @@ var dtTypes = []struct { {"15:04", internal.LocalTime, true}, } -func (p *parser) valueDatetime(it item) (interface{}, tomlType) { +func (p *parser) valueDatetime(it item) (any, tomlType) { it.val = datetimeRepl.Replace(it.val) var ( t time.Time @@ -365,26 +375,44 @@ func (p *parser) valueDatetime(it item) (interface{}, tomlType) { } t, err = time.ParseInLocation(dt.fmt, it.val, dt.zone) if err == nil { + if missingLeadingZero(it.val, dt.fmt) { + p.panicErr(it, errParseDate{it.val}) + } ok = true break } } if !ok { - p.panicItemf(it, "Invalid TOML Datetime: %q.", it.val) + p.panicErr(it, errParseDate{it.val}) } return t, p.typeOfPrimitive(it) } -func (p *parser) valueArray(it item) (interface{}, tomlType) { +// Go's time.Parse() will accept numbers without a leading zero; there isn't any +// way to require it. https://github.com/golang/go/issues/29911 +// +// Depend on the fact that the separators (- and :) should always be at the same +// location. +func missingLeadingZero(d, l string) bool { + for i, c := range []byte(l) { + if c == '.' || c == 'Z' { + return false + } + if (c < '0' || c > '9') && d[i] != c { + return true + } + } + return false +} + +func (p *parser) valueArray(it item) (any, tomlType) { p.setType(p.currentKey, tomlArray, it.pos) var ( - types []tomlType - - // Initialize to a non-nil empty slice. This makes it consistent with - // how S = [] decodes into a non-nil slice inside something like struct - // { S []string }. See #338 - array = []interface{}{} + // Initialize to a non-nil slice to make it consistent with how S = [] + // decodes into a non-nil slice inside something like struct { S + // []string }. See #338 + array = make([]any, 0, 2) ) for it = p.next(); it.typ != itemArrayEnd; it = p.next() { if it.typ == itemCommentStart { @@ -394,21 +422,20 @@ func (p *parser) valueArray(it item) (interface{}, tomlType) { val, typ := p.value(it, true) array = append(array, val) - types = append(types, typ) - // XXX: types isn't used here, we need it to record the accurate type + // XXX: type isn't used here, we need it to record the accurate type // information. // // Not entirely sure how to best store this; could use "key[0]", // "key[1]" notation, or maybe store it on the Array type? - _ = types + _ = typ } return array, tomlArray } -func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tomlType) { +func (p *parser) valueInlineTable(it item, parentIsArray bool) (any, tomlType) { var ( - hash = make(map[string]interface{}) + topHash = make(map[string]any) outerContext = p.context outerKey = p.currentKey ) @@ -436,11 +463,11 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom p.assertEqual(itemKeyEnd, k.typ) /// The current key is the last part. - p.currentKey = key[len(key)-1] + p.currentKey = key.last() /// All the other parts (if any) are the context; need to set each part /// as implicit. - context := key[:len(key)-1] + context := key.parent() for i := range context { p.addImplicitContext(append(p.context, context[i:i+1]...)) } @@ -448,7 +475,21 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom /// Set the value. val, typ := p.value(p.next(), false) - p.set(p.currentKey, val, typ, it.pos) + p.setValue(p.currentKey, val) + p.setType(p.currentKey, typ, it.pos) + + hash := topHash + for _, c := range context { + h, ok := hash[c] + if !ok { + h = make(map[string]any) + hash[c] = h + } + hash, ok = h.(map[string]any) + if !ok { + p.panicf("%q is not a table", p.context) + } + } hash[p.currentKey] = val /// Restore context. @@ -456,7 +497,7 @@ func (p *parser) valueInlineTable(it item, parentIsArray bool) (interface{}, tom } p.context = outerContext p.currentKey = outerKey - return hash, tomlHash + return topHash, tomlHash } // numHasLeadingZero checks if this number has leading zeroes, allowing for '0', @@ -486,9 +527,9 @@ func numUnderscoresOK(s string) bool { } } - // isHexadecimal is a superset of all the permissable characters - // surrounding an underscore. - accept = isHexadecimal(r) + // isHexis a superset of all the permissable characters surrounding an + // underscore. + accept = isHex(r) } return accept } @@ -511,21 +552,19 @@ func numPeriodsOK(s string) bool { // Establishing the context also makes sure that the key isn't a duplicate, and // will create implicit hashes automatically. func (p *parser) addContext(key Key, array bool) { - var ok bool - - // Always start at the top level and drill down for our context. + /// Always start at the top level and drill down for our context. hashContext := p.mapping - keyContext := make(Key, 0) + keyContext := make(Key, 0, len(key)-1) - // We only need implicit hashes for key[0:-1] - for _, k := range key[0 : len(key)-1] { - _, ok = hashContext[k] + /// We only need implicit hashes for the parents. + for _, k := range key.parent() { + _, ok := hashContext[k] keyContext = append(keyContext, k) // No key? Make an implicit hash and move on. if !ok { p.addImplicit(keyContext) - hashContext[k] = make(map[string]interface{}) + hashContext[k] = make(map[string]any) } // If the hash context is actually an array of tables, then set @@ -534,9 +573,9 @@ func (p *parser) addContext(key Key, array bool) { // Otherwise, it better be a table, since this MUST be a key group (by // virtue of it not being the last element in a key). switch t := hashContext[k].(type) { - case []map[string]interface{}: + case []map[string]any: hashContext = t[len(t)-1] - case map[string]interface{}: + case map[string]any: hashContext = t default: p.panicf("Key '%s' was already created as a hash.", keyContext) @@ -547,39 +586,33 @@ func (p *parser) addContext(key Key, array bool) { if array { // If this is the first element for this array, then allocate a new // list of tables for it. - k := key[len(key)-1] + k := key.last() if _, ok := hashContext[k]; !ok { - hashContext[k] = make([]map[string]interface{}, 0, 4) + hashContext[k] = make([]map[string]any, 0, 4) } // Add a new table. But make sure the key hasn't already been used // for something else. - if hash, ok := hashContext[k].([]map[string]interface{}); ok { - hashContext[k] = append(hash, make(map[string]interface{})) + if hash, ok := hashContext[k].([]map[string]any); ok { + hashContext[k] = append(hash, make(map[string]any)) } else { p.panicf("Key '%s' was already created and cannot be used as an array.", key) } } else { - p.setValue(key[len(key)-1], make(map[string]interface{})) + p.setValue(key.last(), make(map[string]any)) } - p.context = append(p.context, key[len(key)-1]) -} - -// set calls setValue and setType. -func (p *parser) set(key string, val interface{}, typ tomlType, pos Position) { - p.setValue(key, val) - p.setType(key, typ, pos) + p.context = append(p.context, key.last()) } // setValue sets the given key to the given value in the current context. // It will make sure that the key hasn't already been defined, account for // implicit key groups. -func (p *parser) setValue(key string, value interface{}) { +func (p *parser) setValue(key string, value any) { var ( - tmpHash interface{} + tmpHash any ok bool hash = p.mapping - keyContext Key + keyContext = make(Key, 0, len(p.context)+1) ) for _, k := range p.context { keyContext = append(keyContext, k) @@ -587,11 +620,11 @@ func (p *parser) setValue(key string, value interface{}) { p.bug("Context for key '%s' has not been established.", keyContext) } switch t := tmpHash.(type) { - case []map[string]interface{}: + case []map[string]any: // The context is a table of hashes. Pick the most recent table // defined as the current hash. hash = t[len(t)-1] - case map[string]interface{}: + case map[string]any: hash = t default: p.panicf("Key '%s' has already been defined.", keyContext) @@ -618,9 +651,8 @@ func (p *parser) setValue(key string, value interface{}) { p.removeImplicit(keyContext) return } - - // Otherwise, we have a concrete key trying to override a previous - // key, which is *always* wrong. + // Otherwise, we have a concrete key trying to override a previous key, + // which is *always* wrong. p.panicf("Key '%s' has already been defined.", keyContext) } @@ -683,8 +715,11 @@ func stripFirstNewline(s string) string { // the next newline. After a line-ending backslash, all whitespace is removed // until the next non-whitespace character. func (p *parser) stripEscapedNewlines(s string) string { - var b strings.Builder - var i int + var ( + b strings.Builder + i int + ) + b.Grow(len(s)) for { ix := strings.Index(s[i:], `\`) if ix < 0 { @@ -714,9 +749,8 @@ func (p *parser) stripEscapedNewlines(s string) string { continue } if !strings.Contains(s[i:j], "\n") { - // This is not a line-ending backslash. - // (It's a bad escape sequence, but we can let - // replaceEscapes catch it.) + // This is not a line-ending backslash. (It's a bad escape sequence, + // but we can let replaceEscapes catch it.) i++ continue } @@ -727,79 +761,78 @@ func (p *parser) stripEscapedNewlines(s string) string { } func (p *parser) replaceEscapes(it item, str string) string { - replaced := make([]rune, 0, len(str)) - s := []byte(str) - r := 0 - for r < len(s) { - if s[r] != '\\' { - c, size := utf8.DecodeRune(s[r:]) - r += size - replaced = append(replaced, c) + var ( + b strings.Builder + skip = 0 + ) + b.Grow(len(str)) + for i, c := range str { + if skip > 0 { + skip-- continue } - r += 1 - if r >= len(s) { + if c != '\\' { + b.WriteRune(c) + continue + } + + if i >= len(str) { p.bug("Escape sequence at end of string.") return "" } - switch s[r] { + switch str[i+1] { default: - p.bug("Expected valid escape code after \\, but got %q.", s[r]) + p.bug("Expected valid escape code after \\, but got %q.", str[i+1]) case ' ', '\t': - p.panicItemf(it, "invalid escape: '\\%c'", s[r]) + p.panicItemf(it, "invalid escape: '\\%c'", str[i+1]) case 'b': - replaced = append(replaced, rune(0x0008)) - r += 1 + b.WriteByte(0x08) + skip = 1 case 't': - replaced = append(replaced, rune(0x0009)) - r += 1 + b.WriteByte(0x09) + skip = 1 case 'n': - replaced = append(replaced, rune(0x000A)) - r += 1 + b.WriteByte(0x0a) + skip = 1 case 'f': - replaced = append(replaced, rune(0x000C)) - r += 1 + b.WriteByte(0x0c) + skip = 1 case 'r': - replaced = append(replaced, rune(0x000D)) - r += 1 + b.WriteByte(0x0d) + skip = 1 case 'e': if p.tomlNext { - replaced = append(replaced, rune(0x001B)) - r += 1 + b.WriteByte(0x1b) + skip = 1 } case '"': - replaced = append(replaced, rune(0x0022)) - r += 1 + b.WriteByte(0x22) + skip = 1 case '\\': - replaced = append(replaced, rune(0x005C)) - r += 1 + b.WriteByte(0x5c) + skip = 1 + // The lexer guarantees the correct number of characters are present; + // don't need to check here. case 'x': if p.tomlNext { - escaped := p.asciiEscapeToUnicode(it, s[r+1:r+3]) - replaced = append(replaced, escaped) - r += 3 + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+4]) + b.WriteRune(escaped) + skip = 3 } case 'u': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+5). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(it, s[r+1:r+5]) - replaced = append(replaced, escaped) - r += 5 + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+6]) + b.WriteRune(escaped) + skip = 5 case 'U': - // At this point, we know we have a Unicode escape of the form - // `uXXXX` at [r, r+9). (Because the lexer guarantees this - // for us.) - escaped := p.asciiEscapeToUnicode(it, s[r+1:r+9]) - replaced = append(replaced, escaped) - r += 9 + escaped := p.asciiEscapeToUnicode(it, str[i+2:i+10]) + b.WriteRune(escaped) + skip = 9 } } - return string(replaced) + return b.String() } -func (p *parser) asciiEscapeToUnicode(it item, bs []byte) rune { - s := string(bs) +func (p *parser) asciiEscapeToUnicode(it item, s string) rune { hex, err := strconv.ParseUint(strings.ToLower(s), 16, 32) if err != nil { p.bug("Could not parse '%s' as a hexadecimal number, but the lexer claims it's OK: %s", s, err) diff --git a/tools/vendor/github.com/BurntSushi/toml/type_fields.go b/tools/vendor/github.com/BurntSushi/toml/type_fields.go index 254ca82e5..10c51f7ee 100644 --- a/tools/vendor/github.com/BurntSushi/toml/type_fields.go +++ b/tools/vendor/github.com/BurntSushi/toml/type_fields.go @@ -25,10 +25,8 @@ type field struct { // breaking ties with index sequence. type byName []field -func (x byName) Len() int { return len(x) } - +func (x byName) Len() int { return len(x) } func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - func (x byName) Less(i, j int) bool { if x[i].name != x[j].name { return x[i].name < x[j].name @@ -45,10 +43,8 @@ func (x byName) Less(i, j int) bool { // byIndex sorts field by index sequence. type byIndex []field -func (x byIndex) Len() int { return len(x) } - +func (x byIndex) Len() int { return len(x) } func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } - func (x byIndex) Less(i, j int) bool { for k, xik := range x[i].index { if k >= len(x[j].index) { diff --git a/tools/vendor/github.com/BurntSushi/toml/type_toml.go b/tools/vendor/github.com/BurntSushi/toml/type_toml.go index 4e90d7737..1c090d331 100644 --- a/tools/vendor/github.com/BurntSushi/toml/type_toml.go +++ b/tools/vendor/github.com/BurntSushi/toml/type_toml.go @@ -22,13 +22,8 @@ func typeIsTable(t tomlType) bool { type tomlBaseType string -func (btype tomlBaseType) typeString() string { - return string(btype) -} - -func (btype tomlBaseType) String() string { - return btype.typeString() -} +func (btype tomlBaseType) typeString() string { return string(btype) } +func (btype tomlBaseType) String() string { return btype.typeString() } var ( tomlInteger tomlBaseType = "Integer" @@ -54,7 +49,7 @@ func (p *parser) typeOfPrimitive(lexItem item) tomlType { return tomlFloat case itemDatetime: return tomlDatetime - case itemString: + case itemString, itemStringEsc: return tomlString case itemMultilineString: return tomlString diff --git a/tools/vendor/github.com/Microsoft/go-winio/.golangci.yml b/tools/vendor/github.com/Microsoft/go-winio/.golangci.yml index 7b503d26a..faedfe937 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/.golangci.yml +++ b/tools/vendor/github.com/Microsoft/go-winio/.golangci.yml @@ -1,7 +1,3 @@ -run: - skip-dirs: - - pkg/etw/sample - linters: enable: # style @@ -20,9 +16,13 @@ linters: - gofmt # files are gofmt'ed - gosec # security - nilerr # returns nil even with non-nil error + - thelper # test helpers without t.Helper() - unparam # unused function params issues: + exclude-dirs: + - pkg/etw/sample + exclude-rules: # err is very often shadowed in nested scopes - linters: @@ -69,9 +69,7 @@ linters-settings: # struct order is often for Win32 compat # also, ignore pointer bytes/GC issues for now until performance becomes an issue - fieldalignment - check-shadowing: true nolintlint: - allow-leading-space: false require-explanation: true require-specific: true revive: diff --git a/tools/vendor/github.com/Microsoft/go-winio/backup.go b/tools/vendor/github.com/Microsoft/go-winio/backup.go index 09621c884..b54341daa 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/backup.go +++ b/tools/vendor/github.com/Microsoft/go-winio/backup.go @@ -10,14 +10,14 @@ import ( "io" "os" "runtime" - "syscall" "unicode/utf16" + "github.com/Microsoft/go-winio/internal/fs" "golang.org/x/sys/windows" ) -//sys backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead -//sys backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite +//sys backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead +//sys backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite const ( BackupData = uint32(iota + 1) @@ -104,7 +104,7 @@ func (r *BackupStreamReader) Next() (*BackupHeader, error) { if err := binary.Read(r.r, binary.LittleEndian, name); err != nil { return nil, err } - hdr.Name = syscall.UTF16ToString(name) + hdr.Name = windows.UTF16ToString(name) } if wsi.StreamID == BackupSparseBlock { if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil { @@ -205,7 +205,7 @@ func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader { // Read reads a backup stream from the file by calling the Win32 API BackupRead(). func (r *BackupFileReader) Read(b []byte) (int, error) { var bytesRead uint32 - err := backupRead(syscall.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx) + err := backupRead(windows.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx) if err != nil { return 0, &os.PathError{Op: "BackupRead", Path: r.f.Name(), Err: err} } @@ -220,7 +220,7 @@ func (r *BackupFileReader) Read(b []byte) (int, error) { // the underlying file. func (r *BackupFileReader) Close() error { if r.ctx != 0 { - _ = backupRead(syscall.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx) + _ = backupRead(windows.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx) runtime.KeepAlive(r.f) r.ctx = 0 } @@ -244,7 +244,7 @@ func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter { // Write restores a portion of the file using the provided backup stream. func (w *BackupFileWriter) Write(b []byte) (int, error) { var bytesWritten uint32 - err := backupWrite(syscall.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx) + err := backupWrite(windows.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx) if err != nil { return 0, &os.PathError{Op: "BackupWrite", Path: w.f.Name(), Err: err} } @@ -259,7 +259,7 @@ func (w *BackupFileWriter) Write(b []byte) (int, error) { // close the underlying file. func (w *BackupFileWriter) Close() error { if w.ctx != 0 { - _ = backupWrite(syscall.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx) + _ = backupWrite(windows.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx) runtime.KeepAlive(w.f) w.ctx = 0 } @@ -271,17 +271,14 @@ func (w *BackupFileWriter) Close() error { // // If the file opened was a directory, it cannot be used with Readdir(). func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) { - winPath, err := syscall.UTF16FromString(path) - if err != nil { - return nil, err - } - h, err := syscall.CreateFile(&winPath[0], - access, - share, + h, err := fs.CreateFile(path, + fs.AccessMask(access), + fs.FileShareMode(share), nil, - createmode, - syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OPEN_REPARSE_POINT, - 0) + fs.FileCreationDisposition(createmode), + fs.FILE_FLAG_BACKUP_SEMANTICS|fs.FILE_FLAG_OPEN_REPARSE_POINT, + 0, + ) if err != nil { err = &os.PathError{Op: "open", Path: path, Err: err} return nil, err diff --git a/tools/vendor/github.com/Microsoft/go-winio/backuptar/tar.go b/tools/vendor/github.com/Microsoft/go-winio/backuptar/tar.go index 6b3b0cd51..7f852bbf8 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/backuptar/tar.go +++ b/tools/vendor/github.com/Microsoft/go-winio/backuptar/tar.go @@ -11,7 +11,6 @@ import ( "path/filepath" "strconv" "strings" - "syscall" "time" "github.com/Microsoft/go-winio" @@ -106,7 +105,7 @@ func BasicInfoHeader(name string, size int64, fileInfo *winio.FileBasicInfo) *ta hdr.PAXRecords[hdrFileAttributes] = fmt.Sprintf("%d", fileInfo.FileAttributes) hdr.PAXRecords[hdrCreationTime] = formatPAXTime(time.Unix(0, fileInfo.CreationTime.Nanoseconds())) - if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 { + if (fileInfo.FileAttributes & windows.FILE_ATTRIBUTE_DIRECTORY) != 0 { hdr.Mode |= cISDIR hdr.Size = 0 hdr.Typeflag = tar.TypeDir @@ -378,7 +377,7 @@ func WriteTarFileFromBackupStream(t *tar.Writer, r io.Reader, name string, size // WriteTarFileFromBackupStream. func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *winio.FileBasicInfo, err error) { name = hdr.Name - if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA { + if hdr.Typeflag == tar.TypeReg { size = hdr.Size } fileInfo = &winio.FileBasicInfo{ @@ -396,7 +395,7 @@ func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *win fileInfo.FileAttributes = uint32(attr) } else { if hdr.Typeflag == tar.TypeDir { - fileInfo.FileAttributes |= syscall.FILE_ATTRIBUTE_DIRECTORY + fileInfo.FileAttributes |= windows.FILE_ATTRIBUTE_DIRECTORY } } if creationTimeStr, ok := hdr.PAXRecords[hdrCreationTime]; ok { @@ -469,7 +468,7 @@ func WriteBackupStreamFromTarFile(w io.Writer, t *tar.Reader, hdr *tar.Header) ( } } - if hdr.Typeflag == tar.TypeReg || hdr.Typeflag == tar.TypeRegA { + if hdr.Typeflag == tar.TypeReg { bhdr := winio.BackupHeader{ Id: winio.BackupData, Size: hdr.Size, diff --git a/tools/vendor/github.com/Microsoft/go-winio/file.go b/tools/vendor/github.com/Microsoft/go-winio/file.go index 175a99d3f..fe82a180d 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/file.go +++ b/tools/vendor/github.com/Microsoft/go-winio/file.go @@ -15,26 +15,11 @@ import ( "golang.org/x/sys/windows" ) -//sys cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) = CancelIoEx -//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort -//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus -//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes -//sys wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult - -type atomicBool int32 - -func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 } -func (b *atomicBool) setFalse() { atomic.StoreInt32((*int32)(b), 0) } -func (b *atomicBool) setTrue() { atomic.StoreInt32((*int32)(b), 1) } - -//revive:disable-next-line:predeclared Keep "new" to maintain consistency with "atomic" pkg -func (b *atomicBool) swap(new bool) bool { - var newInt int32 - if new { - newInt = 1 - } - return atomic.SwapInt32((*int32)(b), newInt) == 1 -} +//sys cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) = CancelIoEx +//sys createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) = CreateIoCompletionPort +//sys getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus +//sys setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes +//sys wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult var ( ErrFileClosed = errors.New("file has already been closed") @@ -50,7 +35,7 @@ func (*timeoutError) Temporary() bool { return true } type timeoutChan chan struct{} var ioInitOnce sync.Once -var ioCompletionPort syscall.Handle +var ioCompletionPort windows.Handle // ioResult contains the result of an asynchronous IO operation. type ioResult struct { @@ -60,12 +45,12 @@ type ioResult struct { // ioOperation represents an outstanding asynchronous Win32 IO. type ioOperation struct { - o syscall.Overlapped + o windows.Overlapped ch chan ioResult } func initIO() { - h, err := createIoCompletionPort(syscall.InvalidHandle, 0, 0, 0xffffffff) + h, err := createIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff) if err != nil { panic(err) } @@ -76,10 +61,10 @@ func initIO() { // win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall. // It takes ownership of this handle and will close it if it is garbage collected. type win32File struct { - handle syscall.Handle + handle windows.Handle wg sync.WaitGroup wgLock sync.RWMutex - closing atomicBool + closing atomic.Bool socket bool readDeadline deadlineHandler writeDeadline deadlineHandler @@ -90,11 +75,11 @@ type deadlineHandler struct { channel timeoutChan channelLock sync.RWMutex timer *time.Timer - timedout atomicBool + timedout atomic.Bool } // makeWin32File makes a new win32File from an existing file handle. -func makeWin32File(h syscall.Handle) (*win32File, error) { +func makeWin32File(h windows.Handle) (*win32File, error) { f := &win32File{handle: h} ioInitOnce.Do(initIO) _, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff) @@ -110,7 +95,12 @@ func makeWin32File(h syscall.Handle) (*win32File, error) { return f, nil } +// Deprecated: use NewOpenFile instead. func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) { + return NewOpenFile(windows.Handle(h)) +} + +func NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) { // If we return the result of makeWin32File directly, it can result in an // interface-wrapped nil, rather than a nil interface value. f, err := makeWin32File(h) @@ -124,13 +114,13 @@ func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) { func (f *win32File) closeHandle() { f.wgLock.Lock() // Atomically set that we are closing, releasing the resources only once. - if !f.closing.swap(true) { + if !f.closing.Swap(true) { f.wgLock.Unlock() // cancel all IO and wait for it to complete _ = cancelIoEx(f.handle, nil) f.wg.Wait() // at this point, no new IO can start - syscall.Close(f.handle) + windows.Close(f.handle) f.handle = 0 } else { f.wgLock.Unlock() @@ -145,14 +135,14 @@ func (f *win32File) Close() error { // IsClosed checks if the file has been closed. func (f *win32File) IsClosed() bool { - return f.closing.isSet() + return f.closing.Load() } // prepareIO prepares for a new IO operation. // The caller must call f.wg.Done() when the IO is finished, prior to Close() returning. func (f *win32File) prepareIO() (*ioOperation, error) { f.wgLock.RLock() - if f.closing.isSet() { + if f.closing.Load() { f.wgLock.RUnlock() return nil, ErrFileClosed } @@ -164,12 +154,12 @@ func (f *win32File) prepareIO() (*ioOperation, error) { } // ioCompletionProcessor processes completed async IOs forever. -func ioCompletionProcessor(h syscall.Handle) { +func ioCompletionProcessor(h windows.Handle) { for { var bytes uint32 var key uintptr var op *ioOperation - err := getQueuedCompletionStatus(h, &bytes, &key, &op, syscall.INFINITE) + err := getQueuedCompletionStatus(h, &bytes, &key, &op, windows.INFINITE) if op == nil { panic(err) } @@ -182,11 +172,11 @@ func ioCompletionProcessor(h syscall.Handle) { // asyncIO processes the return value from ReadFile or WriteFile, blocking until // the operation has actually completed. func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) { - if err != syscall.ERROR_IO_PENDING { //nolint:errorlint // err is Errno + if err != windows.ERROR_IO_PENDING { //nolint:errorlint // err is Errno return int(bytes), err } - if f.closing.isSet() { + if f.closing.Load() { _ = cancelIoEx(f.handle, &c.o) } @@ -201,8 +191,8 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er select { case r = <-c.ch: err = r.err - if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno - if f.closing.isSet() { + if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno + if f.closing.Load() { err = ErrFileClosed } } else if err != nil && f.socket { @@ -214,7 +204,7 @@ func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, er _ = cancelIoEx(f.handle, &c.o) r = <-c.ch err = r.err - if err == syscall.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno + if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno err = ErrTimeout } } @@ -235,23 +225,22 @@ func (f *win32File) Read(b []byte) (int, error) { } defer f.wg.Done() - if f.readDeadline.timedout.isSet() { + if f.readDeadline.timedout.Load() { return 0, ErrTimeout } var bytes uint32 - err = syscall.ReadFile(f.handle, b, &bytes, &c.o) + err = windows.ReadFile(f.handle, b, &bytes, &c.o) n, err := f.asyncIO(c, &f.readDeadline, bytes, err) runtime.KeepAlive(b) // Handle EOF conditions. if err == nil && n == 0 && len(b) != 0 { return 0, io.EOF - } else if err == syscall.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno + } else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno return 0, io.EOF - } else { - return n, err } + return n, err } // Write writes to a file handle. @@ -262,12 +251,12 @@ func (f *win32File) Write(b []byte) (int, error) { } defer f.wg.Done() - if f.writeDeadline.timedout.isSet() { + if f.writeDeadline.timedout.Load() { return 0, ErrTimeout } var bytes uint32 - err = syscall.WriteFile(f.handle, b, &bytes, &c.o) + err = windows.WriteFile(f.handle, b, &bytes, &c.o) n, err := f.asyncIO(c, &f.writeDeadline, bytes, err) runtime.KeepAlive(b) return n, err @@ -282,7 +271,7 @@ func (f *win32File) SetWriteDeadline(deadline time.Time) error { } func (f *win32File) Flush() error { - return syscall.FlushFileBuffers(f.handle) + return windows.FlushFileBuffers(f.handle) } func (f *win32File) Fd() uintptr { @@ -299,7 +288,7 @@ func (d *deadlineHandler) set(deadline time.Time) error { } d.timer = nil } - d.timedout.setFalse() + d.timedout.Store(false) select { case <-d.channel: @@ -314,7 +303,7 @@ func (d *deadlineHandler) set(deadline time.Time) error { } timeoutIO := func() { - d.timedout.setTrue() + d.timedout.Store(true) close(d.channel) } diff --git a/tools/vendor/github.com/Microsoft/go-winio/fileinfo.go b/tools/vendor/github.com/Microsoft/go-winio/fileinfo.go index 702950e72..c860eb991 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/fileinfo.go +++ b/tools/vendor/github.com/Microsoft/go-winio/fileinfo.go @@ -18,9 +18,18 @@ type FileBasicInfo struct { _ uint32 // padding } +// alignedFileBasicInfo is a FileBasicInfo, but aligned to uint64 by containing +// uint64 rather than windows.Filetime. Filetime contains two uint32s. uint64 +// alignment is necessary to pass this as FILE_BASIC_INFO. +type alignedFileBasicInfo struct { + CreationTime, LastAccessTime, LastWriteTime, ChangeTime uint64 + FileAttributes uint32 + _ uint32 // padding +} + // GetFileBasicInfo retrieves times and attributes for a file. func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) { - bi := &FileBasicInfo{} + bi := &alignedFileBasicInfo{} if err := windows.GetFileInformationByHandleEx( windows.Handle(f.Fd()), windows.FileBasicInfo, @@ -30,16 +39,21 @@ func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) { return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err} } runtime.KeepAlive(f) - return bi, nil + // Reinterpret the alignedFileBasicInfo as a FileBasicInfo so it matches the + // public API of this module. The data may be unnecessarily aligned. + return (*FileBasicInfo)(unsafe.Pointer(bi)), nil } // SetFileBasicInfo sets times and attributes for a file. func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error { + // Create an alignedFileBasicInfo based on a FileBasicInfo. The copy is + // suitable to pass to GetFileInformationByHandleEx. + biAligned := *(*alignedFileBasicInfo)(unsafe.Pointer(bi)) if err := windows.SetFileInformationByHandle( windows.Handle(f.Fd()), windows.FileBasicInfo, - (*byte)(unsafe.Pointer(bi)), - uint32(unsafe.Sizeof(*bi)), + (*byte)(unsafe.Pointer(&biAligned)), + uint32(unsafe.Sizeof(biAligned)), ); err != nil { return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err} } diff --git a/tools/vendor/github.com/Microsoft/go-winio/hvsock.go b/tools/vendor/github.com/Microsoft/go-winio/hvsock.go index c88191658..c4fdd9d4a 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/hvsock.go +++ b/tools/vendor/github.com/Microsoft/go-winio/hvsock.go @@ -10,7 +10,6 @@ import ( "io" "net" "os" - "syscall" "time" "unsafe" @@ -181,13 +180,13 @@ type HvsockConn struct { var _ net.Conn = &HvsockConn{} func newHVSocket() (*win32File, error) { - fd, err := syscall.Socket(afHVSock, syscall.SOCK_STREAM, 1) + fd, err := windows.Socket(afHVSock, windows.SOCK_STREAM, 1) if err != nil { return nil, os.NewSyscallError("socket", err) } f, err := makeWin32File(fd) if err != nil { - syscall.Close(fd) + windows.Close(fd) return nil, err } f.socket = true @@ -197,16 +196,24 @@ func newHVSocket() (*win32File, error) { // ListenHvsock listens for connections on the specified hvsock address. func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) { l := &HvsockListener{addr: *addr} - sock, err := newHVSocket() + + var sock *win32File + sock, err = newHVSocket() if err != nil { return nil, l.opErr("listen", err) } + defer func() { + if err != nil { + _ = sock.Close() + } + }() + sa := addr.raw() - err = socket.Bind(windows.Handle(sock.handle), &sa) + err = socket.Bind(sock.handle, &sa) if err != nil { return nil, l.opErr("listen", os.NewSyscallError("socket", err)) } - err = syscall.Listen(sock.handle, 16) + err = windows.Listen(sock.handle, 16) if err != nil { return nil, l.opErr("listen", os.NewSyscallError("listen", err)) } @@ -246,7 +253,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) { var addrbuf [addrlen * 2]byte var bytes uint32 - err = syscall.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o) + err = windows.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o) if _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil { return nil, l.opErr("accept", os.NewSyscallError("acceptex", err)) } @@ -263,7 +270,7 @@ func (l *HvsockListener) Accept() (_ net.Conn, err error) { conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen]))) // initialize the accepted socket and update its properties with those of the listening socket - if err = windows.Setsockopt(windows.Handle(sock.handle), + if err = windows.Setsockopt(sock.handle, windows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT, (*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil { return nil, conn.opErr("accept", os.NewSyscallError("setsockopt", err)) @@ -334,7 +341,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock }() sa := addr.raw() - err = socket.Bind(windows.Handle(sock.handle), &sa) + err = socket.Bind(sock.handle, &sa) if err != nil { return nil, conn.opErr(op, os.NewSyscallError("bind", err)) } @@ -347,7 +354,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock var bytes uint32 for i := uint(0); i <= d.Retries; i++ { err = socket.ConnectEx( - windows.Handle(sock.handle), + sock.handle, &sa, nil, // sendBuf 0, // sendDataLen @@ -367,7 +374,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock // update the connection properties, so shutdown can be used if err = windows.Setsockopt( - windows.Handle(sock.handle), + sock.handle, windows.SOL_SOCKET, windows.SO_UPDATE_CONNECT_CONTEXT, nil, // optvalue @@ -378,7 +385,7 @@ func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *Hvsock // get the local name var sal rawHvsockAddr - err = socket.GetSockName(windows.Handle(sock.handle), &sal) + err = socket.GetSockName(sock.handle, &sal) if err != nil { return nil, conn.opErr(op, os.NewSyscallError("getsockname", err)) } @@ -421,7 +428,7 @@ func (d *HvsockDialer) redialWait(ctx context.Context) (err error) { return ctx.Err() } -// assumes error is a plain, unwrapped syscall.Errno provided by direct syscall. +// assumes error is a plain, unwrapped windows.Errno provided by direct syscall. func canRedial(err error) bool { //nolint:errorlint // guaranteed to be an Errno switch err { @@ -447,9 +454,9 @@ func (conn *HvsockConn) Read(b []byte) (int, error) { return 0, conn.opErr("read", err) } defer conn.sock.wg.Done() - buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))} + buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} var flags, bytes uint32 - err = syscall.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil) + err = windows.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil) n, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err) if err != nil { var eno windows.Errno @@ -482,9 +489,9 @@ func (conn *HvsockConn) write(b []byte) (int, error) { return 0, conn.opErr("write", err) } defer conn.sock.wg.Done() - buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))} + buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} var bytes uint32 - err = syscall.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil) + err = windows.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil) n, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err) if err != nil { var eno windows.Errno @@ -511,7 +518,7 @@ func (conn *HvsockConn) shutdown(how int) error { return socket.ErrSocketClosed } - err := syscall.Shutdown(conn.sock.handle, how) + err := windows.Shutdown(conn.sock.handle, how) if err != nil { // If the connection was closed, shutdowns fail with "not connected" if errors.Is(err, windows.WSAENOTCONN) || @@ -525,7 +532,7 @@ func (conn *HvsockConn) shutdown(how int) error { // CloseRead shuts down the read end of the socket, preventing future read operations. func (conn *HvsockConn) CloseRead() error { - err := conn.shutdown(syscall.SHUT_RD) + err := conn.shutdown(windows.SHUT_RD) if err != nil { return conn.opErr("closeread", err) } @@ -535,7 +542,7 @@ func (conn *HvsockConn) CloseRead() error { // CloseWrite shuts down the write end of the socket, preventing future write operations and // notifying the other endpoint that no more data will be written. func (conn *HvsockConn) CloseWrite() error { - err := conn.shutdown(syscall.SHUT_WR) + err := conn.shutdown(windows.SHUT_WR) if err != nil { return conn.opErr("closewrite", err) } diff --git a/tools/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go b/tools/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go index 509b3ec64..0cd9621df 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go +++ b/tools/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go @@ -11,12 +11,14 @@ import ( //go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew -//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW +//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW const NullHandle windows.Handle = 0 // AccessMask defines standard, specific, and generic rights. // +// Used with CreateFile and NtCreateFile (and co.). +// // Bitmask: // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 @@ -47,6 +49,12 @@ const ( // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters FILE_ANY_ACCESS AccessMask = 0 + GENERIC_READ AccessMask = 0x8000_0000 + GENERIC_WRITE AccessMask = 0x4000_0000 + GENERIC_EXECUTE AccessMask = 0x2000_0000 + GENERIC_ALL AccessMask = 0x1000_0000 + ACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000 + // Specific Object Access // from ntioapi.h @@ -124,14 +132,32 @@ const ( TRUNCATE_EXISTING FileCreationDisposition = 0x05 ) +// Create disposition values for NtCreate* +type NTFileCreationDisposition uint32 + +//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. +const ( + // From ntioapi.h + + FILE_SUPERSEDE NTFileCreationDisposition = 0x00 + FILE_OPEN NTFileCreationDisposition = 0x01 + FILE_CREATE NTFileCreationDisposition = 0x02 + FILE_OPEN_IF NTFileCreationDisposition = 0x03 + FILE_OVERWRITE NTFileCreationDisposition = 0x04 + FILE_OVERWRITE_IF NTFileCreationDisposition = 0x05 + FILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05 +) + // CreateFile and co. take flags or attributes together as one parameter. // Define alias until we can use generics to allow both - +// // https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants type FileFlagOrAttribute uint32 //nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( // from winnt.h +const ( + // from winnt.h + FILE_FLAG_WRITE_THROUGH FileFlagOrAttribute = 0x8000_0000 FILE_FLAG_OVERLAPPED FileFlagOrAttribute = 0x4000_0000 FILE_FLAG_NO_BUFFERING FileFlagOrAttribute = 0x2000_0000 @@ -145,17 +171,51 @@ const ( // from winnt.h FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000 ) +// NtCreate* functions take a dedicated CreateOptions parameter. +// +// https://learn.microsoft.com/en-us/windows/win32/api/Winternl/nf-winternl-ntcreatefile +// +// https://learn.microsoft.com/en-us/windows/win32/devnotes/nt-create-named-pipe-file +type NTCreateOptions uint32 + +//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. +const ( + // From ntioapi.h + + FILE_DIRECTORY_FILE NTCreateOptions = 0x0000_0001 + FILE_WRITE_THROUGH NTCreateOptions = 0x0000_0002 + FILE_SEQUENTIAL_ONLY NTCreateOptions = 0x0000_0004 + FILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008 + + FILE_SYNCHRONOUS_IO_ALERT NTCreateOptions = 0x0000_0010 + FILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020 + FILE_NON_DIRECTORY_FILE NTCreateOptions = 0x0000_0040 + FILE_CREATE_TREE_CONNECTION NTCreateOptions = 0x0000_0080 + + FILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100 + FILE_NO_EA_KNOWLEDGE NTCreateOptions = 0x0000_0200 + FILE_DISABLE_TUNNELING NTCreateOptions = 0x0000_0400 + FILE_RANDOM_ACCESS NTCreateOptions = 0x0000_0800 + + FILE_DELETE_ON_CLOSE NTCreateOptions = 0x0000_1000 + FILE_OPEN_BY_FILE_ID NTCreateOptions = 0x0000_2000 + FILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000 + FILE_NO_COMPRESSION NTCreateOptions = 0x0000_8000 +) + type FileSQSFlag = FileFlagOrAttribute //nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( // from winbase.h +const ( + // from winbase.h + SECURITY_ANONYMOUS FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16) SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16) SECURITY_IMPERSONATION FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16) SECURITY_DELEGATION FileSQSFlag = FileSQSFlag(SecurityDelegation << 16) - SECURITY_SQOS_PRESENT FileSQSFlag = 0x00100000 - SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F0000 + SECURITY_SQOS_PRESENT FileSQSFlag = 0x0010_0000 + SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000 ) // GetFinalPathNameByHandle flags diff --git a/tools/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go index e2f7bb24e..a94e234c7 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -45,7 +42,7 @@ var ( procCreateFileW = modkernel32.NewProc("CreateFileW") ) -func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { +func CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { var _p0 *uint16 _p0, err = syscall.UTF16PtrFromString(name) if err != nil { @@ -54,8 +51,8 @@ func CreateFile(name string, access AccessMask, mode FileShareMode, sa *syscall. return _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile) } -func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *syscall.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) +func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile)) handle = windows.Handle(r0) if handle == windows.InvalidHandle { err = errnoErr(e1) diff --git a/tools/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go b/tools/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go index aeb7b7250..88580d974 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go +++ b/tools/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go @@ -156,9 +156,7 @@ func connectEx( bytesSent *uint32, overlapped *windows.Overlapped, ) (err error) { - // todo: after upgrading to 1.18, switch from syscall.Syscall9 to syscall.SyscallN - r1, _, e1 := syscall.Syscall9(connectExFunc.addr, - 7, + r1, _, e1 := syscall.SyscallN(connectExFunc.addr, uintptr(s), uintptr(name), uintptr(namelen), @@ -166,8 +164,8 @@ func connectEx( uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), - 0, - 0) + ) + if r1 == 0 { if e1 != 0 { err = error(e1) diff --git a/tools/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go index 6d2e1a9e4..e1504126a 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -48,7 +45,7 @@ var ( ) func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socketError { err = errnoErr(e1) } @@ -56,7 +53,7 @@ func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) { } func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) + r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) if r1 == socketError { err = errnoErr(e1) } @@ -64,7 +61,7 @@ func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err err } func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) + r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) if r1 == socketError { err = errnoErr(e1) } diff --git a/tools/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go b/tools/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go index 7ad505702..42ebc019f 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go +++ b/tools/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go @@ -62,7 +62,7 @@ func (b *WString) Free() { // ResizeTo grows the buffer to at least c and returns the new capacity, freeing the // previous buffer back into pool. func (b *WString) ResizeTo(c uint32) uint32 { - // allready sufficient (or n is 0) + // already sufficient (or n is 0) if c <= b.Cap() { return b.Cap() } diff --git a/tools/vendor/github.com/Microsoft/go-winio/pipe.go b/tools/vendor/github.com/Microsoft/go-winio/pipe.go index 25cc81103..a2da6639d 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/pipe.go +++ b/tools/vendor/github.com/Microsoft/go-winio/pipe.go @@ -11,7 +11,6 @@ import ( "net" "os" "runtime" - "syscall" "time" "unsafe" @@ -20,20 +19,44 @@ import ( "github.com/Microsoft/go-winio/internal/fs" ) -//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe -//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateNamedPipeW -//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo -//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW -//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc -//sys ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile +//sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe +//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateNamedPipeW +//sys disconnectNamedPipe(pipe windows.Handle) (err error) = DisconnectNamedPipe +//sys getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo +//sys getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW +//sys ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile //sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb //sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U //sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl +type PipeConn interface { + net.Conn + Disconnect() error + Flush() error +} + +// type aliases for mkwinsyscall code +type ( + ntAccessMask = fs.AccessMask + ntFileShareMode = fs.FileShareMode + ntFileCreationDisposition = fs.NTFileCreationDisposition + ntFileOptions = fs.NTCreateOptions +) + type ioStatusBlock struct { Status, Information uintptr } +// typedef struct _OBJECT_ATTRIBUTES { +// ULONG Length; +// HANDLE RootDirectory; +// PUNICODE_STRING ObjectName; +// ULONG Attributes; +// PVOID SecurityDescriptor; +// PVOID SecurityQualityOfService; +// } OBJECT_ATTRIBUTES; +// +// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes type objectAttributes struct { Length uintptr RootDirectory uintptr @@ -49,6 +72,17 @@ type unicodeString struct { Buffer uintptr } +// typedef struct _SECURITY_DESCRIPTOR { +// BYTE Revision; +// BYTE Sbz1; +// SECURITY_DESCRIPTOR_CONTROL Control; +// PSID Owner; +// PSID Group; +// PACL Sacl; +// PACL Dacl; +// } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; +// +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor type securityDescriptor struct { Revision byte Sbz1 byte @@ -80,6 +114,8 @@ type win32Pipe struct { path string } +var _ PipeConn = (*win32Pipe)(nil) + type win32MessageBytePipe struct { win32Pipe writeClosed bool @@ -103,6 +139,10 @@ func (f *win32Pipe) SetDeadline(t time.Time) error { return f.SetWriteDeadline(t) } +func (f *win32Pipe) Disconnect() error { + return disconnectNamedPipe(f.win32File.handle) +} + // CloseWrite closes the write side of a message pipe in byte mode. func (f *win32MessageBytePipe) CloseWrite() error { if f.writeClosed { @@ -146,7 +186,7 @@ func (f *win32MessageBytePipe) Read(b []byte) (int, error) { // zero-byte message, ensure that all future Read() calls // also return EOF. f.readEOF = true - } else if err == syscall.ERROR_MORE_DATA { //nolint:errorlint // err is Errno + } else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno // ERROR_MORE_DATA indicates that the pipe's read mode is message mode // and the message still has more bytes. Treat this as a success, since // this package presents all named pipes as byte streams. @@ -164,21 +204,20 @@ func (s pipeAddress) String() string { } // tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout. -func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask) (syscall.Handle, error) { +func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask, impLevel PipeImpLevel) (windows.Handle, error) { for { select { case <-ctx.Done(): - return syscall.Handle(0), ctx.Err() + return windows.Handle(0), ctx.Err() default: - wh, err := fs.CreateFile(*path, + h, err := fs.CreateFile(*path, access, 0, // mode nil, // security attributes fs.OPEN_EXISTING, - fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.SECURITY_ANONYMOUS, + fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.FileSQSFlag(impLevel), 0, // template file handle ) - h := syscall.Handle(wh) if err == nil { return h, nil } @@ -214,15 +253,33 @@ func DialPipe(path string, timeout *time.Duration) (net.Conn, error) { // DialPipeContext attempts to connect to a named pipe by `path` until `ctx` // cancellation or timeout. func DialPipeContext(ctx context.Context, path string) (net.Conn, error) { - return DialPipeAccess(ctx, path, syscall.GENERIC_READ|syscall.GENERIC_WRITE) + return DialPipeAccess(ctx, path, uint32(fs.GENERIC_READ|fs.GENERIC_WRITE)) } +// PipeImpLevel is an enumeration of impersonation levels that may be set +// when calling DialPipeAccessImpersonation. +type PipeImpLevel uint32 + +const ( + PipeImpLevelAnonymous = PipeImpLevel(fs.SECURITY_ANONYMOUS) + PipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION) + PipeImpLevelImpersonation = PipeImpLevel(fs.SECURITY_IMPERSONATION) + PipeImpLevelDelegation = PipeImpLevel(fs.SECURITY_DELEGATION) +) + // DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx` // cancellation or timeout. func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) { + return DialPipeAccessImpLevel(ctx, path, access, PipeImpLevelAnonymous) +} + +// DialPipeAccessImpLevel attempts to connect to a named pipe by `path` with +// `access` at `impLevel` until `ctx` cancellation or timeout. The other +// DialPipe* implementations use PipeImpLevelAnonymous. +func DialPipeAccessImpLevel(ctx context.Context, path string, access uint32, impLevel PipeImpLevel) (net.Conn, error) { var err error - var h syscall.Handle - h, err = tryDialPipe(ctx, &path, fs.AccessMask(access)) + var h windows.Handle + h, err = tryDialPipe(ctx, &path, fs.AccessMask(access), impLevel) if err != nil { return nil, err } @@ -235,7 +292,7 @@ func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, f, err := makeWin32File(h) if err != nil { - syscall.Close(h) + windows.Close(h) return nil, err } @@ -255,7 +312,7 @@ type acceptResponse struct { } type win32PipeListener struct { - firstHandle syscall.Handle + firstHandle windows.Handle path string config PipeConfig acceptCh chan (chan acceptResponse) @@ -263,8 +320,8 @@ type win32PipeListener struct { doneCh chan int } -func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (syscall.Handle, error) { - path16, err := syscall.UTF16FromString(path) +func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) { + path16, err := windows.UTF16FromString(path) if err != nil { return 0, &os.PathError{Op: "open", Path: path, Err: err} } @@ -280,16 +337,20 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy ).Err(); err != nil { return 0, &os.PathError{Op: "open", Path: path, Err: err} } - defer localFree(ntPath.Buffer) + defer windows.LocalFree(windows.Handle(ntPath.Buffer)) //nolint:errcheck oa.ObjectName = &ntPath oa.Attributes = windows.OBJ_CASE_INSENSITIVE // The security descriptor is only needed for the first pipe. if first { if sd != nil { + //todo: does `sdb` need to be allocated on the heap, or can go allocate it? l := uint32(len(sd)) - sdb := localAlloc(0, l) - defer localFree(sdb) + sdb, err := windows.LocalAlloc(0, l) + if err != nil { + return 0, fmt.Errorf("LocalAlloc for security descriptor with of length %d: %w", l, err) + } + defer windows.LocalFree(windows.Handle(sdb)) //nolint:errcheck copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd) oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb)) } else { @@ -298,7 +359,7 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy if err := rtlDefaultNpAcl(&dacl).Err(); err != nil { return 0, fmt.Errorf("getting default named pipe ACL: %w", err) } - defer localFree(dacl) + defer windows.LocalFree(windows.Handle(dacl)) //nolint:errcheck sdb := &securityDescriptor{ Revision: 1, @@ -314,27 +375,27 @@ func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (sy typ |= windows.FILE_PIPE_MESSAGE_TYPE } - disposition := uint32(windows.FILE_OPEN) - access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | syscall.SYNCHRONIZE) + disposition := fs.FILE_OPEN + access := fs.GENERIC_READ | fs.GENERIC_WRITE | fs.SYNCHRONIZE if first { - disposition = windows.FILE_CREATE + disposition = fs.FILE_CREATE // By not asking for read or write access, the named pipe file system // will put this pipe into an initially disconnected state, blocking // client connections until the next call with first == false. - access = syscall.SYNCHRONIZE + access = fs.SYNCHRONIZE } timeout := int64(-50 * 10000) // 50ms var ( - h syscall.Handle + h windows.Handle iosb ioStatusBlock ) err = ntCreateNamedPipeFile(&h, access, &oa, &iosb, - syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, + fs.FILE_SHARE_READ|fs.FILE_SHARE_WRITE, disposition, 0, typ, @@ -359,7 +420,7 @@ func (l *win32PipeListener) makeServerPipe() (*win32File, error) { } f, err := makeWin32File(h) if err != nil { - syscall.Close(h) + windows.Close(h) return nil, err } return f, nil @@ -418,7 +479,7 @@ func (l *win32PipeListener) listenerRoutine() { closed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno } } - syscall.Close(l.firstHandle) + windows.Close(l.firstHandle) l.firstHandle = 0 // Notify Close() and Accept() callers that the handle has been closed. close(l.doneCh) diff --git a/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go b/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go index 7ac377ae4..7c7f145f4 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go +++ b/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/bind_filter.go @@ -11,7 +11,6 @@ import ( "os" "path/filepath" "strings" - "syscall" "unsafe" "golang.org/x/sys/windows" @@ -244,7 +243,7 @@ func getFinalPath(pth string) (string, error) { } buf = make([]uint16, n) } - finalPath := syscall.UTF16ToString(buf) + finalPath := windows.UTF16ToString(buf) // We got VOLUME_NAME_DOS, we need to strip away some leading slashes. // Leave unchanged if we ended up requesting VOLUME_NAME_GUID if len(finalPath) > 4 && finalPath[:4] == `\\?\` && flags == 0x0 { diff --git a/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go index 45c45c96e..1da9b3f3b 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/go-winio/pkg/bindfilter/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -52,7 +49,7 @@ func bfGetMappings(flags uint32, jobHandle windows.Handle, virtRootPath *uint16, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfGetMappings.Addr(), 6, uintptr(flags), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(bufferSize)), uintptr(unsafe.Pointer(outBuffer))) + r0, _, _ := syscall.SyscallN(procBfGetMappings.Addr(), uintptr(flags), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(bufferSize)), uintptr(unsafe.Pointer(outBuffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -76,7 +73,7 @@ func _bfRemoveMapping(jobHandle windows.Handle, virtRootPath *uint16) (hr error) if hr != nil { return } - r0, _, _ := syscall.Syscall(procBfRemoveMapping.Addr(), 2, uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath)), 0) + r0, _, _ := syscall.SyscallN(procBfRemoveMapping.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(virtRootPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -105,7 +102,7 @@ func _bfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16 if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfSetupFilter.Addr(), 6, uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) + r0, _, _ := syscall.SyscallN(procBfSetupFilter.Addr(), uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/Microsoft/go-winio/privilege.go b/tools/vendor/github.com/Microsoft/go-winio/privilege.go index 0ff9dac90..d9b90b6e8 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/privilege.go +++ b/tools/vendor/github.com/Microsoft/go-winio/privilege.go @@ -9,7 +9,6 @@ import ( "fmt" "runtime" "sync" - "syscall" "unicode/utf16" "golang.org/x/sys/windows" @@ -18,8 +17,8 @@ import ( //sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges //sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf //sys revertToSelf() (err error) = advapi32.RevertToSelf -//sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken -//sys getCurrentThread() (h syscall.Handle) = GetCurrentThread +//sys openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken +//sys getCurrentThread() (h windows.Handle) = GetCurrentThread //sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW //sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW //sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW @@ -29,7 +28,7 @@ const ( SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED //revive:disable-next-line:var-naming ALL_CAPS - ERROR_NOT_ALL_ASSIGNED syscall.Errno = windows.ERROR_NOT_ALL_ASSIGNED + ERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED SeBackupPrivilege = "SeBackupPrivilege" SeRestorePrivilege = "SeRestorePrivilege" @@ -177,7 +176,7 @@ func newThreadToken() (windows.Token, error) { } var token windows.Token - err = openThreadToken(getCurrentThread(), syscall.TOKEN_ADJUST_PRIVILEGES|syscall.TOKEN_QUERY, false, &token) + err = openThreadToken(getCurrentThread(), windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, false, &token) if err != nil { rerr := revertToSelf() if rerr != nil { diff --git a/tools/vendor/github.com/Microsoft/go-winio/sd.go b/tools/vendor/github.com/Microsoft/go-winio/sd.go index 5550ef6b6..c3685e98e 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/sd.go +++ b/tools/vendor/github.com/Microsoft/go-winio/sd.go @@ -5,7 +5,7 @@ package winio import ( "errors" - "syscall" + "fmt" "unsafe" "golang.org/x/sys/windows" @@ -15,10 +15,6 @@ import ( //sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW //sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW //sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW -//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW -//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW -//sys localFree(mem uintptr) = LocalFree -//sys getSecurityDescriptorLength(sd uintptr) (len uint32) = advapi32.GetSecurityDescriptorLength type AccountLookupError struct { Name string @@ -64,7 +60,7 @@ func LookupSidByName(name string) (sid string, err error) { var sidSize, sidNameUse, refDomainSize uint32 err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse) - if err != nil && err != syscall.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno + if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno return "", &AccountLookupError{name, err} } sidBuffer := make([]byte, sidSize) @@ -78,8 +74,8 @@ func LookupSidByName(name string) (sid string, err error) { if err != nil { return "", &AccountLookupError{name, err} } - sid = syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:]) - localFree(uintptr(unsafe.Pointer(strBuffer))) + sid = windows.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:]) + _, _ = windows.LocalFree(windows.Handle(unsafe.Pointer(strBuffer))) return sid, nil } @@ -100,7 +96,7 @@ func LookupNameBySid(sid string) (name string, err error) { if err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil { return "", &AccountLookupError{sid, err} } - defer localFree(uintptr(unsafe.Pointer(sidPtr))) + defer windows.LocalFree(windows.Handle(unsafe.Pointer(sidPtr))) //nolint:errcheck var nameSize, refDomainSize, sidNameUse uint32 err = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse) @@ -120,25 +116,18 @@ func LookupNameBySid(sid string) (name string, err error) { } func SddlToSecurityDescriptor(sddl string) ([]byte, error) { - var sdBuffer uintptr - err := convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &sdBuffer, nil) + sd, err := windows.SecurityDescriptorFromString(sddl) if err != nil { - return nil, &SddlConversionError{sddl, err} + return nil, &SddlConversionError{Sddl: sddl, Err: err} } - defer localFree(sdBuffer) - sd := make([]byte, getSecurityDescriptorLength(sdBuffer)) - copy(sd, (*[0xffff]byte)(unsafe.Pointer(sdBuffer))[:len(sd)]) - return sd, nil + b := unsafe.Slice((*byte)(unsafe.Pointer(sd)), sd.Length()) + return b, nil } func SecurityDescriptorToSddl(sd []byte) (string, error) { - var sddl *uint16 - // The returned string length seems to include an arbitrary number of terminating NULs. - // Don't use it. - err := convertSecurityDescriptorToStringSecurityDescriptor(&sd[0], 1, 0xff, &sddl, nil) - if err != nil { - return "", err + if l := int(unsafe.Sizeof(windows.SECURITY_DESCRIPTOR{})); len(sd) < l { + return "", fmt.Errorf("SecurityDescriptor (%d) smaller than expected (%d): %w", len(sd), l, windows.ERROR_INCORRECT_SIZE) } - defer localFree(uintptr(unsafe.Pointer(sddl))) - return syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(sddl))[:]), nil + s := (*windows.SECURITY_DESCRIPTOR)(unsafe.Pointer(&sd[0])) + return s.String(), nil } diff --git a/tools/vendor/github.com/Microsoft/go-winio/tools.go b/tools/vendor/github.com/Microsoft/go-winio/tools.go deleted file mode 100644 index 2aa045843..000000000 --- a/tools/vendor/github.com/Microsoft/go-winio/tools.go +++ /dev/null @@ -1,5 +0,0 @@ -//go:build tools - -package winio - -import _ "golang.org/x/tools/cmd/stringer" diff --git a/tools/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go b/tools/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go index d0e917d2b..95c040743 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go +++ b/tools/vendor/github.com/Microsoft/go-winio/vhd/zvhd_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -50,7 +47,7 @@ var ( ) func attachVirtualDisk(handle syscall.Handle, securityDescriptor *uintptr, attachVirtualDiskFlag uint32, providerSpecificFlags uint32, parameters *AttachVirtualDiskParameters, overlapped *syscall.Overlapped) (win32err error) { - r0, _, _ := syscall.Syscall6(procAttachVirtualDisk.Addr(), 6, uintptr(handle), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(attachVirtualDiskFlag), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped))) + r0, _, _ := syscall.SyscallN(procAttachVirtualDisk.Addr(), uintptr(handle), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(attachVirtualDiskFlag), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -67,7 +64,7 @@ func createVirtualDisk(virtualStorageType *VirtualStorageType, path string, virt } func _createVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, securityDescriptor *uintptr, createVirtualDiskFlags uint32, providerSpecificFlags uint32, parameters *CreateVirtualDiskParameters, overlapped *syscall.Overlapped, handle *syscall.Handle) (win32err error) { - r0, _, _ := syscall.Syscall9(procCreateVirtualDisk.Addr(), 9, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(createVirtualDiskFlags), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(handle))) + r0, _, _ := syscall.SyscallN(procCreateVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(unsafe.Pointer(securityDescriptor)), uintptr(createVirtualDiskFlags), uintptr(providerSpecificFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(handle))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -75,7 +72,7 @@ func _createVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, vi } func detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, providerSpecificFlags uint32) (win32err error) { - r0, _, _ := syscall.Syscall(procDetachVirtualDisk.Addr(), 3, uintptr(handle), uintptr(detachVirtualDiskFlags), uintptr(providerSpecificFlags)) + r0, _, _ := syscall.SyscallN(procDetachVirtualDisk.Addr(), uintptr(handle), uintptr(detachVirtualDiskFlags), uintptr(providerSpecificFlags)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -83,7 +80,7 @@ func detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, pro } func getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint32, buffer *uint16) (win32err error) { - r0, _, _ := syscall.Syscall(procGetVirtualDiskPhysicalPath.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(diskPathSizeInBytes)), uintptr(unsafe.Pointer(buffer))) + r0, _, _ := syscall.SyscallN(procGetVirtualDiskPhysicalPath.Addr(), uintptr(handle), uintptr(unsafe.Pointer(diskPathSizeInBytes)), uintptr(unsafe.Pointer(buffer))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -100,7 +97,7 @@ func openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtua } func _openVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (win32err error) { - r0, _, _ := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(openVirtualDiskFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) + r0, _, _ := syscall.SyscallN(procOpenVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(openVirtualDiskFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/tools/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go index 469b16f63..89b66eda8 100644 --- a/tools/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -45,38 +42,34 @@ var ( modntdll = windows.NewLazySystemDLL("ntdll.dll") modws2_32 = windows.NewLazySystemDLL("ws2_32.dll") - procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") - procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW") - procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") - procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW") - procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") - procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength") - procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") - procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") - procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") - procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW") - procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW") - procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") - procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") - procRevertToSelf = modadvapi32.NewProc("RevertToSelf") - procBackupRead = modkernel32.NewProc("BackupRead") - procBackupWrite = modkernel32.NewProc("BackupWrite") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") - procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") - procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") - procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") - procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") - procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") - procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") - procLocalAlloc = modkernel32.NewProc("LocalAlloc") - procLocalFree = modkernel32.NewProc("LocalFree") - procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") - procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") - procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") - procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U") - procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") - procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") + procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW") + procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW") + procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") + procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") + procRevertToSelf = modadvapi32.NewProc("RevertToSelf") + procBackupRead = modkernel32.NewProc("BackupRead") + procBackupWrite = modkernel32.NewProc("BackupWrite") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") + procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe") + procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") + procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") + procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") + procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") + procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U") + procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") + procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") ) func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) { @@ -84,7 +77,7 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou if releaseAll { _p0 = 1 } - r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) + r0, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) success = r0 != 0 if true { err = errnoErr(e1) @@ -92,33 +85,8 @@ func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, ou return } -func convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(secInfo), uintptr(unsafe.Pointer(sddl)), uintptr(unsafe.Pointer(sddlSize)), 0) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - func convertSidToStringSid(sid *byte, str **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)), 0) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(str) - if err != nil { - return - } - return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size) -} - -func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd *uintptr, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str))) if r1 == 0 { err = errnoErr(e1) } @@ -126,21 +94,15 @@ func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision } func convertStringSidToSid(str *uint16, sid **byte) (err error) { - r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } return } -func getSecurityDescriptorLength(sd uintptr) (len uint32) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(sd), 0, 0) - len = uint32(r0) - return -} - func impersonateSelf(level uint32) (err error) { - r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(level), 0, 0) + r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(level)) if r1 == 0 { err = errnoErr(e1) } @@ -157,7 +119,7 @@ func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSiz } func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) if r1 == 0 { err = errnoErr(e1) } @@ -165,7 +127,7 @@ func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidS } func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) if r1 == 0 { err = errnoErr(e1) } @@ -182,7 +144,7 @@ func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, } func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procLookupPrivilegeDisplayNameW.Addr(), 5, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)), 0) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeDisplayNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId))) if r1 == 0 { err = errnoErr(e1) } @@ -199,7 +161,7 @@ func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size * } func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procLookupPrivilegeNameW.Addr(), 4, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -221,19 +183,19 @@ func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err err } func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) { - r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) if r1 == 0 { err = errnoErr(e1) } return } -func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) { +func openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) { var _p0 uint32 if openAsSelf { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -241,14 +203,14 @@ func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, } func revertToSelf() (err error) { - r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr()) if r1 == 0 { err = errnoErr(e1) } return } -func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { +func backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { var _p0 *byte if len(b) > 0 { _p0 = &b[0] @@ -261,14 +223,14 @@ func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, proce if processSecurity { _p2 = 1 } - r1, _, e1 := syscall.Syscall9(procBackupRead.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0) + r1, _, e1 := syscall.SyscallN(procBackupRead.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } return } -func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { +func backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { var _p0 *byte if len(b) > 0 { _p0 = &b[0] @@ -281,39 +243,39 @@ func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, p if processSecurity { _p2 = 1 } - r1, _, e1 := syscall.Syscall9(procBackupWrite.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0) + r1, _, e1 := syscall.SyscallN(procBackupWrite.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } return } -func cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(file), uintptr(unsafe.Pointer(o)), 0) +func cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) { + r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(file), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } return } -func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0) +func connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) { + r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } return } -func createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount), 0, 0) - newport = syscall.Handle(r0) +func createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount)) + newport = windows.Handle(r0) if newport == 0 { err = errnoErr(e1) } return } -func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) { +func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { var _p0 *uint16 _p0, err = syscall.UTF16PtrFromString(name) if err != nil { @@ -322,96 +284,93 @@ func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances ui return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa) } -func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) - handle = syscall.Handle(r0) - if handle == syscall.InvalidHandle { +func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { + r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa))) + handle = windows.Handle(r0) + if handle == windows.InvalidHandle { err = errnoErr(e1) } return } -func getCurrentThread() (h syscall.Handle) { - r0, _, _ := syscall.Syscall(procGetCurrentThread.Addr(), 0, 0, 0, 0) - h = syscall.Handle(r0) - return -} - -func getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) +func disconnectNamedPipe(pipe windows.Handle) (err error) { + r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe)) if r1 == 0 { err = errnoErr(e1) } return } -func getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) - if r1 == 0 { - err = errnoErr(e1) - } +func getCurrentThread() (h windows.Handle) { + r0, _, _ := syscall.SyscallN(procGetCurrentThread.Addr()) + h = windows.Handle(r0) return } -func getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout), 0) +func getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize)) if r1 == 0 { err = errnoErr(e1) } return } -func localAlloc(uFlags uint32, length uint32) (ptr uintptr) { - r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(uFlags), uintptr(length), 0) - ptr = uintptr(r0) +func getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances))) + if r1 == 0 { + err = errnoErr(e1) + } return } -func localFree(mem uintptr) { - syscall.Syscall(procLocalFree.Addr(), 1, uintptr(mem), 0, 0) +func getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout)) + if r1 == 0 { + err = errnoErr(e1) + } return } -func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(h), uintptr(flags), 0) +func setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) { + r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(h), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } return } -func ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) { - r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) +func ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) { + r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout))) status = ntStatus(r0) return } func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) { - r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(dacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(dacl))) status = ntStatus(r0) return } func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved)) status = ntStatus(r0) return } func rtlNtStatusToDosError(status ntStatus) (winerr error) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(status)) if r0 != 0 { winerr = syscall.Errno(r0) } return } -func wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { +func wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { var _p0 uint32 if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/.golangci.yml b/tools/vendor/github.com/Microsoft/hcsshim/.golangci.yml index abe77f57a..7d38a2fb9 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/.golangci.yml +++ b/tools/vendor/github.com/Microsoft/hcsshim/.golangci.yml @@ -20,6 +20,7 @@ linters: # - typecheck # - unused + - errorlint # error wrapping (eg, not using `errors.Is`, using `%s` instead of `%w` in `fmt.Errorf`) - gofmt # whether code was gofmt-ed - govet # enabled by default, but just to be sure - nolintlint # ill-formed or insufficient nolint directives @@ -53,6 +54,12 @@ issues: text: "^ST1003: should not use underscores in package names$" source: "^package cri_containerd$" + # don't bother with propper error wrapping in test code + - path: cri-containerd + linters: + - errorlint + text: "non-wrapping format verb for fmt.Errorf" + # This repo has a LOT of generated schema files, operating system bindings, and other # things that ST1003 from stylecheck won't like (screaming case Windows api constants for example). # There's also some structs that we *could* change the initialisms to be Go friendly diff --git a/tools/vendor/github.com/Microsoft/hcsshim/Makefile b/tools/vendor/github.com/Microsoft/hcsshim/Makefile index d8eb30b86..de6435894 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/Makefile +++ b/tools/vendor/github.com/Microsoft/hcsshim/Makefile @@ -29,12 +29,23 @@ ifeq "$(DEV_BUILD)" "1" DELTA_TARGET=out/delta-dev.tar.gz endif +ifeq "$(SNP_BUILD)" "1" +DELTA_TARGET=out/delta-snp.tar.gz +endif + # The link aliases for gcstools GCS_TOOLS=\ generichook \ install-drivers -.PHONY: all always rootfs test +# Common path prefix. +PATH_PREFIX:= +# These have PATH_PREFIX prepended to obtain the full path in recipies e.g. $(PATH_PREFIX)/$(VMGS_TOOL) +VMGS_TOOL:= +IGVM_TOOL:= +KERNEL_PATH:= + +.PHONY: all always rootfs test snp simple .DEFAULT_GOAL := all @@ -49,9 +60,58 @@ test: rootfs: out/rootfs.vhd -out/rootfs.vhd: out/rootfs.tar.gz bin/cmd/tar2ext4 +snp: out/kernelinitrd.vmgs out/rootfs.hash.vhd out/rootfs.vhd out/v2056.vmgs + +simple: out/simple.vmgs snp + +%.vmgs: %.bin + rm -f $@ + # du -BM returns the size of the bin file in M, eg 7M. The sed command replaces the M with *1024*1024 and then bc does the math to convert to bytes + $(PATH_PREFIX)/$(VMGS_TOOL) create --filepath $@ --filesize `du -BM $< | sed "s/M.*/*1024*1024/" | bc` + $(PATH_PREFIX)/$(VMGS_TOOL) write --filepath $@ --datapath $< -i=8 + +# Simplest debug UVM used to test changes to the linux kernel. No dmverity protection. Boots an initramdisk rather than directly booting a vhd disk. +out/simple.bin: out/initrd.img $(PATH_PREFIX)/$(KERNEL_PATH) boot/startup_simple.sh + rm -f $@ + python3 $(PATH_PREFIX)/$(IGVM_TOOL) -o $@ -kernel $(PATH_PREFIX)/$(KERNEL_PATH) -append "8250_core.nr_uarts=0 panic=-1 debug loglevel=7 rdinit=/startup_simple.sh" -rdinit out/initrd.img -vtl 0 + +ROOTFS_DEVICE:=/dev/sda +VERITY_DEVICE:=/dev/sdb +# Debug build for use with uvmtester. UVM with dm-verity protected vhd disk mounted directly via the kernel command line. Ignores corruption in dm-verity protected disk. (Use dmesg to see if dm-verity is ignoring data corruption.) +out/v2056.bin: out/rootfs.vhd out/rootfs.hash.vhd $(PATH_PREFIX)/$(KERNEL_PATH) out/rootfs.hash.datasectors out/rootfs.hash.datablocksize out/rootfs.hash.hashblocksize out/rootfs.hash.datablocks out/rootfs.hash.rootdigest out/rootfs.hash.salt boot/startup_v2056.sh + rm -f $@ + python3 $(PATH_PREFIX)/$(IGVM_TOOL) -o $@ -kernel $(PATH_PREFIX)/$(KERNEL_PATH) -append "8250_core.nr_uarts=0 panic=-1 debug loglevel=7 root=/dev/dm-0 dm-mod.create=\"dmverity,,,ro,0 $(shell cat out/rootfs.hash.datasectors) verity 1 $(ROOTFS_DEVICE) $(VERITY_DEVICE) $(shell cat out/rootfs.hash.datablocksize) $(shell cat out/rootfs.hash.hashblocksize) $(shell cat out/rootfs.hash.datablocks) 0 sha256 $(shell cat out/rootfs.hash.rootdigest) $(shell cat out/rootfs.hash.salt) 1 ignore_corruption\" init=/startup_v2056.sh" -vtl 0 + +# Full UVM with dm-verity protected vhd disk mounted directly via the kernel command line. +out/kernelinitrd.bin: out/rootfs.vhd out/rootfs.hash.vhd out/rootfs.hash.datasectors out/rootfs.hash.datablocksize out/rootfs.hash.hashblocksize out/rootfs.hash.datablocks out/rootfs.hash.rootdigest out/rootfs.hash.salt $(PATH_PREFIX)/$(KERNEL_PATH) boot/startup.sh + rm -f $@ + python3 $(PATH_PREFIX)/$(IGVM_TOOL) -o $@ -kernel $(PATH_PREFIX)/$(KERNEL_PATH) -append "8250_core.nr_uarts=0 panic=-1 debug loglevel=7 root=/dev/dm-0 dm-mod.create=\"dmverity,,,ro,0 $(shell cat out/rootfs.hash.datasectors) verity 1 $(ROOTFS_DEVICE) $(VERITY_DEVICE) $(shell cat out/rootfs.hash.datablocksize) $(shell cat out/rootfs.hash.hashblocksize) $(shell cat out/rootfs.hash.datablocks) 0 sha256 $(shell cat out/rootfs.hash.rootdigest) $(shell cat out/rootfs.hash.salt)\" init=/startup.sh" -vtl 0 + +# Rule to make a vhd from a file. This is used to create the rootfs.hash.vhd from rootfs.hash. +%.vhd: % bin/cmd/tar2ext4 + ./bin/cmd/tar2ext4 -only-vhd -i $< -o $@ + +# Rule to make a vhd from an ext4 file. This is used to create the rootfs.vhd from rootfs.ext4. +%.vhd: %.ext4 bin/cmd/tar2ext4 + ./bin/cmd/tar2ext4 -only-vhd -i $< -o $@ + +%.hash %.hash.info %.hash.datablocks %.hash.rootdigest %hash.datablocksize %.hash.datasectors %.hash.hashblocksize: %.ext4 %.hash.salt + veritysetup format --no-superblock --salt $(shell cat out/rootfs.hash.salt) $< $*.hash > $*.hash.info + # Retrieve info required by dm-verity at boot time + # Get the blocksize of rootfs + cat $*.hash.info | awk '/^Root hash:/{ print $$3 }' > $*.hash.rootdigest + cat $*.hash.info | awk '/^Salt:/{ print $$2 }' > $*.hash.salt + cat $*.hash.info | awk '/^Data block size:/{ print $$4 }' > $*.hash.datablocksize + cat $*.hash.info | awk '/^Hash block size:/{ print $$4 }' > $*.hash.hashblocksize + cat $*.hash.info | awk '/^Data blocks:/{ print $$3 }' > $*.hash.datablocks + echo $$(( $$(cat $*.hash.datablocks) * $$(cat $*.hash.datablocksize) / 512 )) > $*.hash.datasectors + +out/rootfs.hash.salt: + hexdump -vn32 -e'8/4 "%08X" 1 "\n"' /dev/random > $@ + +out/rootfs.ext4: out/rootfs.tar.gz bin/cmd/tar2ext4 gzip -f -d ./out/rootfs.tar.gz - bin/cmd/tar2ext4 -vhd -i ./out/rootfs.tar -o $@ + ./bin/cmd/tar2ext4 -i ./out/rootfs.tar -o $@ out/rootfs.tar.gz: out/initrd.img rm -rf rootfs-conv @@ -74,6 +134,20 @@ out/delta-dev.tar.gz: out/delta.tar.gz bin/internal/tools/snp-report tar -zcf $@ -C rootfs-dev . rm -rf rootfs-dev +out/delta-snp.tar.gz: out/delta.tar.gz bin/internal/tools/snp-report boot/startup_v2056.sh boot/startup_simple.sh boot/startup.sh + rm -rf rootfs-snp + mkdir rootfs-snp + tar -xzf out/delta.tar.gz -C rootfs-snp + cp boot/startup_v2056.sh rootfs-snp/startup_v2056.sh + cp boot/startup_simple.sh rootfs-snp/startup_simple.sh + cp boot/startup.sh rootfs-snp/startup.sh + cp bin/internal/tools/snp-report rootfs-snp/bin/ + chmod a+x rootfs-snp/startup_v2056.sh + chmod a+x rootfs-snp/startup_simple.sh + chmod a+x rootfs-snp/startup.sh + tar -zcf $@ -C rootfs-snp . + rm -rf rootfs-snp + out/delta.tar.gz: bin/init bin/vsockexec bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths Makefile @mkdir -p out rm -rf rootfs @@ -94,7 +168,10 @@ out/delta.tar.gz: bin/init bin/vsockexec bin/cmd/gcs bin/cmd/gcstools bin/cmd/ho tar -zcf $@ -C rootfs . rm -rf rootfs -bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths bin/cmd/tar2ext4 bin/internal/tools/snp-report: +out/containerd-shim-runhcs-v1.exe: + GOOS=windows $(GO_BUILD) -o $@ $(SRCROOT)/cmd/containerd-shim-runhcs-v1 + +bin/cmd/gcs bin/cmd/gcstools bin/cmd/hooks/wait-paths bin/cmd/tar2ext4 bin/internal/tools/snp-report bin/cmd/dmverity-vhd: @mkdir -p $(dir $@) GOOS=linux $(GO_BUILD) -o $@ $(SRCROOT)/$(@:bin/%=%) @@ -108,4 +185,4 @@ bin/init: init/init.o vsockexec/vsock.o %.o: %.c @mkdir -p $(dir $@) - $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< + $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< \ No newline at end of file diff --git a/tools/vendor/github.com/Microsoft/hcsshim/README.md b/tools/vendor/github.com/Microsoft/hcsshim/README.md index 5a1361539..320438048 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/README.md +++ b/tools/vendor/github.com/Microsoft/hcsshim/README.md @@ -9,15 +9,18 @@ It is primarily used in the [Moby](https://github.com/moby/moby) and [Containerd ## Building While this repository can be used as a library of sorts to call the HCS apis, there are a couple binaries built out of the repository as well. The main ones being the Linux guest agent, and an implementation of the [runtime v2 containerd shim api](https://github.com/containerd/containerd/blob/master/runtime/v2/README.md). + ### Linux Hyper-V Container Guest Agent To build the Linux guest agent itself all that's needed is to set your GOOS to "Linux" and build out of ./cmd/gcs. + ```powershell C:\> $env:GOOS="linux" C:\> go build .\cmd\gcs\ ``` or on a Linux machine + ```sh > go build ./cmd/gcs ``` @@ -33,13 +36,15 @@ make all ``` If the build is successful, in the `./out` folder you should see: + ```sh > ls ./out/ delta.tar.gz initrd.img rootfs.tar.gz ``` ### Containerd Shim -For info on the Runtime V2 API: https://github.com/containerd/containerd/blob/master/runtime/v2/README.md. + +For info on the [Runtime V2 API](https://github.com/containerd/containerd/blob/master/runtime/v2/README.md). Contrary to the typical Linux architecture of shim -> runc, the runhcs shim is used both to launch and manage the lifetime of containers. @@ -48,7 +53,9 @@ C:\> $env:GOOS="windows" C:\> go build .\cmd\containerd-shim-runhcs-v1 ``` -Then place the binary in the same directory that Containerd is located at in your environment. A default Containerd configuration file can be generated by running: +Then place the binary in the same directory that Containerd is located at in your environment. +A default Containerd configuration file can be generated by running: + ```powershell .\containerd.exe config default | Out-File "C:\Program Files\containerd\config.toml" -Encoding ascii ``` @@ -56,6 +63,7 @@ Then place the binary in the same directory that Containerd is located at in you This config file will already have the shim set as the default runtime for cri interactions. To trial using the shim out with ctr.exe: + ```powershell C:\> ctr.exe run --runtime io.containerd.runhcs.v1 --rm mcr.microsoft.com/windows/nanoserver:2004 windows-test cmd /c "echo Hello World!" ``` @@ -64,16 +72,69 @@ C:\> ctr.exe run --runtime io.containerd.runhcs.v1 --rm mcr.microsoft.com/window This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.microsoft.com. +the rights to use your contribution. For details, visit [Microsoft CLA](https://cla.microsoft.com). When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. -We also require that contributors [sign their commits](https://git-scm.com/docs/git-commit) using `git commit -s` or `git commit --signoff` to -certify they either authored the work themselves or otherwise have permission to use it in this project. Please see https://developercertificate.org/ for -more info, as well as to make sure that you can attest to the rules listed. Our CI uses the [DCO Github app](https://github.com/apps/dco) to ensure -that all commits in a given PR are signed-off. +We require that contributors sign their commits +to certify they either authored the work themselves or otherwise have permission to use it in this project. + +We also require that contributors sign their commits using using [`git commit --signoff`][git-commit-s] +to certify they either authored the work themselves or otherwise have permission to use it in this project. +A range of commits can be signed off using [`git rebase --signoff`][git-rebase-s]. + +Please see [the developer certificate](https://developercertificate.org) for more info, +as well as to make sure that you can attest to the rules listed. +Our CI uses the [DCO Github app](https://github.com/apps/dco) to ensure that all commits in a given PR are signed-off. + +### Linting + +Code must pass a linting stage, which uses [`golangci-lint`][lint]. +Since `./test` is a separate Go module, the linter is run from both the root and the +`test` directories. Additionally, the linter is run with `GOOS` set to both `windows` and +`linux`. + +The linting settings are stored in [`.golangci.yaml`](./.golangci.yaml), and can be run +automatically with VSCode by adding the following to your workspace or folder settings: + +```json + "go.lintTool": "golangci-lint", + "go.lintOnSave": "package", +``` + +Additional editor [integrations options are also available][lint-ide]. + +Alternatively, `golangci-lint` can be [installed][lint-install] and run locally: + +```shell +# use . or specify a path to only lint a package +# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0" +> golangci-lint run +``` + +To run across the entire repo for both `GOOS=windows` and `linux`: + +```powershell +> foreach ( $goos in ('windows', 'linux') ) { + foreach ( $repo in ('.', 'test') ) { + pwsh -Command "cd $repo && go env -w GOOS=$goos && golangci-lint.exe run --verbose" + } +} +``` + +### Go Generate + +The pipeline checks that auto-generated code, via `go generate`, are up to date. +Similar to the [linting stage](#linting), `go generate` is run in both the root and test Go modules. + +This can be done via: + +```shell +> go generate ./... +> cd test && go generate ./... +``` ## Code of Conduct @@ -83,7 +144,7 @@ contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additio ## Dependencies -This project requires Golang 1.17 or newer to build. +This project requires Golang 1.18 or newer to build. For system requirements to run this project, see the Microsoft docs on [Windows Container requirements](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/system-requirements). @@ -100,3 +161,10 @@ For additional details, see [Report a Computer Security Vulnerability](https://t --------------- Copyright (c) 2018 Microsoft Corp. All rights reserved. + +[lint]: https://golangci-lint.run/ +[lint-ide]: https://golangci-lint.run/usage/integrations/#editor-integration +[lint-install]: https://golangci-lint.run/usage/install/#local-installation + +[git-commit-s]: https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--s +[git-rebase-s]: https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---signoff diff --git a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/attach.go b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/attach.go index 54c4b3bc4..301a10888 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/attach.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/attach.go @@ -38,3 +38,31 @@ func AttachLayerStorageFilter(ctx context.Context, layerPath string, layerData L } return nil } + +// AttachOverlayFilter sets up a filter of the given type on a writable container layer. Currently the only +// supported filter types are WCIFS & UnionFS (defined in internal/hcs/schema2/layer.go) +// +// `volumePath` is volume path at which writable layer is mounted. If the +// path does not end in a `\` the platform will append it automatically. +// +// `layerData` is the parent read-only layer data. +func AttachOverlayFilter(ctx context.Context, volumePath string, layerData LayerData) (err error) { + title := "hcsshim::AttachOverlayFilter" + ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck + defer span.End() + defer func() { oc.SetSpanStatus(span, err) }() + span.AddAttributes( + trace.StringAttribute("volumePath", volumePath), + ) + + bytes, err := json.Marshal(layerData) + if err != nil { + return err + } + + err = hcsAttachOverlayFilter(volumePath, string(bytes)) + if err != nil { + return errors.Wrap(err, "failed to attach overlay filter") + } + return nil +} diff --git a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/detach.go b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/detach.go index daf1bfff2..6e00e4a1f 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/detach.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/detach.go @@ -4,7 +4,9 @@ package computestorage import ( "context" + "encoding/json" + hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2" "github.com/Microsoft/hcsshim/internal/oc" "github.com/pkg/errors" "go.opencensus.io/trace" @@ -26,3 +28,27 @@ func DetachLayerStorageFilter(ctx context.Context, layerPath string) (err error) } return nil } + +// DetachOverlayFilter detaches the filter on a writable container layer. +// +// `volumePath` is a path to writable container volume. +func DetachOverlayFilter(ctx context.Context, volumePath string, filterType hcsschema.FileSystemFilterType) (err error) { + title := "hcsshim::DetachOverlayFilter" + ctx, span := oc.StartSpan(ctx, title) //nolint:ineffassign,staticcheck + defer span.End() + defer func() { oc.SetSpanStatus(span, err) }() + span.AddAttributes(trace.StringAttribute("volumePath", volumePath)) + + layerData := LayerData{} + layerData.FilterType = filterType + bytes, err := json.Marshal(layerData) + if err != nil { + return err + } + + err = hcsDetachOverlayFilter(volumePath, string(bytes)) + if err != nil { + return errors.Wrap(err, "failed to detach overlay filter") + } + return nil +} diff --git a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/storage.go b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/storage.go index c38d3aa5a..5af931f2f 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/storage.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/storage.go @@ -19,14 +19,17 @@ import ( //sys hcsFormatWritableLayerVhd(handle windows.Handle) (hr error) = computestorage.HcsFormatWritableLayerVhd? //sys hcsGetLayerVhdMountPath(vhdHandle windows.Handle, mountPath **uint16) (hr error) = computestorage.HcsGetLayerVhdMountPath? //sys hcsSetupBaseOSVolume(layerPath string, volumePath string, options string) (hr error) = computestorage.HcsSetupBaseOSVolume? +//sys hcsAttachOverlayFilter(volumePath string, layerData string) (hr error) = computestorage.HcsAttachOverlayFilter? +//sys hcsDetachOverlayFilter(volumePath string, layerData string) (hr error) = computestorage.HcsDetachOverlayFilter? type Version = hcsschema.Version type Layer = hcsschema.Layer // LayerData is the data used to describe parent layer information. type LayerData struct { - SchemaVersion Version `json:"SchemaVersion,omitempty"` - Layers []Layer `json:"Layers,omitempty"` + SchemaVersion Version `json:"SchemaVersion,omitempty"` + Layers []Layer `json:"Layers,omitempty"` + FilterType hcsschema.FileSystemFilterType `json:"FilterType,omitempty"` } // ExportLayerOptions are the set of options that are used with the `computestorage.HcsExportLayer` syscall. diff --git a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go index b996b35e6..9f697beca 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/computestorage/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -43,8 +40,10 @@ var ( modcomputestorage = windows.NewLazySystemDLL("computestorage.dll") procHcsAttachLayerStorageFilter = modcomputestorage.NewProc("HcsAttachLayerStorageFilter") + procHcsAttachOverlayFilter = modcomputestorage.NewProc("HcsAttachOverlayFilter") procHcsDestroyLayer = modcomputestorage.NewProc("HcsDestroyLayer") procHcsDetachLayerStorageFilter = modcomputestorage.NewProc("HcsDetachLayerStorageFilter") + procHcsDetachOverlayFilter = modcomputestorage.NewProc("HcsDetachOverlayFilter") procHcsExportLayer = modcomputestorage.NewProc("HcsExportLayer") procHcsFormatWritableLayerVhd = modcomputestorage.NewProc("HcsFormatWritableLayerVhd") procHcsGetLayerVhdMountPath = modcomputestorage.NewProc("HcsGetLayerVhdMountPath") @@ -73,7 +72,36 @@ func _hcsAttachLayerStorageFilter(layerPath *uint16, layerData *uint16) (hr erro if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsAttachLayerStorageFilter.Addr(), 2, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(layerData)), 0) + r0, _, _ := syscall.SyscallN(procHcsAttachLayerStorageFilter.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(layerData))) + if int32(r0) < 0 { + if r0&0x1fff0000 == 0x00070000 { + r0 &= 0xffff + } + hr = syscall.Errno(r0) + } + return +} + +func hcsAttachOverlayFilter(volumePath string, layerData string) (hr error) { + var _p0 *uint16 + _p0, hr = syscall.UTF16PtrFromString(volumePath) + if hr != nil { + return + } + var _p1 *uint16 + _p1, hr = syscall.UTF16PtrFromString(layerData) + if hr != nil { + return + } + return _hcsAttachOverlayFilter(_p0, _p1) +} + +func _hcsAttachOverlayFilter(volumePath *uint16, layerData *uint16) (hr error) { + hr = procHcsAttachOverlayFilter.Find() + if hr != nil { + return + } + r0, _, _ := syscall.SyscallN(procHcsAttachOverlayFilter.Addr(), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -97,7 +125,7 @@ func _hcsDestroyLayer(layerPath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsDestroyLayer.Addr(), 1, uintptr(unsafe.Pointer(layerPath)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsDestroyLayer.Addr(), uintptr(unsafe.Pointer(layerPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -121,7 +149,36 @@ func _hcsDetachLayerStorageFilter(layerPath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsDetachLayerStorageFilter.Addr(), 1, uintptr(unsafe.Pointer(layerPath)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsDetachLayerStorageFilter.Addr(), uintptr(unsafe.Pointer(layerPath))) + if int32(r0) < 0 { + if r0&0x1fff0000 == 0x00070000 { + r0 &= 0xffff + } + hr = syscall.Errno(r0) + } + return +} + +func hcsDetachOverlayFilter(volumePath string, layerData string) (hr error) { + var _p0 *uint16 + _p0, hr = syscall.UTF16PtrFromString(volumePath) + if hr != nil { + return + } + var _p1 *uint16 + _p1, hr = syscall.UTF16PtrFromString(layerData) + if hr != nil { + return + } + return _hcsDetachOverlayFilter(_p0, _p1) +} + +func _hcsDetachOverlayFilter(volumePath *uint16, layerData *uint16) (hr error) { + hr = procHcsDetachOverlayFilter.Find() + if hr != nil { + return + } + r0, _, _ := syscall.SyscallN(procHcsDetachOverlayFilter.Addr(), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -160,7 +217,7 @@ func _hcsExportLayer(layerPath *uint16, exportFolderPath *uint16, layerData *uin if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsExportLayer.Addr(), 4, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(exportFolderPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsExportLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(exportFolderPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -175,7 +232,7 @@ func hcsFormatWritableLayerVhd(handle windows.Handle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsFormatWritableLayerVhd.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsFormatWritableLayerVhd.Addr(), uintptr(handle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -190,7 +247,7 @@ func hcsGetLayerVhdMountPath(vhdHandle windows.Handle, mountPath **uint16) (hr e if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetLayerVhdMountPath.Addr(), 2, uintptr(vhdHandle), uintptr(unsafe.Pointer(mountPath)), 0) + r0, _, _ := syscall.SyscallN(procHcsGetLayerVhdMountPath.Addr(), uintptr(vhdHandle), uintptr(unsafe.Pointer(mountPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -224,7 +281,7 @@ func _hcsImportLayer(layerPath *uint16, sourceFolderPath *uint16, layerData *uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsImportLayer.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(sourceFolderPath)), uintptr(unsafe.Pointer(layerData))) + r0, _, _ := syscall.SyscallN(procHcsImportLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(sourceFolderPath)), uintptr(unsafe.Pointer(layerData))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -258,7 +315,7 @@ func _hcsInitializeWritableLayer(writableLayerPath *uint16, layerData *uint16, o if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsInitializeWritableLayer.Addr(), 3, uintptr(unsafe.Pointer(writableLayerPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsInitializeWritableLayer.Addr(), uintptr(unsafe.Pointer(writableLayerPath)), uintptr(unsafe.Pointer(layerData)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -287,7 +344,7 @@ func _hcsSetupBaseOSLayer(layerPath *uint16, handle windows.Handle, options *uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSetupBaseOSLayer.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(handle), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsSetupBaseOSLayer.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(handle), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -321,7 +378,7 @@ func _hcsSetupBaseOSVolume(layerPath *uint16, volumePath *uint16, options *uint1 if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSetupBaseOSVolume.Addr(), 3, uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(options))) + r0, _, _ := syscall.SyscallN(procHcsSetupBaseOSVolume.Addr(), uintptr(unsafe.Pointer(layerPath)), uintptr(unsafe.Pointer(volumePath)), uintptr(unsafe.Pointer(options))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/Microsoft/hcsshim/container.go b/tools/vendor/github.com/Microsoft/hcsshim/container.go index c8f09f88b..0ad7f495a 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/container.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/container.go @@ -75,7 +75,7 @@ func init() { func CreateContainer(id string, c *ContainerConfig) (Container, error) { fullConfig, err := mergemaps.MergeJSON(c, createContainerAdditionalJSON) if err != nil { - return nil, fmt.Errorf("failed to merge additional JSON '%s': %s", createContainerAdditionalJSON, err) + return nil, fmt.Errorf("failed to merge additional JSON '%s': %w", createContainerAdditionalJSON, err) } system, err := hcs.CreateComputeSystem(context.Background(), id, fullConfig) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/errors.go b/tools/vendor/github.com/Microsoft/hcsshim/errors.go index 594bbfb7a..b441b0cd3 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/errors.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/errors.go @@ -115,6 +115,7 @@ func (e *ContainerError) Error() string { s += " encountered an error during " + e.Operation } + //nolint:errorlint // legacy code switch e.Err.(type) { case nil: break @@ -145,6 +146,7 @@ func (e *ProcessError) Error() string { s += " encountered an error during " + e.Operation } + //nolint:errorlint // legacy code switch e.Err.(type) { case nil: break @@ -166,10 +168,10 @@ func (e *ProcessError) Error() string { // already exited, or does not exist. Both IsAlreadyStopped and IsNotExist // will currently return true when the error is ErrElementNotFound. func IsNotExist(err error) bool { - if _, ok := err.(EndpointNotFoundError); ok { + if _, ok := err.(EndpointNotFoundError); ok { //nolint:errorlint // legacy code return true } - if _, ok := err.(NetworkNotFoundError); ok { + if _, ok := err.(NetworkNotFoundError); ok { //nolint:errorlint // legacy code return true } return hcs.IsNotExist(getInnerError(err)) @@ -224,6 +226,7 @@ func IsAccessIsDenied(err error) bool { } func getInnerError(err error) error { + //nolint:errorlint // legacy code switch pe := err.(type) { case nil: return nil @@ -236,14 +239,14 @@ func getInnerError(err error) error { } func convertSystemError(err error, c *container) error { - if serr, ok := err.(*hcs.SystemError); ok { + if serr, ok := err.(*hcs.SystemError); ok { //nolint:errorlint // legacy code return &ContainerError{Container: c, Operation: serr.Op, Err: serr.Err, Events: serr.Events} } return err } func convertProcessError(err error, p *process) error { - if perr, ok := err.(*hcs.ProcessError); ok { + if perr, ok := err.(*hcs.ProcessError); ok { //nolint:errorlint // legacy code return &ProcessError{Process: p, Operation: perr.Op, Err: perr.Err, Events: perr.Events} } return err diff --git a/tools/vendor/github.com/Microsoft/hcsshim/hnsaccelnet.go b/tools/vendor/github.com/Microsoft/hcsshim/hnsaccelnet.go new file mode 100644 index 000000000..86c7c22aa --- /dev/null +++ b/tools/vendor/github.com/Microsoft/hcsshim/hnsaccelnet.go @@ -0,0 +1,46 @@ +//go:build windows + +package hcsshim + +import ( + "errors" + + "github.com/Microsoft/hcsshim/internal/hns" +) + +// HNSNnvManagementMacAddress represents management mac address +// which needs to be excluded from VF reassignment +type HNSNnvManagementMacAddress = hns.HNSNnvManagementMacAddress + +// HNSNnvManagementMacList represents a list of management +// mac addresses for exclusion from VF reassignment +type HNSNnvManagementMacList = hns.HNSNnvManagementMacList + +var ( + ErrorEmptyMacAddressList = errors.New("management mac_address list is empty") +) + +// SetNnvManagementMacAddresses sets a list of +// management mac addresses in hns for exclusion from VF reassignment. +func SetNnvManagementMacAddresses(managementMacAddresses []string) (*HNSNnvManagementMacList, error) { + if len(managementMacAddresses) == 0 { + return nil, ErrorEmptyMacAddressList + } + nnvManagementMacList := &HNSNnvManagementMacList{} + for _, mac := range managementMacAddresses { + nnvManagementMacList.MacAddressList = append(nnvManagementMacList.MacAddressList, HNSNnvManagementMacAddress{MacAddress: mac}) + } + return nnvManagementMacList.Set() +} + +// GetNnvManagementMacAddresses retrieves a list of +// management mac addresses in hns for exclusion from VF reassignment. +func GetNnvManagementMacAddresses() (*HNSNnvManagementMacList, error) { + return hns.GetNnvManagementMacAddressList() +} + +// DeleteNnvManagementMacAddresses delete list of +// management mac addresses in hns which are excluded from VF reassignment. +func DeleteNnvManagementMacAddresses() (*HNSNnvManagementMacList, error) { + return hns.DeleteNnvManagementMacAddressList() +} diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go index 37afbf691..8ef611d6a 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go @@ -63,7 +63,7 @@ func (process *Process) SystemID() string { } func (process *Process) processSignalResult(ctx context.Context, err error) (bool, error) { - switch err { + switch err { //nolint:errorlint case nil: return true, nil case ErrVmcomputeOperationInvalidState, ErrComputeSystemDoesNotExist, ErrElementNotFound: diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/layer.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/layer.go index 176c49d49..cb8dea08d 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/layer.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/layer.go @@ -9,6 +9,13 @@ package hcsschema +type FileSystemFilterType string + +const ( + UnionFS FileSystemFilterType = "UnionFS" + WCIFS FileSystemFilterType = "WCIFS" +) + type Layer struct { Id string `json:"Id,omitempty"` diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_hive.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_hive.go new file mode 100644 index 000000000..e7b605fda --- /dev/null +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_hive.go @@ -0,0 +1,13 @@ +package hcsschema + +// NOTE: manually added + +type RegistryHive string + +// List of RegistryHive +const ( + RegistryHive_SYSTEM RegistryHive = "System" + RegistryHive_SOFTWARE RegistryHive = "Software" + RegistryHive_SECURITY RegistryHive = "Security" + RegistryHive_SAM RegistryHive = "Sam" +) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_key.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_key.go index 26fde99c7..1883444a5 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_key.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_key.go @@ -10,7 +10,7 @@ package hcsschema type RegistryKey struct { - Hive string `json:"Hive,omitempty"` + Hive RegistryHive `json:"Hive,omitempty"` Name string `json:"Name,omitempty"` diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value.go index 3f203176c..13f24d536 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value.go @@ -14,7 +14,7 @@ type RegistryValue struct { Name string `json:"Name,omitempty"` - Type_ string `json:"Type,omitempty"` + Type_ RegistryValueType `json:"Type,omitempty"` // One and only one value type must be set. StringValue string `json:"StringValue,omitempty"` diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value_type.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value_type.go new file mode 100644 index 000000000..c8b4f6c95 --- /dev/null +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/schema2/registry_value_type.go @@ -0,0 +1,17 @@ +package hcsschema + +// NOTE: manually added + +type RegistryValueType string + +// List of RegistryValueType +const ( + RegistryValueType_NONE RegistryValueType = "None" + RegistryValueType_STRING RegistryValueType = "String" + RegistryValueType_EXPANDED_STRING RegistryValueType = "ExpandedString" + RegistryValueType_MULTI_STRING RegistryValueType = "MultiString" + RegistryValueType_BINARY RegistryValueType = "Binary" + RegistryValueType_D_WORD RegistryValueType = "DWord" + RegistryValueType_Q_WORD RegistryValueType = "QWord" + RegistryValueType_CUSTOM_TYPE RegistryValueType = "CustomType" +) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go index cf1db7da9..81d60ed43 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go @@ -97,7 +97,7 @@ func CreateComputeSystem(ctx context.Context, id string, hcsDocumentInterface in events, err := processAsyncHcsResult(ctx, createError, resultJSON, computeSystem.callbackNumber, hcsNotificationSystemCreateCompleted, &timeout.SystemCreate) if err != nil { - if err == ErrTimeout { + if errors.Is(err, ErrTimeout) { // Terminate the compute system if it still exists. We're okay to // ignore a failure here. _ = computeSystem.Terminate(ctx) @@ -238,7 +238,7 @@ func (computeSystem *System) Shutdown(ctx context.Context) error { resultJSON, err := vmcompute.HcsShutdownComputeSystem(ctx, computeSystem.handle, "") events := processHcsResult(ctx, resultJSON) - switch err { + switch err { //nolint:errorlint case nil, ErrVmcomputeAlreadyStopped, ErrComputeSystemDoesNotExist, ErrVmcomputeOperationPending: default: return makeSystemError(computeSystem, operation, err, events) @@ -259,7 +259,7 @@ func (computeSystem *System) Terminate(ctx context.Context) error { resultJSON, err := vmcompute.HcsTerminateComputeSystem(ctx, computeSystem.handle, "") events := processHcsResult(ctx, resultJSON) - switch err { + switch err { //nolint:errorlint case nil, ErrVmcomputeAlreadyStopped, ErrComputeSystemDoesNotExist, ErrVmcomputeOperationPending: default: return makeSystemError(computeSystem, operation, err, events) @@ -279,7 +279,7 @@ func (computeSystem *System) waitBackground() { span.AddAttributes(trace.StringAttribute("cid", computeSystem.id)) err := waitForNotification(ctx, computeSystem.callbackNumber, hcsNotificationSystemExited, nil) - switch err { + switch err { //nolint:errorlint case nil: log.G(ctx).Debug("system exited") case ErrVmcomputeUnexpectedExit: diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go index 5dcb97eb3..76eb2be7c 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go @@ -14,14 +14,14 @@ import ( "golang.org/x/sys/windows" ) -// makeOpenFiles calls winio.MakeOpenFile for each handle in a slice but closes all the handles +// makeOpenFiles calls winio.NewOpenFile for each handle in a slice but closes all the handles // if there is an error. func makeOpenFiles(hs []syscall.Handle) (_ []io.ReadWriteCloser, err error) { fs := make([]io.ReadWriteCloser, len(hs)) for i, h := range hs { if h != syscall.Handle(0) { if err == nil { - fs[i], err = winio.MakeOpenFile(h) + fs[i], err = winio.NewOpenFile(windows.Handle(h)) } if err != nil { syscall.Close(h) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsaccelnet.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsaccelnet.go new file mode 100644 index 000000000..82ca5baef --- /dev/null +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsaccelnet.go @@ -0,0 +1,60 @@ +//go:build windows + +package hns + +import ( + "encoding/json" + + "github.com/sirupsen/logrus" +) + +// HNSNnvManagementMacAddress represents management mac address +// which needs to be excluded from VF reassignment +type HNSNnvManagementMacAddress struct { + MacAddress string `json:",omitempty"` +} + +// HNSNnvManagementMacList represents a list of management +// mac addresses for exclusion from VF reassignment +type HNSNnvManagementMacList struct { + MacAddressList []HNSNnvManagementMacAddress `json:",omitempty"` +} + +// HNSNnvManagementMacRequest makes a HNS call to modify/query NnvManagementMacList +func HNSNnvManagementMacRequest(method, path, request string) (*HNSNnvManagementMacList, error) { + nnvManagementMacList := &HNSNnvManagementMacList{} + err := hnsCall(method, "/accelnet/"+path, request, &nnvManagementMacList) + if err != nil { + return nil, err + } + return nnvManagementMacList, nil +} + +// Set ManagementMacAddressList by sending "POST" NnvManagementMacRequest to HNS. +func (nnvManagementMacList *HNSNnvManagementMacList) Set() (*HNSNnvManagementMacList, error) { + operation := "Set" + title := "hcsshim::nnvManagementMacList::" + operation + logrus.Debugf(title+" id=%s", nnvManagementMacList.MacAddressList) + + jsonString, err := json.Marshal(nnvManagementMacList) + if err != nil { + return nil, err + } + return HNSNnvManagementMacRequest("POST", "", string(jsonString)) +} + +// Get ManagementMacAddressList by sending "GET" NnvManagementMacRequest to HNS. +func GetNnvManagementMacAddressList() (*HNSNnvManagementMacList, error) { + operation := "Get" + title := "hcsshim::nnvManagementMacList::" + operation + logrus.Debugf(title) + return HNSNnvManagementMacRequest("GET", "", "") +} + +// Delete ManagementMacAddressList by sending "DELETE" NnvManagementMacRequest to HNS. +func DeleteNnvManagementMacAddressList() (*HNSNnvManagementMacList, error) { + operation := "Delete" + title := "hcsshim::nnvManagementMacList::" + operation + logrus.Debugf(title) + return HNSNnvManagementMacRequest("DELETE", "", "") +} diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go index 593664419..6238e103b 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go @@ -10,6 +10,28 @@ import ( "github.com/sirupsen/logrus" ) +// EndpointState represents the states of an HNS Endpoint lifecycle. +type EndpointState uint16 + +// EndpointState const +// The lifecycle of an Endpoint goes through created, attached, AttachedSharing - endpoint is being shared with other containers, +// detached, after being attached, degraded and finally destroyed. +// Note: This attribute is used by calico to define stale containers and is dependent on HNS v1 api, if we move to HNS v2 api we will need +// to update the current calico code and cordinate the change with calico. Reach out to Microsoft to facilate the change via HNS. +const ( + Uninitialized EndpointState = iota + Created EndpointState = 1 + Attached EndpointState = 2 + AttachedSharing EndpointState = 3 + Detached EndpointState = 4 + Degraded EndpointState = 5 + Destroyed EndpointState = 6 +) + +func (es EndpointState) String() string { + return [...]string{"Uninitialized", "Attached", "AttachedSharing", "Detached", "Degraded", "Destroyed"}[es] +} + // HNSEndpoint represents a network endpoint in HNS type HNSEndpoint struct { Id string `json:"ID,omitempty"` @@ -34,6 +56,7 @@ type HNSEndpoint struct { Namespace *Namespace `json:",omitempty"` EncapOverhead uint16 `json:",omitempty"` SharedContainers []string `json:",omitempty"` + State EndpointState `json:",omitempty"` } // SystemType represents the type of the system on which actions are done diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go index 0a8f36d83..e61dc8de6 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go @@ -31,7 +31,7 @@ func hnsCallRawResponse(method, path, request string) (*hnsResponse, error) { func hnsCall(method, path, request string, returnResponse interface{}) error { hnsresponse, err := hnsCallRawResponse(method, path, request) if err != nil { - return fmt.Errorf("failed during hnsCallRawResponse: %v", err) + return fmt.Errorf("failed during hnsCallRawResponse: %w", err) } if !hnsresponse.Success { return fmt.Errorf("hns failed with error : %s", hnsresponse.Error) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go index 082c018a4..e97e4f631 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go @@ -57,9 +57,10 @@ type PaPolicy struct { type OutboundNatPolicy struct { Policy - VIP string `json:"VIP,omitempty"` - Exceptions []string `json:"ExceptionList,omitempty"` - Destinations []string `json:",omitempty"` + VIP string `json:"VIP,omitempty"` + Exceptions []string `json:"ExceptionList,omitempty"` + Destinations []string `json:",omitempty"` + MaxPortPoolUsage uint16 `json:",omitempty"` } type ProxyPolicy struct { diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go index 749588ad3..a64b67923 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go @@ -56,7 +56,7 @@ func issueNamespaceRequest(id *string, method, subpath string, request interface if strings.Contains(err.Error(), "Element not found.") { return nil, os.ErrNotExist } - return nil, fmt.Errorf("%s %s: %s", method, hnspath, err) + return nil, fmt.Errorf("%s %s: %w", method, hnspath, err) } return &ns, err } @@ -86,7 +86,7 @@ func GetNamespaceEndpoints(id string) ([]string, error) { var endpoint namespaceEndpointRequest err = json.Unmarshal(rsrc.Data, &endpoint) if err != nil { - return nil, fmt.Errorf("unmarshal endpoint: %s", err) + return nil, fmt.Errorf("unmarshal endpoint: %w", err) } endpoints = append(endpoints, endpoint.ID) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go index a35ee945d..11c7e97e3 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -69,7 +66,7 @@ func __hnsCall(method *uint16, path *uint16, object *uint16, response **uint16) if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHNSCall.Addr(), 4, uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response)), 0, 0) + r0, _, _ := syscall.SyscallN(procHNSCall.Addr(), uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go index a17a11250..14c750bd8 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -46,6 +43,6 @@ var ( ) func coTaskMemFree(buffer unsafe.Pointer) { - syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(buffer), 0, 0) + syscall.SyscallN(procCoTaskMemFree.Addr(), uintptr(buffer)) return } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go index bcca84b0d..eae3cc500 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go @@ -4,6 +4,7 @@ package jobobject import ( "context" + "errors" "fmt" "sync" "unsafe" @@ -59,7 +60,7 @@ func pollIOCP(ctx context.Context, iocpHandle windows.Handle) { }).Warn("failed to parse job object message") continue } - if err := msq.Enqueue(notification); err == queue.ErrQueueClosed { + if err := msq.Enqueue(notification); errors.Is(err, queue.ErrQueueClosed) { // Write will only return an error when the queue is closed. // The only time a queue would ever be closed is when we call `Close` on // the job it belongs to which also removes it from the jobMap, so something diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go index 4a224fbec..10ae4d670 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go @@ -374,7 +374,7 @@ func (job *JobObject) Pids() ([]uint32, error) { return []uint32{}, nil } - if err != winapi.ERROR_MORE_DATA { + if err != winapi.ERROR_MORE_DATA { //nolint:errorlint return nil, fmt.Errorf("failed initial query for PIDs in job object: %w", err) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go index 03f71d9a4..e3b1a1edc 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go @@ -143,6 +143,13 @@ func (job *JobObject) SetCPUAffinity(affinityBitMask uint64) error { return err } info.BasicLimitInformation.LimitFlags |= uint32(windows.JOB_OBJECT_LIMIT_AFFINITY) + + // We really, really shouldn't be running on 32 bit, but just in case (and to satisfy CodeQL) ... + const maxUintptr = ^uintptr(0) + if affinityBitMask > uint64(maxUintptr) { + return fmt.Errorf("affinity bitmask (%d) exceeds max allowable value (%d)", affinityBitMask, maxUintptr) + } + info.BasicLimitInformation.Affinity = uintptr(affinityBitMask) return job.setExtendedInformation(info) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/log/format.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/log/format.go index 6d69c15b9..1ceb26bad 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/log/format.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/log/format.go @@ -104,6 +104,7 @@ func encode(v interface{}) (_ []byte, err error) { if jErr := enc.Encode(v); jErr != nil { if err != nil { // TODO (go1.20): use multierror via fmt.Errorf("...: %w; ...: %w", ...) + //nolint:errorlint // non-wrapping format verb for fmt.Errorf return nil, fmt.Errorf("protojson encoding: %v; json encoding: %w", err, jErr) } return nil, fmt.Errorf("json encoding: %w", jErr) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go index 3e175e522..cceb3e2d1 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go @@ -46,6 +46,7 @@ const ( ExpectedType = "expected-type" Bool = "bool" + Int32 = "int32" Uint32 = "uint32" Uint64 = "uint64" diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/memory/pool.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/memory/pool.go index 1ef5814d7..6d39ca3bf 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/memory/pool.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/memory/pool.go @@ -126,7 +126,7 @@ func (pa *PoolAllocator) Allocate(size uint64) (MappedRegion, error) { // this means that there are no more regions for the current class, try expanding if nextCls != memCls { if err := pa.split(memCls); err != nil { - if err == ErrInvalidMemoryClass { + if errors.Is(err, ErrInvalidMemoryClass) { return nil, ErrNotEnoughSpace } return nil, err @@ -147,7 +147,7 @@ func (pa *PoolAllocator) Allocate(size uint64) (MappedRegion, error) { } // Release marks a memory region of class `memCls` and offset `offset` as free and tries to merge smaller regions into -// a bigger one +// a bigger one. func (pa *PoolAllocator) Release(reg MappedRegion) error { mp := pa.pools[reg.Type()] if mp == nil { @@ -164,7 +164,7 @@ func (pa *PoolAllocator) Release(reg MappedRegion) error { return ErrNotAllocated } if err := pa.merge(n.parent); err != nil { - if err != ErrEarlyMerge { + if !errors.Is(err, ErrEarlyMerge) { return err } } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/oc/errors.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/oc/errors.go index 71df25b8d..8c41a3661 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/oc/errors.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/oc/errors.go @@ -6,7 +6,7 @@ import ( "net" "os" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -16,7 +16,7 @@ import ( func toStatusCode(err error) codes.Code { // checks if err implements GRPCStatus() *"google.golang.org/grpc/status".Status, - // wraps an error defined in "github.com/containerd/containerd/errdefs", or is a + // wraps an error defined in "github.com/containerd/errdefs", or is a // context timeout or cancelled error if s, ok := status.FromError(errdefs.ToGRPC(err)); ok { return s.Code() diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go index 70368533b..b087b9879 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go @@ -243,7 +243,7 @@ func RemoveRelative(path string, root *os.File) error { if err == nil { defer f.Close() err = deleteOnClose(f) - if err == syscall.ERROR_ACCESS_DENIED { + if err == syscall.ERROR_ACCESS_DENIED { //nolint:errorlint // Maybe the file is marked readonly. Clear the bit and retry. _ = clearReadOnly(f) err = deleteOnClose(f) diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go index 26c986b88..395f54687 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/security/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -48,7 +45,7 @@ var ( ) func getSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, ppsidOwner **uintptr, ppsidGroup **uintptr, ppDacl *uintptr, ppSacl *uintptr, ppSecurityDescriptor *uintptr) (win32err error) { - r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(si), uintptr(unsafe.Pointer(ppsidOwner)), uintptr(unsafe.Pointer(ppsidGroup)), uintptr(unsafe.Pointer(ppDacl)), uintptr(unsafe.Pointer(ppSacl)), uintptr(unsafe.Pointer(ppSecurityDescriptor)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(si), uintptr(unsafe.Pointer(ppsidOwner)), uintptr(unsafe.Pointer(ppsidGroup)), uintptr(unsafe.Pointer(ppDacl)), uintptr(unsafe.Pointer(ppSacl)), uintptr(unsafe.Pointer(ppSecurityDescriptor))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -56,7 +53,7 @@ func getSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, ppsidO } func setEntriesInAcl(count uintptr, pListOfEEs uintptr, oldAcl uintptr, newAcl *uintptr) (win32err error) { - r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(count), uintptr(pListOfEEs), uintptr(oldAcl), uintptr(unsafe.Pointer(newAcl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetEntriesInAclW.Addr(), uintptr(count), uintptr(pListOfEEs), uintptr(oldAcl), uintptr(unsafe.Pointer(newAcl))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -64,7 +61,7 @@ func setEntriesInAcl(count uintptr, pListOfEEs uintptr, oldAcl uintptr, newAcl * } func setSecurityInfo(handle syscall.Handle, objectType uint32, si uint32, psidOwner uintptr, psidGroup uintptr, pDacl uintptr, pSacl uintptr) (win32err error) { - r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(si), uintptr(psidOwner), uintptr(psidGroup), uintptr(pDacl), uintptr(pSacl), 0, 0) + r0, _, _ := syscall.SyscallN(procSetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(si), uintptr(psidOwner), uintptr(psidGroup), uintptr(pDacl), uintptr(pSacl)) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/vmcompute.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/vmcompute.go index 79b14ef97..67ca897cf 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/vmcompute.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/vmcompute.go @@ -104,7 +104,7 @@ func execute(ctx gcontext.Context, timeout time.Duration, f func() error) error }() select { case <-ctx.Done(): - if ctx.Err() == gcontext.DeadlineExceeded { + if ctx.Err() == gcontext.DeadlineExceeded { //nolint:errorlint log.G(ctx).WithField(logfields.Timeout, trueTimeout). Warning("Syscall did not complete within operation timeout. This may indicate a platform issue. " + "If it appears to be making no forward progress, obtain the stacks and see if there is a syscall " + @@ -150,7 +150,7 @@ func HcsCreateComputeSystem(ctx gcontext.Context, id string, configuration strin if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -205,7 +205,7 @@ func HcsStartComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, option if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -228,7 +228,7 @@ func HcsShutdownComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, opt if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -251,7 +251,7 @@ func HcsTerminateComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, op if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -274,7 +274,7 @@ func HcsPauseComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, option if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -297,7 +297,7 @@ func HcsResumeComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, optio if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() @@ -621,7 +621,7 @@ func HcsSaveComputeSystem(ctx gcontext.Context, computeSystem HcsSystem, options if result != "" { span.AddAttributes(trace.StringAttribute("result", result)) } - if hr != errVmcomputeOperationPending { + if hr != errVmcomputeOperationPending { //nolint:errorlint // explicitly returned oc.SetSpanStatus(span, hr) } }() diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go index 42368872b..67779de50 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -75,7 +72,7 @@ func hcsCloseComputeSystem(computeSystem HcsSystem) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsCloseComputeSystem.Addr(), 1, uintptr(computeSystem), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsCloseComputeSystem.Addr(), uintptr(computeSystem)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -90,7 +87,7 @@ func hcsCloseProcess(process HcsProcess) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsCloseProcess.Addr(), 1, uintptr(process), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsCloseProcess.Addr(), uintptr(process)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -119,7 +116,7 @@ func _hcsCreateComputeSystem(id *uint16, configuration *uint16, identity syscall if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsCreateComputeSystem.Addr(), 5, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsCreateComputeSystem.Addr(), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -143,7 +140,7 @@ func _hcsCreateProcess(computeSystem HcsSystem, processParameters *uint16, proce if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsCreateProcess.Addr(), 5, uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsCreateProcess.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -167,7 +164,7 @@ func _hcsEnumerateComputeSystems(query *uint16, computeSystems **uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsEnumerateComputeSystems.Addr(), 3, uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsEnumerateComputeSystems.Addr(), uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -191,7 +188,7 @@ func _hcsGetComputeSystemProperties(computeSystem HcsSystem, propertyQuery *uint if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsGetComputeSystemProperties.Addr(), 4, uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsGetComputeSystemProperties.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -206,7 +203,7 @@ func hcsGetProcessInfo(process HcsProcess, processInformation *HcsProcessInforma if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetProcessInfo.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetProcessInfo.Addr(), uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -221,7 +218,7 @@ func hcsGetProcessProperties(process HcsProcess, processProperties **uint16, res if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetProcessProperties.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetProcessProperties.Addr(), uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -245,7 +242,7 @@ func _hcsGetServiceProperties(propertyQuery *uint16, properties **uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsGetServiceProperties.Addr(), 3, uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsGetServiceProperties.Addr(), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -269,7 +266,7 @@ func _hcsModifyComputeSystem(computeSystem HcsSystem, configuration *uint16, res if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsModifyComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -293,7 +290,7 @@ func _hcsModifyProcess(process HcsProcess, settings *uint16, result **uint16) (h if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsModifyProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -317,7 +314,7 @@ func _hcsModifyServiceSettings(settings *uint16, result **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsModifyServiceSettings.Addr(), 2, uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsModifyServiceSettings.Addr(), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -341,7 +338,7 @@ func _hcsOpenComputeSystem(id *uint16, computeSystem *HcsSystem, result **uint16 if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsOpenComputeSystem.Addr(), 3, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsOpenComputeSystem.Addr(), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -356,7 +353,7 @@ func hcsOpenProcess(computeSystem HcsSystem, pid uint32, process *HcsProcess, re if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsOpenProcess.Addr(), 4, uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsOpenProcess.Addr(), uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -380,7 +377,7 @@ func _hcsPauseComputeSystem(computeSystem HcsSystem, options *uint16, result **u if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsPauseComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsPauseComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -395,7 +392,7 @@ func hcsRegisterComputeSystemCallback(computeSystem HcsSystem, callback uintptr, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsRegisterComputeSystemCallback.Addr(), 4, uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsRegisterComputeSystemCallback.Addr(), uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -410,7 +407,7 @@ func hcsRegisterProcessCallback(process HcsProcess, callback uintptr, context ui if hr != nil { return } - r0, _, _ := syscall.Syscall6(procHcsRegisterProcessCallback.Addr(), 4, uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsRegisterProcessCallback.Addr(), uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -434,7 +431,7 @@ func _hcsResumeComputeSystem(computeSystem HcsSystem, options *uint16, result ** if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsResumeComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsResumeComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -458,7 +455,7 @@ func _hcsSaveComputeSystem(computeSystem HcsSystem, options *uint16, result **ui if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSaveComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsSaveComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -482,7 +479,7 @@ func _hcsShutdownComputeSystem(computeSystem HcsSystem, options *uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsShutdownComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsShutdownComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -506,7 +503,7 @@ func _hcsSignalProcess(process HcsProcess, options *uint16, result **uint16) (hr if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsSignalProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsSignalProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -530,7 +527,7 @@ func _hcsStartComputeSystem(computeSystem HcsSystem, options *uint16, result **u if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsStartComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsStartComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -554,7 +551,7 @@ func _hcsTerminateComputeSystem(computeSystem HcsSystem, options *uint16, result if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsTerminateComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procHcsTerminateComputeSystem.Addr(), uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -569,7 +566,7 @@ func hcsTerminateProcess(process HcsProcess, result **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 2, uintptr(process), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procHcsTerminateProcess.Addr(), uintptr(process), uintptr(unsafe.Pointer(result))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -584,7 +581,7 @@ func hcsUnregisterComputeSystemCallback(callbackHandle HcsCallback) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsUnregisterComputeSystemCallback.Addr(), 1, uintptr(callbackHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsUnregisterComputeSystemCallback.Addr(), uintptr(callbackHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -599,7 +596,7 @@ func hcsUnregisterProcessCallback(callbackHandle HcsCallback) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procHcsUnregisterProcessCallback.Addr(), 1, uintptr(callbackHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procHcsUnregisterProcessCallback.Addr(), uintptr(callbackHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerreader.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerreader.go index 792f13f59..807b7de1f 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerreader.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayerreader.go @@ -1,3 +1,5 @@ +//go:build windows + package wclayer import ( @@ -64,7 +66,7 @@ func (r *baseLayerReader) walkUntilCancelled() error { return nil }) - if err == errorIterationCanceled { + if err == errorIterationCanceled { //nolint:errorlint // explicitly returned return nil } @@ -103,7 +105,7 @@ func (r *baseLayerReader) walkUntilCancelled() error { return nil }) - if err == errorIterationCanceled { + if err == errorIterationCanceled { //nolint:errorlint // explicitly returned return nil } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/converttobaselayer.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/converttobaselayer.go index c542f556c..d25c3c520 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/converttobaselayer.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/converttobaselayer.go @@ -1,3 +1,5 @@ +//go:build windows + package wclayer import ( diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go index e2ec27ad0..35fcbedb3 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go @@ -11,7 +11,6 @@ import ( "github.com/Microsoft/hcsshim/internal/hcserror" "github.com/Microsoft/hcsshim/internal/oc" - "github.com/Microsoft/hcsshim/osversion" "go.opencensus.io/trace" ) @@ -30,14 +29,17 @@ func ExpandScratchSize(ctx context.Context, path string, size uint64) (err error return hcserror.New(err, title, "") } - // Manually expand the volume now in order to work around bugs in 19H1 and - // prerelease versions of Vb. Remove once this is fixed in Windows. - if build := osversion.Build(); build >= osversion.V19H1 && build < 19020 { - err = expandSandboxVolume(ctx, path) - if err != nil { - return err - } + // Always expand the volume too. In case of legacy layers not expanding the volume here works because + // the PrepareLayer call internally handles the expansion. However, in other cases (like CimFS) we + // don't call PrepareLayer and so the volume will never be expanded. This also means in case of + // legacy layers, we might have a small perf hit because the VHD is mounted twice for expansion (once + // here and once during the PrepareLayer call). But as long as the perf hit is minimal, we should be + // okay. + err = expandSandboxVolume(ctx, path) + if err != nil { + return err } + return nil } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go index 807d83310..fc12eeba4 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go @@ -154,7 +154,7 @@ func (r *legacyLayerReader) walkUntilCancelled() error { } return nil }) - if err == errorIterationCanceled { + if err == errorIterationCanceled { //nolint:errorlint // explicitly returned return nil } if err == nil { @@ -196,7 +196,7 @@ func findBackupStreamSize(r io.Reader) (int64, error) { for { hdr, err := br.Next() if err != nil { - if err == io.EOF { + if errors.Is(err, io.EOF) { err = nil } return 0, err @@ -428,7 +428,7 @@ func (w *legacyLayerWriter) initUtilityVM() error { // immutable. err = cloneTree(w.parentRoots[0], w.destRoot, UtilityVMFilesPath, mutatedUtilityVMFiles) if err != nil { - return fmt.Errorf("cloning the parent utility VM image failed: %s", err) + return fmt.Errorf("cloning the parent utility VM image failed: %w", err) } w.HasUtilityVM = true } @@ -451,7 +451,7 @@ func (w *legacyLayerWriter) reset() error { for { bhdr, err := br.Next() - if err == io.EOF { + if errors.Is(err, io.EOF) { // end of backupstream data break } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go index 0cb509c46..403b94fc5 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -77,7 +74,7 @@ func getDiskFreeSpaceEx(directoryName string, freeBytesAvailableToCaller *int64, } func _getDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *int64, totalNumberOfBytes *int64, totalNumberOfFreeBytes *int64) (err error) { - r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetDiskFreeSpaceExW.Addr(), uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes))) if r1 == 0 { err = errnoErr(e1) } @@ -85,7 +82,7 @@ func _getDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *int6 } func attachVirtualDisk(handle syscall.Handle, sd uintptr, flags uint32, providerFlags uint32, params uintptr, overlapped uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procAttachVirtualDisk.Addr(), 6, uintptr(handle), uintptr(sd), uintptr(flags), uintptr(providerFlags), uintptr(params), uintptr(overlapped)) + r1, _, e1 := syscall.SyscallN(procAttachVirtualDisk.Addr(), uintptr(handle), uintptr(sd), uintptr(flags), uintptr(providerFlags), uintptr(params), uintptr(overlapped)) if r1 != 0 { err = errnoErr(e1) } @@ -102,7 +99,7 @@ func openVirtualDisk(virtualStorageType *virtualStorageType, path string, virtua } func _openVirtualDisk(virtualStorageType *virtualStorageType, path *uint16, virtualDiskAccessMask uint32, flags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (err error) { - r1, _, e1 := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(flags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) + r1, _, e1 := syscall.SyscallN(procOpenVirtualDisk.Addr(), uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(flags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle))) if r1 != 0 { err = errnoErr(e1) } @@ -123,7 +120,7 @@ func _activateLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procActivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procActivateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -156,7 +153,7 @@ func _copyLayer(info *driverInfo, srcId *uint16, dstId *uint16, descriptors []WC if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procCopyLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procCopyLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -185,7 +182,7 @@ func _createLayer(info *driverInfo, id *uint16, parent *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCreateLayer.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent))) + r0, _, _ := syscall.SyscallN(procCreateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -213,7 +210,7 @@ func _createSandboxLayer(info *driverInfo, id *uint16, parent uintptr, descripto if len(descriptors) > 0 { _p1 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procCreateSandboxLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procCreateSandboxLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -237,7 +234,7 @@ func _deactivateLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procDeactivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procDeactivateLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -261,7 +258,7 @@ func _destroyLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procDestroyLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procDestroyLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -285,7 +282,7 @@ func _expandSandboxSize(info *driverInfo, id *uint16, size uint64) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procExpandSandboxSize.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size)) + r0, _, _ := syscall.SyscallN(procExpandSandboxSize.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -318,7 +315,7 @@ func _exportLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_L if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procExportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procExportLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -333,7 +330,7 @@ func getBaseImages(buffer **uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procGetBaseImages.Addr(), 1, uintptr(unsafe.Pointer(buffer)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetBaseImages.Addr(), uintptr(unsafe.Pointer(buffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -357,7 +354,7 @@ func _getLayerMountPath(info *driverInfo, id *uint16, length *uintptr, buffer *u if hr != nil { return } - r0, _, _ := syscall.Syscall6(procGetLayerMountPath.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetLayerMountPath.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -386,7 +383,7 @@ func _grantVmAccess(vmid *uint16, filepath *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procGrantVmAccess.Addr(), 2, uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath)), 0) + r0, _, _ := syscall.SyscallN(procGrantVmAccess.Addr(), uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -419,7 +416,7 @@ func _importLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_L if len(descriptors) > 0 { _p2 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procImportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0) + r0, _, _ := syscall.SyscallN(procImportLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -443,7 +440,7 @@ func _layerExists(info *driverInfo, id *uint16, exists *uint32) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procLayerExists.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists))) + r0, _, _ := syscall.SyscallN(procLayerExists.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -467,7 +464,7 @@ func _nameToGuid(name *uint16, guid *_guid) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procNameToGuid.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid)), 0) + r0, _, _ := syscall.SyscallN(procNameToGuid.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -495,7 +492,7 @@ func _prepareLayer(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPT if len(descriptors) > 0 { _p1 = &descriptors[0] } - r0, _, _ := syscall.Syscall6(procPrepareLayer.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0, 0) + r0, _, _ := syscall.SyscallN(procPrepareLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -519,7 +516,7 @@ func _processBaseImage(path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procProcessBaseImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procProcessBaseImage.Addr(), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -543,7 +540,7 @@ func _processUtilityImage(path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procProcessUtilityImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procProcessUtilityImage.Addr(), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -567,7 +564,7 @@ func _unprepareLayer(info *driverInfo, id *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procUnprepareLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0) + r0, _, _ := syscall.SyscallN(procUnprepareLayer.Addr(), uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/cimfs.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/cimfs.go index d04bffc1f..21664577b 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/cimfs.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/cimfs.go @@ -1,3 +1,5 @@ +//go:build windows + package winapi import ( @@ -34,7 +36,7 @@ type CimFsFileMetadata struct { //sys CimDismountImage(volumeID *g) (hr error) = cimfs.CimDismountImage? //sys CimCreateImage(imagePath string, oldFSName *uint16, newFSName *uint16, cimFSHandle *FsHandle) (hr error) = cimfs.CimCreateImage? -//sys CimCloseImage(cimFSHandle FsHandle) (hr error) = cimfs.CimCloseImage? +//sys CimCloseImage(cimFSHandle FsHandle) = cimfs.CimCloseImage? //sys CimCommitImage(cimFSHandle FsHandle) (hr error) = cimfs.CimCommitImage? //sys CimCreateFile(cimFSHandle FsHandle, path string, file *CimFsFileMetadata, cimStreamHandle *StreamHandle) (hr error) = cimfs.CimCreateFile? diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go index 93d633d49..70c43fc1c 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/utils.go @@ -4,7 +4,6 @@ package winapi import ( "errors" - "reflect" "syscall" "unsafe" @@ -14,11 +13,7 @@ import ( // Uint16BufferToSlice wraps a uint16 pointer-and-length into a slice // for easier interop with Go APIs func Uint16BufferToSlice(buffer *uint16, bufferLength int) (result []uint16) { - hdr := (*reflect.SliceHeader)(unsafe.Pointer(&result)) - hdr.Data = uintptr(unsafe.Pointer(buffer)) - hdr.Cap = bufferLength - hdr.Len = bufferLength - + result = unsafe.Slice(buffer, bufferLength) return } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go index b5b9fcccc..33720fe8b 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -109,7 +106,7 @@ var ( ) func LogonUser(username *uint16, domain *uint16, password *uint16, logonType uint32, logonProvider uint32, token *windows.Token) (err error) { - r1, _, e1 := syscall.Syscall6(procLogonUserW.Addr(), 6, uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token))) + r1, _, e1 := syscall.SyscallN(procLogonUserW.Addr(), uintptr(unsafe.Pointer(username)), uintptr(unsafe.Pointer(domain)), uintptr(unsafe.Pointer(password)), uintptr(logonType), uintptr(logonProvider), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -121,7 +118,7 @@ func BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procBfSetupFilter.Addr(), 6, uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) + r0, _, _ := syscall.SyscallN(procBfSetupFilter.Addr(), uintptr(jobHandle), uintptr(flags), uintptr(unsafe.Pointer(virtRootPath)), uintptr(unsafe.Pointer(virtTargetPath)), uintptr(unsafe.Pointer(virtExceptions)), uintptr(virtExceptionPathCount)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -132,7 +129,7 @@ func BfSetupFilter(jobHandle windows.Handle, flags uint32, virtRootPath *uint16, } func CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyType *uint32, propertyBuffer *uint16, propertyBufferSize *uint32, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_PropertyW.Addr(), 6, uintptr(dnDevInst), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(unsafe.Pointer(propertyBufferSize)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Get_DevNode_PropertyW.Addr(), uintptr(dnDevInst), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(unsafe.Pointer(propertyBufferSize)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -143,7 +140,7 @@ func CMGetDevNodeProperty(dnDevInst uint32, propertyKey *DevPropKey, propertyTyp } func CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_ID_ListA.Addr(), 4, uintptr(unsafe.Pointer(pszFilter)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(uFlags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_ID_ListA.Addr(), uintptr(unsafe.Pointer(pszFilter)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -154,7 +151,7 @@ func CMGetDeviceIDList(pszFilter *byte, buffer *byte, bufferLen uint32, uFlags u } func CMGetDeviceIDListSize(pulLen *uint32, pszFilter *byte, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall(procCM_Get_Device_ID_List_SizeA.Addr(), 3, uintptr(unsafe.Pointer(pulLen)), uintptr(unsafe.Pointer(pszFilter)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_ID_List_SizeA.Addr(), uintptr(unsafe.Pointer(pulLen)), uintptr(unsafe.Pointer(pszFilter)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -174,7 +171,7 @@ func CMLocateDevNode(pdnDevInst *uint32, pDeviceID string, uFlags uint32) (hr er } func _CMLocateDevNode(pdnDevInst *uint32, pDeviceID *uint16, uFlags uint32) (hr error) { - r0, _, _ := syscall.Syscall(procCM_Locate_DevNodeW.Addr(), 3, uintptr(unsafe.Pointer(pdnDevInst)), uintptr(unsafe.Pointer(pDeviceID)), uintptr(uFlags)) + r0, _, _ := syscall.SyscallN(procCM_Locate_DevNodeW.Addr(), uintptr(unsafe.Pointer(pdnDevInst)), uintptr(unsafe.Pointer(pDeviceID)), uintptr(uFlags)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -184,18 +181,12 @@ func _CMLocateDevNode(pdnDevInst *uint32, pDeviceID *uint16, uFlags uint32) (hr return } -func CimCloseImage(cimFSHandle FsHandle) (hr error) { - hr = procCimCloseImage.Find() - if hr != nil { +func CimCloseImage(cimFSHandle FsHandle) (err error) { + err = procCimCloseImage.Find() + if err != nil { return } - r0, _, _ := syscall.Syscall(procCimCloseImage.Addr(), 1, uintptr(cimFSHandle), 0, 0) - if int32(r0) < 0 { - if r0&0x1fff0000 == 0x00070000 { - r0 &= 0xffff - } - hr = syscall.Errno(r0) - } + syscall.SyscallN(procCimCloseImage.Addr(), uintptr(cimFSHandle)) return } @@ -204,7 +195,7 @@ func CimCloseStream(cimStreamHandle StreamHandle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCloseStream.Addr(), 1, uintptr(cimStreamHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCloseStream.Addr(), uintptr(cimStreamHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -219,7 +210,7 @@ func CimCommitImage(cimFSHandle FsHandle) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCommitImage.Addr(), 1, uintptr(cimFSHandle), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCommitImage.Addr(), uintptr(cimFSHandle)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -243,7 +234,7 @@ func _CimCreateAlternateStream(cimFSHandle FsHandle, path *uint16, size uint64, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateAlternateStream.Addr(), 4, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(size), uintptr(unsafe.Pointer(cimStreamHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateAlternateStream.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(size), uintptr(unsafe.Pointer(cimStreamHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -267,7 +258,7 @@ func _CimCreateFile(cimFSHandle FsHandle, path *uint16, file *CimFsFileMetadata, if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateFile.Addr(), 4, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(cimStreamHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateFile.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(cimStreamHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -296,7 +287,7 @@ func _CimCreateHardLink(cimFSHandle FsHandle, newPath *uint16, oldPath *uint16) if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimCreateHardLink.Addr(), 3, uintptr(cimFSHandle), uintptr(unsafe.Pointer(newPath)), uintptr(unsafe.Pointer(oldPath))) + r0, _, _ := syscall.SyscallN(procCimCreateHardLink.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(newPath)), uintptr(unsafe.Pointer(oldPath))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -320,7 +311,7 @@ func _CimCreateImage(imagePath *uint16, oldFSName *uint16, newFSName *uint16, ci if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimCreateImage.Addr(), 4, uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(oldFSName)), uintptr(unsafe.Pointer(newFSName)), uintptr(unsafe.Pointer(cimFSHandle)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimCreateImage.Addr(), uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(oldFSName)), uintptr(unsafe.Pointer(newFSName)), uintptr(unsafe.Pointer(cimFSHandle))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -344,7 +335,7 @@ func _CimDeletePath(cimFSHandle FsHandle, path *uint16) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimDeletePath.Addr(), 2, uintptr(cimFSHandle), uintptr(unsafe.Pointer(path)), 0) + r0, _, _ := syscall.SyscallN(procCimDeletePath.Addr(), uintptr(cimFSHandle), uintptr(unsafe.Pointer(path))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -359,7 +350,7 @@ func CimDismountImage(volumeID *g) (hr error) { if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimDismountImage.Addr(), 1, uintptr(unsafe.Pointer(volumeID)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimDismountImage.Addr(), uintptr(unsafe.Pointer(volumeID))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -388,7 +379,7 @@ func _CimMountImage(imagePath *uint16, fsName *uint16, flags uint32, volumeID *g if hr != nil { return } - r0, _, _ := syscall.Syscall6(procCimMountImage.Addr(), 4, uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(fsName)), uintptr(flags), uintptr(unsafe.Pointer(volumeID)), 0, 0) + r0, _, _ := syscall.SyscallN(procCimMountImage.Addr(), uintptr(unsafe.Pointer(imagePath)), uintptr(unsafe.Pointer(fsName)), uintptr(flags), uintptr(unsafe.Pointer(volumeID))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -403,7 +394,7 @@ func CimWriteStream(cimStreamHandle StreamHandle, buffer uintptr, bufferSize uin if hr != nil { return } - r0, _, _ := syscall.Syscall(procCimWriteStream.Addr(), 3, uintptr(cimStreamHandle), uintptr(buffer), uintptr(bufferSize)) + r0, _, _ := syscall.SyscallN(procCimWriteStream.Addr(), uintptr(cimStreamHandle), uintptr(buffer), uintptr(bufferSize)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -414,7 +405,7 @@ func CimWriteStream(cimStreamHandle StreamHandle, buffer uintptr, bufferSize uin } func SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err error) { - r0, _, _ := syscall.Syscall(procSetJobCompartmentId.Addr(), 2, uintptr(handle), uintptr(compartmentId), 0) + r0, _, _ := syscall.SyscallN(procSetJobCompartmentId.Addr(), uintptr(handle), uintptr(compartmentId)) if r0 != 0 { win32Err = syscall.Errno(r0) } @@ -422,12 +413,12 @@ func SetJobCompartmentId(handle windows.Handle, compartmentId uint32) (win32Err } func ClosePseudoConsole(hpc windows.Handle) { - syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(hpc), 0, 0) + syscall.SyscallN(procClosePseudoConsole.Addr(), uintptr(hpc)) return } func CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32) (err error) { - r1, _, e1 := syscall.Syscall(procCopyFileW.Addr(), 3, uintptr(unsafe.Pointer(existingFileName)), uintptr(unsafe.Pointer(newFileName)), uintptr(failIfExists)) + r1, _, e1 := syscall.SyscallN(procCopyFileW.Addr(), uintptr(unsafe.Pointer(existingFileName)), uintptr(unsafe.Pointer(newFileName)), uintptr(failIfExists)) if r1 == 0 { err = errnoErr(e1) } @@ -435,7 +426,7 @@ func CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32 } func createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Handle, dwFlags uint32, hpcon *windows.Handle) (hr error) { - r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(hInput), uintptr(hOutput), uintptr(dwFlags), uintptr(unsafe.Pointer(hpcon)), 0) + r0, _, _ := syscall.SyscallN(procCreatePseudoConsole.Addr(), uintptr(size), uintptr(hInput), uintptr(hOutput), uintptr(dwFlags), uintptr(unsafe.Pointer(hpcon))) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -446,7 +437,7 @@ func createPseudoConsole(size uint32, hInput windows.Handle, hOutput windows.Han } func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, stackSize uint32, startAddr uintptr, parameter uintptr, creationFlags uint32, threadID *uint32) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateRemoteThread.Addr(), 7, uintptr(process), uintptr(unsafe.Pointer(sa)), uintptr(stackSize), uintptr(startAddr), uintptr(parameter), uintptr(creationFlags), uintptr(unsafe.Pointer(threadID)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateRemoteThread.Addr(), uintptr(process), uintptr(unsafe.Pointer(sa)), uintptr(stackSize), uintptr(startAddr), uintptr(parameter), uintptr(creationFlags), uintptr(unsafe.Pointer(threadID))) handle = windows.Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -455,13 +446,13 @@ func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, } func GetActiveProcessorCount(groupNumber uint16) (amount uint32) { - r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetActiveProcessorCount.Addr(), uintptr(groupNumber)) amount = uint32(r0) return } func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) { - r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result))) + r1, _, e1 := syscall.SyscallN(procIsProcessInJob.Addr(), uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result))) if r1 == 0 { err = errnoErr(e1) } @@ -469,18 +460,18 @@ func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result } func LocalAlloc(flags uint32, size int) (ptr uintptr) { - r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procLocalAlloc.Addr(), uintptr(flags), uintptr(size)) ptr = uintptr(r0) return } func LocalFree(ptr uintptr) { - syscall.Syscall(procLocalFree.Addr(), 1, uintptr(ptr), 0, 0) + syscall.SyscallN(procLocalFree.Addr(), uintptr(ptr)) return } func OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (handle windows.Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenJobObjectW.Addr(), 3, uintptr(desiredAccess), uintptr(inheritHandle), uintptr(unsafe.Pointer(lpName))) + r0, _, e1 := syscall.SyscallN(procOpenJobObjectW.Addr(), uintptr(desiredAccess), uintptr(inheritHandle), uintptr(unsafe.Pointer(lpName))) handle = windows.Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -489,7 +480,7 @@ func OpenJobObject(desiredAccess uint32, inheritHandle int32, lpName *uint16) (h } func QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobObjectInfo unsafe.Pointer, jobObjectInformationLength uint32, lpReturnLength *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(jobHandle), uintptr(infoClass), uintptr(jobObjectInfo), uintptr(jobObjectInformationLength), uintptr(unsafe.Pointer(lpReturnLength)), 0) + r1, _, e1 := syscall.SyscallN(procQueryInformationJobObject.Addr(), uintptr(jobHandle), uintptr(infoClass), uintptr(jobObjectInfo), uintptr(jobObjectInformationLength), uintptr(unsafe.Pointer(lpReturnLength))) if r1 == 0 { err = errnoErr(e1) } @@ -497,7 +488,7 @@ func QueryInformationJobObject(jobHandle windows.Handle, infoClass uint32, jobOb } func QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName *uint16, ioRateControlInfo **JOBOBJECT_IO_RATE_CONTROL_INFORMATION, infoBlockCount *uint32) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall6(procQueryIoRateControlInformationJobObject.Addr(), 4, uintptr(jobHandle), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(ioRateControlInfo)), uintptr(unsafe.Pointer(infoBlockCount)), 0, 0) + r0, _, e1 := syscall.SyscallN(procQueryIoRateControlInformationJobObject.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(ioRateControlInfo)), uintptr(unsafe.Pointer(infoBlockCount))) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -506,7 +497,7 @@ func QueryIoRateControlInformationJobObject(jobHandle windows.Handle, volumeName } func resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) { - r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(hPc), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procResizePseudoConsole.Addr(), uintptr(hPc), uintptr(size)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff @@ -517,7 +508,7 @@ func resizePseudoConsole(hPc windows.Handle, size uint32) (hr error) { } func SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBufferLength uint32, lpBuffer *uint16, lpFilePath *uint16) (size uint32, err error) { - r0, _, e1 := syscall.Syscall6(procSearchPathW.Addr(), 6, uintptr(unsafe.Pointer(lpPath)), uintptr(unsafe.Pointer(lpFileName)), uintptr(unsafe.Pointer(lpExtension)), uintptr(nBufferLength), uintptr(unsafe.Pointer(lpBuffer)), uintptr(unsafe.Pointer(lpFilePath))) + r0, _, e1 := syscall.SyscallN(procSearchPathW.Addr(), uintptr(unsafe.Pointer(lpPath)), uintptr(unsafe.Pointer(lpFileName)), uintptr(unsafe.Pointer(lpExtension)), uintptr(nBufferLength), uintptr(unsafe.Pointer(lpBuffer)), uintptr(unsafe.Pointer(lpFilePath))) size = uint32(r0) if size == 0 { err = errnoErr(e1) @@ -526,7 +517,7 @@ func SearchPath(lpPath *uint16, lpFileName *uint16, lpExtension *uint16, nBuffer } func SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateControlInfo *JOBOBJECT_IO_RATE_CONTROL_INFORMATION) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procSetIoRateControlInformationJobObject.Addr(), 2, uintptr(jobHandle), uintptr(unsafe.Pointer(ioRateControlInfo)), 0) + r0, _, e1 := syscall.SyscallN(procSetIoRateControlInformationJobObject.Addr(), uintptr(jobHandle), uintptr(unsafe.Pointer(ioRateControlInfo))) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -535,7 +526,7 @@ func SetIoRateControlInformationJobObject(jobHandle windows.Handle, ioRateContro } func netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32, buf *byte, totalEntries uint32) (status error) { - r0, _, _ := syscall.Syscall6(procNetLocalGroupAddMembers.Addr(), 5, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(totalEntries), 0) + r0, _, _ := syscall.SyscallN(procNetLocalGroupAddMembers.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(totalEntries)) if r0 != 0 { status = syscall.Errno(r0) } @@ -543,7 +534,7 @@ func netLocalGroupAddMembers(serverName *uint16, groupName *uint16, level uint32 } func netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, bufptr **byte) (status error) { - r0, _, _ := syscall.Syscall6(procNetLocalGroupGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(bufptr)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetLocalGroupGetInfo.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(groupName)), uintptr(level), uintptr(unsafe.Pointer(bufptr))) if r0 != 0 { status = syscall.Errno(r0) } @@ -551,7 +542,7 @@ func netLocalGroupGetInfo(serverName *uint16, groupName *uint16, level uint32, b } func netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) (status error) { - r0, _, _ := syscall.Syscall6(procNetUserAdd.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parm_err)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetUserAdd.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(parm_err))) if r0 != 0 { status = syscall.Errno(r0) } @@ -559,7 +550,7 @@ func netUserAdd(serverName *uint16, level uint32, buf *byte, parm_err *uint32) ( } func netUserDel(serverName *uint16, username *uint16) (status error) { - r0, _, _ := syscall.Syscall(procNetUserDel.Addr(), 2, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(username)), 0) + r0, _, _ := syscall.SyscallN(procNetUserDel.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(username))) if r0 != 0 { status = syscall.Errno(r0) } @@ -567,25 +558,25 @@ func netUserDel(serverName *uint16, username *uint16) (status error) { } func NtCreateFile(handle *uintptr, accessMask uint32, oa *ObjectAttributes, iosb *IOStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) { - r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength), 0) + r0, _, _ := syscall.SyscallN(procNtCreateFile.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength)) status = uint32(r0) return } func NtCreateJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtCreateJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) + r0, _, _ := syscall.SyscallN(procNtCreateJobObject.Addr(), uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) status = uint32(r0) return } func NtOpenDirectoryObject(handle *uintptr, accessMask uint32, oa *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtOpenDirectoryObject.Addr(), 3, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa))) + r0, _, _ := syscall.SyscallN(procNtOpenDirectoryObject.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa))) status = uint32(r0) return } func NtOpenJobObject(jobHandle *windows.Handle, desiredAccess uint32, objAttributes *ObjectAttributes) (status uint32) { - r0, _, _ := syscall.Syscall(procNtOpenJobObject.Addr(), 3, uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) + r0, _, _ := syscall.SyscallN(procNtOpenJobObject.Addr(), uintptr(unsafe.Pointer(jobHandle)), uintptr(desiredAccess), uintptr(unsafe.Pointer(objAttributes))) status = uint32(r0) return } @@ -599,31 +590,31 @@ func NtQueryDirectoryObject(handle uintptr, buffer *byte, length uint32, singleE if restartScan { _p1 = 1 } - r0, _, _ := syscall.Syscall9(procNtQueryDirectoryObject.Addr(), 7, uintptr(handle), uintptr(unsafe.Pointer(buffer)), uintptr(length), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(context)), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQueryDirectoryObject.Addr(), uintptr(handle), uintptr(unsafe.Pointer(buffer)), uintptr(length), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(context)), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo unsafe.Pointer, processInfoLength uint32, returnLength *uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength)), 0) + r0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtQuerySystemInformation(systemInfoClass int, systemInformation unsafe.Pointer, systemInfoLength uint32, returnLength *uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(systemInfoClass), uintptr(systemInformation), uintptr(systemInfoLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQuerySystemInformation.Addr(), uintptr(systemInfoClass), uintptr(systemInformation), uintptr(systemInfoLength), uintptr(unsafe.Pointer(returnLength))) status = uint32(r0) return } func NtSetInformationFile(handle uintptr, iosb *IOStatusBlock, information uintptr, length uint32, class uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class), 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class)) status = uint32(r0) return } func RtlNtStatusToDosError(status uint32) (winerr error) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosError.Addr(), 1, uintptr(status), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosError.Addr(), uintptr(status)) if r0 != 0 { winerr = syscall.Errno(r0) } @@ -631,7 +622,7 @@ func RtlNtStatusToDosError(status uint32) (winerr error) { } func ORCloseHive(handle ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCloseHive.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procORCloseHive.Addr(), uintptr(handle)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -639,7 +630,7 @@ func ORCloseHive(handle ORHKey) (win32err error) { } func ORCloseKey(handle ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCloseKey.Addr(), 1, uintptr(handle), 0, 0) + r0, _, _ := syscall.SyscallN(procORCloseKey.Addr(), uintptr(handle)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -647,7 +638,7 @@ func ORCloseKey(handle ORHKey) (win32err error) { } func ORCreateHive(key *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procORCreateHive.Addr(), 1, uintptr(unsafe.Pointer(key)), 0, 0) + r0, _, _ := syscall.SyscallN(procORCreateHive.Addr(), uintptr(unsafe.Pointer(key))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -664,7 +655,7 @@ func ORCreateKey(handle ORHKey, subKey string, class uintptr, options uint32, se } func _ORCreateKey(handle ORHKey, subKey *uint16, class uintptr, options uint32, securityDescriptor uintptr, result *ORHKey, disposition *uint32) (win32err error) { - r0, _, _ := syscall.Syscall9(procORCreateKey.Addr(), 7, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(class), uintptr(options), uintptr(securityDescriptor), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition)), 0, 0) + r0, _, _ := syscall.SyscallN(procORCreateKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(class), uintptr(options), uintptr(securityDescriptor), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -681,7 +672,7 @@ func ORDeleteKey(handle ORHKey, subKey string) (win32err error) { } func _ORDeleteKey(handle ORHKey, subKey *uint16) (win32err error) { - r0, _, _ := syscall.Syscall(procORDeleteKey.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(subKey)), 0) + r0, _, _ := syscall.SyscallN(procORDeleteKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -703,7 +694,7 @@ func ORGetValue(handle ORHKey, subKey string, value string, valueType *uint32, d } func _ORGetValue(handle ORHKey, subKey *uint16, value *uint16, valueType *uint32, data *byte, dataLen *uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORGetValue.Addr(), 6, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueType)), uintptr(unsafe.Pointer(data)), uintptr(unsafe.Pointer(dataLen))) + r0, _, _ := syscall.SyscallN(procORGetValue.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueType)), uintptr(unsafe.Pointer(data)), uintptr(unsafe.Pointer(dataLen))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -715,7 +706,7 @@ func ORMergeHives(hiveHandles []ORHKey, result *ORHKey) (win32err error) { if len(hiveHandles) > 0 { _p0 = &hiveHandles[0] } - r0, _, _ := syscall.Syscall(procORMergeHives.Addr(), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(hiveHandles)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procORMergeHives.Addr(), uintptr(unsafe.Pointer(_p0)), uintptr(len(hiveHandles)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -732,7 +723,7 @@ func OROpenHive(hivePath string, result *ORHKey) (win32err error) { } func _OROpenHive(hivePath *uint16, result *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procOROpenHive.Addr(), 2, uintptr(unsafe.Pointer(hivePath)), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procOROpenHive.Addr(), uintptr(unsafe.Pointer(hivePath)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -749,7 +740,7 @@ func OROpenKey(handle ORHKey, subKey string, result *ORHKey) (win32err error) { } func _OROpenKey(handle ORHKey, subKey *uint16, result *ORHKey) (win32err error) { - r0, _, _ := syscall.Syscall(procOROpenKey.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall.SyscallN(procOROpenKey.Addr(), uintptr(handle), uintptr(unsafe.Pointer(subKey)), uintptr(unsafe.Pointer(result))) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -766,7 +757,7 @@ func ORSaveHive(handle ORHKey, hivePath string, osMajorVersion uint32, osMinorVe } func _ORSaveHive(handle ORHKey, hivePath *uint16, osMajorVersion uint32, osMinorVersion uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORSaveHive.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(hivePath)), uintptr(osMajorVersion), uintptr(osMinorVersion), 0, 0) + r0, _, _ := syscall.SyscallN(procORSaveHive.Addr(), uintptr(handle), uintptr(unsafe.Pointer(hivePath)), uintptr(osMajorVersion), uintptr(osMinorVersion)) if r0 != 0 { win32err = syscall.Errno(r0) } @@ -783,7 +774,7 @@ func ORSetValue(handle ORHKey, valueName string, valueType uint32, data *byte, d } func _ORSetValue(handle ORHKey, valueName *uint16, valueType uint32, data *byte, dataLen uint32) (win32err error) { - r0, _, _ := syscall.Syscall6(procORSetValue.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(valueName)), uintptr(valueType), uintptr(unsafe.Pointer(data)), uintptr(dataLen), 0) + r0, _, _ := syscall.SyscallN(procORSetValue.Addr(), uintptr(handle), uintptr(unsafe.Pointer(valueName)), uintptr(valueType), uintptr(unsafe.Pointer(data)), uintptr(dataLen)) if r0 != 0 { win32err = syscall.Errno(r0) } diff --git a/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/export.go b/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/export.go index db6620b18..98807a14b 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/export.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/export.go @@ -5,6 +5,7 @@ package ociwclayer import ( "archive/tar" "context" + "errors" "io" "path/filepath" @@ -62,7 +63,7 @@ func writeTarFromLayer(ctx context.Context, r wclayer.LayerReader, w io.Writer) } name, size, fileInfo, err := r.Next() - if err == io.EOF { + if errors.Is(err, io.EOF) { break } if err != nil { diff --git a/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/import.go b/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/import.go index 25e899ba9..4ebfbbc2f 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/import.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/pkg/ociwclayer/import.go @@ -6,6 +6,7 @@ import ( "archive/tar" "bufio" "context" + "errors" "io" "os" "path" @@ -60,6 +61,8 @@ func ImportLayerFromTar(ctx context.Context, r io.Reader, path string, parentLay func writeLayerFromTar(ctx context.Context, r io.Reader, w wclayer.LayerWriter, root string) (int64, error) { t := tar.NewReader(r) + // CodeQL [SM03409] False positive, `internal/safefile` package ensures tar extractions are always + // bound to the layer root directory. hdr, err := t.Next() totalSize := int64(0) buf := bufio.NewWriter(nil) @@ -77,12 +80,16 @@ func writeLayerFromTar(ctx context.Context, r io.Reader, w wclayer.LayerWriter, if err != nil { return 0, err } + // CodeQL [SM03409] False positive, `internal/safefile` package ensures tar extractions are always + // bound to the layer root directory. hdr, err = t.Next() } else if hdr.Typeflag == tar.TypeLink { err = w.AddLink(filepath.FromSlash(hdr.Name), filepath.FromSlash(hdr.Linkname)) if err != nil { return 0, err } + // CodeQL [SM03409] False positive, `internal/safefile` package ensures tar extractions are always + // bound to the layer root directory. hdr, err = t.Next() } else { var ( @@ -102,7 +109,7 @@ func writeLayerFromTar(ctx context.Context, r io.Reader, w wclayer.LayerWriter, totalSize += size } } - if err != io.EOF { + if !errors.Is(err, io.EOF) { return 0, err } return totalSize, nil diff --git a/tools/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go b/tools/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go index 9b619b6e6..e43d59a40 100644 --- a/tools/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go +++ b/tools/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go @@ -33,9 +33,6 @@ func errnoErr(e syscall.Errno) error { case errnoERROR_IO_PENDING: return errERROR_IO_PENDING } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) return e } @@ -46,7 +43,7 @@ var ( ) func SetCurrentThreadCompartmentId(compartmentId uint32) (hr error) { - r0, _, _ := syscall.Syscall(procSetCurrentThreadCompartmentId.Addr(), 1, uintptr(compartmentId), 0, 0) + r0, _, _ := syscall.SyscallN(procSetCurrentThreadCompartmentId.Addr(), uintptr(compartmentId)) if int32(r0) < 0 { if r0&0x1fff0000 == 0x00070000 { r0 &= 0xffff diff --git a/tools/vendor/github.com/containerd/containerd/archive/compression/compression.go b/tools/vendor/github.com/containerd/containerd/archive/compression/compression.go index 31bbe4124..23ddfab1a 100644 --- a/tools/vendor/github.com/containerd/containerd/archive/compression/compression.go +++ b/tools/vendor/github.com/containerd/containerd/archive/compression/compression.go @@ -29,7 +29,7 @@ import ( "strconv" "sync" - "github.com/containerd/containerd/log" + "github.com/containerd/log" "github.com/klauspost/compress/zstd" ) diff --git a/tools/vendor/github.com/containerd/containerd/archive/tar.go b/tools/vendor/github.com/containerd/containerd/archive/tar.go index 28b623dcf..cdc7e14bf 100644 --- a/tools/vendor/github.com/containerd/containerd/archive/tar.go +++ b/tools/vendor/github.com/containerd/containerd/archive/tar.go @@ -30,10 +30,10 @@ import ( "time" "github.com/containerd/containerd/archive/tarheader" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/pkg/epoch" "github.com/containerd/containerd/pkg/userns" "github.com/containerd/continuity/fs" + "github.com/containerd/log" ) var bufPool = &sync.Pool{ diff --git a/tools/vendor/github.com/containerd/containerd/content/content.go b/tools/vendor/github.com/containerd/containerd/content/content.go index 8eb1a1692..2dc7bf8b5 100644 --- a/tools/vendor/github.com/containerd/containerd/content/content.go +++ b/tools/vendor/github.com/containerd/containerd/content/content.go @@ -108,6 +108,12 @@ type Status struct { // WalkFunc defines the callback for a blob walk. type WalkFunc func(Info) error +// InfoReaderProvider provides both info and reader for the specific content. +type InfoReaderProvider interface { + InfoProvider + Provider +} + // InfoProvider provides info for content inspection. type InfoProvider interface { // Info will return metadata about content available in the content store. diff --git a/tools/vendor/github.com/containerd/containerd/content/helpers.go b/tools/vendor/github.com/containerd/containerd/content/helpers.go index 147005413..f4763847d 100644 --- a/tools/vendor/github.com/containerd/containerd/content/helpers.go +++ b/tools/vendor/github.com/containerd/containerd/content/helpers.go @@ -24,16 +24,13 @@ import ( "sync" "time" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/pkg/randutil" + "github.com/containerd/errdefs" + "github.com/containerd/log" "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) -// maxResets is the no.of times the Copy() method can tolerate a reset of the body -const maxResets = 5 - var ErrReset = errors.New("writer has been reset") var bufPool = sync.Pool{ @@ -160,7 +157,7 @@ func Copy(ctx context.Context, cw Writer, or io.Reader, size int64, expected dig } } - for i := 0; i < maxResets; i++ { + for i := 0; ; i++ { if i >= 1 { log.G(ctx).WithField("digest", expected).Debugf("retrying copy due to reset") } @@ -201,9 +198,6 @@ func Copy(ctx context.Context, cw Writer, or io.Reader, size int64, expected dig } return nil } - - log.G(ctx).WithField("digest", expected).Errorf("failed to copy after %d retries", maxResets) - return fmt.Errorf("failed to copy after %d retries", maxResets) } // CopyReaderAt copies to a writer from a given reader at for the given diff --git a/tools/vendor/github.com/containerd/containerd/content/local/locks.go b/tools/vendor/github.com/containerd/containerd/content/local/locks.go index 1e59f39b3..4caffcc02 100644 --- a/tools/vendor/github.com/containerd/containerd/content/local/locks.go +++ b/tools/vendor/github.com/containerd/containerd/content/local/locks.go @@ -21,7 +21,7 @@ import ( "sync" "time" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) // Handles locking references diff --git a/tools/vendor/github.com/containerd/containerd/content/local/readerat.go b/tools/vendor/github.com/containerd/containerd/content/local/readerat.go index 899e85c0b..7918844b1 100644 --- a/tools/vendor/github.com/containerd/containerd/content/local/readerat.go +++ b/tools/vendor/github.com/containerd/containerd/content/local/readerat.go @@ -22,7 +22,7 @@ import ( "os" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) // readerat implements io.ReaderAt in a completely stateless manner by opening diff --git a/tools/vendor/github.com/containerd/containerd/content/local/store.go b/tools/vendor/github.com/containerd/containerd/content/local/store.go index baae3565b..feecec79f 100644 --- a/tools/vendor/github.com/containerd/containerd/content/local/store.go +++ b/tools/vendor/github.com/containerd/containerd/content/local/store.go @@ -28,10 +28,10 @@ import ( "time" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/pkg/randutil" + "github.com/containerd/errdefs" + "github.com/containerd/log" "github.com/sirupsen/logrus" "github.com/opencontainers/go-digest" diff --git a/tools/vendor/github.com/containerd/containerd/content/local/writer.go b/tools/vendor/github.com/containerd/containerd/content/local/writer.go index b187e524c..f82b131e1 100644 --- a/tools/vendor/github.com/containerd/containerd/content/local/writer.go +++ b/tools/vendor/github.com/containerd/containerd/content/local/writer.go @@ -27,8 +27,8 @@ import ( "time" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" + "github.com/containerd/errdefs" + "github.com/containerd/log" "github.com/opencontainers/go-digest" ) diff --git a/tools/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go b/tools/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go new file mode 100644 index 000000000..ab288fbb8 --- /dev/null +++ b/tools/vendor/github.com/containerd/containerd/contrib/seccomp/kernelversion/kernel_linux.go @@ -0,0 +1,92 @@ +/* + Copyright The containerd 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. + + File copied and customized based on + https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux.go +*/ + +package kernelversion + +import ( + "bytes" + "fmt" + "sync" + + "golang.org/x/sys/unix" +) + +// KernelVersion holds information about the kernel. +type KernelVersion struct { + Kernel uint64 // Version of the Kernel (i.e., the "4" in "4.1.2-generic") + Major uint64 // Major revision of the Kernel (i.e., the "1" in "4.1.2-generic") +} + +// String implements fmt.Stringer for KernelVersion +func (k *KernelVersion) String() string { + if k.Kernel > 0 || k.Major > 0 { + return fmt.Sprintf("%d.%d", k.Kernel, k.Major) + } + return "" +} + +var ( + currentKernelVersion *KernelVersion + kernelVersionError error + once sync.Once +) + +// getKernelVersion gets the current kernel version. +func getKernelVersion() (*KernelVersion, error) { + once.Do(func() { + var uts unix.Utsname + if err := unix.Uname(&uts); err != nil { + return + } + // Remove the \x00 from the release for Atoi to parse correctly + currentKernelVersion, kernelVersionError = parseRelease(string(uts.Release[:bytes.IndexByte(uts.Release[:], 0)])) + }) + return currentKernelVersion, kernelVersionError +} + +// parseRelease parses a string and creates a KernelVersion based on it. +func parseRelease(release string) (*KernelVersion, error) { + var version = KernelVersion{} + + // We're only make sure we get the "kernel" and "major revision". Sometimes we have + // 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64. + _, err := fmt.Sscanf(release, "%d.%d", &version.Kernel, &version.Major) + if err != nil { + return nil, fmt.Errorf("failed to parse kernel version %q: %w", release, err) + } + return &version, nil +} + +// GreaterEqualThan checks if the host's kernel version is greater than, or +// equal to the given kernel version v. Only "kernel version" and "major revision" +// can be specified (e.g., "3.12") and will be taken into account, which means +// that 3.12.25-gentoo and 3.12-1-amd64 are considered equal (kernel: 3, major: 12). +func GreaterEqualThan(minVersion KernelVersion) (bool, error) { + kv, err := getKernelVersion() + if err != nil { + return false, err + } + if kv.Kernel > minVersion.Kernel { + return true, nil + } + if kv.Kernel == minVersion.Kernel && kv.Major >= minVersion.Major { + return true, nil + } + return false, nil +} diff --git a/tools/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go b/tools/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go new file mode 100644 index 000000000..c6a0d843e --- /dev/null +++ b/tools/vendor/github.com/containerd/containerd/errdefs/errdefs_deprecated.go @@ -0,0 +1,116 @@ +/* + Copyright The containerd 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 errdefs defines the common errors used throughout containerd +// packages. +// +// Use with fmt.Errorf to add context to an error. +// +// To detect an error class, use the IsXXX functions to tell whether an error +// is of a certain type. +// +// The functions ToGRPC and FromGRPC can be used to map server-side and +// client-side errors to the correct types. +package errdefs + +import ( + "github.com/containerd/errdefs" +) + +// Definitions of common error types used throughout containerd. All containerd +// errors returned by most packages will map into one of these errors classes. +// Packages should return errors of these types when they want to instruct a +// client to take a particular action. +// +// For the most part, we just try to provide local grpc errors. Most conditions +// map very well to those defined by grpc. +var ( + ErrUnknown = errdefs.ErrUnknown + ErrInvalidArgument = errdefs.ErrInvalidArgument + ErrNotFound = errdefs.ErrNotFound + ErrAlreadyExists = errdefs.ErrAlreadyExists + ErrFailedPrecondition = errdefs.ErrFailedPrecondition + ErrUnavailable = errdefs.ErrUnavailable + ErrNotImplemented = errdefs.ErrNotImplemented +) + +// IsInvalidArgument returns true if the error is due to an invalid argument +func IsInvalidArgument(err error) bool { + return errdefs.IsInvalidArgument(err) +} + +// IsNotFound returns true if the error is due to a missing object +func IsNotFound(err error) bool { + return errdefs.IsNotFound(err) +} + +// IsAlreadyExists returns true if the error is due to an already existing +// metadata item +func IsAlreadyExists(err error) bool { + return errdefs.IsAlreadyExists(err) +} + +// IsFailedPrecondition returns true if an operation could not proceed to the +// lack of a particular condition +func IsFailedPrecondition(err error) bool { + return errdefs.IsFailedPrecondition(err) +} + +// IsUnavailable returns true if the error is due to a resource being unavailable +func IsUnavailable(err error) bool { + return errdefs.IsUnavailable(err) +} + +// IsNotImplemented returns true if the error is due to not being implemented +func IsNotImplemented(err error) bool { + return errdefs.IsNotImplemented(err) +} + +// IsCanceled returns true if the error is due to `context.Canceled`. +func IsCanceled(err error) bool { + return errdefs.IsCanceled(err) +} + +// IsDeadlineExceeded returns true if the error is due to +// `context.DeadlineExceeded`. +func IsDeadlineExceeded(err error) bool { + return errdefs.IsDeadlineExceeded(err) +} + +// ToGRPC will attempt to map the backend containerd error into a grpc error, +// using the original error message as a description. +// +// Further information may be extracted from certain errors depending on their +// type. +// +// If the error is unmapped, the original error will be returned to be handled +// by the regular grpc error handling stack. +func ToGRPC(err error) error { + return errdefs.ToGRPC(err) +} + +// ToGRPCf maps the error to grpc error codes, assembling the formatting string +// and combining it with the target error string. +// +// This is equivalent to errdefs.ToGRPC(fmt.Errorf("%s: %w", fmt.Sprintf(format, args...), err)) +func ToGRPCf(err error, format string, args ...interface{}) error { + return errdefs.ToGRPCf(err, format, args...) +} + +// FromGRPC returns the underlying error from a grpc service based on the grpc error code +func FromGRPC(err error) error { + return errdefs.FromGRPC(err) +} diff --git a/tools/vendor/github.com/containerd/containerd/filters/filter.go b/tools/vendor/github.com/containerd/containerd/filters/filter.go index e13f2625c..dcc569a4b 100644 --- a/tools/vendor/github.com/containerd/containerd/filters/filter.go +++ b/tools/vendor/github.com/containerd/containerd/filters/filter.go @@ -70,7 +70,7 @@ package filters import ( "regexp" - "github.com/containerd/containerd/log" + "github.com/containerd/log" ) // Filter matches specific resources based the provided filter diff --git a/tools/vendor/github.com/containerd/containerd/filters/parser.go b/tools/vendor/github.com/containerd/containerd/filters/parser.go index 32767909b..f07fd33bd 100644 --- a/tools/vendor/github.com/containerd/containerd/filters/parser.go +++ b/tools/vendor/github.com/containerd/containerd/filters/parser.go @@ -20,7 +20,7 @@ import ( "fmt" "io" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) /* diff --git a/tools/vendor/github.com/containerd/containerd/identifiers/validate.go b/tools/vendor/github.com/containerd/containerd/identifiers/validate.go index cbd3a52ba..0acbf3fc4 100644 --- a/tools/vendor/github.com/containerd/containerd/identifiers/validate.go +++ b/tools/vendor/github.com/containerd/containerd/identifiers/validate.go @@ -28,7 +28,7 @@ import ( "fmt" "regexp" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) const ( diff --git a/tools/vendor/github.com/containerd/containerd/images/diffid.go b/tools/vendor/github.com/containerd/containerd/images/diffid.go index 56193cc28..85577eede 100644 --- a/tools/vendor/github.com/containerd/containerd/images/diffid.go +++ b/tools/vendor/github.com/containerd/containerd/images/diffid.go @@ -36,7 +36,7 @@ func GetDiffID(ctx context.Context, cs content.Store, desc ocispec.Descriptor) ( MediaTypeDockerSchema2Layer, ocispec.MediaTypeImageLayer, MediaTypeDockerSchema2LayerForeign, - ocispec.MediaTypeImageLayerNonDistributable: + ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // deprecated return desc.Digest, nil } info, err := cs.Info(ctx, desc.Digest) diff --git a/tools/vendor/github.com/containerd/containerd/images/handlers.go b/tools/vendor/github.com/containerd/containerd/images/handlers.go index 077d88e78..162e87a86 100644 --- a/tools/vendor/github.com/containerd/containerd/images/handlers.go +++ b/tools/vendor/github.com/containerd/containerd/images/handlers.go @@ -23,8 +23,8 @@ import ( "sort" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/platforms" + "github.com/containerd/errdefs" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "golang.org/x/sync/errgroup" "golang.org/x/sync/semaphore" diff --git a/tools/vendor/github.com/containerd/containerd/images/image.go b/tools/vendor/github.com/containerd/containerd/images/image.go index 2d2e36a9a..3e2abc75f 100644 --- a/tools/vendor/github.com/containerd/containerd/images/image.go +++ b/tools/vendor/github.com/containerd/containerd/images/image.go @@ -24,9 +24,9 @@ import ( "time" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/platforms" + "github.com/containerd/errdefs" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -268,6 +268,9 @@ func Platforms(ctx context.Context, provider content.Provider, image ocispec.Des var platformSpecs []ocispec.Platform return platformSpecs, Walk(ctx, Handlers(HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { if desc.Platform != nil { + if desc.Platform.OS == "unknown" || desc.Platform.Architecture == "unknown" { + return nil, ErrSkipDesc + } platformSpecs = append(platformSpecs, *desc.Platform) return nil, ErrSkipDesc } diff --git a/tools/vendor/github.com/containerd/containerd/images/mediatypes.go b/tools/vendor/github.com/containerd/containerd/images/mediatypes.go index 067963bab..cd51aa5eb 100644 --- a/tools/vendor/github.com/containerd/containerd/images/mediatypes.go +++ b/tools/vendor/github.com/containerd/containerd/images/mediatypes.go @@ -22,7 +22,7 @@ import ( "sort" "strings" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -81,7 +81,7 @@ func DiffCompression(ctx context.Context, mediaType string) (string, error) { return "", nil } return "gzip", nil - case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable: + case ocispec.MediaTypeImageLayer, ocispec.MediaTypeImageLayerNonDistributable: //nolint:staticcheck // Non-distributable layers are deprecated if len(ext) > 0 { switch ext[len(ext)-1] { case "gzip": diff --git a/tools/vendor/github.com/containerd/containerd/labels/validate.go b/tools/vendor/github.com/containerd/containerd/labels/validate.go index f83b5dde2..6f23cdd7c 100644 --- a/tools/vendor/github.com/containerd/containerd/labels/validate.go +++ b/tools/vendor/github.com/containerd/containerd/labels/validate.go @@ -19,7 +19,7 @@ package labels import ( "fmt" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) const ( diff --git a/tools/vendor/github.com/containerd/containerd/metadata/containers.go b/tools/vendor/github.com/containerd/containerd/metadata/containers.go index d97d9c6cd..8929ebf97 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/containers.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/containers.go @@ -24,7 +24,6 @@ import ( "time" "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/identifiers" "github.com/containerd/containerd/labels" @@ -32,6 +31,7 @@ import ( "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/protobuf/proto" "github.com/containerd/containerd/protobuf/types" + "github.com/containerd/errdefs" "github.com/containerd/typeurl/v2" bolt "go.etcd.io/bbolt" ) diff --git a/tools/vendor/github.com/containerd/containerd/metadata/content.go b/tools/vendor/github.com/containerd/containerd/metadata/content.go index 2df665fcf..e3ccf3f85 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/content.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/content.go @@ -26,12 +26,12 @@ import ( "time" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/labels" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/metadata/boltutil" "github.com/containerd/containerd/namespaces" + "github.com/containerd/errdefs" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" bolt "go.etcd.io/bbolt" diff --git a/tools/vendor/github.com/containerd/containerd/metadata/db.go b/tools/vendor/github.com/containerd/containerd/metadata/db.go index 8241930a9..7be54f796 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/db.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/db.go @@ -30,10 +30,10 @@ import ( "github.com/containerd/containerd/content" "github.com/containerd/containerd/events" "github.com/containerd/containerd/gc" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/pkg/cleanup" "github.com/containerd/containerd/snapshots" + "github.com/containerd/log" bolt "go.etcd.io/bbolt" ) @@ -520,7 +520,7 @@ func (m *DB) cleanupSnapshotter(ctx context.Context, name string) (time.Duration if err != nil { logger.WithError(err).Warn("snapshot garbage collection failed") } else { - logger.WithField("d", d).Debugf("snapshot garbage collected") + logger.WithField("d", d).Tracef("snapshot garbage collected") } return d, err } @@ -535,7 +535,7 @@ func (m *DB) cleanupContent(ctx context.Context) (time.Duration, error) { if err != nil { log.G(ctx).WithError(err).Warn("content garbage collection failed") } else { - log.G(ctx).WithField("d", d).Debugf("content garbage collected") + log.G(ctx).WithField("d", d).Tracef("content garbage collected") } return d, err diff --git a/tools/vendor/github.com/containerd/containerd/metadata/gc.go b/tools/vendor/github.com/containerd/containerd/metadata/gc.go index 5518a4487..4a810ea3f 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/gc.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/gc.go @@ -26,7 +26,7 @@ import ( eventstypes "github.com/containerd/containerd/api/events" "github.com/containerd/containerd/gc" - "github.com/containerd/containerd/log" + "github.com/containerd/log" bolt "go.etcd.io/bbolt" ) diff --git a/tools/vendor/github.com/containerd/containerd/metadata/images.go b/tools/vendor/github.com/containerd/containerd/metadata/images.go index ff5b624cc..beba82d07 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/images.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/images.go @@ -25,13 +25,13 @@ import ( "sync/atomic" "time" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/images" "github.com/containerd/containerd/labels" "github.com/containerd/containerd/metadata/boltutil" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/pkg/epoch" + "github.com/containerd/errdefs" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" bolt "go.etcd.io/bbolt" diff --git a/tools/vendor/github.com/containerd/containerd/metadata/leases.go b/tools/vendor/github.com/containerd/containerd/metadata/leases.go index 03fa75af3..7c451e746 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/leases.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/leases.go @@ -24,11 +24,11 @@ import ( "sync/atomic" "time" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/leases" "github.com/containerd/containerd/metadata/boltutil" "github.com/containerd/containerd/namespaces" + "github.com/containerd/errdefs" digest "github.com/opencontainers/go-digest" bolt "go.etcd.io/bbolt" ) diff --git a/tools/vendor/github.com/containerd/containerd/metadata/namespaces.go b/tools/vendor/github.com/containerd/containerd/metadata/namespaces.go index 84eb83f27..8b6174e35 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/namespaces.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/namespaces.go @@ -21,10 +21,10 @@ import ( "fmt" "strings" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/identifiers" l "github.com/containerd/containerd/labels" "github.com/containerd/containerd/namespaces" + "github.com/containerd/errdefs" bolt "go.etcd.io/bbolt" ) diff --git a/tools/vendor/github.com/containerd/containerd/metadata/sandbox.go b/tools/vendor/github.com/containerd/containerd/metadata/sandbox.go index 5766647d3..78126b4db 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/sandbox.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/sandbox.go @@ -23,12 +23,12 @@ import ( "strings" "time" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/identifiers" "github.com/containerd/containerd/metadata/boltutil" "github.com/containerd/containerd/namespaces" api "github.com/containerd/containerd/sandbox" + "github.com/containerd/errdefs" "github.com/containerd/typeurl/v2" "go.etcd.io/bbolt" ) diff --git a/tools/vendor/github.com/containerd/containerd/metadata/snapshot.go b/tools/vendor/github.com/containerd/containerd/metadata/snapshot.go index e7774d36e..8388e19c4 100644 --- a/tools/vendor/github.com/containerd/containerd/metadata/snapshot.go +++ b/tools/vendor/github.com/containerd/containerd/metadata/snapshot.go @@ -25,14 +25,14 @@ import ( "time" eventstypes "github.com/containerd/containerd/api/events" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/filters" "github.com/containerd/containerd/labels" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/metadata/boltutil" "github.com/containerd/containerd/mount" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/snapshots" + "github.com/containerd/errdefs" + "github.com/containerd/log" bolt "go.etcd.io/bbolt" ) @@ -323,6 +323,7 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re bopts = []snapshots.Opt{ snapshots.WithLabels(snapshots.FilterInheritedLabels(base.Labels)), } + rerr error ) if err := update(ctx, s.db, func(tx *bolt.Tx) error { @@ -334,12 +335,20 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re // Check if target exists, if so, return already exists if target != "" { if tbkt := bkt.Bucket([]byte(target)); tbkt != nil { - return fmt.Errorf("target snapshot %q: %w", target, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("target snapshot %q: %w", target, errdefs.ErrAlreadyExists) + if err := addSnapshotLease(ctx, tx, s.name, target); err != nil { + return err + } + return nil } } if bbkt := bkt.Bucket([]byte(key)); bbkt != nil { - return fmt.Errorf("snapshot %q: %w", key, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("snapshot %q: %w", key, errdefs.ErrAlreadyExists) + if err := addSnapshotLease(ctx, tx, s.name, key); err != nil { + return err + } + return nil } if parent != "" { @@ -360,11 +369,14 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re }); err != nil { return nil, err } + // Already exists and lease successfully added in transaction + if rerr != nil { + return nil, rerr + } var ( m []mount.Mount created string - rerr error ) if readonly { m, err = s.Snapshotter.View(ctx, bkey, bparent, bopts...) @@ -527,7 +539,10 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap return err } - var bname string + var ( + bname string + rerr error + ) if err := update(ctx, s.db, func(tx *bolt.Tx) error { bkt := getSnapshotterBucket(tx, ns, s.name) if bkt == nil { @@ -535,16 +550,17 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap s.name, errdefs.ErrNotFound) } + if err := addSnapshotLease(ctx, tx, s.name, name); err != nil { + return err + } bbkt, err := bkt.CreateBucket([]byte(name)) if err != nil { if err == bolt.ErrBucketExists { - err = fmt.Errorf("snapshot %q: %w", name, errdefs.ErrAlreadyExists) + rerr = fmt.Errorf("snapshot %q: %w", name, errdefs.ErrAlreadyExists) + return nil } return err } - if err := addSnapshotLease(ctx, tx, s.name, name); err != nil { - return err - } obkt := bkt.Bucket([]byte(key)) if obkt == nil { @@ -634,7 +650,7 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap return err } - if s.db.dbopts.publisher != nil { + if rerr == nil && s.db.dbopts.publisher != nil { if err := s.db.dbopts.publisher.Publish(ctx, "/snapshot/commit", &eventstypes.SnapshotCommit{ Key: key, Name: name, @@ -644,7 +660,7 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap } } - return nil + return rerr } diff --git a/tools/vendor/github.com/containerd/containerd/mount/losetup_linux.go b/tools/vendor/github.com/containerd/containerd/mount/losetup_linux.go index e3647e954..811288cff 100644 --- a/tools/vendor/github.com/containerd/containerd/mount/losetup_linux.go +++ b/tools/vendor/github.com/containerd/containerd/mount/losetup_linux.go @@ -23,6 +23,7 @@ import ( "strings" "time" + kernel "github.com/containerd/containerd/contrib/seccomp/kernelversion" "github.com/containerd/containerd/pkg/randutil" "golang.org/x/sys/unix" ) @@ -84,6 +85,32 @@ func setupLoopDev(backingFile, loopDev string, param LoopParams) (_ *os.File, re } }() + fiveDotEight := kernel.KernelVersion{Kernel: 5, Major: 8} + if ok, err := kernel.GreaterEqualThan(fiveDotEight); err == nil && ok { + config := unix.LoopConfig{ + Fd: uint32(back.Fd()), + } + + copy(config.Info.File_name[:], backingFile) + if param.Readonly { + config.Info.Flags |= unix.LO_FLAGS_READ_ONLY + } + + if param.Autoclear { + config.Info.Flags |= unix.LO_FLAGS_AUTOCLEAR + } + + if param.Direct { + config.Info.Flags |= unix.LO_FLAGS_DIRECT_IO + } + + if err := unix.IoctlLoopConfigure(int(loop.Fd()), &config); err != nil { + return nil, fmt.Errorf("failed to configure loop device: %s: %w", loopDev, err) + } + + return loop, nil + } + // 2. Set FD if err := unix.IoctlSetInt(int(loop.Fd()), unix.LOOP_SET_FD, int(back.Fd())); err != nil { return nil, fmt.Errorf("could not set loop fd for device: %s: %w", loopDev, err) diff --git a/tools/vendor/github.com/containerd/containerd/mount/mount_linux.go b/tools/vendor/github.com/containerd/containerd/mount/mount_linux.go index 8ddbf9c99..34aa639bb 100644 --- a/tools/vendor/github.com/containerd/containerd/mount/mount_linux.go +++ b/tools/vendor/github.com/containerd/containerd/mount/mount_linux.go @@ -26,6 +26,7 @@ import ( "strings" "time" + "github.com/containerd/containerd/pkg/userns" "golang.org/x/sys/unix" ) @@ -114,12 +115,56 @@ func (m *Mount) mount(target string) (err error) { const broflags = unix.MS_BIND | unix.MS_RDONLY if oflags&broflags == broflags { + // Preserve CL_UNPRIVILEGED "locked" flags of the + // bind mount target when we remount to make the bind readonly. + // This is necessary to ensure that + // bind-mounting "with options" will not fail with user namespaces, due to + // kernel restrictions that require user namespace mounts to preserve + // CL_UNPRIVILEGED locked flags. + var unprivFlags int + if userns.RunningInUserNS() { + unprivFlags, err = getUnprivilegedMountFlags(target) + if err != nil { + return err + } + } // Remount the bind to apply read only. - return unix.Mount("", target, "", uintptr(oflags|unix.MS_REMOUNT), "") + return unix.Mount("", target, "", uintptr(oflags|unprivFlags|unix.MS_REMOUNT), "") } return nil } +// Get the set of mount flags that are set on the mount that contains the given +// path and are locked by CL_UNPRIVILEGED. +// +// From https://github.com/moby/moby/blob/v23.0.1/daemon/oci_linux.go#L430-L460 +func getUnprivilegedMountFlags(path string) (int, error) { + var statfs unix.Statfs_t + if err := unix.Statfs(path, &statfs); err != nil { + return 0, err + } + + // The set of keys come from https://github.com/torvalds/linux/blob/v4.13/fs/namespace.c#L1034-L1048. + unprivilegedFlags := []int{ + unix.MS_RDONLY, + unix.MS_NODEV, + unix.MS_NOEXEC, + unix.MS_NOSUID, + unix.MS_NOATIME, + unix.MS_RELATIME, + unix.MS_NODIRATIME, + } + + var flags int + for flag := range unprivilegedFlags { + if int(statfs.Flags)&flag == flag { + flags |= flag + } + } + + return flags, nil +} + // Unmount the provided mount path with the flags func Unmount(target string, flags int) error { if err := unmount(target, flags); err != nil && err != unix.EINVAL { diff --git a/tools/vendor/github.com/containerd/containerd/mount/mount_windows.go b/tools/vendor/github.com/containerd/containerd/mount/mount_windows.go index 7c24fa600..91ac6968d 100644 --- a/tools/vendor/github.com/containerd/containerd/mount/mount_windows.go +++ b/tools/vendor/github.com/containerd/containerd/mount/mount_windows.go @@ -27,7 +27,7 @@ import ( "github.com/Microsoft/go-winio/pkg/bindfilter" "github.com/Microsoft/hcsshim" - "github.com/containerd/containerd/log" + "github.com/containerd/log" "golang.org/x/sys/windows" ) diff --git a/tools/vendor/github.com/containerd/containerd/mount/temp.go b/tools/vendor/github.com/containerd/containerd/mount/temp.go index 83143521a..7849d0609 100644 --- a/tools/vendor/github.com/containerd/containerd/mount/temp.go +++ b/tools/vendor/github.com/containerd/containerd/mount/temp.go @@ -21,7 +21,7 @@ import ( "fmt" "os" - "github.com/containerd/containerd/log" + "github.com/containerd/log" ) var tempMountLocation = getTempDir() diff --git a/tools/vendor/github.com/containerd/containerd/namespaces/context.go b/tools/vendor/github.com/containerd/containerd/namespaces/context.go index e5e23fe43..94ef9408d 100644 --- a/tools/vendor/github.com/containerd/containerd/namespaces/context.go +++ b/tools/vendor/github.com/containerd/containerd/namespaces/context.go @@ -21,8 +21,8 @@ import ( "fmt" "os" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/identifiers" + "github.com/containerd/errdefs" ) const ( diff --git a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo.go b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo.go index 8c600fc96..91f50e8c8 100644 --- a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo.go +++ b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo.go @@ -20,7 +20,7 @@ import ( "runtime" "sync" - "github.com/containerd/containerd/log" + "github.com/containerd/log" ) // Present the ARM instruction set architecture, eg: v7, v8 diff --git a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go index 722d86c35..e07aa99cc 100644 --- a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go +++ b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_linux.go @@ -24,7 +24,7 @@ import ( "runtime" "strings" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" "golang.org/x/sys/unix" ) diff --git a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go index fa5f19c42..8cbcbb24a 100644 --- a/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go +++ b/tools/vendor/github.com/containerd/containerd/platforms/cpuinfo_other.go @@ -22,7 +22,7 @@ import ( "fmt" "runtime" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) func getCPUVariant() (string, error) { diff --git a/tools/vendor/github.com/containerd/containerd/platforms/platforms.go b/tools/vendor/github.com/containerd/containerd/platforms/platforms.go index 56613b076..44bc24a5c 100644 --- a/tools/vendor/github.com/containerd/containerd/platforms/platforms.go +++ b/tools/vendor/github.com/containerd/containerd/platforms/platforms.go @@ -116,7 +116,7 @@ import ( specs "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" ) var ( diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go index 64c6a38f9..244e03509 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/auth/fetch.go @@ -26,9 +26,9 @@ import ( "strings" "time" - "github.com/containerd/containerd/log" remoteserrors "github.com/containerd/containerd/remotes/errors" "github.com/containerd/containerd/version" + "github.com/containerd/log" ) var ( diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go index 9b3663cd1..2fd1118bc 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/authorizer.go @@ -25,10 +25,10 @@ import ( "strings" "sync" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/remotes/docker/auth" remoteerrors "github.com/containerd/containerd/remotes/errors" + "github.com/containerd/errdefs" + "github.com/containerd/log" ) type dockerAuthorizer struct { @@ -148,9 +148,11 @@ func (a *dockerAuthorizer) AddResponses(ctx context.Context, responses []*http.R defer a.mu.Unlock() for _, c := range auth.ParseAuthHeader(last.Header) { if c.Scheme == auth.BearerAuth { - if err := invalidAuthorization(c, responses); err != nil { + if retry, err := invalidAuthorization(ctx, c, responses); err != nil { delete(a.handlers, host) return err + } else if retry { + delete(a.handlers, host) } // reuse existing handler @@ -328,18 +330,24 @@ func (ah *authHandler) doBearerAuth(ctx context.Context) (token, refreshToken st return resp.Token, resp.RefreshToken, nil } -func invalidAuthorization(c auth.Challenge, responses []*http.Response) error { +func invalidAuthorization(ctx context.Context, c auth.Challenge, responses []*http.Response) (retry bool, _ error) { errStr := c.Parameters["error"] if errStr == "" { - return nil + return retry, nil } n := len(responses) if n == 1 || (n > 1 && !sameRequest(responses[n-2].Request, responses[n-1].Request)) { - return nil + limitedErr := errStr + errLenghLimit := 64 + if len(limitedErr) > errLenghLimit { + limitedErr = limitedErr[:errLenghLimit] + "..." + } + log.G(ctx).WithField("error", limitedErr).Debug("authorization error using bearer token, retrying") + return true, nil } - return fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization) + return retry, fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization) } func sameRequest(r1, r2 *http.Request) bool { diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/converter.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/converter.go index d7dca0d36..95a68d70e 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/converter.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/converter.go @@ -24,8 +24,8 @@ import ( "github.com/containerd/containerd/content" "github.com/containerd/containerd/images" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/remotes" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go index 908205392..aa7cf4666 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/converter_fuzz.go @@ -24,7 +24,7 @@ import ( fuzz "github.com/AdaLogics/go-fuzz-headers" "github.com/containerd/containerd/content/local" - "github.com/containerd/containerd/log" + "github.com/containerd/log" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/sirupsen/logrus" ) diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go index ecf245933..3589db3ef 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/fetcher.go @@ -26,9 +26,9 @@ import ( "net/url" "strings" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" - "github.com/containerd/containerd/log" + "github.com/containerd/errdefs" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/handler.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/handler.go index 27638ccc0..ccec49013 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/handler.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/handler.go @@ -25,8 +25,8 @@ import ( "github.com/containerd/containerd/content" "github.com/containerd/containerd/images" "github.com/containerd/containerd/labels" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/reference" + "github.com/containerd/log" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go index 824359339..6739e7904 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/httpreadseeker.go @@ -21,8 +21,8 @@ import ( "fmt" "io" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" + "github.com/containerd/errdefs" + "github.com/containerd/log" ) const maxRetry = 3 diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/pusher.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/pusher.go index 678e17e12..a27cda0b5 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/pusher.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/pusher.go @@ -29,11 +29,11 @@ import ( "time" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/remotes" remoteserrors "github.com/containerd/containerd/remotes/errors" + "github.com/containerd/errdefs" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -284,7 +284,7 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str req.body = func() (io.ReadCloser, error) { pr, pw := io.Pipe() pushw.setPipe(pw) - return io.NopCloser(pr), nil + return pr, nil } req.size = desc.Size @@ -292,7 +292,6 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str resp, err := req.doWithRetries(ctx, nil) if err != nil { pushw.setError(err) - pushw.Close() return } @@ -302,7 +301,7 @@ func (p dockerPusher) push(ctx context.Context, desc ocispec.Descriptor, ref str err := remoteserrors.NewUnexpectedStatusErr(resp) log.G(ctx).WithField("resp", resp).WithField("body", string(err.(remoteserrors.ErrUnexpectedStatus).Body)).Debug("unexpected response") pushw.setError(err) - pushw.Close() + return } pushw.setResponse(resp) }() @@ -335,10 +334,12 @@ type pushWriter struct { pipe *io.PipeWriter - pipeC chan *io.PipeWriter - respC chan *http.Response + done chan struct{} closeOnce sync.Once - errC chan error + + pipeC chan *io.PipeWriter + respC chan *http.Response + errC chan error isManifest bool @@ -356,19 +357,51 @@ func newPushWriter(db *dockerBase, ref string, expected digest.Digest, tracker S pipeC: make(chan *io.PipeWriter, 1), respC: make(chan *http.Response, 1), errC: make(chan error, 1), + done: make(chan struct{}), isManifest: isManifest, } } func (pw *pushWriter) setPipe(p *io.PipeWriter) { - pw.pipeC <- p + select { + case <-pw.done: + case pw.pipeC <- p: + } } func (pw *pushWriter) setError(err error) { - pw.errC <- err + select { + case <-pw.done: + case pw.errC <- err: + } } + func (pw *pushWriter) setResponse(resp *http.Response) { - pw.respC <- resp + select { + case <-pw.done: + case pw.respC <- resp: + } +} + +func (pw *pushWriter) replacePipe(p *io.PipeWriter) error { + if pw.pipe == nil { + pw.pipe = p + return nil + } + + pw.pipe.CloseWithError(content.ErrReset) + pw.pipe = p + + // If content has already been written, the bytes + // cannot be written again and the caller must reset + status, err := pw.tracker.GetStatus(pw.ref) + if err != nil { + return err + } + status.Offset = 0 + status.UpdatedAt = time.Now() + pw.tracker.SetStatus(pw.ref, status) + return content.ErrReset } func (pw *pushWriter) Write(p []byte) (n int, err error) { @@ -378,26 +411,18 @@ func (pw *pushWriter) Write(p []byte) (n int, err error) { } if pw.pipe == nil { - p, ok := <-pw.pipeC - if !ok { + select { + case <-pw.done: return 0, io.ErrClosedPipe + case p := <-pw.pipeC: + pw.replacePipe(p) } - pw.pipe = p } else { select { - case p, ok := <-pw.pipeC: - if !ok { - return 0, io.ErrClosedPipe - } - pw.pipe.CloseWithError(content.ErrReset) - pw.pipe = p - - // If content has already been written, the bytes - // cannot be written and the caller must reset - status.Offset = 0 - status.UpdatedAt = time.Now() - pw.tracker.SetStatus(pw.ref, status) - return 0, content.ErrReset + case <-pw.done: + return 0, io.ErrClosedPipe + case p := <-pw.pipeC: + return 0, pw.replacePipe(p) default: } } @@ -407,9 +432,13 @@ func (pw *pushWriter) Write(p []byte) (n int, err error) { // if the pipe is closed, we might have the original error on the error // channel - so we should try and get it select { - case err2 := <-pw.errC: - err = err2 - default: + case <-pw.done: + case err = <-pw.errC: + pw.Close() + case p := <-pw.pipeC: + return 0, pw.replacePipe(p) + case resp := <-pw.respC: + pw.setResponse(resp) } } status.Offset += int64(n) @@ -422,7 +451,7 @@ func (pw *pushWriter) Close() error { // Ensure pipeC is closed but handle `Close()` being // called multiple times without panicking pw.closeOnce.Do(func() { - close(pw.pipeC) + close(pw.done) }) if pw.pipe != nil { status, err := pw.tracker.GetStatus(pw.ref) @@ -462,30 +491,18 @@ func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Di // TODO: timeout waiting for response var resp *http.Response select { + case <-pw.done: + return io.ErrClosedPipe case err := <-pw.errC: + pw.Close() return err case resp = <-pw.respC: defer resp.Body.Close() - case p, ok := <-pw.pipeC: + case p := <-pw.pipeC: // check whether the pipe has changed in the commit, because sometimes Write // can complete successfully, but the pipe may have changed. In that case, the // content needs to be reset. - if !ok { - return io.ErrClosedPipe - } - pw.pipe.CloseWithError(content.ErrReset) - pw.pipe = p - - // If content has already been written, the bytes - // cannot be written again and the caller must reset - status, err := pw.tracker.GetStatus(pw.ref) - if err != nil { - return err - } - status.Offset = 0 - status.UpdatedAt = time.Now() - pw.tracker.SetStatus(pw.ref, status) - return content.ErrReset + return pw.replacePipe(p) } // 201 is specified return status, some registries return diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/resolver.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/resolver.go index cca4ca6a2..b2b124214 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/resolver.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/resolver.go @@ -28,15 +28,15 @@ import ( "path" "strings" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/reference" "github.com/containerd/containerd/remotes" "github.com/containerd/containerd/remotes/docker/schema1" //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility. remoteerrors "github.com/containerd/containerd/remotes/errors" "github.com/containerd/containerd/tracing" "github.com/containerd/containerd/version" + "github.com/containerd/errdefs" + "github.com/containerd/log" "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -704,9 +704,71 @@ func IsLocalhost(host string) bool { return ip.IsLoopback() } +// NewHTTPFallback returns http.RoundTripper which allows fallback from https to +// http for registry endpoints with configurations for both http and TLS, +// such as defaulted localhost endpoints. +func NewHTTPFallback(transport http.RoundTripper) http.RoundTripper { + return &httpFallback{ + super: transport, + } +} + +type httpFallback struct { + super http.RoundTripper + host string +} + +func (f *httpFallback) RoundTrip(r *http.Request) (*http.Response, error) { + // only fall back if the same host had previously fell back + if f.host != r.URL.Host { + resp, err := f.super.RoundTrip(r) + if !isTLSError(err) { + return resp, err + } + } + + plainHTTPUrl := *r.URL + plainHTTPUrl.Scheme = "http" + + plainHTTPRequest := *r + plainHTTPRequest.URL = &plainHTTPUrl + + if f.host != r.URL.Host { + f.host = r.URL.Host + + // update body on the second attempt + if r.Body != nil && r.GetBody != nil { + body, err := r.GetBody() + if err != nil { + return nil, err + } + plainHTTPRequest.Body = body + } + } + + return f.super.RoundTrip(&plainHTTPRequest) +} + +func isTLSError(err error) bool { + if err == nil { + return false + } + var tlsErr tls.RecordHeaderError + if errors.As(err, &tlsErr) && string(tlsErr.RecordHeader[:]) == "HTTP/" { + return true + } + if strings.Contains(err.Error(), "TLS handshake timeout") { + return true + } + + return false +} + // HTTPFallback is an http.RoundTripper which allows fallback from https to http // for registry endpoints with configurations for both http and TLS, such as // defaulted localhost endpoints. +// +// Deprecated: Use NewHTTPFallback instead. type HTTPFallback struct { http.RoundTripper } @@ -722,6 +784,14 @@ func (f HTTPFallback) RoundTrip(r *http.Request) (*http.Response, error) { plainHTTPRequest := *r plainHTTPRequest.URL = &plainHTTPUrl + if r.Body != nil && r.GetBody != nil { + body, err := r.GetBody() + if err != nil { + return nil, err + } + plainHTTPRequest.Body = body + } + return f.RoundTripper.RoundTrip(&plainHTTPRequest) } diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go index 8c9e520cd..75bd9875a 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/schema1/converter.go @@ -34,11 +34,11 @@ import ( "github.com/containerd/containerd/archive/compression" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" "github.com/containerd/containerd/labels" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/remotes" + "github.com/containerd/errdefs" + "github.com/containerd/log" digest "github.com/opencontainers/go-digest" specs "github.com/opencontainers/image-spec/specs-go" ocispec "github.com/opencontainers/image-spec/specs-go/v1" diff --git a/tools/vendor/github.com/containerd/containerd/remotes/docker/status.go b/tools/vendor/github.com/containerd/containerd/remotes/docker/status.go index 1a9227725..c7764758f 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/docker/status.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/docker/status.go @@ -21,7 +21,7 @@ import ( "sync" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/moby/locker" ) diff --git a/tools/vendor/github.com/containerd/containerd/remotes/handlers.go b/tools/vendor/github.com/containerd/containerd/remotes/handlers.go index f24669dc4..912b85bfe 100644 --- a/tools/vendor/github.com/containerd/containerd/remotes/handlers.go +++ b/tools/vendor/github.com/containerd/containerd/remotes/handlers.go @@ -26,11 +26,11 @@ import ( "sync" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" "github.com/containerd/containerd/labels" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/platforms" + "github.com/containerd/errdefs" + "github.com/containerd/log" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "golang.org/x/sync/semaphore" ) diff --git a/tools/vendor/github.com/containerd/containerd/sandbox/controller.go b/tools/vendor/github.com/containerd/containerd/sandbox/controller.go index b74f82c10..4885b4366 100644 --- a/tools/vendor/github.com/containerd/containerd/sandbox/controller.go +++ b/tools/vendor/github.com/containerd/containerd/sandbox/controller.go @@ -22,8 +22,8 @@ import ( "time" "github.com/containerd/containerd/api/types" - "github.com/containerd/containerd/platforms" "github.com/containerd/typeurl/v2" + imagespec "github.com/opencontainers/image-spec/specs-go/v1" ) type CreateOptions struct { @@ -90,7 +90,7 @@ type Controller interface { Start(ctx context.Context, sandboxID string) (ControllerInstance, error) // Platform returns target sandbox OS that will be used by Controller. // containerd will rely on this to generate proper OCI spec. - Platform(_ctx context.Context, _sandboxID string) (platforms.Platform, error) + Platform(_ctx context.Context, _sandboxID string) (imagespec.Platform, error) // Stop will stop sandbox instance Stop(ctx context.Context, sandboxID string, opts ...StopOpt) error // Wait blocks until sandbox process exits. diff --git a/tools/vendor/github.com/containerd/containerd/sandbox/store.go b/tools/vendor/github.com/containerd/containerd/sandbox/store.go index cda646dde..5d0d42bdb 100644 --- a/tools/vendor/github.com/containerd/containerd/sandbox/store.go +++ b/tools/vendor/github.com/containerd/containerd/sandbox/store.go @@ -21,7 +21,7 @@ import ( "fmt" "time" - "github.com/containerd/containerd/errdefs" + "github.com/containerd/errdefs" "github.com/containerd/typeurl/v2" ) diff --git a/tools/vendor/github.com/containerd/containerd/version/version.go b/tools/vendor/github.com/containerd/containerd/version/version.go index c01bc57e8..dfe46c922 100644 --- a/tools/vendor/github.com/containerd/containerd/version/version.go +++ b/tools/vendor/github.com/containerd/containerd/version/version.go @@ -23,7 +23,7 @@ var ( Package = "github.com/containerd/containerd" // Version holds the complete version number. Filled in at linking time. - Version = "1.7.12+unknown" + Version = "1.7.18+unknown" // Revision is filled with the VCS (e.g. git) revision being used to build // the program at linking time. diff --git a/tools/vendor/github.com/opencontainers/runc/LICENSE b/tools/vendor/github.com/containerd/errdefs/LICENSE similarity index 98% rename from tools/vendor/github.com/opencontainers/runc/LICENSE rename to tools/vendor/github.com/containerd/errdefs/LICENSE index 27448585a..584149b6e 100644 --- a/tools/vendor/github.com/opencontainers/runc/LICENSE +++ b/tools/vendor/github.com/containerd/errdefs/LICENSE @@ -1,7 +1,7 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -176,13 +176,13 @@ END OF TERMS AND CONDITIONS - Copyright 2014 Docker, Inc. + Copyright The containerd 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 + https://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, diff --git a/tools/vendor/github.com/containerd/errdefs/README.md b/tools/vendor/github.com/containerd/errdefs/README.md new file mode 100644 index 000000000..bd418c63f --- /dev/null +++ b/tools/vendor/github.com/containerd/errdefs/README.md @@ -0,0 +1,13 @@ +# errdefs + +A Go package for defining and checking common containerd errors. + +## Project details + +**errdefs** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). +As a containerd sub-project, you will find the: + * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md), + * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS), + * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) + +information in our [`containerd/project`](https://github.com/containerd/project) repository. diff --git a/tools/vendor/github.com/containerd/containerd/errdefs/errors.go b/tools/vendor/github.com/containerd/errdefs/errors.go similarity index 100% rename from tools/vendor/github.com/containerd/containerd/errdefs/errors.go rename to tools/vendor/github.com/containerd/errdefs/errors.go diff --git a/tools/vendor/github.com/containerd/containerd/errdefs/grpc.go b/tools/vendor/github.com/containerd/errdefs/grpc.go similarity index 100% rename from tools/vendor/github.com/containerd/containerd/errdefs/grpc.go rename to tools/vendor/github.com/containerd/errdefs/grpc.go diff --git a/tools/vendor/github.com/containerd/ttrpc/client.go b/tools/vendor/github.com/containerd/ttrpc/client.go index 4b1e1e709..685a00a9b 100644 --- a/tools/vendor/github.com/containerd/ttrpc/client.go +++ b/tools/vendor/github.com/containerd/ttrpc/client.go @@ -71,6 +71,42 @@ func WithUnaryClientInterceptor(i UnaryClientInterceptor) ClientOpts { } } +// WithChainUnaryClientInterceptor sets the provided chain of client interceptors +func WithChainUnaryClientInterceptor(interceptors ...UnaryClientInterceptor) ClientOpts { + return func(c *Client) { + if len(interceptors) == 0 { + return + } + if c.interceptor != nil { + interceptors = append([]UnaryClientInterceptor{c.interceptor}, interceptors...) + } + c.interceptor = func( + ctx context.Context, + req *Request, + reply *Response, + info *UnaryClientInfo, + final Invoker, + ) error { + return interceptors[0](ctx, req, reply, info, + chainUnaryInterceptors(interceptors[1:], final, info)) + } + } +} + +func chainUnaryInterceptors(interceptors []UnaryClientInterceptor, final Invoker, info *UnaryClientInfo) Invoker { + if len(interceptors) == 0 { + return final + } + return func( + ctx context.Context, + req *Request, + reply *Response, + ) error { + return interceptors[0](ctx, req, reply, info, + chainUnaryInterceptors(interceptors[1:], final, info)) + } +} + // NewClient creates a new ttrpc client using the given connection func NewClient(conn net.Conn, opts ...ClientOpts) *Client { ctx, cancel := context.WithCancel(context.Background()) @@ -85,13 +121,16 @@ func NewClient(conn net.Conn, opts ...ClientOpts) *Client { ctx: ctx, userCloseFunc: func() {}, userCloseWaitCh: make(chan struct{}), - interceptor: defaultClientInterceptor, } for _, o := range opts { o(c) } + if c.interceptor == nil { + c.interceptor = defaultClientInterceptor + } + go c.run() return c } @@ -286,7 +325,7 @@ func (c *Client) Close() error { return nil } -// UserOnCloseWait is used to blocks untils the user's on-close callback +// UserOnCloseWait is used to block until the user's on-close callback // finishes. func (c *Client) UserOnCloseWait(ctx context.Context) error { select { @@ -347,25 +386,44 @@ func (c *Client) receiveLoop() error { // createStream creates a new stream and registers it with the client // Introduce stream types for multiple or single response func (c *Client) createStream(flags uint8, b []byte) (*stream, error) { - c.streamLock.Lock() + // sendLock must be held across both allocation of the stream ID and sending it across the wire. + // This ensures that new stream IDs sent on the wire are always increasing, which is a + // requirement of the TTRPC protocol. + // This use of sendLock could be split into another mutex that covers stream creation + first send, + // and just use sendLock to guard writing to the wire, but for now it seems simpler to have fewer mutexes. + c.sendLock.Lock() + defer c.sendLock.Unlock() // Check if closed since lock acquired to prevent adding // anything after cleanup completes select { case <-c.ctx.Done(): - c.streamLock.Unlock() return nil, ErrClosed default: } - // Stream ID should be allocated at same time - s := newStream(c.nextStreamID, c) - c.streams[s.id] = s - c.nextStreamID = c.nextStreamID + 2 + var s *stream + if err := func() error { + // In the future this could be replaced with a sync.Map instead of streamLock+map. + c.streamLock.Lock() + defer c.streamLock.Unlock() - c.sendLock.Lock() - defer c.sendLock.Unlock() - c.streamLock.Unlock() + // Check if closed since lock acquired to prevent adding + // anything after cleanup completes + select { + case <-c.ctx.Done(): + return ErrClosed + default: + } + + s = newStream(c.nextStreamID, c) + c.streams[s.id] = s + c.nextStreamID = c.nextStreamID + 2 + + return nil + }(); err != nil { + return nil, err + } if err := c.channel.send(uint32(s.id), messageTypeRequest, flags, b); err != nil { return s, filterCloseErr(err) diff --git a/tools/vendor/github.com/containerd/ttrpc/config.go b/tools/vendor/github.com/containerd/ttrpc/config.go index 097419635..f401f67be 100644 --- a/tools/vendor/github.com/containerd/ttrpc/config.go +++ b/tools/vendor/github.com/containerd/ttrpc/config.go @@ -16,7 +16,10 @@ package ttrpc -import "errors" +import ( + "context" + "errors" +) type serverConfig struct { handshaker Handshaker @@ -44,9 +47,40 @@ func WithServerHandshaker(handshaker Handshaker) ServerOpt { func WithUnaryServerInterceptor(i UnaryServerInterceptor) ServerOpt { return func(c *serverConfig) error { if c.interceptor != nil { - return errors.New("only one interceptor allowed per server") + return errors.New("only one unchained interceptor allowed per server") } c.interceptor = i return nil } } + +// WithChainUnaryServerInterceptor sets the provided chain of server interceptors +func WithChainUnaryServerInterceptor(interceptors ...UnaryServerInterceptor) ServerOpt { + return func(c *serverConfig) error { + if len(interceptors) == 0 { + return nil + } + if c.interceptor != nil { + interceptors = append([]UnaryServerInterceptor{c.interceptor}, interceptors...) + } + c.interceptor = func( + ctx context.Context, + unmarshal Unmarshaler, + info *UnaryServerInfo, + method Method) (interface{}, error) { + return interceptors[0](ctx, unmarshal, info, + chainUnaryServerInterceptors(info, method, interceptors[1:])) + } + return nil + } +} + +func chainUnaryServerInterceptors(info *UnaryServerInfo, method Method, interceptors []UnaryServerInterceptor) Method { + if len(interceptors) == 0 { + return method + } + return func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + return interceptors[0](ctx, unmarshal, info, + chainUnaryServerInterceptors(info, method, interceptors[1:])) + } +} diff --git a/tools/vendor/github.com/containerd/ttrpc/services.go b/tools/vendor/github.com/containerd/ttrpc/services.go index 6aabfbb4d..6d092bf95 100644 --- a/tools/vendor/github.com/containerd/ttrpc/services.go +++ b/tools/vendor/github.com/containerd/ttrpc/services.go @@ -140,7 +140,11 @@ func (s *serviceSet) handle(ctx context.Context, req *Request, respond func(*sta respond(st, p, stream.StreamingServer, true) }() - if req.Payload != nil { + // Empty proto messages serialized to 0 payloads, + // so signatures like: rpc Stream(google.protobuf.Empty) returns (stream Data); + // don't get invoked here, which causes hang on client side. + // See https://github.com/containerd/ttrpc/issues/126 + if req.Payload != nil || !info.StreamingClient { unmarshal := func(obj interface{}) error { return protoUnmarshal(req.Payload, obj) } diff --git a/tools/vendor/github.com/containers/common/pkg/auth/auth.go b/tools/vendor/github.com/containers/common/pkg/auth/auth.go index 6536d0f2f..a3d333a99 100644 --- a/tools/vendor/github.com/containers/common/pkg/auth/auth.go +++ b/tools/vendor/github.com/containers/common/pkg/auth/auth.go @@ -16,6 +16,7 @@ import ( "github.com/containers/image/v5/pkg/docker/config" "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/sirupsen/logrus" ) @@ -69,7 +70,7 @@ func CheckAuthFile(pathOption string) error { if pathOption == "" { return nil } - if _, err := os.Stat(pathOption); err != nil { + if err := fileutils.Exists(pathOption); err != nil { return fmt.Errorf("credential file is not accessible: %w", err) } return nil @@ -285,7 +286,7 @@ func getUserAndPass(opts *LoginOptions, password, userFromAuthFile string) (user username := opts.Username if username == "" { if opts.Stdin == nil { - return "", "", fmt.Errorf("cannot prompt for username without stdin") + return "", "", errors.New("cannot prompt for username without stdin") } if userFromAuthFile != "" { diff --git a/tools/vendor/github.com/containers/common/pkg/capabilities/capabilities.go b/tools/vendor/github.com/containers/common/pkg/capabilities/capabilities.go index 3bf25e086..43fd2c1b5 100644 --- a/tools/vendor/github.com/containers/common/pkg/capabilities/capabilities.go +++ b/tools/vendor/github.com/containers/common/pkg/capabilities/capabilities.go @@ -8,6 +8,7 @@ package capabilities import ( "errors" "fmt" + "slices" "sort" "strings" "sync" @@ -54,16 +55,6 @@ func init() { } } -// stringInSlice determines if a string is in a string slice, returns bool -func stringInSlice(s string, sl []string) bool { - for _, i := range sl { - if i == s { - return true - } - } - return false -} - var ( boundingSetOnce sync.Once boundingSetRet []string @@ -115,7 +106,7 @@ func NormalizeCapabilities(caps []string) ([]string, error) { if !strings.HasPrefix(c, "CAP_") { c = "CAP_" + c } - if !stringInSlice(c, capabilityList) { + if !slices.Contains(capabilityList, c) { return nil, fmt.Errorf("%q: %w", c, ErrUnknownCapability) } normalized = append(normalized, c) @@ -127,7 +118,7 @@ func NormalizeCapabilities(caps []string) ([]string, error) { // ValidateCapabilities validates if caps only contains valid capabilities. func ValidateCapabilities(caps []string) error { for _, c := range caps { - if !stringInSlice(c, capabilityList) { + if !slices.Contains(capabilityList, c) { return fmt.Errorf("%q: %w", c, ErrUnknownCapability) } } @@ -159,8 +150,8 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) { return nil, err } - if stringInSlice(All, capDrop) { - if stringInSlice(All, capAdd) { + if slices.Contains(capDrop, All) { + if slices.Contains(capAdd, All) { return nil, errors.New("adding all caps and removing all caps not allowed") } // "Drop" all capabilities; return what's in capAdd instead @@ -168,7 +159,7 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) { return capAdd, nil } - if stringInSlice(All, capAdd) { + if slices.Contains(capAdd, All) { base, err = BoundingSet() if err != nil { return nil, err @@ -176,14 +167,14 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) { capAdd = []string{} } else { for _, add := range capAdd { - if stringInSlice(add, capDrop) { + if slices.Contains(capDrop, add) { return nil, fmt.Errorf("capability %q cannot be dropped and added", add) } } } for _, drop := range capDrop { - if stringInSlice(drop, capAdd) { + if slices.Contains(capAdd, drop) { return nil, fmt.Errorf("capability %q cannot be dropped and added", drop) } } @@ -191,7 +182,7 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) { caps := make([]string, 0, len(base)+len(capAdd)) // Drop any capabilities in capDrop that are in base for _, cap := range base { - if stringInSlice(cap, capDrop) { + if slices.Contains(capDrop, cap) { continue } caps = append(caps, cap) @@ -199,7 +190,7 @@ func MergeCapabilities(base, adds, drops []string) ([]string, error) { // Add any capabilities in capAdd that are not in base for _, cap := range capAdd { - if stringInSlice(cap, base) { + if slices.Contains(base, cap) { continue } caps = append(caps, cap) diff --git a/tools/vendor/github.com/containers/common/pkg/password/password_supported.go b/tools/vendor/github.com/containers/common/pkg/password/password_supported.go index 56e95b3d5..52a56b632 100644 --- a/tools/vendor/github.com/containers/common/pkg/password/password_supported.go +++ b/tools/vendor/github.com/containers/common/pkg/password/password_supported.go @@ -1,5 +1,4 @@ -//go:build linux || darwin || freebsd -// +build linux darwin freebsd +//go:build linux || darwin || freebsd || netbsd package password diff --git a/tools/vendor/github.com/containers/common/pkg/password/password_windows.go b/tools/vendor/github.com/containers/common/pkg/password/password_windows.go index 7a0822d01..0a1d9eebd 100644 --- a/tools/vendor/github.com/containers/common/pkg/password/password_windows.go +++ b/tools/vendor/github.com/containers/common/pkg/password/password_windows.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package password diff --git a/tools/vendor/github.com/containers/image/v5/docker/distribution_error.go b/tools/vendor/github.com/containers/image/v5/docker/distribution_error.go index 11b42c6e0..0a0064576 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/distribution_error.go +++ b/tools/vendor/github.com/containers/image/v5/docker/distribution_error.go @@ -21,10 +21,10 @@ import ( "fmt" "io" "net/http" + "slices" "github.com/docker/distribution/registry/api/errcode" dockerChallenge "github.com/docker/distribution/registry/client/auth/challenge" - "golang.org/x/exp/slices" ) // errNoErrorsInBody is returned when an HTTP response body parses to an empty diff --git a/tools/vendor/github.com/containers/image/v5/docker/docker_client.go b/tools/vendor/github.com/containers/image/v5/docker/docker_client.go index 6ce8f7008..97d97fed5 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/docker_client.go +++ b/tools/vendor/github.com/containers/image/v5/docker/docker_client.go @@ -18,6 +18,7 @@ import ( "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/iolimits" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/set" "github.com/containers/image/v5/internal/useragent" "github.com/containers/image/v5/manifest" @@ -25,6 +26,7 @@ import ( "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/pkg/tlsclientconfig" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/docker/distribution/registry/api/errcode" v2 "github.com/docker/distribution/registry/api/v2" @@ -84,11 +86,9 @@ type extensionSignatureList struct { Signatures []extensionSignature `json:"signatures"` } +// bearerToken records a cached token we can use to authenticate. type bearerToken struct { - Token string `json:"token"` - AccessToken string `json:"access_token"` - ExpiresIn int `json:"expires_in"` - IssuedAt time.Time `json:"issued_at"` + token string expirationTime time.Time } @@ -145,25 +145,6 @@ const ( noAuth ) -func newBearerTokenFromJSONBlob(blob []byte) (*bearerToken, error) { - token := new(bearerToken) - if err := json.Unmarshal(blob, &token); err != nil { - return nil, err - } - if token.Token == "" { - token.Token = token.AccessToken - } - if token.ExpiresIn < minimumTokenLifetimeSeconds { - token.ExpiresIn = minimumTokenLifetimeSeconds - logrus.Debugf("Increasing token expiration to: %d seconds", token.ExpiresIn) - } - if token.IssuedAt.IsZero() { - token.IssuedAt = time.Now().UTC() - } - token.expirationTime = token.IssuedAt.Add(time.Duration(token.ExpiresIn) * time.Second) - return token, nil -} - // dockerCertDir returns a path to a directory to be consumed by tlsclientconfig.SetupCertificates() depending on ctx and hostPort. func dockerCertDir(sys *types.SystemContext, hostPort string) (string, error) { if sys != nil && sys.DockerCertPath != "" { @@ -186,7 +167,7 @@ func dockerCertDir(sys *types.SystemContext, hostPort string) (string, error) { } fullCertDirPath = filepath.Join(hostCertDir, hostPort) - _, err := os.Stat(fullCertDirPath) + err := fileutils.Exists(fullCertDirPath) if err == nil { break } @@ -497,8 +478,8 @@ func (c *dockerClient) resolveRequestURL(path string) (*url.URL, error) { // Checks if the auth headers in the response contain an indication of a failed // authorizdation because of an "insufficient_scope" error. If that's the case, // returns the required scope to be used for fetching a new token. -func needsRetryWithUpdatedScope(err error, res *http.Response) (bool, *authScope) { - if err == nil && res.StatusCode == http.StatusUnauthorized { +func needsRetryWithUpdatedScope(res *http.Response) (bool, *authScope) { + if res.StatusCode == http.StatusUnauthorized { challenges := parseAuthHeader(res.Header) for _, challenge := range challenges { if challenge.Scheme == "bearer" { @@ -557,6 +538,9 @@ func (c *dockerClient) makeRequestToResolvedURL(ctx context.Context, method stri attempts := 0 for { res, err := c.makeRequestToResolvedURLOnce(ctx, method, requestURL, headers, stream, streamLen, auth, extraScope) + if err != nil { + return nil, err + } attempts++ // By default we use pre-defined scopes per operation. In @@ -572,27 +556,29 @@ func (c *dockerClient) makeRequestToResolvedURL(ctx context.Context, method stri // We also cannot retry with a body (stream != nil) as stream // was already read if attempts == 1 && stream == nil && auth != noAuth { - if retry, newScope := needsRetryWithUpdatedScope(err, res); retry { + if retry, newScope := needsRetryWithUpdatedScope(res); retry { logrus.Debug("Detected insufficient_scope error, will retry request with updated scope") + res.Body.Close() // Note: This retry ignores extraScope. That’s, strictly speaking, incorrect, but we don’t currently // expect the insufficient_scope errors to happen for those callers. If that changes, we can add support // for more than one extra scope. res, err = c.makeRequestToResolvedURLOnce(ctx, method, requestURL, headers, stream, streamLen, auth, newScope) + if err != nil { + return nil, err + } extraScope = newScope } } - if res == nil || res.StatusCode != http.StatusTooManyRequests || // Only retry on StatusTooManyRequests, success or other failure is returned to caller immediately + + if res.StatusCode != http.StatusTooManyRequests || // Only retry on StatusTooManyRequests, success or other failure is returned to caller immediately stream != nil || // We can't retry with a body (which is not restartable in the general case) attempts == backoffNumIterations { - return res, err + return res, nil } // close response body before retry or context done res.Body.Close() - delay = parseRetryAfter(res, delay) - if delay > backoffMaxDelay { - delay = backoffMaxDelay - } + delay = min(parseRetryAfter(res, delay), backoffMaxDelay) logrus.Debugf("Too many requests to %s: sleeping for %f seconds before next attempt", requestURL.Redacted(), delay.Seconds()) select { case <-ctx.Done(): @@ -671,10 +657,14 @@ func parseRegistryWarningHeader(header string) string { // warning-value = warn-code SP warn-agent SP warn-text [ SP warn-date ] // distribution-spec requires warn-code=299, warn-agent="-", warn-date missing - if !strings.HasPrefix(header, expectedPrefix) || !strings.HasSuffix(header, expectedSuffix) { + header, ok := strings.CutPrefix(header, expectedPrefix) + if !ok { + return "" + } + header, ok = strings.CutSuffix(header, expectedSuffix) + if !ok { return "" } - header = header[len(expectedPrefix) : len(header)-len(expectedSuffix)] // ”Recipients that process the value of a quoted-string MUST handle a quoted-pair // as if it were replaced by the octet following the backslash.”, so let’s do that… @@ -763,7 +753,7 @@ func (c *dockerClient) setupRequestAuth(req *http.Request, extraScope *authScope token = *t c.tokenCache.Store(cacheKey, token) } - registryToken = token.Token + registryToken = token.token } req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", registryToken)) return nil @@ -816,12 +806,7 @@ func (c *dockerClient) getBearerTokenOAuth2(ctx context.Context, challenge chall return nil, err } - tokenBlob, err := iolimits.ReadAtMost(res.Body, iolimits.MaxAuthTokenBodySize) - if err != nil { - return nil, err - } - - return newBearerTokenFromJSONBlob(tokenBlob) + return newBearerTokenFromHTTPResponseBody(res) } func (c *dockerClient) getBearerToken(ctx context.Context, challenge challenge, @@ -867,12 +852,50 @@ func (c *dockerClient) getBearerToken(ctx context.Context, challenge challenge, if err := httpResponseToError(res, "Requesting bearer token"); err != nil { return nil, err } - tokenBlob, err := iolimits.ReadAtMost(res.Body, iolimits.MaxAuthTokenBodySize) + + return newBearerTokenFromHTTPResponseBody(res) +} + +// newBearerTokenFromHTTPResponseBody parses a http.Response to obtain a bearerToken. +// The caller is still responsible for ensuring res.Body is closed. +func newBearerTokenFromHTTPResponseBody(res *http.Response) (*bearerToken, error) { + blob, err := iolimits.ReadAtMost(res.Body, iolimits.MaxAuthTokenBodySize) if err != nil { return nil, err } - return newBearerTokenFromJSONBlob(tokenBlob) + var token struct { + Token string `json:"token"` + AccessToken string `json:"access_token"` + ExpiresIn int `json:"expires_in"` + IssuedAt time.Time `json:"issued_at"` + expirationTime time.Time + } + if err := json.Unmarshal(blob, &token); err != nil { + const bodySampleLength = 50 + bodySample := blob + if len(bodySample) > bodySampleLength { + bodySample = bodySample[:bodySampleLength] + } + return nil, fmt.Errorf("decoding bearer token (last URL %q, body start %q): %w", res.Request.URL.Redacted(), string(bodySample), err) + } + + bt := &bearerToken{ + token: token.Token, + } + if bt.token == "" { + bt.token = token.AccessToken + } + + if token.ExpiresIn < minimumTokenLifetimeSeconds { + token.ExpiresIn = minimumTokenLifetimeSeconds + logrus.Debugf("Increasing token expiration to: %d seconds", token.ExpiresIn) + } + if token.IssuedAt.IsZero() { + token.IssuedAt = time.Now().UTC() + } + bt.expirationTime = token.IssuedAt.Add(time.Duration(token.ExpiresIn) * time.Second) + return bt, nil } // detectPropertiesHelper performs the work of detectProperties which executes @@ -952,6 +975,8 @@ func (c *dockerClient) detectProperties(ctx context.Context) error { return c.detectPropertiesError } +// fetchManifest fetches a manifest for (the repo of ref) + tagOrDigest. +// The caller is responsible for ensuring tagOrDigest uses the expected format. func (c *dockerClient) fetchManifest(ctx context.Context, ref dockerReference, tagOrDigest string) ([]byte, string, error) { path := fmt.Sprintf(manifestPath, reference.Path(ref.ref), tagOrDigest) headers := map[string][]string{ @@ -978,13 +1003,10 @@ func (c *dockerClient) fetchManifest(ctx context.Context, ref dockerReference, t // This function can return nil reader when no url is supported by this function. In this case, the caller // should fallback to fetch the non-external blob (i.e. pull from the registry). func (c *dockerClient) getExternalBlob(ctx context.Context, urls []string) (io.ReadCloser, int64, error) { - var ( - resp *http.Response - err error - ) if len(urls) == 0 { return nil, 0, errors.New("internal error: getExternalBlob called with no URLs") } + var remoteErrors []error for _, u := range urls { blobURL, err := url.Parse(u) if err != nil || (blobURL.Scheme != "http" && blobURL.Scheme != "https") { @@ -993,24 +1015,24 @@ func (c *dockerClient) getExternalBlob(ctx context.Context, urls []string) (io.R // NOTE: we must not authenticate on additional URLs as those // can be abused to leak credentials or tokens. Please // refer to CVE-2020-15157 for more information. - resp, err = c.makeRequestToResolvedURL(ctx, http.MethodGet, blobURL, nil, nil, -1, noAuth, nil) - if err == nil { - if resp.StatusCode != http.StatusOK { - err = fmt.Errorf("error fetching external blob from %q: %d (%s)", u, resp.StatusCode, http.StatusText(resp.StatusCode)) - logrus.Debug(err) - resp.Body.Close() - continue - } - break + resp, err := c.makeRequestToResolvedURL(ctx, http.MethodGet, blobURL, nil, nil, -1, noAuth, nil) + if err != nil { + remoteErrors = append(remoteErrors, err) + continue } + if resp.StatusCode != http.StatusOK { + err := fmt.Errorf("error fetching external blob from %q: %d (%s)", u, resp.StatusCode, http.StatusText(resp.StatusCode)) + remoteErrors = append(remoteErrors, err) + logrus.Debug(err) + resp.Body.Close() + continue + } + return resp.Body, getBlobSize(resp), nil } - if resp == nil && err == nil { + if remoteErrors == nil { return nil, 0, nil // fallback to non-external blob } - if err != nil { - return nil, 0, err - } - return resp.Body, getBlobSize(resp), nil + return nil, 0, fmt.Errorf("failed fetching external blob from all urls: %w", multierr.Format("", ", ", "", remoteErrors)) } func getBlobSize(resp *http.Response) int64 { @@ -1034,6 +1056,9 @@ func (c *dockerClient) getBlob(ctx context.Context, ref dockerReference, info ty } } + if err := info.Digest.Validate(); err != nil { // Make sure info.Digest.String() does not contain any unexpected characters + return nil, 0, err + } path := fmt.Sprintf(blobsPath, reference.Path(ref.ref), info.Digest.String()) logrus.Debugf("Downloading %s", path) res, err := c.makeRequest(ctx, http.MethodGet, path, nil, nil, v2Auth, nil) @@ -1084,6 +1109,11 @@ func isManifestUnknownError(err error) bool { if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && e.Message == "Not Found" { return true } + // Harbor v2.10.2 + if errors.As(err, &e) && e.ErrorCode() == errcode.ErrorCodeUnknown && strings.Contains(strings.ToLower(e.Message), "not found") { + return true + } + // opencontainers/distribution-spec does not require the errcode.Error payloads to be used, // but specifies that the HTTP status must be 404. var unexpected *unexpectedHTTPResponseError @@ -1097,7 +1127,10 @@ func isManifestUnknownError(err error) bool { // digest in ref. // It returns (nil, nil) if the manifest does not exist. func (c *dockerClient) getSigstoreAttachmentManifest(ctx context.Context, ref dockerReference, digest digest.Digest) (*manifest.OCI1, error) { - tag := sigstoreAttachmentTag(digest) + tag, err := sigstoreAttachmentTag(digest) + if err != nil { + return nil, err + } sigstoreRef, err := reference.WithTag(reference.TrimNamed(ref.ref), tag) if err != nil { return nil, err @@ -1130,6 +1163,9 @@ func (c *dockerClient) getSigstoreAttachmentManifest(ctx context.Context, ref do // getExtensionsSignatures returns signatures from the X-Registry-Supports-Signatures API extension, // using the original data structures. func (c *dockerClient) getExtensionsSignatures(ctx context.Context, ref dockerReference, manifestDigest digest.Digest) (*extensionSignatureList, error) { + if err := manifestDigest.Validate(); err != nil { // Make sure manifestDigest.String() does not contain any unexpected characters + return nil, err + } path := fmt.Sprintf(extensionsSignaturePath, reference.Path(ref.ref), manifestDigest) res, err := c.makeRequest(ctx, http.MethodGet, path, nil, nil, v2Auth, nil) if err != nil { @@ -1153,8 +1189,11 @@ func (c *dockerClient) getExtensionsSignatures(ctx context.Context, ref dockerRe } // sigstoreAttachmentTag returns a sigstore attachment tag for the specified digest. -func sigstoreAttachmentTag(d digest.Digest) string { - return strings.Replace(d.String(), ":", "-", 1) + ".sig" +func sigstoreAttachmentTag(d digest.Digest) (string, error) { + if err := d.Validate(); err != nil { // Make sure d.String() doesn’t contain any unexpected characters + return "", err + } + return strings.Replace(d.String(), ":", "-", 1) + ".sig", nil } // Close removes resources associated with an initialized dockerClient, if any. diff --git a/tools/vendor/github.com/containers/image/v5/docker/docker_image.go b/tools/vendor/github.com/containers/image/v5/docker/docker_image.go index 42bbfd95e..9741afc3f 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/docker_image.go +++ b/tools/vendor/github.com/containers/image/v5/docker/docker_image.go @@ -14,6 +14,7 @@ import ( "github.com/containers/image/v5/manifest" "github.com/containers/image/v5/types" "github.com/opencontainers/go-digest" + "github.com/sirupsen/logrus" ) // Image is a Docker-specific implementation of types.ImageCloser with a few extra methods @@ -88,7 +89,20 @@ func GetRepositoryTags(ctx context.Context, sys *types.SystemContext, ref types. if err = json.NewDecoder(res.Body).Decode(&tagsHolder); err != nil { return nil, err } - tags = append(tags, tagsHolder.Tags...) + for _, tag := range tagsHolder.Tags { + if _, err := reference.WithTag(dr.ref, tag); err != nil { // Ensure the tag does not contain unexpected values + // Per https://github.com/containers/skopeo/issues/2346 , unknown versions of JFrog Artifactory, + // contrary to the tag format specified in + // https://github.com/opencontainers/distribution-spec/blob/8a871c8234977df058f1a14e299fe0a673853da2/spec.md?plain=1#L160 , + // include digests in the list. + if _, err := digest.Parse(tag); err == nil { + logrus.Debugf("Ignoring invalid tag %q matching a digest format", tag) + continue + } + return nil, fmt.Errorf("registry returned invalid tag %q: %w", tag, err) + } + tags = append(tags, tag) + } link := res.Header.Get("Link") if link == "" { @@ -123,6 +137,9 @@ func GetDigest(ctx context.Context, sys *types.SystemContext, ref types.ImageRef if !ok { return "", errors.New("ref must be a dockerReference") } + if dr.isUnknownDigest { + return "", fmt.Errorf("docker: reference %q is for unknown digest case; cannot get digest", dr.StringWithinTransport()) + } tagOrDigest, err := dr.tagOrDigest() if err != nil { diff --git a/tools/vendor/github.com/containers/image/v5/docker/docker_image_dest.go b/tools/vendor/github.com/containers/image/v5/docker/docker_image_dest.go index 774068c27..ed3d4a2c0 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/docker_image_dest.go +++ b/tools/vendor/github.com/containers/image/v5/docker/docker_image_dest.go @@ -8,10 +8,12 @@ import ( "errors" "fmt" "io" + "maps" "net/http" "net/url" "os" "path/filepath" + "slices" "strings" "github.com/containers/image/v5/docker/reference" @@ -27,14 +29,13 @@ import ( "github.com/containers/image/v5/internal/uploadreader" "github.com/containers/image/v5/manifest" "github.com/containers/image/v5/pkg/blobinfocache/none" + compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" "github.com/docker/distribution/registry/api/errcode" v2 "github.com/docker/distribution/registry/api/v2" "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/sirupsen/logrus" - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" ) type dockerImageDestination struct { @@ -229,6 +230,9 @@ func (d *dockerImageDestination) PutBlobWithOptions(ctx context.Context, stream // If the destination does not contain the blob, or it is unknown, blobExists ordinarily returns (false, -1, nil); // it returns a non-nil error only on an unexpected failure. func (d *dockerImageDestination) blobExists(ctx context.Context, repo reference.Named, digest digest.Digest, extraScope *authScope) (bool, int64, error) { + if err := digest.Validate(); err != nil { // Make sure digest.String() does not contain any unexpected characters + return false, -1, err + } checkPath := fmt.Sprintf(blobsPath, reference.Path(repo), digest.String()) logrus.Debugf("Checking %s", checkPath) res, err := d.c.makeRequest(ctx, http.MethodHead, checkPath, nil, nil, v2Auth, extraScope) @@ -311,6 +315,13 @@ func (d *dockerImageDestination) tryReusingExactBlob(ctx context.Context, info t return false, private.ReusedBlob{}, nil } +func optionalCompressionName(algo *compressiontypes.Algorithm) string { + if algo != nil { + return algo.Name() + } + return "nil" +} + // TryReusingBlobWithOptions checks whether the transport already contains, or can efficiently reuse, a blob, and if so, applies it to the current destination // (e.g. if the blob is a filesystem layer, this signifies that the changes it describes need to be applied again when composing a filesystem tree). // info.Digest must not be empty. @@ -321,7 +332,8 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, return false, private.ReusedBlob{}, errors.New("Can not check for a blob with unknown digest") } - if impl.OriginalBlobMatchesRequiredCompression(options) { + originalCandidateKnownToBeMissing := false + if impl.OriginalCandidateMatchesTryReusingBlobOptions(options) { // First, check whether the blob happens to already exist at the destination. haveBlob, reusedInfo, err := d.tryReusingExactBlob(ctx, info, options.Cache) if err != nil { @@ -330,46 +342,36 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, if haveBlob { return true, reusedInfo, nil } + originalCandidateKnownToBeMissing = true } else { - requiredCompression := "nil" - if options.OriginalCompression != nil { - requiredCompression = options.OriginalCompression.Name() - } - logrus.Debugf("Ignoring exact blob match case due to compression mismatch ( %s vs %s )", options.RequiredCompression.Name(), requiredCompression) + logrus.Debugf("Ignoring exact blob match, compression %s does not match required %s or MIME types %#v", + optionalCompressionName(options.OriginalCompression), optionalCompressionName(options.RequiredCompression), options.PossibleManifestFormats) + // We can get here with a blob detected to be zstd when the user wants a zstd:chunked. + // In that case we keep originalCandiateKnownToBeMissing = false, so that if we find + // a BIC entry for this blob, we do use that entry and return a zstd:chunked entry + // with the BIC’s annotations. + // This is not quite correct, it only works if the BIC also contains an acceptable _location_. + // Ideally, we could look up just the compression algorithm/annotations for info.digest, + // and use it even if no location candidate exists and the original dandidate is present. } // Then try reusing blobs from other locations. - candidates := options.Cache.CandidateLocations2(d.ref.Transport(), bicTransportScope(d.ref), info.Digest, options.CanSubstitute) + candidates := options.Cache.CandidateLocations2(d.ref.Transport(), bicTransportScope(d.ref), info.Digest, blobinfocache.CandidateLocations2Options{ + CanSubstitute: options.CanSubstitute, + PossibleManifestFormats: options.PossibleManifestFormats, + RequiredCompression: options.RequiredCompression, + }) for _, candidate := range candidates { - var err error - compressionOperation, compressionAlgorithm, err := blobinfocache.OperationAndAlgorithmForCompressor(candidate.CompressorName) - if err != nil { - logrus.Debugf("OperationAndAlgorithmForCompressor Failed: %v", err) - continue - } var candidateRepo reference.Named if !candidate.UnknownLocation { + var err error candidateRepo, err = parseBICLocationReference(candidate.Location) if err != nil { logrus.Debugf("Error parsing BlobInfoCache location reference: %s", err) continue } - } - if !impl.BlobMatchesRequiredCompression(options, compressionAlgorithm) { - requiredCompression := "nil" - if compressionAlgorithm != nil { - requiredCompression = compressionAlgorithm.Name() - } - if !candidate.UnknownLocation { - logrus.Debugf("Ignoring candidate blob %s as reuse candidate due to compression mismatch ( %s vs %s ) in %s", candidate.Digest.String(), options.RequiredCompression.Name(), requiredCompression, candidateRepo.Name()) - } else { - logrus.Debugf("Ignoring candidate blob %s as reuse candidate due to compression mismatch ( %s vs %s ) with no location match, checking current repo", candidate.Digest.String(), options.RequiredCompression.Name(), requiredCompression) - } - continue - } - if !candidate.UnknownLocation { - if candidate.CompressorName != blobinfocache.Uncompressed { - logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s in destination repo %s", candidate.Digest.String(), candidate.CompressorName, candidateRepo.Name()) + if candidate.CompressionAlgorithm != nil { + logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s in destination repo %s", candidate.Digest.String(), candidate.CompressionAlgorithm.Name(), candidateRepo.Name()) } else { logrus.Debugf("Trying to reuse blob with cached digest %s in destination repo %s", candidate.Digest.String(), candidateRepo.Name()) } @@ -384,8 +386,8 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, continue } } else { - if candidate.CompressorName != blobinfocache.Uncompressed { - logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s with no location match, checking current repo", candidate.Digest.String(), candidate.CompressorName) + if candidate.CompressionAlgorithm != nil { + logrus.Debugf("Trying to reuse blob with cached digest %s compressed with %s with no location match, checking current repo", candidate.Digest.String(), candidate.CompressionAlgorithm.Name()) } else { logrus.Debugf("Trying to reuse blob with cached digest %s in destination repo with no location match, checking current repo", candidate.Digest.String()) } @@ -394,7 +396,8 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, // for it in the current repo. candidateRepo = reference.TrimNamed(d.ref.ref) } - if candidateRepo.Name() == d.ref.ref.Name() && candidate.Digest == info.Digest { + if originalCandidateKnownToBeMissing && + candidateRepo.Name() == d.ref.ref.Name() && candidate.Digest == info.Digest { logrus.Debug("... Already tried the primary destination") continue } @@ -434,10 +437,12 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, options.Cache.RecordKnownLocation(d.ref.Transport(), bicTransportScope(d.ref), candidate.Digest, newBICLocationReference(d.ref)) return true, private.ReusedBlob{ - Digest: candidate.Digest, - Size: size, - CompressionOperation: compressionOperation, - CompressionAlgorithm: compressionAlgorithm}, nil + Digest: candidate.Digest, + Size: size, + CompressionOperation: candidate.CompressionOperation, + CompressionAlgorithm: candidate.CompressionAlgorithm, + CompressionAnnotations: candidate.CompressionAnnotations, + }, nil } return false, private.ReusedBlob{}, nil @@ -452,12 +457,21 @@ func (d *dockerImageDestination) TryReusingBlobWithOptions(ctx context.Context, // but may accept a different manifest type, the returned error must be an ManifestTypeRejectedError. func (d *dockerImageDestination) PutManifest(ctx context.Context, m []byte, instanceDigest *digest.Digest) error { var refTail string - if instanceDigest != nil { + // If d.ref.isUnknownDigest=true, then we push without a tag, so get the + // digest that will be used + if d.ref.isUnknownDigest { + digest, err := manifest.Digest(m) + if err != nil { + return err + } + refTail = digest.String() + } else if instanceDigest != nil { // If the instanceDigest is provided, then use it as the refTail, because the reference, // whether it includes a tag or a digest, refers to the list as a whole, and not this // particular instance. refTail = instanceDigest.String() // Double-check that the manifest we've been given matches the digest we've been given. + // This also validates the format of instanceDigest. matches, err := manifest.MatchesDigest(m, *instanceDigest) if err != nil { return fmt.Errorf("digesting manifest in PutManifest: %w", err) @@ -624,11 +638,13 @@ func (d *dockerImageDestination) putSignaturesToLookaside(signatures []signature // NOTE: Keep this in sync with docs/signature-protocols.md! for i, signature := range signatures { - sigURL := lookasideStorageURL(d.c.signatureBase, manifestDigest, i) - err := d.putOneSignature(sigURL, signature) + sigURL, err := lookasideStorageURL(d.c.signatureBase, manifestDigest, i) if err != nil { return err } + if err := d.putOneSignature(sigURL, signature); err != nil { + return err + } } // Remove any other signatures, if present. // We stop at the first missing signature; if a previous deleting loop aborted @@ -636,7 +652,10 @@ func (d *dockerImageDestination) putSignaturesToLookaside(signatures []signature // is enough for dockerImageSource to stop looking for other signatures, so that // is sufficient. for i := len(signatures); ; i++ { - sigURL := lookasideStorageURL(d.c.signatureBase, manifestDigest, i) + sigURL, err := lookasideStorageURL(d.c.signatureBase, manifestDigest, i) + if err != nil { + return err + } missing, err := d.c.deleteOneSignature(sigURL) if err != nil { return err @@ -767,8 +786,12 @@ func (d *dockerImageDestination) putSignaturesToSigstoreAttachments(ctx context. if err != nil { return err } + attachmentTag, err := sigstoreAttachmentTag(manifestDigest) + if err != nil { + return err + } logrus.Debugf("Uploading sigstore attachment manifest") - return d.uploadManifest(ctx, manifestBlob, sigstoreAttachmentTag(manifestDigest)) + return d.uploadManifest(ctx, manifestBlob, attachmentTag) } func layerMatchesSigstoreSignature(layer imgspecv1.Descriptor, mimeType string, @@ -884,6 +907,7 @@ func (d *dockerImageDestination) putSignaturesToAPIExtension(ctx context.Context return err } + // manifestDigest is known to be valid because it was not rejected by getExtensionsSignatures above. path := fmt.Sprintf(extensionsSignaturePath, reference.Path(d.ref.ref), manifestDigest.String()) res, err := d.c.makeRequest(ctx, http.MethodPut, path, nil, bytes.NewReader(body), v2Auth, nil) if err != nil { diff --git a/tools/vendor/github.com/containers/image/v5/docker/docker_image_src.go b/tools/vendor/github.com/containers/image/v5/docker/docker_image_src.go index 231d5d212..c8f6ba305 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/docker_image_src.go +++ b/tools/vendor/github.com/containers/image/v5/docker/docker_image_src.go @@ -1,15 +1,19 @@ package docker import ( + "bytes" "context" + "encoding/json" "errors" "fmt" "io" + "math" "mime" "mime/multipart" "net/http" "net/url" "os" + "os/exec" "strings" "sync" @@ -38,8 +42,8 @@ type dockerImageSource struct { impl.DoesNotAffectLayerInfosForCopy stubs.ImplementsGetBlobAt - logicalRef dockerReference // The reference the user requested. - physicalRef dockerReference // The actual reference we are accessing (possibly a mirror) + logicalRef dockerReference // The reference the user requested. This must satisfy !isUnknownDigest + physicalRef dockerReference // The actual reference we are accessing (possibly a mirror). This must satisfy !isUnknownDigest c *dockerClient // State cachedManifest []byte // nil if not loaded yet @@ -48,7 +52,12 @@ type dockerImageSource struct { // newImageSource creates a new ImageSource for the specified image reference. // The caller must call .Close() on the returned ImageSource. +// The caller must ensure !ref.isUnknownDigest. func newImageSource(ctx context.Context, sys *types.SystemContext, ref dockerReference) (*dockerImageSource, error) { + if ref.isUnknownDigest { + return nil, fmt.Errorf("reading images from docker: reference %q without a tag or digest is not supported", ref.StringWithinTransport()) + } + registryConfig, err := loadRegistryConfiguration(sys) if err != nil { return nil, err @@ -121,7 +130,7 @@ func newImageSource(ctx context.Context, sys *types.SystemContext, ref dockerRef // The caller must call .Close() on the returned ImageSource. func newImageSourceAttempt(ctx context.Context, sys *types.SystemContext, logicalRef dockerReference, pullSource sysregistriesv2.PullSource, registryConfig *registryConfiguration) (*dockerImageSource, error) { - physicalRef, err := newReference(pullSource.Reference) + physicalRef, err := newReference(pullSource.Reference, false) if err != nil { return nil, err } @@ -156,6 +165,34 @@ func newImageSourceAttempt(ctx context.Context, sys *types.SystemContext, logica client.Close() return nil, err } + + if h, err := sysregistriesv2.AdditionalLayerStoreAuthHelper(endpointSys); err == nil && h != "" { + acf := map[string]struct { + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + IdentityToken string `json:"identityToken,omitempty"` + }{ + physicalRef.ref.String(): { + Username: client.auth.Username, + Password: client.auth.Password, + IdentityToken: client.auth.IdentityToken, + }, + } + acfD, err := json.Marshal(acf) + if err != nil { + logrus.Warnf("failed to marshal auth config: %v", err) + } else { + cmd := exec.Command(h) + cmd.Stdin = bytes.NewReader(acfD) + if err := cmd.Run(); err != nil { + var stderr string + if ee, ok := err.(*exec.ExitError); ok { + stderr = string(ee.Stderr) + } + logrus.Warnf("Failed to call additional-layer-store-auth-helper (stderr:%s): %v", stderr, err) + } + } + } return s, nil } @@ -189,6 +226,9 @@ func simplifyContentType(contentType string) string { // this never happens if the primary manifest is not a manifest list (e.g. if the source never returns manifest lists). func (s *dockerImageSource) GetManifest(ctx context.Context, instanceDigest *digest.Digest) ([]byte, string, error) { if instanceDigest != nil { + if err := instanceDigest.Validate(); err != nil { // Make sure instanceDigest.String() does not contain any unexpected characters + return nil, "", err + } return s.fetchManifest(ctx, instanceDigest.String()) } err := s.ensureManifestIsLoaded(ctx) @@ -198,6 +238,8 @@ func (s *dockerImageSource) GetManifest(ctx context.Context, instanceDigest *dig return s.cachedManifest, s.cachedManifestMIMEType, nil } +// fetchManifest fetches a manifest for tagOrDigest. +// The caller is responsible for ensuring tagOrDigest uses the expected format. func (s *dockerImageSource) fetchManifest(ctx context.Context, tagOrDigest string) ([]byte, string, error) { return s.c.fetchManifest(ctx, s.physicalRef, tagOrDigest) } @@ -250,9 +292,15 @@ func splitHTTP200ResponseToPartial(streams chan io.ReadCloser, errs chan error, } currentOffset += toSkip } + var reader io.Reader + if c.Length == math.MaxUint64 { + reader = body + } else { + reader = io.LimitReader(body, int64(c.Length)) + } s := signalCloseReader{ closed: make(chan struct{}), - stream: io.NopCloser(io.LimitReader(body, int64(c.Length))), + stream: io.NopCloser(reader), consumeStream: true, } streams <- s @@ -333,12 +381,24 @@ func parseMediaType(contentType string) (string, map[string]string, error) { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. +// If the Length for the last chunk is set to math.MaxUint64, then it +// fully fetches the remaining data from the offset to the end of the blob. func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []private.ImageSourceChunk) (chan io.ReadCloser, chan error, error) { headers := make(map[string][]string) rangeVals := make([]string, 0, len(chunks)) + lastFound := false for _, c := range chunks { - rangeVals = append(rangeVals, fmt.Sprintf("%d-%d", c.Offset, c.Offset+c.Length-1)) + if lastFound { + return nil, nil, fmt.Errorf("internal error: another chunk requested after an util-EOF chunk") + } + // If the Length is set to -1, then request anything after the specified offset. + if c.Length == math.MaxUint64 { + lastFound = true + rangeVals = append(rangeVals, fmt.Sprintf("%d-", c.Offset)) + } else { + rangeVals = append(rangeVals, fmt.Sprintf("%d-%d", c.Offset, c.Offset+c.Length-1)) + } } headers["Range"] = []string{fmt.Sprintf("bytes=%s", strings.Join(rangeVals, ","))} @@ -347,6 +407,9 @@ func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo, return nil, nil, fmt.Errorf("external URLs not supported with GetBlobAt") } + if err := info.Digest.Validate(); err != nil { // Make sure info.Digest.String() does not contain any unexpected characters + return nil, nil, err + } path := fmt.Sprintf(blobsPath, reference.Path(s.physicalRef.ref), info.Digest.String()) logrus.Debugf("Downloading %s", path) res, err := s.c.makeRequest(ctx, http.MethodGet, path, headers, nil, v2Auth, nil) @@ -457,7 +520,10 @@ func (s *dockerImageSource) getSignaturesFromLookaside(ctx context.Context, inst return nil, fmt.Errorf("server provided %d signatures, assuming that's unreasonable and a server error", maxLookasideSignatures) } - sigURL := lookasideStorageURL(s.c.signatureBase, manifestDigest, i) + sigURL, err := lookasideStorageURL(s.c.signatureBase, manifestDigest, i) + if err != nil { + return nil, err + } signature, missing, err := s.getOneSignature(ctx, sigURL) if err != nil { return nil, err @@ -591,6 +657,10 @@ func (s *dockerImageSource) getSignaturesFromSigstoreAttachments(ctx context.Con // deleteImage deletes the named image from the registry, if supported. func deleteImage(ctx context.Context, sys *types.SystemContext, ref dockerReference) error { + if ref.isUnknownDigest { + return fmt.Errorf("Docker reference without a tag or digest cannot be deleted") + } + registryConfig, err := loadRegistryConfiguration(sys) if err != nil { return err @@ -651,7 +721,10 @@ func deleteImage(ctx context.Context, sys *types.SystemContext, ref dockerRefere } for i := 0; ; i++ { - sigURL := lookasideStorageURL(c.signatureBase, manifestDigest, i) + sigURL, err := lookasideStorageURL(c.signatureBase, manifestDigest, i) + if err != nil { + return err + } missing, err := c.deleteOneSignature(sigURL) if err != nil { return err diff --git a/tools/vendor/github.com/containers/image/v5/docker/docker_transport.go b/tools/vendor/github.com/containers/image/v5/docker/docker_transport.go index 6ae849159..c10463a43 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/docker_transport.go +++ b/tools/vendor/github.com/containers/image/v5/docker/docker_transport.go @@ -12,6 +12,11 @@ import ( "github.com/containers/image/v5/types" ) +// UnknownDigestSuffix can be appended to a reference when the caller +// wants to push an image without a tag or digest. +// NewReferenceUnknownDigest() is called when this const is detected. +const UnknownDigestSuffix = "@@unknown-digest@@" + func init() { transports.Register(Transport) } @@ -43,31 +48,51 @@ func (t dockerTransport) ValidatePolicyConfigurationScope(scope string) error { // dockerReference is an ImageReference for Docker images. type dockerReference struct { - ref reference.Named // By construction we know that !reference.IsNameOnly(ref) + ref reference.Named // By construction we know that !reference.IsNameOnly(ref) unless isUnknownDigest=true + isUnknownDigest bool } // ParseReference converts a string, which should not start with the ImageTransport.Name prefix, into an Docker ImageReference. func ParseReference(refString string) (types.ImageReference, error) { - if !strings.HasPrefix(refString, "//") { + refString, ok := strings.CutPrefix(refString, "//") + if !ok { return nil, fmt.Errorf("docker: image reference %s does not start with //", refString) } - ref, err := reference.ParseNormalizedNamed(strings.TrimPrefix(refString, "//")) + refString, unknownDigest := strings.CutSuffix(refString, UnknownDigestSuffix) + ref, err := reference.ParseNormalizedNamed(refString) if err != nil { return nil, err } + + if unknownDigest { + if !reference.IsNameOnly(ref) { + return nil, fmt.Errorf("docker: image reference %q has unknown digest set but it contains either a tag or digest", ref.String()+UnknownDigestSuffix) + } + return NewReferenceUnknownDigest(ref) + } + ref = reference.TagNameOnly(ref) return NewReference(ref) } // NewReference returns a Docker reference for a named reference. The reference must satisfy !reference.IsNameOnly(). func NewReference(ref reference.Named) (types.ImageReference, error) { - return newReference(ref) + return newReference(ref, false) +} + +// NewReferenceUnknownDigest returns a Docker reference for a named reference, which can be used to write images without setting +// a tag on the registry. The reference must satisfy reference.IsNameOnly() +func NewReferenceUnknownDigest(ref reference.Named) (types.ImageReference, error) { + return newReference(ref, true) } // newReference returns a dockerReference for a named reference. -func newReference(ref reference.Named) (dockerReference, error) { - if reference.IsNameOnly(ref) { - return dockerReference{}, fmt.Errorf("Docker reference %s has neither a tag nor a digest", reference.FamiliarString(ref)) +func newReference(ref reference.Named, unknownDigest bool) (dockerReference, error) { + if reference.IsNameOnly(ref) && !unknownDigest { + return dockerReference{}, fmt.Errorf("Docker reference %s is not for an unknown digest case; tag or digest is needed", reference.FamiliarString(ref)) + } + if !reference.IsNameOnly(ref) && unknownDigest { + return dockerReference{}, fmt.Errorf("Docker reference %s is for an unknown digest case but reference has a tag or digest", reference.FamiliarString(ref)) } // A github.com/distribution/reference value can have a tag and a digest at the same time! // The docker/distribution API does not really support that (we can’t ask for an image with a specific @@ -81,7 +106,8 @@ func newReference(ref reference.Named) (dockerReference, error) { } return dockerReference{ - ref: ref, + ref: ref, + isUnknownDigest: unknownDigest, }, nil } @@ -95,7 +121,11 @@ func (ref dockerReference) Transport() types.ImageTransport { // e.g. default attribute values omitted by the user may be filled in the return value, or vice versa. // WARNING: Do not use the return value in the UI to describe an image, it does not contain the Transport().Name() prefix. func (ref dockerReference) StringWithinTransport() string { - return "//" + reference.FamiliarString(ref.ref) + famString := "//" + reference.FamiliarString(ref.ref) + if ref.isUnknownDigest { + return famString + UnknownDigestSuffix + } + return famString } // DockerReference returns a Docker reference associated with this reference @@ -113,6 +143,9 @@ func (ref dockerReference) DockerReference() reference.Named { // not required/guaranteed that it will be a valid input to Transport().ParseReference(). // Returns "" if configuration identities for these references are not supported. func (ref dockerReference) PolicyConfigurationIdentity() string { + if ref.isUnknownDigest { + return ref.ref.Name() + } res, err := policyconfiguration.DockerReferenceIdentity(ref.ref) if res == "" || err != nil { // Coverage: Should never happen, NewReference above should refuse values which could cause a failure. panic(fmt.Sprintf("Internal inconsistency: policyconfiguration.DockerReferenceIdentity returned %#v, %v", res, err)) @@ -126,7 +159,13 @@ func (ref dockerReference) PolicyConfigurationIdentity() string { // It is STRONGLY recommended for the first element, if any, to be a prefix of PolicyConfigurationIdentity(), // and each following element to be a prefix of the element preceding it. func (ref dockerReference) PolicyConfigurationNamespaces() []string { - return policyconfiguration.DockerReferenceNamespaces(ref.ref) + namespaces := policyconfiguration.DockerReferenceNamespaces(ref.ref) + if ref.isUnknownDigest { + if len(namespaces) != 0 && namespaces[0] == ref.ref.Name() { + namespaces = namespaces[1:] + } + } + return namespaces } // NewImage returns a types.ImageCloser for this reference, possibly specialized for this ImageTransport. @@ -163,6 +202,10 @@ func (ref dockerReference) tagOrDigest() (string, error) { if ref, ok := ref.ref.(reference.NamedTagged); ok { return ref.Tag(), nil } + + if ref.isUnknownDigest { + return "", fmt.Errorf("Docker reference %q is for an unknown digest case, has neither a digest nor a tag", reference.FamiliarString(ref.ref)) + } // This should not happen, NewReference above refuses reference.IsNameOnly values. return "", fmt.Errorf("Internal inconsistency: Reference %s unexpectedly has neither a digest nor a tag", reference.FamiliarString(ref.ref)) } diff --git a/tools/vendor/github.com/containers/image/v5/docker/registries_d.go b/tools/vendor/github.com/containers/image/v5/docker/registries_d.go index c7b884ab3..3619c3bae 100644 --- a/tools/vendor/github.com/containers/image/v5/docker/registries_d.go +++ b/tools/vendor/github.com/containers/image/v5/docker/registries_d.go @@ -12,6 +12,7 @@ import ( "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/rootless" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/opencontainers/go-digest" "github.com/sirupsen/logrus" @@ -93,7 +94,7 @@ func registriesDirPathWithHomeDir(sys *types.SystemContext, homeDir string) stri return sys.RegistriesDirPath } userRegistriesDirPath := filepath.Join(homeDir, userRegistriesDir) - if _, err := os.Stat(userRegistriesDirPath); err == nil { + if err := fileutils.Exists(userRegistriesDirPath); err == nil { return userRegistriesDirPath } if sys != nil && sys.RootForImplicitAbsolutePaths != "" { @@ -139,7 +140,7 @@ func loadAndMergeConfig(dirPath string) (*registryConfiguration, error) { if config.DefaultDocker != nil { if mergedConfig.DefaultDocker != nil { - return nil, fmt.Errorf(`Error parsing signature storage configuration: "default-docker" defined both in "%s" and "%s"`, + return nil, fmt.Errorf(`Error parsing signature storage configuration: "default-docker" defined both in %q and %q`, dockerDefaultMergedFrom, configPath) } mergedConfig.DefaultDocker = config.DefaultDocker @@ -148,7 +149,7 @@ func loadAndMergeConfig(dirPath string) (*registryConfiguration, error) { for nsName, nsConfig := range config.Docker { // includes config.Docker == nil if _, ok := mergedConfig.Docker[nsName]; ok { - return nil, fmt.Errorf(`Error parsing signature storage configuration: "docker" namespace "%s" defined both in "%s" and "%s"`, + return nil, fmt.Errorf(`Error parsing signature storage configuration: "docker" namespace %q defined both in %q and %q`, nsName, nsMergedFrom[nsName], configPath) } mergedConfig.Docker[nsName] = nsConfig @@ -286,8 +287,11 @@ func (ns registryNamespace) signatureTopLevel(write bool) string { // lookasideStorageURL returns an URL usable for accessing signature index in base with known manifestDigest. // base is not nil from the caller // NOTE: Keep this in sync with docs/signature-protocols.md! -func lookasideStorageURL(base lookasideStorageBase, manifestDigest digest.Digest, index int) *url.URL { +func lookasideStorageURL(base lookasideStorageBase, manifestDigest digest.Digest, index int) (*url.URL, error) { + if err := manifestDigest.Validate(); err != nil { // digest.Digest.Encoded() panics on failure, and could possibly result in a path with ../, so validate explicitly. + return nil, err + } sigURL := *base - sigURL.Path = fmt.Sprintf("%s@%s=%s/signature-%d", sigURL.Path, manifestDigest.Algorithm(), manifestDigest.Hex(), index+1) - return &sigURL + sigURL.Path = fmt.Sprintf("%s@%s=%s/signature-%d", sigURL.Path, manifestDigest.Algorithm(), manifestDigest.Encoded(), index+1) + return &sigURL, nil } diff --git a/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go b/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go index 2767c3950..f31ee3124 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go +++ b/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/blobinfocache.go @@ -1,8 +1,6 @@ package blobinfocache import ( - "github.com/containers/image/v5/pkg/compression" - compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" digest "github.com/opencontainers/go-digest" ) @@ -29,10 +27,17 @@ func (bic *v1OnlyBlobInfoCache) Open() { func (bic *v1OnlyBlobInfoCache) Close() { } -func (bic *v1OnlyBlobInfoCache) RecordDigestCompressorName(anyDigest digest.Digest, compressorName string) { +func (bic *v1OnlyBlobInfoCache) UncompressedDigestForTOC(tocDigest digest.Digest) digest.Digest { + return "" } -func (bic *v1OnlyBlobInfoCache) CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, canSubstitute bool) []BICReplacementCandidate2 { +func (bic *v1OnlyBlobInfoCache) RecordTOCUncompressedPair(tocDigest digest.Digest, uncompressed digest.Digest) { +} + +func (bic *v1OnlyBlobInfoCache) RecordDigestCompressorData(anyDigest digest.Digest, data DigestCompressorData) { +} + +func (bic *v1OnlyBlobInfoCache) CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, options CandidateLocations2Options) []BICReplacementCandidate2 { return nil } @@ -48,23 +53,3 @@ func CandidateLocationsFromV2(v2candidates []BICReplacementCandidate2) []types.B } return candidates } - -// OperationAndAlgorithmForCompressor returns CompressionOperation and CompressionAlgorithm -// values suitable for inclusion in a types.BlobInfo structure, based on the name of the -// compression algorithm, or Uncompressed, or UnknownCompression. This is typically used by -// TryReusingBlob() implementations to set values in the BlobInfo structure that they return -// upon success. -func OperationAndAlgorithmForCompressor(compressorName string) (types.LayerCompression, *compressiontypes.Algorithm, error) { - switch compressorName { - case Uncompressed: - return types.Decompress, nil, nil - case UnknownCompression: - return types.PreserveOriginal, nil, nil - default: - algo, err := compression.AlgorithmByName(compressorName) - if err == nil { - return types.Compress, &algo, nil - } - return types.PreserveOriginal, nil, err - } -} diff --git a/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go b/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go index 429d68263..acf82ee63 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go +++ b/tools/vendor/github.com/containers/image/v5/internal/blobinfocache/types.go @@ -1,6 +1,7 @@ package blobinfocache import ( + compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" digest "github.com/opencontainers/go-digest" ) @@ -25,29 +26,56 @@ type BlobInfoCache2 interface { // Close destroys state created by Open(). Close() - // RecordDigestCompressorName records a compressor for the blob with the specified digest, - // or Uncompressed or UnknownCompression. - // WARNING: Only call this with LOCALLY VERIFIED data; don’t record a compressor for a - // digest just because some remote author claims so (e.g. because a manifest says so); + // UncompressedDigestForTOC returns an uncompressed digest corresponding to anyDigest. + // Returns "" if the uncompressed digest is unknown. + UncompressedDigestForTOC(tocDigest digest.Digest) digest.Digest + // RecordTOCUncompressedPair records that the tocDigest corresponds to uncompressed. + // WARNING: Only call this for LOCALLY VERIFIED data; don’t record a digest pair just because some remote author claims so (e.g. + // because a manifest/config pair exists); otherwise the cache could be poisoned and allow substituting unexpected blobs. + // (Eventually, the DiffIDs in image config could detect the substitution, but that may be too late, and not all image formats contain that data.) + RecordTOCUncompressedPair(tocDigest digest.Digest, uncompressed digest.Digest) + + // RecordDigestCompressorData records data for the blob with the specified digest. + // WARNING: Only call this with LOCALLY VERIFIED data: + // - don’t record a compressor for a digest just because some remote author claims so + // (e.g. because a manifest says so); + // - don’t record the non-base variant or annotations if we are not _sure_ that the base variant + // and the blob’s digest match the non-base variant’s annotations (e.g. because we saw them + // in a manifest) // otherwise the cache could be poisoned and cause us to make incorrect edits to type // information in a manifest. - RecordDigestCompressorName(anyDigest digest.Digest, compressorName string) + RecordDigestCompressorData(anyDigest digest.Digest, data DigestCompressorData) // CandidateLocations2 returns a prioritized, limited, number of blobs and their locations (if known) // that could possibly be reused within the specified (transport scope) (if they still // exist, which is not guaranteed). - // - // If !canSubstitute, the returned cadidates will match the submitted digest exactly; if - // canSubstitute, data from previous RecordDigestUncompressedPair calls is used to also look + CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, options CandidateLocations2Options) []BICReplacementCandidate2 +} + +// DigestCompressorData is information known about how a blob is compressed. +// (This is worded generically, but basically targeted at the zstd / zstd:chunked situation.) +type DigestCompressorData struct { + BaseVariantCompressor string // A compressor’s base variant name, or Uncompressed or UnknownCompression. + // The following fields are only valid if the base variant is neither Uncompressed nor UnknownCompression: + SpecificVariantCompressor string // A non-base variant compressor (or UnknownCompression if the true format is just the base variant) + SpecificVariantAnnotations map[string]string // Annotations required to benefit from the base variant. +} + +// CandidateLocations2Options are used in CandidateLocations2. +type CandidateLocations2Options struct { + // If !CanSubstitute, the returned candidates will match the submitted digest exactly; if + // CanSubstitute, data from previous RecordDigestUncompressedPair calls is used to also look // up variants of the blob which have the same uncompressed digest. - // - // The CompressorName fields in returned data must never be UnknownCompression. - CandidateLocations2(transport types.ImageTransport, scope types.BICTransportScope, digest digest.Digest, canSubstitute bool) []BICReplacementCandidate2 + CanSubstitute bool + PossibleManifestFormats []string // If set, a set of possible manifest formats; at least one should support the reused layer + RequiredCompression *compressiontypes.Algorithm // If set, only reuse layers with a matching algorithm } // BICReplacementCandidate2 is an item returned by BlobInfoCache2.CandidateLocations2. type BICReplacementCandidate2 struct { - Digest digest.Digest - CompressorName string // either the Name() of a known pkg/compression.Algorithm, or Uncompressed or UnknownCompression - UnknownLocation bool // is true when `Location` for this blob is not set - Location types.BICLocationReference // not set if UnknownLocation is set to `true` + Digest digest.Digest + CompressionOperation types.LayerCompression // Either types.Decompress for uncompressed, or types.Compress for compressed + CompressionAlgorithm *compressiontypes.Algorithm // An algorithm when the candidate is compressed, or nil when it is uncompressed + CompressionAnnotations map[string]string // If necessary, annotations necessary to use CompressionAlgorithm + UnknownLocation bool // is true when `Location` for this blob is not set + Location types.BICLocationReference // not set if UnknownLocation is set to `true` } diff --git a/tools/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go b/tools/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go index c3234c377..01219e391 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go +++ b/tools/vendor/github.com/containers/image/v5/internal/image/docker_schema2.go @@ -366,7 +366,7 @@ func v1IDFromBlobDigestAndComponents(blobDigest digest.Digest, others ...string) if err := blobDigest.Validate(); err != nil { return "", err } - parts := append([]string{blobDigest.Hex()}, others...) + parts := append([]string{blobDigest.Encoded()}, others...) v1IDHash := sha256.Sum256([]byte(strings.Join(parts, " "))) return hex.EncodeToString(v1IDHash[:]), nil } diff --git a/tools/vendor/github.com/containers/image/v5/internal/image/manifest.go b/tools/vendor/github.com/containers/image/v5/internal/image/manifest.go index 75e472aa7..ed57e08dd 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/image/manifest.go +++ b/tools/vendor/github.com/containers/image/v5/internal/image/manifest.go @@ -76,7 +76,7 @@ func manifestInstanceFromBlob(ctx context.Context, sys *types.SystemContext, src case imgspecv1.MediaTypeImageIndex: return manifestOCI1FromImageIndex(ctx, sys, src, manblob) default: // Note that this may not be reachable, manifest.NormalizedMIMEType has a default for unknown values. - return nil, fmt.Errorf("Unimplemented manifest MIME type %s", mt) + return nil, fmt.Errorf("Unimplemented manifest MIME type %q", mt) } } diff --git a/tools/vendor/github.com/containers/image/v5/internal/image/oci.go b/tools/vendor/github.com/containers/image/v5/internal/image/oci.go index df0e8e417..aaef95ff3 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/image/oci.go +++ b/tools/vendor/github.com/containers/image/v5/internal/image/oci.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "slices" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/iolimits" @@ -15,7 +16,6 @@ import ( ociencspec "github.com/containers/ocicrypt/spec" "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) type manifestOCI1 struct { diff --git a/tools/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go b/tools/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go index 5d28b3e73..9b42cfbec 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go +++ b/tools/vendor/github.com/containers/image/v5/internal/imagedestination/impl/helpers.go @@ -1,25 +1,15 @@ package impl import ( + "github.com/containers/image/v5/internal/manifest" "github.com/containers/image/v5/internal/private" - compression "github.com/containers/image/v5/pkg/compression/types" ) -// BlobMatchesRequiredCompression validates if compression is required by the caller while selecting a blob, if it is required -// then function performs a match against the compression requested by the caller and compression of existing blob -// (which can be nil to represent uncompressed or unknown) -func BlobMatchesRequiredCompression(options private.TryReusingBlobOptions, candidateCompression *compression.Algorithm) bool { - if options.RequiredCompression == nil { - return true // no requirement imposed - } - if options.RequiredCompression.Name() == compression.ZstdChunkedAlgorithmName { - // HACK: Never match when the caller asks for zstd:chunked, because we don’t record the annotations required to use the chunked blobs. - // The caller must re-compress to build those annotations. - return false - } - return candidateCompression != nil && (options.RequiredCompression.Name() == candidateCompression.Name()) -} - -func OriginalBlobMatchesRequiredCompression(opts private.TryReusingBlobOptions) bool { - return BlobMatchesRequiredCompression(opts, opts.OriginalCompression) +// OriginalCandidateMatchesTryReusingBlobOptions returns true if the original blob passed to TryReusingBlobWithOptions +// is acceptable based on opts. +func OriginalCandidateMatchesTryReusingBlobOptions(opts private.TryReusingBlobOptions) bool { + return manifest.CandidateCompressionMatchesReuseConditions(manifest.ReuseConditions{ + PossibleManifestFormats: opts.PossibleManifestFormats, + RequiredCompression: opts.RequiredCompression, + }, opts.OriginalCompression) } diff --git a/tools/vendor/github.com/containers/image/v5/internal/imagedestination/stubs/put_blob_partial.go b/tools/vendor/github.com/containers/image/v5/internal/imagedestination/stubs/put_blob_partial.go index 0dc6bd5af..bbb53c198 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/imagedestination/stubs/put_blob_partial.go +++ b/tools/vendor/github.com/containers/image/v5/internal/imagedestination/stubs/put_blob_partial.go @@ -4,7 +4,6 @@ import ( "context" "fmt" - "github.com/containers/image/v5/internal/blobinfocache" "github.com/containers/image/v5/internal/private" "github.com/containers/image/v5/types" ) @@ -39,7 +38,7 @@ func (stub NoPutBlobPartialInitialize) SupportsPutBlobPartial() bool { // It is available only if SupportsPutBlobPartial(). // Even if SupportsPutBlobPartial() returns true, the call can fail, in which case the caller // should fall back to PutBlobWithOptions. -func (stub NoPutBlobPartialInitialize) PutBlobPartial(ctx context.Context, chunkAccessor private.BlobChunkAccessor, srcInfo types.BlobInfo, cache blobinfocache.BlobInfoCache2) (private.UploadedBlob, error) { +func (stub NoPutBlobPartialInitialize) PutBlobPartial(ctx context.Context, chunkAccessor private.BlobChunkAccessor, srcInfo types.BlobInfo, options private.PutBlobPartialOptions) (private.UploadedBlob, error) { return private.UploadedBlob{}, fmt.Errorf("internal error: PutBlobPartial is not supported by the %q transport", stub.transportName) } diff --git a/tools/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go b/tools/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go index 15aee6d42..286ae524b 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go +++ b/tools/vendor/github.com/containers/image/v5/internal/imagesource/stubs/get_blob_at.go @@ -39,6 +39,8 @@ func (stub NoGetBlobAtInitialize) SupportsGetBlobAt() bool { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. +// If the Length for the last chunk is set to math.MaxUint64, then it +// fully fetches the remaining data from the offset to the end of the blob. func (stub NoGetBlobAtInitialize) GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []private.ImageSourceChunk) (chan io.ReadCloser, chan error, error) { return nil, nil, fmt.Errorf("internal error: GetBlobAt is not supported by the %q transport", stub.transportName) } diff --git a/tools/vendor/github.com/containers/image/v5/internal/imagesource/wrapper.go b/tools/vendor/github.com/containers/image/v5/internal/imagesource/wrapper.go index 886b4e833..f0d1d042b 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/imagesource/wrapper.go +++ b/tools/vendor/github.com/containers/image/v5/internal/imagesource/wrapper.go @@ -27,7 +27,7 @@ type wrapped struct { // // NOTE: The returned API MUST NOT be a public interface (it can be either just a struct // with public methods, or perhaps a private interface), so that we can add methods -// without breaking any external implementors of a public interface. +// without breaking any external implementers of a public interface. func FromPublic(src types.ImageSource) private.ImageSource { if src2, ok := src.(private.ImageSource); ok { return src2 diff --git a/tools/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go b/tools/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go index 7ce5bb069..f847fa9cc 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go +++ b/tools/vendor/github.com/containers/image/v5/internal/manifest/docker_schema2_list.go @@ -3,13 +3,13 @@ package manifest import ( "encoding/json" "fmt" + "slices" platform "github.com/containers/image/v5/internal/pkg/platform" compression "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) // Schema2PlatformSpec describes the platform which a particular manifest is @@ -164,7 +164,7 @@ func (list *Schema2ListPublic) ChooseInstance(ctx *types.SystemContext) (digest. } } } - return "", fmt.Errorf("no image found in manifest list for architecture %s, variant %q, OS %s", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) + return "", fmt.Errorf("no image found in manifest list for architecture %q, variant %q, OS %q", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) } // Serialize returns the list in a blob format. diff --git a/tools/vendor/github.com/containers/image/v5/internal/manifest/list.go b/tools/vendor/github.com/containers/image/v5/internal/manifest/list.go index 189f1a718..1c614d124 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/manifest/list.go +++ b/tools/vendor/github.com/containers/image/v5/internal/manifest/list.go @@ -73,6 +73,7 @@ type ListUpdate struct { Platform *imgspecv1.Platform Annotations map[string]string CompressionAlgorithmNames []string + ArtifactType string } } @@ -101,6 +102,7 @@ type ListEdit struct { AddDigest digest.Digest AddSize int64 AddMediaType string + AddArtifactType string AddPlatform *imgspecv1.Platform AddAnnotations map[string]string AddCompressionAlgorithms []compression.Algorithm @@ -127,5 +129,5 @@ func ListFromBlob(manifest []byte, manifestMIMEType string) (List, error) { case DockerV2Schema1MediaType, DockerV2Schema1SignedMediaType, imgspecv1.MediaTypeImageManifest, DockerV2Schema2MediaType: return nil, fmt.Errorf("Treating single images as manifest lists is not implemented") } - return nil, fmt.Errorf("Unimplemented manifest list MIME type %s (normalized as %s)", manifestMIMEType, normalized) + return nil, fmt.Errorf("Unimplemented manifest list MIME type %q (normalized as %q)", manifestMIMEType, normalized) } diff --git a/tools/vendor/github.com/containers/image/v5/internal/manifest/manifest.go b/tools/vendor/github.com/containers/image/v5/internal/manifest/manifest.go index 1dbcc1418..3fb52104a 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/manifest/manifest.go +++ b/tools/vendor/github.com/containers/image/v5/internal/manifest/manifest.go @@ -2,7 +2,9 @@ package manifest import ( "encoding/json" + "slices" + compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/libtrust" digest "github.com/opencontainers/go-digest" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" @@ -14,7 +16,7 @@ import ( const ( // DockerV2Schema1MediaType MIME type represents Docker manifest schema 1 DockerV2Schema1MediaType = "application/vnd.docker.distribution.manifest.v1+json" - // DockerV2Schema1MediaType MIME type represents Docker manifest schema 1 with a JWS signature + // DockerV2Schema1SignedMediaType MIME type represents Docker manifest schema 1 with a JWS signature DockerV2Schema1SignedMediaType = "application/vnd.docker.distribution.manifest.v1+prettyjws" // DockerV2Schema2MediaType MIME type represents Docker manifest schema 2 DockerV2Schema2MediaType = "application/vnd.docker.distribution.manifest.v2+json" @@ -165,3 +167,60 @@ func NormalizedMIMEType(input string) string { return DockerV2Schema1SignedMediaType } } + +// CompressionAlgorithmIsUniversallySupported returns true if MIMETypeSupportsCompressionAlgorithm(mimeType, algo) returns true for all mimeType values. +func CompressionAlgorithmIsUniversallySupported(algo compressiontypes.Algorithm) bool { + // Compare the discussion about BaseVariantName in MIMETypeSupportsCompressionAlgorithm(). + switch algo.Name() { + case compressiontypes.GzipAlgorithmName: + return true + default: + return false + } +} + +// MIMETypeSupportsCompressionAlgorithm returns true if mimeType can represent algo. +func MIMETypeSupportsCompressionAlgorithm(mimeType string, algo compressiontypes.Algorithm) bool { + if CompressionAlgorithmIsUniversallySupported(algo) { + return true + } + // This does not use BaseVariantName: Plausibly a manifest format might support zstd but not have annotation fields. + // The logic might have to be more complex (and more ad-hoc) if more manifest formats, with more capabilities, emerge. + switch algo.Name() { + case compressiontypes.ZstdAlgorithmName, compressiontypes.ZstdChunkedAlgorithmName: + return mimeType == imgspecv1.MediaTypeImageManifest + default: // Includes Bzip2AlgorithmName and XzAlgorithmName, which are defined names but are not supported anywhere + return false + } +} + +// ReuseConditions are an input to CandidateCompressionMatchesReuseConditions; +// it is a struct to allow longer and better-documented field names. +type ReuseConditions struct { + PossibleManifestFormats []string // If set, a set of possible manifest formats; at least one should support the reused layer + RequiredCompression *compressiontypes.Algorithm // If set, only reuse layers with a matching algorithm +} + +// CandidateCompressionMatchesReuseConditions returns true if a layer with candidateCompression +// (which can be nil to represent uncompressed or unknown) matches reuseConditions. +func CandidateCompressionMatchesReuseConditions(c ReuseConditions, candidateCompression *compressiontypes.Algorithm) bool { + if c.RequiredCompression != nil { + if candidateCompression == nil || + (c.RequiredCompression.Name() != candidateCompression.Name() && c.RequiredCompression.Name() != candidateCompression.BaseVariantName()) { + return false + } + } + + // For candidateCompression == nil, we can’t tell the difference between “uncompressed” and “unknown”; + // and “uncompressed” is acceptable in all known formats (well, it seems to work in practice for schema1), + // so don’t impose any restrictions if candidateCompression == nil + if c.PossibleManifestFormats != nil && candidateCompression != nil { + if !slices.ContainsFunc(c.PossibleManifestFormats, func(mt string) bool { + return MIMETypeSupportsCompressionAlgorithm(mt, *candidateCompression) + }) { + return false + } + } + + return true +} diff --git a/tools/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go b/tools/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go index d8d06513b..fe78efaeb 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go +++ b/tools/vendor/github.com/containers/image/v5/internal/manifest/oci_index.go @@ -1,10 +1,13 @@ package manifest import ( + "bytes" "encoding/json" "fmt" + "maps" "math" "runtime" + "slices" platform "github.com/containers/image/v5/internal/pkg/platform" compression "github.com/containers/image/v5/pkg/compression/types" @@ -12,8 +15,6 @@ import ( "github.com/opencontainers/go-digest" imgspec "github.com/opencontainers/image-spec/specs-go" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" ) const ( @@ -61,6 +62,7 @@ func (index *OCI1IndexPublic) Instance(instanceDigest digest.Digest) (ListUpdate ret.ReadOnly.Platform = manifest.Platform ret.ReadOnly.Annotations = manifest.Annotations ret.ReadOnly.CompressionAlgorithmNames = annotationsToCompressionAlgorithmNames(manifest.Annotations) + ret.ReadOnly.ArtifactType = manifest.ArtifactType return ret, nil } } @@ -102,7 +104,7 @@ func addCompressionAnnotations(compressionAlgorithms []compression.Algorithm, an *annotationsMap = map[string]string{} } for _, algo := range compressionAlgorithms { - switch algo.Name() { + switch algo.BaseVariantName() { case compression.ZstdAlgorithmName: (*annotationsMap)[OCI1InstanceAnnotationCompressionZSTD] = OCI1InstanceAnnotationCompressionZSTDValue default: @@ -157,11 +159,13 @@ func (index *OCI1IndexPublic) editInstances(editInstances []ListEdit) error { } addCompressionAnnotations(editInstance.AddCompressionAlgorithms, &annotations) addedEntries = append(addedEntries, imgspecv1.Descriptor{ - MediaType: editInstance.AddMediaType, - Size: editInstance.AddSize, - Digest: editInstance.AddDigest, - Platform: editInstance.AddPlatform, - Annotations: annotations}) + MediaType: editInstance.AddMediaType, + ArtifactType: editInstance.AddArtifactType, + Size: editInstance.AddSize, + Digest: editInstance.AddDigest, + Platform: editInstance.AddPlatform, + Annotations: annotations, + }) default: return fmt.Errorf("internal error: invalid operation: %d", editInstance.ListOperation) } @@ -257,7 +261,7 @@ func (index *OCI1IndexPublic) chooseInstance(ctx *types.SystemContext, preferGzi if bestMatch != nil { return bestMatch.digest, nil } - return "", fmt.Errorf("no image found in image index for architecture %s, variant %q, OS %s", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) + return "", fmt.Errorf("no image found in image index for architecture %q, variant %q, OS %q", wantedPlatforms[0].Architecture, wantedPlatforms[0].Variant, wantedPlatforms[0].OS) } func (index *OCI1Index) ChooseInstanceByCompression(ctx *types.SystemContext, preferGzip types.OptionalBool) (digest.Digest, error) { @@ -293,28 +297,51 @@ func OCI1IndexPublicFromComponents(components []imgspecv1.Descriptor, annotation }, } for i, component := range components { - var platform *imgspecv1.Platform - if component.Platform != nil { - platformCopy := ociPlatformClone(*component.Platform) - platform = &platformCopy - } - m := imgspecv1.Descriptor{ - MediaType: component.MediaType, - Size: component.Size, - Digest: component.Digest, - URLs: slices.Clone(component.URLs), - Annotations: maps.Clone(component.Annotations), - Platform: platform, - } - index.Manifests[i] = m + index.Manifests[i] = oci1DescriptorClone(component) } return &index } +func oci1DescriptorClone(d imgspecv1.Descriptor) imgspecv1.Descriptor { + var platform *imgspecv1.Platform + if d.Platform != nil { + platformCopy := ociPlatformClone(*d.Platform) + platform = &platformCopy + } + return imgspecv1.Descriptor{ + MediaType: d.MediaType, + Digest: d.Digest, + Size: d.Size, + URLs: slices.Clone(d.URLs), + Annotations: maps.Clone(d.Annotations), + Data: bytes.Clone(d.Data), + Platform: platform, + ArtifactType: d.ArtifactType, + } +} + // OCI1IndexPublicClone creates a deep copy of the passed-in index. // This is publicly visible as c/image/manifest.OCI1IndexClone. func OCI1IndexPublicClone(index *OCI1IndexPublic) *OCI1IndexPublic { - return OCI1IndexPublicFromComponents(index.Manifests, index.Annotations) + var subject *imgspecv1.Descriptor + if index.Subject != nil { + s := oci1DescriptorClone(*index.Subject) + subject = &s + } + manifests := make([]imgspecv1.Descriptor, len(index.Manifests)) + for i, m := range index.Manifests { + manifests[i] = oci1DescriptorClone(m) + } + return &OCI1IndexPublic{ + Index: imgspecv1.Index{ + Versioned: index.Versioned, + MediaType: index.MediaType, + ArtifactType: index.ArtifactType, + Manifests: manifests, + Subject: subject, + Annotations: maps.Clone(index.Annotations), + }, + } } // ToOCI1Index returns the index encoded as an OCI1 index. diff --git a/tools/vendor/github.com/containers/image/v5/internal/multierr/multierr.go b/tools/vendor/github.com/containers/image/v5/internal/multierr/multierr.go new file mode 100644 index 000000000..1341925c1 --- /dev/null +++ b/tools/vendor/github.com/containers/image/v5/internal/multierr/multierr.go @@ -0,0 +1,34 @@ +package multierr + +import ( + "fmt" + "strings" +) + +// Format creates an error value from the input array (which should not be empty) +// If the input contains a single error value, it is returned as is. +// If there are multiple, they are formatted as a multi-error (with Unwrap() []error) with the provided initial, separator, and ending strings. +// +// Typical usage: +// +// var errs []error +// // … +// errs = append(errs, …) +// // … +// if errs != nil { return multierr.Format("Failures doing $FOO", "\n* ", "", errs)} +func Format(first, middle, last string, errs []error) error { + switch len(errs) { + case 0: + return fmt.Errorf("internal error: multierr.Format called with 0 errors") + case 1: + return errs[0] + default: + // We have to do this — and this function only really exists — because fmt.Errorf(format, errs...) is invalid: + // []error is not a valid parameter to a function expecting []any + anyErrs := make([]any, 0, len(errs)) + for _, e := range errs { + anyErrs = append(anyErrs, e) + } + return fmt.Errorf(first+"%w"+strings.Repeat(middle+"%w", len(errs)-1)+last, anyErrs...) + } +} diff --git a/tools/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go b/tools/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go index 3ba0e4084..afdce1d3d 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go +++ b/tools/vendor/github.com/containers/image/v5/internal/pkg/platform/platform_matcher.go @@ -21,11 +21,12 @@ import ( "fmt" "os" "runtime" + "slices" "strings" "github.com/containers/image/v5/types" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" + "github.com/sirupsen/logrus" ) // For Linux, the kernel has already detected the ABI, ISA and Features. @@ -63,8 +64,8 @@ func getCPUInfo(pattern string) (info string, err error) { return "", fmt.Errorf("getCPUInfo for pattern: %s not found", pattern) } -func getCPUVariantWindows(arch string) string { - // Windows only supports v7 for ARM32 and v8 for ARM64 and so we can use +func getCPUVariantDarwinWindows(arch string) string { + // Darwin and Windows only support v7 for ARM32 and v8 for ARM64 and so we can use // runtime.GOARCH to determine the variants var variant string switch arch { @@ -82,15 +83,40 @@ func getCPUVariantWindows(arch string) string { func getCPUVariantArm() string { variant, err := getCPUInfo("Cpu architecture") if err != nil { + logrus.Errorf("Couldn't get cpu architecture: %v", err) return "" } - // TODO handle RPi Zero mismatch (https://github.com/moby/moby/pull/36121#issuecomment-398328286) switch strings.ToLower(variant) { case "8", "aarch64": variant = "v8" - case "7", "7m", "?(12)", "?(13)", "?(14)", "?(15)", "?(16)", "?(17)": + case "7m", "?(12)", "?(13)", "?(14)", "?(15)", "?(16)", "?(17)": variant = "v7" + case "7": + // handle RPi Zero variant mismatch due to wrong variant from kernel + // https://github.com/containerd/containerd/pull/4530 + // https://www.raspberrypi.org/forums/viewtopic.php?t=12614 + // https://github.com/moby/moby/pull/36121#issuecomment-398328286 + model, err := getCPUInfo("model name") + if err != nil { + logrus.Errorf("Couldn't get cpu model name, it may be the corner case where variant is 6: %v", err) + return "" + } + // model name is NOT a value provided by the CPU; it is another outcome of Linux CPU detection, + // https://github.com/torvalds/linux/blob/190bf7b14b0cf3df19c059061be032bd8994a597/arch/arm/mm/proc-v6.S#L178C35-L178C35 + // (matching happens based on value + mask at https://github.com/torvalds/linux/blob/190bf7b14b0cf3df19c059061be032bd8994a597/arch/arm/mm/proc-v6.S#L273-L274 ) + // ARM CPU ID starts with a “main” ID register https://developer.arm.com/documentation/ddi0406/cb/System-Level-Architecture/System-Control-Registers-in-a-VMSA-implementation/VMSA-System-control-registers-descriptions--in-register-order/MIDR--Main-ID-Register--VMSA?lang=en , + // but the ARMv6/ARMv7 differences are not a single dimension, https://developer.arm.com/documentation/ddi0406/cb/System-Level-Architecture/The-CPUID-Identification-Scheme?lang=en . + // The Linux "cpu architecture" is determined by a “memory model” feature. + // + // So, the "armv6-compatible" check basically checks for a "v6 or v7 CPU, but not one found listed as a known v7 one in the .proc.info.init tables of + // https://github.com/torvalds/linux/blob/190bf7b14b0cf3df19c059061be032bd8994a597/arch/arm/mm/proc-v7.S . + if strings.HasPrefix(strings.ToLower(model), "armv6-compatible") { + logrus.Debugf("Detected corner case, setting cpu variant to v6") + variant = "v6" + } else { + variant = "v7" + } case "6", "6tej": variant = "v6" case "5", "5t", "5te", "5tej": @@ -107,8 +133,8 @@ func getCPUVariantArm() string { } func getCPUVariant(os string, arch string) string { - if os == "windows" { - return getCPUVariantWindows(arch) + if os == "darwin" || os == "windows" { + return getCPUVariantDarwinWindows(arch) } if arch == "arm" || arch == "arm64" { return getCPUVariantArm() diff --git a/tools/vendor/github.com/containers/image/v5/internal/private/private.go b/tools/vendor/github.com/containers/image/v5/internal/private/private.go index 95d561fcd..d81ea6703 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/private/private.go +++ b/tools/vendor/github.com/containers/image/v5/internal/private/private.go @@ -55,7 +55,7 @@ type ImageDestinationInternalOnly interface { // It is available only if SupportsPutBlobPartial(). // Even if SupportsPutBlobPartial() returns true, the call can fail, in which case the caller // should fall back to PutBlobWithOptions. - PutBlobPartial(ctx context.Context, chunkAccessor BlobChunkAccessor, srcInfo types.BlobInfo, cache blobinfocache.BlobInfoCache2) (UploadedBlob, error) + PutBlobPartial(ctx context.Context, chunkAccessor BlobChunkAccessor, srcInfo types.BlobInfo, options PutBlobPartialOptions) (UploadedBlob, error) // TryReusingBlobWithOptions checks whether the transport already contains, or can efficiently reuse, a blob, and if so, applies it to the current destination // (e.g. if the blob is a filesystem layer, this signifies that the changes it describes need to be applied again when composing a filesystem tree). @@ -100,6 +100,12 @@ type PutBlobOptions struct { LayerIndex *int // If the blob is a layer, a zero-based index of the layer within the image; nil otherwise. } +// PutBlobPartialOptions are used in PutBlobPartial. +type PutBlobPartialOptions struct { + Cache blobinfocache.BlobInfoCache2 // Cache to use and/or update. + LayerIndex int // A zero-based index of the layer within the image (PutBlobPartial is only called with layer-like blobs, not configs) +} + // TryReusingBlobOptions are used in TryReusingBlobWithOptions. type TryReusingBlobOptions struct { Cache blobinfocache.BlobInfoCache2 // Cache to use and/or update. @@ -112,11 +118,13 @@ type TryReusingBlobOptions struct { // Transports, OTOH, MUST support these fields being zero-valued for types.ImageDestination callers // if they use internal/imagedestination/impl.Compat; // in that case, they will all be consistently zero-valued. - RequiredCompression *compression.Algorithm // If set, reuse blobs with a matching algorithm as per implementations in internal/imagedestination/impl.helpers.go - OriginalCompression *compression.Algorithm // Must be set if RequiredCompression is set; can be set to nil to indicate “uncompressed” or “unknown”. - EmptyLayer bool // True if the blob is an "empty"/"throwaway" layer, and may not necessarily be physically represented. - LayerIndex *int // If the blob is a layer, a zero-based index of the layer within the image; nil otherwise. - SrcRef reference.Named // A reference to the source image that contains the input blob. + EmptyLayer bool // True if the blob is an "empty"/"throwaway" layer, and may not necessarily be physically represented. + LayerIndex *int // If the blob is a layer, a zero-based index of the layer within the image; nil otherwise. + SrcRef reference.Named // A reference to the source image that contains the input blob. + PossibleManifestFormats []string // A set of possible manifest formats; at least one should support the reused layer blob. + RequiredCompression *compression.Algorithm // If set, reuse blobs with a matching algorithm as per implementations in internal/imagedestination/impl.helpers.go + OriginalCompression *compression.Algorithm // May be nil to indicate “uncompressed” or “unknown”. + TOCDigest digest.Digest // If specified, the blob can be looked up in the destination also by its TOC digest. } // ReusedBlob is information about a blob reused in a destination. @@ -126,14 +134,25 @@ type ReusedBlob struct { Size int64 // Must be provided // The following compression fields should be set when the reuse substitutes // a differently-compressed blob. + // They may be set also to change from a base variant to a specific variant of an algorithm. CompressionOperation types.LayerCompression // Compress/Decompress, matching the reused blob; PreserveOriginal if N/A CompressionAlgorithm *compression.Algorithm // Algorithm if compressed, nil if decompressed or N/A + + // Annotations that should be added, for CompressionAlgorithm. Note that they might need to be + // added even if the digest doesn’t change (if we found the annotations in a cache). + CompressionAnnotations map[string]string + + MatchedByTOCDigest bool // Whether the layer was reused/matched by TOC digest. Used only for UI purposes. } // ImageSourceChunk is a portion of a blob. // This API is experimental and can be changed without bumping the major version number. type ImageSourceChunk struct { + // Offset specifies the starting position of the chunk within the source blob. Offset uint64 + + // Length specifies the size of the chunk. If it is set to math.MaxUint64, + // then it refers to all the data from Offset to the end of the blob. Length uint64 } @@ -144,6 +163,8 @@ type BlobChunkAccessor interface { // The specified chunks must be not overlapping and sorted by their offset. // The readers must be fully consumed, in the order they are returned, before blocking // to read the next chunk. + // If the Length for the last chunk is set to math.MaxUint64, then it + // fully fetches the remaining data from the offset to the end of the blob. GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []ImageSourceChunk) (chan io.ReadCloser, chan error, error) } diff --git a/tools/vendor/github.com/containers/image/v5/internal/signature/sigstore.go b/tools/vendor/github.com/containers/image/v5/internal/signature/sigstore.go index b8a9b366c..8025cd270 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/signature/sigstore.go +++ b/tools/vendor/github.com/containers/image/v5/internal/signature/sigstore.go @@ -1,10 +1,9 @@ package signature import ( + "bytes" "encoding/json" - - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" + "maps" ) const ( @@ -45,7 +44,7 @@ type sigstoreJSONRepresentation struct { func SigstoreFromComponents(untrustedMimeType string, untrustedPayload []byte, untrustedAnnotations map[string]string) Sigstore { return Sigstore{ untrustedMIMEType: untrustedMimeType, - untrustedPayload: slices.Clone(untrustedPayload), + untrustedPayload: bytes.Clone(untrustedPayload), untrustedAnnotations: maps.Clone(untrustedAnnotations), } } @@ -79,7 +78,7 @@ func (s Sigstore) UntrustedMIMEType() string { return s.untrustedMIMEType } func (s Sigstore) UntrustedPayload() []byte { - return slices.Clone(s.untrustedPayload) + return bytes.Clone(s.untrustedPayload) } func (s Sigstore) UntrustedAnnotations() map[string]string { diff --git a/tools/vendor/github.com/containers/image/v5/internal/signature/simple.go b/tools/vendor/github.com/containers/image/v5/internal/signature/simple.go index c09370406..76f270b48 100644 --- a/tools/vendor/github.com/containers/image/v5/internal/signature/simple.go +++ b/tools/vendor/github.com/containers/image/v5/internal/signature/simple.go @@ -1,6 +1,6 @@ package signature -import "golang.org/x/exp/slices" +import "bytes" // SimpleSigning is a “simple signing” signature. type SimpleSigning struct { @@ -10,7 +10,7 @@ type SimpleSigning struct { // SimpleSigningFromBlob converts a “simple signing” signature into a SimpleSigning object. func SimpleSigningFromBlob(blobChunk []byte) SimpleSigning { return SimpleSigning{ - untrustedSignature: slices.Clone(blobChunk), + untrustedSignature: bytes.Clone(blobChunk), } } @@ -21,9 +21,9 @@ func (s SimpleSigning) FormatID() FormatID { // blobChunk returns a representation of signature as a []byte, suitable for long-term storage. // Almost everyone should use signature.Blob() instead. func (s SimpleSigning) blobChunk() ([]byte, error) { - return slices.Clone(s.untrustedSignature), nil + return bytes.Clone(s.untrustedSignature), nil } func (s SimpleSigning) UntrustedSignature() []byte { - return slices.Clone(s.untrustedSignature) + return bytes.Clone(s.untrustedSignature) } diff --git a/tools/vendor/github.com/containers/image/v5/manifest/common.go b/tools/vendor/github.com/containers/image/v5/manifest/common.go index 1bdcf3d30..8d9d5795f 100644 --- a/tools/vendor/github.com/containers/image/v5/manifest/common.go +++ b/tools/vendor/github.com/containers/image/v5/manifest/common.go @@ -55,7 +55,7 @@ func compressionVariantMIMEType(variantTable []compressionMIMETypeSet, mimeType if variants != nil { name := mtsUncompressed if algorithm != nil { - name = algorithm.InternalUnstableUndocumentedMIMEQuestionMark() + name = algorithm.BaseVariantName() } if res, ok := variants[name]; ok { if res != mtsUnsupportedMIMEType { @@ -67,15 +67,15 @@ func compressionVariantMIMEType(variantTable []compressionMIMETypeSet, mimeType return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("uncompressed variant is not supported for type %q", mimeType)} } if name != mtsUncompressed { - return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("unknown compressed with algorithm %s variant for type %s", name, mimeType)} + return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("unknown compressed with algorithm %s variant for type %q", name, mimeType)} } // We can't very well say “the idea of no compression is unknown” return "", ManifestLayerCompressionIncompatibilityError{fmt.Sprintf("uncompressed variant is not supported for type %q", mimeType)} } if algorithm != nil { - return "", fmt.Errorf("unsupported MIME type for compression: %s", mimeType) + return "", fmt.Errorf("unsupported MIME type for compression: %q", mimeType) } - return "", fmt.Errorf("unsupported MIME type for decompression: %s", mimeType) + return "", fmt.Errorf("unsupported MIME type for decompression: %q", mimeType) } // updatedMIMEType returns the result of applying edits in updated (MediaType, CompressionOperation) to diff --git a/tools/vendor/github.com/containers/image/v5/manifest/docker_schema1.go b/tools/vendor/github.com/containers/image/v5/manifest/docker_schema1.go index a80af701a..222aa896e 100644 --- a/tools/vendor/github.com/containers/image/v5/manifest/docker_schema1.go +++ b/tools/vendor/github.com/containers/image/v5/manifest/docker_schema1.go @@ -4,17 +4,18 @@ import ( "encoding/json" "errors" "fmt" + "slices" "strings" "time" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/internal/manifest" "github.com/containers/image/v5/internal/set" + compressiontypes "github.com/containers/image/v5/pkg/compression/types" "github.com/containers/image/v5/types" "github.com/containers/storage/pkg/regexp" "github.com/docker/docker/api/types/versions" "github.com/opencontainers/go-digest" - "golang.org/x/exp/slices" ) // Schema1FSLayers is an entry of the "fsLayers" array in docker/distribution schema 1. @@ -142,6 +143,15 @@ func (m *Schema1) LayerInfos() []LayerInfo { return layers } +const fakeSchema1MIMEType = DockerV2Schema2LayerMediaType // Used only in schema1CompressionMIMETypeSets +var schema1CompressionMIMETypeSets = []compressionMIMETypeSet{ + { + mtsUncompressed: fakeSchema1MIMEType, + compressiontypes.GzipAlgorithmName: fakeSchema1MIMEType, + compressiontypes.ZstdAlgorithmName: mtsUnsupportedMIMEType, + }, +} + // UpdateLayerInfos replaces the original layers with the specified BlobInfos (size+digest+urls), in order (the root layer first, and then successive layered layers) func (m *Schema1) UpdateLayerInfos(layerInfos []types.BlobInfo) error { // Our LayerInfos includes empty layers (where m.ExtractedV1Compatibility[].ThrowAway), so expect them to be included here as well. @@ -150,6 +160,11 @@ func (m *Schema1) UpdateLayerInfos(layerInfos []types.BlobInfo) error { } m.FSLayers = make([]Schema1FSLayers, len(layerInfos)) for i, info := range layerInfos { + // There are no MIME types in schema1, but we do a “conversion” here to reject unsupported compression algorithms, + // in a way that is consistent with the other schema implementations. + if _, err := updatedMIMEType(schema1CompressionMIMETypeSets, fakeSchema1MIMEType, info); err != nil { + return fmt.Errorf("preparing updated manifest, layer %q: %w", info.Digest, err) + } // (docker push) sets up m.ExtractedV1Compatibility[].{Id,Parent} based on values of info.Digest, // but (docker pull) ignores them in favor of computing DiffIDs from uncompressed data, except verifying the child->parent links and uniqueness. // So, we don't bother recomputing the IDs in m.History.V1Compatibility. @@ -206,7 +221,7 @@ func (m *Schema1) fixManifestLayers() error { m.History = slices.Delete(m.History, i, i+1) m.ExtractedV1Compatibility = slices.Delete(m.ExtractedV1Compatibility, i, i+1) } else if m.ExtractedV1Compatibility[i].Parent != m.ExtractedV1Compatibility[i+1].ID { - return fmt.Errorf("Invalid parent ID. Expected %v, got %v", m.ExtractedV1Compatibility[i+1].ID, m.ExtractedV1Compatibility[i].Parent) + return fmt.Errorf("Invalid parent ID. Expected %v, got %q", m.ExtractedV1Compatibility[i+1].ID, m.ExtractedV1Compatibility[i].Parent) } } return nil @@ -327,5 +342,5 @@ func (m *Schema1) ImageID(diffIDs []digest.Digest) (string, error) { if err != nil { return "", err } - return digest.FromBytes(image).Hex(), nil + return digest.FromBytes(image).Encoded(), nil } diff --git a/tools/vendor/github.com/containers/image/v5/manifest/docker_schema2.go b/tools/vendor/github.com/containers/image/v5/manifest/docker_schema2.go index 20b721f4c..7e53f4f54 100644 --- a/tools/vendor/github.com/containers/image/v5/manifest/docker_schema2.go +++ b/tools/vendor/github.com/containers/image/v5/manifest/docker_schema2.go @@ -54,9 +54,10 @@ type Schema2HealthConfig struct { Test []string `json:",omitempty"` // Zero means to inherit. Durations are expressed as integer nanoseconds. - StartPeriod time.Duration `json:",omitempty"` // StartPeriod is the time to wait after starting before running the first check. - Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. - Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. + StartPeriod time.Duration `json:",omitempty"` // StartPeriod is the time to wait after starting before running the first check. + StartInterval time.Duration `json:",omitempty"` // StartInterval is the time to wait between checks during the start period. + Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. + Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. // Retries is the number of consecutive failures needed to consider a container as unhealthy. // Zero means inherit. @@ -201,7 +202,7 @@ func (m *Schema2) ConfigInfo() types.BlobInfo { // The Digest field is guaranteed to be provided; Size may be -1. // WARNING: The list may contain duplicates, and they are semantically relevant. func (m *Schema2) LayerInfos() []LayerInfo { - blobs := []LayerInfo{} + blobs := make([]LayerInfo, 0, len(m.LayersDescriptors)) for _, layer := range m.LayersDescriptors { blobs = append(blobs, LayerInfo{ BlobInfo: BlobInfoFromSchema2Descriptor(layer), @@ -294,7 +295,7 @@ func (m *Schema2) ImageID([]digest.Digest) (string, error) { if err := m.ConfigDescriptor.Digest.Validate(); err != nil { return "", err } - return m.ConfigDescriptor.Digest.Hex(), nil + return m.ConfigDescriptor.Digest.Encoded(), nil } // CanChangeLayerCompression returns true if we can compress/decompress layers with mimeType in the current image diff --git a/tools/vendor/github.com/containers/image/v5/manifest/manifest.go b/tools/vendor/github.com/containers/image/v5/manifest/manifest.go index 959aac935..d8f37eb45 100644 --- a/tools/vendor/github.com/containers/image/v5/manifest/manifest.go +++ b/tools/vendor/github.com/containers/image/v5/manifest/manifest.go @@ -16,7 +16,7 @@ import ( const ( // DockerV2Schema1MediaType MIME type represents Docker manifest schema 1 DockerV2Schema1MediaType = manifest.DockerV2Schema1MediaType - // DockerV2Schema1MediaType MIME type represents Docker manifest schema 1 with a JWS signature + // DockerV2Schema1SignedMediaType MIME type represents Docker manifest schema 1 with a JWS signature DockerV2Schema1SignedMediaType = manifest.DockerV2Schema1SignedMediaType // DockerV2Schema2MediaType MIME type represents Docker manifest schema 2 DockerV2Schema2MediaType = manifest.DockerV2Schema2MediaType @@ -166,5 +166,5 @@ func FromBlob(manblob []byte, mt string) (Manifest, error) { return nil, fmt.Errorf("Treating manifest lists as individual manifests is not implemented") } // Note that this may not be reachable, NormalizedMIMEType has a default for unknown values. - return nil, fmt.Errorf("Unimplemented manifest MIME type %s (normalized as %s)", mt, nmt) + return nil, fmt.Errorf("Unimplemented manifest MIME type %q (normalized as %q)", mt, nmt) } diff --git a/tools/vendor/github.com/containers/image/v5/manifest/oci.go b/tools/vendor/github.com/containers/image/v5/manifest/oci.go index a85641c36..f714574ee 100644 --- a/tools/vendor/github.com/containers/image/v5/manifest/oci.go +++ b/tools/vendor/github.com/containers/image/v5/manifest/oci.go @@ -3,6 +3,7 @@ package manifest import ( "encoding/json" "fmt" + "slices" "strings" "github.com/containers/image/v5/internal/manifest" @@ -12,7 +13,6 @@ import ( "github.com/opencontainers/go-digest" "github.com/opencontainers/image-spec/specs-go" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" - "golang.org/x/exp/slices" ) // BlobInfoFromOCI1Descriptor returns a types.BlobInfo based on the input OCI1 descriptor. @@ -95,7 +95,7 @@ func (m *OCI1) ConfigInfo() types.BlobInfo { // The Digest field is guaranteed to be provided; Size may be -1. // WARNING: The list may contain duplicates, and they are semantically relevant. func (m *OCI1) LayerInfos() []LayerInfo { - blobs := []LayerInfo{} + blobs := make([]LayerInfo, 0, len(m.Layers)) for _, layer := range m.Layers { blobs = append(blobs, LayerInfo{ BlobInfo: BlobInfoFromOCI1Descriptor(layer), @@ -167,7 +167,7 @@ func (m *OCI1) UpdateLayerInfos(layerInfos []types.BlobInfo) error { // an error if the mediatype does not support encryption func getEncryptedMediaType(mediatype string) (string, error) { if slices.Contains(strings.Split(mediatype, "+")[1:], "encrypted") { - return "", fmt.Errorf("unsupported mediaType: %v already encrypted", mediatype) + return "", fmt.Errorf("unsupported mediaType: %q already encrypted", mediatype) } unsuffixedMediatype := strings.Split(mediatype, "+")[0] switch unsuffixedMediatype { @@ -176,17 +176,18 @@ func getEncryptedMediaType(mediatype string) (string, error) { return mediatype + "+encrypted", nil } - return "", fmt.Errorf("unsupported mediaType to encrypt: %v", mediatype) + return "", fmt.Errorf("unsupported mediaType to encrypt: %q", mediatype) } -// getEncryptedMediaType will return the mediatype to its encrypted counterpart and return +// getDecryptedMediaType will return the mediatype to its encrypted counterpart and return // an error if the mediatype does not support decryption func getDecryptedMediaType(mediatype string) (string, error) { - if !strings.HasSuffix(mediatype, "+encrypted") { - return "", fmt.Errorf("unsupported mediaType to decrypt: %v", mediatype) + res, ok := strings.CutSuffix(mediatype, "+encrypted") + if !ok { + return "", fmt.Errorf("unsupported mediaType to decrypt: %q", mediatype) } - return strings.TrimSuffix(mediatype, "+encrypted"), nil + return res, nil } // Serialize returns the manifest in a blob format. @@ -235,7 +236,7 @@ func (m *OCI1) Inspect(configGetter func(types.BlobInfo) ([]byte, error)) (*type } // ImageID computes an ID which can uniquely identify this image by its contents. -func (m *OCI1) ImageID([]digest.Digest) (string, error) { +func (m *OCI1) ImageID(diffIDs []digest.Digest) (string, error) { // The way m.Config.Digest “uniquely identifies” an image is // by containing RootFS.DiffIDs, which identify the layers of the image. // For non-image artifacts, the we can’t expect the config to change @@ -259,7 +260,7 @@ func (m *OCI1) ImageID([]digest.Digest) (string, error) { if err := m.Config.Digest.Validate(); err != nil { return "", err } - return m.Config.Digest.Hex(), nil + return m.Config.Digest.Encoded(), nil } // CanChangeLayerCompression returns true if we can compress/decompress layers with mimeType in the current image diff --git a/tools/vendor/github.com/containers/image/v5/pkg/blobinfocache/none/none.go b/tools/vendor/github.com/containers/image/v5/pkg/blobinfocache/none/none.go index 4b7122f92..9a2219e79 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/blobinfocache/none/none.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/blobinfocache/none/none.go @@ -34,6 +34,19 @@ func (noCache) UncompressedDigest(anyDigest digest.Digest) digest.Digest { func (noCache) RecordDigestUncompressedPair(anyDigest digest.Digest, uncompressed digest.Digest) { } +// UncompressedDigestForTOC returns an uncompressed digest corresponding to anyDigest. +// Returns "" if the uncompressed digest is unknown. +func (noCache) UncompressedDigestForTOC(tocDigest digest.Digest) digest.Digest { + return "" +} + +// RecordTOCUncompressedPair records that the tocDigest corresponds to uncompressed. +// WARNING: Only call this for LOCALLY VERIFIED data; don’t record a digest pair just because some remote author claims so (e.g. +// because a manifest/config pair exists); otherwise the cache could be poisoned and allow substituting unexpected blobs. +// (Eventually, the DiffIDs in image config could detect the substitution, but that may be too late, and not all image formats contain that data.) +func (noCache) RecordTOCUncompressedPair(tocDigest digest.Digest, uncompressed digest.Digest) { +} + // RecordKnownLocation records that a blob with the specified digest exists within the specified (transport, scope) scope, // and can be reused given the opaque location data. func (noCache) RecordKnownLocation(transport types.ImageTransport, scope types.BICTransportScope, blobDigest digest.Digest, location types.BICLocationReference) { diff --git a/tools/vendor/github.com/containers/image/v5/pkg/compression/compression.go b/tools/vendor/github.com/containers/image/v5/pkg/compression/compression.go deleted file mode 100644 index 4443dda7f..000000000 --- a/tools/vendor/github.com/containers/image/v5/pkg/compression/compression.go +++ /dev/null @@ -1,165 +0,0 @@ -package compression - -import ( - "bytes" - "compress/bzip2" - "fmt" - "io" - - "github.com/containers/image/v5/pkg/compression/internal" - "github.com/containers/image/v5/pkg/compression/types" - "github.com/containers/storage/pkg/chunked/compressor" - "github.com/klauspost/pgzip" - "github.com/sirupsen/logrus" - "github.com/ulikunitz/xz" -) - -// Algorithm is a compression algorithm that can be used for CompressStream. -type Algorithm = types.Algorithm - -var ( - // Gzip compression. - Gzip = internal.NewAlgorithm(types.GzipAlgorithmName, types.GzipAlgorithmName, - []byte{0x1F, 0x8B, 0x08}, GzipDecompressor, gzipCompressor) - // Bzip2 compression. - Bzip2 = internal.NewAlgorithm(types.Bzip2AlgorithmName, types.Bzip2AlgorithmName, - []byte{0x42, 0x5A, 0x68}, Bzip2Decompressor, bzip2Compressor) - // Xz compression. - Xz = internal.NewAlgorithm(types.XzAlgorithmName, types.XzAlgorithmName, - []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00}, XzDecompressor, xzCompressor) - // Zstd compression. - Zstd = internal.NewAlgorithm(types.ZstdAlgorithmName, types.ZstdAlgorithmName, - []byte{0x28, 0xb5, 0x2f, 0xfd}, ZstdDecompressor, zstdCompressor) - // ZstdChunked is a Zstd compression with chunk metadta which allows random access to individual files. - ZstdChunked = internal.NewAlgorithm(types.ZstdChunkedAlgorithmName, types.ZstdAlgorithmName, /* Note: InternalUnstableUndocumentedMIMEQuestionMark is not ZstdChunkedAlgorithmName */ - nil, ZstdDecompressor, compressor.ZstdCompressor) - - compressionAlgorithms = map[string]Algorithm{ - Gzip.Name(): Gzip, - Bzip2.Name(): Bzip2, - Xz.Name(): Xz, - Zstd.Name(): Zstd, - ZstdChunked.Name(): ZstdChunked, - } -) - -// AlgorithmByName returns the compressor by its name -func AlgorithmByName(name string) (Algorithm, error) { - algorithm, ok := compressionAlgorithms[name] - if ok { - return algorithm, nil - } - return Algorithm{}, fmt.Errorf("cannot find compressor for %q", name) -} - -// DecompressorFunc returns the decompressed stream, given a compressed stream. -// The caller must call Close() on the decompressed stream (even if the compressed input stream does not need closing!). -type DecompressorFunc = internal.DecompressorFunc - -// GzipDecompressor is a DecompressorFunc for the gzip compression algorithm. -func GzipDecompressor(r io.Reader) (io.ReadCloser, error) { - return pgzip.NewReader(r) -} - -// Bzip2Decompressor is a DecompressorFunc for the bzip2 compression algorithm. -func Bzip2Decompressor(r io.Reader) (io.ReadCloser, error) { - return io.NopCloser(bzip2.NewReader(r)), nil -} - -// XzDecompressor is a DecompressorFunc for the xz compression algorithm. -func XzDecompressor(r io.Reader) (io.ReadCloser, error) { - r, err := xz.NewReader(r) - if err != nil { - return nil, err - } - return io.NopCloser(r), nil -} - -// gzipCompressor is a CompressorFunc for the gzip compression algorithm. -func gzipCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level != nil { - return pgzip.NewWriterLevel(r, *level) - } - return pgzip.NewWriter(r), nil -} - -// bzip2Compressor is a CompressorFunc for the bzip2 compression algorithm. -func bzip2Compressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - return nil, fmt.Errorf("bzip2 compression not supported") -} - -// xzCompressor is a CompressorFunc for the xz compression algorithm. -func xzCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - return xz.NewWriter(r) -} - -// CompressStream returns the compressor by its name -func CompressStream(dest io.Writer, algo Algorithm, level *int) (io.WriteCloser, error) { - m := map[string]string{} - return internal.AlgorithmCompressor(algo)(dest, m, level) -} - -// CompressStreamWithMetadata returns the compressor by its name. If the compression -// generates any metadata, it is written to the provided metadata map. -func CompressStreamWithMetadata(dest io.Writer, metadata map[string]string, algo Algorithm, level *int) (io.WriteCloser, error) { - return internal.AlgorithmCompressor(algo)(dest, metadata, level) -} - -// DetectCompressionFormat returns an Algorithm and DecompressorFunc if the input is recognized as a compressed format, an invalid -// value and nil otherwise. -// Because it consumes the start of input, other consumers must use the returned io.Reader instead to also read from the beginning. -func DetectCompressionFormat(input io.Reader) (Algorithm, DecompressorFunc, io.Reader, error) { - buffer := [8]byte{} - - n, err := io.ReadAtLeast(input, buffer[:], len(buffer)) - if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF { - // This is a “real” error. We could just ignore it this time, process the data we have, and hope that the source will report the same error again. - // Instead, fail immediately with the original error cause instead of a possibly secondary/misleading error returned later. - return Algorithm{}, nil, nil, err - } - - var retAlgo Algorithm - var decompressor DecompressorFunc - for _, algo := range compressionAlgorithms { - prefix := internal.AlgorithmPrefix(algo) - if len(prefix) > 0 && bytes.HasPrefix(buffer[:n], prefix) { - logrus.Debugf("Detected compression format %s", algo.Name()) - retAlgo = algo - decompressor = internal.AlgorithmDecompressor(algo) - break - } - } - if decompressor == nil { - logrus.Debugf("No compression detected") - } - - return retAlgo, decompressor, io.MultiReader(bytes.NewReader(buffer[:n]), input), nil -} - -// DetectCompression returns a DecompressorFunc if the input is recognized as a compressed format, nil otherwise. -// Because it consumes the start of input, other consumers must use the returned io.Reader instead to also read from the beginning. -func DetectCompression(input io.Reader) (DecompressorFunc, io.Reader, error) { - _, d, r, e := DetectCompressionFormat(input) - return d, r, e -} - -// AutoDecompress takes a stream and returns an uncompressed version of the -// same stream. -// The caller must call Close() on the returned stream (even if the input does not need, -// or does not even support, closing!). -func AutoDecompress(stream io.Reader) (io.ReadCloser, bool, error) { - decompressor, stream, err := DetectCompression(stream) - if err != nil { - return nil, false, fmt.Errorf("detecting compression: %w", err) - } - var res io.ReadCloser - if decompressor != nil { - res, err = decompressor(stream) - if err != nil { - return nil, false, fmt.Errorf("initializing decompression: %w", err) - } - } else { - res = io.NopCloser(stream) - } - return res, decompressor != nil, nil -} diff --git a/tools/vendor/github.com/containers/image/v5/pkg/compression/internal/types.go b/tools/vendor/github.com/containers/image/v5/pkg/compression/internal/types.go index ba619be00..d6f85274d 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/compression/internal/types.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/compression/internal/types.go @@ -12,23 +12,28 @@ type DecompressorFunc func(io.Reader) (io.ReadCloser, error) // Algorithm is a compression algorithm that can be used for CompressStream. type Algorithm struct { - name string - mime string - prefix []byte // Initial bytes of a stream compressed using this algorithm, or empty to disable detection. - decompressor DecompressorFunc - compressor CompressorFunc + name string + baseVariantName string + prefix []byte // Initial bytes of a stream compressed using this algorithm, or empty to disable detection. + decompressor DecompressorFunc + compressor CompressorFunc } // NewAlgorithm creates an Algorithm instance. +// nontrivialBaseVariantName is typically "". // This function exists so that Algorithm instances can only be created by code that // is allowed to import this internal subpackage. -func NewAlgorithm(name, mime string, prefix []byte, decompressor DecompressorFunc, compressor CompressorFunc) Algorithm { +func NewAlgorithm(name, nontrivialBaseVariantName string, prefix []byte, decompressor DecompressorFunc, compressor CompressorFunc) Algorithm { + baseVariantName := name + if nontrivialBaseVariantName != "" { + baseVariantName = nontrivialBaseVariantName + } return Algorithm{ - name: name, - mime: mime, - prefix: prefix, - decompressor: decompressor, - compressor: compressor, + name: name, + baseVariantName: baseVariantName, + prefix: prefix, + decompressor: decompressor, + compressor: compressor, } } @@ -37,10 +42,11 @@ func (c Algorithm) Name() string { return c.name } -// InternalUnstableUndocumentedMIMEQuestionMark ??? -// DO NOT USE THIS anywhere outside of c/image until it is properly documented. -func (c Algorithm) InternalUnstableUndocumentedMIMEQuestionMark() string { - return c.mime +// BaseVariantName returns the name of the “base variant” of the compression algorithm. +// It is either equal to Name() of the same algorithm, or equal to Name() of some other Algorithm (the “base variant”). +// This supports a single level of “is-a” relationship between compression algorithms, e.g. where "zstd:chunked" data is valid "zstd" data. +func (c Algorithm) BaseVariantName() string { + return c.baseVariantName } // AlgorithmCompressor returns the compressor field of algo. diff --git a/tools/vendor/github.com/containers/image/v5/pkg/compression/zstd.go b/tools/vendor/github.com/containers/image/v5/pkg/compression/zstd.go deleted file mode 100644 index 39ae014d2..000000000 --- a/tools/vendor/github.com/containers/image/v5/pkg/compression/zstd.go +++ /dev/null @@ -1,59 +0,0 @@ -package compression - -import ( - "io" - - "github.com/klauspost/compress/zstd" -) - -type wrapperZstdDecoder struct { - decoder *zstd.Decoder -} - -func (w *wrapperZstdDecoder) Close() error { - w.decoder.Close() - return nil -} - -func (w *wrapperZstdDecoder) DecodeAll(input, dst []byte) ([]byte, error) { - return w.decoder.DecodeAll(input, dst) -} - -func (w *wrapperZstdDecoder) Read(p []byte) (int, error) { - return w.decoder.Read(p) -} - -func (w *wrapperZstdDecoder) Reset(r io.Reader) error { - return w.decoder.Reset(r) -} - -func (w *wrapperZstdDecoder) WriteTo(wr io.Writer) (int64, error) { - return w.decoder.WriteTo(wr) -} - -func zstdReader(buf io.Reader) (io.ReadCloser, error) { - decoder, err := zstd.NewReader(buf) - return &wrapperZstdDecoder{decoder: decoder}, err -} - -func zstdWriter(dest io.Writer) (io.WriteCloser, error) { - return zstd.NewWriter(dest) -} - -func zstdWriterWithLevel(dest io.Writer, level int) (*zstd.Encoder, error) { - el := zstd.EncoderLevelFromZstd(level) - return zstd.NewWriter(dest, zstd.WithEncoderLevel(el)) -} - -// zstdCompressor is a CompressorFunc for the zstd compression algorithm. -func zstdCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level == nil { - return zstdWriter(r) - } - return zstdWriterWithLevel(r, *level) -} - -// ZstdDecompressor is a DecompressorFunc for the zstd compression algorithm. -func ZstdDecompressor(r io.Reader) (io.ReadCloser, error) { - return zstdReader(r) -} diff --git a/tools/vendor/github.com/containers/image/v5/pkg/docker/config/config.go b/tools/vendor/github.com/containers/image/v5/pkg/docker/config/config.go index c61065cb0..da2238a0b 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/docker/config/config.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/docker/config/config.go @@ -13,14 +13,15 @@ import ( "strings" "github.com/containers/image/v5/docker/reference" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/set" "github.com/containers/image/v5/pkg/sysregistriesv2" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/ioutils" helperclient "github.com/docker/docker-credential-helpers/client" "github.com/docker/docker-credential-helpers/credentials" - "github.com/hashicorp/go-multierror" "github.com/sirupsen/logrus" ) @@ -231,7 +232,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t return types.DockerAuthConfig{}, err } - var multiErr error + var multiErr []error for _, helper := range helpers { var ( creds types.DockerAuthConfig @@ -253,7 +254,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t } if err != nil { logrus.Debugf("Error looking up credentials for %s in credential helper %s: %v", helperKey, helper, err) - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) continue } if creds != (types.DockerAuthConfig{}) { @@ -266,7 +267,7 @@ func getCredentialsWithHomeDir(sys *types.SystemContext, key, homeDir string) (t } } if multiErr != nil { - return types.DockerAuthConfig{}, multiErr + return types.DockerAuthConfig{}, multierr.Format("errors looking up credentials:\n\t* ", "\nt* ", "\n", multiErr) } logrus.Debugf("No credentials for %s found", key) @@ -313,7 +314,7 @@ func SetCredentials(sys *types.SystemContext, key, username, password string) (s } // Make sure to collect all errors. - var multiErr error + var multiErr []error for _, helper := range helpers { var desc string var err error @@ -345,14 +346,14 @@ func SetCredentials(sys *types.SystemContext, key, username, password string) (s } } if err != nil { - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) logrus.Debugf("Error storing credentials for %s in credential helper %s: %v", key, helper, err) continue } logrus.Debugf("Stored credentials for %s in credential helper %s", key, helper) return desc, nil } - return "", multiErr + return "", multierr.Format("Errors storing credentials\n\t* ", "\n\t* ", "\n", multiErr) } func unsupportedNamespaceErr(helper string) error { @@ -376,53 +377,56 @@ func RemoveAuthentication(sys *types.SystemContext, key string) error { return err } - var multiErr error isLoggedIn := false - removeFromCredHelper := func(helper string) { + removeFromCredHelper := func(helper string) error { if isNamespaced { logrus.Debugf("Not removing credentials because namespaced keys are not supported for the credential helper: %s", helper) - return + return nil } err := deleteCredsFromCredHelper(helper, key) if err == nil { logrus.Debugf("Credentials for %q were deleted from credential helper %s", key, helper) isLoggedIn = true - return + return nil } if credentials.IsErrCredentialsNotFoundMessage(err.Error()) { logrus.Debugf("Not logged in to %s with credential helper %s", key, helper) - return + return nil } - multiErr = multierror.Append(multiErr, fmt.Errorf("removing credentials for %s from credential helper %s: %w", key, helper, err)) + return fmt.Errorf("removing credentials for %s from credential helper %s: %w", key, helper, err) } + var multiErr []error for _, helper := range helpers { var err error switch helper { // Special-case the built-in helper for auth files. case sysregistriesv2.AuthenticationFileHelper: _, err = jsonEditor(sys, func(fileContents *dockerConfigFile) (bool, string, error) { + var helperErr error if innerHelper, exists := fileContents.CredHelpers[key]; exists { - removeFromCredHelper(innerHelper) + helperErr = removeFromCredHelper(innerHelper) } if _, ok := fileContents.AuthConfigs[key]; ok { isLoggedIn = true delete(fileContents.AuthConfigs, key) } - return true, "", multiErr + return true, "", helperErr }) if err != nil { - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) } // External helpers. default: - removeFromCredHelper(helper) + if err := removeFromCredHelper(helper); err != nil { + multiErr = append(multiErr, err) + } } } if multiErr != nil { - return multiErr + return multierr.Format("errors removing credentials\n\t* ", "\n\t*", "\n", multiErr) } if !isLoggedIn { return ErrNotLoggedIn @@ -439,7 +443,7 @@ func RemoveAllAuthentication(sys *types.SystemContext) error { return err } - var multiErr error + var multiErr []error for _, helper := range helpers { var err error switch helper { @@ -479,13 +483,16 @@ func RemoveAllAuthentication(sys *types.SystemContext) error { } if err != nil { logrus.Debugf("Error removing credentials from credential helper %s: %v", helper, err) - multiErr = multierror.Append(multiErr, err) + multiErr = append(multiErr, err) continue } logrus.Debugf("All credentials removed from credential helper %s", helper) } - return multiErr + if multiErr != nil { + return multierr.Format("errors removing all credentials:\n\t* ", "\n\t* ", "\n", multiErr) + } + return nil } // prepareForEdit processes sys and key (if keyRelevant) to return: @@ -570,9 +577,9 @@ func getPathToAuthWithOS(sys *types.SystemContext, goOS string) (authPath, bool, runtimeDir := os.Getenv("XDG_RUNTIME_DIR") if runtimeDir != "" { // This function does not in general need to separately check that the returned path exists; that’s racy, and callers will fail accessing the file anyway. - // We are checking for os.IsNotExist here only to give the user better guidance what to do in this special case. - _, err := os.Stat(runtimeDir) - if os.IsNotExist(err) { + // We are checking for fs.ErrNotExist here only to give the user better guidance what to do in this special case. + err := fileutils.Exists(runtimeDir) + if errors.Is(err, fs.ErrNotExist) { // This means the user set the XDG_RUNTIME_DIR variable and either forgot to create the directory // or made a typo while setting the environment variable, // so return an error referring to $XDG_RUNTIME_DIR instead of xdgRuntimeDirPath inside. diff --git a/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go b/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go index 3a11542c6..71f5bc837 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/shortnames.go @@ -2,6 +2,7 @@ package sysregistriesv2 import ( "fmt" + "maps" "os" "path/filepath" "reflect" @@ -9,12 +10,12 @@ import ( "github.com/BurntSushi/toml" "github.com/containers/image/v5/docker/reference" + "github.com/containers/image/v5/internal/multierr" "github.com/containers/image/v5/internal/rootless" "github.com/containers/image/v5/types" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/lockfile" "github.com/sirupsen/logrus" - "golang.org/x/exp/maps" ) // defaultShortNameMode is the default mode of registries.conf files if the @@ -297,11 +298,7 @@ func newShortNameAliasCache(path string, conf *shortNameAliasConf) (*shortNameAl } } if len(errs) > 0 { - err := errs[0] - for i := 1; i < len(errs); i++ { - err = fmt.Errorf("%v\n: %w", errs[i], err) - } - return nil, err + return nil, multierr.Format("", "\n", "", errs) } return &res, nil } diff --git a/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go b/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go index f45fd9de1..1b161474d 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/sysregistriesv2/system_registries_v2.go @@ -13,6 +13,7 @@ import ( "github.com/BurntSushi/toml" "github.com/containers/image/v5/docker/reference" "github.com/containers/image/v5/types" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/homedir" "github.com/containers/storage/pkg/regexp" "github.com/sirupsen/logrus" @@ -247,6 +248,11 @@ type V2RegistriesConf struct { // potentially use all unqualified-search registries ShortNameMode string `toml:"short-name-mode"` + // AdditionalLayerStoreAuthHelper is a helper binary that receives + // registry credentials pass them to Additional Layer Store for + // registry authentication. These credentials are only collected when pulling (not pushing). + AdditionalLayerStoreAuthHelper string `toml:"additional-layer-store-auth-helper"` + shortNameAliasConf // If you add any field, make sure to update Nonempty() below. @@ -564,7 +570,7 @@ func newConfigWrapperWithHomeDir(ctx *types.SystemContext, homeDir string) confi // decide configPath using per-user path or system file if ctx != nil && ctx.SystemRegistriesConfPath != "" { wrapper.configPath = ctx.SystemRegistriesConfPath - } else if _, err := os.Stat(userRegistriesFilePath); err == nil { + } else if err := fileutils.Exists(userRegistriesFilePath); err == nil { // per-user registries.conf exists, not reading system dir // return config dirs from ctx or per-user one wrapper.configPath = userRegistriesFilePath @@ -824,6 +830,16 @@ func CredentialHelpers(sys *types.SystemContext) ([]string, error) { return config.partialV2.CredentialHelpers, nil } +// AdditionalLayerStoreAuthHelper returns the helper for passing registry +// credentials to Additional Layer Store. +func AdditionalLayerStoreAuthHelper(sys *types.SystemContext) (string, error) { + config, err := getConfig(sys) + if err != nil { + return "", err + } + return config.partialV2.AdditionalLayerStoreAuthHelper, nil +} + // refMatchingSubdomainPrefix returns the length of ref // iff ref, which is a registry, repository namespace, repository or image reference (as formatted by // reference.Domain(), reference.Named.Name() or reference.Reference.String() @@ -1050,6 +1066,11 @@ func (c *parsedConfig) updateWithConfigurationFrom(updates *parsedConfig) { c.shortNameMode = updates.shortNameMode } + // == Merge AdditionalLayerStoreAuthHelper: + if updates.partialV2.AdditionalLayerStoreAuthHelper != "" { + c.partialV2.AdditionalLayerStoreAuthHelper = updates.partialV2.AdditionalLayerStoreAuthHelper + } + // == Merge aliasCache: // We don’t maintain (in fact we actively clear) c.partialV2.shortNameAliasConf. c.aliasCache.updateWithConfigurationFrom(updates.aliasCache) diff --git a/tools/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go b/tools/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go index c6ec84bd5..f6c0576e0 100644 --- a/tools/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go +++ b/tools/vendor/github.com/containers/image/v5/pkg/tlsclientconfig/tlsclientconfig.go @@ -8,11 +8,11 @@ import ( "net/http" "os" "path/filepath" + "slices" "strings" "time" "github.com/sirupsen/logrus" - "golang.org/x/exp/slices" ) // SetupCertificates opens all .crt, .cert, and .key files in dir and appends / loads certs and key pairs as appropriate to tlsc @@ -55,9 +55,9 @@ func SetupCertificates(dir string, tlsc *tls.Config) error { } tlsc.RootCAs.AppendCertsFromPEM(data) } - if strings.HasSuffix(f.Name(), ".cert") { + if base, ok := strings.CutSuffix(f.Name(), ".cert"); ok { certName := f.Name() - keyName := certName[:len(certName)-5] + ".key" + keyName := base + ".key" logrus.Debugf(" cert: %s", fullPath) if !hasFile(fs, keyName) { return fmt.Errorf("missing key %s for client certificate %s. Note that CA certificates should use the extension .crt", keyName, certName) @@ -68,9 +68,9 @@ func SetupCertificates(dir string, tlsc *tls.Config) error { } tlsc.Certificates = append(slices.Clone(tlsc.Certificates), cert) } - if strings.HasSuffix(f.Name(), ".key") { + if base, ok := strings.CutSuffix(f.Name(), ".key"); ok { keyName := f.Name() - certName := keyName[:len(keyName)-4] + ".cert" + certName := base + ".cert" logrus.Debugf(" key: %s", fullPath) if !hasFile(fs, certName) { return fmt.Errorf("missing client certificate %s for key %s", certName, keyName) diff --git a/tools/vendor/github.com/containers/image/v5/types/types.go b/tools/vendor/github.com/containers/image/v5/types/types.go index 180a98c5b..7d6097346 100644 --- a/tools/vendor/github.com/containers/image/v5/types/types.go +++ b/tools/vendor/github.com/containers/image/v5/types/types.go @@ -135,8 +135,8 @@ type BlobInfo struct { // CompressionOperation is used in Image.UpdateLayerInfos to instruct // whether the original layer's "compressed or not" should be preserved, // possibly while changing the compression algorithm from one to another, - // or if it should be compressed or decompressed. The field defaults to - // preserve the original layer's compressedness. + // or if it should be changed to compressed or decompressed. + // The field defaults to preserve the original layer's compressedness. // TODO: To remove together with CryptoOperation in re-design to remove // field out of BlobInfo. CompressionOperation LayerCompression diff --git a/tools/vendor/github.com/containers/image/v5/version/version.go b/tools/vendor/github.com/containers/image/v5/version/version.go index 990f0a96d..64e468725 100644 --- a/tools/vendor/github.com/containers/image/v5/version/version.go +++ b/tools/vendor/github.com/containers/image/v5/version/version.go @@ -6,9 +6,9 @@ const ( // VersionMajor is for an API incompatible changes VersionMajor = 5 // VersionMinor is for functionality in a backwards-compatible manner - VersionMinor = 29 + VersionMinor = 32 // VersionPatch is for backwards-compatible bug fixes - VersionPatch = 0 + VersionPatch = 2 // VersionDev indicates development branch. Releases will be empty string. VersionDev = "" diff --git a/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go b/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go deleted file mode 100644 index ca7ce30f7..000000000 --- a/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/compressor.go +++ /dev/null @@ -1,513 +0,0 @@ -package compressor - -// NOTE: This is used from github.com/containers/image by callers that -// don't otherwise use containers/storage, so don't make this depend on any -// larger software like the graph drivers. - -import ( - "bufio" - "bytes" - "encoding/base64" - "io" - - "github.com/containers/storage/pkg/chunked/internal" - "github.com/containers/storage/pkg/ioutils" - "github.com/klauspost/compress/zstd" - "github.com/opencontainers/go-digest" - "github.com/vbatts/tar-split/archive/tar" - "github.com/vbatts/tar-split/tar/asm" - "github.com/vbatts/tar-split/tar/storage" -) - -const ( - RollsumBits = 16 - holesThreshold = int64(1 << 10) -) - -type holesFinder struct { - reader *bufio.Reader - zeros int64 - threshold int64 - - state int -} - -const ( - holesFinderStateRead = iota - holesFinderStateAccumulate - holesFinderStateFound - holesFinderStateEOF -) - -// readByte reads a single byte from the underlying reader. -// If a single byte is read, the return value is (0, RAW-BYTE-VALUE, nil). -// If there are at least f.THRESHOLD consecutive zeros, then the -// return value is (N_CONSECUTIVE_ZEROS, '\x00'). -func (f *holesFinder) readByte() (int64, byte, error) { - for { - switch f.state { - // reading the file stream - case holesFinderStateRead: - if f.zeros > 0 { - f.zeros-- - return 0, 0, nil - } - b, err := f.reader.ReadByte() - if err != nil { - return 0, b, err - } - - if b != 0 { - return 0, b, err - } - - f.zeros = 1 - if f.zeros == f.threshold { - f.state = holesFinderStateFound - } else { - f.state = holesFinderStateAccumulate - } - // accumulating zeros, but still didn't reach the threshold - case holesFinderStateAccumulate: - b, err := f.reader.ReadByte() - if err != nil { - if err == io.EOF { - f.state = holesFinderStateEOF - continue - } - return 0, b, err - } - - if b == 0 { - f.zeros++ - if f.zeros == f.threshold { - f.state = holesFinderStateFound - } - } else { - if err := f.reader.UnreadByte(); err != nil { - return 0, 0, err - } - f.state = holesFinderStateRead - } - // found a hole. Number of zeros >= threshold - case holesFinderStateFound: - b, err := f.reader.ReadByte() - if err != nil { - if err == io.EOF { - f.state = holesFinderStateEOF - } - holeLen := f.zeros - f.zeros = 0 - return holeLen, 0, nil - } - if b != 0 { - if err := f.reader.UnreadByte(); err != nil { - return 0, 0, err - } - f.state = holesFinderStateRead - - holeLen := f.zeros - f.zeros = 0 - return holeLen, 0, nil - } - f.zeros++ - // reached EOF. Flush pending zeros if any. - case holesFinderStateEOF: - if f.zeros > 0 { - f.zeros-- - return 0, 0, nil - } - return 0, 0, io.EOF - } - } -} - -type rollingChecksumReader struct { - reader *holesFinder - closed bool - rollsum *RollSum - pendingHole int64 - - // WrittenOut is the total number of bytes read from - // the stream. - WrittenOut int64 - - // IsLastChunkZeros tells whether the last generated - // chunk is a hole (made of consecutive zeros). If it - // is false, then the last chunk is a data chunk - // generated by the rolling checksum. - IsLastChunkZeros bool -} - -func (rc *rollingChecksumReader) Read(b []byte) (bool, int, error) { - rc.IsLastChunkZeros = false - - if rc.pendingHole > 0 { - toCopy := int64(len(b)) - if rc.pendingHole < toCopy { - toCopy = rc.pendingHole - } - rc.pendingHole -= toCopy - for i := int64(0); i < toCopy; i++ { - b[i] = 0 - } - - rc.WrittenOut += toCopy - - rc.IsLastChunkZeros = true - - // if there are no other zeros left, terminate the chunk - return rc.pendingHole == 0, int(toCopy), nil - } - - if rc.closed { - return false, 0, io.EOF - } - - for i := 0; i < len(b); i++ { - holeLen, n, err := rc.reader.readByte() - if err != nil { - if err == io.EOF { - rc.closed = true - if i == 0 { - return false, 0, err - } - return false, i, nil - } - // Report any other error type - return false, -1, err - } - if holeLen > 0 { - for j := int64(0); j < holeLen; j++ { - rc.rollsum.Roll(0) - } - rc.pendingHole = holeLen - return true, i, nil - } - b[i] = n - rc.WrittenOut++ - rc.rollsum.Roll(n) - if rc.rollsum.OnSplitWithBits(RollsumBits) { - return true, i + 1, nil - } - } - return false, len(b), nil -} - -type chunk struct { - ChunkOffset int64 - Offset int64 - Checksum string - ChunkSize int64 - ChunkType string -} - -type tarSplitData struct { - compressed *bytes.Buffer - digester digest.Digester - uncompressedCounter *ioutils.WriteCounter - zstd *zstd.Encoder - packer storage.Packer -} - -func newTarSplitData(level int) (*tarSplitData, error) { - compressed := bytes.NewBuffer(nil) - digester := digest.Canonical.Digester() - - zstdWriter, err := internal.ZstdWriterWithLevel(io.MultiWriter(compressed, digester.Hash()), level) - if err != nil { - return nil, err - } - - uncompressedCounter := ioutils.NewWriteCounter(zstdWriter) - metaPacker := storage.NewJSONPacker(uncompressedCounter) - - return &tarSplitData{ - compressed: compressed, - digester: digester, - uncompressedCounter: uncompressedCounter, - zstd: zstdWriter, - packer: metaPacker, - }, nil -} - -func writeZstdChunkedStream(destFile io.Writer, outMetadata map[string]string, reader io.Reader, level int) error { - // total written so far. Used to retrieve partial offsets in the file - dest := ioutils.NewWriteCounter(destFile) - - tarSplitData, err := newTarSplitData(level) - if err != nil { - return err - } - defer func() { - if tarSplitData.zstd != nil { - tarSplitData.zstd.Close() - } - }() - - its, err := asm.NewInputTarStream(reader, tarSplitData.packer, nil) - if err != nil { - return err - } - - tr := tar.NewReader(its) - tr.RawAccounting = true - - buf := make([]byte, 4096) - - zstdWriter, err := internal.ZstdWriterWithLevel(dest, level) - if err != nil { - return err - } - defer func() { - if zstdWriter != nil { - zstdWriter.Close() - } - }() - - restartCompression := func() (int64, error) { - var offset int64 - if zstdWriter != nil { - if err := zstdWriter.Close(); err != nil { - return 0, err - } - offset = dest.Count - zstdWriter.Reset(dest) - } - return offset, nil - } - - var metadata []internal.FileMetadata - for { - hdr, err := tr.Next() - if err != nil { - if err == io.EOF { - break - } - return err - } - - rawBytes := tr.RawBytes() - if _, err := zstdWriter.Write(rawBytes); err != nil { - return err - } - - payloadDigester := digest.Canonical.Digester() - chunkDigester := digest.Canonical.Digester() - - // Now handle the payload, if any - startOffset := int64(0) - lastOffset := int64(0) - lastChunkOffset := int64(0) - - checksum := "" - - chunks := []chunk{} - - hf := &holesFinder{ - threshold: holesThreshold, - reader: bufio.NewReader(tr), - } - - rcReader := &rollingChecksumReader{ - reader: hf, - rollsum: NewRollSum(), - } - - payloadDest := io.MultiWriter(payloadDigester.Hash(), chunkDigester.Hash(), zstdWriter) - for { - mustSplit, read, errRead := rcReader.Read(buf) - if errRead != nil && errRead != io.EOF { - return err - } - // restart the compression only if there is a payload. - if read > 0 { - if startOffset == 0 { - startOffset, err = restartCompression() - if err != nil { - return err - } - lastOffset = startOffset - } - - if _, err := payloadDest.Write(buf[:read]); err != nil { - return err - } - } - if (mustSplit || errRead == io.EOF) && startOffset > 0 { - off, err := restartCompression() - if err != nil { - return err - } - - chunkSize := rcReader.WrittenOut - lastChunkOffset - if chunkSize > 0 { - chunkType := internal.ChunkTypeData - if rcReader.IsLastChunkZeros { - chunkType = internal.ChunkTypeZeros - } - - chunks = append(chunks, chunk{ - ChunkOffset: lastChunkOffset, - Offset: lastOffset, - Checksum: chunkDigester.Digest().String(), - ChunkSize: chunkSize, - ChunkType: chunkType, - }) - } - - lastOffset = off - lastChunkOffset = rcReader.WrittenOut - chunkDigester = digest.Canonical.Digester() - payloadDest = io.MultiWriter(payloadDigester.Hash(), chunkDigester.Hash(), zstdWriter) - } - if errRead == io.EOF { - if startOffset > 0 { - checksum = payloadDigester.Digest().String() - } - break - } - } - - typ, err := internal.GetType(hdr.Typeflag) - if err != nil { - return err - } - xattrs := make(map[string]string) - for k, v := range hdr.Xattrs { - xattrs[k] = base64.StdEncoding.EncodeToString([]byte(v)) - } - entries := []internal.FileMetadata{ - { - Type: typ, - Name: hdr.Name, - Linkname: hdr.Linkname, - Mode: hdr.Mode, - Size: hdr.Size, - UID: hdr.Uid, - GID: hdr.Gid, - ModTime: &hdr.ModTime, - AccessTime: &hdr.AccessTime, - ChangeTime: &hdr.ChangeTime, - Devmajor: hdr.Devmajor, - Devminor: hdr.Devminor, - Xattrs: xattrs, - Digest: checksum, - Offset: startOffset, - EndOffset: lastOffset, - }, - } - for i := 1; i < len(chunks); i++ { - entries = append(entries, internal.FileMetadata{ - Type: internal.TypeChunk, - Name: hdr.Name, - ChunkOffset: chunks[i].ChunkOffset, - }) - } - if len(chunks) > 1 { - for i := range chunks { - entries[i].ChunkSize = chunks[i].ChunkSize - entries[i].Offset = chunks[i].Offset - entries[i].ChunkDigest = chunks[i].Checksum - entries[i].ChunkType = chunks[i].ChunkType - } - } - metadata = append(metadata, entries...) - } - - rawBytes := tr.RawBytes() - if _, err := zstdWriter.Write(rawBytes); err != nil { - zstdWriter.Close() - return err - } - if err := zstdWriter.Flush(); err != nil { - zstdWriter.Close() - return err - } - if err := zstdWriter.Close(); err != nil { - return err - } - zstdWriter = nil - - if err := tarSplitData.zstd.Flush(); err != nil { - return err - } - if err := tarSplitData.zstd.Close(); err != nil { - return err - } - tarSplitData.zstd = nil - - ts := internal.TarSplitData{ - Data: tarSplitData.compressed.Bytes(), - Digest: tarSplitData.digester.Digest(), - UncompressedSize: tarSplitData.uncompressedCounter.Count, - } - - return internal.WriteZstdChunkedManifest(dest, outMetadata, uint64(dest.Count), &ts, metadata, level) -} - -type zstdChunkedWriter struct { - tarSplitOut *io.PipeWriter - tarSplitErr chan error -} - -func (w zstdChunkedWriter) Close() error { - err := <-w.tarSplitErr - if err != nil { - w.tarSplitOut.Close() - return err - } - return w.tarSplitOut.Close() -} - -func (w zstdChunkedWriter) Write(p []byte) (int, error) { - select { - case err := <-w.tarSplitErr: - w.tarSplitOut.Close() - return 0, err - default: - return w.tarSplitOut.Write(p) - } -} - -// zstdChunkedWriterWithLevel writes a zstd compressed tarball where each file is -// compressed separately so it can be addressed separately. Idea based on CRFS: -// https://github.com/google/crfs -// The difference with CRFS is that the zstd compression is used instead of gzip. -// The reason for it is that zstd supports embedding metadata ignored by the decoder -// as part of the compressed stream. -// A manifest json file with all the metadata is appended at the end of the tarball -// stream, using zstd skippable frames. -// The final file will look like: -// [FILE_1][FILE_2]..[FILE_N][SKIPPABLE FRAME 1][SKIPPABLE FRAME 2] -// Where: -// [FILE_N]: [ZSTD HEADER][TAR HEADER][PAYLOAD FILE_N][ZSTD FOOTER] -// [SKIPPABLE FRAME 1]: [ZSTD SKIPPABLE FRAME, SIZE=MANIFEST LENGTH][MANIFEST] -// [SKIPPABLE FRAME 2]: [ZSTD SKIPPABLE FRAME, SIZE=16][MANIFEST_OFFSET][MANIFEST_LENGTH][MANIFEST_LENGTH_UNCOMPRESSED][MANIFEST_TYPE][CHUNKED_ZSTD_MAGIC_NUMBER] -// MANIFEST_OFFSET, MANIFEST_LENGTH, MANIFEST_LENGTH_UNCOMPRESSED and CHUNKED_ZSTD_MAGIC_NUMBER are 64 bits unsigned in little endian format. -func zstdChunkedWriterWithLevel(out io.Writer, metadata map[string]string, level int) (io.WriteCloser, error) { - ch := make(chan error, 1) - r, w := io.Pipe() - - go func() { - ch <- writeZstdChunkedStream(out, metadata, r, level) - _, _ = io.Copy(io.Discard, r) // Ordinarily writeZstdChunkedStream consumes all of r. If it fails, ensure the write end never blocks and eventually terminates. - r.Close() - close(ch) - }() - - return zstdChunkedWriter{ - tarSplitOut: w, - tarSplitErr: ch, - }, nil -} - -// ZstdCompressor is a CompressorFunc for the zstd compression algorithm. -func ZstdCompressor(r io.Writer, metadata map[string]string, level *int) (io.WriteCloser, error) { - if level == nil { - l := 10 - level = &l - } - - return zstdChunkedWriterWithLevel(r, metadata, *level) -} diff --git a/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go b/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go deleted file mode 100644 index 59df6901e..000000000 --- a/tools/vendor/github.com/containers/storage/pkg/chunked/compressor/rollsum.go +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2011 The Perkeep 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 rollsum implements rolling checksums similar to apenwarr's bup, which -// is similar to librsync. -// -// The bup project is at https://github.com/apenwarr/bup and its splitting in -// particular is at https://github.com/apenwarr/bup/blob/master/lib/bup/bupsplit.c -package compressor - -import ( - "math/bits" -) - -const ( - windowSize = 64 // Roll assumes windowSize is a power of 2 - charOffset = 31 -) - -const ( - blobBits = 13 - blobSize = 1 << blobBits // 8k -) - -type RollSum struct { - s1, s2 uint32 - window [windowSize]uint8 - wofs int -} - -func NewRollSum() *RollSum { - return &RollSum{ - s1: windowSize * charOffset, - s2: windowSize * (windowSize - 1) * charOffset, - } -} - -func (rs *RollSum) add(drop, add uint32) { - s1 := rs.s1 + add - drop - rs.s1 = s1 - rs.s2 += s1 - uint32(windowSize)*(drop+charOffset) -} - -// Roll adds ch to the rolling sum. -func (rs *RollSum) Roll(ch byte) { - wp := &rs.window[rs.wofs] - rs.add(uint32(*wp), uint32(ch)) - *wp = ch - rs.wofs = (rs.wofs + 1) & (windowSize - 1) -} - -// OnSplit reports whether at least 13 consecutive trailing bits of -// the current checksum are set the same way. -func (rs *RollSum) OnSplit() bool { - return (rs.s2 & (blobSize - 1)) == ((^0) & (blobSize - 1)) -} - -// OnSplitWithBits reports whether at least n consecutive trailing bits -// of the current checksum are set the same way. -func (rs *RollSum) OnSplitWithBits(n uint32) bool { - mask := (uint32(1) << n) - 1 - return rs.s2&mask == (^uint32(0))&mask -} - -func (rs *RollSum) Bits() int { - rsum := rs.Digest() >> (blobBits + 1) - return blobBits + bits.TrailingZeros32(^rsum) -} - -func (rs *RollSum) Digest() uint32 { - return (rs.s1 << 16) | (rs.s2 & 0xffff) -} diff --git a/tools/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go b/tools/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go deleted file mode 100644 index caa581efe..000000000 --- a/tools/vendor/github.com/containers/storage/pkg/chunked/internal/compression.go +++ /dev/null @@ -1,283 +0,0 @@ -package internal - -// NOTE: This is used from github.com/containers/image by callers that -// don't otherwise use containers/storage, so don't make this depend on any -// larger software like the graph drivers. - -import ( - "archive/tar" - "bytes" - "encoding/binary" - "errors" - "fmt" - "io" - "time" - - jsoniter "github.com/json-iterator/go" - "github.com/klauspost/compress/zstd" - "github.com/opencontainers/go-digest" -) - -type TOC struct { - Version int `json:"version"` - Entries []FileMetadata `json:"entries"` - - // internal: used by unmarshalToc - StringsBuf bytes.Buffer `json:"-"` -} - -type FileMetadata struct { - Type string `json:"type"` - Name string `json:"name"` - Linkname string `json:"linkName,omitempty"` - Mode int64 `json:"mode,omitempty"` - Size int64 `json:"size,omitempty"` - UID int `json:"uid,omitempty"` - GID int `json:"gid,omitempty"` - ModTime *time.Time `json:"modtime,omitempty"` - AccessTime *time.Time `json:"accesstime,omitempty"` - ChangeTime *time.Time `json:"changetime,omitempty"` - Devmajor int64 `json:"devMajor,omitempty"` - Devminor int64 `json:"devMinor,omitempty"` - Xattrs map[string]string `json:"xattrs,omitempty"` - Digest string `json:"digest,omitempty"` - Offset int64 `json:"offset,omitempty"` - EndOffset int64 `json:"endOffset,omitempty"` - - ChunkSize int64 `json:"chunkSize,omitempty"` - ChunkOffset int64 `json:"chunkOffset,omitempty"` - ChunkDigest string `json:"chunkDigest,omitempty"` - ChunkType string `json:"chunkType,omitempty"` - - // internal: computed by mergeTOCEntries. - Chunks []*FileMetadata `json:"-"` -} - -const ( - ChunkTypeData = "" - ChunkTypeZeros = "zeros" -) - -const ( - TypeReg = "reg" - TypeChunk = "chunk" - TypeLink = "hardlink" - TypeChar = "char" - TypeBlock = "block" - TypeDir = "dir" - TypeFifo = "fifo" - TypeSymlink = "symlink" -) - -var TarTypes = map[byte]string{ - tar.TypeReg: TypeReg, - tar.TypeRegA: TypeReg, - tar.TypeLink: TypeLink, - tar.TypeChar: TypeChar, - tar.TypeBlock: TypeBlock, - tar.TypeDir: TypeDir, - tar.TypeFifo: TypeFifo, - tar.TypeSymlink: TypeSymlink, -} - -func GetType(t byte) (string, error) { - r, found := TarTypes[t] - if !found { - return "", fmt.Errorf("unknown tarball type: %v", t) - } - return r, nil -} - -const ( - ManifestChecksumKey = "io.github.containers.zstd-chunked.manifest-checksum" - ManifestInfoKey = "io.github.containers.zstd-chunked.manifest-position" - TarSplitChecksumKey = "io.github.containers.zstd-chunked.tarsplit-checksum" - TarSplitInfoKey = "io.github.containers.zstd-chunked.tarsplit-position" - - // ManifestTypeCRFS is a manifest file compatible with the CRFS TOC file. - ManifestTypeCRFS = 1 - - // FooterSizeSupported is the footer size supported by this implementation. - // Newer versions of the image format might increase this value, so reject - // any version that is not supported. - FooterSizeSupported = 64 -) - -var ( - // when the zstd decoder encounters a skippable frame + 1 byte for the size, it - // will ignore it. - // https://tools.ietf.org/html/rfc8478#section-3.1.2 - skippableFrameMagic = []byte{0x50, 0x2a, 0x4d, 0x18} - - ZstdChunkedFrameMagic = []byte{0x47, 0x4e, 0x55, 0x6c, 0x49, 0x6e, 0x55, 0x78} -) - -func appendZstdSkippableFrame(dest io.Writer, data []byte) error { - if _, err := dest.Write(skippableFrameMagic); err != nil { - return err - } - - size := make([]byte, 4) - binary.LittleEndian.PutUint32(size, uint32(len(data))) - if _, err := dest.Write(size); err != nil { - return err - } - if _, err := dest.Write(data); err != nil { - return err - } - return nil -} - -type TarSplitData struct { - Data []byte - Digest digest.Digest - UncompressedSize int64 -} - -func WriteZstdChunkedManifest(dest io.Writer, outMetadata map[string]string, offset uint64, tarSplitData *TarSplitData, metadata []FileMetadata, level int) error { - // 8 is the size of the zstd skippable frame header + the frame size - const zstdSkippableFrameHeader = 8 - manifestOffset := offset + zstdSkippableFrameHeader - - toc := TOC{ - Version: 1, - Entries: metadata, - } - - json := jsoniter.ConfigCompatibleWithStandardLibrary - // Generate the manifest - manifest, err := json.Marshal(toc) - if err != nil { - return err - } - - var compressedBuffer bytes.Buffer - zstdWriter, err := ZstdWriterWithLevel(&compressedBuffer, level) - if err != nil { - return err - } - if _, err := zstdWriter.Write(manifest); err != nil { - zstdWriter.Close() - return err - } - if err := zstdWriter.Close(); err != nil { - return err - } - compressedManifest := compressedBuffer.Bytes() - - manifestDigester := digest.Canonical.Digester() - manifestChecksum := manifestDigester.Hash() - if _, err := manifestChecksum.Write(compressedManifest); err != nil { - return err - } - - outMetadata[ManifestChecksumKey] = manifestDigester.Digest().String() - outMetadata[ManifestInfoKey] = fmt.Sprintf("%d:%d:%d:%d", manifestOffset, len(compressedManifest), len(manifest), ManifestTypeCRFS) - if err := appendZstdSkippableFrame(dest, compressedManifest); err != nil { - return err - } - - outMetadata[TarSplitChecksumKey] = tarSplitData.Digest.String() - tarSplitOffset := manifestOffset + uint64(len(compressedManifest)) + zstdSkippableFrameHeader - outMetadata[TarSplitInfoKey] = fmt.Sprintf("%d:%d:%d", tarSplitOffset, len(tarSplitData.Data), tarSplitData.UncompressedSize) - if err := appendZstdSkippableFrame(dest, tarSplitData.Data); err != nil { - return err - } - - footer := ZstdChunkedFooterData{ - ManifestType: uint64(ManifestTypeCRFS), - Offset: manifestOffset, - LengthCompressed: uint64(len(compressedManifest)), - LengthUncompressed: uint64(len(manifest)), - ChecksumAnnotation: "", // unused - OffsetTarSplit: uint64(tarSplitOffset), - LengthCompressedTarSplit: uint64(len(tarSplitData.Data)), - LengthUncompressedTarSplit: uint64(tarSplitData.UncompressedSize), - ChecksumAnnotationTarSplit: "", // unused - } - - manifestDataLE := footerDataToBlob(footer) - - return appendZstdSkippableFrame(dest, manifestDataLE) -} - -func ZstdWriterWithLevel(dest io.Writer, level int) (*zstd.Encoder, error) { - el := zstd.EncoderLevelFromZstd(level) - return zstd.NewWriter(dest, zstd.WithEncoderLevel(el)) -} - -// ZstdChunkedFooterData contains all the data stored in the zstd:chunked footer. -type ZstdChunkedFooterData struct { - ManifestType uint64 - - Offset uint64 - LengthCompressed uint64 - LengthUncompressed uint64 - ChecksumAnnotation string // Only used when reading a layer, not when creating it - - OffsetTarSplit uint64 - LengthCompressedTarSplit uint64 - LengthUncompressedTarSplit uint64 - ChecksumAnnotationTarSplit string // Only used when reading a layer, not when creating it -} - -func footerDataToBlob(footer ZstdChunkedFooterData) []byte { - // Store the offset to the manifest and its size in LE order - manifestDataLE := make([]byte, FooterSizeSupported) - binary.LittleEndian.PutUint64(manifestDataLE[8*0:], footer.Offset) - binary.LittleEndian.PutUint64(manifestDataLE[8*1:], footer.LengthCompressed) - binary.LittleEndian.PutUint64(manifestDataLE[8*2:], footer.LengthUncompressed) - binary.LittleEndian.PutUint64(manifestDataLE[8*3:], footer.ManifestType) - binary.LittleEndian.PutUint64(manifestDataLE[8*4:], footer.OffsetTarSplit) - binary.LittleEndian.PutUint64(manifestDataLE[8*5:], footer.LengthCompressedTarSplit) - binary.LittleEndian.PutUint64(manifestDataLE[8*6:], footer.LengthUncompressedTarSplit) - copy(manifestDataLE[8*7:], ZstdChunkedFrameMagic) - - return manifestDataLE -} - -// ReadFooterDataFromAnnotations reads the zstd:chunked footer data from the given annotations. -func ReadFooterDataFromAnnotations(annotations map[string]string) (ZstdChunkedFooterData, error) { - var footerData ZstdChunkedFooterData - - footerData.ChecksumAnnotation = annotations[ManifestChecksumKey] - if footerData.ChecksumAnnotation == "" { - return footerData, fmt.Errorf("manifest checksum annotation %q not found", ManifestChecksumKey) - } - - offsetMetadata := annotations[ManifestInfoKey] - - if _, err := fmt.Sscanf(offsetMetadata, "%d:%d:%d:%d", &footerData.Offset, &footerData.LengthCompressed, &footerData.LengthUncompressed, &footerData.ManifestType); err != nil { - return footerData, err - } - - if tarSplitInfoKeyAnnotation, found := annotations[TarSplitInfoKey]; found { - if _, err := fmt.Sscanf(tarSplitInfoKeyAnnotation, "%d:%d:%d", &footerData.OffsetTarSplit, &footerData.LengthCompressedTarSplit, &footerData.LengthUncompressedTarSplit); err != nil { - return footerData, err - } - footerData.ChecksumAnnotationTarSplit = annotations[TarSplitChecksumKey] - } - return footerData, nil -} - -// ReadFooterDataFromBlob reads the zstd:chunked footer from the binary buffer. -func ReadFooterDataFromBlob(footer []byte) (ZstdChunkedFooterData, error) { - var footerData ZstdChunkedFooterData - - if len(footer) < FooterSizeSupported { - return footerData, errors.New("blob too small") - } - footerData.Offset = binary.LittleEndian.Uint64(footer[0:8]) - footerData.LengthCompressed = binary.LittleEndian.Uint64(footer[8:16]) - footerData.LengthUncompressed = binary.LittleEndian.Uint64(footer[16:24]) - footerData.ManifestType = binary.LittleEndian.Uint64(footer[24:32]) - footerData.OffsetTarSplit = binary.LittleEndian.Uint64(footer[32:40]) - footerData.LengthCompressedTarSplit = binary.LittleEndian.Uint64(footer[40:48]) - footerData.LengthUncompressedTarSplit = binary.LittleEndian.Uint64(footer[48:56]) - - // the magic number is stored in the last 8 bytes - if !bytes.Equal(ZstdChunkedFrameMagic, footer[len(footer)-len(ZstdChunkedFrameMagic):]) { - return footerData, errors.New("invalid magic number") - } - return footerData, nil -} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go new file mode 100644 index 000000000..f3087d7df --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_unix.go @@ -0,0 +1,34 @@ +//go:build !windows +// +build !windows + +package fileutils + +import ( + "os" + + "golang.org/x/sys/unix" +) + +// Exists checks whether a file or directory exists at the given path. +// If the path is a symlink, the symlink is followed. +func Exists(path string) error { + // It uses unix.Faccessat which is a faster operation compared to os.Stat for + // simply checking the existence of a file. + err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, 0) + if err != nil { + return &os.PathError{Op: "faccessat", Path: path, Err: err} + } + return nil +} + +// Lexists checks whether a file or directory exists at the given path. +// If the path is a symlink, the symlink itself is checked. +func Lexists(path string) error { + // It uses unix.Faccessat which is a faster operation compared to os.Stat for + // simply checking the existence of a file. + err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + return &os.PathError{Op: "faccessat", Path: path, Err: err} + } + return nil +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go new file mode 100644 index 000000000..355cf0464 --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/exists_windows.go @@ -0,0 +1,18 @@ +package fileutils + +import ( + "os" +) + +// Exists checks whether a file or directory exists at the given path. +func Exists(path string) error { + _, err := os.Stat(path) + return err +} + +// Lexists checks whether a file or directory exists at the given path, without +// resolving symlinks +func Lexists(path string) error { + _, err := os.Lstat(path) + return err +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go new file mode 100644 index 000000000..85ce2d526 --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils.go @@ -0,0 +1,371 @@ +package fileutils + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "regexp" + "strings" + "text/scanner" + + "github.com/sirupsen/logrus" +) + +// PatternMatcher allows checking paths against a list of patterns +type PatternMatcher struct { + patterns []*Pattern + exclusions bool +} + +// NewPatternMatcher creates a new matcher object for specific patterns that can +// be used later to match against patterns against paths +func NewPatternMatcher(patterns []string) (*PatternMatcher, error) { + pm := &PatternMatcher{ + patterns: make([]*Pattern, 0, len(patterns)), + } + for _, p := range patterns { + // Eliminate leading and trailing whitespace. + p = strings.TrimSpace(p) + if p == "" { + continue + } + p = filepath.Clean(p) + newp := &Pattern{} + if p[0] == '!' { + if len(p) == 1 { + return nil, errors.New("illegal exclusion pattern: \"!\"") + } + newp.exclusion = true + p = strings.TrimPrefix(filepath.Clean(p[1:]), "/") + pm.exclusions = true + } + // Do some syntax checking on the pattern. + // filepath's Match() has some really weird rules that are inconsistent + // so instead of trying to dup their logic, just call Match() for its + // error state and if there is an error in the pattern return it. + // If this becomes an issue we can remove this since its really only + // needed in the error (syntax) case - which isn't really critical. + if _, err := filepath.Match(p, "."); err != nil { + return nil, err + } + newp.cleanedPattern = p + newp.dirs = strings.Split(p, string(os.PathSeparator)) + pm.patterns = append(pm.patterns, newp) + } + return pm, nil +} + +// Deprecated: Please use the `MatchesResult` method instead. +// Matches matches path against all the patterns. Matches is not safe to be +// called concurrently +func (pm *PatternMatcher) Matches(file string) (bool, error) { + matched := false + file = filepath.FromSlash(file) + + for _, pattern := range pm.patterns { + negative := false + + if pattern.exclusion { + negative = true + } + + match, err := pattern.match(file) + if err != nil { + return false, err + } + + if match { + matched = !negative + } + } + + if matched { + logrus.Debugf("Skipping excluded path: %s", file) + } + + return matched, nil +} + +type MatchResult struct { + isMatched bool + matches, excludes uint +} + +// Excludes returns true if the overall result is matched +func (m *MatchResult) IsMatched() bool { + return m.isMatched +} + +// Excludes returns the amount of matches of an MatchResult +func (m *MatchResult) Matches() uint { + return m.matches +} + +// Excludes returns the amount of excludes of an MatchResult +func (m *MatchResult) Excludes() uint { + return m.excludes +} + +// MatchesResult verifies the provided filepath against all patterns. +// It returns the `*MatchResult` result for the patterns on success, otherwise +// an error. This method is not safe to be called concurrently. +func (pm *PatternMatcher) MatchesResult(file string) (res *MatchResult, err error) { + file = filepath.FromSlash(file) + res = &MatchResult{false, 0, 0} + + for _, pattern := range pm.patterns { + negative := false + + if pattern.exclusion { + negative = true + } + + match, err := pattern.match(file) + if err != nil { + return nil, err + } + + if match { + res.isMatched = !negative + if negative { + res.excludes++ + } else { + res.matches++ + } + } + } + + if res.matches > 0 { + logrus.Debugf("Skipping excluded path: %s", file) + } + + return res, nil +} + +// IsMatch verifies the provided filepath against all patterns and returns true +// if it matches. A match is valid if the last match is a positive one. +// It returns an error on failure and is not safe to be called concurrently. +func (pm *PatternMatcher) IsMatch(file string) (matched bool, err error) { + res, err := pm.MatchesResult(file) + if err != nil { + return false, err + } + return res.isMatched, nil +} + +// Exclusions returns true if any of the patterns define exclusions +func (pm *PatternMatcher) Exclusions() bool { + return pm.exclusions +} + +// Patterns returns array of active patterns +func (pm *PatternMatcher) Patterns() []*Pattern { + return pm.patterns +} + +// Pattern defines a single regexp used to filter file paths. +type Pattern struct { + cleanedPattern string + dirs []string + regexp *regexp.Regexp + exclusion bool +} + +func (p *Pattern) String() string { + return p.cleanedPattern +} + +// Exclusion returns true if this pattern defines exclusion +func (p *Pattern) Exclusion() bool { + return p.exclusion +} + +func (p *Pattern) match(path string) (bool, error) { + if p.regexp == nil { + if err := p.compile(); err != nil { + return false, filepath.ErrBadPattern + } + } + + b := p.regexp.MatchString(path) + + return b, nil +} + +func (p *Pattern) compile() error { + regStr := "^" + pattern := p.cleanedPattern + // Go through the pattern and convert it to a regexp. + // We use a scanner so we can support utf-8 chars. + var scan scanner.Scanner + scan.Init(strings.NewReader(pattern)) + + sl := string(os.PathSeparator) + escSL := sl + const bs = `\` + if sl == bs { + escSL += bs + } + + for scan.Peek() != scanner.EOF { + ch := scan.Next() + + if ch == '*' { + if scan.Peek() == '*' { + // is some flavor of "**" + scan.Next() + + // Treat **/ as ** so eat the "/" + if string(scan.Peek()) == sl { + scan.Next() + } + + if scan.Peek() == scanner.EOF { + // is "**EOF" - to align with .gitignore just accept all + regStr += ".*" + } else { + // is "**" + // Note that this allows for any # of /'s (even 0) because + // the .* will eat everything, even /'s + regStr += "(.*" + escSL + ")?" + } + } else { + // is "*" so map it to anything but "/" + regStr += "[^" + escSL + "]*" + } + } else if ch == '?' { + // "?" is any char except "/" + regStr += "[^" + escSL + "]" + } else if ch == '.' || ch == '$' { + // Escape some regexp special chars that have no meaning + // in golang's filepath.Match + regStr += bs + string(ch) + } else if ch == '\\' { + // escape next char. + if sl == bs { + // On windows map "\" to "\\", meaning an escaped backslash, + // and then just continue because filepath.Match on + // Windows doesn't allow escaping at all + regStr += escSL + continue + } + if scan.Peek() != scanner.EOF { + regStr += bs + string(scan.Next()) + } else { + return filepath.ErrBadPattern + } + } else { + regStr += string(ch) + } + } + + regStr += "(" + escSL + ".*)?$" + + re, err := regexp.Compile(regStr) + if err != nil { + return err + } + + p.regexp = re + return nil +} + +// Matches returns true if file matches any of the patterns +// and isn't excluded by any of the subsequent patterns. +func Matches(file string, patterns []string) (bool, error) { + pm, err := NewPatternMatcher(patterns) + if err != nil { + return false, err + } + file = filepath.Clean(file) + + if file == "." { + // Don't let them exclude everything, kind of silly. + return false, nil + } + + return pm.IsMatch(file) +} + +// CopyFile copies from src to dst until either EOF is reached +// on src or an error occurs. It verifies src exists and removes +// the dst if it exists. +func CopyFile(src, dst string) (int64, error) { + cleanSrc := filepath.Clean(src) + cleanDst := filepath.Clean(dst) + if cleanSrc == cleanDst { + return 0, nil + } + sf, err := os.Open(cleanSrc) + if err != nil { + return 0, err + } + defer sf.Close() + if err := os.Remove(cleanDst); err != nil && !os.IsNotExist(err) { + return 0, err + } + df, err := os.Create(cleanDst) + if err != nil { + return 0, err + } + defer df.Close() + return io.Copy(df, sf) +} + +// ReadSymlinkedDirectory returns the target directory of a symlink. +// The target of the symbolic link may not be a file. +func ReadSymlinkedDirectory(path string) (string, error) { + var realPath string + var err error + if realPath, err = filepath.Abs(path); err != nil { + return "", fmt.Errorf("unable to get absolute path for %s: %w", path, err) + } + if realPath, err = filepath.EvalSymlinks(realPath); err != nil { + return "", fmt.Errorf("failed to canonicalise path for %s: %w", path, err) + } + realPathInfo, err := os.Stat(realPath) + if err != nil { + return "", fmt.Errorf("failed to stat target '%s' of '%s': %w", realPath, path, err) + } + if !realPathInfo.Mode().IsDir() { + return "", fmt.Errorf("canonical path points to a file '%s'", realPath) + } + return realPath, nil +} + +// ReadSymlinkedPath returns the target directory of a symlink. +// The target of the symbolic link can be a file and a directory. +func ReadSymlinkedPath(path string) (realPath string, err error) { + if realPath, err = filepath.Abs(path); err != nil { + return "", fmt.Errorf("unable to get absolute path for %q: %w", path, err) + } + if realPath, err = filepath.EvalSymlinks(realPath); err != nil { + return "", fmt.Errorf("failed to canonicalise path for %q: %w", path, err) + } + if err := Exists(realPath); err != nil { + return "", fmt.Errorf("failed to stat target %q of %q: %w", realPath, path, err) + } + return realPath, nil +} + +// CreateIfNotExists creates a file or a directory only if it does not already exist. +func CreateIfNotExists(path string, isDir bool) error { + if err := Exists(path); err != nil { + if os.IsNotExist(err) { + if isDir { + return os.MkdirAll(path, 0o755) + } + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return err + } + f, err := os.OpenFile(path, os.O_CREATE, 0o755) + if err != nil { + return err + } + f.Close() + } + } + return nil +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go new file mode 100644 index 000000000..ccd648fac --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_darwin.go @@ -0,0 +1,27 @@ +package fileutils + +import ( + "os" + "os/exec" + "strconv" + "strings" +) + +// GetTotalUsedFds returns the number of used File Descriptors by +// executing `lsof -p PID` +func GetTotalUsedFds() int { + pid := os.Getpid() + + cmd := exec.Command("lsof", "-p", strconv.Itoa(pid)) + + output, err := cmd.CombinedOutput() + if err != nil { + return -1 + } + + outputStr := strings.TrimSpace(string(output)) + + fds := strings.Split(outputStr, "\n") + + return len(fds) - 1 +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go new file mode 100644 index 000000000..0f2cb7ab9 --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_solaris.go @@ -0,0 +1,7 @@ +package fileutils + +// GetTotalUsedFds Returns the number of used File Descriptors. +// On Solaris these limits are per process and not systemwide +func GetTotalUsedFds() int { + return -1 +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go new file mode 100644 index 000000000..92e0263d8 --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_unix.go @@ -0,0 +1,22 @@ +//go:build linux || freebsd +// +build linux freebsd + +package fileutils + +import ( + "fmt" + "os" + + "github.com/sirupsen/logrus" +) + +// GetTotalUsedFds Returns the number of used File Descriptors by +// reading it via /proc filesystem. +func GetTotalUsedFds() int { + if fds, err := os.ReadDir(fmt.Sprintf("/proc/%d/fd", os.Getpid())); err != nil { + logrus.Errorf("%v", err) + } else { + return len(fds) + } + return -1 +} diff --git a/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go new file mode 100644 index 000000000..5ec21cace --- /dev/null +++ b/tools/vendor/github.com/containers/storage/pkg/fileutils/fileutils_windows.go @@ -0,0 +1,7 @@ +package fileutils + +// GetTotalUsedFds Returns the number of used File Descriptors. Not supported +// on Windows. +func GetTotalUsedFds() int { + return -1 +} diff --git a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir.go b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir.go index 85c5e76c8..7eb63b67a 100644 --- a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir.go +++ b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir.go @@ -6,21 +6,6 @@ import ( "path/filepath" ) -// GetConfigHome returns XDG_CONFIG_HOME. -// GetConfigHome returns $HOME/.config and nil error if XDG_CONFIG_HOME is not set. -// -// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html -func GetConfigHome() (string, error) { - if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { - return xdgConfigHome, nil - } - home := Get() - if home == "" { - return "", errors.New("could not get either XDG_CONFIG_HOME or HOME") - } - return filepath.Join(home, ".config"), nil -} - // GetDataHome returns XDG_DATA_HOME. // GetDataHome returns $HOME/.local/share and nil error if XDG_DATA_HOME is not set. // diff --git a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_others.go b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_others.go deleted file mode 100644 index 0883ee023..000000000 --- a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_others.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:build !linux && !darwin && !freebsd -// +build !linux,!darwin,!freebsd - -package homedir - -// Copyright 2013-2018 Docker, Inc. -// NOTE: this package has originally been copied from github.com/docker/docker. - -import ( - "errors" -) - -// GetRuntimeDir is unsupported on non-linux system. -func GetRuntimeDir() (string, error) { - return "", errors.New("homedir.GetRuntimeDir() is not supported on this system") -} - -// StickRuntimeDirContents is unsupported on non-linux system. -func StickRuntimeDirContents(files []string) ([]string, error) { - return nil, errors.New("homedir.StickRuntimeDirContents() is not supported on this system") -} diff --git a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_unix.go b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_unix.go index 9976f19af..45be87659 100644 --- a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_unix.go +++ b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_unix.go @@ -7,12 +7,16 @@ package homedir // NOTE: this package has originally been copied from github.com/docker/docker. import ( - "errors" + "fmt" "os" "path/filepath" + "strconv" "strings" + "sync" + "syscall" "github.com/containers/storage/pkg/unshare" + "github.com/sirupsen/logrus" ) // Key returns the env var name for the user's home dir based on @@ -40,18 +44,6 @@ func GetShortcutString() string { return "~" } -// GetRuntimeDir returns XDG_RUNTIME_DIR. -// XDG_RUNTIME_DIR is typically configured via pam_systemd. -// GetRuntimeDir returns non-nil error if XDG_RUNTIME_DIR is not set. -// -// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html -func GetRuntimeDir() (string, error) { - if xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR"); xdgRuntimeDir != "" { - return filepath.EvalSymlinks(xdgRuntimeDir) - } - return "", errors.New("could not get XDG_RUNTIME_DIR") -} - // StickRuntimeDirContents sets the sticky bit on files that are under // XDG_RUNTIME_DIR, so that the files won't be periodically removed by the system. // @@ -94,3 +86,98 @@ func stick(f string) error { m |= os.ModeSticky return os.Chmod(f, m) } + +var ( + rootlessConfigHomeDirError error + rootlessConfigHomeDirOnce sync.Once + rootlessConfigHomeDir string + rootlessRuntimeDirOnce sync.Once + rootlessRuntimeDir string +) + +// isWriteableOnlyByOwner checks that the specified permission mask allows write +// access only to the owner. +func isWriteableOnlyByOwner(perm os.FileMode) bool { + return (perm & 0o722) == 0o700 +} + +// GetConfigHome returns XDG_CONFIG_HOME. +// GetConfigHome returns $HOME/.config and nil error if XDG_CONFIG_HOME is not set. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetConfigHome() (string, error) { + rootlessConfigHomeDirOnce.Do(func() { + cfgHomeDir := os.Getenv("XDG_CONFIG_HOME") + if cfgHomeDir == "" { + home := Get() + resolvedHome, err := filepath.EvalSymlinks(home) + if err != nil { + rootlessConfigHomeDirError = fmt.Errorf("cannot resolve %s: %w", home, err) + return + } + tmpDir := filepath.Join(resolvedHome, ".config") + _ = os.MkdirAll(tmpDir, 0o700) + st, err := os.Stat(tmpDir) + if err != nil { + rootlessConfigHomeDirError = err + return + } else if int(st.Sys().(*syscall.Stat_t).Uid) == os.Geteuid() { + cfgHomeDir = tmpDir + } else { + rootlessConfigHomeDirError = fmt.Errorf("path %q exists and it is not owned by the current user", tmpDir) + return + } + } + rootlessConfigHomeDir = cfgHomeDir + }) + + return rootlessConfigHomeDir, rootlessConfigHomeDirError +} + +// GetRuntimeDir returns a directory suitable to store runtime files. +// The function will try to use the XDG_RUNTIME_DIR env variable if it is set. +// XDG_RUNTIME_DIR is typically configured via pam_systemd. +// If XDG_RUNTIME_DIR is not set, GetRuntimeDir will try to find a suitable +// directory for the current user. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetRuntimeDir() (string, error) { + var rootlessRuntimeDirError error + + rootlessRuntimeDirOnce.Do(func() { + runtimeDir := os.Getenv("XDG_RUNTIME_DIR") + + if runtimeDir != "" { + rootlessRuntimeDir, rootlessRuntimeDirError = filepath.EvalSymlinks(runtimeDir) + return + } + + uid := strconv.Itoa(unshare.GetRootlessUID()) + if runtimeDir == "" { + tmpDir := filepath.Join("/run", "user", uid) + if err := os.MkdirAll(tmpDir, 0o700); err != nil { + logrus.Debug(err) + } + st, err := os.Lstat(tmpDir) + if err == nil && int(st.Sys().(*syscall.Stat_t).Uid) == os.Geteuid() && isWriteableOnlyByOwner(st.Mode().Perm()) { + runtimeDir = tmpDir + } + } + if runtimeDir == "" { + tmpDir := filepath.Join(os.TempDir(), fmt.Sprintf("storage-run-%s", uid)) + if err := os.MkdirAll(tmpDir, 0o700); err != nil { + logrus.Debug(err) + } + st, err := os.Lstat(tmpDir) + if err == nil && int(st.Sys().(*syscall.Stat_t).Uid) == os.Geteuid() && isWriteableOnlyByOwner(st.Mode().Perm()) { + runtimeDir = tmpDir + } else { + rootlessRuntimeDirError = fmt.Errorf("path %q exists and it is not writeable only by the current user", tmpDir) + return + } + } + rootlessRuntimeDir = runtimeDir + }) + + return rootlessRuntimeDir, rootlessRuntimeDirError +} diff --git a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_windows.go b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_windows.go index af65f2c03..a76610f90 100644 --- a/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_windows.go +++ b/tools/vendor/github.com/containers/storage/pkg/homedir/homedir_windows.go @@ -5,6 +5,7 @@ package homedir import ( "os" + "path/filepath" ) // Key returns the env var name for the user's home dir based on @@ -25,8 +26,36 @@ func Get() string { return home } +// GetConfigHome returns the home directory of the current user with the help of +// environment variables depending on the target operating system. +// Returned path should be used with "path/filepath" to form new paths. +func GetConfigHome() (string, error) { + return filepath.Join(Get(), ".config"), nil +} + // GetShortcutString returns the string that is shortcut to user's home directory // in the native shell of the platform running on. func GetShortcutString() string { return "%USERPROFILE%" // be careful while using in format functions } + +// StickRuntimeDirContents is a no-op on Windows +func StickRuntimeDirContents(files []string) ([]string, error) { + return nil, nil +} + +// GetRuntimeDir returns a directory suitable to store runtime files. +// The function will try to use the XDG_RUNTIME_DIR env variable if it is set. +// XDG_RUNTIME_DIR is typically configured via pam_systemd. +// If XDG_RUNTIME_DIR is not set, GetRuntimeDir will try to find a suitable +// directory for the current user. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetRuntimeDir() (string, error) { + data, err := GetDataHome() + if err != nil { + return "", err + } + runtimeDir := filepath.Join(data, "containers", "storage") + return runtimeDir, nil +} diff --git a/tools/vendor/github.com/containers/storage/pkg/idtools/idtools.go b/tools/vendor/github.com/containers/storage/pkg/idtools/idtools.go index 1e2d5bcc3..dc963481a 100644 --- a/tools/vendor/github.com/containers/storage/pkg/idtools/idtools.go +++ b/tools/vendor/github.com/containers/storage/pkg/idtools/idtools.go @@ -228,7 +228,7 @@ func getOverflowUID() int { return overflowUID } -// getOverflowUID returns the GID mapped to the overflow user +// getOverflowGID returns the GID mapped to the overflow user func getOverflowGID() int { overflowGIDOnce.Do(func() { // 65534 is the value on older kernels where /proc/sys/kernel/overflowgid is not present @@ -367,21 +367,77 @@ func checkChownErr(err error, name string, uid, gid int) error { return err } +// Stat contains file states that can be overriden with ContainersOverrideXattr. +type Stat struct { + IDs IDPair + Mode os.FileMode +} + +// FormatContainersOverrideXattr will format the given uid, gid, and mode into a string +// that can be used as the value for the ContainersOverrideXattr xattr. +func FormatContainersOverrideXattr(uid, gid, mode int) string { + return fmt.Sprintf("%d:%d:0%o", uid, gid, mode&0o7777) +} + +// GetContainersOverrideXattr will get and decode ContainersOverrideXattr. +func GetContainersOverrideXattr(path string) (Stat, error) { + var stat Stat + xstat, err := system.Lgetxattr(path, ContainersOverrideXattr) + if err != nil { + return stat, err + } + + attrs := strings.Split(string(xstat), ":") + if len(attrs) != 3 { + return stat, fmt.Errorf("The number of clons in %s does not equal to 3", + ContainersOverrideXattr) + } + + value, err := strconv.ParseUint(attrs[0], 10, 32) + if err != nil { + return stat, fmt.Errorf("Failed to parse UID: %w", err) + } + + stat.IDs.UID = int(value) + + value, err = strconv.ParseUint(attrs[0], 10, 32) + if err != nil { + return stat, fmt.Errorf("Failed to parse GID: %w", err) + } + + stat.IDs.GID = int(value) + + value, err = strconv.ParseUint(attrs[2], 8, 32) + if err != nil { + return stat, fmt.Errorf("Failed to parse mode: %w", err) + } + + stat.Mode = os.FileMode(value) + + return stat, nil +} + +// SetContainersOverrideXattr will encode and set ContainersOverrideXattr. +func SetContainersOverrideXattr(path string, stat Stat) error { + value := FormatContainersOverrideXattr(stat.IDs.UID, stat.IDs.GID, int(stat.Mode)) + return system.Lsetxattr(path, ContainersOverrideXattr, []byte(value), 0) +} + func SafeChown(name string, uid, gid int) error { if runtime.GOOS == "darwin" { - var mode uint64 = 0o0700 + var mode os.FileMode = 0o0700 xstat, err := system.Lgetxattr(name, ContainersOverrideXattr) if err == nil { attrs := strings.Split(string(xstat), ":") if len(attrs) == 3 { val, err := strconv.ParseUint(attrs[2], 8, 32) if err == nil { - mode = val + mode = os.FileMode(val) } } } - value := fmt.Sprintf("%d:%d:0%o", uid, gid, mode) - if err = system.Lsetxattr(name, ContainersOverrideXattr, []byte(value), 0); err != nil { + value := Stat{IDPair{uid, gid}, mode} + if err = SetContainersOverrideXattr(name, value); err != nil { return err } uid = os.Getuid() @@ -397,19 +453,19 @@ func SafeChown(name string, uid, gid int) error { func SafeLchown(name string, uid, gid int) error { if runtime.GOOS == "darwin" { - var mode uint64 = 0o0700 + var mode os.FileMode = 0o0700 xstat, err := system.Lgetxattr(name, ContainersOverrideXattr) if err == nil { attrs := strings.Split(string(xstat), ":") if len(attrs) == 3 { val, err := strconv.ParseUint(attrs[2], 8, 32) if err == nil { - mode = val + mode = os.FileMode(val) } } } - value := fmt.Sprintf("%d:%d:0%o", uid, gid, mode) - if err = system.Lsetxattr(name, ContainersOverrideXattr, []byte(value), 0); err != nil { + value := Stat{IDPair{uid, gid}, mode} + if err = SetContainersOverrideXattr(name, value); err != nil { return err } uid = os.Getuid() diff --git a/tools/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go b/tools/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go index 4701dc5ac..7900af38a 100644 --- a/tools/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go +++ b/tools/vendor/github.com/containers/storage/pkg/idtools/idtools_unix.go @@ -13,8 +13,9 @@ import ( "sync" "syscall" + "github.com/containers/storage/pkg/fileutils" "github.com/containers/storage/pkg/system" - "github.com/opencontainers/runc/libcontainer/user" + "github.com/moby/sys/user" ) var ( @@ -55,7 +56,7 @@ func mkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int, mkAll, chown if dirPath == "/" { break } - if _, err := os.Stat(dirPath); err != nil && os.IsNotExist(err) { + if err := fileutils.Exists(dirPath); err != nil && os.IsNotExist(err) { paths = append(paths, dirPath) } } diff --git a/tools/vendor/github.com/containers/storage/pkg/ioutils/fswriters.go b/tools/vendor/github.com/containers/storage/pkg/ioutils/fswriters.go index 2a8c85ad4..fd6addd73 100644 --- a/tools/vendor/github.com/containers/storage/pkg/ioutils/fswriters.go +++ b/tools/vendor/github.com/containers/storage/pkg/ioutils/fswriters.go @@ -150,10 +150,13 @@ func (w *atomicFileWriter) complete(commit bool) (retErr error) { } defer func() { - w.closeTempFile() + err := w.closeTempFile() if retErr != nil || w.writeErr != nil { os.Remove(w.f.Name()) } + if retErr == nil { + retErr = err + } }() if commit { diff --git a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go index 5dd674108..25a71ac90 100644 --- a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go +++ b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile.go @@ -133,11 +133,25 @@ func (l *LockFile) Lock() { } } -// LockRead locks the lockfile as a reader. +// RLock locks the lockfile as a reader. func (l *LockFile) RLock() { l.lock(readLock) } +// TryLock attempts to lock the lockfile as a writer. Panic if the lock is a read-only one. +func (l *LockFile) TryLock() error { + if l.ro { + panic("can't take write lock on read-only lock file") + } else { + return l.tryLock(writeLock) + } +} + +// TryRLock attempts to lock the lockfile as a reader. +func (l *LockFile) TryRLock() error { + return l.tryLock(readLock) +} + // Unlock unlocks the lockfile. func (l *LockFile) Unlock() { l.stateMutex.Lock() @@ -401,9 +415,52 @@ func (l *LockFile) lock(lType lockType) { // Optimization: only use the (expensive) syscall when // the counter is 0. In this case, we're either the first // reader lock or a writer lock. - lockHandle(l.fd, lType) + if err := lockHandle(l.fd, lType, false); err != nil { + panic(err) + } + } + l.lockType = lType + l.locked = true + l.counter++ +} + +// lock locks the lockfile via syscall based on the specified type and +// command. +func (l *LockFile) tryLock(lType lockType) error { + var success bool + var rwMutexUnlocker func() + if lType == readLock { + success = l.rwMutex.TryRLock() + rwMutexUnlocker = l.rwMutex.RUnlock + } else { + success = l.rwMutex.TryLock() + rwMutexUnlocker = l.rwMutex.Unlock + } + if !success { + return fmt.Errorf("resource temporarily unavailable") + } + l.stateMutex.Lock() + defer l.stateMutex.Unlock() + if l.counter == 0 { + // If we're the first reference on the lock, we need to open the file again. + fd, err := openLock(l.file, l.ro) + if err != nil { + rwMutexUnlocker() + return err + } + l.fd = fd + + // Optimization: only use the (expensive) syscall when + // the counter is 0. In this case, we're either the first + // reader lock or a writer lock. + if err = lockHandle(l.fd, lType, true); err != nil { + closeHandle(fd) + rwMutexUnlocker() + return err + } } l.lockType = lType l.locked = true l.counter++ + return nil } diff --git a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go index 38e737e26..6c8399f9e 100644 --- a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go +++ b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_unix.go @@ -1,5 +1,5 @@ -//go:build linux || solaris || darwin || freebsd -// +build linux solaris darwin freebsd +//go:build !windows +// +build !windows package lockfile @@ -74,7 +74,7 @@ func openHandle(path string, mode int) (fileHandle, error) { return fileHandle(fd), err } -func lockHandle(fd fileHandle, lType lockType) { +func lockHandle(fd fileHandle, lType lockType, nonblocking bool) error { fType := unix.F_RDLCK if lType != readLock { fType = unix.F_WRLCK @@ -85,7 +85,15 @@ func lockHandle(fd fileHandle, lType lockType) { Start: 0, Len: 0, } - for unix.FcntlFlock(uintptr(fd), unix.F_SETLKW, &lk) != nil { + cmd := unix.F_SETLKW + if nonblocking { + cmd = unix.F_SETLK + } + for { + err := unix.FcntlFlock(uintptr(fd), cmd, &lk) + if err == nil || nonblocking { + return err + } time.Sleep(10 * time.Millisecond) } } @@ -93,3 +101,7 @@ func lockHandle(fd fileHandle, lType lockType) { func unlockAndCloseHandle(fd fileHandle) { unix.Close(int(fd)) } + +func closeHandle(fd fileHandle) { + unix.Close(int(fd)) +} diff --git a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go index 304c92b15..6482529b3 100644 --- a/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go +++ b/tools/vendor/github.com/containers/storage/pkg/lockfile/lockfile_windows.go @@ -81,19 +81,30 @@ func openHandle(path string, mode int) (fileHandle, error) { return fileHandle(fd), err } -func lockHandle(fd fileHandle, lType lockType) { +func lockHandle(fd fileHandle, lType lockType, nonblocking bool) error { flags := 0 if lType != readLock { flags = windows.LOCKFILE_EXCLUSIVE_LOCK } + if nonblocking { + flags |= windows.LOCKFILE_FAIL_IMMEDIATELY + } ol := new(windows.Overlapped) if err := windows.LockFileEx(windows.Handle(fd), uint32(flags), reserved, allBytes, allBytes, ol); err != nil { + if nonblocking { + return err + } panic(err) } + return nil } func unlockAndCloseHandle(fd fileHandle) { ol := new(windows.Overlapped) windows.UnlockFileEx(windows.Handle(fd), reserved, allBytes, allBytes, ol) + closeHandle(fd) +} + +func closeHandle(fd fileHandle) { windows.Close(windows.Handle(fd)) } diff --git a/tools/vendor/github.com/containers/storage/pkg/mount/mountinfo_linux.go b/tools/vendor/github.com/containers/storage/pkg/mount/mountinfo_linux.go index cbc0299fb..2d9e75ea1 100644 --- a/tools/vendor/github.com/containers/storage/pkg/mount/mountinfo_linux.go +++ b/tools/vendor/github.com/containers/storage/pkg/mount/mountinfo_linux.go @@ -1,5 +1,18 @@ package mount -import "github.com/moby/sys/mountinfo" +import ( + "fmt" + "os" -var PidMountInfo = mountinfo.PidMountInfo + "github.com/moby/sys/mountinfo" +) + +func PidMountInfo(pid int) ([]*Info, error) { + f, err := os.Open(fmt.Sprintf("/proc/%d/mountinfo", pid)) + if err != nil { + return nil, err + } + defer f.Close() + + return mountinfo.GetMountsFromReader(f, nil) +} diff --git a/tools/vendor/github.com/containers/storage/pkg/system/syscall_unix.go b/tools/vendor/github.com/containers/storage/pkg/system/syscall_unix.go index c4816c133..217e2fe83 100644 --- a/tools/vendor/github.com/containers/storage/pkg/system/syscall_unix.go +++ b/tools/vendor/github.com/containers/storage/pkg/system/syscall_unix.go @@ -1,5 +1,5 @@ -//go:build linux || freebsd || darwin -// +build linux freebsd darwin +//go:build !windows +// +build !windows package system diff --git a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare.c b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare.c index f5a7c3a25..a2800654f 100644 --- a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare.c +++ b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include diff --git a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go index a8dc1ba03..32e8d7dca 100644 --- a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go +++ b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go @@ -526,8 +526,11 @@ func MaybeReexecUsingUserNamespace(evenForRoot bool) { } else { // If we have CAP_SYS_ADMIN, then we don't need to create a new namespace in order to be able // to use unshare(), so don't bother creating a new user namespace at this point. - capabilities, err := capability.NewPid(0) + capabilities, err := capability.NewPid2(0) + bailOnError(err, "Initializing a new Capabilities object of pid 0") + err = capabilities.Load() bailOnError(err, "Reading the current capabilities sets") + if capabilities.Get(capability.EFFECTIVE, capability.CAP_SYS_ADMIN) { return } @@ -587,7 +590,12 @@ func MaybeReexecUsingUserNamespace(evenForRoot bool) { cmd.Hook = func(int) error { go func() { for receivedSignal := range interrupted { - cmd.Cmd.Process.Signal(receivedSignal) + if err := cmd.Cmd.Process.Signal(receivedSignal); err != nil { + logrus.Warnf( + "Failed to send a signal '%d' to the Process (PID: %d): %v", + receivedSignal, cmd.Cmd.Process.Pid, err, + ) + } } }() return nil diff --git a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_unsupported.go b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_unsupported.go index 83de680c2..e3160d0da 100644 --- a/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_unsupported.go +++ b/tools/vendor/github.com/containers/storage/pkg/unshare/unshare_unsupported.go @@ -17,7 +17,7 @@ const ( // IsRootless tells us if we are running in rootless mode func IsRootless() bool { - return false + return os.Getuid() != 0 } // GetRootlessUID returns the UID of the user in the parent userNS diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md b/tools/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md new file mode 100644 index 000000000..7436896e1 --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md @@ -0,0 +1,138 @@ +# Changelog # +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased] ## + +## [0.3.1] - 2024-07-23 ## + +### Changed ### +- By allowing `Open(at)InRoot` to opt-out of the extra work done by `MkdirAll` + to do the necessary "partial lookups", `Open(at)InRoot` now does less work + for both implementations (resulting in a many-fold decrease in the number of + operations for `openat2`, and a modest improvement for non-`openat2`) and is + far more guaranteed to match the correct `openat2(RESOLVE_IN_ROOT)` + behaviour. +- We now use `readlinkat(fd, "")` where possible. For `Open(at)InRoot` this + effectively just means that we no longer risk getting spurious errors during + rename races. However, for our hardened procfs handler, this in theory should + prevent mount attacks from tricking us when doing magic-link readlinks (even + when using the unsafe host `/proc` handle). Unfortunately `Reopen` is still + potentially vulnerable to those kinds of somewhat-esoteric attacks. + + Technically this [will only work on post-2.6.39 kernels][linux-readlinkat-emptypath] + but it seems incredibly unlikely anyone is using `filepath-securejoin` on a + pre-2011 kernel. + +### Fixed ### +- Several improvements were made to the errors returned by `Open(at)InRoot` and + `MkdirAll` when dealing with invalid paths under the emulated (ie. + non-`openat2`) implementation. Previously, some paths would return the wrong + error (`ENOENT` when the last component was a non-directory), and other paths + would be returned as though they were acceptable (trailing-slash components + after a non-directory would be ignored by `Open(at)InRoot`). + + These changes were done to match `openat2`'s behaviour and purely is a + consistency fix (most users are going to be using `openat2` anyway). + +[linux-readlinkat-emptypath]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65cfc6722361570bfe255698d9cd4dccaf47570d + +## [0.3.0] - 2024-07-11 ## + +### Added ### +- A new set of `*os.File`-based APIs have been added. These are adapted from + [libpathrs][] and we strongly suggest using them if possible (as they provide + far more protection against attacks than `SecureJoin`): + + - `Open(at)InRoot` resolves a path inside a rootfs and returns an `*os.File` + handle to the path. Note that the handle returned is an `O_PATH` handle, + which cannot be used for reading or writing (as well as some other + operations -- [see open(2) for more details][open.2]) + + - `Reopen` takes an `O_PATH` file handle and safely re-opens it to upgrade + it to a regular handle. This can also be used with non-`O_PATH` handles, + but `O_PATH` is the most obvious application. + + - `MkdirAll` is an implementation of `os.MkdirAll` that is safe to use to + create a directory tree within a rootfs. + + As these are new APIs, they may change in the future. However, they should be + safe to start migrating to as we have extensive tests ensuring they behave + correctly and are safe against various races and other attacks. + +[libpathrs]: https://github.com/openSUSE/libpathrs +[open.2]: https://www.man7.org/linux/man-pages/man2/open.2.html + +## [0.2.5] - 2024-05-03 ## + +### Changed ### +- Some minor changes were made to how lexical components (like `..` and `.`) + are handled during path generation in `SecureJoin`. There is no behaviour + change as a result of this fix (the resulting paths are the same). + +### Fixed ### +- The error returned when we hit a symlink loop now references the correct + path. (#10) + +## [0.2.4] - 2023-09-06 ## + +### Security ### +- This release fixes a potential security issue in filepath-securejoin when + used on Windows ([GHSA-6xv5-86q9-7xr8][], which could be used to generate + paths outside of the provided rootfs in certain cases), as well as improving + the overall behaviour of filepath-securejoin when dealing with Windows paths + that contain volume names. Thanks to Paulo Gomes for discovering and fixing + these issues. + +### Fixed ### +- Switch to GitHub Actions for CI so we can test on Windows as well as Linux + and MacOS. + +[GHSA-6xv5-86q9-7xr8]: https://github.com/advisories/GHSA-6xv5-86q9-7xr8 + +## [0.2.3] - 2021-06-04 ## + +### Changed ### +- Switch to Go 1.13-style `%w` error wrapping, letting us drop the dependency + on `github.com/pkg/errors`. + +## [0.2.2] - 2018-09-05 ## + +### Changed ### +- Use `syscall.ELOOP` as the base error for symlink loops, rather than our own + (internal) error. This allows callers to more easily use `errors.Is` to check + for this case. + +## [0.2.1] - 2018-09-05 ## + +### Fixed ### +- Use our own `IsNotExist` implementation, which lets us handle `ENOTDIR` + properly within `SecureJoin`. + +## [0.2.0] - 2017-07-19 ## + +We now have 100% test coverage! + +### Added ### +- Add a `SecureJoinVFS` API that can be used for mocking (as we do in our new + tests) or for implementing custom handling of lookup operations (such as for + rootless containers, where work is necessary to access directories with weird + modes because we don't have `CAP_DAC_READ_SEARCH` or `CAP_DAC_OVERRIDE`). + +## 0.1.0 - 2017-07-19 + +This is our first release of `github.com/cyphar/filepath-securejoin`, +containing a full implementation with a coverage of 93.5% (the only missing +cases are the error cases, which are hard to mocktest at the moment). + +[Unreleased]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.1...HEAD +[0.3.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.5...v0.3.0 +[0.2.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.4...v0.2.5 +[0.2.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4 +[0.2.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.2...v0.2.3 +[0.2.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.1.0...v0.2.0 diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/LICENSE b/tools/vendor/github.com/cyphar/filepath-securejoin/LICENSE index bec842f29..cb1ab88da 100644 --- a/tools/vendor/github.com/cyphar/filepath-securejoin/LICENSE +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/LICENSE @@ -1,5 +1,5 @@ Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. -Copyright (C) 2017 SUSE LLC. All rights reserved. +Copyright (C) 2017-2024 SUSE LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/README.md b/tools/vendor/github.com/cyphar/filepath-securejoin/README.md index 4eca0f235..253956f86 100644 --- a/tools/vendor/github.com/cyphar/filepath-securejoin/README.md +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/README.md @@ -2,31 +2,24 @@ [![Build Status](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml/badge.svg)](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml) -An implementation of `SecureJoin`, a [candidate for inclusion in the Go -standard library][go#20126]. The purpose of this function is to be a "secure" -alternative to `filepath.Join`, and in particular it provides certain -guarantees that are not provided by `filepath.Join`. - -> **NOTE**: This code is *only* safe if you are not at risk of other processes -> modifying path components after you've used `SecureJoin`. If it is possible -> for a malicious process to modify path components of the resolved path, then -> you will be vulnerable to some fairly trivial TOCTOU race conditions. [There -> are some Linux kernel patches I'm working on which might allow for a better -> solution.][lwn-obeneath] -> -> In addition, with a slightly modified API it might be possible to use -> `O_PATH` and verify that the opened path is actually the resolved one -- but -> I have not done that yet. I might add it in the future as a helper function -> to help users verify the path (we can't just return `/proc/self/fd/` -> because that doesn't always work transparently for all users). - -This is the function prototype: +### Old API ### -```go -func SecureJoin(root, unsafePath string) (string, error) -``` +This library was originally just an implementation of `SecureJoin` which was +[intended to be included in the Go standard library][go#20126] as a safer +`filepath.Join` that would restrict the path lookup to be inside a root +directory. + +The implementation was based on code that existed in several container +runtimes. Unfortunately, this API is **fundamentally unsafe** against attackers +that can modify path components after `SecureJoin` returns and before the +caller uses the path, allowing for some fairly trivial TOCTOU attacks. + +`SecureJoin` (and `SecureJoinVFS`) are still provided by this library to +support legacy users, but new users are strongly suggested to avoid using +`SecureJoin` and instead use the [new api](#new-api) or switch to +[libpathrs][libpathrs]. -This library **guarantees** the following: +With the above limitations in mind, this library guarantees the following: * If no error is set, the resulting string **must** be a child path of `root` and will not contain any symlink path components (they will all be @@ -47,7 +40,7 @@ This library **guarantees** the following: A (trivial) implementation of this function on GNU/Linux systems could be done with the following (note that this requires root privileges and is far more opaque than the implementation in this library, and also requires that -`readlink` is inside the `root` path): +`readlink` is inside the `root` path and is trustworthy): ```go package securejoin @@ -70,9 +63,105 @@ func SecureJoin(root, unsafePath string) (string, error) { } ``` -[lwn-obeneath]: https://lwn.net/Articles/767547/ +[libpathrs]: https://github.com/openSUSE/libpathrs [go#20126]: https://github.com/golang/go/issues/20126 +### New API ### + +While we recommend users switch to [libpathrs][libpathrs] as soon as it has a +stable release, some methods implemented by libpathrs have been ported to this +library to ease the transition. These APIs are only supported on Linux. + +These APIs are implemented such that `filepath-securejoin` will +opportunistically use certain newer kernel APIs that make these operations far +more secure. In particular: + +* All of the lookup operations will use [`openat2`][openat2.2] on new enough + kernels (Linux 5.6 or later) to restrict lookups through magic-links and + bind-mounts (for certain operations) and to make use of `RESOLVE_IN_ROOT` to + efficiently resolve symlinks within a rootfs. + +* The APIs provide hardening against a malicious `/proc` mount to either detect + or avoid being tricked by a `/proc` that is not legitimate. This is done + using [`openat2`][openat2.2] for all users, and privileged users will also be + further protected by using [`fsopen`][fsopen.2] and [`open_tree`][open_tree.2] + (Linux 4.18 or later). + +[openat2.2]: https://www.man7.org/linux/man-pages/man2/openat2.2.html +[fsopen.2]: https://github.com/brauner/man-pages-md/blob/main/fsopen.md +[open_tree.2]: https://github.com/brauner/man-pages-md/blob/main/open_tree.md + +#### `OpenInRoot` #### + +```go +func OpenInRoot(root, unsafePath string) (*os.File, error) +func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) +func Reopen(handle *os.File, flags int) (*os.File, error) +``` + +`OpenInRoot` is a much safer version of + +```go +path, err := securejoin.SecureJoin(root, unsafePath) +file, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC) +``` + +that protects against various race attacks that could lead to serious security +issues, depending on the application. Note that the returned `*os.File` is an +`O_PATH` file descriptor, which is quite restricted. Callers will probably need +to use `Reopen` to get a more usable handle (this split is done to provide +useful features like PTY spawning and to avoid users accidentally opening bad +inodes that could cause a DoS). + +Callers need to be careful in how they use the returned `*os.File`. Usually it +is only safe to operate on the handle directly, and it is very easy to create a +security issue. [libpathrs][libpathrs] provides far more helpers to make using +these handles safer -- there is currently no plan to port them to +`filepath-securejoin`. + +`OpenatInRoot` is like `OpenInRoot` except that the root is provided using an +`*os.File`. This allows you to ensure that multiple `OpenatInRoot` (or +`MkdirAllHandle`) calls are operating on the same rootfs. + +> **NOTE**: Unlike `SecureJoin`, `OpenInRoot` will error out as soon as it hits +> a dangling symlink or non-existent path. This is in contrast to `SecureJoin` +> which treated non-existent components as though they were real directories, +> and would allow for partial resolution of dangling symlinks. These behaviours +> are at odds with how Linux treats non-existent paths and dangling symlinks, +> and so these are no longer allowed. + +#### `MkdirAll` #### + +```go +func MkdirAll(root, unsafePath string, mode int) error +func MkdirAllHandle(root *os.File, unsafePath string, mode int) (*os.File, error) +``` + +`MkdirAll` is a much safer version of + +```go +path, err := securejoin.SecureJoin(root, unsafePath) +err = os.MkdirAll(path, mode) +``` + +that protects against the same kinds of races that `OpenInRoot` protects +against. + +`MkdirAllHandle` is like `MkdirAll` except that the root is provided using an +`*os.File` (the reason for this is the same as with `OpenatInRoot`) and an +`*os.File` of the final created directory is returned (this directory is +guaranteed to be effectively identical to the directory created by +`MkdirAllHandle`, which is not possible to ensure by just using `OpenatInRoot` +after `MkdirAll`). + +> **NOTE**: Unlike `SecureJoin`, `MkdirAll` will error out as soon as it hits +> a dangling symlink or non-existent path. This is in contrast to `SecureJoin` +> which treated non-existent components as though they were real directories, +> and would allow for partial resolution of dangling symlinks. These behaviours +> are at odds with how Linux treats non-existent paths and dangling symlinks, +> and so these are no longer allowed. This means that `MkdirAll` will not +> create non-existent directories referenced by a dangling symlink. + ### License ### The license of this project is the same as Go, which is a BSD 3-clause license diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/VERSION b/tools/vendor/github.com/cyphar/filepath-securejoin/VERSION index abd410582..9e11b32fc 100644 --- a/tools/vendor/github.com/cyphar/filepath-securejoin/VERSION +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/VERSION @@ -1 +1 @@ -0.2.4 +0.3.1 diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/join.go b/tools/vendor/github.com/cyphar/filepath-securejoin/join.go index aa32b85fb..bd86a48b0 100644 --- a/tools/vendor/github.com/cyphar/filepath-securejoin/join.go +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/join.go @@ -1,5 +1,5 @@ // Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. -// Copyright (C) 2017 SUSE LLC. All rights reserved. +// Copyright (C) 2017-2024 SUSE LLC. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -11,7 +11,6 @@ package securejoin import ( - "bytes" "errors" "os" "path/filepath" @@ -19,6 +18,8 @@ import ( "syscall" ) +const maxSymlinkLimit = 255 + // IsNotExist tells you if err is an error that implies that either the path // accessed does not exist (or path components don't exist). This is // effectively a more broad version of os.IsNotExist. @@ -40,6 +41,12 @@ func IsNotExist(err error) bool { // replaced with symlinks on the filesystem) after this function has returned. // Such a symlink race is necessarily out-of-scope of SecureJoin. // +// NOTE: Due to the above limitation, Linux users are strongly encouraged to +// use OpenInRoot instead, which does safely protect against these kinds of +// attacks. There is no way to solve this problem with SecureJoinVFS because +// the API is fundamentally wrong (you cannot return a "safe" path string and +// guarantee it won't be modified afterwards). +// // Volume names in unsafePath are always discarded, regardless if they are // provided via direct input or when evaluating symlinks. Therefore: // @@ -51,71 +58,69 @@ func SecureJoinVFS(root, unsafePath string, vfs VFS) (string, error) { } unsafePath = filepath.FromSlash(unsafePath) - var path bytes.Buffer - n := 0 - for unsafePath != "" { - if n > 255 { - return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP} + var ( + currentPath string + remainingPath = unsafePath + linksWalked int + ) + for remainingPath != "" { + if v := filepath.VolumeName(remainingPath); v != "" { + remainingPath = remainingPath[len(v):] } - if v := filepath.VolumeName(unsafePath); v != "" { - unsafePath = unsafePath[len(v):] - } - - // Next path component, p. - i := strings.IndexRune(unsafePath, filepath.Separator) - var p string - if i == -1 { - p, unsafePath = unsafePath, "" + // Get the next path component. + var part string + if i := strings.IndexRune(remainingPath, filepath.Separator); i == -1 { + part, remainingPath = remainingPath, "" } else { - p, unsafePath = unsafePath[:i], unsafePath[i+1:] + part, remainingPath = remainingPath[:i], remainingPath[i+1:] } - // Create a cleaned path, using the lexical semantics of /../a, to - // create a "scoped" path component which can safely be joined to fullP - // for evaluation. At this point, path.String() doesn't contain any - // symlink components. - cleanP := filepath.Clean(string(filepath.Separator) + path.String() + p) - if cleanP == string(filepath.Separator) { - path.Reset() + // Apply the component lexically to the path we are building. + // currentPath does not contain any symlinks, and we are lexically + // dealing with a single component, so it's okay to do a filepath.Clean + // here. + nextPath := filepath.Join(string(filepath.Separator), currentPath, part) + if nextPath == string(filepath.Separator) { + currentPath = "" continue } - fullP := filepath.Clean(root + cleanP) + fullPath := root + string(filepath.Separator) + nextPath // Figure out whether the path is a symlink. - fi, err := vfs.Lstat(fullP) + fi, err := vfs.Lstat(fullPath) if err != nil && !IsNotExist(err) { return "", err } // Treat non-existent path components the same as non-symlinks (we // can't do any better here). if IsNotExist(err) || fi.Mode()&os.ModeSymlink == 0 { - path.WriteString(p) - path.WriteRune(filepath.Separator) + currentPath = nextPath continue } - // Only increment when we actually dereference a link. - n++ + // It's a symlink, so get its contents and expand it by prepending it + // to the yet-unparsed path. + linksWalked++ + if linksWalked > maxSymlinkLimit { + return "", &os.PathError{Op: "SecureJoin", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP} + } - // It's a symlink, expand it by prepending it to the yet-unparsed path. - dest, err := vfs.Readlink(fullP) + dest, err := vfs.Readlink(fullPath) if err != nil { return "", err } + remainingPath = dest + string(filepath.Separator) + remainingPath // Absolute symlinks reset any work we've already done. if filepath.IsAbs(dest) { - path.Reset() + currentPath = "" } - unsafePath = dest + string(filepath.Separator) + unsafePath } - // We have to clean path.String() here because it may contain '..' - // components that are entirely lexical, but would be misleading otherwise. - // And finally do a final clean to ensure that root is also lexically - // clean. - fullP := filepath.Clean(string(filepath.Separator) + path.String()) - return filepath.Clean(root + fullP), nil + // There should be no lexical components like ".." left in the path here, + // but for safety clean up the path before joining it to the root. + finalPath := filepath.Join(string(filepath.Separator), currentPath) + return filepath.Join(root, finalPath), nil } // SecureJoin is a wrapper around SecureJoinVFS that just uses the os.* library diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go new file mode 100644 index 000000000..290befa15 --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/lookup_linux.go @@ -0,0 +1,389 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "path" + "path/filepath" + "slices" + "strings" + + "golang.org/x/sys/unix" +) + +type symlinkStackEntry struct { + // (dir, remainingPath) is what we would've returned if the link didn't + // exist. This matches what openat2(RESOLVE_IN_ROOT) would return in + // this case. + dir *os.File + remainingPath string + // linkUnwalked is the remaining path components from the original + // Readlink which we have yet to walk. When this slice is empty, we + // drop the link from the stack. + linkUnwalked []string +} + +func (se symlinkStackEntry) String() string { + return fmt.Sprintf("<%s>/%s [->%s]", se.dir.Name(), se.remainingPath, strings.Join(se.linkUnwalked, "/")) +} + +func (se symlinkStackEntry) Close() { + _ = se.dir.Close() +} + +type symlinkStack []*symlinkStackEntry + +func (s *symlinkStack) IsEmpty() bool { + return s == nil || len(*s) == 0 +} + +func (s *symlinkStack) Close() { + if s != nil { + for _, link := range *s { + link.Close() + } + // TODO: Switch to clear once we switch to Go 1.21. + *s = nil + } +} + +var ( + errEmptyStack = errors.New("[internal] stack is empty") + errBrokenSymlinkStack = errors.New("[internal error] broken symlink stack") +) + +func (s *symlinkStack) popPart(part string) error { + if s == nil || s.IsEmpty() { + // If there is nothing in the symlink stack, then the part was from the + // real path provided by the user, and this is a no-op. + return errEmptyStack + } + if part == "." { + // "." components are no-ops -- we drop them when doing SwapLink. + return nil + } + + tailEntry := (*s)[len(*s)-1] + + // Double-check that we are popping the component we expect. + if len(tailEntry.linkUnwalked) == 0 { + return fmt.Errorf("%w: trying to pop component %q of empty stack entry %s", errBrokenSymlinkStack, part, tailEntry) + } + headPart := tailEntry.linkUnwalked[0] + if headPart != part { + return fmt.Errorf("%w: trying to pop component %q but the last stack entry is %s (%q)", errBrokenSymlinkStack, part, tailEntry, headPart) + } + + // Drop the component, but keep the entry around in case we are dealing + // with a "tail-chained" symlink. + tailEntry.linkUnwalked = tailEntry.linkUnwalked[1:] + return nil +} + +func (s *symlinkStack) PopPart(part string) error { + if err := s.popPart(part); err != nil { + if errors.Is(err, errEmptyStack) { + // Skip empty stacks. + err = nil + } + return err + } + + // Clean up any of the trailing stack entries that are empty. + for lastGood := len(*s) - 1; lastGood >= 0; lastGood-- { + entry := (*s)[lastGood] + if len(entry.linkUnwalked) > 0 { + break + } + entry.Close() + (*s) = (*s)[:lastGood] + } + return nil +} + +func (s *symlinkStack) push(dir *os.File, remainingPath, linkTarget string) error { + if s == nil { + return nil + } + // Split the link target and clean up any "" parts. + linkTargetParts := slices.DeleteFunc( + strings.Split(linkTarget, "/"), + func(part string) bool { return part == "" || part == "." }) + + // Copy the directory so the caller doesn't close our copy. + dirCopy, err := dupFile(dir) + if err != nil { + return err + } + + // Add to the stack. + *s = append(*s, &symlinkStackEntry{ + dir: dirCopy, + remainingPath: remainingPath, + linkUnwalked: linkTargetParts, + }) + return nil +} + +func (s *symlinkStack) SwapLink(linkPart string, dir *os.File, remainingPath, linkTarget string) error { + // If we are currently inside a symlink resolution, remove the symlink + // component from the last symlink entry, but don't remove the entry even + // if it's empty. If we are a "tail-chained" symlink (a trailing symlink we + // hit during a symlink resolution) we need to keep the old symlink until + // we finish the resolution. + if err := s.popPart(linkPart); err != nil { + if !errors.Is(err, errEmptyStack) { + return err + } + // Push the component regardless of whether the stack was empty. + } + return s.push(dir, remainingPath, linkTarget) +} + +func (s *symlinkStack) PopTopSymlink() (*os.File, string, bool) { + if s == nil || s.IsEmpty() { + return nil, "", false + } + tailEntry := (*s)[0] + *s = (*s)[1:] + return tailEntry.dir, tailEntry.remainingPath, true +} + +// partialLookupInRoot tries to lookup as much of the request path as possible +// within the provided root (a-la RESOLVE_IN_ROOT) and opens the final existing +// component of the requested path, returning a file handle to the final +// existing component and a string containing the remaining path components. +func partialLookupInRoot(root *os.File, unsafePath string) (*os.File, string, error) { + return lookupInRoot(root, unsafePath, true) +} + +func completeLookupInRoot(root *os.File, unsafePath string) (*os.File, error) { + handle, remainingPath, err := lookupInRoot(root, unsafePath, false) + if remainingPath != "" && err == nil { + // should never happen + err = fmt.Errorf("[bug] non-empty remaining path when doing a non-partial lookup: %q", remainingPath) + } + // lookupInRoot(partial=false) will always close the handle if an error is + // returned, so no need to double-check here. + return handle, err +} + +func lookupInRoot(root *os.File, unsafePath string, partial bool) (Handle *os.File, _ string, _ error) { + unsafePath = filepath.ToSlash(unsafePath) // noop + + // This is very similar to SecureJoin, except that we operate on the + // components using file descriptors. We then return the last component we + // managed open, along with the remaining path components not opened. + + // Try to use openat2 if possible. + if hasOpenat2() { + return lookupOpenat2(root, unsafePath, partial) + } + + // Get the "actual" root path from /proc/self/fd. This is necessary if the + // root is some magic-link like /proc/$pid/root, in which case we want to + // make sure when we do checkProcSelfFdPath that we are using the correct + // root path. + logicalRootPath, err := procSelfFdReadlink(root) + if err != nil { + return nil, "", fmt.Errorf("get real root path: %w", err) + } + + currentDir, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + defer func() { + // If a handle is not returned, close the internal handle. + if Handle == nil { + _ = currentDir.Close() + } + }() + + // symlinkStack is used to emulate how openat2(RESOLVE_IN_ROOT) treats + // dangling symlinks. If we hit a non-existent path while resolving a + // symlink, we need to return the (dir, remainingPath) that we had when we + // hit the symlink (treating the symlink as though it were a regular file). + // The set of (dir, remainingPath) sets is stored within the symlinkStack + // and we add and remove parts when we hit symlink and non-symlink + // components respectively. We need a stack because of recursive symlinks + // (symlinks that contain symlink components in their target). + // + // Note that the stack is ONLY used for book-keeping. All of the actual + // path walking logic is still based on currentPath/remainingPath and + // currentDir (as in SecureJoin). + var symStack *symlinkStack + if partial { + symStack = new(symlinkStack) + defer symStack.Close() + } + + var ( + linksWalked int + currentPath string + remainingPath = unsafePath + ) + for remainingPath != "" { + // Save the current remaining path so if the part is not real we can + // return the path including the component. + oldRemainingPath := remainingPath + + // Get the next path component. + var part string + if i := strings.IndexByte(remainingPath, '/'); i == -1 { + part, remainingPath = remainingPath, "" + } else { + part, remainingPath = remainingPath[:i], remainingPath[i+1:] + } + // If we hit an empty component, we need to treat it as though it is + // "." so that trailing "/" and "//" components on a non-directory + // correctly return the right error code. + if part == "" { + part = "." + } + + // Apply the component lexically to the path we are building. + // currentPath does not contain any symlinks, and we are lexically + // dealing with a single component, so it's okay to do a filepath.Clean + // here. + nextPath := path.Join("/", currentPath, part) + // If we logically hit the root, just clone the root rather than + // opening the part and doing all of the other checks. + if nextPath == "/" { + if err := symStack.PopPart(part); err != nil { + return nil, "", fmt.Errorf("walking into root with part %q failed: %w", part, err) + } + // Jump to root. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + _ = currentDir.Close() + currentDir = rootClone + currentPath = nextPath + continue + } + + // Try to open the next component. + nextDir, err := openatFile(currentDir, part, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + switch { + case err == nil: + st, err := nextDir.Stat() + if err != nil { + _ = nextDir.Close() + return nil, "", fmt.Errorf("stat component %q: %w", part, err) + } + + switch st.Mode() & os.ModeType { + case os.ModeSymlink: + // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See + // Linux commit 65cfc6722361 ("readlinkat(), fchownat() and + // fstatat() with empty relative pathnames"). + linkDest, err := readlinkatFile(nextDir, "") + // We don't need the handle anymore. + _ = nextDir.Close() + if err != nil { + return nil, "", err + } + + linksWalked++ + if linksWalked > maxSymlinkLimit { + return nil, "", &os.PathError{Op: "securejoin.lookupInRoot", Path: logicalRootPath + "/" + unsafePath, Err: unix.ELOOP} + } + + // Swap out the symlink's component for the link entry itself. + if err := symStack.SwapLink(part, currentDir, oldRemainingPath, linkDest); err != nil { + return nil, "", fmt.Errorf("walking into symlink %q failed: push symlink: %w", part, err) + } + + // Update our logical remaining path. + remainingPath = linkDest + "/" + remainingPath + // Absolute symlinks reset any work we've already done. + if path.IsAbs(linkDest) { + // Jump to root. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", fmt.Errorf("clone root fd: %w", err) + } + _ = currentDir.Close() + currentDir = rootClone + currentPath = "/" + } + + default: + // If we are dealing with a directory, simply walk into it. + _ = currentDir.Close() + currentDir = nextDir + currentPath = nextPath + + // The part was real, so drop it from the symlink stack. + if err := symStack.PopPart(part); err != nil { + return nil, "", fmt.Errorf("walking into directory %q failed: %w", part, err) + } + + // If we are operating on a .., make sure we haven't escaped. + // We only have to check for ".." here because walking down + // into a regular component component cannot cause you to + // escape. This mirrors the logic in RESOLVE_IN_ROOT, except we + // have to check every ".." rather than only checking after a + // rename or mount on the system. + if part == ".." { + // Make sure the root hasn't moved. + if err := checkProcSelfFdPath(logicalRootPath, root); err != nil { + return nil, "", fmt.Errorf("root path moved during lookup: %w", err) + } + // Make sure the path is what we expect. + fullPath := logicalRootPath + nextPath + if err := checkProcSelfFdPath(fullPath, currentDir); err != nil { + return nil, "", fmt.Errorf("walking into %q had unexpected result: %w", part, err) + } + } + } + + default: + if !partial { + return nil, "", err + } + // If there are any remaining components in the symlink stack, we + // are still within a symlink resolution and thus we hit a dangling + // symlink. So pretend that the first symlink in the stack we hit + // was an ENOENT (to match openat2). + if oldDir, remainingPath, ok := symStack.PopTopSymlink(); ok { + _ = currentDir.Close() + return oldDir, remainingPath, err + } + // We have hit a final component that doesn't exist, so we have our + // partial open result. Note that we have to use the OLD remaining + // path, since the lookup failed. + return currentDir, oldRemainingPath, err + } + } + + // If the unsafePath had a trailing slash, we need to make sure we try to + // do a relative "." open so that we will correctly return an error when + // the final component is a non-directory (to match openat2). In the + // context of openat2, a trailing slash and a trailing "/." are completely + // equivalent. + if strings.HasSuffix(unsafePath, "/") { + nextDir, err := openatFile(currentDir, ".", unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + if err != nil { + if !partial { + _ = currentDir.Close() + currentDir = nil + } + return currentDir, "", err + } + _ = currentDir.Close() + currentDir = nextDir + } + + // All of the components existed! + return currentDir, "", nil +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go new file mode 100644 index 000000000..ad2bd7973 --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/mkdir_linux.go @@ -0,0 +1,229 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "slices" + "strings" + + "golang.org/x/sys/unix" +) + +var ( + errInvalidMode = errors.New("invalid permission mode") + errPossibleAttack = errors.New("possible attack detected") +) + +// MkdirAllHandle is equivalent to MkdirAll, except that it is safer to use in +// two respects: +// +// - The caller provides the root directory as an *os.File (preferably O_PATH) +// handle. This means that the caller can be sure which root directory is +// being used. Note that this can be emulated by using /proc/self/fd/... as +// the root path with MkdirAll. +// +// - Once all of the directories have been created, an *os.File (O_PATH) handle +// to the directory at unsafePath is returned to the caller. This is done in +// an effectively-race-free way (an attacker would only be able to swap the +// final directory component), which is not possible to emulate with +// MkdirAll. +// +// In addition, the returned handle is obtained far more efficiently than doing +// a brand new lookup of unsafePath (such as with SecureJoin or openat2) after +// doing MkdirAll. If you intend to open the directory after creating it, you +// should use MkdirAllHandle. +func MkdirAllHandle(root *os.File, unsafePath string, mode int) (_ *os.File, Err error) { + // Make sure there are no os.FileMode bits set. + if mode&^0o7777 != 0 { + return nil, fmt.Errorf("%w for mkdir 0o%.3o", errInvalidMode, mode) + } + + // Try to open as much of the path as possible. + currentDir, remainingPath, err := partialLookupInRoot(root, unsafePath) + defer func() { + if Err != nil { + _ = currentDir.Close() + } + }() + if err != nil && !errors.Is(err, unix.ENOENT) { + return nil, fmt.Errorf("find existing subpath of %q: %w", unsafePath, err) + } + + // If there is an attacker deleting directories as we walk into them, + // detect this proactively. Note this is guaranteed to detect if the + // attacker deleted any part of the tree up to currentDir. + // + // Once we walk into a dead directory, partialLookupInRoot would not be + // able to walk further down the tree (directories must be empty before + // they are deleted), and if the attacker has removed the entire tree we + // can be sure that anything that was originally inside a dead directory + // must also be deleted and thus is a dead directory in its own right. + // + // This is mostly a quality-of-life check, because mkdir will simply fail + // later if the attacker deletes the tree after this check. + if err := isDeadInode(currentDir); err != nil { + return nil, fmt.Errorf("finding existing subpath of %q: %w", unsafePath, err) + } + + // Re-open the path to match the O_DIRECTORY reopen loop later (so that we + // always return a non-O_PATH handle). We also check that we actually got a + // directory. + if reopenDir, err := Reopen(currentDir, unix.O_DIRECTORY|unix.O_CLOEXEC); errors.Is(err, unix.ENOTDIR) { + return nil, fmt.Errorf("cannot create subdirectories in %q: %w", currentDir.Name(), unix.ENOTDIR) + } else if err != nil { + return nil, fmt.Errorf("re-opening handle to %q: %w", currentDir.Name(), err) + } else { + _ = currentDir.Close() + currentDir = reopenDir + } + + remainingParts := strings.Split(remainingPath, string(filepath.Separator)) + if slices.Contains(remainingParts, "..") { + // The path contained ".." components after the end of the "real" + // components. We could try to safely resolve ".." here but that would + // add a bunch of extra logic for something that it's not clear even + // needs to be supported. So just return an error. + // + // If we do filepath.Clean(remainingPath) then we end up with the + // problem that ".." can erase a trailing dangling symlink and produce + // a path that doesn't quite match what the user asked for. + return nil, fmt.Errorf("%w: yet-to-be-created path %q contains '..' components", unix.ENOENT, remainingPath) + } + + // Make sure the mode doesn't have any type bits. + mode &^= unix.S_IFMT + // What properties do we expect any newly created directories to have? + var ( + // While umask(2) is a per-thread property, and thus this value could + // vary between threads, a functioning Go program would LockOSThread + // threads with different umasks and so we don't need to LockOSThread + // for this entire mkdirat loop (if we are in the locked thread with a + // different umask, we are already locked and there's nothing for us to + // do -- and if not then it doesn't matter which thread we run on and + // there's nothing for us to do). + expectedMode = uint32(unix.S_IFDIR | (mode &^ getUmask())) + + // We would want to get the fs[ug]id here, but we can't access those + // from userspace. In practice, nobody uses setfs[ug]id() anymore, so + // just use the effective [ug]id (which is equivalent to the fs[ug]id + // for programs that don't use setfs[ug]id). + expectedUid = uint32(unix.Geteuid()) + expectedGid = uint32(unix.Getegid()) + ) + + // Create the remaining components. + for _, part := range remainingParts { + switch part { + case "", ".": + // Skip over no-op paths. + continue + } + + // NOTE: mkdir(2) will not follow trailing symlinks, so we can safely + // create the finaly component without worrying about symlink-exchange + // attacks. + if err := unix.Mkdirat(int(currentDir.Fd()), part, uint32(mode)); err != nil { + err = &os.PathError{Op: "mkdirat", Path: currentDir.Name() + "/" + part, Err: err} + // Make the error a bit nicer if the directory is dead. + if err2 := isDeadInode(currentDir); err2 != nil { + err = fmt.Errorf("%w (%w)", err, err2) + } + return nil, err + } + + // Get a handle to the next component. O_DIRECTORY means we don't need + // to use O_PATH. + var nextDir *os.File + if hasOpenat2() { + nextDir, err = openat2File(currentDir, part, &unix.OpenHow{ + Flags: unix.O_NOFOLLOW | unix.O_DIRECTORY | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_NO_XDEV, + }) + } else { + nextDir, err = openatFile(currentDir, part, unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + } + if err != nil { + return nil, err + } + _ = currentDir.Close() + currentDir = nextDir + + // Make sure that the directory matches what we expect. An attacker + // could have swapped the directory between us making it and opening + // it. There's no way for us to be sure that the directory is + // _precisely_ the same as the directory we created, but if we are in + // an empty directory with the same owner and mode as the one we + // created then there is nothing the attacker could do with this new + // directory that they couldn't do with the old one. + if stat, err := fstat(currentDir); err != nil { + return nil, fmt.Errorf("check newly created directory: %w", err) + } else { + if stat.Mode != expectedMode { + return nil, fmt.Errorf("%w: newly created directory %q has incorrect mode 0o%.3o (expected 0o%.3o)", errPossibleAttack, currentDir.Name(), stat.Mode, expectedMode) + } + if stat.Uid != expectedUid || stat.Gid != expectedGid { + return nil, fmt.Errorf("%w: newly created directory %q has incorrect owner %d:%d (expected %d:%d)", errPossibleAttack, currentDir.Name(), stat.Uid, stat.Gid, expectedUid, expectedGid) + } + // Check that the directory is empty. We only need to check for + // a single entry, and we should get EOF if the directory is + // empty. + _, err := currentDir.Readdirnames(1) + if !errors.Is(err, io.EOF) { + if err == nil { + err = fmt.Errorf("%w: newly created directory %q is non-empty", errPossibleAttack, currentDir.Name()) + } + return nil, fmt.Errorf("check if newly created directory %q is empty: %w", currentDir.Name(), err) + } + // Reset the offset. + _, _ = currentDir.Seek(0, unix.SEEK_SET) + } + } + return currentDir, nil +} + +// MkdirAll is a race-safe alternative to the Go stdlib's os.MkdirAll function, +// where the new directory is guaranteed to be within the root directory (if an +// attacker can move directories from inside the root to outside the root, the +// created directory tree might be outside of the root but the key constraint +// is that at no point will we walk outside of the directory tree we are +// creating). +// +// Effectively, MkdirAll(root, unsafePath, mode) is equivalent to +// +// path, _ := securejoin.SecureJoin(root, unsafePath) +// err := os.MkdirAll(path, mode) +// +// But is much safer. The above implementation is unsafe because if an attacker +// can modify the filesystem tree between SecureJoin and MkdirAll, it is +// possible for MkdirAll to resolve unsafe symlink components and create +// directories outside of the root. +// +// If you plan to open the directory after you have created it or want to use +// an open directory handle as the root, you should use MkdirAllHandle instead. +// This function is a wrapper around MkdirAllHandle. +// +// NOTE: The mode argument must be set the unix mode bits (unix.S_I...), not +// the Go generic mode bits (os.Mode...). +func MkdirAll(root, unsafePath string, mode int) error { + rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return err + } + defer rootDir.Close() + + f, err := MkdirAllHandle(rootDir, unsafePath, mode) + if err != nil { + return err + } + _ = f.Close() + return nil +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/open_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/open_linux.go new file mode 100644 index 000000000..52dce76f3 --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/open_linux.go @@ -0,0 +1,101 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "fmt" + "os" + "strconv" + + "golang.org/x/sys/unix" +) + +// OpenatInRoot is equivalent to OpenInRoot, except that the root is provided +// using an *os.File handle, to ensure that the correct root directory is used. +func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) { + handle, err := completeLookupInRoot(root, unsafePath) + if err != nil { + return nil, &os.PathError{Op: "securejoin.OpenInRoot", Path: unsafePath, Err: err} + } + return handle, nil +} + +// OpenInRoot safely opens the provided unsafePath within the root. +// Effectively, OpenInRoot(root, unsafePath) is equivalent to +// +// path, _ := securejoin.SecureJoin(root, unsafePath) +// handle, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC) +// +// But is much safer. The above implementation is unsafe because if an attacker +// can modify the filesystem tree between SecureJoin and OpenFile, it is +// possible for the returned file to be outside of the root. +// +// Note that the returned handle is an O_PATH handle, meaning that only a very +// limited set of operations will work on the handle. This is done to avoid +// accidentally opening an untrusted file that could cause issues (such as a +// disconnected TTY that could cause a DoS, or some other issue). In order to +// use the returned handle, you can "upgrade" it to a proper handle using +// Reopen. +func OpenInRoot(root, unsafePath string) (*os.File, error) { + rootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return nil, err + } + defer rootDir.Close() + return OpenatInRoot(rootDir, unsafePath) +} + +// Reopen takes an *os.File handle and re-opens it through /proc/self/fd. +// Reopen(file, flags) is effectively equivalent to +// +// fdPath := fmt.Sprintf("/proc/self/fd/%d", file.Fd()) +// os.OpenFile(fdPath, flags|unix.O_CLOEXEC) +// +// But with some extra hardenings to ensure that we are not tricked by a +// maliciously-configured /proc mount. While this attack scenario is not +// common, in container runtimes it is possible for higher-level runtimes to be +// tricked into configuring an unsafe /proc that can be used to attack file +// operations. See CVE-2019-19921 for more details. +func Reopen(handle *os.File, flags int) (*os.File, error) { + procRoot, err := getProcRoot() + if err != nil { + return nil, err + } + + // We can't operate on /proc/thread-self/fd/$n directly when doing a + // re-open, so we need to open /proc/thread-self/fd and then open a single + // final component. + procFdDir, closer, err := procThreadSelf(procRoot, "fd/") + if err != nil { + return nil, fmt.Errorf("get safe /proc/thread-self/fd handle: %w", err) + } + defer procFdDir.Close() + defer closer() + + // Try to detect if there is a mount on top of the magic-link we are about + // to open. If we are using unsafeHostProcRoot(), this could change after + // we check it (and there's nothing we can do about that) but for + // privateProcRoot() this should be guaranteed to be safe (at least since + // Linux 5.12[1], when anonymous mount namespaces were completely isolated + // from external mounts including mount propagation events). + // + // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts + // onto targets that reside on shared mounts"). + fdStr := strconv.Itoa(int(handle.Fd())) + if err := checkSymlinkOvermount(procRoot, procFdDir, fdStr); err != nil { + return nil, fmt.Errorf("check safety of /proc/thread-self/fd/%s magiclink: %w", fdStr, err) + } + + flags |= unix.O_CLOEXEC + // Rather than just wrapping openatFile, open-code it so we can copy + // handle.Name(). + reopenFd, err := unix.Openat(int(procFdDir.Fd()), fdStr, flags, 0) + if err != nil { + return nil, fmt.Errorf("reopen fd %d: %w", handle.Fd(), err) + } + return os.NewFile(uintptr(reopenFd), handle.Name()), nil +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go new file mode 100644 index 000000000..921b3e1d4 --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/openat2_linux.go @@ -0,0 +1,141 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strings" + "sync" + "testing" + + "golang.org/x/sys/unix" +) + +var ( + hasOpenat2Bool bool + hasOpenat2Once sync.Once + + testingForceHasOpenat2 *bool +) + +func hasOpenat2() bool { + if testing.Testing() && testingForceHasOpenat2 != nil { + return *testingForceHasOpenat2 + } + hasOpenat2Once.Do(func() { + fd, err := unix.Openat2(unix.AT_FDCWD, ".", &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_IN_ROOT, + }) + if err == nil { + hasOpenat2Bool = true + _ = unix.Close(fd) + } + }) + return hasOpenat2Bool +} + +func scopedLookupShouldRetry(how *unix.OpenHow, err error) bool { + // RESOLVE_IN_ROOT (and RESOLVE_BENEATH) can return -EAGAIN if we resolve + // ".." while a mount or rename occurs anywhere on the system. This could + // happen spuriously, or as the result of an attacker trying to mess with + // us during lookup. + // + // In addition, scoped lookups have a "safety check" at the end of + // complete_walk which will return -EXDEV if the final path is not in the + // root. + return how.Resolve&(unix.RESOLVE_IN_ROOT|unix.RESOLVE_BENEATH) != 0 && + (errors.Is(err, unix.EAGAIN) || errors.Is(err, unix.EXDEV)) +} + +const scopedLookupMaxRetries = 10 + +func openat2File(dir *os.File, path string, how *unix.OpenHow) (*os.File, error) { + fullPath := dir.Name() + "/" + path + // Make sure we always set O_CLOEXEC. + how.Flags |= unix.O_CLOEXEC + var tries int + for tries < scopedLookupMaxRetries { + fd, err := unix.Openat2(int(dir.Fd()), path, how) + if err != nil { + if scopedLookupShouldRetry(how, err) { + // We retry a couple of times to avoid the spurious errors, and + // if we are being attacked then returning -EAGAIN is the best + // we can do. + tries++ + continue + } + return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: err} + } + // If we are using RESOLVE_IN_ROOT, the name we generated may be wrong. + // NOTE: The procRoot code MUST NOT use RESOLVE_IN_ROOT, otherwise + // you'll get infinite recursion here. + if how.Resolve&unix.RESOLVE_IN_ROOT == unix.RESOLVE_IN_ROOT { + if actualPath, err := rawProcSelfFdReadlink(fd); err == nil { + fullPath = actualPath + } + } + return os.NewFile(uintptr(fd), fullPath), nil + } + return nil, &os.PathError{Op: "openat2", Path: fullPath, Err: errPossibleAttack} +} + +func lookupOpenat2(root *os.File, unsafePath string, partial bool) (*os.File, string, error) { + if !partial { + file, err := openat2File(root, unsafePath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS, + }) + return file, "", err + } + return partialLookupOpenat2(root, unsafePath) +} + +// partialLookupOpenat2 is an alternative implementation of +// partialLookupInRoot, using openat2(RESOLVE_IN_ROOT) to more safely get a +// handle to the deepest existing child of the requested path within the root. +func partialLookupOpenat2(root *os.File, unsafePath string) (*os.File, string, error) { + // TODO: Implement this as a git-bisect-like binary search. + + unsafePath = filepath.ToSlash(unsafePath) // noop + endIdx := len(unsafePath) + var lastError error + for endIdx > 0 { + subpath := unsafePath[:endIdx] + + handle, err := openat2File(root, subpath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS, + }) + if err == nil { + // Jump over the slash if we have a non-"" remainingPath. + if endIdx < len(unsafePath) { + endIdx += 1 + } + // We found a subpath! + return handle, unsafePath[endIdx:], lastError + } + if errors.Is(err, unix.ENOENT) || errors.Is(err, unix.ENOTDIR) { + // That path doesn't exist, let's try the next directory up. + endIdx = strings.LastIndexByte(subpath, '/') + lastError = err + continue + } + return nil, "", fmt.Errorf("open subpath: %w", err) + } + // If we couldn't open anything, the whole subpath is missing. Return a + // copy of the root fd so that the caller doesn't close this one by + // accident. + rootClone, err := dupFile(root) + if err != nil { + return nil, "", err + } + return rootClone, unsafePath, lastError +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go new file mode 100644 index 000000000..949fb5f2d --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/openat_linux.go @@ -0,0 +1,59 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "os" + "path/filepath" + + "golang.org/x/sys/unix" +) + +func dupFile(f *os.File) (*os.File, error) { + fd, err := unix.FcntlInt(f.Fd(), unix.F_DUPFD_CLOEXEC, 0) + if err != nil { + return nil, os.NewSyscallError("fcntl(F_DUPFD_CLOEXEC)", err) + } + return os.NewFile(uintptr(fd), f.Name()), nil +} + +func openatFile(dir *os.File, path string, flags int, mode int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.O_CLOEXEC + fd, err := unix.Openat(int(dir.Fd()), path, flags, uint32(mode)) + if err != nil { + return nil, &os.PathError{Op: "openat", Path: dir.Name() + "/" + path, Err: err} + } + // All of the paths we use with openatFile(2) are guaranteed to be + // lexically safe, so we can use path.Join here. + fullPath := filepath.Join(dir.Name(), path) + return os.NewFile(uintptr(fd), fullPath), nil +} + +func fstatatFile(dir *os.File, path string, flags int) (unix.Stat_t, error) { + var stat unix.Stat_t + if err := unix.Fstatat(int(dir.Fd()), path, &stat, flags); err != nil { + return stat, &os.PathError{Op: "fstatat", Path: dir.Name() + "/" + path, Err: err} + } + return stat, nil +} + +func readlinkatFile(dir *os.File, path string) (string, error) { + size := 4096 + for { + linkBuf := make([]byte, size) + n, err := unix.Readlinkat(int(dir.Fd()), path, linkBuf) + if err != nil { + return "", &os.PathError{Op: "readlinkat", Path: dir.Name() + "/" + path, Err: err} + } + if n != size { + return string(linkBuf[:n]), nil + } + // Possible truncation, resize the buffer. + size *= 2 + } +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go new file mode 100644 index 000000000..adf0bd08f --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/procfs_linux.go @@ -0,0 +1,474 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "errors" + "fmt" + "os" + "runtime" + "strconv" + "sync" + + "golang.org/x/sys/unix" +) + +func fstat(f *os.File) (unix.Stat_t, error) { + var stat unix.Stat_t + if err := unix.Fstat(int(f.Fd()), &stat); err != nil { + return stat, &os.PathError{Op: "fstat", Path: f.Name(), Err: err} + } + return stat, nil +} + +func fstatfs(f *os.File) (unix.Statfs_t, error) { + var statfs unix.Statfs_t + if err := unix.Fstatfs(int(f.Fd()), &statfs); err != nil { + return statfs, &os.PathError{Op: "fstatfs", Path: f.Name(), Err: err} + } + return statfs, nil +} + +// The kernel guarantees that the root inode of a procfs mount has an +// f_type of PROC_SUPER_MAGIC and st_ino of PROC_ROOT_INO. +const ( + procSuperMagic = 0x9fa0 // PROC_SUPER_MAGIC + procRootIno = 1 // PROC_ROOT_INO +) + +func verifyProcRoot(procRoot *os.File) error { + if statfs, err := fstatfs(procRoot); err != nil { + return err + } else if statfs.Type != procSuperMagic { + return fmt.Errorf("%w: incorrect procfs root filesystem type 0x%x", errUnsafeProcfs, statfs.Type) + } + if stat, err := fstat(procRoot); err != nil { + return err + } else if stat.Ino != procRootIno { + return fmt.Errorf("%w: incorrect procfs root inode number %d", errUnsafeProcfs, stat.Ino) + } + return nil +} + +var ( + hasNewMountApiBool bool + hasNewMountApiOnce sync.Once +) + +func hasNewMountApi() bool { + hasNewMountApiOnce.Do(func() { + // All of the pieces of the new mount API we use (fsopen, fsconfig, + // fsmount, open_tree) were added together in Linux 5.1[1,2], so we can + // just check for one of the syscalls and the others should also be + // available. + // + // Just try to use open_tree(2) to open a file without OPEN_TREE_CLONE. + // This is equivalent to openat(2), but tells us if open_tree is + // available (and thus all of the other basic new mount API syscalls). + // open_tree(2) is most light-weight syscall to test here. + // + // [1]: merge commit 400913252d09 + // [2]: + fd, err := unix.OpenTree(-int(unix.EBADF), "/", unix.OPEN_TREE_CLOEXEC) + if err == nil { + hasNewMountApiBool = true + _ = unix.Close(fd) + } + }) + return hasNewMountApiBool +} + +func fsopen(fsName string, flags int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.FSOPEN_CLOEXEC + fd, err := unix.Fsopen(fsName, flags) + if err != nil { + return nil, os.NewSyscallError("fsopen "+fsName, err) + } + return os.NewFile(uintptr(fd), "fscontext:"+fsName), nil +} + +func fsmount(ctx *os.File, flags, mountAttrs int) (*os.File, error) { + // Make sure we always set O_CLOEXEC. + flags |= unix.FSMOUNT_CLOEXEC + fd, err := unix.Fsmount(int(ctx.Fd()), flags, mountAttrs) + if err != nil { + return nil, os.NewSyscallError("fsmount "+ctx.Name(), err) + } + return os.NewFile(uintptr(fd), "fsmount:"+ctx.Name()), nil +} + +func newPrivateProcMount() (*os.File, error) { + procfsCtx, err := fsopen("proc", unix.FSOPEN_CLOEXEC) + if err != nil { + return nil, err + } + defer procfsCtx.Close() + + // Try to configure hidepid=ptraceable,subset=pid if possible, but ignore errors. + _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "hidepid", "ptraceable") + _ = unix.FsconfigSetString(int(procfsCtx.Fd()), "subset", "pid") + + // Get an actual handle. + if err := unix.FsconfigCreate(int(procfsCtx.Fd())); err != nil { + return nil, os.NewSyscallError("fsconfig create procfs", err) + } + return fsmount(procfsCtx, unix.FSMOUNT_CLOEXEC, unix.MS_RDONLY|unix.MS_NODEV|unix.MS_NOEXEC|unix.MS_NOSUID) +} + +func openTree(dir *os.File, path string, flags uint) (*os.File, error) { + dirFd := -int(unix.EBADF) + dirName := "." + if dir != nil { + dirFd = int(dir.Fd()) + dirName = dir.Name() + } + // Make sure we always set O_CLOEXEC. + flags |= unix.OPEN_TREE_CLOEXEC + fd, err := unix.OpenTree(dirFd, path, flags) + if err != nil { + return nil, &os.PathError{Op: "open_tree", Path: path, Err: err} + } + return os.NewFile(uintptr(fd), dirName+"/"+path), nil +} + +func clonePrivateProcMount() (_ *os.File, Err error) { + // Try to make a clone without using AT_RECURSIVE if we can. If this works, + // we can be sure there are no over-mounts and so if the root is valid then + // we're golden. Otherwise, we have to deal with over-mounts. + procfsHandle, err := openTree(nil, "/proc", unix.OPEN_TREE_CLONE) + if err != nil || testingForcePrivateProcRootOpenTreeAtRecursive(procfsHandle) { + procfsHandle, err = openTree(nil, "/proc", unix.OPEN_TREE_CLONE|unix.AT_RECURSIVE) + } + if err != nil { + return nil, fmt.Errorf("creating a detached procfs clone: %w", err) + } + defer func() { + if Err != nil { + _ = procfsHandle.Close() + } + }() + if err := verifyProcRoot(procfsHandle); err != nil { + return nil, err + } + return procfsHandle, nil +} + +func privateProcRoot() (*os.File, error) { + if !hasNewMountApi() || testingForceGetProcRootUnsafe() { + return nil, fmt.Errorf("new mount api: %w", unix.ENOTSUP) + } + // Try to create a new procfs mount from scratch if we can. This ensures we + // can get a procfs mount even if /proc is fake (for whatever reason). + procRoot, err := newPrivateProcMount() + if err != nil || testingForcePrivateProcRootOpenTree(procRoot) { + // Try to clone /proc then... + procRoot, err = clonePrivateProcMount() + } + return procRoot, err +} + +var ( + procRootHandle *os.File + procRootError error + procRootOnce sync.Once + + errUnsafeProcfs = errors.New("unsafe procfs detected") +) + +func unsafeHostProcRoot() (_ *os.File, Err error) { + procRoot, err := os.OpenFile("/proc", unix.O_PATH|unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0) + if err != nil { + return nil, err + } + defer func() { + if Err != nil { + _ = procRoot.Close() + } + }() + if err := verifyProcRoot(procRoot); err != nil { + return nil, err + } + return procRoot, nil +} + +func doGetProcRoot() (*os.File, error) { + procRoot, err := privateProcRoot() + if err != nil { + // Fall back to using a /proc handle if making a private mount failed. + // If we have openat2, at least we can avoid some kinds of over-mount + // attacks, but without openat2 there's not much we can do. + procRoot, err = unsafeHostProcRoot() + } + return procRoot, err +} + +func getProcRoot() (*os.File, error) { + procRootOnce.Do(func() { + procRootHandle, procRootError = doGetProcRoot() + }) + return procRootHandle, procRootError +} + +var ( + haveProcThreadSelf bool + haveProcThreadSelfOnce sync.Once +) + +type procThreadSelfCloser func() + +// procThreadSelf returns a handle to /proc/thread-self/ (or an +// equivalent handle on older kernels where /proc/thread-self doesn't exist). +// Once finished with the handle, you must call the returned closer function +// (runtime.UnlockOSThread). You must not pass the returned *os.File to other +// Go threads or use the handle after calling the closer. +// +// This is similar to ProcThreadSelf from runc, but with extra hardening +// applied and using *os.File. +func procThreadSelf(procRoot *os.File, subpath string) (_ *os.File, _ procThreadSelfCloser, Err error) { + haveProcThreadSelfOnce.Do(func() { + // If the kernel doesn't support thread-self, it doesn't matter which + // /proc handle we use. + _, err := fstatatFile(procRoot, "thread-self", unix.AT_SYMLINK_NOFOLLOW) + haveProcThreadSelf = (err == nil) + }) + + // We need to lock our thread until the caller is done with the handle + // because between getting the handle and using it we could get interrupted + // by the Go runtime and hit the case where the underlying thread is + // swapped out and the original thread is killed, resulting in + // pull-your-hair-out-hard-to-debug issues in the caller. + runtime.LockOSThread() + defer func() { + if Err != nil { + runtime.UnlockOSThread() + } + }() + + // Figure out what prefix we want to use. + threadSelf := "thread-self/" + if !haveProcThreadSelf || testingForceProcSelfTask() { + /// Pre-3.17 kernels don't have /proc/thread-self, so do it manually. + threadSelf = "self/task/" + strconv.Itoa(unix.Gettid()) + "/" + if _, err := fstatatFile(procRoot, threadSelf, unix.AT_SYMLINK_NOFOLLOW); err != nil || testingForceProcSelf() { + // In this case, we running in a pid namespace that doesn't match + // the /proc mount we have. This can happen inside runc. + // + // Unfortunately, there is no nice way to get the correct TID to + // use here because of the age of the kernel, so we have to just + // use /proc/self and hope that it works. + threadSelf = "self/" + } + } + + // Grab the handle. + var ( + handle *os.File + err error + ) + if hasOpenat2() { + // We prefer being able to use RESOLVE_NO_XDEV if we can, to be + // absolutely sure we are operating on a clean /proc handle that + // doesn't have any cheeky overmounts that could trick us (including + // symlink mounts on top of /proc/thread-self). RESOLVE_BENEATH isn't + // stricly needed, but just use it since we have it. + // + // NOTE: /proc/self is technically a magic-link (the contents of the + // symlink are generated dynamically), but it doesn't use + // nd_jump_link() so RESOLVE_NO_MAGICLINKS allows it. + // + // NOTE: We MUST NOT use RESOLVE_IN_ROOT here, as openat2File uses + // procSelfFdReadlink to clean up the returned f.Name() if we use + // RESOLVE_IN_ROOT (which would lead to an infinite recursion). + handle, err = openat2File(procRoot, threadSelf+subpath, &unix.OpenHow{ + Flags: unix.O_PATH | unix.O_NOFOLLOW | unix.O_CLOEXEC, + Resolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_XDEV | unix.RESOLVE_NO_MAGICLINKS, + }) + if err != nil { + return nil, nil, fmt.Errorf("%w: %w", errUnsafeProcfs, err) + } + } else { + handle, err = openatFile(procRoot, threadSelf+subpath, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0) + if err != nil { + return nil, nil, fmt.Errorf("%w: %w", errUnsafeProcfs, err) + } + defer func() { + if Err != nil { + _ = handle.Close() + } + }() + // We can't detect bind-mounts of different parts of procfs on top of + // /proc (a-la RESOLVE_NO_XDEV), but we can at least be sure that we + // aren't on the wrong filesystem here. + if statfs, err := fstatfs(handle); err != nil { + return nil, nil, err + } else if statfs.Type != procSuperMagic { + return nil, nil, fmt.Errorf("%w: incorrect /proc/self/fd filesystem type 0x%x", errUnsafeProcfs, statfs.Type) + } + } + return handle, runtime.UnlockOSThread, nil +} + +var ( + hasStatxMountIdBool bool + hasStatxMountIdOnce sync.Once +) + +func hasStatxMountId() bool { + hasStatxMountIdOnce.Do(func() { + var ( + stx unix.Statx_t + // We don't care which mount ID we get. The kernel will give us the + // unique one if it is supported. + wantStxMask uint32 = unix.STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID + ) + err := unix.Statx(-int(unix.EBADF), "/", 0, int(wantStxMask), &stx) + hasStatxMountIdBool = (err == nil && (stx.Mask&wantStxMask != 0)) + }) + return hasStatxMountIdBool +} + +func getMountId(dir *os.File, path string) (uint64, error) { + // If we don't have statx(STATX_MNT_ID*) support, we can't do anything. + if !hasStatxMountId() { + return 0, nil + } + + var ( + stx unix.Statx_t + // We don't care which mount ID we get. The kernel will give us the + // unique one if it is supported. + wantStxMask uint32 = unix.STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID + ) + + err := unix.Statx(int(dir.Fd()), path, unix.AT_EMPTY_PATH|unix.AT_SYMLINK_NOFOLLOW, int(wantStxMask), &stx) + if stx.Mask&wantStxMask == 0 { + // It's not a kernel limitation, for some reason we couldn't get a + // mount ID. Assume it's some kind of attack. + err = fmt.Errorf("%w: could not get mount id", errUnsafeProcfs) + } + if err != nil { + return 0, &os.PathError{Op: "statx(STATX_MNT_ID_...)", Path: dir.Name() + "/" + path, Err: err} + } + return stx.Mnt_id, nil +} + +func checkSymlinkOvermount(procRoot *os.File, dir *os.File, path string) error { + // Get the mntId of our procfs handle. + expectedMountId, err := getMountId(procRoot, "") + if err != nil { + return err + } + // Get the mntId of the target magic-link. + gotMountId, err := getMountId(dir, path) + if err != nil { + return err + } + // As long as the directory mount is alive, even with wrapping mount IDs, + // we would expect to see a different mount ID here. (Of course, if we're + // using unsafeHostProcRoot() then an attaker could change this after we + // did this check.) + if expectedMountId != gotMountId { + return fmt.Errorf("%w: symlink %s/%s has an overmount obscuring the real link (mount ids do not match %d != %d)", errUnsafeProcfs, dir.Name(), path, expectedMountId, gotMountId) + } + return nil +} + +func doRawProcSelfFdReadlink(procRoot *os.File, fd int) (string, error) { + fdPath := fmt.Sprintf("fd/%d", fd) + procFdLink, closer, err := procThreadSelf(procRoot, fdPath) + if err != nil { + return "", fmt.Errorf("get safe /proc/thread-self/%s handle: %w", fdPath, err) + } + defer procFdLink.Close() + defer closer() + + // Try to detect if there is a mount on top of the magic-link. Since we use the handle directly + // provide to the closure. If the closure uses the handle directly, this + // should be safe in general (a mount on top of the path afterwards would + // not affect the handle itself) and will definitely be safe if we are + // using privateProcRoot() (at least since Linux 5.12[1], when anonymous + // mount namespaces were completely isolated from external mounts including + // mount propagation events). + // + // [1]: Linux commit ee2e3f50629f ("mount: fix mounting of detached mounts + // onto targets that reside on shared mounts"). + if err := checkSymlinkOvermount(procRoot, procFdLink, ""); err != nil { + return "", fmt.Errorf("check safety of /proc/thread-self/fd/%d magiclink: %w", fd, err) + } + + // readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See Linux commit + // 65cfc6722361 ("readlinkat(), fchownat() and fstatat() with empty + // relative pathnames"). + return readlinkatFile(procFdLink, "") +} + +func rawProcSelfFdReadlink(fd int) (string, error) { + procRoot, err := getProcRoot() + if err != nil { + return "", err + } + return doRawProcSelfFdReadlink(procRoot, fd) +} + +func procSelfFdReadlink(f *os.File) (string, error) { + return rawProcSelfFdReadlink(int(f.Fd())) +} + +var ( + errPossibleBreakout = errors.New("possible breakout detected") + errInvalidDirectory = errors.New("wandered into deleted directory") + errDeletedInode = errors.New("cannot verify path of deleted inode") +) + +func isDeadInode(file *os.File) error { + // If the nlink of a file drops to 0, there is an attacker deleting + // directories during our walk, which could result in weird /proc values. + // It's better to error out in this case. + stat, err := fstat(file) + if err != nil { + return fmt.Errorf("check for dead inode: %w", err) + } + if stat.Nlink == 0 { + err := errDeletedInode + if stat.Mode&unix.S_IFMT == unix.S_IFDIR { + err = errInvalidDirectory + } + return fmt.Errorf("%w %q", err, file.Name()) + } + return nil +} + +func getUmask() int { + // umask is a per-thread property, but it is inherited by children, so we + // need to lock our OS thread to make sure that no other goroutine runs in + // this thread and no goroutines are spawned from this thread until we + // revert to the old umask. + // + // We could parse /proc/self/status to avoid this get-set problem, but + // /proc/thread-self requires LockOSThread anyway, so there's no real + // benefit over just using umask(2). + runtime.LockOSThread() + umask := unix.Umask(0) + unix.Umask(umask) + runtime.UnlockOSThread() + return umask +} + +func checkProcSelfFdPath(path string, file *os.File) error { + if err := isDeadInode(file); err != nil { + return err + } + actualPath, err := procSelfFdReadlink(file) + if err != nil { + return fmt.Errorf("get path of handle: %w", err) + } + if actualPath != path { + return fmt.Errorf("%w: handle path %q doesn't match expected path %q", errPossibleBreakout, actualPath, path) + } + return nil +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/testing_mocks_linux.go b/tools/vendor/github.com/cyphar/filepath-securejoin/testing_mocks_linux.go new file mode 100644 index 000000000..a3aedf03d --- /dev/null +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/testing_mocks_linux.go @@ -0,0 +1,68 @@ +//go:build linux + +// Copyright (C) 2024 SUSE LLC. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package securejoin + +import ( + "os" + "testing" +) + +type forceGetProcRootLevel int + +const ( + forceGetProcRootDefault forceGetProcRootLevel = iota + forceGetProcRootOpenTree // force open_tree() + forceGetProcRootOpenTreeAtRecursive // force open_tree(AT_RECURSIVE) + forceGetProcRootUnsafe // force open() +) + +var testingForceGetProcRoot *forceGetProcRootLevel + +func testingCheckClose(check bool, f *os.File) bool { + if check { + if f != nil { + _ = f.Close() + } + return true + } + return false +} + +func testingForcePrivateProcRootOpenTree(f *os.File) bool { + return testing.Testing() && testingForceGetProcRoot != nil && + testingCheckClose(*testingForceGetProcRoot >= forceGetProcRootOpenTree, f) +} + +func testingForcePrivateProcRootOpenTreeAtRecursive(f *os.File) bool { + return testing.Testing() && testingForceGetProcRoot != nil && + testingCheckClose(*testingForceGetProcRoot >= forceGetProcRootOpenTreeAtRecursive, f) +} + +func testingForceGetProcRootUnsafe() bool { + return testing.Testing() && testingForceGetProcRoot != nil && + *testingForceGetProcRoot >= forceGetProcRootUnsafe +} + +type forceProcThreadSelfLevel int + +const ( + forceProcThreadSelfDefault forceProcThreadSelfLevel = iota + forceProcSelfTask + forceProcSelf +) + +var testingForceProcThreadSelf *forceProcThreadSelfLevel + +func testingForceProcSelfTask() bool { + return testing.Testing() && testingForceProcThreadSelf != nil && + *testingForceProcThreadSelf >= forceProcSelfTask +} + +func testingForceProcSelf() bool { + return testing.Testing() && testingForceProcThreadSelf != nil && + *testingForceProcThreadSelf >= forceProcSelf +} diff --git a/tools/vendor/github.com/cyphar/filepath-securejoin/vfs.go b/tools/vendor/github.com/cyphar/filepath-securejoin/vfs.go index a82a5eae1..6e27c7dd8 100644 --- a/tools/vendor/github.com/cyphar/filepath-securejoin/vfs.go +++ b/tools/vendor/github.com/cyphar/filepath-securejoin/vfs.go @@ -1,4 +1,4 @@ -// Copyright (C) 2017 SUSE LLC. All rights reserved. +// Copyright (C) 2017-2024 SUSE LLC. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/tools/vendor/github.com/docker/docker-credential-helpers/client/client.go b/tools/vendor/github.com/docker/docker-credential-helpers/client/client.go index 678153cf8..7ca5ab722 100644 --- a/tools/vendor/github.com/docker/docker-credential-helpers/client/client.go +++ b/tools/vendor/github.com/docker/docker-credential-helpers/client/client.go @@ -16,11 +16,9 @@ func isValidCredsMessage(msg string) error { if credentials.IsCredentialsMissingServerURLMessage(msg) { return credentials.NewErrCredentialsMissingServerURL() } - if credentials.IsCredentialsMissingUsernameMessage(msg) { return credentials.NewErrCredentialsMissingUsername() } - return nil } @@ -36,13 +34,10 @@ func Store(program ProgramFunc, creds *credentials.Credentials) error { out, err := cmd.Output() if err != nil { - t := strings.TrimSpace(string(out)) - - if isValidErr := isValidCredsMessage(t); isValidErr != nil { + if isValidErr := isValidCredsMessage(string(out)); isValidErr != nil { err = isValidErr } - - return fmt.Errorf("error storing credentials - err: %v, out: `%s`", err, t) + return fmt.Errorf("error storing credentials - err: %v, out: `%s`", err, strings.TrimSpace(string(out))) } return nil @@ -55,17 +50,15 @@ func Get(program ProgramFunc, serverURL string) (*credentials.Credentials, error out, err := cmd.Output() if err != nil { - t := strings.TrimSpace(string(out)) - - if credentials.IsErrCredentialsNotFoundMessage(t) { + if credentials.IsErrCredentialsNotFoundMessage(string(out)) { return nil, credentials.NewErrCredentialsNotFound() } - if isValidErr := isValidCredsMessage(t); isValidErr != nil { + if isValidErr := isValidCredsMessage(string(out)); isValidErr != nil { err = isValidErr } - return nil, fmt.Errorf("error getting credentials - err: %v, out: `%s`", err, t) + return nil, fmt.Errorf("error getting credentials - err: %v, out: `%s`", err, strings.TrimSpace(string(out))) } resp := &credentials.Credentials{ diff --git a/tools/vendor/github.com/docker/docker-credential-helpers/credentials/error.go b/tools/vendor/github.com/docker/docker-credential-helpers/credentials/error.go index 8fa4d5d25..2283d5a44 100644 --- a/tools/vendor/github.com/docker/docker-credential-helpers/credentials/error.go +++ b/tools/vendor/github.com/docker/docker-credential-helpers/credentials/error.go @@ -1,6 +1,9 @@ package credentials -import "errors" +import ( + "errors" + "strings" +) const ( // ErrCredentialsNotFound standardizes the not found error, so every helper returns @@ -47,7 +50,7 @@ func IsErrCredentialsNotFound(err error) bool { // This function helps to check messages returned by an // external program via its standard output. func IsErrCredentialsNotFoundMessage(err string) bool { - return err == errCredentialsNotFoundMessage + return strings.TrimSpace(err) == errCredentialsNotFoundMessage } // errCredentialsMissingServerURL represents an error raised @@ -104,7 +107,7 @@ func IsCredentialsMissingServerURL(err error) bool { // IsCredentialsMissingServerURLMessage checks for an // errCredentialsMissingServerURL in the error message. func IsCredentialsMissingServerURLMessage(err string) bool { - return err == errCredentialsMissingServerURLMessage + return strings.TrimSpace(err) == errCredentialsMissingServerURLMessage } // IsCredentialsMissingUsername returns true if the error @@ -117,5 +120,5 @@ func IsCredentialsMissingUsername(err error) bool { // IsCredentialsMissingUsernameMessage checks for an // errCredentialsMissingUsername in the error message. func IsCredentialsMissingUsernameMessage(err string) bool { - return err == errCredentialsMissingUsernameMessage + return strings.TrimSpace(err) == errCredentialsMissingUsernameMessage } diff --git a/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/encode.go b/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/encode.go index a1819b16a..2e6eca448 100644 --- a/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/encode.go +++ b/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/encode.go @@ -167,6 +167,19 @@ func Marshal(v any) ([]byte, error) { return buf, nil } +func MarshalEscaped(v any, escape bool) ([]byte, error) { + e := newEncodeState() + defer encodeStatePool.Put(e) + + err := e.marshal(v, encOpts{escapeHTML: escape}) + if err != nil { + return nil, err + } + buf := append([]byte(nil), e.Bytes()...) + + return buf, nil +} + // MarshalIndent is like Marshal but applies Indent to format the output. // Each JSON element in the output will begin on a new line beginning with prefix // followed by one or more copies of indent according to the indentation nesting. diff --git a/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/stream.go b/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/stream.go index 1442ef29e..5598ce11f 100644 --- a/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/stream.go +++ b/tools/vendor/github.com/evanphx/json-patch/v5/internal/json/stream.go @@ -6,7 +6,7 @@ package json import ( "bytes" - "errors" + "encoding/json" "io" ) @@ -259,27 +259,7 @@ func (enc *Encoder) SetEscapeHTML(on bool) { // RawMessage is a raw encoded JSON value. // It implements Marshaler and Unmarshaler and can // be used to delay JSON decoding or precompute a JSON encoding. -type RawMessage []byte - -// MarshalJSON returns m as the JSON encoding of m. -func (m RawMessage) MarshalJSON() ([]byte, error) { - if m == nil { - return []byte("null"), nil - } - return m, nil -} - -// UnmarshalJSON sets *m to a copy of data. -func (m *RawMessage) UnmarshalJSON(data []byte) error { - if m == nil { - return errors.New("json.RawMessage: UnmarshalJSON on nil pointer") - } - *m = append((*m)[0:0], data...) - return nil -} - -var _ Marshaler = (*RawMessage)(nil) -var _ Unmarshaler = (*RawMessage)(nil) +type RawMessage = json.RawMessage // A Token holds a value of one of these types: // diff --git a/tools/vendor/github.com/evanphx/json-patch/v5/merge.go b/tools/vendor/github.com/evanphx/json-patch/v5/merge.go index bbe9f85f2..f79caf313 100644 --- a/tools/vendor/github.com/evanphx/json-patch/v5/merge.go +++ b/tools/vendor/github.com/evanphx/json-patch/v5/merge.go @@ -10,26 +10,26 @@ import ( "github.com/evanphx/json-patch/v5/internal/json" ) -func merge(cur, patch *lazyNode, mergeMerge bool) *lazyNode { - curDoc, err := cur.intoDoc() +func merge(cur, patch *lazyNode, mergeMerge bool, options *ApplyOptions) *lazyNode { + curDoc, err := cur.intoDoc(options) if err != nil { - pruneNulls(patch) + pruneNulls(patch, options) return patch } - patchDoc, err := patch.intoDoc() + patchDoc, err := patch.intoDoc(options) if err != nil { return patch } - mergeDocs(curDoc, patchDoc, mergeMerge) + mergeDocs(curDoc, patchDoc, mergeMerge, options) return cur } -func mergeDocs(doc, patch *partialDoc, mergeMerge bool) { +func mergeDocs(doc, patch *partialDoc, mergeMerge bool, options *ApplyOptions) { for k, v := range patch.obj { if v == nil { if mergeMerge { @@ -45,55 +45,55 @@ func mergeDocs(doc, patch *partialDoc, mergeMerge bool) { } doc.obj[k] = nil } else { - _ = doc.remove(k, &ApplyOptions{}) + _ = doc.remove(k, options) } } else { cur, ok := doc.obj[k] if !ok || cur == nil { if !mergeMerge { - pruneNulls(v) + pruneNulls(v, options) } - _ = doc.set(k, v, &ApplyOptions{}) + _ = doc.set(k, v, options) } else { - _ = doc.set(k, merge(cur, v, mergeMerge), &ApplyOptions{}) + _ = doc.set(k, merge(cur, v, mergeMerge, options), options) } } } } -func pruneNulls(n *lazyNode) { - sub, err := n.intoDoc() +func pruneNulls(n *lazyNode, options *ApplyOptions) { + sub, err := n.intoDoc(options) if err == nil { - pruneDocNulls(sub) + pruneDocNulls(sub, options) } else { ary, err := n.intoAry() if err == nil { - pruneAryNulls(ary) + pruneAryNulls(ary, options) } } } -func pruneDocNulls(doc *partialDoc) *partialDoc { +func pruneDocNulls(doc *partialDoc, options *ApplyOptions) *partialDoc { for k, v := range doc.obj { if v == nil { _ = doc.remove(k, &ApplyOptions{}) } else { - pruneNulls(v) + pruneNulls(v, options) } } return doc } -func pruneAryNulls(ary *partialArray) *partialArray { +func pruneAryNulls(ary *partialArray, options *ApplyOptions) *partialArray { newAry := []*lazyNode{} for _, v := range ary.nodes { if v != nil { - pruneNulls(v) + pruneNulls(v, options) } newAry = append(newAry, v) } @@ -128,11 +128,17 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { return nil, errBadJSONPatch } - doc := &partialDoc{} + options := NewApplyOptions() + + doc := &partialDoc{ + opts: options, + } docErr := doc.UnmarshalJSON(docData) - patch := &partialDoc{} + patch := &partialDoc{ + opts: options, + } patchErr := patch.UnmarshalJSON(patchData) @@ -158,7 +164,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { if mergeMerge { doc = patch } else { - doc = pruneDocNulls(patch) + doc = pruneDocNulls(patch, options) } } else { patchAry := &partialArray{} @@ -172,7 +178,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { return nil, errBadJSONPatch } - pruneAryNulls(patchAry) + pruneAryNulls(patchAry, options) out, patchErr := json.Marshal(patchAry.nodes) @@ -183,7 +189,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) { return out, nil } } else { - mergeDocs(doc, patch, mergeMerge) + mergeDocs(doc, patch, mergeMerge, options) } return json.Marshal(doc) diff --git a/tools/vendor/github.com/evanphx/json-patch/v5/patch.go b/tools/vendor/github.com/evanphx/json-patch/v5/patch.go index a3bbf1c73..7a7f71c8b 100644 --- a/tools/vendor/github.com/evanphx/json-patch/v5/patch.go +++ b/tools/vendor/github.com/evanphx/json-patch/v5/patch.go @@ -38,6 +38,8 @@ var ( ErrInvalid = errors.New("invalid state detected") ErrInvalidIndex = errors.New("invalid index referenced") + ErrExpectedObject = errors.New("invalid value, expected object") + rawJSONArray = []byte("[]") rawJSONObject = []byte("{}") rawJSONNull = []byte("null") @@ -60,6 +62,8 @@ type partialDoc struct { self *lazyNode keys []string obj map[string]*lazyNode + + opts *ApplyOptions } type partialArray struct { @@ -90,6 +94,8 @@ type ApplyOptions struct { // EnsurePathExistsOnAdd instructs json-patch to recursively create the missing parts of path on "add" operation. // Default to false. EnsurePathExistsOnAdd bool + + EscapeHTML bool } // NewApplyOptions creates a default set of options for calls to ApplyWithOptions. @@ -99,6 +105,7 @@ func NewApplyOptions() *ApplyOptions { AccumulatedCopySizeLimit: AccumulatedCopySizeLimit, AllowMissingPathOnRemove: false, EnsurePathExistsOnAdd: false, + EscapeHTML: true, } } @@ -134,16 +141,28 @@ func (n *lazyNode) UnmarshalJSON(data []byte) error { } func (n *partialDoc) TrustMarshalJSON(buf *bytes.Buffer) error { + if n.obj == nil { + return ErrExpectedObject + } + if err := buf.WriteByte('{'); err != nil { return err } + escaped := true + + // n.opts should always be set, but in case we missed a case, + // guard. + if n.opts != nil { + escaped = n.opts.EscapeHTML + } + for i, k := range n.keys { if i > 0 { if err := buf.WriteByte(','); err != nil { return err } } - key, err := json.Marshal(k) + key, err := json.MarshalEscaped(k, escaped) if err != nil { return err } @@ -153,7 +172,7 @@ func (n *partialDoc) TrustMarshalJSON(buf *bytes.Buffer) error { if err := buf.WriteByte(':'); err != nil { return err } - value, err := json.Marshal(n.obj[k]) + value, err := json.MarshalEscaped(n.obj[k], escaped) if err != nil { return err } @@ -194,11 +213,11 @@ func (n *partialArray) RedirectMarshalJSON() (interface{}, error) { return n.nodes, nil } -func deepCopy(src *lazyNode) (*lazyNode, int, error) { +func deepCopy(src *lazyNode, options *ApplyOptions) (*lazyNode, int, error) { if src == nil { return nil, 0, nil } - a, err := json.Marshal(src) + a, err := json.MarshalEscaped(src, options.EscapeHTML) if err != nil { return nil, 0, err } @@ -216,7 +235,7 @@ func (n *lazyNode) nextByte() byte { return s[0] } -func (n *lazyNode) intoDoc() (*partialDoc, error) { +func (n *lazyNode) intoDoc(options *ApplyOptions) (*partialDoc, error) { if n.which == eDoc { return n.doc, nil } @@ -235,6 +254,7 @@ func (n *lazyNode) intoDoc() (*partialDoc, error) { return nil, ErrInvalid } + n.doc.opts = options if err != nil { return nil, err } @@ -545,7 +565,7 @@ func findObject(pd *container, path string, options *ApplyOptions) (container, s return nil, "" } } else { - doc, err = next.intoDoc() + doc, err = next.intoDoc(options) if err != nil { return nil, "" @@ -557,6 +577,10 @@ func findObject(pd *container, path string, options *ApplyOptions) (container, s } func (d *partialDoc) set(key string, val *lazyNode, options *ApplyOptions) error { + if d.obj == nil { + return ErrExpectedObject + } + found := false for _, k := range d.keys { if k == key { @@ -579,6 +603,11 @@ func (d *partialDoc) get(key string, options *ApplyOptions) (*lazyNode, error) { if key == "" { return d.self, nil } + + if d.obj == nil { + return nil, ErrExpectedObject + } + v, ok := d.obj[key] if !ok { return v, errors.Wrapf(ErrMissing, "unable to get nonexistent key: %s", key) @@ -587,6 +616,10 @@ func (d *partialDoc) get(key string, options *ApplyOptions) (*lazyNode, error) { } func (d *partialDoc) remove(key string, options *ApplyOptions) error { + if d.obj == nil { + return ErrExpectedObject + } + _, ok := d.obj[key] if !ok { if options.AllowMissingPathOnRemove { @@ -750,6 +783,7 @@ func (p Patch) add(doc *container, op Operation, options *ApplyOptions) error { } else { pd = &partialDoc{ self: val, + opts: options, } } @@ -855,7 +889,7 @@ func ensurePathExists(pd *container, path string, options *ApplyOptions) error { newNode := newLazyNode(newRawMessage(rawJSONObject)) doc.add(part, newNode, options) - doc, err = newNode.intoDoc() + doc, err = newNode.intoDoc(options) if err != nil { return err } @@ -868,7 +902,7 @@ func ensurePathExists(pd *container, path string, options *ApplyOptions) error { return err } } else { - doc, err = target.intoDoc() + doc, err = target.intoDoc(options) if err != nil { return err @@ -954,6 +988,8 @@ func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) erro if !val.tryAry() { return errors.Wrapf(err, "replace operation value must be object or array") } + } else { + val.doc.opts = options } } @@ -1115,7 +1151,7 @@ func (p Patch) copy(doc *container, op Operation, accumulatedCopySize *int64, op return errors.Wrapf(ErrMissing, "copy operation does not apply: doc is missing destination path: %s", path) } - valCopy, sz, err := deepCopy(val) + valCopy, sz, err := deepCopy(val, options) if err != nil { return errors.Wrapf(err, "error while performing deep copy") } @@ -1202,6 +1238,7 @@ func (p Patch) ApplyIndentWithOptions(doc []byte, indent string, options *ApplyO } else { pd = &partialDoc{ self: self, + opts: options, } } @@ -1238,11 +1275,18 @@ func (p Patch) ApplyIndentWithOptions(doc []byte, indent string, options *ApplyO } } - if indent != "" { - return json.MarshalIndent(pd, "", indent) + data, err := json.MarshalEscaped(pd, options.EscapeHTML) + if err != nil { + return nil, err + } + + if indent == "" { + return data, nil } - return json.Marshal(pd) + var buf bytes.Buffer + json.Indent(&buf, data, "", indent) + return buf.Bytes(), nil } // From http://tools.ietf.org/html/rfc6901#section-4 : diff --git a/tools/vendor/github.com/go-openapi/jsonpointer/pointer.go b/tools/vendor/github.com/go-openapi/jsonpointer/pointer.go index d975773d4..d970c7cf4 100644 --- a/tools/vendor/github.com/go-openapi/jsonpointer/pointer.go +++ b/tools/vendor/github.com/go-openapi/jsonpointer/pointer.go @@ -264,7 +264,7 @@ func (p *Pointer) set(node, data any, nameProvider *swag.NameProvider) error { knd := reflect.ValueOf(node).Kind() if knd != reflect.Ptr && knd != reflect.Struct && knd != reflect.Map && knd != reflect.Slice && knd != reflect.Array { - return fmt.Errorf("only structs, pointers, maps and slices are supported for setting values") + return errors.New("only structs, pointers, maps and slices are supported for setting values") } if nameProvider == nil { diff --git a/tools/vendor/github.com/go-openapi/swag/initialism_index.go b/tools/vendor/github.com/go-openapi/swag/initialism_index.go index 2b2e46310..20a359bb6 100644 --- a/tools/vendor/github.com/go-openapi/swag/initialism_index.go +++ b/tools/vendor/github.com/go-openapi/swag/initialism_index.go @@ -176,7 +176,7 @@ func (m *indexOfInitialisms) add(key string) *indexOfInitialisms { func (m *indexOfInitialisms) sorted() (result []string) { m.sortMutex.Lock() defer m.sortMutex.Unlock() - m.index.Range(func(key, value interface{}) bool { + m.index.Range(func(key, _ interface{}) bool { k := key.(string) result = append(result, k) return true diff --git a/tools/vendor/github.com/go-openapi/swag/string_bytes.go b/tools/vendor/github.com/go-openapi/swag/string_bytes.go index c52d6bf71..90745d5ca 100644 --- a/tools/vendor/github.com/go-openapi/swag/string_bytes.go +++ b/tools/vendor/github.com/go-openapi/swag/string_bytes.go @@ -2,21 +2,7 @@ package swag import "unsafe" -type internalString struct { - Data unsafe.Pointer - Len int -} - // hackStringBytes returns the (unsafe) underlying bytes slice of a string. -func hackStringBytes(str string) []byte { - p := (*internalString)(unsafe.Pointer(&str)).Data - return unsafe.Slice((*byte)(p), len(str)) -} - -/* - * go1.20 version (for when go mod moves to a go1.20 requirement): - func hackStringBytes(str string) []byte { return unsafe.Slice(unsafe.StringData(str), len(str)) } -*/ diff --git a/tools/vendor/github.com/go-openapi/swag/yaml.go b/tools/vendor/github.com/go-openapi/swag/yaml.go index a8c4e359e..f59e02593 100644 --- a/tools/vendor/github.com/go-openapi/swag/yaml.go +++ b/tools/vendor/github.com/go-openapi/swag/yaml.go @@ -16,6 +16,7 @@ package swag import ( "encoding/json" + "errors" "fmt" "path/filepath" "reflect" @@ -50,7 +51,7 @@ func BytesToYAMLDoc(data []byte) (interface{}, error) { return nil, err } if document.Kind != yaml.DocumentNode || len(document.Content) != 1 || document.Content[0].Kind != yaml.MappingNode { - return nil, fmt.Errorf("only YAML documents that are objects are supported") + return nil, errors.New("only YAML documents that are objects are supported") } return &document, nil } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go index 172d218e4..1555efae0 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go @@ -15,6 +15,7 @@ package authn import ( + "context" "encoding/base64" "encoding/json" "fmt" @@ -27,6 +28,22 @@ type Authenticator interface { Authorization() (*AuthConfig, error) } +// ContextAuthenticator is like Authenticator, but allows for context to be passed in. +type ContextAuthenticator interface { + // Authorization returns the value to use in an http transport's Authorization header. + AuthorizationContext(context.Context) (*AuthConfig, error) +} + +// Authorization calls AuthorizationContext with ctx if the given [Authenticator] implements [ContextAuthenticator], +// otherwise it calls Resolve with the given [Resource]. +func Authorization(ctx context.Context, authn Authenticator) (*AuthConfig, error) { + if actx, ok := authn.(ContextAuthenticator); ok { + return actx.AuthorizationContext(ctx) + } + + return authn.Authorization() +} + // AuthConfig contains authorization information for connecting to a Registry // Inlined what we use from github.com/docker/cli/cli/config/types type AuthConfig struct { diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go index 99e0b81c8..f4c452bdc 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go @@ -15,6 +15,7 @@ package authn import ( + "context" "os" "path/filepath" "sync" @@ -45,6 +46,11 @@ type Keychain interface { Resolve(Resource) (Authenticator, error) } +// ContextKeychain is like Keychain, but allows for context to be passed in. +type ContextKeychain interface { + ResolveContext(context.Context, Resource) (Authenticator, error) +} + // defaultKeychain implements Keychain with the semantics of the standard Docker // credential keychain. type defaultKeychain struct { @@ -62,8 +68,23 @@ const ( DefaultAuthKey = "https://" + name.DefaultRegistry + "/v1/" ) -// Resolve implements Keychain. +// Resolve calls ResolveContext with ctx if the given [Keychain] implements [ContextKeychain], +// otherwise it calls Resolve with the given [Resource]. +func Resolve(ctx context.Context, keychain Keychain, target Resource) (Authenticator, error) { + if rctx, ok := keychain.(ContextKeychain); ok { + return rctx.ResolveContext(ctx, target) + } + + return keychain.Resolve(target) +} + +// ResolveContext implements ContextKeychain. func (dk *defaultKeychain) Resolve(target Resource) (Authenticator, error) { + return dk.ResolveContext(context.Background(), target) +} + +// Resolve implements Keychain. +func (dk *defaultKeychain) ResolveContext(ctx context.Context, target Resource) (Authenticator, error) { dk.mu.Lock() defer dk.mu.Unlock() @@ -86,8 +107,8 @@ func (dk *defaultKeychain) Resolve(target Resource) (Authenticator, error) { // config.Load, which may fail if the config can't be parsed. // // If neither was found, look for Podman's auth at - // $XDG_RUNTIME_DIR/containers/auth.json and attempt to load it as a - // Docker config. + // $REGISTRY_AUTH_FILE or $XDG_RUNTIME_DIR/containers/auth.json + // and attempt to load it as a Docker config. // // If neither are found, fallback to Anonymous. var cf *configfile.ConfigFile @@ -96,16 +117,28 @@ func (dk *defaultKeychain) Resolve(target Resource) (Authenticator, error) { if err != nil { return nil, err } - } else { + } else if fileExists(os.Getenv("REGISTRY_AUTH_FILE")) { + f, err := os.Open(os.Getenv("REGISTRY_AUTH_FILE")) + if err != nil { + return nil, err + } + defer f.Close() + cf, err = config.LoadFromReader(f) + if err != nil { + return nil, err + } + } else if fileExists(filepath.Join(os.Getenv("XDG_RUNTIME_DIR"), "containers/auth.json")) { f, err := os.Open(filepath.Join(os.Getenv("XDG_RUNTIME_DIR"), "containers/auth.json")) if err != nil { - return Anonymous, nil + return nil, err } defer f.Close() cf, err = config.LoadFromReader(f) if err != nil { return nil, err } + } else { + return Anonymous, nil } // See: @@ -168,6 +201,10 @@ func NewKeychainFromHelper(h Helper) Keychain { return wrapper{h} } type wrapper struct{ h Helper } func (w wrapper) Resolve(r Resource) (Authenticator, error) { + return w.ResolveContext(context.Background(), r) +} + +func (w wrapper) ResolveContext(ctx context.Context, r Resource) (Authenticator, error) { u, p, err := w.h.Get(r.RegistryStr()) if err != nil { return Anonymous, nil @@ -194,8 +231,12 @@ type refreshingKeychain struct { } func (r *refreshingKeychain) Resolve(target Resource) (Authenticator, error) { + return r.ResolveContext(context.Background(), target) +} + +func (r *refreshingKeychain) ResolveContext(ctx context.Context, target Resource) (Authenticator, error) { last := time.Now() - auth, err := r.keychain.Resolve(target) + auth, err := Resolve(ctx, r.keychain, target) if err != nil || auth == Anonymous { return auth, err } @@ -224,17 +265,21 @@ type refreshing struct { } func (r *refreshing) Authorization() (*AuthConfig, error) { + return r.AuthorizationContext(context.Background()) +} + +func (r *refreshing) AuthorizationContext(ctx context.Context) (*AuthConfig, error) { r.Lock() defer r.Unlock() if r.cached == nil || r.expired() { r.last = r.now() - auth, err := r.keychain.Resolve(r.target) + auth, err := Resolve(ctx, r.keychain, r.target) if err != nil { return nil, err } r.cached = auth } - return r.cached.Authorization() + return Authorization(ctx, r.cached) } func (r *refreshing) now() time.Time { diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go index 3b1804f5d..fe241a0fd 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go @@ -14,6 +14,8 @@ package authn +import "context" + type multiKeychain struct { keychains []Keychain } @@ -28,8 +30,12 @@ func NewMultiKeychain(kcs ...Keychain) Keychain { // Resolve implements Keychain. func (mk *multiKeychain) Resolve(target Resource) (Authenticator, error) { + return mk.ResolveContext(context.Background(), target) +} + +func (mk *multiKeychain) ResolveContext(ctx context.Context, target Resource) (Authenticator, error) { for _, kc := range mk.keychains { - auth, err := kc.Resolve(target) + auth, err := Resolve(ctx, kc, target) if err != nil { return nil, err } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/name/digest.go b/tools/vendor/github.com/google/go-containerregistry/pkg/name/digest.go index c049c1ef4..28f6967ba 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/name/digest.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/name/digest.go @@ -17,6 +17,7 @@ package name import ( // nolint: depguard _ "crypto/sha256" // Recommended by go-digest. + "encoding/json" "strings" "github.com/opencontainers/go-digest" @@ -59,6 +60,25 @@ func (d Digest) String() string { return d.original } +// MarshalJSON formats the digest into a string for JSON serialization. +func (d Digest) MarshalJSON() ([]byte, error) { + return json.Marshal(d.String()) +} + +// UnmarshalJSON parses a JSON string into a Digest. +func (d *Digest) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + n, err := NewDigest(s) + if err != nil { + return err + } + *d = n + return nil +} + // NewDigest returns a new Digest representing the given name. func NewDigest(name string, opts ...Option) (Digest, error) { // Split on "@" diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go index d6e35c391..19e4d1db8 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go @@ -22,6 +22,8 @@ import ( "io" "os" "path/filepath" + "runtime" + "sync" "github.com/google/go-containerregistry/pkg/logs" v1 "github.com/google/go-containerregistry/pkg/v1" @@ -37,6 +39,9 @@ var layoutFile = `{ "imageLayoutVersion": "1.0.0" }` +// renameMutex guards os.Rename calls in AppendImage on Windows only. +var renameMutex sync.Mutex + // AppendImage writes a v1.Image to the Path and updates // the index.json to reference it. func (l Path) AppendImage(img v1.Image, options ...Option) error { @@ -259,6 +264,11 @@ func (l Path) writeBlob(hash v1.Hash, size int64, rc io.ReadCloser, renamer func } renamePath := l.path("blobs", finalHash.Algorithm, finalHash.Hex) + + if runtime.GOOS == "windows" { + renameMutex.Lock() + defer renameMutex.Unlock() + } return os.Rename(w.Name(), renamePath) } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go index 4e61002be..d77b37c0c 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go @@ -47,7 +47,7 @@ type fetcher struct { func makeFetcher(ctx context.Context, target resource, o *options) (*fetcher, error) { auth := o.auth if o.keychain != nil { - kauth, err := o.keychain.Resolve(target) + kauth, err := authn.Resolve(ctx, o.keychain, target) if err != nil { return nil, err } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go index 1c07bd475..332d8ca0a 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go @@ -125,6 +125,20 @@ func (p *Pusher) writer(ctx context.Context, repo name.Repository, o *options) ( return rw, rw.init(ctx) } +func (p *Pusher) Put(ctx context.Context, ref name.Reference, t Taggable) error { + w, err := p.writer(ctx, ref.Context(), p.o) + if err != nil { + return err + } + + m, err := taggableToManifest(t) + if err != nil { + return err + } + + return w.commitManifest(ctx, ref, m) +} + func (p *Pusher) Push(ctx context.Context, ref name.Reference, t Taggable) error { w, err := p.writer(ctx, ref.Context(), p.o) if err != nil { diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go index e30ca57ed..48e3835f9 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go @@ -66,7 +66,7 @@ func (f *fetcher) fetchReferrers(ctx context.Context, filter map[string]string, } var b []byte - if resp.StatusCode == http.StatusOK { + if resp.StatusCode == http.StatusOK && resp.Header.Get("Content-Type") == string(types.OCIImageIndex) { b, err = io.ReadAll(resp.Body) if err != nil { return nil, err diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go index fdb362b76..f2452469d 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go @@ -33,7 +33,7 @@ var _ http.RoundTripper = (*basicTransport)(nil) // RoundTrip implements http.RoundTripper func (bt *basicTransport) RoundTrip(in *http.Request) (*http.Response, error) { if bt.auth != authn.Anonymous { - auth, err := bt.auth.Authorization() + auth, err := authn.Authorization(in.Context(), bt.auth) if err != nil { return nil, err } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go index cb1567496..be3bec9c3 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go @@ -49,7 +49,7 @@ func Exchange(ctx context.Context, reg name.Registry, auth authn.Authenticator, if err != nil { return nil, err } - authcfg, err := auth.Authorization() + authcfg, err := authn.Authorization(ctx, auth) if err != nil { return nil, err } @@ -190,7 +190,7 @@ func (bt *bearerTransport) RoundTrip(in *http.Request) (*http.Response, error) { // The basic token exchange is attempted first, falling back to the oauth flow. // If the IdentityToken is set, this indicates that we should start with the oauth flow. func (bt *bearerTransport) refresh(ctx context.Context) error { - auth, err := bt.basic.Authorization() + auth, err := authn.Authorization(ctx, bt.basic) if err != nil { return err } @@ -295,7 +295,7 @@ func canonicalAddress(host, scheme string) (address string) { // https://docs.docker.com/registry/spec/auth/oauth/ func (bt *bearerTransport) refreshOauth(ctx context.Context) ([]byte, error) { - auth, err := bt.basic.Authorization() + auth, err := authn.Authorization(ctx, bt.basic) if err != nil { return nil, err } diff --git a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go index 04a3989a6..30fe59051 100644 --- a/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go +++ b/tools/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go @@ -76,7 +76,7 @@ type writer struct { func makeWriter(ctx context.Context, repo name.Repository, ls []v1.Layer, o *options) (*writer, error) { auth := o.auth if o.keychain != nil { - kauth, err := o.keychain.Resolve(repo) + kauth, err := authn.Resolve(ctx, o.keychain, repo) if err != nil { return nil, err } @@ -709,5 +709,5 @@ func Put(ref name.Reference, t Taggable, options ...Option) error { if err != nil { return err } - return newPusher(o).Push(o.context, ref, t) + return newPusher(o).Put(o.context, ref, t) } diff --git a/tools/vendor/github.com/joelanford/ignore/.golangci.yml b/tools/vendor/github.com/joelanford/ignore/.golangci.yml new file mode 100644 index 000000000..74cfe977e --- /dev/null +++ b/tools/vendor/github.com/joelanford/ignore/.golangci.yml @@ -0,0 +1,17 @@ +run: + timeout: 5m +linters: + disable-all: true + enable: + - govet + - errcheck + - staticcheck + - unused + - gosimple + - structcheck + - varcheck + - ineffassign + - deadcode + - typecheck + - gofmt + - goconst diff --git a/tools/vendor/github.com/klauspost/compress/.goreleaser.yml b/tools/vendor/github.com/klauspost/compress/.goreleaser.yml index 4c28dff46..a22953805 100644 --- a/tools/vendor/github.com/klauspost/compress/.goreleaser.yml +++ b/tools/vendor/github.com/klauspost/compress/.goreleaser.yml @@ -3,7 +3,6 @@ before: hooks: - ./gen.sh - - go install mvdan.cc/garble@v0.10.1 builds: - @@ -32,7 +31,6 @@ builds: - mips64le goarm: - 7 - gobinary: garble - id: "s2d" binary: s2d @@ -59,7 +57,6 @@ builds: - mips64le goarm: - 7 - gobinary: garble - id: "s2sx" binary: s2sx @@ -87,7 +84,6 @@ builds: - mips64le goarm: - 7 - gobinary: garble archives: - diff --git a/tools/vendor/github.com/klauspost/compress/README.md b/tools/vendor/github.com/klauspost/compress/README.md index 7e83f583c..05c7359e4 100644 --- a/tools/vendor/github.com/klauspost/compress/README.md +++ b/tools/vendor/github.com/klauspost/compress/README.md @@ -16,6 +16,30 @@ This package provides various compression algorithms. # changelog +* Feb 5th, 2024 - [1.17.6](https://github.com/klauspost/compress/releases/tag/v1.17.6) + * zstd: Fix incorrect repeat coding in best mode https://github.com/klauspost/compress/pull/923 + * s2: Fix DecodeConcurrent deadlock on errors https://github.com/klauspost/compress/pull/925 + +* Jan 26th, 2024 - [v1.17.5](https://github.com/klauspost/compress/releases/tag/v1.17.5) + * flate: Fix reset with dictionary on custom window encodes https://github.com/klauspost/compress/pull/912 + * zstd: Add Frame header encoding and stripping https://github.com/klauspost/compress/pull/908 + * zstd: Limit better/best default window to 8MB https://github.com/klauspost/compress/pull/913 + * zstd: Speed improvements by @greatroar in https://github.com/klauspost/compress/pull/896 https://github.com/klauspost/compress/pull/910 + * s2: Fix callbacks for skippable blocks and disallow 0xfe (Padding) by @Jille in https://github.com/klauspost/compress/pull/916 https://github.com/klauspost/compress/pull/917 +https://github.com/klauspost/compress/pull/919 https://github.com/klauspost/compress/pull/918 + +* Dec 1st, 2023 - [v1.17.4](https://github.com/klauspost/compress/releases/tag/v1.17.4) + * huff0: Speed up symbol counting by @greatroar in https://github.com/klauspost/compress/pull/887 + * huff0: Remove byteReader by @greatroar in https://github.com/klauspost/compress/pull/886 + * gzhttp: Allow overriding decompression on transport https://github.com/klauspost/compress/pull/892 + * gzhttp: Clamp compression level https://github.com/klauspost/compress/pull/890 + * gzip: Error out if reserved bits are set https://github.com/klauspost/compress/pull/891 + +* Nov 15th, 2023 - [v1.17.3](https://github.com/klauspost/compress/releases/tag/v1.17.3) + * fse: Fix max header size https://github.com/klauspost/compress/pull/881 + * zstd: Improve better/best compression https://github.com/klauspost/compress/pull/877 + * gzhttp: Fix missing content type on Close https://github.com/klauspost/compress/pull/883 + * Oct 22nd, 2023 - [v1.17.2](https://github.com/klauspost/compress/releases/tag/v1.17.2) * zstd: Fix rare *CORRUPTION* output in "best" mode. See https://github.com/klauspost/compress/pull/876 @@ -31,6 +55,10 @@ This package provides various compression algorithms. * s2: Do 2 overlapping match checks https://github.com/klauspost/compress/pull/839 * flate: Add amd64 assembly matchlen https://github.com/klauspost/compress/pull/837 * gzip: Copy bufio.Reader on Reset by @thatguystone in https://github.com/klauspost/compress/pull/860 + +
+ See changes to v1.16.x + * July 1st, 2023 - [v1.16.7](https://github.com/klauspost/compress/releases/tag/v1.16.7) * zstd: Fix default level first dictionary encode https://github.com/klauspost/compress/pull/829 @@ -69,6 +97,7 @@ This package provides various compression algorithms. * s2: Add LZ4 block converter. https://github.com/klauspost/compress/pull/748 * s2: Support io.ReaderAt in ReadSeeker. https://github.com/klauspost/compress/pull/747 * s2c/s2sx: Use concurrent decoding. https://github.com/klauspost/compress/pull/746 +
See changes to v1.15.x @@ -536,6 +565,8 @@ the stateless compress described below. For compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). +To disable all assembly add `-tags=noasm`. This works across all packages. + # Stateless compression This package offers stateless compression as a special option for gzip/deflate. @@ -554,7 +585,7 @@ For direct deflate use, NewStatelessWriter and StatelessDeflate are available. S A `bufio.Writer` can of course be used to control write sizes. For example, to use a 4KB buffer: -``` +```go // replace 'ioutil.Discard' with your output. gzw, err := gzip.NewWriterLevel(ioutil.Discard, gzip.StatelessCompression) if err != nil { diff --git a/tools/vendor/github.com/klauspost/compress/flate/deflate.go b/tools/vendor/github.com/klauspost/compress/flate/deflate.go deleted file mode 100644 index de912e187..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/deflate.go +++ /dev/null @@ -1,1017 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Copyright (c) 2015 Klaus Post -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - "math" -) - -const ( - NoCompression = 0 - BestSpeed = 1 - BestCompression = 9 - DefaultCompression = -1 - - // HuffmanOnly disables Lempel-Ziv match searching and only performs Huffman - // entropy encoding. This mode is useful in compressing data that has - // already been compressed with an LZ style algorithm (e.g. Snappy or LZ4) - // that lacks an entropy encoder. Compression gains are achieved when - // certain bytes in the input stream occur more frequently than others. - // - // Note that HuffmanOnly produces a compressed output that is - // RFC 1951 compliant. That is, any valid DEFLATE decompressor will - // continue to be able to decompress this output. - HuffmanOnly = -2 - ConstantCompression = HuffmanOnly // compatibility alias. - - logWindowSize = 15 - windowSize = 1 << logWindowSize - windowMask = windowSize - 1 - logMaxOffsetSize = 15 // Standard DEFLATE - minMatchLength = 4 // The smallest match that the compressor looks for - maxMatchLength = 258 // The longest match for the compressor - minOffsetSize = 1 // The shortest offset that makes any sense - - // The maximum number of tokens we will encode at the time. - // Smaller sizes usually creates less optimal blocks. - // Bigger can make context switching slow. - // We use this for levels 7-9, so we make it big. - maxFlateBlockTokens = 1 << 15 - maxStoreBlockSize = 65535 - hashBits = 17 // After 17 performance degrades - hashSize = 1 << hashBits - hashMask = (1 << hashBits) - 1 - hashShift = (hashBits + minMatchLength - 1) / minMatchLength - maxHashOffset = 1 << 28 - - skipNever = math.MaxInt32 - - debugDeflate = false -) - -type compressionLevel struct { - good, lazy, nice, chain, fastSkipHashing, level int -} - -// Compression levels have been rebalanced from zlib deflate defaults -// to give a bigger spread in speed and compression. -// See https://blog.klauspost.com/rebalancing-deflate-compression-levels/ -var levels = []compressionLevel{ - {}, // 0 - // Level 1-6 uses specialized algorithm - values not used - {0, 0, 0, 0, 0, 1}, - {0, 0, 0, 0, 0, 2}, - {0, 0, 0, 0, 0, 3}, - {0, 0, 0, 0, 0, 4}, - {0, 0, 0, 0, 0, 5}, - {0, 0, 0, 0, 0, 6}, - // Levels 7-9 use increasingly more lazy matching - // and increasingly stringent conditions for "good enough". - {8, 12, 16, 24, skipNever, 7}, - {16, 30, 40, 64, skipNever, 8}, - {32, 258, 258, 1024, skipNever, 9}, -} - -// advancedState contains state for the advanced levels, with bigger hash tables, etc. -type advancedState struct { - // deflate state - length int - offset int - maxInsertIndex int - chainHead int - hashOffset int - - ii uint16 // position of last match, intended to overflow to reset. - - // input window: unprocessed data is window[index:windowEnd] - index int - hashMatch [maxMatchLength + minMatchLength]uint32 - - // Input hash chains - // hashHead[hashValue] contains the largest inputIndex with the specified hash value - // If hashHead[hashValue] is within the current window, then - // hashPrev[hashHead[hashValue] & windowMask] contains the previous index - // with the same hash value. - hashHead [hashSize]uint32 - hashPrev [windowSize]uint32 -} - -type compressor struct { - compressionLevel - - h *huffmanEncoder - w *huffmanBitWriter - - // compression algorithm - fill func(*compressor, []byte) int // copy data to window - step func(*compressor) // process window - - window []byte - windowEnd int - blockStart int // window index where current tokens start - err error - - // queued output tokens - tokens tokens - fast fastEnc - state *advancedState - - sync bool // requesting flush - byteAvailable bool // if true, still need to process window[index-1]. -} - -func (d *compressor) fillDeflate(b []byte) int { - s := d.state - if s.index >= 2*windowSize-(minMatchLength+maxMatchLength) { - // shift the window by windowSize - //copy(d.window[:], d.window[windowSize:2*windowSize]) - *(*[windowSize]byte)(d.window) = *(*[windowSize]byte)(d.window[windowSize:]) - s.index -= windowSize - d.windowEnd -= windowSize - if d.blockStart >= windowSize { - d.blockStart -= windowSize - } else { - d.blockStart = math.MaxInt32 - } - s.hashOffset += windowSize - if s.hashOffset > maxHashOffset { - delta := s.hashOffset - 1 - s.hashOffset -= delta - s.chainHead -= delta - // Iterate over slices instead of arrays to avoid copying - // the entire table onto the stack (Issue #18625). - for i, v := range s.hashPrev[:] { - if int(v) > delta { - s.hashPrev[i] = uint32(int(v) - delta) - } else { - s.hashPrev[i] = 0 - } - } - for i, v := range s.hashHead[:] { - if int(v) > delta { - s.hashHead[i] = uint32(int(v) - delta) - } else { - s.hashHead[i] = 0 - } - } - } - } - n := copy(d.window[d.windowEnd:], b) - d.windowEnd += n - return n -} - -func (d *compressor) writeBlock(tok *tokens, index int, eof bool) error { - if index > 0 || eof { - var window []byte - if d.blockStart <= index { - window = d.window[d.blockStart:index] - } - d.blockStart = index - //d.w.writeBlock(tok, eof, window) - d.w.writeBlockDynamic(tok, eof, window, d.sync) - return d.w.err - } - return nil -} - -// writeBlockSkip writes the current block and uses the number of tokens -// to determine if the block should be stored on no matches, or -// only huffman encoded. -func (d *compressor) writeBlockSkip(tok *tokens, index int, eof bool) error { - if index > 0 || eof { - if d.blockStart <= index { - window := d.window[d.blockStart:index] - // If we removed less than a 64th of all literals - // we huffman compress the block. - if int(tok.n) > len(window)-int(tok.n>>6) { - d.w.writeBlockHuff(eof, window, d.sync) - } else { - // Write a dynamic huffman block. - d.w.writeBlockDynamic(tok, eof, window, d.sync) - } - } else { - d.w.writeBlock(tok, eof, nil) - } - d.blockStart = index - return d.w.err - } - return nil -} - -// fillWindow will fill the current window with the supplied -// dictionary and calculate all hashes. -// This is much faster than doing a full encode. -// Should only be used after a start/reset. -func (d *compressor) fillWindow(b []byte) { - // Do not fill window if we are in store-only or huffman mode. - if d.level <= 0 { - return - } - if d.fast != nil { - // encode the last data, but discard the result - if len(b) > maxMatchOffset { - b = b[len(b)-maxMatchOffset:] - } - d.fast.Encode(&d.tokens, b) - d.tokens.Reset() - return - } - s := d.state - // If we are given too much, cut it. - if len(b) > windowSize { - b = b[len(b)-windowSize:] - } - // Add all to window. - n := copy(d.window[d.windowEnd:], b) - - // Calculate 256 hashes at the time (more L1 cache hits) - loops := (n + 256 - minMatchLength) / 256 - for j := 0; j < loops; j++ { - startindex := j * 256 - end := startindex + 256 + minMatchLength - 1 - if end > n { - end = n - } - tocheck := d.window[startindex:end] - dstSize := len(tocheck) - minMatchLength + 1 - - if dstSize <= 0 { - continue - } - - dst := s.hashMatch[:dstSize] - bulkHash4(tocheck, dst) - var newH uint32 - for i, val := range dst { - di := i + startindex - newH = val & hashMask - // Get previous value with the same hash. - // Our chain should point to the previous value. - s.hashPrev[di&windowMask] = s.hashHead[newH] - // Set the head of the hash chain to us. - s.hashHead[newH] = uint32(di + s.hashOffset) - } - } - // Update window information. - d.windowEnd += n - s.index = n -} - -// Try to find a match starting at index whose length is greater than prevSize. -// We only look at chainCount possibilities before giving up. -// pos = s.index, prevHead = s.chainHead-s.hashOffset, prevLength=minMatchLength-1, lookahead -func (d *compressor) findMatch(pos int, prevHead int, lookahead int) (length, offset int, ok bool) { - minMatchLook := maxMatchLength - if lookahead < minMatchLook { - minMatchLook = lookahead - } - - win := d.window[0 : pos+minMatchLook] - - // We quit when we get a match that's at least nice long - nice := len(win) - pos - if d.nice < nice { - nice = d.nice - } - - // If we've got a match that's good enough, only look in 1/4 the chain. - tries := d.chain - length = minMatchLength - 1 - - wEnd := win[pos+length] - wPos := win[pos:] - minIndex := pos - windowSize - if minIndex < 0 { - minIndex = 0 - } - offset = 0 - - if d.chain < 100 { - for i := prevHead; tries > 0; tries-- { - if wEnd == win[i+length] { - n := matchLen(win[i:i+minMatchLook], wPos) - if n > length { - length = n - offset = pos - i - ok = true - if n >= nice { - // The match is good enough that we don't try to find a better one. - break - } - wEnd = win[pos+n] - } - } - if i <= minIndex { - // hashPrev[i & windowMask] has already been overwritten, so stop now. - break - } - i = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset - if i < minIndex { - break - } - } - return - } - - // Minimum gain to accept a match. - cGain := 4 - - // Some like it higher (CSV), some like it lower (JSON) - const baseCost = 3 - // Base is 4 bytes at with an additional cost. - // Matches must be better than this. - - for i := prevHead; tries > 0; tries-- { - if wEnd == win[i+length] { - n := matchLen(win[i:i+minMatchLook], wPos) - if n > length { - // Calculate gain. Estimate - newGain := d.h.bitLengthRaw(wPos[:n]) - int(offsetExtraBits[offsetCode(uint32(pos-i))]) - baseCost - int(lengthExtraBits[lengthCodes[(n-3)&255]]) - - //fmt.Println("gain:", newGain, "prev:", cGain, "raw:", d.h.bitLengthRaw(wPos[:n]), "this-len:", n, "prev-len:", length) - if newGain > cGain { - length = n - offset = pos - i - cGain = newGain - ok = true - if n >= nice { - // The match is good enough that we don't try to find a better one. - break - } - wEnd = win[pos+n] - } - } - } - if i <= minIndex { - // hashPrev[i & windowMask] has already been overwritten, so stop now. - break - } - i = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset - if i < minIndex { - break - } - } - return -} - -func (d *compressor) writeStoredBlock(buf []byte) error { - if d.w.writeStoredHeader(len(buf), false); d.w.err != nil { - return d.w.err - } - d.w.writeBytes(buf) - return d.w.err -} - -// hash4 returns a hash representation of the first 4 bytes -// of the supplied slice. -// The caller must ensure that len(b) >= 4. -func hash4(b []byte) uint32 { - return hash4u(binary.LittleEndian.Uint32(b), hashBits) -} - -// hash4 returns the hash of u to fit in a hash table with h bits. -// Preferably h should be a constant and should always be <32. -func hash4u(u uint32, h uint8) uint32 { - return (u * prime4bytes) >> (32 - h) -} - -// bulkHash4 will compute hashes using the same -// algorithm as hash4 -func bulkHash4(b []byte, dst []uint32) { - if len(b) < 4 { - return - } - hb := binary.LittleEndian.Uint32(b) - - dst[0] = hash4u(hb, hashBits) - end := len(b) - 4 + 1 - for i := 1; i < end; i++ { - hb = (hb >> 8) | uint32(b[i+3])<<24 - dst[i] = hash4u(hb, hashBits) - } -} - -func (d *compressor) initDeflate() { - d.window = make([]byte, 2*windowSize) - d.byteAvailable = false - d.err = nil - if d.state == nil { - return - } - s := d.state - s.index = 0 - s.hashOffset = 1 - s.length = minMatchLength - 1 - s.offset = 0 - s.chainHead = -1 -} - -// deflateLazy is the same as deflate, but with d.fastSkipHashing == skipNever, -// meaning it always has lazy matching on. -func (d *compressor) deflateLazy() { - s := d.state - // Sanity enables additional runtime tests. - // It's intended to be used during development - // to supplement the currently ad-hoc unit tests. - const sanity = debugDeflate - - if d.windowEnd-s.index < minMatchLength+maxMatchLength && !d.sync { - return - } - if d.windowEnd != s.index && d.chain > 100 { - // Get literal huffman coder. - if d.h == nil { - d.h = newHuffmanEncoder(maxFlateBlockTokens) - } - var tmp [256]uint16 - for _, v := range d.window[s.index:d.windowEnd] { - tmp[v]++ - } - d.h.generate(tmp[:], 15) - } - - s.maxInsertIndex = d.windowEnd - (minMatchLength - 1) - - for { - if sanity && s.index > d.windowEnd { - panic("index > windowEnd") - } - lookahead := d.windowEnd - s.index - if lookahead < minMatchLength+maxMatchLength { - if !d.sync { - return - } - if sanity && s.index > d.windowEnd { - panic("index > windowEnd") - } - if lookahead == 0 { - // Flush current output block if any. - if d.byteAvailable { - // There is still one pending token that needs to be flushed - d.tokens.AddLiteral(d.window[s.index-1]) - d.byteAvailable = false - } - if d.tokens.n > 0 { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - return - } - } - if s.index < s.maxInsertIndex { - // Update the hash - hash := hash4(d.window[s.index:]) - ch := s.hashHead[hash] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[hash] = uint32(s.index + s.hashOffset) - } - prevLength := s.length - prevOffset := s.offset - s.length = minMatchLength - 1 - s.offset = 0 - minIndex := s.index - windowSize - if minIndex < 0 { - minIndex = 0 - } - - if s.chainHead-s.hashOffset >= minIndex && lookahead > prevLength && prevLength < d.lazy { - if newLength, newOffset, ok := d.findMatch(s.index, s.chainHead-s.hashOffset, lookahead); ok { - s.length = newLength - s.offset = newOffset - } - } - - if prevLength >= minMatchLength && s.length <= prevLength { - // No better match, but check for better match at end... - // - // Skip forward a number of bytes. - // Offset of 2 seems to yield best results. 3 is sometimes better. - const checkOff = 2 - - // Check all, except full length - if prevLength < maxMatchLength-checkOff { - prevIndex := s.index - 1 - if prevIndex+prevLength < s.maxInsertIndex { - end := lookahead - if lookahead > maxMatchLength+checkOff { - end = maxMatchLength + checkOff - } - end += prevIndex - - // Hash at match end. - h := hash4(d.window[prevIndex+prevLength:]) - ch2 := int(s.hashHead[h]) - s.hashOffset - prevLength - if prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff { - length := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:]) - // It seems like a pure length metric is best. - if length > prevLength { - prevLength = length - prevOffset = prevIndex - ch2 - - // Extend back... - for i := checkOff - 1; i >= 0; i-- { - if prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i] { - // Emit tokens we "owe" - for j := 0; j <= i; j++ { - d.tokens.AddLiteral(d.window[prevIndex+j]) - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - } - break - } else { - prevLength++ - } - } - } else if false { - // Check one further ahead. - // Only rarely better, disabled for now. - prevIndex++ - h := hash4(d.window[prevIndex+prevLength:]) - ch2 := int(s.hashHead[h]) - s.hashOffset - prevLength - if prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff { - length := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:]) - // It seems like a pure length metric is best. - if length > prevLength+checkOff { - prevLength = length - prevOffset = prevIndex - ch2 - prevIndex-- - - // Extend back... - for i := checkOff; i >= 0; i-- { - if prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i-1] { - // Emit tokens we "owe" - for j := 0; j <= i; j++ { - d.tokens.AddLiteral(d.window[prevIndex+j]) - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - } - break - } else { - prevLength++ - } - } - } - } - } - } - } - } - // There was a match at the previous step, and the current match is - // not better. Output the previous match. - d.tokens.AddMatch(uint32(prevLength-3), uint32(prevOffset-minOffsetSize)) - - // Insert in the hash table all strings up to the end of the match. - // index and index-1 are already inserted. If there is not enough - // lookahead, the last two strings are not inserted into the hash - // table. - newIndex := s.index + prevLength - 1 - // Calculate missing hashes - end := newIndex - if end > s.maxInsertIndex { - end = s.maxInsertIndex - } - end += minMatchLength - 1 - startindex := s.index + 1 - if startindex > s.maxInsertIndex { - startindex = s.maxInsertIndex - } - tocheck := d.window[startindex:end] - dstSize := len(tocheck) - minMatchLength + 1 - if dstSize > 0 { - dst := s.hashMatch[:dstSize] - bulkHash4(tocheck, dst) - var newH uint32 - for i, val := range dst { - di := i + startindex - newH = val & hashMask - // Get previous value with the same hash. - // Our chain should point to the previous value. - s.hashPrev[di&windowMask] = s.hashHead[newH] - // Set the head of the hash chain to us. - s.hashHead[newH] = uint32(di + s.hashOffset) - } - } - - s.index = newIndex - d.byteAvailable = false - s.length = minMatchLength - 1 - if d.tokens.n == maxFlateBlockTokens { - // The block includes the current character - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.ii = 0 - } else { - // Reset, if we got a match this run. - if s.length >= minMatchLength { - s.ii = 0 - } - // We have a byte waiting. Emit it. - if d.byteAvailable { - s.ii++ - d.tokens.AddLiteral(d.window[s.index-1]) - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - s.index++ - - // If we have a long run of no matches, skip additional bytes - // Resets when s.ii overflows after 64KB. - if n := int(s.ii) - d.chain; n > 0 { - n = 1 + int(n>>6) - for j := 0; j < n; j++ { - if s.index >= d.windowEnd-1 { - break - } - d.tokens.AddLiteral(d.window[s.index-1]) - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - // Index... - if s.index < s.maxInsertIndex { - h := hash4(d.window[s.index:]) - ch := s.hashHead[h] - s.chainHead = int(ch) - s.hashPrev[s.index&windowMask] = ch - s.hashHead[h] = uint32(s.index + s.hashOffset) - } - s.index++ - } - // Flush last byte - d.tokens.AddLiteral(d.window[s.index-1]) - d.byteAvailable = false - // s.length = minMatchLength - 1 // not needed, since s.ii is reset above, so it should never be > minMatchLength - if d.tokens.n == maxFlateBlockTokens { - if d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil { - return - } - d.tokens.Reset() - } - } - } else { - s.index++ - d.byteAvailable = true - } - } - } -} - -func (d *compressor) store() { - if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - d.windowEnd = 0 - } -} - -// fillWindow will fill the buffer with data for huffman-only compression. -// The number of bytes copied is returned. -func (d *compressor) fillBlock(b []byte) int { - n := copy(d.window[d.windowEnd:], b) - d.windowEnd += n - return n -} - -// storeHuff will compress and store the currently added data, -// if enough has been accumulated or we at the end of the stream. -// Any error that occurred will be in d.err -func (d *compressor) storeHuff() { - if d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 { - return - } - d.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - d.windowEnd = 0 -} - -// storeFast will compress and store the currently added data, -// if enough has been accumulated or we at the end of the stream. -// Any error that occurred will be in d.err -func (d *compressor) storeFast() { - // We only compress if we have maxStoreBlockSize. - if d.windowEnd < len(d.window) { - if !d.sync { - return - } - // Handle extremely small sizes. - if d.windowEnd < 128 { - if d.windowEnd == 0 { - return - } - if d.windowEnd <= 32 { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - } else { - d.w.writeBlockHuff(false, d.window[:d.windowEnd], true) - d.err = d.w.err - } - d.tokens.Reset() - d.windowEnd = 0 - d.fast.Reset() - return - } - } - - d.fast.Encode(&d.tokens, d.window[:d.windowEnd]) - // If we made zero matches, store the block as is. - if d.tokens.n == 0 { - d.err = d.writeStoredBlock(d.window[:d.windowEnd]) - // If we removed less than 1/16th, huffman compress the block. - } else if int(d.tokens.n) > d.windowEnd-(d.windowEnd>>4) { - d.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - } else { - d.w.writeBlockDynamic(&d.tokens, false, d.window[:d.windowEnd], d.sync) - d.err = d.w.err - } - d.tokens.Reset() - d.windowEnd = 0 -} - -// write will add input byte to the stream. -// Unless an error occurs all bytes will be consumed. -func (d *compressor) write(b []byte) (n int, err error) { - if d.err != nil { - return 0, d.err - } - n = len(b) - for len(b) > 0 { - if d.windowEnd == len(d.window) || d.sync { - d.step(d) - } - b = b[d.fill(d, b):] - if d.err != nil { - return 0, d.err - } - } - return n, d.err -} - -func (d *compressor) syncFlush() error { - d.sync = true - if d.err != nil { - return d.err - } - d.step(d) - if d.err == nil { - d.w.writeStoredHeader(0, false) - d.w.flush() - d.err = d.w.err - } - d.sync = false - return d.err -} - -func (d *compressor) init(w io.Writer, level int) (err error) { - d.w = newHuffmanBitWriter(w) - - switch { - case level == NoCompression: - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).store - case level == ConstantCompression: - d.w.logNewTablePenalty = 10 - d.window = make([]byte, 32<<10) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeHuff - case level == DefaultCompression: - level = 5 - fallthrough - case level >= 1 && level <= 6: - d.w.logNewTablePenalty = 7 - d.fast = newFastEnc(level) - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeFast - case 7 <= level && level <= 9: - d.w.logNewTablePenalty = 8 - d.state = &advancedState{} - d.compressionLevel = levels[level] - d.initDeflate() - d.fill = (*compressor).fillDeflate - d.step = (*compressor).deflateLazy - case -level >= MinCustomWindowSize && -level <= MaxCustomWindowSize: - d.w.logNewTablePenalty = 7 - d.fast = &fastEncL5Window{maxOffset: int32(-level), cur: maxStoreBlockSize} - d.window = make([]byte, maxStoreBlockSize) - d.fill = (*compressor).fillBlock - d.step = (*compressor).storeFast - default: - return fmt.Errorf("flate: invalid compression level %d: want value in range [-2, 9]", level) - } - d.level = level - return nil -} - -// reset the state of the compressor. -func (d *compressor) reset(w io.Writer) { - d.w.reset(w) - d.sync = false - d.err = nil - // We only need to reset a few things for Snappy. - if d.fast != nil { - d.fast.Reset() - d.windowEnd = 0 - d.tokens.Reset() - return - } - switch d.compressionLevel.chain { - case 0: - // level was NoCompression or ConstantCompresssion. - d.windowEnd = 0 - default: - s := d.state - s.chainHead = -1 - for i := range s.hashHead { - s.hashHead[i] = 0 - } - for i := range s.hashPrev { - s.hashPrev[i] = 0 - } - s.hashOffset = 1 - s.index, d.windowEnd = 0, 0 - d.blockStart, d.byteAvailable = 0, false - d.tokens.Reset() - s.length = minMatchLength - 1 - s.offset = 0 - s.ii = 0 - s.maxInsertIndex = 0 - } -} - -func (d *compressor) close() error { - if d.err != nil { - return d.err - } - d.sync = true - d.step(d) - if d.err != nil { - return d.err - } - if d.w.writeStoredHeader(0, true); d.w.err != nil { - return d.w.err - } - d.w.flush() - d.w.reset(nil) - return d.w.err -} - -// NewWriter returns a new Writer compressing data at the given level. -// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression); -// higher levels typically run slower but compress more. -// Level 0 (NoCompression) does not attempt any compression; it only adds the -// necessary DEFLATE framing. -// Level -1 (DefaultCompression) uses the default compression level. -// Level -2 (ConstantCompression) will use Huffman compression only, giving -// a very fast compression for all types of input, but sacrificing considerable -// compression efficiency. -// -// If level is in the range [-2, 9] then the error returned will be nil. -// Otherwise the error returned will be non-nil. -func NewWriter(w io.Writer, level int) (*Writer, error) { - var dw Writer - if err := dw.d.init(w, level); err != nil { - return nil, err - } - return &dw, nil -} - -// NewWriterDict is like NewWriter but initializes the new -// Writer with a preset dictionary. The returned Writer behaves -// as if the dictionary had been written to it without producing -// any compressed output. The compressed data written to w -// can only be decompressed by a Reader initialized with the -// same dictionary. -func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { - zw, err := NewWriter(w, level) - if err != nil { - return nil, err - } - zw.d.fillWindow(dict) - zw.dict = append(zw.dict, dict...) // duplicate dictionary for Reset method. - return zw, err -} - -// MinCustomWindowSize is the minimum window size that can be sent to NewWriterWindow. -const MinCustomWindowSize = 32 - -// MaxCustomWindowSize is the maximum custom window that can be sent to NewWriterWindow. -const MaxCustomWindowSize = windowSize - -// NewWriterWindow returns a new Writer compressing data with a custom window size. -// windowSize must be from MinCustomWindowSize to MaxCustomWindowSize. -func NewWriterWindow(w io.Writer, windowSize int) (*Writer, error) { - if windowSize < MinCustomWindowSize { - return nil, errors.New("flate: requested window size less than MinWindowSize") - } - if windowSize > MaxCustomWindowSize { - return nil, errors.New("flate: requested window size bigger than MaxCustomWindowSize") - } - var dw Writer - if err := dw.d.init(w, -windowSize); err != nil { - return nil, err - } - return &dw, nil -} - -// A Writer takes data written to it and writes the compressed -// form of that data to an underlying writer (see NewWriter). -type Writer struct { - d compressor - dict []byte -} - -// Write writes data to w, which will eventually write the -// compressed form of data to its underlying writer. -func (w *Writer) Write(data []byte) (n int, err error) { - return w.d.write(data) -} - -// Flush flushes any pending data to the underlying writer. -// It is useful mainly in compressed network protocols, to ensure that -// a remote reader has enough data to reconstruct a packet. -// Flush does not return until the data has been written. -// Calling Flush when there is no pending data still causes the Writer -// to emit a sync marker of at least 4 bytes. -// If the underlying writer returns an error, Flush returns that error. -// -// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH. -func (w *Writer) Flush() error { - // For more about flushing: - // http://www.bolet.org/~pornin/deflate-flush.html - return w.d.syncFlush() -} - -// Close flushes and closes the writer. -func (w *Writer) Close() error { - return w.d.close() -} - -// Reset discards the writer's state and makes it equivalent to -// the result of NewWriter or NewWriterDict called with dst -// and w's level and dictionary. -func (w *Writer) Reset(dst io.Writer) { - if len(w.dict) > 0 { - // w was created with NewWriterDict - w.d.reset(dst) - if dst != nil { - w.d.fillWindow(w.dict) - } - } else { - // w was created with NewWriter - w.d.reset(dst) - } -} - -// ResetDict discards the writer's state and makes it equivalent to -// the result of NewWriter or NewWriterDict called with dst -// and w's level, but sets a specific dictionary. -func (w *Writer) ResetDict(dst io.Writer, dict []byte) { - w.dict = dict - w.d.reset(dst) - w.d.fillWindow(w.dict) -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/dict_decoder.go b/tools/vendor/github.com/klauspost/compress/flate/dict_decoder.go deleted file mode 100644 index bb36351a5..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/dict_decoder.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// dictDecoder implements the LZ77 sliding dictionary as used in decompression. -// LZ77 decompresses data through sequences of two forms of commands: -// -// - Literal insertions: Runs of one or more symbols are inserted into the data -// stream as is. This is accomplished through the writeByte method for a -// single symbol, or combinations of writeSlice/writeMark for multiple symbols. -// Any valid stream must start with a literal insertion if no preset dictionary -// is used. -// -// - Backward copies: Runs of one or more symbols are copied from previously -// emitted data. Backward copies come as the tuple (dist, length) where dist -// determines how far back in the stream to copy from and length determines how -// many bytes to copy. Note that it is valid for the length to be greater than -// the distance. Since LZ77 uses forward copies, that situation is used to -// perform a form of run-length encoding on repeated runs of symbols. -// The writeCopy and tryWriteCopy are used to implement this command. -// -// For performance reasons, this implementation performs little to no sanity -// checks about the arguments. As such, the invariants documented for each -// method call must be respected. -type dictDecoder struct { - hist []byte // Sliding window history - - // Invariant: 0 <= rdPos <= wrPos <= len(hist) - wrPos int // Current output position in buffer - rdPos int // Have emitted hist[:rdPos] already - full bool // Has a full window length been written yet? -} - -// init initializes dictDecoder to have a sliding window dictionary of the given -// size. If a preset dict is provided, it will initialize the dictionary with -// the contents of dict. -func (dd *dictDecoder) init(size int, dict []byte) { - *dd = dictDecoder{hist: dd.hist} - - if cap(dd.hist) < size { - dd.hist = make([]byte, size) - } - dd.hist = dd.hist[:size] - - if len(dict) > len(dd.hist) { - dict = dict[len(dict)-len(dd.hist):] - } - dd.wrPos = copy(dd.hist, dict) - if dd.wrPos == len(dd.hist) { - dd.wrPos = 0 - dd.full = true - } - dd.rdPos = dd.wrPos -} - -// histSize reports the total amount of historical data in the dictionary. -func (dd *dictDecoder) histSize() int { - if dd.full { - return len(dd.hist) - } - return dd.wrPos -} - -// availRead reports the number of bytes that can be flushed by readFlush. -func (dd *dictDecoder) availRead() int { - return dd.wrPos - dd.rdPos -} - -// availWrite reports the available amount of output buffer space. -func (dd *dictDecoder) availWrite() int { - return len(dd.hist) - dd.wrPos -} - -// writeSlice returns a slice of the available buffer to write data to. -// -// This invariant will be kept: len(s) <= availWrite() -func (dd *dictDecoder) writeSlice() []byte { - return dd.hist[dd.wrPos:] -} - -// writeMark advances the writer pointer by cnt. -// -// This invariant must be kept: 0 <= cnt <= availWrite() -func (dd *dictDecoder) writeMark(cnt int) { - dd.wrPos += cnt -} - -// writeByte writes a single byte to the dictionary. -// -// This invariant must be kept: 0 < availWrite() -func (dd *dictDecoder) writeByte(c byte) { - dd.hist[dd.wrPos] = c - dd.wrPos++ -} - -// writeCopy copies a string at a given (dist, length) to the output. -// This returns the number of bytes copied and may be less than the requested -// length if the available space in the output buffer is too small. -// -// This invariant must be kept: 0 < dist <= histSize() -func (dd *dictDecoder) writeCopy(dist, length int) int { - dstBase := dd.wrPos - dstPos := dstBase - srcPos := dstPos - dist - endPos := dstPos + length - if endPos > len(dd.hist) { - endPos = len(dd.hist) - } - - // Copy non-overlapping section after destination position. - // - // This section is non-overlapping in that the copy length for this section - // is always less than or equal to the backwards distance. This can occur - // if a distance refers to data that wraps-around in the buffer. - // Thus, a backwards copy is performed here; that is, the exact bytes in - // the source prior to the copy is placed in the destination. - if srcPos < 0 { - srcPos += len(dd.hist) - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:]) - srcPos = 0 - } - - // Copy possibly overlapping section before destination position. - // - // This section can overlap if the copy length for this section is larger - // than the backwards distance. This is allowed by LZ77 so that repeated - // strings can be succinctly represented using (dist, length) pairs. - // Thus, a forwards copy is performed here; that is, the bytes copied is - // possibly dependent on the resulting bytes in the destination as the copy - // progresses along. This is functionally equivalent to the following: - // - // for i := 0; i < endPos-dstPos; i++ { - // dd.hist[dstPos+i] = dd.hist[srcPos+i] - // } - // dstPos = endPos - // - for dstPos < endPos { - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) - } - - dd.wrPos = dstPos - return dstPos - dstBase -} - -// tryWriteCopy tries to copy a string at a given (distance, length) to the -// output. This specialized version is optimized for short distances. -// -// This method is designed to be inlined for performance reasons. -// -// This invariant must be kept: 0 < dist <= histSize() -func (dd *dictDecoder) tryWriteCopy(dist, length int) int { - dstPos := dd.wrPos - endPos := dstPos + length - if dstPos < dist || endPos > len(dd.hist) { - return 0 - } - dstBase := dstPos - srcPos := dstPos - dist - - // Copy possibly overlapping section before destination position. -loop: - dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) - if dstPos < endPos { - goto loop // Avoid for-loop so that this function can be inlined - } - - dd.wrPos = dstPos - return dstPos - dstBase -} - -// readFlush returns a slice of the historical buffer that is ready to be -// emitted to the user. The data returned by readFlush must be fully consumed -// before calling any other dictDecoder methods. -func (dd *dictDecoder) readFlush() []byte { - toRead := dd.hist[dd.rdPos:dd.wrPos] - dd.rdPos = dd.wrPos - if dd.wrPos == len(dd.hist) { - dd.wrPos, dd.rdPos = 0, 0 - dd.full = true - } - return toRead -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/fast_encoder.go b/tools/vendor/github.com/klauspost/compress/flate/fast_encoder.go deleted file mode 100644 index c8124b5c4..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/fast_encoder.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2011 The Snappy-Go Authors. All rights reserved. -// Modified for deflate by Klaus Post (c) 2015. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "fmt" -) - -type fastEnc interface { - Encode(dst *tokens, src []byte) - Reset() -} - -func newFastEnc(level int) fastEnc { - switch level { - case 1: - return &fastEncL1{fastGen: fastGen{cur: maxStoreBlockSize}} - case 2: - return &fastEncL2{fastGen: fastGen{cur: maxStoreBlockSize}} - case 3: - return &fastEncL3{fastGen: fastGen{cur: maxStoreBlockSize}} - case 4: - return &fastEncL4{fastGen: fastGen{cur: maxStoreBlockSize}} - case 5: - return &fastEncL5{fastGen: fastGen{cur: maxStoreBlockSize}} - case 6: - return &fastEncL6{fastGen: fastGen{cur: maxStoreBlockSize}} - default: - panic("invalid level specified") - } -} - -const ( - tableBits = 15 // Bits used in the table - tableSize = 1 << tableBits // Size of the table - tableShift = 32 - tableBits // Right-shift to get the tableBits most significant bits of a uint32. - baseMatchOffset = 1 // The smallest match offset - baseMatchLength = 3 // The smallest match length per the RFC section 3.2.5 - maxMatchOffset = 1 << 15 // The largest match offset - - bTableBits = 17 // Bits used in the big tables - bTableSize = 1 << bTableBits // Size of the table - allocHistory = maxStoreBlockSize * 5 // Size to preallocate for history. - bufferReset = (1 << 31) - allocHistory - maxStoreBlockSize - 1 // Reset the buffer offset when reaching this. -) - -const ( - prime3bytes = 506832829 - prime4bytes = 2654435761 - prime5bytes = 889523592379 - prime6bytes = 227718039650203 - prime7bytes = 58295818150454627 - prime8bytes = 0xcf1bbcdcb7a56463 -) - -func load3232(b []byte, i int32) uint32 { - return binary.LittleEndian.Uint32(b[i:]) -} - -func load6432(b []byte, i int32) uint64 { - return binary.LittleEndian.Uint64(b[i:]) -} - -type tableEntry struct { - offset int32 -} - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastGen struct { - hist []byte - cur int32 -} - -func (e *fastGen) addBlock(src []byte) int32 { - // check if we have space already - if len(e.hist)+len(src) > cap(e.hist) { - if cap(e.hist) == 0 { - e.hist = make([]byte, 0, allocHistory) - } else { - if cap(e.hist) < maxMatchOffset*2 { - panic("unexpected buffer size") - } - // Move down - offset := int32(len(e.hist)) - maxMatchOffset - // copy(e.hist[0:maxMatchOffset], e.hist[offset:]) - *(*[maxMatchOffset]byte)(e.hist) = *(*[maxMatchOffset]byte)(e.hist[offset:]) - e.cur += offset - e.hist = e.hist[:maxMatchOffset] - } - } - s := int32(len(e.hist)) - e.hist = append(e.hist, src...) - return s -} - -type tableEntryPrev struct { - Cur tableEntry - Prev tableEntry -} - -// hash7 returns the hash of the lowest 7 bytes of u to fit in a hash table with h bits. -// Preferably h should be a constant and should always be <64. -func hash7(u uint64, h uint8) uint32 { - return uint32(((u << (64 - 56)) * prime7bytes) >> ((64 - h) & reg8SizeMask64)) -} - -// hashLen returns a hash of the lowest mls bytes of with length output bits. -// mls must be >=3 and <=8. Any other value will return hash for 4 bytes. -// length should always be < 32. -// Preferably length and mls should be a constant for inlining. -func hashLen(u uint64, length, mls uint8) uint32 { - switch mls { - case 3: - return (uint32(u<<8) * prime3bytes) >> (32 - length) - case 5: - return uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length)) - case 6: - return uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length)) - case 7: - return uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length)) - case 8: - return uint32((u * prime8bytes) >> (64 - length)) - default: - return (uint32(u) * prime4bytes) >> (32 - length) - } -} - -// matchlen will return the match length between offsets and t in src. -// The maximum length returned is maxMatchLength - 4. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastGen) matchlen(s, t int32, src []byte) int32 { - if debugDecode { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > maxMatchOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - s1 := int(s) + maxMatchLength - 4 - if s1 > len(src) { - s1 = len(src) - } - - // Extend the match to be as long as possible. - return int32(matchLen(src[s:s1], src[t:])) -} - -// matchlenLong will return the match length between offsets and t in src. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastGen) matchlenLong(s, t int32, src []byte) int32 { - if debugDeflate { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > maxMatchOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - // Extend the match to be as long as possible. - return int32(matchLen(src[s:], src[t:])) -} - -// Reset the encoding table. -func (e *fastGen) Reset() { - if cap(e.hist) < allocHistory { - e.hist = make([]byte, 0, allocHistory) - } - // We offset current position so everything will be out of reach. - // If we are above the buffer reset it will be cleared anyway since len(hist) == 0. - if e.cur <= bufferReset { - e.cur += maxMatchOffset + int32(len(e.hist)) - } - e.hist = e.hist[:0] -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go b/tools/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go deleted file mode 100644 index f70594c34..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go +++ /dev/null @@ -1,1182 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "fmt" - "io" - "math" -) - -const ( - // The largest offset code. - offsetCodeCount = 30 - - // The special code used to mark the end of a block. - endBlockMarker = 256 - - // The first length code. - lengthCodesStart = 257 - - // The number of codegen codes. - codegenCodeCount = 19 - badCode = 255 - - // maxPredefinedTokens is the maximum number of tokens - // where we check if fixed size is smaller. - maxPredefinedTokens = 250 - - // bufferFlushSize indicates the buffer size - // after which bytes are flushed to the writer. - // Should preferably be a multiple of 6, since - // we accumulate 6 bytes between writes to the buffer. - bufferFlushSize = 246 -) - -// Minimum length code that emits bits. -const lengthExtraBitsMinCode = 8 - -// The number of extra bits needed by length code X - LENGTH_CODES_START. -var lengthExtraBits = [32]uint8{ - /* 257 */ 0, 0, 0, - /* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, - /* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, - /* 280 */ 4, 5, 5, 5, 5, 0, -} - -// The length indicated by length code X - LENGTH_CODES_START. -var lengthBase = [32]uint8{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, - 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, - 64, 80, 96, 112, 128, 160, 192, 224, 255, -} - -// Minimum offset code that emits bits. -const offsetExtraBitsMinCode = 4 - -// offset code word extra bits. -var offsetExtraBits = [32]int8{ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, - 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, - /* extended window */ - 14, 14, -} - -var offsetCombined = [32]uint32{} - -func init() { - var offsetBase = [32]uint32{ - /* normal deflate */ - 0x000000, 0x000001, 0x000002, 0x000003, 0x000004, - 0x000006, 0x000008, 0x00000c, 0x000010, 0x000018, - 0x000020, 0x000030, 0x000040, 0x000060, 0x000080, - 0x0000c0, 0x000100, 0x000180, 0x000200, 0x000300, - 0x000400, 0x000600, 0x000800, 0x000c00, 0x001000, - 0x001800, 0x002000, 0x003000, 0x004000, 0x006000, - - /* extended window */ - 0x008000, 0x00c000, - } - - for i := range offsetCombined[:] { - // Don't use extended window values... - if offsetExtraBits[i] == 0 || offsetBase[i] > 0x006000 { - continue - } - offsetCombined[i] = uint32(offsetExtraBits[i]) | (offsetBase[i] << 8) - } -} - -// The odd order in which the codegen code sizes are written. -var codegenOrder = []uint32{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} - -type huffmanBitWriter struct { - // writer is the underlying writer. - // Do not use it directly; use the write method, which ensures - // that Write errors are sticky. - writer io.Writer - - // Data waiting to be written is bytes[0:nbytes] - // and then the low nbits of bits. - bits uint64 - nbits uint8 - nbytes uint8 - lastHuffMan bool - literalEncoding *huffmanEncoder - tmpLitEncoding *huffmanEncoder - offsetEncoding *huffmanEncoder - codegenEncoding *huffmanEncoder - err error - lastHeader int - // Set between 0 (reused block can be up to 2x the size) - logNewTablePenalty uint - bytes [256 + 8]byte - literalFreq [lengthCodesStart + 32]uint16 - offsetFreq [32]uint16 - codegenFreq [codegenCodeCount]uint16 - - // codegen must have an extra space for the final symbol. - codegen [literalCount + offsetCodeCount + 1]uint8 -} - -// Huffman reuse. -// -// The huffmanBitWriter supports reusing huffman tables and thereby combining block sections. -// -// This is controlled by several variables: -// -// If lastHeader is non-zero the Huffman table can be reused. -// This also indicates that a Huffman table has been generated that can output all -// possible symbols. -// It also indicates that an EOB has not yet been emitted, so if a new tabel is generated -// an EOB with the previous table must be written. -// -// If lastHuffMan is set, a table for outputting literals has been generated and offsets are invalid. -// -// An incoming block estimates the output size of a new table using a 'fresh' by calculating the -// optimal size and adding a penalty in 'logNewTablePenalty'. -// A Huffman table is not optimal, which is why we add a penalty, and generating a new table -// is slower both for compression and decompression. - -func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter { - return &huffmanBitWriter{ - writer: w, - literalEncoding: newHuffmanEncoder(literalCount), - tmpLitEncoding: newHuffmanEncoder(literalCount), - codegenEncoding: newHuffmanEncoder(codegenCodeCount), - offsetEncoding: newHuffmanEncoder(offsetCodeCount), - } -} - -func (w *huffmanBitWriter) reset(writer io.Writer) { - w.writer = writer - w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil - w.lastHeader = 0 - w.lastHuffMan = false -} - -func (w *huffmanBitWriter) canReuse(t *tokens) (ok bool) { - a := t.offHist[:offsetCodeCount] - b := w.offsetEncoding.codes - b = b[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - - a = t.extraHist[:literalCount-256] - b = w.literalEncoding.codes[256:literalCount] - b = b[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - - a = t.litHist[:256] - b = w.literalEncoding.codes[:len(a)] - for i, v := range a { - if v != 0 && b[i].zero() { - return false - } - } - return true -} - -func (w *huffmanBitWriter) flush() { - if w.err != nil { - w.nbits = 0 - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - n := w.nbytes - for w.nbits != 0 { - w.bytes[n] = byte(w.bits) - w.bits >>= 8 - if w.nbits > 8 { // Avoid underflow - w.nbits -= 8 - } else { - w.nbits = 0 - } - n++ - } - w.bits = 0 - w.write(w.bytes[:n]) - w.nbytes = 0 -} - -func (w *huffmanBitWriter) write(b []byte) { - if w.err != nil { - return - } - _, w.err = w.writer.Write(b) -} - -func (w *huffmanBitWriter) writeBits(b int32, nb uint8) { - w.bits |= uint64(b) << (w.nbits & 63) - w.nbits += nb - if w.nbits >= 48 { - w.writeOutBits() - } -} - -func (w *huffmanBitWriter) writeBytes(bytes []byte) { - if w.err != nil { - return - } - n := w.nbytes - if w.nbits&7 != 0 { - w.err = InternalError("writeBytes with unfinished bits") - return - } - for w.nbits != 0 { - w.bytes[n] = byte(w.bits) - w.bits >>= 8 - w.nbits -= 8 - n++ - } - if n != 0 { - w.write(w.bytes[:n]) - } - w.nbytes = 0 - w.write(bytes) -} - -// RFC 1951 3.2.7 specifies a special run-length encoding for specifying -// the literal and offset lengths arrays (which are concatenated into a single -// array). This method generates that run-length encoding. -// -// The result is written into the codegen array, and the frequencies -// of each code is written into the codegenFreq array. -// Codes 0-15 are single byte codes. Codes 16-18 are followed by additional -// information. Code badCode is an end marker -// -// numLiterals The number of literals in literalEncoding -// numOffsets The number of offsets in offsetEncoding -// litenc, offenc The literal and offset encoder to use -func (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litEnc, offEnc *huffmanEncoder) { - for i := range w.codegenFreq { - w.codegenFreq[i] = 0 - } - // Note that we are using codegen both as a temporary variable for holding - // a copy of the frequencies, and as the place where we put the result. - // This is fine because the output is always shorter than the input used - // so far. - codegen := w.codegen[:] // cache - // Copy the concatenated code sizes to codegen. Put a marker at the end. - cgnl := codegen[:numLiterals] - for i := range cgnl { - cgnl[i] = litEnc.codes[i].len() - } - - cgnl = codegen[numLiterals : numLiterals+numOffsets] - for i := range cgnl { - cgnl[i] = offEnc.codes[i].len() - } - codegen[numLiterals+numOffsets] = badCode - - size := codegen[0] - count := 1 - outIndex := 0 - for inIndex := 1; size != badCode; inIndex++ { - // INVARIANT: We have seen "count" copies of size that have not yet - // had output generated for them. - nextSize := codegen[inIndex] - if nextSize == size { - count++ - continue - } - // We need to generate codegen indicating "count" of size. - if size != 0 { - codegen[outIndex] = size - outIndex++ - w.codegenFreq[size]++ - count-- - for count >= 3 { - n := 6 - if n > count { - n = count - } - codegen[outIndex] = 16 - outIndex++ - codegen[outIndex] = uint8(n - 3) - outIndex++ - w.codegenFreq[16]++ - count -= n - } - } else { - for count >= 11 { - n := 138 - if n > count { - n = count - } - codegen[outIndex] = 18 - outIndex++ - codegen[outIndex] = uint8(n - 11) - outIndex++ - w.codegenFreq[18]++ - count -= n - } - if count >= 3 { - // count >= 3 && count <= 10 - codegen[outIndex] = 17 - outIndex++ - codegen[outIndex] = uint8(count - 3) - outIndex++ - w.codegenFreq[17]++ - count = 0 - } - } - count-- - for ; count >= 0; count-- { - codegen[outIndex] = size - outIndex++ - w.codegenFreq[size]++ - } - // Set up invariant for next time through the loop. - size = nextSize - count = 1 - } - // Marker indicating the end of the codegen. - codegen[outIndex] = badCode -} - -func (w *huffmanBitWriter) codegens() int { - numCodegens := len(w.codegenFreq) - for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 { - numCodegens-- - } - return numCodegens -} - -func (w *huffmanBitWriter) headerSize() (size, numCodegens int) { - numCodegens = len(w.codegenFreq) - for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 { - numCodegens-- - } - return 3 + 5 + 5 + 4 + (3 * numCodegens) + - w.codegenEncoding.bitLength(w.codegenFreq[:]) + - int(w.codegenFreq[16])*2 + - int(w.codegenFreq[17])*3 + - int(w.codegenFreq[18])*7, numCodegens -} - -// dynamicSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) dynamicReuseSize(litEnc, offEnc *huffmanEncoder) (size int) { - size = litEnc.bitLength(w.literalFreq[:]) + - offEnc.bitLength(w.offsetFreq[:]) - return size -} - -// dynamicSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) dynamicSize(litEnc, offEnc *huffmanEncoder, extraBits int) (size, numCodegens int) { - header, numCodegens := w.headerSize() - size = header + - litEnc.bitLength(w.literalFreq[:]) + - offEnc.bitLength(w.offsetFreq[:]) + - extraBits - return size, numCodegens -} - -// extraBitSize will return the number of bits that will be written -// as "extra" bits on matches. -func (w *huffmanBitWriter) extraBitSize() int { - total := 0 - for i, n := range w.literalFreq[257:literalCount] { - total += int(n) * int(lengthExtraBits[i&31]) - } - for i, n := range w.offsetFreq[:offsetCodeCount] { - total += int(n) * int(offsetExtraBits[i&31]) - } - return total -} - -// fixedSize returns the size of dynamically encoded data in bits. -func (w *huffmanBitWriter) fixedSize(extraBits int) int { - return 3 + - fixedLiteralEncoding.bitLength(w.literalFreq[:]) + - fixedOffsetEncoding.bitLength(w.offsetFreq[:]) + - extraBits -} - -// storedSize calculates the stored size, including header. -// The function returns the size in bits and whether the block -// fits inside a single block. -func (w *huffmanBitWriter) storedSize(in []byte) (int, bool) { - if in == nil { - return 0, false - } - if len(in) <= maxStoreBlockSize { - return (len(in) + 5) * 8, true - } - return 0, false -} - -func (w *huffmanBitWriter) writeCode(c hcode) { - // The function does not get inlined if we "& 63" the shift. - w.bits |= c.code64() << (w.nbits & 63) - w.nbits += c.len() - if w.nbits >= 48 { - w.writeOutBits() - } -} - -// writeOutBits will write bits to the buffer. -func (w *huffmanBitWriter) writeOutBits() { - bits := w.bits - w.bits >>= 48 - w.nbits -= 48 - n := w.nbytes - - // We over-write, but faster... - binary.LittleEndian.PutUint64(w.bytes[n:], bits) - n += 6 - - if n >= bufferFlushSize { - if w.err != nil { - n = 0 - return - } - w.write(w.bytes[:n]) - n = 0 - } - - w.nbytes = n -} - -// Write the header of a dynamic Huffman block to the output stream. -// -// numLiterals The number of literals specified in codegen -// numOffsets The number of offsets specified in codegen -// numCodegens The number of codegens used in codegen -func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, numCodegens int, isEof bool) { - if w.err != nil { - return - } - var firstBits int32 = 4 - if isEof { - firstBits = 5 - } - w.writeBits(firstBits, 3) - w.writeBits(int32(numLiterals-257), 5) - w.writeBits(int32(numOffsets-1), 5) - w.writeBits(int32(numCodegens-4), 4) - - for i := 0; i < numCodegens; i++ { - value := uint(w.codegenEncoding.codes[codegenOrder[i]].len()) - w.writeBits(int32(value), 3) - } - - i := 0 - for { - var codeWord = uint32(w.codegen[i]) - i++ - if codeWord == badCode { - break - } - w.writeCode(w.codegenEncoding.codes[codeWord]) - - switch codeWord { - case 16: - w.writeBits(int32(w.codegen[i]), 2) - i++ - case 17: - w.writeBits(int32(w.codegen[i]), 3) - i++ - case 18: - w.writeBits(int32(w.codegen[i]), 7) - i++ - } - } -} - -// writeStoredHeader will write a stored header. -// If the stored block is only used for EOF, -// it is replaced with a fixed huffman block. -func (w *huffmanBitWriter) writeStoredHeader(length int, isEof bool) { - if w.err != nil { - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - // To write EOF, use a fixed encoding block. 10 bits instead of 5 bytes. - if length == 0 && isEof { - w.writeFixedHeader(isEof) - // EOB: 7 bits, value: 0 - w.writeBits(0, 7) - w.flush() - return - } - - var flag int32 - if isEof { - flag = 1 - } - w.writeBits(flag, 3) - w.flush() - w.writeBits(int32(length), 16) - w.writeBits(int32(^uint16(length)), 16) -} - -func (w *huffmanBitWriter) writeFixedHeader(isEof bool) { - if w.err != nil { - return - } - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - // Indicate that we are a fixed Huffman block - var value int32 = 2 - if isEof { - value = 3 - } - w.writeBits(value, 3) -} - -// writeBlock will write a block of tokens with the smallest encoding. -// The original input can be supplied, and if the huffman encoded data -// is larger than the original bytes, the data will be written as a -// stored block. -// If the input is nil, the tokens will always be Huffman encoded. -func (w *huffmanBitWriter) writeBlock(tokens *tokens, eof bool, input []byte) { - if w.err != nil { - return - } - - tokens.AddEOB() - if w.lastHeader > 0 { - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - numLiterals, numOffsets := w.indexTokens(tokens, false) - w.generate() - var extraBits int - storedSize, storable := w.storedSize(input) - if storable { - extraBits = w.extraBitSize() - } - - // Figure out smallest code. - // Fixed Huffman baseline. - var literalEncoding = fixedLiteralEncoding - var offsetEncoding = fixedOffsetEncoding - var size = math.MaxInt32 - if tokens.n < maxPredefinedTokens { - size = w.fixedSize(extraBits) - } - - // Dynamic Huffman? - var numCodegens int - - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - dynamicSize, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) - - if dynamicSize < size { - size = dynamicSize - literalEncoding = w.literalEncoding - offsetEncoding = w.offsetEncoding - } - - // Stored bytes? - if storable && storedSize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - // Huffman. - if literalEncoding == fixedLiteralEncoding { - w.writeFixedHeader(eof) - } else { - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - } - - // Write the tokens. - w.writeTokens(tokens.Slice(), literalEncoding.codes, offsetEncoding.codes) -} - -// writeBlockDynamic encodes a block using a dynamic Huffman table. -// This should be used if the symbols used have a disproportionate -// histogram distribution. -// If input is supplied and the compression savings are below 1/16th of the -// input size the block is stored. -func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []byte, sync bool) { - if w.err != nil { - return - } - - sync = sync || eof - if sync { - tokens.AddEOB() - } - - // We cannot reuse pure huffman table, and must mark as EOF. - if (w.lastHuffMan || eof) && w.lastHeader > 0 { - // We will not try to reuse. - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - w.lastHuffMan = false - } - - // fillReuse enables filling of empty values. - // This will make encodings always reusable without testing. - // However, this does not appear to benefit on most cases. - const fillReuse = false - - // Check if we can reuse... - if !fillReuse && w.lastHeader > 0 && !w.canReuse(tokens) { - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } - - numLiterals, numOffsets := w.indexTokens(tokens, !sync) - extraBits := 0 - ssize, storable := w.storedSize(input) - - const usePrefs = true - if storable || w.lastHeader > 0 { - extraBits = w.extraBitSize() - } - - var size int - - // Check if we should reuse. - if w.lastHeader > 0 { - // Estimate size for using a new table. - // Use the previous header size as the best estimate. - newSize := w.lastHeader + tokens.EstimatedBits() - newSize += int(w.literalEncoding.codes[endBlockMarker].len()) + newSize>>w.logNewTablePenalty - - // The estimated size is calculated as an optimal table. - // We add a penalty to make it more realistic and re-use a bit more. - reuseSize := w.dynamicReuseSize(w.literalEncoding, w.offsetEncoding) + extraBits - - // Check if a new table is better. - if newSize < reuseSize { - // Write the EOB we owe. - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - size = newSize - w.lastHeader = 0 - } else { - size = reuseSize - } - - if tokens.n < maxPredefinedTokens { - if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size { - // Check if we get a reasonable size decrease. - if storable && ssize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return - } - } - // Check if we get a reasonable size decrease. - if storable && ssize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - } - - // We want a new block/table - if w.lastHeader == 0 { - if fillReuse && !sync { - w.fillTokens() - numLiterals, numOffsets = maxNumLit, maxNumDist - } else { - w.literalFreq[endBlockMarker] = 1 - } - - w.generate() - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - - var numCodegens int - if fillReuse && !sync { - // Reindex for accurate size... - w.indexTokens(tokens, true) - } - size, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) - - // Store predefined, if we don't get a reasonable improvement. - if tokens.n < maxPredefinedTokens { - if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size { - // Store bytes, if we don't get an improvement. - if storable && ssize <= preSize { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return - } - } - - if storable && ssize <= size { - // Store bytes, if we don't get an improvement. - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - // Write Huffman table. - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - if !sync { - w.lastHeader, _ = w.headerSize() - } - w.lastHuffMan = false - } - - if sync { - w.lastHeader = 0 - } - // Write the tokens. - w.writeTokens(tokens.Slice(), w.literalEncoding.codes, w.offsetEncoding.codes) -} - -func (w *huffmanBitWriter) fillTokens() { - for i, v := range w.literalFreq[:literalCount] { - if v == 0 { - w.literalFreq[i] = 1 - } - } - for i, v := range w.offsetFreq[:offsetCodeCount] { - if v == 0 { - w.offsetFreq[i] = 1 - } - } -} - -// indexTokens indexes a slice of tokens, and updates -// literalFreq and offsetFreq, and generates literalEncoding -// and offsetEncoding. -// The number of literal and offset tokens is returned. -func (w *huffmanBitWriter) indexTokens(t *tokens, filled bool) (numLiterals, numOffsets int) { - //copy(w.literalFreq[:], t.litHist[:]) - *(*[256]uint16)(w.literalFreq[:]) = t.litHist - //copy(w.literalFreq[256:], t.extraHist[:]) - *(*[32]uint16)(w.literalFreq[256:]) = t.extraHist - w.offsetFreq = t.offHist - - if t.n == 0 { - return - } - if filled { - return maxNumLit, maxNumDist - } - // get the number of literals - numLiterals = len(w.literalFreq) - for w.literalFreq[numLiterals-1] == 0 { - numLiterals-- - } - // get the number of offsets - numOffsets = len(w.offsetFreq) - for numOffsets > 0 && w.offsetFreq[numOffsets-1] == 0 { - numOffsets-- - } - if numOffsets == 0 { - // We haven't found a single match. If we want to go with the dynamic encoding, - // we should count at least one offset to be sure that the offset huffman tree could be encoded. - w.offsetFreq[0] = 1 - numOffsets = 1 - } - return -} - -func (w *huffmanBitWriter) generate() { - w.literalEncoding.generate(w.literalFreq[:literalCount], 15) - w.offsetEncoding.generate(w.offsetFreq[:offsetCodeCount], 15) -} - -// writeTokens writes a slice of tokens to the output. -// codes for literal and offset encoding must be supplied. -func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) { - if w.err != nil { - return - } - if len(tokens) == 0 { - return - } - - // Only last token should be endBlockMarker. - var deferEOB bool - if tokens[len(tokens)-1] == endBlockMarker { - tokens = tokens[:len(tokens)-1] - deferEOB = true - } - - // Create slices up to the next power of two to avoid bounds checks. - lits := leCodes[:256] - offs := oeCodes[:32] - lengths := leCodes[lengthCodesStart:] - lengths = lengths[:32] - - // Go 1.16 LOVES having these on stack. - bits, nbits, nbytes := w.bits, w.nbits, w.nbytes - - for _, t := range tokens { - if t < 256 { - //w.writeCode(lits[t.literal()]) - c := lits[t] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - continue - } - - // Write the length - length := t.length() - lengthCode := lengthCode(length) & 31 - if false { - w.writeCode(lengths[lengthCode]) - } else { - // inlined - c := lengths[lengthCode] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - - if lengthCode >= lengthExtraBitsMinCode { - extraLengthBits := lengthExtraBits[lengthCode] - //w.writeBits(extraLength, extraLengthBits) - extraLength := int32(length - lengthBase[lengthCode]) - bits |= uint64(extraLength) << (nbits & 63) - nbits += extraLengthBits - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - // Write the offset - offset := t.offset() - offsetCode := (offset >> 16) & 31 - if false { - w.writeCode(offs[offsetCode]) - } else { - // inlined - c := offs[offsetCode] - bits |= c.code64() << (nbits & 63) - nbits += c.len() - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - - if offsetCode >= offsetExtraBitsMinCode { - offsetComb := offsetCombined[offsetCode] - //w.writeBits(extraOffset, extraOffsetBits) - bits |= uint64((offset-(offsetComb>>8))&matchOffsetOnlyMask) << (nbits & 63) - nbits += uint8(offsetComb) - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - } - } - // Restore... - w.bits, w.nbits, w.nbytes = bits, nbits, nbytes - - if deferEOB { - w.writeCode(leCodes[endBlockMarker]) - } -} - -// huffOffset is a static offset encoder used for huffman only encoding. -// It can be reused since we will not be encoding offset values. -var huffOffset *huffmanEncoder - -func init() { - w := newHuffmanBitWriter(nil) - w.offsetFreq[0] = 1 - huffOffset = newHuffmanEncoder(offsetCodeCount) - huffOffset.generate(w.offsetFreq[:offsetCodeCount], 15) -} - -// writeBlockHuff encodes a block of bytes as either -// Huffman encoded literals or uncompressed bytes if the -// results only gains very little from compression. -func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { - if w.err != nil { - return - } - - // Clear histogram - for i := range w.literalFreq[:] { - w.literalFreq[i] = 0 - } - if !w.lastHuffMan { - for i := range w.offsetFreq[:] { - w.offsetFreq[i] = 0 - } - } - - const numLiterals = endBlockMarker + 1 - const numOffsets = 1 - - // Add everything as literals - // We have to estimate the header size. - // Assume header is around 70 bytes: - // https://stackoverflow.com/a/25454430 - const guessHeaderSizeBits = 70 * 8 - histogram(input, w.literalFreq[:numLiterals]) - ssize, storable := w.storedSize(input) - if storable && len(input) > 1024 { - // Quick check for incompressible content. - abs := float64(0) - avg := float64(len(input)) / 256 - max := float64(len(input) * 2) - for _, v := range w.literalFreq[:256] { - diff := float64(v) - avg - abs += diff * diff - if abs > max { - break - } - } - if abs < max { - if debugDeflate { - fmt.Println("stored", abs, "<", max) - } - // No chance we can compress this... - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - } - w.literalFreq[endBlockMarker] = 1 - w.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15) - estBits := w.tmpLitEncoding.canReuseBits(w.literalFreq[:numLiterals]) - if estBits < math.MaxInt32 { - estBits += w.lastHeader - if w.lastHeader == 0 { - estBits += guessHeaderSizeBits - } - estBits += estBits >> w.logNewTablePenalty - } - - // Store bytes, if we don't get a reasonable improvement. - if storable && ssize <= estBits { - if debugDeflate { - fmt.Println("stored,", ssize, "<=", estBits) - } - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) - return - } - - if w.lastHeader > 0 { - reuseSize := w.literalEncoding.canReuseBits(w.literalFreq[:256]) - - if estBits < reuseSize { - if debugDeflate { - fmt.Println("NOT reusing, reuse:", reuseSize/8, "> new:", estBits/8, "header est:", w.lastHeader/8, "bytes") - } - // We owe an EOB - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - } else if debugDeflate { - fmt.Println("reusing, reuse:", reuseSize/8, "> new:", estBits/8, "- header est:", w.lastHeader/8) - } - } - - count := 0 - if w.lastHeader == 0 { - // Use the temp encoding, so swap. - w.literalEncoding, w.tmpLitEncoding = w.tmpLitEncoding, w.literalEncoding - // Generate codegen and codegenFrequencies, which indicates how to encode - // the literalEncoding and the offsetEncoding. - w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, huffOffset) - w.codegenEncoding.generate(w.codegenFreq[:], 7) - numCodegens := w.codegens() - - // Huffman. - w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) - w.lastHuffMan = true - w.lastHeader, _ = w.headerSize() - if debugDeflate { - count += w.lastHeader - fmt.Println("header:", count/8) - } - } - - encoding := w.literalEncoding.codes[:256] - // Go 1.16 LOVES having these on stack. At least 1.5x the speed. - bits, nbits, nbytes := w.bits, w.nbits, w.nbytes - - if debugDeflate { - count -= int(nbytes)*8 + int(nbits) - } - // Unroll, write 3 codes/loop. - // Fastest number of unrolls. - for len(input) > 3 { - // We must have at least 48 bits free. - if nbits >= 8 { - n := nbits >> 3 - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - bits >>= (n * 8) & 63 - nbits -= n * 8 - nbytes += n - } - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - if debugDeflate { - count += int(nbytes) * 8 - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - a, b := encoding[input[0]], encoding[input[1]] - bits |= a.code64() << (nbits & 63) - bits |= b.code64() << ((nbits + a.len()) & 63) - c := encoding[input[2]] - nbits += b.len() + a.len() - bits |= c.code64() << (nbits & 63) - nbits += c.len() - input = input[3:] - } - - // Remaining... - for _, t := range input { - if nbits >= 48 { - binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) - //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits - bits >>= 48 - nbits -= 48 - nbytes += 6 - if nbytes >= bufferFlushSize { - if w.err != nil { - nbytes = 0 - return - } - if debugDeflate { - count += int(nbytes) * 8 - } - _, w.err = w.writer.Write(w.bytes[:nbytes]) - nbytes = 0 - } - } - // Bitwriting inlined, ~30% speedup - c := encoding[t] - bits |= c.code64() << (nbits & 63) - - nbits += c.len() - if debugDeflate { - count += int(c.len()) - } - } - // Restore... - w.bits, w.nbits, w.nbytes = bits, nbits, nbytes - - if debugDeflate { - nb := count + int(nbytes)*8 + int(nbits) - fmt.Println("wrote", nb, "bits,", nb/8, "bytes.") - } - // Flush if needed to have space. - if w.nbits >= 48 { - w.writeOutBits() - } - - if eof || sync { - w.writeCode(w.literalEncoding.codes[endBlockMarker]) - w.lastHeader = 0 - w.lastHuffMan = false - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/huffman_code.go b/tools/vendor/github.com/klauspost/compress/flate/huffman_code.go deleted file mode 100644 index be7b58b47..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/huffman_code.go +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "math" - "math/bits" -) - -const ( - maxBitsLimit = 16 - // number of valid literals - literalCount = 286 -) - -// hcode is a huffman code with a bit code and bit length. -type hcode uint32 - -func (h hcode) len() uint8 { - return uint8(h) -} - -func (h hcode) code64() uint64 { - return uint64(h >> 8) -} - -func (h hcode) zero() bool { - return h == 0 -} - -type huffmanEncoder struct { - codes []hcode - bitCount [17]int32 - - // Allocate a reusable buffer with the longest possible frequency table. - // Possible lengths are codegenCodeCount, offsetCodeCount and literalCount. - // The largest of these is literalCount, so we allocate for that case. - freqcache [literalCount + 1]literalNode -} - -type literalNode struct { - literal uint16 - freq uint16 -} - -// A levelInfo describes the state of the constructed tree for a given depth. -type levelInfo struct { - // Our level. for better printing - level int32 - - // The frequency of the last node at this level - lastFreq int32 - - // The frequency of the next character to add to this level - nextCharFreq int32 - - // The frequency of the next pair (from level below) to add to this level. - // Only valid if the "needed" value of the next lower level is 0. - nextPairFreq int32 - - // The number of chains remaining to generate for this level before moving - // up to the next level - needed int32 -} - -// set sets the code and length of an hcode. -func (h *hcode) set(code uint16, length uint8) { - *h = hcode(length) | (hcode(code) << 8) -} - -func newhcode(code uint16, length uint8) hcode { - return hcode(length) | (hcode(code) << 8) -} - -func reverseBits(number uint16, bitLength byte) uint16 { - return bits.Reverse16(number << ((16 - bitLength) & 15)) -} - -func maxNode() literalNode { return literalNode{math.MaxUint16, math.MaxUint16} } - -func newHuffmanEncoder(size int) *huffmanEncoder { - // Make capacity to next power of two. - c := uint(bits.Len32(uint32(size - 1))) - return &huffmanEncoder{codes: make([]hcode, size, 1<= 3 -// The cases of 0, 1, and 2 literals are handled by special case code. -// -// list An array of the literals with non-zero frequencies -// -// and their associated frequencies. The array is in order of increasing -// frequency, and has as its last element a special element with frequency -// MaxInt32 -// -// maxBits The maximum number of bits that should be used to encode any literal. -// -// Must be less than 16. -// -// return An integer array in which array[i] indicates the number of literals -// -// that should be encoded in i bits. -func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { - if maxBits >= maxBitsLimit { - panic("flate: maxBits too large") - } - n := int32(len(list)) - list = list[0 : n+1] - list[n] = maxNode() - - // The tree can't have greater depth than n - 1, no matter what. This - // saves a little bit of work in some small cases - if maxBits > n-1 { - maxBits = n - 1 - } - - // Create information about each of the levels. - // A bogus "Level 0" whose sole purpose is so that - // level1.prev.needed==0. This makes level1.nextPairFreq - // be a legitimate value that never gets chosen. - var levels [maxBitsLimit]levelInfo - // leafCounts[i] counts the number of literals at the left - // of ancestors of the rightmost node at level i. - // leafCounts[i][j] is the number of literals at the left - // of the level j ancestor. - var leafCounts [maxBitsLimit][maxBitsLimit]int32 - - // Descending to only have 1 bounds check. - l2f := int32(list[2].freq) - l1f := int32(list[1].freq) - l0f := int32(list[0].freq) + int32(list[1].freq) - - for level := int32(1); level <= maxBits; level++ { - // For every level, the first two items are the first two characters. - // We initialize the levels as if we had already figured this out. - levels[level] = levelInfo{ - level: level, - lastFreq: l1f, - nextCharFreq: l2f, - nextPairFreq: l0f, - } - leafCounts[level][level] = 2 - if level == 1 { - levels[level].nextPairFreq = math.MaxInt32 - } - } - - // We need a total of 2*n - 2 items at top level and have already generated 2. - levels[maxBits].needed = 2*n - 4 - - level := uint32(maxBits) - for level < 16 { - l := &levels[level] - if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 { - // We've run out of both leafs and pairs. - // End all calculations for this level. - // To make sure we never come back to this level or any lower level, - // set nextPairFreq impossibly large. - l.needed = 0 - levels[level+1].nextPairFreq = math.MaxInt32 - level++ - continue - } - - prevFreq := l.lastFreq - if l.nextCharFreq < l.nextPairFreq { - // The next item on this row is a leaf node. - n := leafCounts[level][level] + 1 - l.lastFreq = l.nextCharFreq - // Lower leafCounts are the same of the previous node. - leafCounts[level][level] = n - e := list[n] - if e.literal < math.MaxUint16 { - l.nextCharFreq = int32(e.freq) - } else { - l.nextCharFreq = math.MaxInt32 - } - } else { - // The next item on this row is a pair from the previous row. - // nextPairFreq isn't valid until we generate two - // more values in the level below - l.lastFreq = l.nextPairFreq - // Take leaf counts from the lower level, except counts[level] remains the same. - if true { - save := leafCounts[level][level] - leafCounts[level] = leafCounts[level-1] - leafCounts[level][level] = save - } else { - copy(leafCounts[level][:level], leafCounts[level-1][:level]) - } - levels[l.level-1].needed = 2 - } - - if l.needed--; l.needed == 0 { - // We've done everything we need to do for this level. - // Continue calculating one level up. Fill in nextPairFreq - // of that level with the sum of the two nodes we've just calculated on - // this level. - if l.level == maxBits { - // All done! - break - } - levels[l.level+1].nextPairFreq = prevFreq + l.lastFreq - level++ - } else { - // If we stole from below, move down temporarily to replenish it. - for levels[level-1].needed > 0 { - level-- - } - } - } - - // Somethings is wrong if at the end, the top level is null or hasn't used - // all of the leaves. - if leafCounts[maxBits][maxBits] != n { - panic("leafCounts[maxBits][maxBits] != n") - } - - bitCount := h.bitCount[:maxBits+1] - bits := 1 - counts := &leafCounts[maxBits] - for level := maxBits; level > 0; level-- { - // chain.leafCount gives the number of literals requiring at least "bits" - // bits to encode. - bitCount[bits] = counts[level] - counts[level-1] - bits++ - } - return bitCount -} - -// Look at the leaves and assign them a bit count and an encoding as specified -// in RFC 1951 3.2.2 -func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalNode) { - code := uint16(0) - for n, bits := range bitCount { - code <<= 1 - if n == 0 || bits == 0 { - continue - } - // The literals list[len(list)-bits] .. list[len(list)-bits] - // are encoded using "bits" bits, and get the values - // code, code + 1, .... The code values are - // assigned in literal order (not frequency order). - chunk := list[len(list)-int(bits):] - - sortByLiteral(chunk) - for _, node := range chunk { - h.codes[node.literal] = newhcode(reverseBits(code, uint8(n)), uint8(n)) - code++ - } - list = list[0 : len(list)-int(bits)] - } -} - -// Update this Huffman Code object to be the minimum code for the specified frequency count. -// -// freq An array of frequencies, in which frequency[i] gives the frequency of literal i. -// maxBits The maximum number of bits to use for any literal. -func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) { - list := h.freqcache[:len(freq)+1] - codes := h.codes[:len(freq)] - // Number of non-zero literals - count := 0 - // Set list to be the set of all non-zero literals and their frequencies - for i, f := range freq { - if f != 0 { - list[count] = literalNode{uint16(i), f} - count++ - } else { - codes[i] = 0 - } - } - list[count] = literalNode{} - - list = list[:count] - if count <= 2 { - // Handle the small cases here, because they are awkward for the general case code. With - // two or fewer literals, everything has bit length 1. - for i, node := range list { - // "list" is in order of increasing literal value. - h.codes[node.literal].set(uint16(i), 1) - } - return - } - sortByFreq(list) - - // Get the number of literals for each bit count - bitCount := h.bitCounts(list, maxBits) - // And do the assignment - h.assignEncodingAndSize(bitCount, list) -} - -// atLeastOne clamps the result between 1 and 15. -func atLeastOne(v float32) float32 { - if v < 1 { - return 1 - } - if v > 15 { - return 15 - } - return v -} - -func histogram(b []byte, h []uint16) { - if true && len(b) >= 8<<10 { - // Split for bigger inputs - histogramSplit(b, h) - } else { - h = h[:256] - for _, t := range b { - h[t]++ - } - } -} - -func histogramSplit(b []byte, h []uint16) { - // Tested, and slightly faster than 2-way. - // Writing to separate arrays and combining is also slightly slower. - h = h[:256] - for len(b)&3 != 0 { - h[b[0]]++ - b = b[1:] - } - n := len(b) / 4 - x, y, z, w := b[:n], b[n:], b[n+n:], b[n+n+n:] - y, z, w = y[:len(x)], z[:len(x)], w[:len(x)] - for i, t := range x { - v0 := &h[t] - v1 := &h[y[i]] - v3 := &h[w[i]] - v2 := &h[z[i]] - *v0++ - *v1++ - *v2++ - *v3++ - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go b/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go deleted file mode 100644 index 6c05ba8c1..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// Sort sorts data. -// It makes one call to data.Len to determine n, and O(n*log(n)) calls to -// data.Less and data.Swap. The sort is not guaranteed to be stable. -func sortByFreq(data []literalNode) { - n := len(data) - quickSortByFreq(data, 0, n, maxDepth(n)) -} - -func quickSortByFreq(data []literalNode, a, b, maxDepth int) { - for b-a > 12 { // Use ShellSort for slices <= 12 elements - if maxDepth == 0 { - heapSort(data, a, b) - return - } - maxDepth-- - mlo, mhi := doPivotByFreq(data, a, b) - // Avoiding recursion on the larger subproblem guarantees - // a stack depth of at most lg(b-a). - if mlo-a < b-mhi { - quickSortByFreq(data, a, mlo, maxDepth) - a = mhi // i.e., quickSortByFreq(data, mhi, b) - } else { - quickSortByFreq(data, mhi, b, maxDepth) - b = mlo // i.e., quickSortByFreq(data, a, mlo) - } - } - if b-a > 1 { - // Do ShellSort pass with gap 6 - // It could be written in this simplified form cause b-a <= 12 - for i := a + 6; i < b; i++ { - if data[i].freq == data[i-6].freq && data[i].literal < data[i-6].literal || data[i].freq < data[i-6].freq { - data[i], data[i-6] = data[i-6], data[i] - } - } - insertionSortByFreq(data, a, b) - } -} - -func doPivotByFreq(data []literalNode, lo, hi int) (midlo, midhi int) { - m := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow. - if hi-lo > 40 { - // Tukey's ``Ninther,'' median of three medians of three. - s := (hi - lo) / 8 - medianOfThreeSortByFreq(data, lo, lo+s, lo+2*s) - medianOfThreeSortByFreq(data, m, m-s, m+s) - medianOfThreeSortByFreq(data, hi-1, hi-1-s, hi-1-2*s) - } - medianOfThreeSortByFreq(data, lo, m, hi-1) - - // Invariants are: - // data[lo] = pivot (set up by ChoosePivot) - // data[lo < i < a] < pivot - // data[a <= i < b] <= pivot - // data[b <= i < c] unexamined - // data[c <= i < hi-1] > pivot - // data[hi-1] >= pivot - pivot := lo - a, c := lo+1, hi-1 - - for ; a < c && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ { - } - b := a - for { - for ; b < c && (data[pivot].freq == data[b].freq && data[pivot].literal > data[b].literal || data[pivot].freq > data[b].freq); b++ { // data[b] <= pivot - } - for ; b < c && (data[pivot].freq == data[c-1].freq && data[pivot].literal < data[c-1].literal || data[pivot].freq < data[c-1].freq); c-- { // data[c-1] > pivot - } - if b >= c { - break - } - // data[b] > pivot; data[c-1] <= pivot - data[b], data[c-1] = data[c-1], data[b] - b++ - c-- - } - // If hi-c<3 then there are duplicates (by property of median of nine). - // Let's be a bit more conservative, and set border to 5. - protect := hi-c < 5 - if !protect && hi-c < (hi-lo)/4 { - // Lets test some points for equality to pivot - dups := 0 - if data[pivot].freq == data[hi-1].freq && data[pivot].literal > data[hi-1].literal || data[pivot].freq > data[hi-1].freq { // data[hi-1] = pivot - data[c], data[hi-1] = data[hi-1], data[c] - c++ - dups++ - } - if data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq { // data[b-1] = pivot - b-- - dups++ - } - // m-lo = (hi-lo)/2 > 6 - // b-lo > (hi-lo)*3/4-1 > 8 - // ==> m < b ==> data[m] <= pivot - if data[m].freq == data[pivot].freq && data[m].literal > data[pivot].literal || data[m].freq > data[pivot].freq { // data[m] = pivot - data[m], data[b-1] = data[b-1], data[m] - b-- - dups++ - } - // if at least 2 points are equal to pivot, assume skewed distribution - protect = dups > 1 - } - if protect { - // Protect against a lot of duplicates - // Add invariant: - // data[a <= i < b] unexamined - // data[b <= i < c] = pivot - for { - for ; a < b && (data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq); b-- { // data[b] == pivot - } - for ; a < b && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ { // data[a] < pivot - } - if a >= b { - break - } - // data[a] == pivot; data[b-1] < pivot - data[a], data[b-1] = data[b-1], data[a] - a++ - b-- - } - } - // Swap pivot into middle - data[pivot], data[b-1] = data[b-1], data[pivot] - return b - 1, c -} - -// Insertion sort -func insertionSortByFreq(data []literalNode, a, b int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && (data[j].freq == data[j-1].freq && data[j].literal < data[j-1].literal || data[j].freq < data[j-1].freq); j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// quickSortByFreq, loosely following Bentley and McIlroy, -// ``Engineering a Sort Function,'' SP&E November 1993. - -// medianOfThreeSortByFreq moves the median of the three values data[m0], data[m1], data[m2] into data[m1]. -func medianOfThreeSortByFreq(data []literalNode, m1, m0, m2 int) { - // sort 3 elements - if data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq { - data[m1], data[m0] = data[m0], data[m1] - } - // data[m0] <= data[m1] - if data[m2].freq == data[m1].freq && data[m2].literal < data[m1].literal || data[m2].freq < data[m1].freq { - data[m2], data[m1] = data[m1], data[m2] - // data[m0] <= data[m2] && data[m1] < data[m2] - if data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq { - data[m1], data[m0] = data[m0], data[m1] - } - } - // now data[m0] <= data[m1] <= data[m2] -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go b/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go deleted file mode 100644 index 93f1aea10..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -// Sort sorts data. -// It makes one call to data.Len to determine n, and O(n*log(n)) calls to -// data.Less and data.Swap. The sort is not guaranteed to be stable. -func sortByLiteral(data []literalNode) { - n := len(data) - quickSort(data, 0, n, maxDepth(n)) -} - -func quickSort(data []literalNode, a, b, maxDepth int) { - for b-a > 12 { // Use ShellSort for slices <= 12 elements - if maxDepth == 0 { - heapSort(data, a, b) - return - } - maxDepth-- - mlo, mhi := doPivot(data, a, b) - // Avoiding recursion on the larger subproblem guarantees - // a stack depth of at most lg(b-a). - if mlo-a < b-mhi { - quickSort(data, a, mlo, maxDepth) - a = mhi // i.e., quickSort(data, mhi, b) - } else { - quickSort(data, mhi, b, maxDepth) - b = mlo // i.e., quickSort(data, a, mlo) - } - } - if b-a > 1 { - // Do ShellSort pass with gap 6 - // It could be written in this simplified form cause b-a <= 12 - for i := a + 6; i < b; i++ { - if data[i].literal < data[i-6].literal { - data[i], data[i-6] = data[i-6], data[i] - } - } - insertionSort(data, a, b) - } -} -func heapSort(data []literalNode, a, b int) { - first := a - lo := 0 - hi := b - a - - // Build heap with greatest element at top. - for i := (hi - 1) / 2; i >= 0; i-- { - siftDown(data, i, hi, first) - } - - // Pop elements, largest first, into end of data. - for i := hi - 1; i >= 0; i-- { - data[first], data[first+i] = data[first+i], data[first] - siftDown(data, lo, i, first) - } -} - -// siftDown implements the heap property on data[lo, hi). -// first is an offset into the array where the root of the heap lies. -func siftDown(data []literalNode, lo, hi, first int) { - root := lo - for { - child := 2*root + 1 - if child >= hi { - break - } - if child+1 < hi && data[first+child].literal < data[first+child+1].literal { - child++ - } - if data[first+root].literal > data[first+child].literal { - return - } - data[first+root], data[first+child] = data[first+child], data[first+root] - root = child - } -} -func doPivot(data []literalNode, lo, hi int) (midlo, midhi int) { - m := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow. - if hi-lo > 40 { - // Tukey's ``Ninther,'' median of three medians of three. - s := (hi - lo) / 8 - medianOfThree(data, lo, lo+s, lo+2*s) - medianOfThree(data, m, m-s, m+s) - medianOfThree(data, hi-1, hi-1-s, hi-1-2*s) - } - medianOfThree(data, lo, m, hi-1) - - // Invariants are: - // data[lo] = pivot (set up by ChoosePivot) - // data[lo < i < a] < pivot - // data[a <= i < b] <= pivot - // data[b <= i < c] unexamined - // data[c <= i < hi-1] > pivot - // data[hi-1] >= pivot - pivot := lo - a, c := lo+1, hi-1 - - for ; a < c && data[a].literal < data[pivot].literal; a++ { - } - b := a - for { - for ; b < c && data[pivot].literal > data[b].literal; b++ { // data[b] <= pivot - } - for ; b < c && data[pivot].literal < data[c-1].literal; c-- { // data[c-1] > pivot - } - if b >= c { - break - } - // data[b] > pivot; data[c-1] <= pivot - data[b], data[c-1] = data[c-1], data[b] - b++ - c-- - } - // If hi-c<3 then there are duplicates (by property of median of nine). - // Let's be a bit more conservative, and set border to 5. - protect := hi-c < 5 - if !protect && hi-c < (hi-lo)/4 { - // Lets test some points for equality to pivot - dups := 0 - if data[pivot].literal > data[hi-1].literal { // data[hi-1] = pivot - data[c], data[hi-1] = data[hi-1], data[c] - c++ - dups++ - } - if data[b-1].literal > data[pivot].literal { // data[b-1] = pivot - b-- - dups++ - } - // m-lo = (hi-lo)/2 > 6 - // b-lo > (hi-lo)*3/4-1 > 8 - // ==> m < b ==> data[m] <= pivot - if data[m].literal > data[pivot].literal { // data[m] = pivot - data[m], data[b-1] = data[b-1], data[m] - b-- - dups++ - } - // if at least 2 points are equal to pivot, assume skewed distribution - protect = dups > 1 - } - if protect { - // Protect against a lot of duplicates - // Add invariant: - // data[a <= i < b] unexamined - // data[b <= i < c] = pivot - for { - for ; a < b && data[b-1].literal > data[pivot].literal; b-- { // data[b] == pivot - } - for ; a < b && data[a].literal < data[pivot].literal; a++ { // data[a] < pivot - } - if a >= b { - break - } - // data[a] == pivot; data[b-1] < pivot - data[a], data[b-1] = data[b-1], data[a] - a++ - b-- - } - } - // Swap pivot into middle - data[pivot], data[b-1] = data[b-1], data[pivot] - return b - 1, c -} - -// Insertion sort -func insertionSort(data []literalNode, a, b int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && data[j].literal < data[j-1].literal; j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// maxDepth returns a threshold at which quicksort should switch -// to heapsort. It returns 2*ceil(lg(n+1)). -func maxDepth(n int) int { - var depth int - for i := n; i > 0; i >>= 1 { - depth++ - } - return depth * 2 -} - -// medianOfThree moves the median of the three values data[m0], data[m1], data[m2] into data[m1]. -func medianOfThree(data []literalNode, m1, m0, m2 int) { - // sort 3 elements - if data[m1].literal < data[m0].literal { - data[m1], data[m0] = data[m0], data[m1] - } - // data[m0] <= data[m1] - if data[m2].literal < data[m1].literal { - data[m2], data[m1] = data[m1], data[m2] - // data[m0] <= data[m2] && data[m1] < data[m2] - if data[m1].literal < data[m0].literal { - data[m1], data[m0] = data[m0], data[m1] - } - } - // now data[m0] <= data[m1] <= data[m2] -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/inflate.go b/tools/vendor/github.com/klauspost/compress/flate/inflate.go deleted file mode 100644 index 2f410d64f..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/inflate.go +++ /dev/null @@ -1,829 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package flate implements the DEFLATE compressed data format, described in -// RFC 1951. The gzip and zlib packages implement access to DEFLATE-based file -// formats. -package flate - -import ( - "bufio" - "compress/flate" - "fmt" - "io" - "math/bits" - "sync" -) - -const ( - maxCodeLen = 16 // max length of Huffman code - maxCodeLenMask = 15 // mask for max length of Huffman code - // The next three numbers come from the RFC section 3.2.7, with the - // additional proviso in section 3.2.5 which implies that distance codes - // 30 and 31 should never occur in compressed data. - maxNumLit = 286 - maxNumDist = 30 - numCodes = 19 // number of codes in Huffman meta-code - - debugDecode = false -) - -// Value of length - 3 and extra bits. -type lengthExtra struct { - length, extra uint8 -} - -var decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}} - -var bitMask32 = [32]uint32{ - 0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, - 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, - 0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF, - 0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF, -} // up to 32 bits - -// Initialize the fixedHuffmanDecoder only once upon first use. -var fixedOnce sync.Once -var fixedHuffmanDecoder huffmanDecoder - -// A CorruptInputError reports the presence of corrupt input at a given offset. -type CorruptInputError = flate.CorruptInputError - -// An InternalError reports an error in the flate code itself. -type InternalError string - -func (e InternalError) Error() string { return "flate: internal error: " + string(e) } - -// A ReadError reports an error encountered while reading input. -// -// Deprecated: No longer returned. -type ReadError = flate.ReadError - -// A WriteError reports an error encountered while writing output. -// -// Deprecated: No longer returned. -type WriteError = flate.WriteError - -// Resetter resets a ReadCloser returned by NewReader or NewReaderDict to -// to switch to a new underlying Reader. This permits reusing a ReadCloser -// instead of allocating a new one. -type Resetter interface { - // Reset discards any buffered data and resets the Resetter as if it was - // newly initialized with the given reader. - Reset(r io.Reader, dict []byte) error -} - -// The data structure for decoding Huffman tables is based on that of -// zlib. There is a lookup table of a fixed bit width (huffmanChunkBits), -// For codes smaller than the table width, there are multiple entries -// (each combination of trailing bits has the same value). For codes -// larger than the table width, the table contains a link to an overflow -// table. The width of each entry in the link table is the maximum code -// size minus the chunk width. -// -// Note that you can do a lookup in the table even without all bits -// filled. Since the extra bits are zero, and the DEFLATE Huffman codes -// have the property that shorter codes come before longer ones, the -// bit length estimate in the result is a lower bound on the actual -// number of bits. -// -// See the following: -// http://www.gzip.org/algorithm.txt - -// chunk & 15 is number of bits -// chunk >> 4 is value, including table link - -const ( - huffmanChunkBits = 9 - huffmanNumChunks = 1 << huffmanChunkBits - huffmanCountMask = 15 - huffmanValueShift = 4 -) - -type huffmanDecoder struct { - maxRead int // the maximum number of bits we can read and not overread - chunks *[huffmanNumChunks]uint16 // chunks as described above - links [][]uint16 // overflow links - linkMask uint32 // mask the width of the link table -} - -// Initialize Huffman decoding tables from array of code lengths. -// Following this function, h is guaranteed to be initialized into a complete -// tree (i.e., neither over-subscribed nor under-subscribed). The exception is a -// degenerate case where the tree has only a single symbol with length 1. Empty -// trees are permitted. -func (h *huffmanDecoder) init(lengths []int) bool { - // Sanity enables additional runtime tests during Huffman - // table construction. It's intended to be used during - // development to supplement the currently ad-hoc unit tests. - const sanity = false - - if h.chunks == nil { - h.chunks = new([huffmanNumChunks]uint16) - } - - if h.maxRead != 0 { - *h = huffmanDecoder{chunks: h.chunks, links: h.links} - } - - // Count number of codes of each length, - // compute maxRead and max length. - var count [maxCodeLen]int - var min, max int - for _, n := range lengths { - if n == 0 { - continue - } - if min == 0 || n < min { - min = n - } - if n > max { - max = n - } - count[n&maxCodeLenMask]++ - } - - // Empty tree. The decompressor.huffSym function will fail later if the tree - // is used. Technically, an empty tree is only valid for the HDIST tree and - // not the HCLEN and HLIT tree. However, a stream with an empty HCLEN tree - // is guaranteed to fail since it will attempt to use the tree to decode the - // codes for the HLIT and HDIST trees. Similarly, an empty HLIT tree is - // guaranteed to fail later since the compressed data section must be - // composed of at least one symbol (the end-of-block marker). - if max == 0 { - return true - } - - code := 0 - var nextcode [maxCodeLen]int - for i := min; i <= max; i++ { - code <<= 1 - nextcode[i&maxCodeLenMask] = code - code += count[i&maxCodeLenMask] - } - - // Check that the coding is complete (i.e., that we've - // assigned all 2-to-the-max possible bit sequences). - // Exception: To be compatible with zlib, we also need to - // accept degenerate single-code codings. See also - // TestDegenerateHuffmanCoding. - if code != 1< huffmanChunkBits { - numLinks := 1 << (uint(max) - huffmanChunkBits) - h.linkMask = uint32(numLinks - 1) - - // create link tables - link := nextcode[huffmanChunkBits+1] >> 1 - if cap(h.links) < huffmanNumChunks-link { - h.links = make([][]uint16, huffmanNumChunks-link) - } else { - h.links = h.links[:huffmanNumChunks-link] - } - for j := uint(link); j < huffmanNumChunks; j++ { - reverse := int(bits.Reverse16(uint16(j))) - reverse >>= uint(16 - huffmanChunkBits) - off := j - uint(link) - if sanity && h.chunks[reverse] != 0 { - panic("impossible: overwriting existing chunk") - } - h.chunks[reverse] = uint16(off<>= uint(16 - n) - if n <= huffmanChunkBits { - for off := reverse; off < len(h.chunks); off += 1 << uint(n) { - // We should never need to overwrite - // an existing chunk. Also, 0 is - // never a valid chunk, because the - // lower 4 "count" bits should be - // between 1 and 15. - if sanity && h.chunks[off] != 0 { - panic("impossible: overwriting existing chunk") - } - h.chunks[off] = chunk - } - } else { - j := reverse & (huffmanNumChunks - 1) - if sanity && h.chunks[j]&huffmanCountMask != huffmanChunkBits+1 { - // Longer codes should have been - // associated with a link table above. - panic("impossible: not an indirect chunk") - } - value := h.chunks[j] >> huffmanValueShift - linktab := h.links[value] - reverse >>= huffmanChunkBits - for off := reverse; off < len(linktab); off += 1 << uint(n-huffmanChunkBits) { - if sanity && linktab[off] != 0 { - panic("impossible: overwriting existing chunk") - } - linktab[off] = chunk - } - } - } - - if sanity { - // Above we've sanity checked that we never overwrote - // an existing entry. Here we additionally check that - // we filled the tables completely. - for i, chunk := range h.chunks { - if chunk == 0 { - // As an exception, in the degenerate - // single-code case, we allow odd - // chunks to be missing. - if code == 1 && i%2 == 1 { - continue - } - panic("impossible: missing chunk") - } - } - for _, linktab := range h.links { - for _, chunk := range linktab { - if chunk == 0 { - panic("impossible: missing chunk") - } - } - } - } - - return true -} - -// Reader is the actual read interface needed by NewReader. -// If the passed in io.Reader does not also have ReadByte, -// the NewReader will introduce its own buffering. -type Reader interface { - io.Reader - io.ByteReader -} - -type step uint8 - -const ( - copyData step = iota + 1 - nextBlock - huffmanBytesBuffer - huffmanBytesReader - huffmanBufioReader - huffmanStringsReader - huffmanGenericReader -) - -// Decompress state. -type decompressor struct { - // Input source. - r Reader - roffset int64 - - // Huffman decoders for literal/length, distance. - h1, h2 huffmanDecoder - - // Length arrays used to define Huffman codes. - bits *[maxNumLit + maxNumDist]int - codebits *[numCodes]int - - // Output history, buffer. - dict dictDecoder - - // Next step in the decompression, - // and decompression state. - step step - stepState int - err error - toRead []byte - hl, hd *huffmanDecoder - copyLen int - copyDist int - - // Temporary buffer (avoids repeated allocation). - buf [4]byte - - // Input bits, in top of b. - b uint32 - - nb uint - final bool -} - -func (f *decompressor) nextBlock() { - for f.nb < 1+2 { - if f.err = f.moreBits(); f.err != nil { - return - } - } - f.final = f.b&1 == 1 - f.b >>= 1 - typ := f.b & 3 - f.b >>= 2 - f.nb -= 1 + 2 - switch typ { - case 0: - f.dataBlock() - if debugDecode { - fmt.Println("stored block") - } - case 1: - // compressed, fixed Huffman tables - f.hl = &fixedHuffmanDecoder - f.hd = nil - f.huffmanBlockDecoder() - if debugDecode { - fmt.Println("predefinied huffman block") - } - case 2: - // compressed, dynamic Huffman tables - if f.err = f.readHuffman(); f.err != nil { - break - } - f.hl = &f.h1 - f.hd = &f.h2 - f.huffmanBlockDecoder() - if debugDecode { - fmt.Println("dynamic huffman block") - } - default: - // 3 is reserved. - if debugDecode { - fmt.Println("reserved data block encountered") - } - f.err = CorruptInputError(f.roffset) - } -} - -func (f *decompressor) Read(b []byte) (int, error) { - for { - if len(f.toRead) > 0 { - n := copy(b, f.toRead) - f.toRead = f.toRead[n:] - if len(f.toRead) == 0 { - return n, f.err - } - return n, nil - } - if f.err != nil { - return 0, f.err - } - - f.doStep() - - if f.err != nil && len(f.toRead) == 0 { - f.toRead = f.dict.readFlush() // Flush what's left in case of error - } - } -} - -// WriteTo implements the io.WriteTo interface for io.Copy and friends. -func (f *decompressor) WriteTo(w io.Writer) (int64, error) { - total := int64(0) - flushed := false - for { - if len(f.toRead) > 0 { - n, err := w.Write(f.toRead) - total += int64(n) - if err != nil { - f.err = err - return total, err - } - if n != len(f.toRead) { - return total, io.ErrShortWrite - } - f.toRead = f.toRead[:0] - } - if f.err != nil && flushed { - if f.err == io.EOF { - return total, nil - } - return total, f.err - } - if f.err == nil { - f.doStep() - } - if len(f.toRead) == 0 && f.err != nil && !flushed { - f.toRead = f.dict.readFlush() // Flush what's left in case of error - flushed = true - } - } -} - -func (f *decompressor) Close() error { - if f.err == io.EOF { - return nil - } - return f.err -} - -// RFC 1951 section 3.2.7. -// Compression with dynamic Huffman codes - -var codeOrder = [...]int{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} - -func (f *decompressor) readHuffman() error { - // HLIT[5], HDIST[5], HCLEN[4]. - for f.nb < 5+5+4 { - if err := f.moreBits(); err != nil { - return err - } - } - nlit := int(f.b&0x1F) + 257 - if nlit > maxNumLit { - if debugDecode { - fmt.Println("nlit > maxNumLit", nlit) - } - return CorruptInputError(f.roffset) - } - f.b >>= 5 - ndist := int(f.b&0x1F) + 1 - if ndist > maxNumDist { - if debugDecode { - fmt.Println("ndist > maxNumDist", ndist) - } - return CorruptInputError(f.roffset) - } - f.b >>= 5 - nclen := int(f.b&0xF) + 4 - // numCodes is 19, so nclen is always valid. - f.b >>= 4 - f.nb -= 5 + 5 + 4 - - // (HCLEN+4)*3 bits: code lengths in the magic codeOrder order. - for i := 0; i < nclen; i++ { - for f.nb < 3 { - if err := f.moreBits(); err != nil { - return err - } - } - f.codebits[codeOrder[i]] = int(f.b & 0x7) - f.b >>= 3 - f.nb -= 3 - } - for i := nclen; i < len(codeOrder); i++ { - f.codebits[codeOrder[i]] = 0 - } - if !f.h1.init(f.codebits[0:]) { - if debugDecode { - fmt.Println("init codebits failed") - } - return CorruptInputError(f.roffset) - } - - // HLIT + 257 code lengths, HDIST + 1 code lengths, - // using the code length Huffman code. - for i, n := 0, nlit+ndist; i < n; { - x, err := f.huffSym(&f.h1) - if err != nil { - return err - } - if x < 16 { - // Actual length. - f.bits[i] = x - i++ - continue - } - // Repeat previous length or zero. - var rep int - var nb uint - var b int - switch x { - default: - return InternalError("unexpected length code") - case 16: - rep = 3 - nb = 2 - if i == 0 { - if debugDecode { - fmt.Println("i==0") - } - return CorruptInputError(f.roffset) - } - b = f.bits[i-1] - case 17: - rep = 3 - nb = 3 - b = 0 - case 18: - rep = 11 - nb = 7 - b = 0 - } - for f.nb < nb { - if err := f.moreBits(); err != nil { - if debugDecode { - fmt.Println("morebits:", err) - } - return err - } - } - rep += int(f.b & uint32(1<<(nb®SizeMaskUint32)-1)) - f.b >>= nb & regSizeMaskUint32 - f.nb -= nb - if i+rep > n { - if debugDecode { - fmt.Println("i+rep > n", i, rep, n) - } - return CorruptInputError(f.roffset) - } - for j := 0; j < rep; j++ { - f.bits[i] = b - i++ - } - } - - if !f.h1.init(f.bits[0:nlit]) || !f.h2.init(f.bits[nlit:nlit+ndist]) { - if debugDecode { - fmt.Println("init2 failed") - } - return CorruptInputError(f.roffset) - } - - // As an optimization, we can initialize the maxRead bits to read at a time - // for the HLIT tree to the length of the EOB marker since we know that - // every block must terminate with one. This preserves the property that - // we never read any extra bytes after the end of the DEFLATE stream. - if f.h1.maxRead < f.bits[endBlockMarker] { - f.h1.maxRead = f.bits[endBlockMarker] - } - if !f.final { - // If not the final block, the smallest block possible is - // a predefined table, BTYPE=01, with a single EOB marker. - // This will take up 3 + 7 bits. - f.h1.maxRead += 10 - } - - return nil -} - -// Copy a single uncompressed data block from input to output. -func (f *decompressor) dataBlock() { - // Uncompressed. - // Discard current half-byte. - left := (f.nb) & 7 - f.nb -= left - f.b >>= left - - offBytes := f.nb >> 3 - // Unfilled values will be overwritten. - f.buf[0] = uint8(f.b) - f.buf[1] = uint8(f.b >> 8) - f.buf[2] = uint8(f.b >> 16) - f.buf[3] = uint8(f.b >> 24) - - f.roffset += int64(offBytes) - f.nb, f.b = 0, 0 - - // Length then ones-complement of length. - nr, err := io.ReadFull(f.r, f.buf[offBytes:4]) - f.roffset += int64(nr) - if err != nil { - f.err = noEOF(err) - return - } - n := uint16(f.buf[0]) | uint16(f.buf[1])<<8 - nn := uint16(f.buf[2]) | uint16(f.buf[3])<<8 - if nn != ^n { - if debugDecode { - ncomp := ^n - fmt.Println("uint16(nn) != uint16(^n)", nn, ncomp) - } - f.err = CorruptInputError(f.roffset) - return - } - - if n == 0 { - f.toRead = f.dict.readFlush() - f.finishBlock() - return - } - - f.copyLen = int(n) - f.copyData() -} - -// copyData copies f.copyLen bytes from the underlying reader into f.hist. -// It pauses for reads when f.hist is full. -func (f *decompressor) copyData() { - buf := f.dict.writeSlice() - if len(buf) > f.copyLen { - buf = buf[:f.copyLen] - } - - cnt, err := io.ReadFull(f.r, buf) - f.roffset += int64(cnt) - f.copyLen -= cnt - f.dict.writeMark(cnt) - if err != nil { - f.err = noEOF(err) - return - } - - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() - f.step = copyData - return - } - f.finishBlock() -} - -func (f *decompressor) finishBlock() { - if f.final { - if f.dict.availRead() > 0 { - f.toRead = f.dict.readFlush() - } - f.err = io.EOF - } - f.step = nextBlock -} - -func (f *decompressor) doStep() { - switch f.step { - case copyData: - f.copyData() - case nextBlock: - f.nextBlock() - case huffmanBytesBuffer: - f.huffmanBytesBuffer() - case huffmanBytesReader: - f.huffmanBytesReader() - case huffmanBufioReader: - f.huffmanBufioReader() - case huffmanStringsReader: - f.huffmanStringsReader() - case huffmanGenericReader: - f.huffmanGenericReader() - default: - panic("BUG: unexpected step state") - } -} - -// noEOF returns err, unless err == io.EOF, in which case it returns io.ErrUnexpectedEOF. -func noEOF(e error) error { - if e == io.EOF { - return io.ErrUnexpectedEOF - } - return e -} - -func (f *decompressor) moreBits() error { - c, err := f.r.ReadByte() - if err != nil { - return noEOF(err) - } - f.roffset++ - f.b |= uint32(c) << (f.nb & regSizeMaskUint32) - f.nb += 8 - return nil -} - -// Read the next Huffman-encoded symbol from f according to h. -func (f *decompressor) huffSym(h *huffmanDecoder) (int, error) { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(h.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b - for { - for nb < n { - c, err := f.r.ReadByte() - if err != nil { - f.b = b - f.nb = nb - return 0, noEOF(err) - } - f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 - } - chunk := h.chunks[b&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = h.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&h.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= nb { - if n == 0 { - f.b = b - f.nb = nb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return 0, f.err - } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n - return int(chunk >> huffmanValueShift), nil - } - } -} - -func makeReader(r io.Reader) Reader { - if rr, ok := r.(Reader); ok { - return rr - } - return bufio.NewReader(r) -} - -func fixedHuffmanDecoderInit() { - fixedOnce.Do(func() { - // These come from the RFC section 3.2.6. - var bits [288]int - for i := 0; i < 144; i++ { - bits[i] = 8 - } - for i := 144; i < 256; i++ { - bits[i] = 9 - } - for i := 256; i < 280; i++ { - bits[i] = 7 - } - for i := 280; i < 288; i++ { - bits[i] = 8 - } - fixedHuffmanDecoder.init(bits[:]) - }) -} - -func (f *decompressor) Reset(r io.Reader, dict []byte) error { - *f = decompressor{ - r: makeReader(r), - bits: f.bits, - codebits: f.codebits, - h1: f.h1, - h2: f.h2, - dict: f.dict, - step: nextBlock, - } - f.dict.init(maxMatchOffset, dict) - return nil -} - -// NewReader returns a new ReadCloser that can be used -// to read the uncompressed version of r. -// If r does not also implement io.ByteReader, -// the decompressor may read more data than necessary from r. -// It is the caller's responsibility to call Close on the ReadCloser -// when finished reading. -// -// The ReadCloser returned by NewReader also implements Resetter. -func NewReader(r io.Reader) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, nil) - return &f -} - -// NewReaderDict is like NewReader but initializes the reader -// with a preset dictionary. The returned Reader behaves as if -// the uncompressed data stream started with the given dictionary, -// which has already been read. NewReaderDict is typically used -// to read data compressed by NewWriterDict. -// -// The ReadCloser returned by NewReader also implements Resetter. -func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser { - fixedHuffmanDecoderInit() - - var f decompressor - f.r = makeReader(r) - f.bits = new([maxNumLit + maxNumDist]int) - f.codebits = new([numCodes]int) - f.step = nextBlock - f.dict.init(maxMatchOffset, dict) - return &f -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/inflate_gen.go b/tools/vendor/github.com/klauspost/compress/flate/inflate_gen.go deleted file mode 100644 index 2b2f993f7..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/inflate_gen.go +++ /dev/null @@ -1,1283 +0,0 @@ -// Code generated by go generate gen_inflate.go. DO NOT EDIT. - -package flate - -import ( - "bufio" - "bytes" - "fmt" - "math/bits" - "strings" -) - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBytesBuffer() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bytes.Buffer) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesBuffer - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesBuffer // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBytesReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bytes.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBytesReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBufioReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*bufio.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanBufioReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanBufioReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanStringsReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(*strings.Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanStringsReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanStringsReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanGenericReader() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - fr := f.r.(Reader) - - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - fnb, fb, dict := f.nb, f.b, &f.dict - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var length int - switch { - case v < 256: - dict.writeByte(byte(v)) - if dict.availWrite() == 0 { - f.toRead = dict.readFlush() - f.step = huffmanGenericReader - f.stepState = stateInit - f.b, f.nb = fb, fnb - return - } - goto readLiteral - case v == 256: - f.b, f.nb = fb, fnb - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - case v < maxNumLit: - val := decCodeToLen[(v - 257)] - length = int(val.length) + 3 - n := uint(val.extra) - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - length += int(fb & bitMask32[n]) - fb >>= n & regSizeMaskUint32 - fnb -= n - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - f.b, f.nb = fb, fnb - return - } - - var dist uint32 - if f.hd == nil { - for fnb < 5 { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) - fb >>= 5 - fnb -= 5 - } else { - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hd.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - for { - for fnb < n { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - f.err = noEOF(err) - return - } - f.roffset++ - fb |= uint32(c) << (fnb & regSizeMaskUint32) - fnb += 8 - } - chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= fnb { - if n == 0 { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - fb = fb >> (n & regSizeMaskUint32) - fnb = fnb - n - dist = uint32(chunk >> huffmanValueShift) - break - } - } - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for fnb < nb { - c, err := fr.ReadByte() - if err != nil { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - fnb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - // slower: dist = bitMask32[nb+1] + 2 + extra - default: - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(dict.histSize()) { - f.b, f.nb = fb, fnb - if debugDecode { - fmt.Println("dist > dict.histSize():", dist, dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = dict.readFlush() - f.step = huffmanGenericReader // We need to continue this work - f.stepState = stateDict - f.b, f.nb = fb, fnb - return - } - goto readLiteral - } - // Not reached -} - -func (f *decompressor) huffmanBlockDecoder() { - switch f.r.(type) { - case *bytes.Buffer: - f.huffmanBytesBuffer() - case *bytes.Reader: - f.huffmanBytesReader() - case *bufio.Reader: - f.huffmanBufioReader() - case *strings.Reader: - f.huffmanStringsReader() - case Reader: - f.huffmanGenericReader() - default: - f.huffmanGenericReader() - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level1.go b/tools/vendor/github.com/klauspost/compress/flate/level1.go deleted file mode 100644 index 703b9a89a..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level1.go +++ /dev/null @@ -1,241 +0,0 @@ -package flate - -import ( - "encoding/binary" - "fmt" - "math/bits" -) - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastEncL1 struct { - fastGen - table [tableSize]tableEntry -} - -// EncodeL1 uses a similar algorithm to level 1 -func (e *fastEncL1) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashBytes = 5 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - - for { - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, tableBits, hashBytes) - candidate = e.table[nextHash] - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - - now := load6432(src, nextS) - e.table[nextHash] = tableEntry{offset: s + e.cur} - nextHash = hashLen(now, tableBits, hashBytes) - - offset := s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - - // Do one right away... - cv = now - s = nextS - nextS++ - candidate = e.table[nextHash] - now >>= 8 - e.table[nextHash] = tableEntry{offset: s + e.cur} - - offset = s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - cv = now - s = nextS - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - e.cur - var l = int32(4) - if false { - l = e.matchlenLong(s+4, t+4, src) + 4 - } else { - // inlined: - a := src[s+4:] - b := src[t+4:] - for len(a) >= 8 { - if diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b); diff != 0 { - l += int32(bits.TrailingZeros64(diff) >> 3) - break - } - l += 8 - a = a[8:] - b = b[8:] - } - if len(a) < 8 { - b = b[:len(a)] - for i := range a { - if a[i] != b[i] { - break - } - l++ - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - // Save the match found - if false { - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - } else { - // Inlined... - xoffset := uint32(s - t - baseMatchOffset) - xlength := l - oc := offsetCode(xoffset) - xoffset |= oc << 16 - for xlength > 0 { - xl := xlength - if xl > 258 { - if xl > 258+baseMatchLength { - xl = 258 - } else { - xl = 258 - baseMatchLength - } - } - xlength -= xl - xl -= baseMatchLength - dst.extraHist[lengthCodes1[uint8(xl)]]++ - dst.offHist[oc]++ - dst.tokens[dst.n] = token(matchType | uint32(xl)<= s { - s = nextS + 1 - } - if s >= sLimit { - // Index first pair after match end. - if int(s+l+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, tableBits, hashBytes)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 and at s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6432(src, s-2) - o := e.cur + s - 2 - prevHash := hashLen(x, tableBits, hashBytes) - e.table[prevHash] = tableEntry{offset: o} - x >>= 16 - currHash := hashLen(x, tableBits, hashBytes) - candidate = e.table[currHash] - e.table[currHash] = tableEntry{offset: o + 2} - - offset := s - (candidate.offset - e.cur) - if offset > maxMatchOffset || uint32(x) != load3232(src, candidate.offset-e.cur) { - cv = x >> 8 - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level2.go b/tools/vendor/github.com/klauspost/compress/flate/level2.go deleted file mode 100644 index 876dfbe30..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level2.go +++ /dev/null @@ -1,214 +0,0 @@ -package flate - -import "fmt" - -// fastGen maintains the table for matches, -// and the previous byte block for level 2. -// This is the generic implementation. -type fastEncL2 struct { - fastGen - table [bTableSize]tableEntry -} - -// EncodeL2 uses a similar algorithm to level 1, but is capable -// of matching across blocks giving better compression at a small slowdown. -func (e *fastEncL2) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashBytes = 5 - ) - - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - // When should we start skipping if we haven't found matches in a long while. - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, bTableBits, hashBytes) - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - candidate = e.table[nextHash] - now := load6432(src, nextS) - e.table[nextHash] = tableEntry{offset: s + e.cur} - nextHash = hashLen(now, bTableBits, hashBytes) - - offset := s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - e.table[nextHash] = tableEntry{offset: nextS + e.cur} - break - } - - // Do one right away... - cv = now - s = nextS - nextS++ - candidate = e.table[nextHash] - now >>= 8 - e.table[nextHash] = tableEntry{offset: s + e.cur} - - offset = s - (candidate.offset - e.cur) - if offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - break - } - cv = now - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Call emitCopy, and then see if another emitCopy could be our next - // move. Repeat until we find no match for the input immediately after - // what was consumed by the last emitCopy call. - // - // If we exit this loop normally then we need to call emitLiteral next, - // though we don't yet know how big the literal will be. We handle that - // by proceeding to the next iteration of the main loop. We also can - // exit this loop via goto if we get close to exhausting the input. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - e.cur - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index first pair after match end. - if int(s+l+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, bTableBits, hashBytes)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // Store every second hash in-between, but offset by 1. - for i := s - l + 2; i < s-5; i += 7 { - x := load6432(src, i) - nextHash := hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i} - // Skip one - x >>= 16 - nextHash = hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i + 2} - // Skip one - x >>= 16 - nextHash = hashLen(x, bTableBits, hashBytes) - e.table[nextHash] = tableEntry{offset: e.cur + i + 4} - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 to s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6432(src, s-2) - o := e.cur + s - 2 - prevHash := hashLen(x, bTableBits, hashBytes) - prevHash2 := hashLen(x>>8, bTableBits, hashBytes) - e.table[prevHash] = tableEntry{offset: o} - e.table[prevHash2] = tableEntry{offset: o + 1} - currHash := hashLen(x>>16, bTableBits, hashBytes) - candidate = e.table[currHash] - e.table[currHash] = tableEntry{offset: o + 2} - - offset := s - (candidate.offset - e.cur) - if offset > maxMatchOffset || uint32(x>>16) != load3232(src, candidate.offset-e.cur) { - cv = x >> 24 - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level3.go b/tools/vendor/github.com/klauspost/compress/flate/level3.go deleted file mode 100644 index 7aa2b72a1..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level3.go +++ /dev/null @@ -1,241 +0,0 @@ -package flate - -import "fmt" - -// fastEncL3 -type fastEncL3 struct { - fastGen - table [1 << 16]tableEntryPrev -} - -// Encode uses a similar algorithm to level 2, will check up to two candidates. -func (e *fastEncL3) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - tableBits = 16 - tableSize = 1 << tableBits - hashBytes = 5 - ) - - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - } - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - e.table[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // Skip if too small. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 7 - nextS := s - var candidate tableEntry - for { - nextHash := hashLen(cv, tableBits, hashBytes) - s = nextS - nextS = s + 1 + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - candidates := e.table[nextHash] - now := load6432(src, nextS) - - // Safe offset distance until s + 4... - minOffset := e.cur + s - (maxMatchOffset - 4) - e.table[nextHash] = tableEntryPrev{Prev: candidates.Cur, Cur: tableEntry{offset: s + e.cur}} - - // Check both candidates - candidate = candidates.Cur - if candidate.offset < minOffset { - cv = now - // Previous will also be invalid, we have nothing. - continue - } - - if uint32(cv) == load3232(src, candidate.offset-e.cur) { - if candidates.Prev.offset < minOffset || uint32(cv) != load3232(src, candidates.Prev.offset-e.cur) { - break - } - // Both match and are valid, pick longest. - offset := s - (candidate.offset - e.cur) - o2 := s - (candidates.Prev.offset - e.cur) - l1, l2 := matchLen(src[s+4:], src[s-offset+4:]), matchLen(src[s+4:], src[s-o2+4:]) - if l2 > l1 { - candidate = candidates.Prev - } - break - } else { - // We only check if value mismatches. - // Offset will always be invalid in other cases. - candidate = candidates.Prev - if candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - break - } - } - cv = now - } - - // Call emitCopy, and then see if another emitCopy could be our next - // move. Repeat until we find no match for the input immediately after - // what was consumed by the last emitCopy call. - // - // If we exit this loop normally then we need to call emitLiteral next, - // though we don't yet know how big the literal will be. We handle that - // by proceeding to the next iteration of the main loop. We also can - // exit this loop via goto if we get close to exhausting the input. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - // - t := candidate.offset - e.cur - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - t += l - // Index first pair after match end. - if int(t+8) < len(src) && t > 0 { - cv = load6432(src, t) - nextHash := hashLen(cv, tableBits, hashBytes) - e.table[nextHash] = tableEntryPrev{ - Prev: e.table[nextHash].Cur, - Cur: tableEntry{offset: e.cur + t}, - } - } - goto emitRemainder - } - - // Store every 5th hash in-between. - for i := s - l + 2; i < s-5; i += 6 { - nextHash := hashLen(load6432(src, i), tableBits, hashBytes) - e.table[nextHash] = tableEntryPrev{ - Prev: e.table[nextHash].Cur, - Cur: tableEntry{offset: e.cur + i}} - } - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 to s. - x := load6432(src, s-2) - prevHash := hashLen(x, tableBits, hashBytes) - - e.table[prevHash] = tableEntryPrev{ - Prev: e.table[prevHash].Cur, - Cur: tableEntry{offset: e.cur + s - 2}, - } - x >>= 8 - prevHash = hashLen(x, tableBits, hashBytes) - - e.table[prevHash] = tableEntryPrev{ - Prev: e.table[prevHash].Cur, - Cur: tableEntry{offset: e.cur + s - 1}, - } - x >>= 8 - currHash := hashLen(x, tableBits, hashBytes) - candidates := e.table[currHash] - cv = x - e.table[currHash] = tableEntryPrev{ - Prev: candidates.Cur, - Cur: tableEntry{offset: s + e.cur}, - } - - // Check both candidates - candidate = candidates.Cur - minOffset := e.cur + s - (maxMatchOffset - 4) - - if candidate.offset > minOffset { - if uint32(cv) == load3232(src, candidate.offset-e.cur) { - // Found a match... - continue - } - candidate = candidates.Prev - if candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) { - // Match at prev... - continue - } - } - cv = x >> 8 - s++ - break - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level4.go b/tools/vendor/github.com/klauspost/compress/flate/level4.go deleted file mode 100644 index 23c08b325..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level4.go +++ /dev/null @@ -1,221 +0,0 @@ -package flate - -import "fmt" - -type fastEncL4 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntry -} - -func (e *fastEncL4) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntry{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.bTable[i].offset = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - e.bTable[nextHashL] = entry - - t = lCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.offset-e.cur) { - // We got a long match. Use that. - break - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - lCandidate = e.bTable[hash7(next, tableBits)] - - // If the next long is a candidate, check if we should use that instead... - lOff := nextS - (lCandidate.offset - e.cur) - if lOff < maxMatchOffset && load3232(src, lCandidate.offset-e.cur) == uint32(next) { - l1, l2 := matchLen(src[s+4:], src[t+4:]), matchLen(src[nextS+4:], src[nextS-lOff+4:]) - if l2 > l1 { - s = nextS - t = lCandidate.offset - e.cur - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Extend the 4-byte match as long as possible. - l := e.matchlenLong(s+4, t+4, src) + 4 - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic("s-t") - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index first pair after match end. - if int(s+8) < len(src) { - cv := load6432(src, s) - e.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: s + e.cur} - e.bTable[hash7(cv, tableBits)] = tableEntry{offset: s + e.cur} - } - goto emitRemainder - } - - // Store every 3rd hash in-between - if true { - i := nextS - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - e.bTable[hash7(cv, tableBits)] = t - e.bTable[hash7(cv>>8, tableBits)] = t2 - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - - i += 3 - for ; i < s-1; i += 3 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - e.bTable[hash7(cv, tableBits)] = t - e.bTable[hash7(cv>>8, tableBits)] = t2 - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - e.bTable[prevHashL] = tableEntry{offset: o} - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level5.go b/tools/vendor/github.com/klauspost/compress/flate/level5.go deleted file mode 100644 index 1f61ec182..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level5.go +++ /dev/null @@ -1,708 +0,0 @@ -package flate - -import "fmt" - -type fastEncL5 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL5) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - lCandidate = e.bTable[nextHashL] - // Store the next match - - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // If the next long is a candidate, use that... - t2 := lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - if l == 0 { - // Extend the 4-byte match as long as possible. - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end of best match... - if sAt := s + l; l < 30 && sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset - t2 := eLong - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if t2 >= 0 && off < maxMatchOffset && off > 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - goto emitRemainder - } - - // Store every 3rd hash in-between. - if true { - const hashEvery = 3 - i := s - l + 1 - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // Do an long at i+1 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - eLong = &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // We only have enough bits for a short entry at i+2 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - - // Skip one - otherwise we risk hitting 's' - i += 4 - for ; i < s-1; i += hashEvery { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - eLong := &e.bTable[prevHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} - -// fastEncL5Window is a level 5 encoder, -// but with a custom window size. -type fastEncL5Window struct { - hist []byte - cur int32 - maxOffset int32 - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL5Window) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - maxMatchOffset := e.maxOffset - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - for { - const skipLog = 6 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - lCandidate = e.bTable[nextHashL] - // Store the next match - - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // If the next long is a candidate, use that... - t2 := lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - if l == 0 { - // Extend the 4-byte match as long as possible. - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end of best match... - if sAt := s + l; l < 30 && sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset - t2 := eLong - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if t2 >= 0 && off < maxMatchOffset && off > 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if debugDeflate { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - goto emitRemainder - } - - // Store every 3rd hash in-between. - if true { - const hashEvery = 3 - i := s - l + 1 - if i < s-1 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // Do an long at i+1 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - eLong = &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - - // We only have enough bits for a short entry at i+2 - cv >>= 8 - t = tableEntry{offset: t.offset + 1} - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - - // Skip one - otherwise we risk hitting 's' - i += 4 - for ; i < s-1; i += hashEvery { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = t, eLong.Cur - e.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2 - } - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - x := load6432(src, s-1) - o := e.cur + s - 1 - prevHashS := hashLen(x, tableBits, hashShortBytes) - prevHashL := hash7(x, tableBits) - e.table[prevHashS] = tableEntry{offset: o} - eLong := &e.bTable[prevHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur - cv = x >> 8 - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} - -// Reset the encoding table. -func (e *fastEncL5Window) Reset() { - // We keep the same allocs, since we are compressing the same block sizes. - if cap(e.hist) < allocHistory { - e.hist = make([]byte, 0, allocHistory) - } - - // We offset current position so everything will be out of reach. - // If we are above the buffer reset it will be cleared anyway since len(hist) == 0. - if e.cur <= int32(bufferReset) { - e.cur += e.maxOffset + int32(len(e.hist)) - } - e.hist = e.hist[:0] -} - -func (e *fastEncL5Window) addBlock(src []byte) int32 { - // check if we have space already - maxMatchOffset := e.maxOffset - - if len(e.hist)+len(src) > cap(e.hist) { - if cap(e.hist) == 0 { - e.hist = make([]byte, 0, allocHistory) - } else { - if cap(e.hist) < int(maxMatchOffset*2) { - panic("unexpected buffer size") - } - // Move down - offset := int32(len(e.hist)) - maxMatchOffset - copy(e.hist[0:maxMatchOffset], e.hist[offset:]) - e.cur += offset - e.hist = e.hist[:maxMatchOffset] - } - } - s := int32(len(e.hist)) - e.hist = append(e.hist, src...) - return s -} - -// matchlen will return the match length between offsets and t in src. -// The maximum length returned is maxMatchLength - 4. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastEncL5Window) matchlen(s, t int32, src []byte) int32 { - if debugDecode { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > e.maxOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - s1 := int(s) + maxMatchLength - 4 - if s1 > len(src) { - s1 = len(src) - } - - // Extend the match to be as long as possible. - return int32(matchLen(src[s:s1], src[t:])) -} - -// matchlenLong will return the match length between offsets and t in src. -// It is assumed that s > t, that t >=0 and s < len(src). -func (e *fastEncL5Window) matchlenLong(s, t int32, src []byte) int32 { - if debugDeflate { - if t >= s { - panic(fmt.Sprint("t >=s:", t, s)) - } - if int(s) >= len(src) { - panic(fmt.Sprint("s >= len(src):", s, len(src))) - } - if t < 0 { - panic(fmt.Sprint("t < 0:", t)) - } - if s-t > e.maxOffset { - panic(fmt.Sprint(s, "-", t, "(", s-t, ") > maxMatchLength (", maxMatchOffset, ")")) - } - } - // Extend the match to be as long as possible. - return int32(matchLen(src[s:], src[t:])) -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/level6.go b/tools/vendor/github.com/klauspost/compress/flate/level6.go deleted file mode 100644 index f1e9d98fa..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/level6.go +++ /dev/null @@ -1,325 +0,0 @@ -package flate - -import "fmt" - -type fastEncL6 struct { - fastGen - table [tableSize]tableEntry - bTable [tableSize]tableEntryPrev -} - -func (e *fastEncL6) Encode(dst *tokens, src []byte) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - hashShortBytes = 4 - ) - if debugDeflate && e.cur < 0 { - panic(fmt.Sprint("e.cur < 0: ", e.cur)) - } - - // Protect against e.cur wraparound. - for e.cur >= bufferReset { - if len(e.hist) == 0 { - for i := range e.table[:] { - e.table[i] = tableEntry{} - } - for i := range e.bTable[:] { - e.bTable[i] = tableEntryPrev{} - } - e.cur = maxMatchOffset - break - } - // Shift down everything in the table that isn't already too far away. - minOff := e.cur + int32(len(e.hist)) - maxMatchOffset - for i := range e.table[:] { - v := e.table[i].offset - if v <= minOff { - v = 0 - } else { - v = v - e.cur + maxMatchOffset - } - e.table[i].offset = v - } - for i := range e.bTable[:] { - v := e.bTable[i] - if v.Cur.offset <= minOff { - v.Cur.offset = 0 - v.Prev.offset = 0 - } else { - v.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset - if v.Prev.offset <= minOff { - v.Prev.offset = 0 - } else { - v.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset - } - } - e.bTable[i] = v - } - e.cur = maxMatchOffset - } - - s := e.addBlock(src) - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = uint16(len(src)) - return - } - - // Override src - src = e.hist - nextEmit := s - - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int32(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load6432(src, s) - // Repeat MUST be > 1 and within range - repeat := int32(1) - for { - const skipLog = 7 - const doEvery = 1 - - nextS := s - var l int32 - var t int32 - for { - nextHashS := hashLen(cv, tableBits, hashShortBytes) - nextHashL := hash7(cv, tableBits) - s = nextS - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit { - goto emitRemainder - } - // Fetch a short+long candidate - sCandidate := e.table[nextHashS] - lCandidate := e.bTable[nextHashL] - next := load6432(src, nextS) - entry := tableEntry{offset: s + e.cur} - e.table[nextHashS] = entry - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = entry, eLong.Cur - - // Calculate hashes of 'next' - nextHashS = hashLen(next, tableBits, hashShortBytes) - nextHashL = hash7(next, tableBits) - - t = lCandidate.Cur.offset - e.cur - if s-t < maxMatchOffset { - if uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) { - // Long candidate matches at least 4 bytes. - - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // Check the previous long candidate as well. - t2 := lCandidate.Prev.offset - e.cur - if s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - l = e.matchlen(s+4, t+4, src) + 4 - ml1 := e.matchlen(s+4, t2+4, src) + 4 - if ml1 > l { - t = t2 - l = ml1 - break - } - } - break - } - // Current value did not match, but check if previous long value does. - t = lCandidate.Prev.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) { - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - break - } - } - - t = sCandidate.offset - e.cur - if s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) { - // Found a 4 match... - l = e.matchlen(s+4, t+4, src) + 4 - - // Look up next long candidate (at nextS) - lCandidate = e.bTable[nextHashL] - - // Store the next match - e.table[nextHashS] = tableEntry{offset: nextS + e.cur} - eLong := &e.bTable[nextHashL] - eLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur - - // Check repeat at s + repOff - const repOff = 1 - t2 := s - repeat + repOff - if load3232(src, t2) == uint32(cv>>(8*repOff)) { - ml := e.matchlen(s+4+repOff, t2+4, src) + 4 - if ml > l { - t = t2 - l = ml - s += repOff - // Not worth checking more. - break - } - } - - // If the next long is a candidate, use that... - t2 = lCandidate.Cur.offset - e.cur - if nextS-t2 < maxMatchOffset { - if load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - // This is ok, but check previous as well. - } - } - // If the previous long is a candidate, use that... - t2 = lCandidate.Prev.offset - e.cur - if nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) { - ml := e.matchlen(nextS+4, t2+4, src) + 4 - if ml > l { - t = t2 - s = nextS - l = ml - break - } - } - } - break - } - cv = next - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - - // Extend the 4-byte match as long as possible. - if l == 0 { - l = e.matchlenLong(s+4, t+4, src) + 4 - } else if l == maxMatchLength { - l += e.matchlenLong(s+l, t+l, src) - } - - // Try to locate a better match by checking the end-of-match... - if sAt := s + l; sAt < sLimit { - // Allow some bytes at the beginning to mismatch. - // Sweet spot is 2/3 bytes depending on input. - // 3 is only a little better when it is but sometimes a lot worse. - // The skipped bytes are tested in Extend backwards, - // and still picked up as part of the match if they do. - const skipBeginning = 2 - eLong := &e.bTable[hash7(load6432(src, sAt), tableBits)] - // Test current - t2 := eLong.Cur.offset - e.cur - l + skipBeginning - s2 := s + skipBeginning - off := s2 - t2 - if off < maxMatchOffset { - if off > 0 && t2 >= 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - // Test next: - t2 = eLong.Prev.offset - e.cur - l + skipBeginning - off := s2 - t2 - if off > 0 && off < maxMatchOffset && t2 >= 0 { - if l2 := e.matchlenLong(s2, t2, src); l2 > l { - t = t2 - l = l2 - s = s2 - } - } - } - } - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - if false { - if t >= s { - panic(fmt.Sprintln("s-t", s, t)) - } - if (s - t) > maxMatchOffset { - panic(fmt.Sprintln("mmo", s-t)) - } - if l < baseMatchLength { - panic("bml") - } - } - - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) - repeat = s - t - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - - if s >= sLimit { - // Index after match end. - for i := nextS + 1; i < int32(len(src))-8; i += 2 { - cv := load6432(src, i) - e.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: i + e.cur} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong.Cur, eLong.Prev = tableEntry{offset: i + e.cur}, eLong.Cur - } - goto emitRemainder - } - - // Store every long hash in-between and every second short. - if true { - for i := nextS + 1; i < s-1; i += 2 { - cv := load6432(src, i) - t := tableEntry{offset: i + e.cur} - t2 := tableEntry{offset: t.offset + 1} - eLong := &e.bTable[hash7(cv, tableBits)] - eLong2 := &e.bTable[hash7(cv>>8, tableBits)] - e.table[hashLen(cv, tableBits, hashShortBytes)] = t - eLong.Cur, eLong.Prev = t, eLong.Cur - eLong2.Cur, eLong2.Prev = t2, eLong2.Cur - } - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-1 and at s. - cv = load6432(src, s) - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go b/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go deleted file mode 100644 index 4bd388584..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build amd64 && !appengine && !noasm && gc -// +build amd64,!appengine,!noasm,gc - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. - -package flate - -// matchLen returns how many bytes match in a and b -// -// It assumes that: -// -// len(a) <= len(b) and len(a) > 0 -// -//go:noescape -func matchLen(a []byte, b []byte) int diff --git a/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s b/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s deleted file mode 100644 index 9a7655c0f..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/matchlen_amd64.s +++ /dev/null @@ -1,68 +0,0 @@ -// Copied from S2 implementation. - -//go:build !appengine && !noasm && gc && !noasm - -#include "textflag.h" - -// func matchLen(a []byte, b []byte) int -// Requires: BMI -TEXT ·matchLen(SB), NOSPLIT, $0-56 - MOVQ a_base+0(FP), AX - MOVQ b_base+24(FP), CX - MOVQ a_len+8(FP), DX - - // matchLen - XORL SI, SI - CMPL DX, $0x08 - JB matchlen_match4_standalone - -matchlen_loopback_standalone: - MOVQ (AX)(SI*1), BX - XORQ (CX)(SI*1), BX - TESTQ BX, BX - JZ matchlen_loop_standalone - -#ifdef GOAMD64_v3 - TZCNTQ BX, BX -#else - BSFQ BX, BX -#endif - SARQ $0x03, BX - LEAL (SI)(BX*1), SI - JMP gen_match_len_end - -matchlen_loop_standalone: - LEAL -8(DX), DX - LEAL 8(SI), SI - CMPL DX, $0x08 - JAE matchlen_loopback_standalone - -matchlen_match4_standalone: - CMPL DX, $0x04 - JB matchlen_match2_standalone - MOVL (AX)(SI*1), BX - CMPL (CX)(SI*1), BX - JNE matchlen_match2_standalone - LEAL -4(DX), DX - LEAL 4(SI), SI - -matchlen_match2_standalone: - CMPL DX, $0x02 - JB matchlen_match1_standalone - MOVW (AX)(SI*1), BX - CMPW (CX)(SI*1), BX - JNE matchlen_match1_standalone - LEAL -2(DX), DX - LEAL 2(SI), SI - -matchlen_match1_standalone: - CMPL DX, $0x01 - JB gen_match_len_end - MOVB (AX)(SI*1), BL - CMPB (CX)(SI*1), BL - JNE gen_match_len_end - INCL SI - -gen_match_len_end: - MOVQ SI, ret+48(FP) - RET diff --git a/tools/vendor/github.com/klauspost/compress/flate/matchlen_generic.go b/tools/vendor/github.com/klauspost/compress/flate/matchlen_generic.go deleted file mode 100644 index ad5cd814b..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/matchlen_generic.go +++ /dev/null @@ -1,33 +0,0 @@ -//go:build !amd64 || appengine || !gc || noasm -// +build !amd64 appengine !gc noasm - -// Copyright 2019+ Klaus Post. All rights reserved. -// License information can be found in the LICENSE file. - -package flate - -import ( - "encoding/binary" - "math/bits" -) - -// matchLen returns the maximum common prefix length of a and b. -// a must be the shortest of the two. -func matchLen(a, b []byte) (n int) { - for ; len(a) >= 8 && len(b) >= 8; a, b = a[8:], b[8:] { - diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b) - if diff != 0 { - return n + bits.TrailingZeros64(diff)>>3 - } - n += 8 - } - - for i := range a { - if a[i] != b[i] { - break - } - n++ - } - return n - -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/regmask_amd64.go b/tools/vendor/github.com/klauspost/compress/flate/regmask_amd64.go deleted file mode 100644 index 6ed28061b..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/regmask_amd64.go +++ /dev/null @@ -1,37 +0,0 @@ -package flate - -const ( - // Masks for shifts with register sizes of the shift value. - // This can be used to work around the x86 design of shifting by mod register size. - // It can be used when a variable shift is always smaller than the register size. - - // reg8SizeMaskX - shift value is 8 bits, shifted is X - reg8SizeMask8 = 7 - reg8SizeMask16 = 15 - reg8SizeMask32 = 31 - reg8SizeMask64 = 63 - - // reg16SizeMaskX - shift value is 16 bits, shifted is X - reg16SizeMask8 = reg8SizeMask8 - reg16SizeMask16 = reg8SizeMask16 - reg16SizeMask32 = reg8SizeMask32 - reg16SizeMask64 = reg8SizeMask64 - - // reg32SizeMaskX - shift value is 32 bits, shifted is X - reg32SizeMask8 = reg8SizeMask8 - reg32SizeMask16 = reg8SizeMask16 - reg32SizeMask32 = reg8SizeMask32 - reg32SizeMask64 = reg8SizeMask64 - - // reg64SizeMaskX - shift value is 64 bits, shifted is X - reg64SizeMask8 = reg8SizeMask8 - reg64SizeMask16 = reg8SizeMask16 - reg64SizeMask32 = reg8SizeMask32 - reg64SizeMask64 = reg8SizeMask64 - - // regSizeMaskUintX - shift value is uint, shifted is X - regSizeMaskUint8 = reg8SizeMask8 - regSizeMaskUint16 = reg8SizeMask16 - regSizeMaskUint32 = reg8SizeMask32 - regSizeMaskUint64 = reg8SizeMask64 -) diff --git a/tools/vendor/github.com/klauspost/compress/flate/regmask_other.go b/tools/vendor/github.com/klauspost/compress/flate/regmask_other.go deleted file mode 100644 index 1b7a2cbd7..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/regmask_other.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build !amd64 -// +build !amd64 - -package flate - -const ( - // Masks for shifts with register sizes of the shift value. - // This can be used to work around the x86 design of shifting by mod register size. - // It can be used when a variable shift is always smaller than the register size. - - // reg8SizeMaskX - shift value is 8 bits, shifted is X - reg8SizeMask8 = 0xff - reg8SizeMask16 = 0xff - reg8SizeMask32 = 0xff - reg8SizeMask64 = 0xff - - // reg16SizeMaskX - shift value is 16 bits, shifted is X - reg16SizeMask8 = 0xffff - reg16SizeMask16 = 0xffff - reg16SizeMask32 = 0xffff - reg16SizeMask64 = 0xffff - - // reg32SizeMaskX - shift value is 32 bits, shifted is X - reg32SizeMask8 = 0xffffffff - reg32SizeMask16 = 0xffffffff - reg32SizeMask32 = 0xffffffff - reg32SizeMask64 = 0xffffffff - - // reg64SizeMaskX - shift value is 64 bits, shifted is X - reg64SizeMask8 = 0xffffffffffffffff - reg64SizeMask16 = 0xffffffffffffffff - reg64SizeMask32 = 0xffffffffffffffff - reg64SizeMask64 = 0xffffffffffffffff - - // regSizeMaskUintX - shift value is uint, shifted is X - regSizeMaskUint8 = ^uint(0) - regSizeMaskUint16 = ^uint(0) - regSizeMaskUint32 = ^uint(0) - regSizeMaskUint64 = ^uint(0) -) diff --git a/tools/vendor/github.com/klauspost/compress/flate/stateless.go b/tools/vendor/github.com/klauspost/compress/flate/stateless.go deleted file mode 100644 index f3d4139ef..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/stateless.go +++ /dev/null @@ -1,318 +0,0 @@ -package flate - -import ( - "io" - "math" - "sync" -) - -const ( - maxStatelessBlock = math.MaxInt16 - // dictionary will be taken from maxStatelessBlock, so limit it. - maxStatelessDict = 8 << 10 - - slTableBits = 13 - slTableSize = 1 << slTableBits - slTableShift = 32 - slTableBits -) - -type statelessWriter struct { - dst io.Writer - closed bool -} - -func (s *statelessWriter) Close() error { - if s.closed { - return nil - } - s.closed = true - // Emit EOF block - return StatelessDeflate(s.dst, nil, true, nil) -} - -func (s *statelessWriter) Write(p []byte) (n int, err error) { - err = StatelessDeflate(s.dst, p, false, nil) - if err != nil { - return 0, err - } - return len(p), nil -} - -func (s *statelessWriter) Reset(w io.Writer) { - s.dst = w - s.closed = false -} - -// NewStatelessWriter will do compression but without maintaining any state -// between Write calls. -// There will be no memory kept between Write calls, -// but compression and speed will be suboptimal. -// Because of this, the size of actual Write calls will affect output size. -func NewStatelessWriter(dst io.Writer) io.WriteCloser { - return &statelessWriter{dst: dst} -} - -// bitWriterPool contains bit writers that can be reused. -var bitWriterPool = sync.Pool{ - New: func() interface{} { - return newHuffmanBitWriter(nil) - }, -} - -// StatelessDeflate allows compressing directly to a Writer without retaining state. -// When returning everything will be flushed. -// Up to 8KB of an optional dictionary can be given which is presumed to precede the block. -// Longer dictionaries will be truncated and will still produce valid output. -// Sending nil dictionary is perfectly fine. -func StatelessDeflate(out io.Writer, in []byte, eof bool, dict []byte) error { - var dst tokens - bw := bitWriterPool.Get().(*huffmanBitWriter) - bw.reset(out) - defer func() { - // don't keep a reference to our output - bw.reset(nil) - bitWriterPool.Put(bw) - }() - if eof && len(in) == 0 { - // Just write an EOF block. - // Could be faster... - bw.writeStoredHeader(0, true) - bw.flush() - return bw.err - } - - // Truncate dict - if len(dict) > maxStatelessDict { - dict = dict[len(dict)-maxStatelessDict:] - } - - // For subsequent loops, keep shallow dict reference to avoid alloc+copy. - var inDict []byte - - for len(in) > 0 { - todo := in - if len(inDict) > 0 { - if len(todo) > maxStatelessBlock-maxStatelessDict { - todo = todo[:maxStatelessBlock-maxStatelessDict] - } - } else if len(todo) > maxStatelessBlock-len(dict) { - todo = todo[:maxStatelessBlock-len(dict)] - } - inOrg := in - in = in[len(todo):] - uncompressed := todo - if len(dict) > 0 { - // combine dict and source - bufLen := len(todo) + len(dict) - combined := make([]byte, bufLen) - copy(combined, dict) - copy(combined[len(dict):], todo) - todo = combined - } - // Compress - if len(inDict) == 0 { - statelessEnc(&dst, todo, int16(len(dict))) - } else { - statelessEnc(&dst, inDict[:maxStatelessDict+len(todo)], maxStatelessDict) - } - isEof := eof && len(in) == 0 - - if dst.n == 0 { - bw.writeStoredHeader(len(uncompressed), isEof) - if bw.err != nil { - return bw.err - } - bw.writeBytes(uncompressed) - } else if int(dst.n) > len(uncompressed)-len(uncompressed)>>4 { - // If we removed less than 1/16th, huffman compress the block. - bw.writeBlockHuff(isEof, uncompressed, len(in) == 0) - } else { - bw.writeBlockDynamic(&dst, isEof, uncompressed, len(in) == 0) - } - if len(in) > 0 { - // Retain a dict if we have more - inDict = inOrg[len(uncompressed)-maxStatelessDict:] - dict = nil - dst.Reset() - } - if bw.err != nil { - return bw.err - } - } - if !eof { - // Align, only a stored block can do that. - bw.writeStoredHeader(0, false) - } - bw.flush() - return bw.err -} - -func hashSL(u uint32) uint32 { - return (u * 0x1e35a7bd) >> slTableShift -} - -func load3216(b []byte, i int16) uint32 { - // Help the compiler eliminate bounds checks on the read so it can be done in a single read. - b = b[i:] - b = b[:4] - return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 -} - -func load6416(b []byte, i int16) uint64 { - // Help the compiler eliminate bounds checks on the read so it can be done in a single read. - b = b[i:] - b = b[:8] - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 -} - -func statelessEnc(dst *tokens, src []byte, startAt int16) { - const ( - inputMargin = 12 - 1 - minNonLiteralBlockSize = 1 + 1 + inputMargin - ) - - type tableEntry struct { - offset int16 - } - - var table [slTableSize]tableEntry - - // This check isn't in the Snappy implementation, but there, the caller - // instead of the callee handles this case. - if len(src)-int(startAt) < minNonLiteralBlockSize { - // We do not fill the token table. - // This will be picked up by caller. - dst.n = 0 - return - } - // Index until startAt - if startAt > 0 { - cv := load3232(src, 0) - for i := int16(0); i < startAt; i++ { - table[hashSL(cv)] = tableEntry{offset: i} - cv = (cv >> 8) | (uint32(src[i+4]) << 24) - } - } - - s := startAt + 1 - nextEmit := startAt - // sLimit is when to stop looking for offset/length copies. The inputMargin - // lets us use a fast path for emitLiteral in the main loop, while we are - // looking for copies. - sLimit := int16(len(src) - inputMargin) - - // nextEmit is where in src the next emitLiteral should start from. - cv := load3216(src, s) - - for { - const skipLog = 5 - const doEvery = 2 - - nextS := s - var candidate tableEntry - for { - nextHash := hashSL(cv) - candidate = table[nextHash] - nextS = s + doEvery + (s-nextEmit)>>skipLog - if nextS > sLimit || nextS <= 0 { - goto emitRemainder - } - - now := load6416(src, nextS) - table[nextHash] = tableEntry{offset: s} - nextHash = hashSL(uint32(now)) - - if cv == load3216(src, candidate.offset) { - table[nextHash] = tableEntry{offset: nextS} - break - } - - // Do one right away... - cv = uint32(now) - s = nextS - nextS++ - candidate = table[nextHash] - now >>= 8 - table[nextHash] = tableEntry{offset: s} - - if cv == load3216(src, candidate.offset) { - table[nextHash] = tableEntry{offset: nextS} - break - } - cv = uint32(now) - s = nextS - } - - // A 4-byte match has been found. We'll later see if more than 4 bytes - // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit - // them as literal bytes. - for { - // Invariant: we have a 4-byte match at s, and no need to emit any - // literal bytes prior to s. - - // Extend the 4-byte match as long as possible. - t := candidate.offset - l := int16(matchLen(src[s+4:], src[t+4:]) + 4) - - // Extend backwards - for t > 0 && s > nextEmit && src[t-1] == src[s-1] { - s-- - t-- - l++ - } - if nextEmit < s { - if false { - emitLiteral(dst, src[nextEmit:s]) - } else { - for _, v := range src[nextEmit:s] { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } - } - } - - // Save the match found - dst.AddMatchLong(int32(l), uint32(s-t-baseMatchOffset)) - s += l - nextEmit = s - if nextS >= s { - s = nextS + 1 - } - if s >= sLimit { - goto emitRemainder - } - - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-2 and at s. If - // another emitCopy is not our next move, also calculate nextHash - // at s+1. At least on GOARCH=amd64, these three hash calculations - // are faster as one load64 call (with some shifts) instead of - // three load32 calls. - x := load6416(src, s-2) - o := s - 2 - prevHash := hashSL(uint32(x)) - table[prevHash] = tableEntry{offset: o} - x >>= 16 - currHash := hashSL(uint32(x)) - candidate = table[currHash] - table[currHash] = tableEntry{offset: o + 2} - - if uint32(x) != load3216(src, candidate.offset) { - cv = uint32(x >> 8) - s++ - break - } - } - } - -emitRemainder: - if int(nextEmit) < len(src) { - // If nothing was added, don't encode literals. - if dst.n == 0 { - return - } - emitLiteral(dst, src[nextEmit:]) - } -} diff --git a/tools/vendor/github.com/klauspost/compress/flate/token.go b/tools/vendor/github.com/klauspost/compress/flate/token.go deleted file mode 100644 index d818790c1..000000000 --- a/tools/vendor/github.com/klauspost/compress/flate/token.go +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package flate - -import ( - "bytes" - "encoding/binary" - "fmt" - "io" - "math" -) - -const ( - // bits 0-16 xoffset = offset - MIN_OFFSET_SIZE, or literal - 16 bits - // bits 16-22 offsetcode - 5 bits - // bits 22-30 xlength = length - MIN_MATCH_LENGTH - 8 bits - // bits 30-32 type 0 = literal 1=EOF 2=Match 3=Unused - 2 bits - lengthShift = 22 - offsetMask = 1<maxnumlit - offHist [32]uint16 // offset codes - litHist [256]uint16 // codes 0->255 - nFilled int - n uint16 // Must be able to contain maxStoreBlockSize - tokens [maxStoreBlockSize + 1]token -} - -func (t *tokens) Reset() { - if t.n == 0 { - return - } - t.n = 0 - t.nFilled = 0 - for i := range t.litHist[:] { - t.litHist[i] = 0 - } - for i := range t.extraHist[:] { - t.extraHist[i] = 0 - } - for i := range t.offHist[:] { - t.offHist[i] = 0 - } -} - -func (t *tokens) Fill() { - if t.n == 0 { - return - } - for i, v := range t.litHist[:] { - if v == 0 { - t.litHist[i] = 1 - t.nFilled++ - } - } - for i, v := range t.extraHist[:literalCount-256] { - if v == 0 { - t.nFilled++ - t.extraHist[i] = 1 - } - } - for i, v := range t.offHist[:offsetCodeCount] { - if v == 0 { - t.offHist[i] = 1 - } - } -} - -func indexTokens(in []token) tokens { - var t tokens - t.indexTokens(in) - return t -} - -func (t *tokens) indexTokens(in []token) { - t.Reset() - for _, tok := range in { - if tok < matchType { - t.AddLiteral(tok.literal()) - continue - } - t.AddMatch(uint32(tok.length()), tok.offset()&matchOffsetOnlyMask) - } -} - -// emitLiteral writes a literal chunk and returns the number of bytes written. -func emitLiteral(dst *tokens, lit []byte) { - for _, v := range lit { - dst.tokens[dst.n] = token(v) - dst.litHist[v]++ - dst.n++ - } -} - -func (t *tokens) AddLiteral(lit byte) { - t.tokens[t.n] = token(lit) - t.litHist[lit]++ - t.n++ -} - -// from https://stackoverflow.com/a/28730362 -func mFastLog2(val float32) float32 { - ux := int32(math.Float32bits(val)) - log2 := (float32)(((ux >> 23) & 255) - 128) - ux &= -0x7f800001 - ux += 127 << 23 - uval := math.Float32frombits(uint32(ux)) - log2 += ((-0.34484843)*uval+2.02466578)*uval - 0.67487759 - return log2 -} - -// EstimatedBits will return an minimum size estimated by an *optimal* -// compression of the block. -// The size of the block -func (t *tokens) EstimatedBits() int { - shannon := float32(0) - bits := int(0) - nMatches := 0 - total := int(t.n) + t.nFilled - if total > 0 { - invTotal := 1.0 / float32(total) - for _, v := range t.litHist[:] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - } - } - // Just add 15 for EOB - shannon += 15 - for i, v := range t.extraHist[1 : literalCount-256] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - bits += int(lengthExtraBits[i&31]) * int(v) - nMatches += int(v) - } - } - } - if nMatches > 0 { - invTotal := 1.0 / float32(nMatches) - for i, v := range t.offHist[:offsetCodeCount] { - if v > 0 { - n := float32(v) - shannon += atLeastOne(-mFastLog2(n*invTotal)) * n - bits += int(offsetExtraBits[i&31]) * int(v) - } - } - } - return int(shannon) + bits -} - -// AddMatch adds a match to the tokens. -// This function is very sensitive to inlining and right on the border. -func (t *tokens) AddMatch(xlength uint32, xoffset uint32) { - if debugDeflate { - if xlength >= maxMatchLength+baseMatchLength { - panic(fmt.Errorf("invalid length: %v", xlength)) - } - if xoffset >= maxMatchOffset+baseMatchOffset { - panic(fmt.Errorf("invalid offset: %v", xoffset)) - } - } - oCode := offsetCode(xoffset) - xoffset |= oCode << 16 - - t.extraHist[lengthCodes1[uint8(xlength)]]++ - t.offHist[oCode&31]++ - t.tokens[t.n] = token(matchType | xlength<= maxMatchOffset+baseMatchOffset { - panic(fmt.Errorf("invalid offset: %v", xoffset)) - } - } - oc := offsetCode(xoffset) - xoffset |= oc << 16 - for xlength > 0 { - xl := xlength - if xl > 258 { - // We need to have at least baseMatchLength left over for next loop. - if xl > 258+baseMatchLength { - xl = 258 - } else { - xl = 258 - baseMatchLength - } - } - xlength -= xl - xl -= baseMatchLength - t.extraHist[lengthCodes1[uint8(xl)]]++ - t.offHist[oc&31]++ - t.tokens[t.n] = token(matchType | uint32(xl)<> lengthShift) } - -// Convert length to code. -func lengthCode(len uint8) uint8 { return lengthCodes[len] } - -// Returns the offset code corresponding to a specific offset -func offsetCode(off uint32) uint32 { - if false { - if off < uint32(len(offsetCodes)) { - return offsetCodes[off&255] - } else if off>>7 < uint32(len(offsetCodes)) { - return offsetCodes[(off>>7)&255] + 14 - } else { - return offsetCodes[(off>>14)&255] + 28 - } - } - if off < uint32(len(offsetCodes)) { - return offsetCodes[uint8(off)] - } - return offsetCodes14[uint8(off>>7)] -} diff --git a/tools/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go b/tools/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go index 2aa6a95a0..2754bac6f 100644 --- a/tools/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go +++ b/tools/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go @@ -51,7 +51,7 @@ func emitCopy(dst []byte, offset, length int) int { i := 0 // The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The // threshold for this loop is a little higher (at 68 = 64 + 4), and the - // length emitted down below is is a little lower (at 60 = 64 - 4), because + // length emitted down below is a little lower (at 60 = 64 - 4), because // it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed // by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as // a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as diff --git a/tools/vendor/github.com/klauspost/compress/s2sx.mod b/tools/vendor/github.com/klauspost/compress/s2sx.mod index 2263853fc..5a4412f90 100644 --- a/tools/vendor/github.com/klauspost/compress/s2sx.mod +++ b/tools/vendor/github.com/klauspost/compress/s2sx.mod @@ -1,4 +1,4 @@ module github.com/klauspost/compress -go 1.16 +go 1.19 diff --git a/tools/vendor/github.com/klauspost/compress/zstd/blockdec.go b/tools/vendor/github.com/klauspost/compress/zstd/blockdec.go index 9f17ce601..03744fbc7 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -554,6 +554,9 @@ func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { if debugDecoder { printf("Compression modes: 0b%b", compMode) } + if compMode&3 != 0 { + return errors.New("corrupt block: reserved bits not zero") + } for i := uint(0); i < 3; i++ { mode := seqCompMode((compMode >> (6 - i*2)) & 3) if debugDecoder { diff --git a/tools/vendor/github.com/klauspost/compress/zstd/blockenc.go b/tools/vendor/github.com/klauspost/compress/zstd/blockenc.go index 2cfe925ad..32a7f401d 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/blockenc.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/blockenc.go @@ -427,6 +427,16 @@ func (b *blockEnc) encodeLits(lits []byte, raw bool) error { return nil } +// encodeRLE will encode an RLE block. +func (b *blockEnc) encodeRLE(val byte, length uint32) { + var bh blockHeader + bh.setLast(b.last) + bh.setSize(length) + bh.setType(blockTypeRLE) + b.output = bh.appendTo(b.output) + b.output = append(b.output, val) +} + // fuzzFseEncoder can be used to fuzz the FSE encoder. func fuzzFseEncoder(data []byte) int { if len(data) > maxSequences || len(data) < 2 { @@ -479,6 +489,16 @@ func (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error { if len(b.sequences) == 0 { return b.encodeLits(b.literals, rawAllLits) } + if len(b.sequences) == 1 && len(org) > 0 && len(b.literals) <= 1 { + // Check common RLE cases. + seq := b.sequences[0] + if seq.litLen == uint32(len(b.literals)) && seq.offset-3 == 1 { + // Offset == 1 and 0 or 1 literals. + b.encodeRLE(org[0], b.sequences[0].matchLen+zstdMinMatch+seq.litLen) + return nil + } + } + // We want some difference to at least account for the headers. saved := b.size - len(b.literals) - (b.size >> 6) if saved < 16 { diff --git a/tools/vendor/github.com/klauspost/compress/zstd/decodeheader.go b/tools/vendor/github.com/klauspost/compress/zstd/decodeheader.go index f6a240970..6a5a2988b 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/decodeheader.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/decodeheader.go @@ -95,42 +95,54 @@ type Header struct { // If there isn't enough input, io.ErrUnexpectedEOF is returned. // The FirstBlock.OK will indicate if enough information was available to decode the first block header. func (h *Header) Decode(in []byte) error { + _, err := h.DecodeAndStrip(in) + return err +} + +// DecodeAndStrip will decode the header from the beginning of the stream +// and on success return the remaining bytes. +// This will decode the frame header and the first block header if enough bytes are provided. +// It is recommended to provide at least HeaderMaxSize bytes. +// If the frame header cannot be read an error will be returned. +// If there isn't enough input, io.ErrUnexpectedEOF is returned. +// The FirstBlock.OK will indicate if enough information was available to decode the first block header. +func (h *Header) DecodeAndStrip(in []byte) (remain []byte, err error) { *h = Header{} if len(in) < 4 { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } h.HeaderSize += 4 b, in := in[:4], in[4:] if string(b) != frameMagic { if string(b[1:4]) != skippableFrameMagic || b[0]&0xf0 != 0x50 { - return ErrMagicMismatch + return nil, ErrMagicMismatch } if len(in) < 4 { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } h.HeaderSize += 4 h.Skippable = true h.SkippableID = int(b[0] & 0xf) h.SkippableSize = binary.LittleEndian.Uint32(in) - return nil + return in[4:], nil } // Read Window_Descriptor // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#window_descriptor if len(in) < 1 { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } fhd, in := in[0], in[1:] h.HeaderSize++ h.SingleSegment = fhd&(1<<5) != 0 h.HasCheckSum = fhd&(1<<2) != 0 if fhd&(1<<3) != 0 { - return errors.New("reserved bit set on frame header") + return nil, errors.New("reserved bit set on frame header") } if !h.SingleSegment { if len(in) < 1 { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } var wd byte wd, in = in[0], in[1:] @@ -148,7 +160,7 @@ func (h *Header) Decode(in []byte) error { size = 4 } if len(in) < int(size) { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } b, in = in[:size], in[size:] h.HeaderSize += int(size) @@ -178,7 +190,7 @@ func (h *Header) Decode(in []byte) error { if fcsSize > 0 { h.HasFCS = true if len(in) < fcsSize { - return io.ErrUnexpectedEOF + return nil, io.ErrUnexpectedEOF } b, in = in[:fcsSize], in[fcsSize:] h.HeaderSize += int(fcsSize) @@ -199,7 +211,7 @@ func (h *Header) Decode(in []byte) error { // Frame Header done, we will not fail from now on. if len(in) < 3 { - return nil + return in, nil } tmp := in[:3] bh := uint32(tmp[0]) | (uint32(tmp[1]) << 8) | (uint32(tmp[2]) << 16) @@ -209,7 +221,7 @@ func (h *Header) Decode(in []byte) error { cSize := int(bh >> 3) switch blockType { case blockTypeReserved: - return nil + return in, nil case blockTypeRLE: h.FirstBlock.Compressed = true h.FirstBlock.DecompressedSize = cSize @@ -225,5 +237,25 @@ func (h *Header) Decode(in []byte) error { } h.FirstBlock.OK = true - return nil + return in, nil +} + +// AppendTo will append the encoded header to the dst slice. +// There is no error checking performed on the header values. +func (h *Header) AppendTo(dst []byte) ([]byte, error) { + if h.Skippable { + magic := [4]byte{0x50, 0x2a, 0x4d, 0x18} + magic[0] |= byte(h.SkippableID & 0xf) + dst = append(dst, magic[:]...) + f := h.SkippableSize + return append(dst, uint8(f), uint8(f>>8), uint8(f>>16), uint8(f>>24)), nil + } + f := frameHeader{ + ContentSize: h.FrameContentSize, + WindowSize: uint32(h.WindowSize), + SingleSegment: h.SingleSegment, + Checksum: h.HasCheckSum, + DictID: h.DictionaryID, + } + return f.appendTo(dst), nil } diff --git a/tools/vendor/github.com/klauspost/compress/zstd/decoder.go b/tools/vendor/github.com/klauspost/compress/zstd/decoder.go index f04aaa21e..bbca17234 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -82,7 +82,7 @@ var ( // can run multiple concurrent stateless decodes. It is even possible to // use stateless decodes while a stream is being decoded. // -// The Reset function can be used to initiate a new stream, which is will considerably +// The Reset function can be used to initiate a new stream, which will considerably // reduce the allocations normally caused by NewReader. func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) { initPredefined() diff --git a/tools/vendor/github.com/klauspost/compress/zstd/dict.go b/tools/vendor/github.com/klauspost/compress/zstd/dict.go index 8d5567fe6..b7b83164b 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/dict.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/dict.go @@ -273,6 +273,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { enc.Encode(&block, b) addValues(&remain, block.literals) litTotal += len(block.literals) + if len(block.sequences) == 0 { + continue + } seqs += len(block.sequences) block.genCodes() addHist(&ll, block.coders.llEnc.Histogram()) @@ -286,6 +289,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if offset == 0 { continue } + if int(offset) >= len(o.History) { + continue + } if offset > 3 { newOffsets[offset-3]++ } else { @@ -336,6 +342,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if seqs/nUsed < 512 { // Use 512 as minimum. nUsed = seqs / 512 + if nUsed == 0 { + nUsed = 1 + } } copyHist := func(dst *fseEncoder, src *[256]int) ([]byte, error) { hist := dst.Histogram() @@ -358,6 +367,28 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { fakeLength += v hist[i] = uint32(v) } + + // Ensure we aren't trying to represent RLE. + if maxCount == fakeLength { + for i := range hist { + if uint8(i) == maxSym { + fakeLength++ + maxSym++ + hist[i+1] = 1 + if maxSym > 1 { + break + } + } + if hist[0] == 0 { + fakeLength++ + hist[i] = 1 + if maxSym > 1 { + break + } + } + } + } + dst.HistogramFinished(maxSym, maxCount) dst.reUsed = false dst.useRLE = false diff --git a/tools/vendor/github.com/klauspost/compress/zstd/enc_best.go b/tools/vendor/github.com/klauspost/compress/zstd/enc_best.go index c81a15357..4613724e9 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/enc_best.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/enc_best.go @@ -135,8 +135,20 @@ func (e *bestFastEncoder) Encode(blk *blockEnc, src []byte) { break } + // Add block to history s := e.addBlock(src) blk.size = len(src) + + // Check RLE first + if len(src) > zstdMinMatch { + ml := matchLen(src[1:], src) + if ml == len(src)-1 { + blk.literals = append(blk.literals, src[0]) + blk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3}) + return + } + } + if len(src) < minNonLiteralBlockSize { blk.extraLits = len(src) blk.literals = blk.literals[:len(src)] @@ -201,14 +213,6 @@ encodeLoop: if delta >= e.maxMatchOff || delta <= 0 || load3232(src, offset) != first { return } - if debugAsserts { - if offset >= s { - panic(fmt.Sprintf("offset: %d - s:%d - rep: %d - cur :%d - max: %d", offset, s, rep, e.cur, e.maxMatchOff)) - } - if !bytes.Equal(src[s:s+4], src[offset:offset+4]) { - panic(fmt.Sprintf("first match mismatch: %v != %v, first: %08x", src[s:s+4], src[offset:offset+4], first)) - } - } // Try to quick reject if we already have a long match. if m.length > 16 { left := len(src) - int(m.s+m.length) @@ -227,8 +231,10 @@ encodeLoop: } } l := 4 + e.matchlen(s+4, offset+4, src) - if true { + if m.rep <= 0 { // Extend candidate match backwards as far as possible. + // Do not extend repeats as we can assume they are optimal + // and offsets change if s == nextEmit. tMin := s - e.maxMatchOff if tMin < 0 { tMin = 0 @@ -239,7 +245,14 @@ encodeLoop: l++ } } - + if debugAsserts { + if offset >= s { + panic(fmt.Sprintf("offset: %d - s:%d - rep: %d - cur :%d - max: %d", offset, s, rep, e.cur, e.maxMatchOff)) + } + if !bytes.Equal(src[s:s+l], src[offset:offset+l]) { + panic(fmt.Sprintf("second match mismatch: %v != %v, first: %08x", src[s:s+4], src[offset:offset+4], first)) + } + } cand := match{offset: offset, s: s, length: l, rep: rep} cand.estBits(bitsPerByte) if m.est >= highScore || cand.est-m.est+(cand.s-m.s)*bitsPerByte>>10 < 0 { @@ -336,24 +349,31 @@ encodeLoop: } if debugAsserts { + if best.offset >= best.s { + panic(fmt.Sprintf("best.offset > s: %d >= %d", best.offset, best.s)) + } + if best.s < nextEmit { + panic(fmt.Sprintf("s %d < nextEmit %d", best.s, nextEmit)) + } + if best.offset < s-e.maxMatchOff { + panic(fmt.Sprintf("best.offset < s-e.maxMatchOff: %d < %d", best.offset, s-e.maxMatchOff)) + } if !bytes.Equal(src[best.s:best.s+best.length], src[best.offset:best.offset+best.length]) { panic(fmt.Sprintf("match mismatch: %v != %v", src[best.s:best.s+best.length], src[best.offset:best.offset+best.length])) } } // We have a match, we can store the forward value + s = best.s if best.rep > 0 { var seq seq seq.matchLen = uint32(best.length - zstdMinMatch) - if debugAsserts && s < nextEmit { - panic("s < nextEmit") - } addLiterals(&seq, best.s) // Repeat. If bit 4 is set, this is a non-lit repeat. seq.offset = uint32(best.rep & 3) if debugSequences { - println("repeat sequence", seq, "next s:", s) + println("repeat sequence", seq, "next s:", best.s, "off:", best.s-best.offset) } blk.sequences = append(blk.sequences, seq) @@ -396,7 +416,6 @@ encodeLoop: // A 4-byte match has been found. Update recent offsets. // We'll later see if more than 4 bytes. - s = best.s t := best.offset offset1, offset2, offset3 = s-t, offset1, offset2 diff --git a/tools/vendor/github.com/klauspost/compress/zstd/enc_better.go b/tools/vendor/github.com/klauspost/compress/zstd/enc_better.go index 20d25b0e0..a4f5bf91f 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -102,9 +102,20 @@ func (e *betterFastEncoder) Encode(blk *blockEnc, src []byte) { e.cur = e.maxMatchOff break } - + // Add block to history s := e.addBlock(src) blk.size = len(src) + + // Check RLE first + if len(src) > zstdMinMatch { + ml := matchLen(src[1:], src) + if ml == len(src)-1 { + blk.literals = append(blk.literals, src[0]) + blk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3}) + return + } + } + if len(src) < minNonLiteralBlockSize { blk.extraLits = len(src) blk.literals = blk.literals[:len(src)] diff --git a/tools/vendor/github.com/klauspost/compress/zstd/encoder_options.go b/tools/vendor/github.com/klauspost/compress/zstd/encoder_options.go index faaf81921..20671dcb9 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/encoder_options.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/encoder_options.go @@ -94,7 +94,7 @@ func WithEncoderConcurrency(n int) EOption { // The value must be a power of two between MinWindowSize and MaxWindowSize. // A larger value will enable better compression but allocate more memory and, // for above-default values, take considerably longer. -// The default value is determined by the compression level. +// The default value is determined by the compression level and max 8MB. func WithWindowSize(n int) EOption { return func(o *encoderOptions) error { switch { @@ -232,9 +232,9 @@ func WithEncoderLevel(l EncoderLevel) EOption { case SpeedDefault: o.windowSize = 8 << 20 case SpeedBetterCompression: - o.windowSize = 16 << 20 + o.windowSize = 8 << 20 case SpeedBestCompression: - o.windowSize = 32 << 20 + o.windowSize = 8 << 20 } } if !o.customALEntropy { diff --git a/tools/vendor/github.com/klauspost/compress/zstd/frameenc.go b/tools/vendor/github.com/klauspost/compress/zstd/frameenc.go index 2f5d5ed45..667ca0679 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/frameenc.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/frameenc.go @@ -76,7 +76,7 @@ func (f frameHeader) appendTo(dst []byte) []byte { if f.SingleSegment { dst = append(dst, uint8(f.ContentSize)) } - // Unless SingleSegment is set, framessizes < 256 are nto stored. + // Unless SingleSegment is set, framessizes < 256 are not stored. case 1: f.ContentSize -= 256 dst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8)) diff --git a/tools/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go b/tools/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go index 332e51fe4..8adfebb02 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go +++ b/tools/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go @@ -20,10 +20,9 @@ func (s *fseDecoder) buildDtable() error { if v == -1 { s.dt[highThreshold].setAddBits(uint8(i)) highThreshold-- - symbolNext[i] = 1 - } else { - symbolNext[i] = uint16(v) + v = 1 } + symbolNext[i] = uint16(v) } } @@ -35,10 +34,12 @@ func (s *fseDecoder) buildDtable() error { for ss, v := range s.norm[:s.symbolLen] { for i := 0; i < int(v); i++ { s.dt[position].setAddBits(uint8(ss)) - position = (position + step) & tableMask - for position > highThreshold { + for { // lowprob area position = (position + step) & tableMask + if position <= highThreshold { + break + } } } } diff --git a/tools/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s b/tools/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s index 17901e080..ae7d4d329 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s +++ b/tools/vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s @@ -162,12 +162,12 @@ finalize: MOVD h, ret+24(FP) RET -// func writeBlocks(d *Digest, b []byte) int +// func writeBlocks(s *Digest, b []byte) int TEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40 LDP ·primes+0(SB), (prime1, prime2) // Load state. Assume v[1-4] are stored contiguously. - MOVD d+0(FP), digest + MOVD s+0(FP), digest LDP 0(digest), (v1, v2) LDP 16(digest), (v3, v4) diff --git a/tools/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s b/tools/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s index 9a7655c0f..0782b86e3 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s +++ b/tools/vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s @@ -5,7 +5,6 @@ #include "textflag.h" // func matchLen(a []byte, b []byte) int -// Requires: BMI TEXT ·matchLen(SB), NOSPLIT, $0-56 MOVQ a_base+0(FP), AX MOVQ b_base+24(FP), CX @@ -17,17 +16,16 @@ TEXT ·matchLen(SB), NOSPLIT, $0-56 JB matchlen_match4_standalone matchlen_loopback_standalone: - MOVQ (AX)(SI*1), BX - XORQ (CX)(SI*1), BX - TESTQ BX, BX - JZ matchlen_loop_standalone + MOVQ (AX)(SI*1), BX + XORQ (CX)(SI*1), BX + JZ matchlen_loop_standalone #ifdef GOAMD64_v3 TZCNTQ BX, BX #else BSFQ BX, BX #endif - SARQ $0x03, BX + SHRL $0x03, BX LEAL (SI)(BX*1), SI JMP gen_match_len_end diff --git a/tools/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/tools/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index 974b99725..5b06174b8 100644 --- a/tools/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/tools/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -157,8 +157,7 @@ sequenceDecs_decode_amd64_ll_update_zero: // Update Literal Length State MOVBQZX DI, R14 - SHRQ $0x10, DI - MOVWQZX DI, DI + SHRL $0x10, DI LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -177,8 +176,7 @@ sequenceDecs_decode_amd64_ll_update_zero: // Update Match Length State MOVBQZX R8, R14 - SHRQ $0x10, R8 - MOVWQZX R8, R8 + SHRL $0x10, R8 LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -197,8 +195,7 @@ sequenceDecs_decode_amd64_ll_update_zero: // Update Offset State MOVBQZX R9, R14 - SHRQ $0x10, R9 - MOVWQZX R9, R9 + SHRL $0x10, R9 LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -459,8 +456,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero: // Update Literal Length State MOVBQZX DI, R14 - SHRQ $0x10, DI - MOVWQZX DI, DI + SHRL $0x10, DI LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -479,8 +475,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero: // Update Match Length State MOVBQZX R8, R14 - SHRQ $0x10, R8 - MOVWQZX R8, R8 + SHRL $0x10, R8 LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -499,8 +494,7 @@ sequenceDecs_decode_56_amd64_ll_update_zero: // Update Offset State MOVBQZX R9, R14 - SHRQ $0x10, R9 - MOVWQZX R9, R9 + SHRL $0x10, R9 LEAQ (BX)(R14*1), CX MOVQ DX, R15 MOVQ CX, BX @@ -772,11 +766,10 @@ sequenceDecs_decode_bmi2_fill_2_end: BZHIQ R14, R15, R15 // Update Offset State - BZHIQ R8, R15, CX - SHRXQ R8, R15, R15 - MOVQ $0x00001010, R14 - BEXTRQ R14, R8, R8 - ADDQ CX, R8 + BZHIQ R8, R15, CX + SHRXQ R8, R15, R15 + SHRL $0x10, R8 + ADDQ CX, R8 // Load ctx.ofTable MOVQ ctx+16(FP), CX @@ -784,11 +777,10 @@ sequenceDecs_decode_bmi2_fill_2_end: MOVQ (CX)(R8*8), R8 // Update Match Length State - BZHIQ DI, R15, CX - SHRXQ DI, R15, R15 - MOVQ $0x00001010, R14 - BEXTRQ R14, DI, DI - ADDQ CX, DI + BZHIQ DI, R15, CX + SHRXQ DI, R15, R15 + SHRL $0x10, DI + ADDQ CX, DI // Load ctx.mlTable MOVQ ctx+16(FP), CX @@ -796,10 +788,9 @@ sequenceDecs_decode_bmi2_fill_2_end: MOVQ (CX)(DI*8), DI // Update Literal Length State - BZHIQ SI, R15, CX - MOVQ $0x00001010, R14 - BEXTRQ R14, SI, SI - ADDQ CX, SI + BZHIQ SI, R15, CX + SHRL $0x10, SI + ADDQ CX, SI // Load ctx.llTable MOVQ ctx+16(FP), CX @@ -1032,11 +1023,10 @@ sequenceDecs_decode_56_bmi2_fill_end: BZHIQ R14, R15, R15 // Update Offset State - BZHIQ R8, R15, CX - SHRXQ R8, R15, R15 - MOVQ $0x00001010, R14 - BEXTRQ R14, R8, R8 - ADDQ CX, R8 + BZHIQ R8, R15, CX + SHRXQ R8, R15, R15 + SHRL $0x10, R8 + ADDQ CX, R8 // Load ctx.ofTable MOVQ ctx+16(FP), CX @@ -1044,11 +1034,10 @@ sequenceDecs_decode_56_bmi2_fill_end: MOVQ (CX)(R8*8), R8 // Update Match Length State - BZHIQ DI, R15, CX - SHRXQ DI, R15, R15 - MOVQ $0x00001010, R14 - BEXTRQ R14, DI, DI - ADDQ CX, DI + BZHIQ DI, R15, CX + SHRXQ DI, R15, R15 + SHRL $0x10, DI + ADDQ CX, DI // Load ctx.mlTable MOVQ ctx+16(FP), CX @@ -1056,10 +1045,9 @@ sequenceDecs_decode_56_bmi2_fill_end: MOVQ (CX)(DI*8), DI // Update Literal Length State - BZHIQ SI, R15, CX - MOVQ $0x00001010, R14 - BEXTRQ R14, SI, SI - ADDQ CX, SI + BZHIQ SI, R15, CX + SHRL $0x10, SI + ADDQ CX, SI // Load ctx.llTable MOVQ ctx+16(FP), CX @@ -1967,8 +1955,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero: // Update Literal Length State MOVBQZX DI, R13 - SHRQ $0x10, DI - MOVWQZX DI, DI + SHRL $0x10, DI LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -1987,8 +1974,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero: // Update Match Length State MOVBQZX R8, R13 - SHRQ $0x10, R8 - MOVWQZX R8, R8 + SHRL $0x10, R8 LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -2007,8 +1993,7 @@ sequenceDecs_decodeSync_amd64_ll_update_zero: // Update Offset State MOVBQZX R9, R13 - SHRQ $0x10, R9 - MOVWQZX R9, R9 + SHRL $0x10, R9 LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -2514,11 +2499,10 @@ sequenceDecs_decodeSync_bmi2_fill_2_end: BZHIQ R13, R14, R14 // Update Offset State - BZHIQ R8, R14, CX - SHRXQ R8, R14, R14 - MOVQ $0x00001010, R13 - BEXTRQ R13, R8, R8 - ADDQ CX, R8 + BZHIQ R8, R14, CX + SHRXQ R8, R14, R14 + SHRL $0x10, R8 + ADDQ CX, R8 // Load ctx.ofTable MOVQ ctx+16(FP), CX @@ -2526,11 +2510,10 @@ sequenceDecs_decodeSync_bmi2_fill_2_end: MOVQ (CX)(R8*8), R8 // Update Match Length State - BZHIQ DI, R14, CX - SHRXQ DI, R14, R14 - MOVQ $0x00001010, R13 - BEXTRQ R13, DI, DI - ADDQ CX, DI + BZHIQ DI, R14, CX + SHRXQ DI, R14, R14 + SHRL $0x10, DI + ADDQ CX, DI // Load ctx.mlTable MOVQ ctx+16(FP), CX @@ -2538,10 +2521,9 @@ sequenceDecs_decodeSync_bmi2_fill_2_end: MOVQ (CX)(DI*8), DI // Update Literal Length State - BZHIQ SI, R14, CX - MOVQ $0x00001010, R13 - BEXTRQ R13, SI, SI - ADDQ CX, SI + BZHIQ SI, R14, CX + SHRL $0x10, SI + ADDQ CX, SI // Load ctx.llTable MOVQ ctx+16(FP), CX @@ -3055,8 +3037,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero: // Update Literal Length State MOVBQZX DI, R13 - SHRQ $0x10, DI - MOVWQZX DI, DI + SHRL $0x10, DI LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -3075,8 +3056,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero: // Update Match Length State MOVBQZX R8, R13 - SHRQ $0x10, R8 - MOVWQZX R8, R8 + SHRL $0x10, R8 LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -3095,8 +3075,7 @@ sequenceDecs_decodeSync_safe_amd64_ll_update_zero: // Update Offset State MOVBQZX R9, R13 - SHRQ $0x10, R9 - MOVWQZX R9, R9 + SHRL $0x10, R9 LEAQ (BX)(R13*1), CX MOVQ DX, R14 MOVQ CX, BX @@ -3704,11 +3683,10 @@ sequenceDecs_decodeSync_safe_bmi2_fill_2_end: BZHIQ R13, R14, R14 // Update Offset State - BZHIQ R8, R14, CX - SHRXQ R8, R14, R14 - MOVQ $0x00001010, R13 - BEXTRQ R13, R8, R8 - ADDQ CX, R8 + BZHIQ R8, R14, CX + SHRXQ R8, R14, R14 + SHRL $0x10, R8 + ADDQ CX, R8 // Load ctx.ofTable MOVQ ctx+16(FP), CX @@ -3716,11 +3694,10 @@ sequenceDecs_decodeSync_safe_bmi2_fill_2_end: MOVQ (CX)(R8*8), R8 // Update Match Length State - BZHIQ DI, R14, CX - SHRXQ DI, R14, R14 - MOVQ $0x00001010, R13 - BEXTRQ R13, DI, DI - ADDQ CX, DI + BZHIQ DI, R14, CX + SHRXQ DI, R14, R14 + SHRL $0x10, DI + ADDQ CX, DI // Load ctx.mlTable MOVQ ctx+16(FP), CX @@ -3728,10 +3705,9 @@ sequenceDecs_decodeSync_safe_bmi2_fill_2_end: MOVQ (CX)(DI*8), DI // Update Literal Length State - BZHIQ SI, R14, CX - MOVQ $0x00001010, R13 - BEXTRQ R13, SI, SI - ADDQ CX, SI + BZHIQ SI, R14, CX + SHRL $0x10, SI + ADDQ CX, SI // Load ctx.llTable MOVQ ctx+16(FP), CX diff --git a/tools/vendor/github.com/klauspost/pgzip/.gitignore b/tools/vendor/github.com/klauspost/pgzip/.gitignore deleted file mode 100644 index daf913b1b..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/tools/vendor/github.com/klauspost/pgzip/.travis.yml b/tools/vendor/github.com/klauspost/pgzip/.travis.yml deleted file mode 100644 index 34704000e..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ - -arch: - - amd64 - - ppc64le -language: go - -os: - - linux - - osx - -go: - - 1.13.x - - 1.14.x - - 1.15.x - - master - -env: - - GO111MODULE=off - -script: - - diff <(gofmt -d .) <(printf "") - - go test -v -cpu=1,2,4 . - - go test -v -cpu=2 -race -short . - -matrix: - allow_failures: - - go: 'master' - fast_finish: true diff --git a/tools/vendor/github.com/klauspost/pgzip/LICENSE b/tools/vendor/github.com/klauspost/pgzip/LICENSE deleted file mode 100644 index 2bdc0d751..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Klaus Post - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/tools/vendor/github.com/klauspost/pgzip/README.md b/tools/vendor/github.com/klauspost/pgzip/README.md deleted file mode 100644 index ecc8726fa..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/README.md +++ /dev/null @@ -1,134 +0,0 @@ -pgzip -===== - -Go parallel gzip compression/decompression. This is a fully gzip compatible drop in replacement for "compress/gzip". - -This will split compression into blocks that are compressed in parallel. -This can be useful for compressing big amounts of data. The output is a standard gzip file. - -The gzip decompression is modified so it decompresses ahead of the current reader. -This means that reads will be non-blocking if the decompressor can keep ahead of your code reading from it. -CRC calculation also takes place in a separate goroutine. - -You should only use this if you are (de)compressing big amounts of data, -say **more than 1MB** at the time, otherwise you will not see any benefit, -and it will likely be faster to use the internal gzip library -or [this package](https://github.com/klauspost/compress). - -It is important to note that this library creates and reads *standard gzip files*. -You do not have to match the compressor/decompressor to get the described speedups, -and the gzip files are fully compatible with other gzip readers/writers. - -A golang variant of this is [bgzf](https://godoc.org/github.com/biogo/hts/bgzf), -which has the same feature, as well as seeking in the resulting file. -The only drawback is a slightly bigger overhead compared to this and pure gzip. -See a comparison below. - -[![GoDoc][1]][2] [![Build Status][3]][4] - -[1]: https://godoc.org/github.com/klauspost/pgzip?status.svg -[2]: https://godoc.org/github.com/klauspost/pgzip -[3]: https://travis-ci.org/klauspost/pgzip.svg -[4]: https://travis-ci.org/klauspost/pgzip - -Installation -==== -```go get github.com/klauspost/pgzip/...``` - -You might need to get/update the dependencies: - -``` -go get -u github.com/klauspost/compress -``` - -Usage -==== -[Godoc Doumentation](https://godoc.org/github.com/klauspost/pgzip) - -To use as a replacement for gzip, exchange - -```import "compress/gzip"``` -with -```import gzip "github.com/klauspost/pgzip"```. - -# Changes - -* Oct 6, 2016: Fixed an issue if the destination writer returned an error. -* Oct 6, 2016: Better buffer reuse, should now generate less garbage. -* Oct 6, 2016: Output does not change based on write sizes. -* Dec 8, 2015: Decoder now supports the io.WriterTo interface, giving a speedup and less GC pressure. -* Oct 9, 2015: Reduced allocations by ~35 by using sync.Pool. ~15% overall speedup. - -Changes in [github.com/klauspost/compress](https://github.com/klauspost/compress#changelog) are also carried over, so see that for more changes. - -## Compression -The simplest way to use this is to simply do the same as you would when using [compress/gzip](http://golang.org/pkg/compress/gzip). - -To change the block size, use the added (*pgzip.Writer).SetConcurrency(blockSize, blocks int) function. With this you can control the approximate size of your blocks, as well as how many you want to be processing in parallel. Default values for this is SetConcurrency(1MB, runtime.GOMAXPROCS(0)), meaning blocks are split at 1 MB and up to the number of CPU threads blocks can be processing at once before the writer blocks. - - -Example: -``` -var b bytes.Buffer -w := gzip.NewWriter(&b) -w.SetConcurrency(100000, 10) -w.Write([]byte("hello, world\n")) -w.Close() -``` - -To get any performance gains, you should at least be compressing more than 1 megabyte of data at the time. - -You should at least have a block size of 100k and at least a number of blocks that match the number of cores your would like to utilize, but about twice the number of blocks would be the best. - -Another side effect of this is, that it is likely to speed up your other code, since writes to the compressor only blocks if the compressor is already compressing the number of blocks you have specified. This also means you don't have worry about buffering input to the compressor. - -## Decompression - -Decompression works similar to compression. That means that you simply call pgzip the same way as you would call [compress/gzip](http://golang.org/pkg/compress/gzip). - -The only difference is that if you want to specify your own readahead, you have to use `pgzip.NewReaderN(r io.Reader, blockSize, blocks int)` to get a reader with your custom blocksizes. The `blockSize` is the size of each block decoded, and `blocks` is the maximum number of blocks that is decoded ahead. - -See [Example on playground](http://play.golang.org/p/uHv1B5NbDh) - -Performance -==== -## Compression - -See my blog post in [Benchmarks of Golang Gzip](https://blog.klauspost.com/go-gzipdeflate-benchmarks/). - -Compression cost is usually about 0.2% with default settings with a block size of 250k. - -Example with GOMAXPROC set to 32 (16 core CPU) - -Content is [Matt Mahoneys 10GB corpus](http://mattmahoney.net/dc/10gb.html). Compression level 6. - -Compressor | MB/sec | speedup | size | size overhead (lower=better) -------------|----------|---------|------|--------- -[gzip](http://golang.org/pkg/compress/gzip) (golang) | 16.91MB/s (1 thread) | 1.0x | 4781329307 | 0% -[gzip](http://github.com/klauspost/compress/gzip) (klauspost) | 127.10MB/s (1 thread) | 7.52x | 4885366806 | +2.17% -[pgzip](https://github.com/klauspost/pgzip) (klauspost) | 2085.35MB/s| 123.34x | 4886132566 | +2.19% -[pargzip](https://godoc.org/github.com/golang/build/pargzip) (builder) | 334.04MB/s | 19.76x | 4786890417 | +0.12% - -pgzip also contains a [huffman only compression](https://github.com/klauspost/compress#linear-time-compression-huffman-only) mode, that will allow compression at ~450MB per core per second, largely independent of the content. - -See the [complete sheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) for different content types and compression settings. - -## Decompression - -The decompression speedup is there because it allows you to do other work while the decompression is taking place. - -In the example above, the numbers are as follows on a 4 CPU machine: - -Decompressor | Time | Speedup --------------|------|-------- -[gzip](http://golang.org/pkg/compress/gzip) (golang) | 1m28.85s | 0% -[pgzip](https://github.com/klauspost/pgzip) (klauspost) | 43.48s | 104% - -But wait, since gzip decompression is inherently singlethreaded (aside from CRC calculation) how can it be more than 100% faster? Because pgzip due to its design also acts as a buffer. When using unbuffered gzip, you are also waiting for io when you are decompressing. If the gzip decoder can keep up, it will always have data ready for your reader, and you will not be waiting for input to the gzip decompressor to complete. - -This is pretty much an optimal situation for pgzip, but it reflects most common usecases for CPU intensive gzip usage. - -I haven't included [bgzf](https://godoc.org/github.com/biogo/hts/bgzf) in this comparison, since it only can decompress files created by a compatible encoder, and therefore cannot be considered a generic gzip decompressor. But if you are able to compress your files with a bgzf compatible program, you can expect it to scale beyond 100%. - -# License -This contains large portions of code from the go repository - see GO_LICENSE for more information. The changes are released under MIT License. See LICENSE for more information. diff --git a/tools/vendor/github.com/klauspost/pgzip/gunzip.go b/tools/vendor/github.com/klauspost/pgzip/gunzip.go deleted file mode 100644 index 3c4b32f16..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/gunzip.go +++ /dev/null @@ -1,597 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package pgzip implements reading and writing of gzip format compressed files, -// as specified in RFC 1952. -// -// This is a drop in replacement for "compress/gzip". -// This will split compression into blocks that are compressed in parallel. -// This can be useful for compressing big amounts of data. -// The gzip decompression has not been modified, but remains in the package, -// so you can use it as a complete replacement for "compress/gzip". -// -// See more at https://github.com/klauspost/pgzip -package pgzip - -import ( - "bufio" - "errors" - "hash" - "hash/crc32" - "io" - "sync" - "time" - - "github.com/klauspost/compress/flate" -) - -const ( - gzipID1 = 0x1f - gzipID2 = 0x8b - gzipDeflate = 8 - flagText = 1 << 0 - flagHdrCrc = 1 << 1 - flagExtra = 1 << 2 - flagName = 1 << 3 - flagComment = 1 << 4 -) - -func makeReader(r io.Reader) flate.Reader { - if rr, ok := r.(flate.Reader); ok { - return rr - } - return bufio.NewReader(r) -} - -var ( - // ErrChecksum is returned when reading GZIP data that has an invalid checksum. - ErrChecksum = errors.New("gzip: invalid checksum") - // ErrHeader is returned when reading GZIP data that has an invalid header. - ErrHeader = errors.New("gzip: invalid header") -) - -// The gzip file stores a header giving metadata about the compressed file. -// That header is exposed as the fields of the Writer and Reader structs. -type Header struct { - Comment string // comment - Extra []byte // "extra data" - ModTime time.Time // modification time - Name string // file name - OS byte // operating system type -} - -// A Reader is an io.Reader that can be read to retrieve -// uncompressed data from a gzip-format compressed file. -// -// In general, a gzip file can be a concatenation of gzip files, -// each with its own header. Reads from the Reader -// return the concatenation of the uncompressed data of each. -// Only the first header is recorded in the Reader fields. -// -// Gzip files store a length and checksum of the uncompressed data. -// The Reader will return a ErrChecksum when Read -// reaches the end of the uncompressed data if it does not -// have the expected length or checksum. Clients should treat data -// returned by Read as tentative until they receive the io.EOF -// marking the end of the data. -type Reader struct { - Header - r flate.Reader - decompressor io.ReadCloser - digest hash.Hash32 - size uint32 - flg byte - buf [512]byte - err error - closeErr chan error - multistream bool - - readAhead chan read - roff int // read offset - current []byte - closeReader chan struct{} - lastBlock bool - blockSize int - blocks int - - activeRA bool // Indication if readahead is active - mu sync.Mutex // Lock for above - - blockPool chan []byte -} - -type read struct { - b []byte - err error -} - -// NewReader creates a new Reader reading the given reader. -// The implementation buffers input and may read more data than necessary from r. -// It is the caller's responsibility to call Close on the Reader when done. -func NewReader(r io.Reader) (*Reader, error) { - z := new(Reader) - z.blocks = defaultBlocks - z.blockSize = defaultBlockSize - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.multistream = true - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - if err := z.readHeader(true); err != nil { - return nil, err - } - return z, nil -} - -// NewReaderN creates a new Reader reading the given reader. -// The implementation buffers input and may read more data than necessary from r. -// It is the caller's responsibility to call Close on the Reader when done. -// -// With this you can control the approximate size of your blocks, -// as well as how many blocks you want to have prefetched. -// -// Default values for this is blockSize = 250000, blocks = 16, -// meaning up to 16 blocks of maximum 250000 bytes will be -// prefetched. -func NewReaderN(r io.Reader, blockSize, blocks int) (*Reader, error) { - z := new(Reader) - z.blocks = blocks - z.blockSize = blockSize - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.multistream = true - - // Account for too small values - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - if err := z.readHeader(true); err != nil { - return nil, err - } - return z, nil -} - -// Reset discards the Reader z's state and makes it equivalent to the -// result of its original state from NewReader, but reading from r instead. -// This permits reusing a Reader rather than allocating a new one. -func (z *Reader) Reset(r io.Reader) error { - z.killReadAhead() - z.r = makeReader(r) - z.digest = crc32.NewIEEE() - z.size = 0 - z.err = nil - z.multistream = true - - // Account for uninitialized values - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - - if z.blockPool == nil { - z.blockPool = make(chan []byte, z.blocks) - for i := 0; i < z.blocks; i++ { - z.blockPool <- make([]byte, z.blockSize) - } - } - - return z.readHeader(true) -} - -// Multistream controls whether the reader supports multistream files. -// -// If enabled (the default), the Reader expects the input to be a sequence -// of individually gzipped data streams, each with its own header and -// trailer, ending at EOF. The effect is that the concatenation of a sequence -// of gzipped files is treated as equivalent to the gzip of the concatenation -// of the sequence. This is standard behavior for gzip readers. -// -// Calling Multistream(false) disables this behavior; disabling the behavior -// can be useful when reading file formats that distinguish individual gzip -// data streams or mix gzip data streams with other data streams. -// In this mode, when the Reader reaches the end of the data stream, -// Read returns io.EOF. If the underlying reader implements io.ByteReader, -// it will be left positioned just after the gzip stream. -// To start the next stream, call z.Reset(r) followed by z.Multistream(false). -// If there is no next stream, z.Reset(r) will return io.EOF. -func (z *Reader) Multistream(ok bool) { - z.multistream = ok -} - -// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). -func get4(p []byte) uint32 { - return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 -} - -func (z *Reader) readString() (string, error) { - var err error - needconv := false - for i := 0; ; i++ { - if i >= len(z.buf) { - return "", ErrHeader - } - z.buf[i], err = z.r.ReadByte() - if err != nil { - return "", err - } - if z.buf[i] > 0x7f { - needconv = true - } - if z.buf[i] == 0 { - // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). - if needconv { - s := make([]rune, 0, i) - for _, v := range z.buf[0:i] { - s = append(s, rune(v)) - } - return string(s), nil - } - return string(z.buf[0:i]), nil - } - } -} - -func (z *Reader) read2() (uint32, error) { - _, err := io.ReadFull(z.r, z.buf[0:2]) - if err != nil { - return 0, err - } - return uint32(z.buf[0]) | uint32(z.buf[1])<<8, nil -} - -func (z *Reader) readHeader(save bool) error { - z.killReadAhead() - - _, err := io.ReadFull(z.r, z.buf[0:10]) - if err != nil { - return err - } - if z.buf[0] != gzipID1 || z.buf[1] != gzipID2 || z.buf[2] != gzipDeflate { - return ErrHeader - } - z.flg = z.buf[3] - if save { - z.ModTime = time.Unix(int64(get4(z.buf[4:8])), 0) - // z.buf[8] is xfl, ignored - z.OS = z.buf[9] - } - z.digest.Reset() - z.digest.Write(z.buf[0:10]) - - if z.flg&flagExtra != 0 { - n, err := z.read2() - if err != nil { - return err - } - data := make([]byte, n) - if _, err = io.ReadFull(z.r, data); err != nil { - return err - } - if save { - z.Extra = data - } - } - - var s string - if z.flg&flagName != 0 { - if s, err = z.readString(); err != nil { - return err - } - if save { - z.Name = s - } - } - - if z.flg&flagComment != 0 { - if s, err = z.readString(); err != nil { - return err - } - if save { - z.Comment = s - } - } - - if z.flg&flagHdrCrc != 0 { - n, err := z.read2() - if err != nil { - return err - } - sum := z.digest.Sum32() & 0xFFFF - if n != sum { - return ErrHeader - } - } - - z.digest.Reset() - z.decompressor = flate.NewReader(z.r) - z.doReadAhead() - return nil -} - -func (z *Reader) killReadAhead() error { - z.mu.Lock() - defer z.mu.Unlock() - if z.activeRA { - if z.closeReader != nil { - close(z.closeReader) - } - - // Wait for decompressor to be closed and return error, if any. - e, ok := <-z.closeErr - z.activeRA = false - - for blk := range z.readAhead { - if blk.b != nil { - z.blockPool <- blk.b - } - } - if cap(z.current) > 0 { - z.blockPool <- z.current - z.current = nil - } - if !ok { - // Channel is closed, so if there was any error it has already been returned. - return nil - } - return e - } - return nil -} - -// Starts readahead. -// Will return on error (including io.EOF) -// or when z.closeReader is closed. -func (z *Reader) doReadAhead() { - z.mu.Lock() - defer z.mu.Unlock() - z.activeRA = true - - if z.blocks <= 0 { - z.blocks = defaultBlocks - } - if z.blockSize <= 512 { - z.blockSize = defaultBlockSize - } - ra := make(chan read, z.blocks) - z.readAhead = ra - closeReader := make(chan struct{}, 0) - z.closeReader = closeReader - z.lastBlock = false - closeErr := make(chan error, 1) - z.closeErr = closeErr - z.size = 0 - z.roff = 0 - z.current = nil - decomp := z.decompressor - - go func() { - defer func() { - closeErr <- decomp.Close() - close(closeErr) - close(ra) - }() - - // We hold a local reference to digest, since - // it way be changed by reset. - digest := z.digest - var wg sync.WaitGroup - for { - var buf []byte - select { - case buf = <-z.blockPool: - case <-closeReader: - return - } - buf = buf[0:z.blockSize] - // Try to fill the buffer - n, err := io.ReadFull(decomp, buf) - if err == io.ErrUnexpectedEOF { - if n > 0 { - err = nil - } else { - // If we got zero bytes, we need to establish if - // we reached end of stream or truncated stream. - _, err = decomp.Read([]byte{}) - if err == io.EOF { - err = nil - } - } - } - if n < len(buf) { - buf = buf[0:n] - } - wg.Wait() - wg.Add(1) - go func() { - digest.Write(buf) - wg.Done() - }() - z.size += uint32(n) - - // If we return any error, out digest must be ready - if err != nil { - wg.Wait() - } - select { - case z.readAhead <- read{b: buf, err: err}: - case <-closeReader: - // Sent on close, we don't care about the next results - z.blockPool <- buf - return - } - if err != nil { - return - } - } - }() -} - -func (z *Reader) Read(p []byte) (n int, err error) { - if z.err != nil { - return 0, z.err - } - if len(p) == 0 { - return 0, nil - } - - for { - if len(z.current) == 0 && !z.lastBlock { - read := <-z.readAhead - - if read.err != nil { - // If not nil, the reader will have exited - z.closeReader = nil - - if read.err != io.EOF { - z.err = read.err - return - } - if read.err == io.EOF { - z.lastBlock = true - err = nil - } - } - z.current = read.b - z.roff = 0 - } - avail := z.current[z.roff:] - if len(p) >= len(avail) { - // If len(p) >= len(current), return all content of current - n = copy(p, avail) - z.blockPool <- z.current - z.current = nil - if z.lastBlock { - err = io.EOF - break - } - } else { - // We copy as much as there is space for - n = copy(p, avail) - z.roff += n - } - return - } - - // Finished file; check checksum + size. - if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil { - z.err = err - return 0, err - } - crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8]) - sum := z.digest.Sum32() - if sum != crc32 || isize != z.size { - z.err = ErrChecksum - return 0, z.err - } - - // File is ok; should we attempt reading one more? - if !z.multistream { - return 0, io.EOF - } - - // Is there another? - if err = z.readHeader(false); err != nil { - z.err = err - return - } - - // Yes. Reset and read from it. - return z.Read(p) -} - -func (z *Reader) WriteTo(w io.Writer) (n int64, err error) { - total := int64(0) - avail := z.current[z.roff:] - if len(avail) != 0 { - n, err := w.Write(avail) - if n != len(avail) { - return total, io.ErrShortWrite - } - total += int64(n) - if err != nil { - return total, err - } - z.blockPool <- z.current - z.current = nil - } - for { - if z.err != nil { - return total, z.err - } - // We write both to output and digest. - for { - // Read from input - read := <-z.readAhead - if read.err != nil { - // If not nil, the reader will have exited - z.closeReader = nil - - if read.err != io.EOF { - z.err = read.err - return total, z.err - } - if read.err == io.EOF { - z.lastBlock = true - err = nil - } - } - // Write what we got - n, err := w.Write(read.b) - if n != len(read.b) { - return total, io.ErrShortWrite - } - total += int64(n) - if err != nil { - return total, err - } - // Put block back - z.blockPool <- read.b - if z.lastBlock { - break - } - } - - // Finished file; check checksum + size. - if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil { - z.err = err - return total, err - } - crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8]) - sum := z.digest.Sum32() - if sum != crc32 || isize != z.size { - z.err = ErrChecksum - return total, z.err - } - // File is ok; should we attempt reading one more? - if !z.multistream { - return total, nil - } - - // Is there another? - err = z.readHeader(false) - if err == io.EOF { - return total, nil - } - if err != nil { - z.err = err - return total, err - } - } -} - -// Close closes the Reader. It does not close the underlying io.Reader. -func (z *Reader) Close() error { - return z.killReadAhead() -} diff --git a/tools/vendor/github.com/klauspost/pgzip/gzip.go b/tools/vendor/github.com/klauspost/pgzip/gzip.go deleted file mode 100644 index 257c4d299..000000000 --- a/tools/vendor/github.com/klauspost/pgzip/gzip.go +++ /dev/null @@ -1,519 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pgzip - -import ( - "bytes" - "errors" - "fmt" - "hash" - "hash/crc32" - "io" - "runtime" - "sync" - "time" - - "github.com/klauspost/compress/flate" -) - -const ( - defaultBlockSize = 1 << 20 - tailSize = 16384 - defaultBlocks = 4 -) - -// These constants are copied from the flate package, so that code that imports -// "compress/gzip" does not also have to import "compress/flate". -const ( - NoCompression = flate.NoCompression - BestSpeed = flate.BestSpeed - BestCompression = flate.BestCompression - DefaultCompression = flate.DefaultCompression - ConstantCompression = flate.ConstantCompression - HuffmanOnly = flate.HuffmanOnly -) - -// A Writer is an io.WriteCloser. -// Writes to a Writer are compressed and written to w. -type Writer struct { - Header - w io.Writer - level int - wroteHeader bool - blockSize int - blocks int - currentBuffer []byte - prevTail []byte - digest hash.Hash32 - size int - closed bool - buf [10]byte - errMu sync.RWMutex - err error - pushedErr chan struct{} - results chan result - dictFlatePool sync.Pool - dstPool sync.Pool - wg sync.WaitGroup -} - -type result struct { - result chan []byte - notifyWritten chan struct{} -} - -// Use SetConcurrency to finetune the concurrency level if needed. -// -// With this you can control the approximate size of your blocks, -// as well as how many you want to be processing in parallel. -// -// Default values for this is SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)), -// meaning blocks are split at 1 MB and up to the number of CPU threads -// can be processing at once before the writer blocks. -func (z *Writer) SetConcurrency(blockSize, blocks int) error { - if blockSize <= tailSize { - return fmt.Errorf("gzip: block size cannot be less than or equal to %d", tailSize) - } - if blocks <= 0 { - return errors.New("gzip: blocks cannot be zero or less") - } - if blockSize == z.blockSize && blocks == z.blocks { - return nil - } - z.blockSize = blockSize - z.results = make(chan result, blocks) - z.blocks = blocks - z.dstPool.New = func() interface{} { return make([]byte, 0, blockSize+(blockSize)>>4) } - return nil -} - -// NewWriter returns a new Writer. -// Writes to the returned writer are compressed and written to w. -// -// It is the caller's responsibility to call Close on the WriteCloser when done. -// Writes may be buffered and not flushed until Close. -// -// Callers that wish to set the fields in Writer.Header must do so before -// the first call to Write or Close. The Comment and Name header fields are -// UTF-8 strings in Go, but the underlying format requires NUL-terminated ISO -// 8859-1 (Latin-1). NUL or non-Latin-1 runes in those strings will lead to an -// error on Write. -func NewWriter(w io.Writer) *Writer { - z, _ := NewWriterLevel(w, DefaultCompression) - return z -} - -// NewWriterLevel is like NewWriter but specifies the compression level instead -// of assuming DefaultCompression. -// -// The compression level can be DefaultCompression, NoCompression, or any -// integer value between BestSpeed and BestCompression inclusive. The error -// returned will be nil if the level is valid. -func NewWriterLevel(w io.Writer, level int) (*Writer, error) { - if level < ConstantCompression || level > BestCompression { - return nil, fmt.Errorf("gzip: invalid compression level: %d", level) - } - z := new(Writer) - z.SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)) - z.init(w, level) - return z, nil -} - -// This function must be used by goroutines to set an -// error condition, since z.err access is restricted -// to the callers goruotine. -func (z *Writer) pushError(err error) { - z.errMu.Lock() - if z.err != nil { - z.errMu.Unlock() - return - } - z.err = err - close(z.pushedErr) - z.errMu.Unlock() -} - -func (z *Writer) init(w io.Writer, level int) { - z.wg.Wait() - digest := z.digest - if digest != nil { - digest.Reset() - } else { - digest = crc32.NewIEEE() - } - z.Header = Header{OS: 255} - z.w = w - z.level = level - z.digest = digest - z.pushedErr = make(chan struct{}, 0) - z.results = make(chan result, z.blocks) - z.err = nil - z.closed = false - z.Comment = "" - z.Extra = nil - z.ModTime = time.Time{} - z.wroteHeader = false - z.currentBuffer = nil - z.buf = [10]byte{} - z.prevTail = nil - z.size = 0 - if z.dictFlatePool.New == nil { - z.dictFlatePool.New = func() interface{} { - f, _ := flate.NewWriterDict(w, level, nil) - return f - } - } -} - -// Reset discards the Writer z's state and makes it equivalent to the -// result of its original state from NewWriter or NewWriterLevel, but -// writing to w instead. This permits reusing a Writer rather than -// allocating a new one. -func (z *Writer) Reset(w io.Writer) { - if z.results != nil && !z.closed { - close(z.results) - } - z.SetConcurrency(defaultBlockSize, runtime.GOMAXPROCS(0)) - z.init(w, z.level) -} - -// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). -func put2(p []byte, v uint16) { - p[0] = uint8(v >> 0) - p[1] = uint8(v >> 8) -} - -func put4(p []byte, v uint32) { - p[0] = uint8(v >> 0) - p[1] = uint8(v >> 8) - p[2] = uint8(v >> 16) - p[3] = uint8(v >> 24) -} - -// writeBytes writes a length-prefixed byte slice to z.w. -func (z *Writer) writeBytes(b []byte) error { - if len(b) > 0xffff { - return errors.New("gzip.Write: Extra data is too large") - } - put2(z.buf[0:2], uint16(len(b))) - _, err := z.w.Write(z.buf[0:2]) - if err != nil { - return err - } - _, err = z.w.Write(b) - return err -} - -// writeString writes a UTF-8 string s in GZIP's format to z.w. -// GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1). -func (z *Writer) writeString(s string) (err error) { - // GZIP stores Latin-1 strings; error if non-Latin-1; convert if non-ASCII. - needconv := false - for _, v := range s { - if v == 0 || v > 0xff { - return errors.New("gzip.Write: non-Latin-1 header string") - } - if v > 0x7f { - needconv = true - } - } - if needconv { - b := make([]byte, 0, len(s)) - for _, v := range s { - b = append(b, byte(v)) - } - _, err = z.w.Write(b) - } else { - _, err = io.WriteString(z.w, s) - } - if err != nil { - return err - } - // GZIP strings are NUL-terminated. - z.buf[0] = 0 - _, err = z.w.Write(z.buf[0:1]) - return err -} - -// compressCurrent will compress the data currently buffered -// This should only be called from the main writer/flush/closer -func (z *Writer) compressCurrent(flush bool) { - c := z.currentBuffer - if len(c) > z.blockSize { - // This can never happen through the public interface. - panic("len(z.currentBuffer) > z.blockSize (most likely due to concurrent Write race)") - } - - r := result{} - r.result = make(chan []byte, 1) - r.notifyWritten = make(chan struct{}, 0) - // Reserve a result slot - select { - case z.results <- r: - case <-z.pushedErr: - return - } - - z.wg.Add(1) - tail := z.prevTail - if len(c) > tailSize { - buf := z.dstPool.Get().([]byte) // Put in .compressBlock - // Copy tail from current buffer before handing the buffer over to the - // compressBlock goroutine. - buf = append(buf[:0], c[len(c)-tailSize:]...) - z.prevTail = buf - } else { - z.prevTail = nil - } - go z.compressBlock(c, tail, r, z.closed) - - z.currentBuffer = z.dstPool.Get().([]byte) // Put in .compressBlock - z.currentBuffer = z.currentBuffer[:0] - - // Wait if flushing - if flush { - <-r.notifyWritten - } -} - -// Returns an error if it has been set. -// Cannot be used by functions that are from internal goroutines. -func (z *Writer) checkError() error { - z.errMu.RLock() - err := z.err - z.errMu.RUnlock() - return err -} - -// Write writes a compressed form of p to the underlying io.Writer. The -// compressed bytes are not necessarily flushed to output until -// the Writer is closed or Flush() is called. -// -// The function will return quickly, if there are unused buffers. -// The sent slice (p) is copied, and the caller is free to re-use the buffer -// when the function returns. -// -// Errors that occur during compression will be reported later, and a nil error -// does not signify that the compression succeeded (since it is most likely still running) -// That means that the call that returns an error may not be the call that caused it. -// Only Flush and Close functions are guaranteed to return any errors up to that point. -func (z *Writer) Write(p []byte) (int, error) { - if err := z.checkError(); err != nil { - return 0, err - } - // Write the GZIP header lazily. - if !z.wroteHeader { - z.wroteHeader = true - z.buf[0] = gzipID1 - z.buf[1] = gzipID2 - z.buf[2] = gzipDeflate - z.buf[3] = 0 - if z.Extra != nil { - z.buf[3] |= 0x04 - } - if z.Name != "" { - z.buf[3] |= 0x08 - } - if z.Comment != "" { - z.buf[3] |= 0x10 - } - put4(z.buf[4:8], uint32(z.ModTime.Unix())) - if z.level == BestCompression { - z.buf[8] = 2 - } else if z.level == BestSpeed { - z.buf[8] = 4 - } else { - z.buf[8] = 0 - } - z.buf[9] = z.OS - var n int - var err error - n, err = z.w.Write(z.buf[0:10]) - if err != nil { - z.pushError(err) - return n, err - } - if z.Extra != nil { - err = z.writeBytes(z.Extra) - if err != nil { - z.pushError(err) - return n, err - } - } - if z.Name != "" { - err = z.writeString(z.Name) - if err != nil { - z.pushError(err) - return n, err - } - } - if z.Comment != "" { - err = z.writeString(z.Comment) - if err != nil { - z.pushError(err) - return n, err - } - } - // Start receiving data from compressors - go func() { - listen := z.results - var failed bool - for { - r, ok := <-listen - // If closed, we are finished. - if !ok { - return - } - if failed { - close(r.notifyWritten) - continue - } - buf := <-r.result - n, err := z.w.Write(buf) - if err != nil { - z.pushError(err) - close(r.notifyWritten) - failed = true - continue - } - if n != len(buf) { - z.pushError(fmt.Errorf("gzip: short write %d should be %d", n, len(buf))) - failed = true - close(r.notifyWritten) - continue - } - z.dstPool.Put(buf) - close(r.notifyWritten) - } - }() - z.currentBuffer = z.dstPool.Get().([]byte) - z.currentBuffer = z.currentBuffer[:0] - } - q := p - for len(q) > 0 { - length := len(q) - if length+len(z.currentBuffer) > z.blockSize { - length = z.blockSize - len(z.currentBuffer) - } - z.digest.Write(q[:length]) - z.currentBuffer = append(z.currentBuffer, q[:length]...) - if len(z.currentBuffer) > z.blockSize { - panic("z.currentBuffer too large (most likely due to concurrent Write race)") - } - if len(z.currentBuffer) == z.blockSize { - z.compressCurrent(false) - if err := z.checkError(); err != nil { - return len(p) - len(q), err - } - } - z.size += length - q = q[length:] - } - return len(p), z.checkError() -} - -// Step 1: compresses buffer to buffer -// Step 2: send writer to channel -// Step 3: Close result channel to indicate we are done -func (z *Writer) compressBlock(p, prevTail []byte, r result, closed bool) { - defer func() { - close(r.result) - z.wg.Done() - }() - buf := z.dstPool.Get().([]byte) // Corresponding Put in .Write's result writer - dest := bytes.NewBuffer(buf[:0]) - - compressor := z.dictFlatePool.Get().(*flate.Writer) // Put below - compressor.ResetDict(dest, prevTail) - compressor.Write(p) - z.dstPool.Put(p) // Corresponding Get in .Write and .compressCurrent - - err := compressor.Flush() - if err != nil { - z.pushError(err) - return - } - if closed { - err = compressor.Close() - if err != nil { - z.pushError(err) - return - } - } - z.dictFlatePool.Put(compressor) // Get above - - if prevTail != nil { - z.dstPool.Put(prevTail) // Get in .compressCurrent - } - - // Read back buffer - buf = dest.Bytes() - r.result <- buf -} - -// Flush flushes any pending compressed data to the underlying writer. -// -// It is useful mainly in compressed network protocols, to ensure that -// a remote reader has enough data to reconstruct a packet. Flush does -// not return until the data has been written. If the underlying -// writer returns an error, Flush returns that error. -// -// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH. -func (z *Writer) Flush() error { - if err := z.checkError(); err != nil { - return err - } - if z.closed { - return nil - } - if !z.wroteHeader { - _, err := z.Write(nil) - if err != nil { - return err - } - } - // We send current block to compression - z.compressCurrent(true) - - return z.checkError() -} - -// UncompressedSize will return the number of bytes written. -// pgzip only, not a function in the official gzip package. -func (z *Writer) UncompressedSize() int { - return z.size -} - -// Close closes the Writer, flushing any unwritten data to the underlying -// io.Writer, but does not close the underlying io.Writer. -func (z *Writer) Close() error { - if err := z.checkError(); err != nil { - return err - } - if z.closed { - return nil - } - - z.closed = true - if !z.wroteHeader { - z.Write(nil) - if err := z.checkError(); err != nil { - return err - } - } - z.compressCurrent(true) - if err := z.checkError(); err != nil { - return err - } - close(z.results) - put4(z.buf[0:4], z.digest.Sum32()) - put4(z.buf[4:8], uint32(z.size)) - _, err := z.w.Write(z.buf[0:8]) - if err != nil { - z.pushError(err) - return err - } - return nil -} diff --git a/tools/vendor/github.com/mattn/go-runewidth/runewidth_table.go b/tools/vendor/github.com/mattn/go-runewidth/runewidth_table.go index e5d890c26..ad025ad52 100644 --- a/tools/vendor/github.com/mattn/go-runewidth/runewidth_table.go +++ b/tools/vendor/github.com/mattn/go-runewidth/runewidth_table.go @@ -4,20 +4,21 @@ package runewidth var combining = table{ {0x0300, 0x036F}, {0x0483, 0x0489}, {0x07EB, 0x07F3}, - {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0D00, 0x0D01}, - {0x135D, 0x135F}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1AC0}, - {0x1B6B, 0x1B73}, {0x1DC0, 0x1DF9}, {0x1DFB, 0x1DFF}, + {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0CF3, 0x0CF3}, + {0x0D00, 0x0D01}, {0x135D, 0x135F}, {0x1A7F, 0x1A7F}, + {0x1AB0, 0x1ACE}, {0x1B6B, 0x1B73}, {0x1DC0, 0x1DFF}, {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2DE0, 0x2DFF}, {0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA8E0, 0xA8F1}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x10376, 0x1037A}, - {0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x11300, 0x11301}, - {0x1133B, 0x1133C}, {0x11366, 0x1136C}, {0x11370, 0x11374}, - {0x16AF0, 0x16AF4}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172}, + {0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, + {0x11300, 0x11301}, {0x1133B, 0x1133C}, {0x11366, 0x1136C}, + {0x11370, 0x11374}, {0x16AF0, 0x16AF4}, {0x1CF00, 0x1CF2D}, + {0x1CF30, 0x1CF46}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, - {0x1E8D0, 0x1E8D6}, + {0x1E08F, 0x1E08F}, {0x1E8D0, 0x1E8D6}, } var doublewidth = table{ @@ -33,33 +34,34 @@ var doublewidth = table{ {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99}, - {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB}, - {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF}, - {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3}, - {0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF}, - {0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C}, - {0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, - {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, - {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4}, - {0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, - {0x18D00, 0x18D08}, {0x1B000, 0x1B11E}, {0x1B150, 0x1B152}, - {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004}, - {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, - {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, - {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320}, - {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, - {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, - {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, - {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, - {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, - {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, - {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7}, - {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, - {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F978}, - {0x1F97A, 0x1F9CB}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA74}, - {0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAA8}, - {0x1FAB0, 0x1FAB6}, {0x1FAC0, 0x1FAC2}, {0x1FAD0, 0x1FAD6}, - {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, + {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x303E}, + {0x3041, 0x3096}, {0x3099, 0x30FF}, {0x3105, 0x312F}, + {0x3131, 0x318E}, {0x3190, 0x31E3}, {0x31EF, 0x321E}, + {0x3220, 0x3247}, {0x3250, 0x4DBF}, {0x4E00, 0xA48C}, + {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3}, + {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, + {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, + {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4}, {0x16FF0, 0x16FF1}, + {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, + {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, + {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, + {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, + {0x1F191, 0x1F19A}, {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, + {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, + {0x1F300, 0x1F320}, {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, + {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, + {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, + {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, + {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, + {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, + {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, + {0x1F6D5, 0x1F6D7}, {0x1F6DC, 0x1F6DF}, {0x1F6EB, 0x1F6EC}, + {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, + {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, + {0x1FA70, 0x1FA7C}, {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, + {0x1FABF, 0x1FAC5}, {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, + {0x1FAF0, 0x1FAF8}, {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, } var ambiguous = table{ @@ -154,43 +156,43 @@ var neutral = table{ {0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F}, {0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4}, - {0x0600, 0x061C}, {0x061E, 0x070D}, {0x070F, 0x074A}, - {0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D}, - {0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E}, - {0x0860, 0x086A}, {0x08A0, 0x08B4}, {0x08B6, 0x08C7}, - {0x08D3, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990}, - {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, - {0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, - {0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, - {0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03}, - {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, - {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, - {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42}, - {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, - {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76}, - {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, - {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, - {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9}, - {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3}, - {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03}, - {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, - {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, - {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D}, - {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63}, - {0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, - {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, - {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, - {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, - {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, - {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C}, - {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, - {0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, - {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C63}, + {0x0600, 0x070D}, {0x070F, 0x074A}, {0x074D, 0x07B1}, + {0x07C0, 0x07FA}, {0x07FD, 0x082D}, {0x0830, 0x083E}, + {0x0840, 0x085B}, {0x085E, 0x085E}, {0x0860, 0x086A}, + {0x0870, 0x088E}, {0x0890, 0x0891}, {0x0898, 0x0983}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CE}, + {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, + {0x09E6, 0x09FE}, {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, + {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, + {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, + {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, + {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, + {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76}, {0x0A81, 0x0A83}, + {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, + {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, + {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, + {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3}, {0x0AE6, 0x0AF1}, + {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, + {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, + {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, + {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D}, {0x0B55, 0x0B57}, + {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63}, {0x0B66, 0x0B77}, + {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, + {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, + {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C}, {0x0C0E, 0x0C10}, + {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, {0x0C3C, 0x0C44}, + {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, + {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, {0x0C60, 0x0C63}, {0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD}, - {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3}, - {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D00, 0x0D0C}, + {0x0CD5, 0x0CD6}, {0x0CDD, 0x0CDE}, {0x0CE0, 0x0CE3}, + {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF3}, {0x0D00, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, {0x0D46, 0x0D48}, {0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, {0x0D66, 0x0D7F}, {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, @@ -200,7 +202,7 @@ var neutral = table{ {0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, {0x0EC0, 0x0EC4}, - {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9}, + {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC}, {0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7}, @@ -212,20 +214,19 @@ var neutral = table{ {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, {0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8}, - {0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736}, - {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, - {0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9}, - {0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819}, - {0x1820, 0x1878}, {0x1880, 0x18AA}, {0x18B0, 0x18F5}, - {0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B}, - {0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974}, - {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, - {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C}, - {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD}, - {0x1AB0, 0x1AC0}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C}, - {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49}, - {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7}, - {0x1CD0, 0x1CFA}, {0x1D00, 0x1DF9}, {0x1DFB, 0x1F15}, + {0x1700, 0x1715}, {0x171F, 0x1736}, {0x1740, 0x1753}, + {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1772, 0x1773}, + {0x1780, 0x17DD}, {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, + {0x1800, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B}, + {0x1930, 0x193B}, {0x1940, 0x1940}, {0x1944, 0x196D}, + {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, + {0x19D0, 0x19DA}, {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, + {0x1A60, 0x1A7C}, {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, + {0x1AA0, 0x1AAD}, {0x1AB0, 0x1ACE}, {0x1B00, 0x1B4C}, + {0x1B50, 0x1B7E}, {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, + {0x1C3B, 0x1C49}, {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, + {0x1CBD, 0x1CC7}, {0x1CD0, 0x1CFA}, {0x1D00, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, @@ -237,7 +238,7 @@ var neutral = table{ {0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064}, {0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080}, {0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8}, - {0x20AA, 0x20AB}, {0x20AD, 0x20BF}, {0x20D0, 0x20F0}, + {0x20AA, 0x20AB}, {0x20AD, 0x20C0}, {0x20D0, 0x20F0}, {0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108}, {0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120}, {0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152}, @@ -275,15 +276,15 @@ var neutral = table{ {0x2780, 0x2794}, {0x2798, 0x27AF}, {0x27B1, 0x27BE}, {0x27C0, 0x27E5}, {0x27EE, 0x2984}, {0x2987, 0x2B1A}, {0x2B1D, 0x2B4F}, {0x2B51, 0x2B54}, {0x2B5A, 0x2B73}, - {0x2B76, 0x2B95}, {0x2B97, 0x2C2E}, {0x2C30, 0x2C5E}, - {0x2C60, 0x2CF3}, {0x2CF9, 0x2D25}, {0x2D27, 0x2D27}, - {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, - {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, - {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, - {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, - {0x2DE0, 0x2E52}, {0x303F, 0x303F}, {0x4DC0, 0x4DFF}, - {0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, {0xA700, 0xA7BF}, - {0xA7C2, 0xA7CA}, {0xA7F5, 0xA82C}, {0xA830, 0xA839}, + {0x2B76, 0x2B95}, {0x2B97, 0x2CF3}, {0x2CF9, 0x2D25}, + {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, + {0x2D6F, 0x2D70}, {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, + {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, + {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, + {0x2DD8, 0x2DDE}, {0x2DE0, 0x2E5D}, {0x303F, 0x303F}, + {0x4DC0, 0x4DFF}, {0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, + {0xA700, 0xA7CA}, {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, + {0xA7D5, 0xA7D9}, {0xA7F2, 0xA82C}, {0xA830, 0xA839}, {0xA840, 0xA877}, {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, {0xA8E0, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD}, {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36}, @@ -294,8 +295,8 @@ var neutral = table{ {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36}, {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, - {0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F}, - {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBC2}, {0xFBD3, 0xFD8F}, + {0xFD92, 0xFDC7}, {0xFDCF, 0xFDCF}, {0xFDF0, 0xFDFF}, {0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, @@ -307,44 +308,48 @@ var neutral = table{ {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5}, {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, - {0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755}, - {0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808}, - {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C}, - {0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF}, - {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B}, - {0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7}, - {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06}, - {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, - {0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, {0x10A50, 0x10A58}, - {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6}, - {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72}, - {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, - {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, - {0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, {0x10E60, 0x10E7E}, - {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, {0x10EB0, 0x10EB1}, - {0x10F00, 0x10F27}, {0x10F30, 0x10F59}, {0x10FB0, 0x10FCB}, - {0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x1106F}, - {0x1107F, 0x110C1}, {0x110CD, 0x110CD}, {0x110D0, 0x110E8}, - {0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11147}, - {0x11150, 0x11176}, {0x11180, 0x111DF}, {0x111E1, 0x111F4}, - {0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286}, - {0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, - {0x1129F, 0x112A9}, {0x112B0, 0x112EA}, {0x112F0, 0x112F9}, - {0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, - {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, - {0x11335, 0x11339}, {0x1133B, 0x11344}, {0x11347, 0x11348}, - {0x1134B, 0x1134D}, {0x11350, 0x11350}, {0x11357, 0x11357}, - {0x1135D, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374}, - {0x11400, 0x1145B}, {0x1145D, 0x11461}, {0x11480, 0x114C7}, - {0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115DD}, - {0x11600, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C}, - {0x11680, 0x116B8}, {0x116C0, 0x116C9}, {0x11700, 0x1171A}, - {0x1171D, 0x1172B}, {0x11730, 0x1173F}, {0x11800, 0x1183B}, - {0x118A0, 0x118F2}, {0x118FF, 0x11906}, {0x11909, 0x11909}, - {0x1190C, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935}, - {0x11937, 0x11938}, {0x1193B, 0x11946}, {0x11950, 0x11959}, - {0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E4}, - {0x11A00, 0x11A47}, {0x11A50, 0x11AA2}, {0x11AC0, 0x11AF8}, + {0x1056F, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10600, 0x10736}, + {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, + {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, + {0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10857, 0x1089E}, + {0x108A7, 0x108AF}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, + {0x108FB, 0x1091B}, {0x1091F, 0x10939}, {0x1093F, 0x1093F}, + {0x10980, 0x109B7}, {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, + {0x10A05, 0x10A06}, {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, + {0x10A19, 0x10A35}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, + {0x10A50, 0x10A58}, {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, + {0x10AEB, 0x10AF6}, {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, + {0x10B58, 0x10B72}, {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, + {0x10BA9, 0x10BAF}, {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, + {0x10CC0, 0x10CF2}, {0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, + {0x10E60, 0x10E7E}, {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, + {0x10EB0, 0x10EB1}, {0x10EFD, 0x10F27}, {0x10F30, 0x10F59}, + {0x10F70, 0x10F89}, {0x10FB0, 0x10FCB}, {0x10FE0, 0x10FF6}, + {0x11000, 0x1104D}, {0x11052, 0x11075}, {0x1107F, 0x110C2}, + {0x110CD, 0x110CD}, {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, + {0x11100, 0x11134}, {0x11136, 0x11147}, {0x11150, 0x11176}, + {0x11180, 0x111DF}, {0x111E1, 0x111F4}, {0x11200, 0x11211}, + {0x11213, 0x11241}, {0x11280, 0x11286}, {0x11288, 0x11288}, + {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, + {0x112B0, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11303}, + {0x11305, 0x1130C}, {0x1130F, 0x11310}, {0x11313, 0x11328}, + {0x1132A, 0x11330}, {0x11332, 0x11333}, {0x11335, 0x11339}, + {0x1133B, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, + {0x11350, 0x11350}, {0x11357, 0x11357}, {0x1135D, 0x11363}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x1145B}, + {0x1145D, 0x11461}, {0x11480, 0x114C7}, {0x114D0, 0x114D9}, + {0x11580, 0x115B5}, {0x115B8, 0x115DD}, {0x11600, 0x11644}, + {0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B9}, + {0x116C0, 0x116C9}, {0x11700, 0x1171A}, {0x1171D, 0x1172B}, + {0x11730, 0x11746}, {0x11800, 0x1183B}, {0x118A0, 0x118F2}, + {0x118FF, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, + {0x1193B, 0x11946}, {0x11950, 0x11959}, {0x119A0, 0x119A7}, + {0x119AA, 0x119D7}, {0x119DA, 0x119E4}, {0x11A00, 0x11A47}, + {0x11A50, 0x11AA2}, {0x11AB0, 0x11AF8}, {0x11B00, 0x11B09}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45}, {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, @@ -352,30 +357,36 @@ var neutral = table{ {0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91}, {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF8}, + {0x11F00, 0x11F10}, {0x11F12, 0x11F3A}, {0x11F3E, 0x11F59}, {0x11FB0, 0x11FB0}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399}, {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543}, - {0x13000, 0x1342E}, {0x13430, 0x13438}, {0x14400, 0x14646}, + {0x12F90, 0x12FF2}, {0x13000, 0x13455}, {0x14400, 0x14646}, {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, - {0x16A6E, 0x16A6F}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5}, - {0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, - {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A}, - {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F}, - {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, - {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1D000, 0x1D0F5}, - {0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, {0x1D200, 0x1D245}, - {0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378}, - {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, - {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, - {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, - {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, - {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, - {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, - {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B}, - {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006}, - {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, - {0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D}, - {0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E2C0, 0x1E2F9}, - {0x1E2FF, 0x1E2FF}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6}, + {0x16A6E, 0x16ABE}, {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, + {0x16AF0, 0x16AF5}, {0x16B00, 0x16B45}, {0x16B50, 0x16B59}, + {0x16B5B, 0x16B61}, {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, + {0x16E40, 0x16E9A}, {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, + {0x16F8F, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, + {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, {0x1CF50, 0x1CFC3}, + {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D1EA}, + {0x1D200, 0x1D245}, {0x1D2C0, 0x1D2D3}, {0x1D2E0, 0x1D2F3}, + {0x1D300, 0x1D356}, {0x1D360, 0x1D378}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, + {0x1DAA1, 0x1DAAF}, {0x1DF00, 0x1DF1E}, {0x1DF25, 0x1DF2A}, + {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, + {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E030, 0x1E06D}, + {0x1E08F, 0x1E08F}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D}, + {0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E290, 0x1E2AE}, + {0x1E2C0, 0x1E2F9}, {0x1E2FF, 0x1E2FF}, {0x1E4D0, 0x1E4F9}, + {0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, + {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6}, {0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, {0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, @@ -400,8 +411,8 @@ var neutral = table{ {0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594}, {0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F}, {0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6D3, 0x1F6D4}, - {0x1F6E0, 0x1F6EA}, {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773}, - {0x1F780, 0x1F7D8}, {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, + {0x1F6E0, 0x1F6EA}, {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F776}, + {0x1F77B, 0x1F7D9}, {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0x1F8B0, 0x1F8B1}, {0x1F900, 0x1F90B}, {0x1F93B, 0x1F93B}, {0x1F946, 0x1F946}, {0x1FA00, 0x1FA53}, {0x1FA60, 0x1FA6D}, diff --git a/tools/vendor/github.com/moby/sys/mountinfo/mounted_linux.go b/tools/vendor/github.com/moby/sys/mountinfo/mounted_linux.go index e78e72619..58f13c269 100644 --- a/tools/vendor/github.com/moby/sys/mountinfo/mounted_linux.go +++ b/tools/vendor/github.com/moby/sys/mountinfo/mounted_linux.go @@ -51,7 +51,7 @@ func mountedByOpenat2(path string) (bool, error) { Resolve: unix.RESOLVE_NO_XDEV, }) _ = unix.Close(dirfd) - switch err { //nolint:errorlint // unix errors are bare + switch err { case nil: // definitely not a mount _ = unix.Close(fd) return false, nil diff --git a/tools/vendor/github.com/moby/sys/user/LICENSE b/tools/vendor/github.com/moby/sys/user/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/tools/vendor/github.com/moby/sys/user/LICENSE @@ -0,0 +1,202 @@ + + 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. diff --git a/tools/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go b/tools/vendor/github.com/moby/sys/user/lookup_unix.go similarity index 100% rename from tools/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go rename to tools/vendor/github.com/moby/sys/user/lookup_unix.go diff --git a/tools/vendor/github.com/opencontainers/runc/libcontainer/user/user.go b/tools/vendor/github.com/moby/sys/user/user.go similarity index 100% rename from tools/vendor/github.com/opencontainers/runc/libcontainer/user/user.go rename to tools/vendor/github.com/moby/sys/user/user.go diff --git a/tools/vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go b/tools/vendor/github.com/moby/sys/user/user_fuzzer.go similarity index 100% rename from tools/vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go rename to tools/vendor/github.com/moby/sys/user/user_fuzzer.go diff --git a/tools/vendor/github.com/opencontainers/image-spec/specs-go/version.go b/tools/vendor/github.com/opencontainers/image-spec/specs-go/version.go index 6d01f6e71..7069ae44d 100644 --- a/tools/vendor/github.com/opencontainers/image-spec/specs-go/version.go +++ b/tools/vendor/github.com/opencontainers/image-spec/specs-go/version.go @@ -25,7 +25,7 @@ const ( VersionPatch = 0 // VersionDev indicates development branch. Releases will be empty string. - VersionDev = "-rc.6" + VersionDev = "" ) // Version is the specification version that the package types support. diff --git a/tools/vendor/github.com/opencontainers/runc/NOTICE b/tools/vendor/github.com/opencontainers/runc/NOTICE deleted file mode 100644 index 5c97abce4..000000000 --- a/tools/vendor/github.com/opencontainers/runc/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -runc - -Copyright 2012-2015 Docker, Inc. - -This product includes software developed at Docker, Inc. (http://www.docker.com). - -The following is courtesy of our legal counsel: - - -Use and transfer of Docker may be subject to certain restrictions by the -United States and other governments. -It is your responsibility to ensure that your use and/or transfer does not -violate applicable laws. - -For more information, please see http://www.bis.doc.gov - -See also http://www.apache.org/dev/crypto.html and/or seek legal counsel. diff --git a/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go b/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go index 4e7717d53..d1236ba72 100644 --- a/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go +++ b/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go @@ -187,6 +187,10 @@ type Hook struct { type Hooks struct { // Prestart is Deprecated. Prestart is a list of hooks to be run before the container process is executed. // It is called in the Runtime Namespace + // + // Deprecated: use [Hooks.CreateRuntime], [Hooks.CreateContainer], and + // [Hooks.StartContainer] instead, which allow more granular hook control + // during the create and start phase. Prestart []Hook `json:"prestart,omitempty"` // CreateRuntime is a list of hooks to be run after the container has been created but before pivot_root or any equivalent operation has been called // It is called in the Runtime Namespace @@ -371,6 +375,12 @@ type LinuxMemory struct { // Total memory limit (memory + swap). Swap *int64 `json:"swap,omitempty"` // Kernel memory limit (in bytes). + // + // Deprecated: kernel-memory limits are not supported in cgroups v2, and + // were obsoleted in [kernel v5.4]. This field should no longer be used, + // as it may be ignored by runtimes. + // + // [kernel v5.4]: https://github.com/torvalds/linux/commit/0158115f702b0ba208ab0 Kernel *int64 `json:"kernel,omitempty"` // Kernel memory limit for tcp (in bytes) KernelTCP *int64 `json:"kernelTCP,omitempty"` diff --git a/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go b/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go index b3fca349c..503971e05 100644 --- a/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go +++ b/tools/vendor/github.com/opencontainers/runtime-spec/specs-go/version.go @@ -6,7 +6,7 @@ const ( // VersionMajor is for an API incompatible changes VersionMajor = 1 // VersionMinor is for functionality in a backwards-compatible manner - VersionMinor = 1 + VersionMinor = 2 // VersionPatch is for backwards-compatible bug fixes VersionPatch = 0 diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/internal/version/version.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/internal/version/version.go index ca351744c..aa3e52465 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/internal/version/version.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/internal/version/version.go @@ -28,5 +28,5 @@ var ( // and release process, this variable will be removed. // TODO: find a way to make this automated. For now manually update this before releases. - ImageVersion = "v1.35.0" + ImageVersion = "v1.36.1" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/api.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/api.go index 37a550014..4d1a145d9 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/api.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/api.go @@ -20,11 +20,10 @@ import ( "github.com/sirupsen/logrus" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util" @@ -142,7 +141,7 @@ func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { // Selected CRD version must match existing CRD versions. // nolint:staticcheck - if pluginutil.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { + if hasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", p.resource.API.CRDVersion) } @@ -165,3 +164,13 @@ func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { return nil } + +// hasDifferentCRDVersion returns true if any other CRD version is tracked in the project configuration. +func hasDifferentCRDVersion(config config.Config, crdVersion string) bool { + return hasDifferentAPIVersion(config.ListCRDVersions(), crdVersion) +} + +// go/v4 no longer supports v1beta1 option. Do we need to support it here? +func hasDifferentAPIVersion(versions []string, version string) bool { + return !(len(versions) == 0 || (len(versions) == 1 && versions[0] == version)) +} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/init.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/init.go index 235e63e44..f91c24a2a 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/init.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/init.go @@ -20,10 +20,10 @@ import ( "path/filepath" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds" sdkpluginutil "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util" @@ -108,8 +108,7 @@ func (p *initSubcommand) InjectConfig(c config.Config) error { } func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error { - - if err := addInitCustomizations(p.config.GetProjectName(), p.config.IsComponentConfig()); err != nil { + if err := addInitCustomizations(p.config.GetProjectName()); err != nil { return fmt.Errorf("error updating init manifests: %s", err) } @@ -152,41 +151,48 @@ func (p *initSubcommand) PostScaffold() error { } // addInitCustomizations will perform the required customizations for this plugin on the common base -func addInitCustomizations(projectName string, componentConfig bool) error { +func addInitCustomizations(projectName string) error { + roleFile := filepath.Join("config", "rbac", "role.yaml") + + // We have our own base role file, so we remove the default one + if err := os.Remove(roleFile); err != nil && !os.IsNotExist(err) { + return err + } + managerFile := filepath.Join("config", "manager", "manager.yaml") - managerProxyPatchFile := filepath.Join("config", "default", "manager_auth_proxy_patch.yaml") + managerMetricsPatch := filepath.Join("config", "default", "manager_metrics_patch.yaml") // todo: we ought to use afero instead. Replace this methods to insert/update // by https://github.com/kubernetes-sigs/kubebuilder/pull/2119 // Add leader election - if componentConfig { - err := util.InsertCode(managerFile, - "- /manager", - fmt.Sprintf("\n args:\n - --leader-election-id=%s", projectName)) - if err != nil { - return err - } - err = util.InsertCode(managerProxyPatchFile, - "memory: 64Mi", - fmt.Sprintf("\n - name: manager\n args:\n - \"--leader-election-id=%s\"", projectName)) - if err != nil { - return err - } - } else { - err := util.InsertCode(managerFile, - "--leader-elect", - fmt.Sprintf("\n - --leader-election-id=%s", projectName)) - if err != nil { - return err - } - err = util.InsertCode(managerProxyPatchFile, - "- \"--leader-elect\"", - fmt.Sprintf("\n - \"--leader-election-id=%s\"", projectName)) - if err != nil { - return err - } + err := util.InsertCode(managerFile, + "--leader-elect", + fmt.Sprintf("\n - --leader-election-id=%s", projectName)) + if err != nil { + return err + } + + // Enable the proper auth/metrics flags + err = util.ReplaceInFile(managerMetricsPatch, + `# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443`, `# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443 +# This patch adds the args to allow securing the metrics endpoint +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-secure +# This patch adds the args to allow RBAC-based authn/authz the metrics endpoint +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-require-rbac`) + if err != nil { + return err } // update default resource request and limits with bigger values @@ -208,7 +214,7 @@ func addInitCustomizations(projectName string, componentConfig bool) error { memory: 256Mi ` - err := util.ReplaceInFile(managerFile, resourcesLimitsFragment, resourcesLimitsAnsibleFragment) + err = util.ReplaceInFile(managerFile, resourcesLimitsFragment, resourcesLimitsAnsibleFragment) if err != nil { return err } @@ -226,29 +232,11 @@ func addInitCustomizations(projectName string, componentConfig bool) error { // replace the default ports because ansible has been using another one // todo: remove it when we be able to change the port for the default one // issue: https://github.com/operator-framework/ansible-operator-plugins/issues/4331 - err = util.ReplaceInFile(managerFile, "port: 8081", "port: 6789") + err = util.ReplaceInFile(managerFile, "8081", "6789") if err != nil { return err } - if componentConfig { - managerConfigFile := filepath.Join("config", "manager", "controller_manager_config.yaml") - err = util.ReplaceInFile(managerConfigFile, "8081", "6789") - if err != nil { - return err - } - // Remove the webhook option for the componentConfig since webhooks are not supported by ansible - err = util.ReplaceInFile(managerConfigFile, "webhook:\n port: 9443", "") - if err != nil { - return err - } - } else { - err = util.ReplaceInFile(managerProxyPatchFile, "8081", "6789") - if err != nil { - return err - } - } - // Remove the call to the command as manager. Helm/Ansible has not been exposing this entrypoint // todo: provide the manager entrypoint for helm/ansible and then remove it const command = `command: diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/plugin.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/plugin.go index 43de6cbf5..f712b2e53 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/plugin.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/plugin.go @@ -15,9 +15,9 @@ package ansible import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/api.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/api.go index 207b1c5f7..a3407640f 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/api.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/api.go @@ -18,10 +18,10 @@ limitations under the License. package scaffolds import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates" diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/init.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/init.go index 18b6c395a..c721483ca 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/init.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/init.go @@ -18,10 +18,10 @@ limitations under the License. package scaffolds import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - kustomizev2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + kustomizev2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" "github.com/operator-framework/ansible-operator-plugins/internal/version" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates" diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/crd.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/crd.go index 85f81da32..c83f8f77b 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/crd.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/crd.go @@ -19,7 +19,7 @@ import ( "path/filepath" "github.com/kr/text" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRD{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/kustomization.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/kustomization.go index 871c00e19..9c0ecebd1 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/kustomization.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/crd/kustomization.go @@ -21,7 +21,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var ( diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/rbac/role.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/rbac/role.go index 65ff46ed0..8dae8e449 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/rbac/role.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/rbac/role.go @@ -20,7 +20,7 @@ import ( "path/filepath" "text/template" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ManagerRole{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/debug_logs_patch.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/debug_logs_patch.go index 6db9b2605..30674a448 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/debug_logs_patch.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/debug_logs_patch.go @@ -17,7 +17,7 @@ package testing import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &DebugLogsPatch{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/kustomization.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/kustomization.go index 95bbd099d..56bc1f7b9 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/kustomization.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/kustomization.go @@ -17,7 +17,7 @@ package testing import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} @@ -50,10 +50,12 @@ namePrefix: osdk- #commonLabels: # someName: someValue -patchesStrategicMerge: -- manager_image.yaml -- debug_logs_patch.yaml -- ../default/manager_auth_proxy_patch.yaml +patches: +- path: manager_image.yaml +- path: debug_logs_patch.yaml +- path: ../default/manager_metrics_patch.yaml + target: + kind: Deployment apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/manager_image.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/manager_image.go index 59406516b..2f72494c8 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/manager_image.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/manager_image.go @@ -17,7 +17,7 @@ package testing import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ManagerImage{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/always_pull_patch.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/always_pull_patch.go index a84c7bdd3..3e3f1b533 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/always_pull_patch.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/always_pull_patch.go @@ -17,7 +17,7 @@ package pullpolicy import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &AlwaysPullPatch{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/ifnotpresent_pull_patch.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/ifnotpresent_pull_patch.go index 6cee22ab2..1d75af100 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/ifnotpresent_pull_patch.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/ifnotpresent_pull_patch.go @@ -17,7 +17,7 @@ package pullpolicy import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &IfNotPresentPullPatch{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/never_pull_patch.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/never_pull_patch.go index 197b66174..38623926e 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/never_pull_patch.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/config/testing/pullpolicy/never_pull_patch.go @@ -17,7 +17,7 @@ package pullpolicy import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &NeverPullPatch{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/dockerfile.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/dockerfile.go index a575bbc93..8268117fc 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/dockerfile.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/dockerfile.go @@ -17,7 +17,7 @@ package templates import ( "errors" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/gitignore.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/gitignore.go index 0d7290b58..c29aa8ab8 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/gitignore.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/gitignore.go @@ -18,7 +18,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &GitIgnore{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/makefile.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/makefile.go index 870c7beff..08b20e511 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/makefile.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/makefile.go @@ -20,7 +20,7 @@ package templates import ( "errors" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Makefile{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/converge.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/converge.go index fdc196198..4bff03e21 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/converge.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/converge.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Converge{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/create.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/create.go index 03f254dc8..d51ac7294 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/create.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/create.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Create{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/destroy.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/destroy.go index 472cf2176..c3b322ca8 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/destroy.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/destroy.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Destroy{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/kustomize.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/kustomize.go index 24f9c4f56..ca126e165 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/kustomize.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/kustomize.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomize{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/molecule.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/molecule.go index e35353d9f..dfdbbc913 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/molecule.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/molecule.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Molecule{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/prepare.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/prepare.go index 32ce9dea3..1b46bd000 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/prepare.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/prepare.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Prepare{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/tasks_test_resource.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/tasks_test_resource.go index bfb134618..102f6dbfc 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/tasks_test_resource.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/tasks_test_resource.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ResourceTest{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/verify.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/verify.go index 07ce387c4..c8b34c098 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/verify.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mdefault/verify.go @@ -17,7 +17,7 @@ package mdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Verify{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/converge.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/converge.go index 3eb39800c..f0130b56c 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/converge.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/converge.go @@ -17,7 +17,7 @@ package mkind import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Converge{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/create.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/create.go index 56fd8ba1f..7e4861b36 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/create.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/create.go @@ -17,7 +17,7 @@ package mkind import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Create{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/destroy.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/destroy.go index 086a107b0..91f1d7faf 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/destroy.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/destroy.go @@ -17,7 +17,7 @@ package mkind import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Destroy{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/molecule.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/molecule.go index d0e6c9df9..7ae11afd0 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/molecule.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/molecule/mkind/molecule.go @@ -17,7 +17,7 @@ package mkind import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Molecule{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/placeholder.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/placeholder.go index 20dc757e4..2f6527952 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/placeholder.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/placeholder.go @@ -17,7 +17,7 @@ package playbooks import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Placeholder{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/playbook.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/playbook.go index 3e68b7df0..4c2f77e3c 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/playbook.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks/playbook.go @@ -17,7 +17,7 @@ package playbooks import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Playbook{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/requirements.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/requirements.go index 6e0937625..71829dc0e 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/requirements.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/requirements.go @@ -15,7 +15,7 @@ package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &RequirementsYml{} @@ -38,9 +38,9 @@ collections: - name: operator_sdk.util version: "0.5.0" - name: kubernetes.core - version: "2.4.0" + version: "3.2.0" - name: cloud.common - version: "2.1.1" + version: "3.0.0" - name: community.docker - version: "3.10.3" + version: "3.12.1" ` diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/defaults_main.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/defaults_main.go index dd25256e3..ab2083ea4 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/defaults_main.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/defaults_main.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/files_dir.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/files_dir.go index f77124beb..ea19525b8 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/files_dir.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/files_dir.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/handlers_main.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/handlers_main.go index 17f7484ee..fcb577dbc 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/handlers_main.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/handlers_main.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/meta_main.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/meta_main.go index 0a90ea5ea..a34e07193 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/meta_main.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/meta_main.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/placeholder.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/placeholder.go index 152ffcb41..2019e2371 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/placeholder.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/placeholder.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Placeholder{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/readme.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/readme.go index 1d6d90375..55e7419dd 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/readme.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/readme.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/tasks_main.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/tasks_main.go index 244a872e2..e6a22e865 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/tasks_main.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/tasks_main.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/templates_dir.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/templates_dir.go index 4ca72186f..5c6d3b051 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/templates_dir.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/templates_dir.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/vars_main.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/vars_main.go index 2d2902f45..e63f5d715 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/vars_main.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles/vars_main.go @@ -17,7 +17,7 @@ package roles import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/constants" ) diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/watches.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/watches.go index 4fbe188b7..b9322ecdc 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/watches.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/watches.go @@ -19,7 +19,7 @@ import ( "fmt" "text/template" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Watches{} diff --git a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util/cleanup.go b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util/cleanup.go index 69a963182..65f890dd2 100644 --- a/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util/cleanup.go +++ b/tools/vendor/github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util/cleanup.go @@ -21,14 +21,12 @@ import ( "os" "path/filepath" - kbutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - log "github.com/sirupsen/logrus" + kbutil "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" ) // RemoveKustomizeCRDManifests removes items in config/crd relating to CRD conversion webhooks. func RemoveKustomizeCRDManifests() error { - pathsToRemove := []string{ filepath.Join("config", "crd", "kustomizeconfig.yaml"), } @@ -60,7 +58,6 @@ func RemoveKustomizeCRDManifests() error { // UpdateKustomizationsInit updates certain parts of or removes entire kustomization.yaml files // that are either not used by certain Init plugins or are created by preceding Init plugins. func UpdateKustomizationsInit() error { - defaultKFile := filepath.Join("config", "default", "kustomization.yaml") if err := kbutil.ReplaceInFile(defaultKFile, ` @@ -192,7 +189,6 @@ func UpdateKustomizationsInit() error { // UpdateKustomizationsCreateAPI updates certain parts of or removes entire kustomization.yaml files // that are either not used by certain CreateAPI plugins or are created by preceding CreateAPI plugins. func UpdateKustomizationsCreateAPI() error { - crdKFile := filepath.Join("config", "crd", "kustomization.yaml") if crdKBytes, err := os.ReadFile(crdKFile); err != nil && !errors.Is(err, os.ErrNotExist) { log.Debugf("Error reading kustomization for substitution: %v", err) diff --git a/tools/vendor/github.com/operator-framework/operator-registry/alpha/action/render.go b/tools/vendor/github.com/operator-framework/operator-registry/alpha/action/render.go index 5dbb980cf..be63aab53 100644 --- a/tools/vendor/github.com/operator-framework/operator-registry/alpha/action/render.go +++ b/tools/vendor/github.com/operator-framework/operator-registry/alpha/action/render.go @@ -6,7 +6,6 @@ import ( "encoding/json" "errors" "fmt" - "io" "os" "path/filepath" "sort" @@ -17,7 +16,6 @@ import ( "github.com/h2non/filetype" "github.com/h2non/filetype/matchers" "github.com/operator-framework/api/pkg/operators/v1alpha1" - "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/util/sets" "github.com/operator-framework/operator-registry/alpha/declcfg" @@ -26,6 +24,7 @@ import ( "github.com/operator-framework/operator-registry/pkg/image" "github.com/operator-framework/operator-registry/pkg/image/containerdregistry" "github.com/operator-framework/operator-registry/pkg/lib/bundle" + "github.com/operator-framework/operator-registry/pkg/lib/log" "github.com/operator-framework/operator-registry/pkg/registry" "github.com/operator-framework/operator-registry/pkg/sqlite" ) @@ -61,12 +60,6 @@ type Render struct { skipSqliteDeprecationLog bool } -func nullLogger() *logrus.Entry { - logger := logrus.New() - logger.SetOutput(io.Discard) - return logrus.NewEntry(logger) -} - func (r Render) Run(ctx context.Context) (*declcfg.DeclarativeConfig, error) { if r.skipSqliteDeprecationLog { // exhaust once with a no-op function. @@ -119,7 +112,7 @@ func (r Render) createRegistry() (*containerdregistry.Registry, error) { // The containerd registry impl is somewhat verbose, even on the happy path, // so discard all logger logs. Any important failures will be returned from // registry methods and eventually logged as fatal errors. - containerdregistry.WithLog(nullLogger()), + containerdregistry.WithLog(log.Null()), ) if err != nil { return nil, err diff --git a/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go b/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go index 64de27548..2657efb16 100644 --- a/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go +++ b/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go @@ -5,6 +5,7 @@ import ( "github.com/blang/semver/v4" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation" "github.com/operator-framework/operator-registry/alpha/model" "github.com/operator-framework/operator-registry/alpha/property" @@ -22,6 +23,10 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) { return nil, fmt.Errorf("duplicate package %q", p.Name) } + if errs := validation.IsDNS1123Label(p.Name); len(errs) > 0 { + return nil, fmt.Errorf("invalid package name %q: %v", p.Name, errs) + } + mpkg := &model.Package{ Name: p.Name, Description: p.Description, diff --git a/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/load.go b/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/load.go index a493b2204..8717299a6 100644 --- a/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/load.go +++ b/tools/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/load.go @@ -11,11 +11,12 @@ import ( "sync" "github.com/joelanford/ignore" - "github.com/operator-framework/api/pkg/operators" "golang.org/x/sync/errgroup" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/yaml" + "github.com/operator-framework/api/pkg/operators" + "github.com/operator-framework/operator-registry/alpha/property" ) @@ -25,22 +26,42 @@ const ( type WalkMetasFSFunc func(path string, meta *Meta, err error) error -func WalkMetasFS(root fs.FS, walkFn WalkMetasFSFunc) error { - return walkFiles(root, func(root fs.FS, path string, err error) error { - if err != nil { - return walkFn(path, nil, err) - } +// WalkMetasFS walks the filesystem rooted at root and calls walkFn for each individual meta object found in the root. +// By default, WalkMetasFS is not thread-safe because it invokes walkFn concurrently. In order to make it thread-safe, +// use the WithConcurrency(1) to avoid concurrent invocations of walkFn. +func WalkMetasFS(ctx context.Context, root fs.FS, walkFn WalkMetasFSFunc, opts ...LoadOption) error { + if root == nil { + return fmt.Errorf("no declarative config filesystem provided") + } - f, err := root.Open(path) - if err != nil { - return walkFn(path, nil, err) - } - defer f.Close() + options := LoadOptions{ + concurrency: runtime.NumCPU(), + } + for _, opt := range opts { + opt(&options) + } - return WalkMetasReader(f, func(meta *Meta, err error) error { - return walkFn(path, meta, err) - }) + pathChan := make(chan string, options.concurrency) + + // Create an errgroup to manage goroutines. The context is closed when any + // goroutine returns an error. Goroutines should check the context + // to see if they should return early (in the case of another goroutine + // returning an error). + eg, ctx := errgroup.WithContext(ctx) + + // Walk the FS and send paths to a channel for parsing. + eg.Go(func() error { + return sendPaths(ctx, root, pathChan) }) + + // Parse paths concurrently. The waitgroup ensures that all paths are parsed + // before the cfgChan is closed. + for i := 0; i < options.concurrency; i++ { + eg.Go(func() error { + return parseMetaPaths(ctx, root, pathChan, walkFn, options) + }) + } + return eg.Wait() } type WalkMetasReaderFunc func(meta *Meta, err error) error @@ -126,59 +147,16 @@ func WithConcurrency(concurrency int) LoadOption { // If LoadFS encounters an error loading or parsing any file, the error will be // immediately returned. func LoadFS(ctx context.Context, root fs.FS, opts ...LoadOption) (*DeclarativeConfig, error) { - if root == nil { - return nil, fmt.Errorf("no declarative config filesystem provided") - } - - options := LoadOptions{ - concurrency: runtime.NumCPU(), - } - for _, opt := range opts { - opt(&options) - } - - var ( - fcfg = &DeclarativeConfig{} - pathChan = make(chan string, options.concurrency) - cfgChan = make(chan *DeclarativeConfig, options.concurrency) - ) - - // Create an errgroup to manage goroutines. The context is closed when any - // goroutine returns an error. Goroutines should check the context - // to see if they should return early (in the case of another goroutine - // returning an error). - eg, ctx := errgroup.WithContext(ctx) - - // Walk the FS and send paths to a channel for parsing. - eg.Go(func() error { - return sendPaths(ctx, root, pathChan) - }) - - // Parse paths concurrently. The waitgroup ensures that all paths are parsed - // before the cfgChan is closed. - var wg sync.WaitGroup - for i := 0; i < options.concurrency; i++ { - wg.Add(1) - eg.Go(func() error { - defer wg.Done() - return parsePaths(ctx, root, pathChan, cfgChan) - }) - } - - // Merge parsed configs into a single config. - eg.Go(func() error { - return mergeCfgs(ctx, cfgChan, fcfg) - }) - - // Wait for all path parsing goroutines to finish before closing cfgChan. - wg.Wait() - close(cfgChan) - - // Wait for all goroutines to finish. - if err := eg.Wait(); err != nil { + builder := fbcBuilder{} + if err := WalkMetasFS(ctx, root, func(path string, meta *Meta, err error) error { + if err != nil { + return err + } + return builder.addMeta(meta) + }, opts...); err != nil { return nil, err } - return fcfg, nil + return &builder.cfg, nil } func sendPaths(ctx context.Context, root fs.FS, pathChan chan<- string) error { @@ -196,7 +174,7 @@ func sendPaths(ctx context.Context, root fs.FS, pathChan chan<- string) error { }) } -func parsePaths(ctx context.Context, root fs.FS, pathChan <-chan string, cfgChan chan<- *DeclarativeConfig) error { +func parseMetaPaths(ctx context.Context, root fs.FS, pathChan <-chan string, walkFn WalkMetasFSFunc, options LoadOptions) error { for { select { case <-ctx.Done(): // don't block on receiving from pathChan @@ -205,51 +183,35 @@ func parsePaths(ctx context.Context, root fs.FS, pathChan <-chan string, cfgChan if !ok { return nil } - cfg, err := LoadFile(root, path) + file, err := root.Open(path) if err != nil { return err } - select { - case cfgChan <- cfg: - case <-ctx.Done(): // don't block on sending to cfgChan - return ctx.Err() + if err := WalkMetasReader(file, func(meta *Meta, err error) error { + return walkFn(path, meta, err) + }); err != nil { + return err } } } } -func mergeCfgs(ctx context.Context, cfgChan <-chan *DeclarativeConfig, fcfg *DeclarativeConfig) error { - for { - select { - case <-ctx.Done(): // don't block on receiving from cfgChan - return ctx.Err() - case cfg, ok := <-cfgChan: - if !ok { - return nil - } - fcfg.Merge(cfg) +func readBundleObjects(b *Bundle) error { + var obj property.BundleObject + for i, props := range b.Properties { + if props.Type != property.TypeBundleObject { + continue } - } -} - -func readBundleObjects(bundles []Bundle) error { - for bi, b := range bundles { - var obj property.BundleObject - for i, props := range b.Properties { - if props.Type != property.TypeBundleObject { - continue - } - if err := json.Unmarshal(props.Value, &obj); err != nil { - return fmt.Errorf("package %q, bundle %q: parse property at index %d as bundle object: %v", b.Package, b.Name, i, err) - } - objJson, err := yaml.ToJSON(obj.Data) - if err != nil { - return fmt.Errorf("package %q, bundle %q: convert bundle object property at index %d to JSON: %v", b.Package, b.Name, i, err) - } - bundles[bi].Objects = append(bundles[bi].Objects, string(objJson)) + if err := json.Unmarshal(props.Value, &obj); err != nil { + return fmt.Errorf("package %q, bundle %q: parse property at index %d as bundle object: %v", b.Package, b.Name, i, err) } - bundles[bi].CsvJSON = extractCSV(bundles[bi].Objects) + objJson, err := yaml.ToJSON(obj.Data) + if err != nil { + return fmt.Errorf("package %q, bundle %q: convert bundle object property at index %d to JSON: %v", b.Package, b.Name, i, err) + } + b.Objects = append(b.Objects, string(objJson)) } + b.CsvJSON = extractCSV(b.Objects) return nil } @@ -268,52 +230,16 @@ func extractCSV(objs []string) string { // LoadReader reads yaml or json from the passed in io.Reader and unmarshals it into a DeclarativeConfig struct. func LoadReader(r io.Reader) (*DeclarativeConfig, error) { - cfg := &DeclarativeConfig{} - - if err := WalkMetasReader(r, func(in *Meta, err error) error { + builder := fbcBuilder{} + if err := WalkMetasReader(r, func(meta *Meta, err error) error { if err != nil { return err } - switch in.Schema { - case SchemaPackage: - var p Package - if err := json.Unmarshal(in.Blob, &p); err != nil { - return fmt.Errorf("parse package: %v", err) - } - cfg.Packages = append(cfg.Packages, p) - case SchemaChannel: - var c Channel - if err := json.Unmarshal(in.Blob, &c); err != nil { - return fmt.Errorf("parse channel: %v", err) - } - cfg.Channels = append(cfg.Channels, c) - case SchemaBundle: - var b Bundle - if err := json.Unmarshal(in.Blob, &b); err != nil { - return fmt.Errorf("parse bundle: %v", err) - } - cfg.Bundles = append(cfg.Bundles, b) - case SchemaDeprecation: - var d Deprecation - if err := json.Unmarshal(in.Blob, &d); err != nil { - return fmt.Errorf("parse deprecation: %w", err) - } - cfg.Deprecations = append(cfg.Deprecations, d) - case "": - return fmt.Errorf("object '%s' is missing root schema field", string(in.Blob)) - default: - cfg.Others = append(cfg.Others, *in) - } - return nil + return builder.addMeta(meta) }); err != nil { return nil, err } - - if err := readBundleObjects(cfg.Bundles); err != nil { - return nil, fmt.Errorf("read bundle objects: %v", err) - } - - return cfg, nil + return &builder.cfg, nil } // LoadFile will unmarshall declarative config components from a single filename provided in 'path' @@ -332,3 +258,60 @@ func LoadFile(root fs.FS, path string) (*DeclarativeConfig, error) { return cfg, nil } + +type fbcBuilder struct { + cfg DeclarativeConfig + + packagesMu sync.Mutex + channelsMu sync.Mutex + bundlesMu sync.Mutex + deprecationsMu sync.Mutex + othersMu sync.Mutex +} + +func (c *fbcBuilder) addMeta(in *Meta) error { + switch in.Schema { + case SchemaPackage: + var p Package + if err := json.Unmarshal(in.Blob, &p); err != nil { + return fmt.Errorf("parse package: %v", err) + } + c.packagesMu.Lock() + c.cfg.Packages = append(c.cfg.Packages, p) + c.packagesMu.Unlock() + case SchemaChannel: + var ch Channel + if err := json.Unmarshal(in.Blob, &ch); err != nil { + return fmt.Errorf("parse channel: %v", err) + } + c.channelsMu.Lock() + c.cfg.Channels = append(c.cfg.Channels, ch) + c.channelsMu.Unlock() + case SchemaBundle: + var b Bundle + if err := json.Unmarshal(in.Blob, &b); err != nil { + return fmt.Errorf("parse bundle: %v", err) + } + if err := readBundleObjects(&b); err != nil { + return fmt.Errorf("read bundle objects: %v", err) + } + c.bundlesMu.Lock() + c.cfg.Bundles = append(c.cfg.Bundles, b) + c.bundlesMu.Unlock() + case SchemaDeprecation: + var d Deprecation + if err := json.Unmarshal(in.Blob, &d); err != nil { + return fmt.Errorf("parse deprecation: %w", err) + } + c.deprecationsMu.Lock() + c.cfg.Deprecations = append(c.cfg.Deprecations, d) + c.deprecationsMu.Unlock() + case "": + return fmt.Errorf("object '%s' is missing root schema field", string(in.Blob)) + default: + c.othersMu.Lock() + c.cfg.Others = append(c.cfg.Others, *in) + c.othersMu.Unlock() + } + return nil +} diff --git a/tools/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go b/tools/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go index ff6c15431..6869b2e67 100644 --- a/tools/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go +++ b/tools/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go @@ -106,6 +106,7 @@ const ( TypeGVKRequired = "olm.gvk.required" TypeBundleObject = "olm.bundle.object" TypeCSVMetadata = "olm.csv.metadata" + TypeConstraint = "olm.constraint" TypeChannel = "olm.channel" ) diff --git a/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/null.go b/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/null.go new file mode 100644 index 000000000..9b7886c0c --- /dev/null +++ b/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/null.go @@ -0,0 +1,13 @@ +package log + +import ( + "io" + + "github.com/sirupsen/logrus" +) + +func Null() *logrus.Entry { + l := logrus.New() + l.SetOutput(io.Discard) + return logrus.NewEntry(l) +} diff --git a/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/writerhook.go b/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/writerhook.go new file mode 100644 index 000000000..a67dc675f --- /dev/null +++ b/tools/vendor/github.com/operator-framework/operator-registry/pkg/lib/log/writerhook.go @@ -0,0 +1,76 @@ +package log + +import ( + "io" + "os" + + "github.com/sirupsen/logrus" +) + +// Taken from https://github.com/sirupsen/logrus/issues/678 +// Used to split log level output until this is implemented internally by logrus + +// WriterHook is a hook that writes logs of specified LogLevels to specified Writer +type WriterHook struct { + Writer io.Writer + LogLevels []logrus.Level +} + +// Fire will be called when some logging function is called with current hook +// It will format log entry to string and write it to appropriate writer +func (hook *WriterHook) Fire(entry *logrus.Entry) error { + line, err := entry.String() + if err != nil { + return err + } + _, err = hook.Writer.Write([]byte(line)) + return err +} + +// Levels define on which log levels this hook would trigger +func (hook *WriterHook) Levels() []logrus.Level { + return hook.LogLevels +} + +// AddHooks adds hooks to send logs to different destinations depending on level +func AddHooks(hooks ...*WriterHook) { + // Send all logs to nowhere by default + logrus.SetOutput(io.Discard) + + for _, hook := range hooks { + logrus.AddHook(hook) + } +} + +func AddDefaultWriterHooks(terminationLogPath string) error { + terminationLogFile, err := os.OpenFile(terminationLogPath, os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + return err + } + AddHooks( + &WriterHook{ + Writer: terminationLogFile, + LogLevels: []logrus.Level{ + logrus.PanicLevel, + logrus.FatalLevel, + }, + }, + &WriterHook{ + Writer: os.Stderr, + LogLevels: []logrus.Level{ + logrus.PanicLevel, + logrus.FatalLevel, + logrus.ErrorLevel, + logrus.WarnLevel, + }, + }, + &WriterHook{ + Writer: os.Stdout, + LogLevels: []logrus.Level{ + logrus.InfoLevel, + logrus.DebugLevel, + }, + }) + + return nil +} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/bindata/olm/manifests.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/bindata/olm/manifests.go index 9ef72900f..24993fee2 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/bindata/olm/manifests.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/bindata/olm/manifests.go @@ -1,11 +1,11 @@ // Code generated for package olm by go-bindata DO NOT EDIT. (@generated) // sources: -// olm-manifests/0.25.0-crds.yaml -// olm-manifests/0.25.0-olm.yaml // olm-manifests/0.26.0-crds.yaml // olm-manifests/0.26.0-olm.yaml // olm-manifests/0.27.0-crds.yaml // olm-manifests/0.27.0-olm.yaml +// olm-manifests/0.28.0-crds.yaml +// olm-manifests/0.28.0-olm.yaml package olm import ( @@ -82,122 +82,122 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _olmManifests0250CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfb\x77\xe3\xb6\xb5\x30\x80\xfe\xde\xbf\x02\xcb\xcd\xb9\xb6\x5b\x49\x9e\x49\xda\x7c\xad\xbf\xb6\x59\xae\xed\x24\xbe\x99\xf1\x68\xd9\x4e\x7a\xfb\x65\x72\x1a\x88\xdc\x92\x50\x93\x00\x0b\x80\xb2\x95\x93\xf3\xbf\xdf\x85\x8d\x07\x49\xbd\x25\xd2\x33\xb2\x87\xe8\x5a\xcd\x58\x24\x41\x70\x63\x63\xbf\x1f\xdd\x6e\xf7\x37\x34\x63\x3f\x80\x54\x4c\xf0\x53\x42\x33\x06\x8f\x1a\xb8\xf9\x4b\xf5\xee\xff\xa4\x7a\x4c\x9c\x4c\x5e\xff\xe6\x9e\xf1\xf8\x94\x9c\xe7\x4a\x8b\xf4\x06\x94\xc8\x65\x04\x17\x30\x64\x9c\x69\x26\xf8\x6f\x52\xd0\x34\xa6\x9a\x9e\xfe\x86\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\x64\x77\x04\xbc\x77\x9f\x0f\x60\x90\xb3\x24\x06\x89\x93\xfb\x57\x4f\x5e\xf5\xfe\xdc\x7b\xf5\x1b\x42\x22\x09\xf8\xf8\x1d\x4b\x41\x69\x9a\x66\xa7\x84\xe7\x49\xf2\x1b\x42\x38\x4d\xe1\x94\x44\x54\xd3\x44\x8c\xec\x22\x54\x4f\x64\x20\xa9\x16\x52\xf5\x22\x21\x41\x98\xff\xa4\xbf\x51\x19\x44\xe6\xed\x23\x29\xf2\xec\x94\x2c\xbc\xc7\xce\xe7\x17\x49\x35\x8c\x84\x64\xfe\x6f\x42\xba\x44\x24\x29\xfe\xdb\x7d\xbc\x7d\xed\x2d\xbe\x16\x7f\x4f\x98\xd2\xdf\xcd\x5f\x7b\xc3\x94\xc6\xeb\x59\x92\x4b\x9a\xcc\x2e\x18\x2f\xa9\xb1\x90\xfa\xba\x78\xbd\x79\x5d\x44\xb5\x92\x91\xbd\xcc\xf8\x28\x4f\xa8\x9c\x79\xf6\x37\x84\xa8\x48\x64\x70\x4a\xf0\xd1\x8c\x46\x10\xff\x86\x10\x07\x42\x37\x55\x97\xd0\x38\xc6\x6d\xa1\x49\x5f\x32\xae\x41\x9e\x8b\x24\x4f\x79\x78\x95\xb9\x27\x06\x15\x49\x96\x69\x04\xfd\xdd\x18\x48\x26\x41\xeb\x29\x82\x84\x88\x21\xd1\x63\xf0\xef\x0e\x4f\x11\xf2\x6f\x25\x78\x9f\xea\xf1\x29\xe9\x19\x08\xf7\x62\xa6\xb2\x84\x4e\xcd\x6a\x4a\x77\xd9\x6d\xba\xb0\xd7\x4a\xbf\xeb\xa9\x59\xba\xd2\x92\xf1\xd1\xaa\xa5\x98\xfb\x36\x5f\x83\x05\xcd\xdd\x34\x9b\x5f\xc2\xcc\x8f\x9b\xbe\x3f\xcb\x07\x09\x53\x63\x90\x9b\x2f\x22\x3c\x32\xb7\x86\xfe\x82\x2b\x4b\x16\x52\x9a\xd4\x1f\xa8\xde\xdc\x61\x98\x7b\xc1\xd9\x68\xfe\x1b\x63\xaa\xfd\x8f\xf6\xa6\xc9\x6b\x9a\x64\x63\xfa\xda\xfd\xa8\xa2\x31\xa4\xb4\xc0\x07\x91\x01\x3f\xeb\x5f\xfd\xf0\xc5\xed\xcc\x05\x52\x85\x4e\x05\xcf\x09\x53\x84\x12\x09\x99\x50\x4c\x0b\x39\x35\xd0\x3a\xbf\xfd\x41\x75\xc8\xf9\xcd\x85\xea\x10\xca\xe3\x70\xf0\x48\x46\xa3\x7b\x3a\x02\xd5\x9b\x5b\xab\x18\xfc\x1b\x22\x5d\xfa\x59\xc2\x7f\x72\x26\x21\x2e\xaf\xc2\x80\xc7\xc3\x64\xe6\x67\x03\xff\xd2\x4f\x99\x34\xef\xd4\xa5\x83\x6c\x47\x89\xca\x55\x7e\x9f\xf9\xc2\x43\x03\x06\x7b\x1f\x89\x0d\x81\x03\x85\x28\xe0\xce\x18\xc4\x0e\x76\x16\x35\x98\x32\xdf\x2f\x41\x01\xb7\x24\xcf\xfc\x4c\xb9\xfb\xa6\x1e\xb9\x05\x69\x1e\x34\xc7\x3d\x4f\x62\x43\x09\x27\x20\x35\x91\x10\x89\x11\x67\xbf\x84\xd9\x14\xd1\x02\x5f\x93\x50\x0d\x4a\x13\x3c\xb5\x9c\x26\x64\x42\x93\x1c\x2c\x28\x53\x3a\x25\x12\xcc\xbc\x24\xe7\xa5\x19\xf0\x16\xd5\x23\x6f\x85\x04\xc2\xf8\x50\x9c\x92\xb1\xd6\x99\x3a\x3d\x39\x19\x31\xed\x69\x78\x24\xd2\x34\xe7\x4c\x4f\x4f\x90\x1c\xb3\x41\x6e\xc8\xe1\x49\x0c\x13\x48\x4e\x14\x1b\x75\xa9\x8c\xc6\x4c\x43\xa4\x73\x09\x27\x34\x63\x5d\x5c\x2c\x47\x3a\xde\x4b\xe3\xdf\x4a\x47\xf5\xd5\xe1\x0c\xf8\x16\x22\x33\xf1\x64\x73\x25\xac\x0d\xf1\xb4\x58\x64\x1f\xb7\xdf\x52\x80\xd4\xfc\x64\xa0\x72\x73\x79\x7b\x47\xfc\x02\x2c\xd8\x2d\x84\x8b\x5b\x55\x01\x6c\x03\x28\xc6\x87\x20\xed\x9d\x43\x29\x52\x9c\x05\x78\x9c\x09\xc6\xb5\x3d\xd2\x09\x03\xae\x89\xca\x07\x29\xd3\x0a\x71\x0e\x94\x36\xfb\xd0\x23\xe7\xc8\xc2\xc8\x00\x48\x9e\x99\x93\x14\xf7\xc8\x15\x27\xe7\x34\x85\xe4\x9c\x2a\x78\x72\x50\x1b\x88\xaa\xae\x01\xdf\xe6\xc0\x2e\x73\xe0\xf9\x07\xe6\xce\x18\x21\x9e\x43\x6e\x74\xf3\xb2\x43\x49\xec\x09\x5c\x44\x81\xc9\x8a\xb3\x68\x06\x8d\x63\x09\x6a\xc1\x85\xb9\x03\x69\x6f\xb4\x78\x32\x16\xca\xec\x1f\xd5\xe4\xdd\x9b\xb7\x24\xa2\x9c\xe4\x0a\xcc\xe1\x89\x04\xe7\x06\x21\xb4\x20\xd4\xf0\xb2\x2e\x3c\x32\x85\x08\x24\x61\xc4\x94\x96\xd3\x1e\xf9\x5a\xc8\x94\xea\x53\xf2\x17\xff\x53\x17\xa7\x13\x92\xb0\xec\x6f\xa7\x7f\xc9\x84\xd4\x7f\x23\xef\x78\x32\x35\x93\xc6\xe4\x61\x0c\x9c\xdc\x86\x6f\x23\x7f\x2d\xfd\xf1\x8d\xcc\xa2\x1e\xb9\x1a\x71\x21\xfd\x9d\x06\xab\xae\x52\x3a\x02\x32\x64\x90\x20\x5e\x2b\xd0\xbd\xd9\x1d\x5c\xb9\x8b\xc4\x8a\x4b\x43\x36\x7a\x4b\xb3\xb5\xa0\x39\xf7\x77\x9a\x77\x99\xd7\x97\x99\x77\x71\x51\x0b\x44\x65\xf3\x49\xe6\x9f\x34\xba\x27\xd4\xbd\x25\xa5\x59\x57\xe1\xb1\x29\x81\x69\x33\x08\x9c\xfb\x09\x0c\xfc\x8a\x9f\xaf\x1c\xe5\xea\x6d\xfb\xd9\xe5\x2f\xdb\xfa\xd9\x42\x0c\x59\x0b\xb4\xb7\x8b\xb8\xc8\x06\xef\x18\xc9\x2c\xea\x8b\xd8\x7e\xf6\xda\xb7\x7c\x53\xbe\x9b\xc0\x63\x26\x14\x28\x12\xb3\xe1\x10\xa4\xa1\x3b\x62\x02\x52\xb2\x18\x14\x19\x0a\x89\xfb\x95\x89\x18\xcf\x64\xd8\xbf\x0a\xab\xed\x8b\x78\xd3\x8d\x31\xaf\x46\x86\x61\x91\xd1\xa1\xe1\xd2\xcf\x5d\x78\xda\xc9\x9a\xc3\x6b\x06\x17\x31\xdc\x42\x02\x91\x16\x72\xf1\x1d\x33\x30\xb9\x2e\x3d\xe0\xa8\xbe\xff\xeb\x61\xcc\xa2\x31\x49\x73\x85\x54\x57\xcb\x1c\x2a\x70\xd1\x82\x0c\x99\x26\x82\x13\x8a\xaf\x35\xb4\x7e\xfe\xc9\x94\xea\x68\xec\xee\x38\x54\x24\xa1\x03\x48\xd4\xec\x3c\x03\x40\x96\x1b\xe7\x09\xc4\x66\x42\xa4\x25\x38\xe7\x92\x4f\x58\x03\x25\x62\x49\x59\x90\xb7\x57\xc3\x8c\xac\xc3\x32\x0b\x78\x26\x24\xd3\xd3\xf3\x84\x2a\xb5\x0c\xa7\xe7\xa0\x7b\x35\x44\xf4\x61\x43\x06\x71\x87\x30\x1e\x33\xa3\xd2\x28\xff\xed\x87\x2a\xcc\xdb\x33\xf7\x1a\x06\x57\xba\xdf\x43\xc8\xdf\x43\x1e\x58\x92\x18\x60\xc5\x30\xa4\x79\x82\x44\xf2\x17\x90\x82\x30\xc4\x4e\x89\x78\xc5\x85\xbf\xbc\x1a\x78\x2b\xbe\x55\x41\x94\xe3\xb7\x0a\xae\xe1\x51\x2f\x3f\x5d\x73\xdf\x7b\x70\xbb\xe8\x51\x64\x09\x03\x20\x82\x23\x21\xfc\x39\x81\x11\x8d\xa6\x3f\x9b\xe5\xff\x2c\xc1\x2c\x24\xd2\x10\xff\xdc\x43\x39\xbf\x72\xc4\x0c\x80\x04\x52\x6d\x60\xe6\x0b\x09\xe3\x66\xcb\xcd\x61\x63\x7a\x8c\x00\x92\x6c\x34\xd6\xe6\x2e\xa7\x78\x54\x17\x80\x67\x2e\x5c\x34\xac\x9f\x32\x0e\xf2\xc7\xdf\xfd\x34\x77\xa7\x15\xd9\x90\x57\x25\x89\x78\x28\xe3\xa7\xcc\x39\x61\xdc\x9c\x77\xe2\x3f\x90\x9c\xc5\x29\x53\x28\x91\x1e\xf5\x6f\xcf\x8e\x2b\x5f\x42\x52\x11\x43\xc7\x7c\x5f\x2c\x40\xf1\x43\x6d\x4e\xbb\x99\x50\x81\x7f\x0d\xd5\xe6\x35\x06\x27\xdc\x69\x89\xa8\xe1\x99\xee\x9d\x06\x60\xc2\x10\x96\x01\x84\x97\xdf\x9e\x91\x9f\x07\x54\x41\xc2\x38\x58\xd8\x65\x92\x4d\x58\x02\x23\xf3\x46\xee\x75\x4f\xd5\x23\xe7\xb9\x34\xf4\x2c\x99\x3a\xc4\x20\x8b\x77\x85\x29\x92\xf3\x19\x74\xf3\x98\x65\x65\xbe\xf2\x66\x99\xbb\x95\x91\xba\x6e\xf1\x89\xa9\xe1\xe2\xd4\xdf\x87\x7b\xa3\xc7\x94\x2f\xdd\x5c\x23\x29\x9a\x89\x19\xb7\x4f\xb1\xd8\x8a\xe6\x20\xa5\x90\x3d\xf2\x0f\x43\x3b\x73\xa3\x61\x13\x91\xc4\x20\xbd\x76\x47\x98\xa1\x97\xaa\xe3\x81\x84\x12\xbb\x93\x03\x1d\x60\x16\x00\x7e\xf9\x37\x3b\x99\xdf\x10\x1c\x40\xb9\xc4\xaf\xb7\x47\xde\x73\x23\x50\x52\x32\xcc\x8d\x08\xe8\x75\x0b\x7b\xe6\xca\xa0\xf1\x87\xd0\x4f\x50\x7a\x7d\x27\x2c\x3b\xa5\xcc\xa1\x5a\xd0\x33\xa4\x35\xb0\x98\xb9\x58\xf8\x3e\x65\x11\x99\x86\xd7\x89\x21\x11\x59\x6a\x29\xa0\xca\x33\x23\xfe\x28\xf3\xa5\xdc\x80\x26\xaa\xb0\x9f\x4c\xc4\x6a\x21\x00\xcc\xb2\x32\x09\x19\x95\x81\x62\x2b\x20\xd1\x98\x72\xa3\xeb\x99\x0f\x0d\xb2\xb2\x91\xbd\xcc\x6b\xe9\x40\xe4\x1a\x71\xcc\x9d\xd5\xa1\xc8\x79\x4c\x0c\x51\x29\xc4\xe9\xfb\x7c\x00\x92\x83\x06\x94\xa8\x63\x11\x29\x23\x4c\x47\x90\x69\x75\xe2\x4f\xd3\x49\x26\xe2\xae\xff\xa3\x4b\xfd\x21\x39\x39\x3c\xd8\x95\x1a\x11\x0f\xf9\x53\x62\xf7\x6a\xc9\x5d\xc0\xf3\x74\x39\x81\xef\xae\x7e\xd8\xdc\x50\x80\x71\xe1\x4d\x5a\x24\x46\x6d\x2e\x6c\x3a\x8b\x16\x5a\x36\x5a\x14\xf7\x13\xb3\x13\x25\x9b\x85\x13\xce\x2d\x75\x3b\x54\xe5\xa9\x57\x13\x6d\x2a\x25\x5d\xf6\x09\x4c\x43\xba\x82\xc3\xcd\x1b\x54\x0c\x6d\x33\xba\x58\xb1\x50\x14\x00\xb4\xa6\x86\x17\xa3\xf2\x6b\xaf\x18\x72\xc5\xa7\xc4\xe0\xb3\x93\xf3\x91\xab\x3b\x3e\xa6\x25\xcb\x12\x20\x7f\xb9\x87\x69\xc7\x6a\xc6\x30\x1c\x42\xa4\xff\xe6\xce\xb3\xb9\x07\xef\xc7\xc3\xed\x4d\x0f\x7f\xf1\xff\xfa\xdb\xb2\x2f\xde\x88\xcb\xaf\x97\x88\xec\xb0\x4b\x5a\x75\xc7\x0c\x84\x2e\xf1\x81\x19\x96\x6d\x21\x60\xe7\x32\xf0\xc1\xcf\xea\x91\xcb\x34\xd3\x53\x92\x02\xe5\xca\xcb\x3b\x86\x66\x94\x6e\x56\x8e\xc2\x95\xa8\x2d\x32\x99\x60\x29\x40\x0c\xb9\x16\xb7\x4e\x0a\xea\x90\xbe\x84\x21\xc8\xe2\x17\x64\x64\xd7\xe2\xf2\x11\xa2\x5c\x2f\x95\x8b\xca\x70\x5b\x79\xa4\xcc\xb8\x87\xe9\x16\x00\xf9\x0e\xa6\x5e\xa3\xb1\x5f\x76\x0f\x53\x8b\x0c\xf8\x53\x81\x43\x34\xcb\x12\x06\x56\x69\x5f\x05\x99\x7b\x98\x2a\x94\x7a\xcc\xf3\xf7\x76\x76\x30\xf7\x77\x0a\x2c\xf1\xc2\xe7\xa5\xd1\x1b\xd5\xff\xb5\xf8\x1a\x89\x74\xc0\xb8\x7d\x99\x9d\xda\x6f\x05\xce\xee\x01\xca\x63\xfc\x13\x5f\xd3\x04\xb8\xfc\xa2\xb6\x80\xd9\x3b\xff\x1d\x85\x45\x84\x50\xb3\xa2\x43\x45\x24\x24\xf6\xc4\x8f\x59\xe6\x0d\x4d\xb8\xf4\x1e\xf9\xc1\xb0\xc7\xc2\x3c\x8e\xb8\x61\x21\x80\x5f\x75\xf9\x9f\x9c\x26\x3d\x72\x61\xa9\x22\x7e\xbd\xfb\xc9\xdd\x64\x00\xf9\x9f\x9c\x4d\x68\x62\xb4\x1a\x2d\x0c\xcb\x8a\x23\x2a\x63\xe4\x06\xce\x7a\xa5\x84\xdd\x3d\x1a\x04\x0e\x7f\xda\x8b\x3d\x52\x68\x39\x23\x19\x95\x9a\x45\x79\x42\xa5\xb7\xc8\x4f\x1b\x81\x68\x81\x34\xb7\x10\x09\x1e\xaf\x3c\xc1\x4b\xa9\xab\x7b\xb6\x0c\x63\x14\xa3\x40\x32\x11\xa3\xe2\xc6\x52\x98\x45\xd2\xa3\xaa\x72\x23\x86\xfe\x54\x87\x23\xd6\xb1\x52\xcd\x03\x53\xce\xb8\x15\x0c\x08\xcc\x1a\x18\x8e\x4b\xe4\x31\x9c\x8a\x1e\xf9\xfb\xd4\xf3\xab\x0e\x61\xda\x4a\xe4\x28\xff\x79\x19\xc6\xa3\xac\x03\x76\x71\xa0\x86\x42\x82\x51\xfa\x8f\x62\x81\xcf\xc0\x84\x45\xfa\xb8\x47\xfe\x9f\x11\xf1\xcd\xc6\x73\x18\x51\xcd\x26\x41\x86\xf4\x92\x88\x96\x40\x8d\x4c\x4c\x15\x79\x45\x8e\xf0\x31\xc2\xd2\x14\x62\x46\x35\x24\xd3\x63\x32\x98\xe2\x6b\xd4\x54\x69\x48\x37\xd9\x3a\xc6\x35\x8c\x2a\xd6\xf1\xf9\x31\x74\x86\x1b\xc6\xf5\x97\x7f\x58\x71\x27\x2e\x76\x8b\x9d\xfd\x01\x45\xca\x0a\xa9\xb1\x52\xe6\xcc\x16\x06\x1e\x24\x02\x15\x09\x74\x83\x29\x77\x16\x3a\xc5\xb9\x2a\xc9\x7e\x9e\xcc\x84\x0d\xfe\xb7\xc1\x03\x4a\x24\xa0\x83\xc7\x61\x6e\x0d\x1c\x67\xd1\x2a\x83\xc9\x52\x8e\xb6\xdc\x9e\x47\x50\x42\x31\xe2\xff\x97\x7f\x58\x62\x28\xb1\xd6\x78\xb3\xe7\xf3\x36\x3f\xb2\x01\xa3\x2c\x26\x5f\xb6\x59\x6b\x8f\x75\x78\xfd\x4e\x33\xa0\xa8\xbf\xd6\x88\x13\x0c\x28\x46\x45\x72\xfb\xdd\xf5\x76\x32\x12\x34\x3c\x3b\x9b\x21\x7e\x8c\x2b\x4d\xb9\x66\x48\xd9\x82\x45\xcd\x5b\xd8\x8c\xf8\xbd\x8d\x11\x07\x71\xcd\x11\x1a\x8b\x5c\xce\x66\x3a\x47\x1f\xb6\x36\xb6\x79\x35\x7f\xbd\xf5\xb5\xef\x0d\x02\xf6\x9d\x54\x29\x36\x32\x52\x26\x79\x00\xd4\x86\x1d\x3b\xa9\x4a\x9b\x56\x2b\xc0\x07\xd9\x2f\x78\x9a\xd2\xc0\x04\x98\xf6\x72\x7f\x24\xb8\xca\x53\x88\x3d\xcd\x88\x21\x03\x1e\x03\x8f\xa6\x68\xeb\x4f\x26\x20\x7b\xe4\x7b\x65\x76\x8a\x7c\xcb\x46\x46\xef\x73\x2f\x2d\x8b\x4a\x28\x15\x18\x56\x5d\x5d\x01\x53\x06\x74\x43\x90\x12\x62\xb4\xb6\x11\x23\x03\xf9\x19\x20\x9e\xb9\x5f\x91\x38\x47\x0f\xc4\xec\x22\x72\x03\x07\x6b\x2e\x90\x46\xa9\xf1\xe6\xb9\x60\x28\xb1\x07\xde\x7c\xd2\x48\x58\x5f\x03\xfa\xc3\x0c\xed\xd4\xa2\xa0\xa3\xcc\x1a\x88\xc3\x1c\x8c\xeb\x2f\x3e\xb7\xf3\x56\x15\x61\x34\x60\xcf\x7c\x0c\x2a\x6e\x39\xb7\xc0\x87\xb2\x95\xc6\x93\x99\x57\x76\xaa\x45\xcf\x21\x39\xa6\xe9\xec\x92\x0b\x9a\x2e\x29\xbf\x87\x98\x24\xf0\xc8\x22\x31\x92\x34\x1b\xb3\x88\x26\xc9\x14\x8f\x29\x1a\xc9\x98\x56\xa8\xf5\xaf\x30\x66\x2f\x23\xe3\xc1\x31\xba\xb5\x51\x57\x41\x24\x41\xaf\x77\x10\xdc\xda\xfb\x0a\xa6\x8c\xea\xb2\x18\xfa\x09\x2c\x8e\x38\x9c\xf3\x56\x70\x1a\x45\xe6\x20\x21\xea\x1a\xad\xdd\x09\x20\x25\x54\xee\x91\x2b\x64\xa9\x03\x50\x88\xe5\xf7\x00\x99\xc5\xb4\x84\x29\x4d\x54\x8a\x36\x15\xc5\x78\x04\x04\x68\x34\xb6\xe0\xe4\x00\xde\xcc\xa8\x25\x03\x2b\x06\x19\x56\x3b\x0d\x7b\x03\x5c\x2f\x16\x6a\x56\xeb\x5d\x2b\x74\xae\xd5\x60\x0c\x34\x65\x3d\x24\x0b\x5a\xe4\x79\xa2\xf3\xc4\xab\x22\xe8\x61\x8b\x57\x5b\xef\xd9\xad\x36\xc2\xc7\x68\x3d\xad\xf9\xbe\x72\x7b\xf0\xbe\x8e\xc5\x83\xf7\xc3\xcd\x1d\x72\xb4\xd8\xf8\xbd\x8d\x99\x8a\xcc\x49\x87\x98\x9c\x0b\xae\x50\x3e\xb5\xee\x58\x74\xa7\x4e\x68\x62\x51\xc1\x4f\x9c\x89\x24\xc1\x23\x9f\x7b\x75\xc2\xc8\xf1\x9c\x40\x3a\x80\x38\x86\xd8\x7c\x96\x5d\xca\x12\x36\x57\xd3\x80\xee\xf9\x43\x5f\x24\xc9\x6a\x2e\xb6\x52\x2f\xdd\x44\x2b\xf5\x00\x58\x25\x1b\x55\x59\x9f\x87\x98\xb3\xc5\x19\x9c\x8e\x41\x83\x4c\x19\x77\xe2\x91\x11\x75\x03\x60\x07\xa0\x1f\x00\x38\x89\xc6\x10\xdd\x87\xa3\xe4\xbc\xd9\x33\xbb\xe6\xec\x4f\x55\x8a\x55\x04\x0a\x88\x24\x41\x45\x43\x01\x10\x66\x74\x02\x0e\x0f\x65\x9b\xd5\x02\x76\x63\x58\xf4\x84\xb2\x84\x0e\x12\x40\xae\x19\xfe\xea\x54\xbc\xea\x9e\x9f\x67\x79\x92\x18\x21\x96\xc7\x64\x74\xd3\x3f\x27\x5a\xd2\xe1\x90\x45\xe6\x52\xcc\xa4\xb5\xfa\x56\x1d\xf2\xd5\x17\xae\x12\xd7\x96\x9e\x08\xa5\xa9\xce\xe7\xf6\x68\xc5\x06\xaf\xda\x58\xa3\x87\xb0\xa5\x06\xa2\xca\x56\xde\x54\x95\x15\xb3\x0c\xb0\xca\x56\xc5\xfe\xdd\x23\xd7\x02\x75\x04\xaa\xc9\x5b\x50\x86\xed\x22\x80\x6e\x80\x2a\xc1\x4b\xd4\x15\xa5\x5f\xc9\x46\x8c\xd3\xc4\x7d\x54\xd9\xbe\x17\x74\x0f\x8a\x26\xe5\x94\x8d\x24\xd5\x81\x28\x16\xeb\x76\xdc\xc5\xf1\x45\x6b\x09\xed\x91\x33\x3e\xc5\xfd\x1e\x02\x35\x3f\x98\x99\xb5\x14\x71\x1e\xa1\x1d\x3e\x49\xd0\xdd\x5b\x4c\xd2\x28\x19\xad\xba\x17\xce\xfd\x4b\xbc\xa0\xa7\xcc\x01\xa0\xcc\xb9\x94\x04\x07\x42\x55\x66\xf4\x38\x8f\x93\xd6\x14\x5e\x00\x18\x99\xc5\x59\xff\x8a\xf8\x80\xb9\x1e\xe9\x76\xbb\xe4\xce\xfc\xac\xb4\xcc\x23\xe4\x2f\xe6\x08\xf1\xd8\x71\x0a\x8b\x7d\xf8\x91\x14\xc5\x4e\xfc\x0c\xe2\x2c\x1f\x56\x04\xcb\xa8\x1e\x93\x9e\x05\x7c\xaf\x04\x0a\x42\xbe\x36\xbc\xe6\x91\xa6\x99\xc1\xfb\xf7\xdc\x52\xef\xaf\x85\xb8\xb5\x9b\x64\xdf\xf9\x3f\xe4\xe4\x64\x16\x27\xc4\xc0\x88\xa8\xce\x80\x88\xa8\x31\x14\xe2\x50\x55\x3f\xa9\x67\x1e\xfc\x8e\x8b\x07\xbe\xe8\xed\xf8\x2e\x2a\xe1\x94\xbc\x3f\x38\xf3\xa7\xef\xfd\x41\x87\xbc\x3f\xe8\x4b\x31\x32\x62\x2b\xe3\x23\xf3\x83\x41\xaa\xf7\x07\x17\x30\x92\x34\x86\xf8\xfd\x81\x99\xf6\xf7\x99\xd1\xb0\xde\x82\x1c\xc1\x77\x30\xfd\x2b\x4e\x16\x7e\xf6\x1c\xe1\xaf\xa9\xb9\x8e\xbf\x1b\x16\x6c\xf8\xd4\x5f\x53\x9a\x85\x1f\xde\xd2\x2c\x3c\x7c\x5e\xe0\xd9\x8f\x3f\xa5\xa0\xe9\xe4\x75\xaf\xd8\xd1\x9f\xff\xad\x04\x3f\x7d\x7f\x50\xac\xbf\x23\x52\x83\x19\x99\x9e\xbe\x3f\x20\x95\xb7\x9e\xbe\x3f\xc0\xf7\xfa\xdf\xfd\x22\x4f\xdf\x1f\x98\x37\x99\x9f\xa5\xd0\x62\x90\x0f\x4f\xdf\x1f\x0c\xa6\x1a\x54\xe7\x75\x47\x42\xd6\x31\x02\xd3\x5f\x8b\x37\xbc\x3f\xf8\xd9\xec\xc9\xc9\x89\x73\x61\xe0\x66\x2a\xf2\xbf\x8b\x8d\xd5\x6b\xe9\xfe\x6a\xfd\x0d\x8d\xd0\x54\xe9\x3b\x49\xb9\x62\x3e\x7e\x6c\xe9\xad\xa9\x3d\xef\x4b\xaf\x4b\xa4\x01\x4b\x2f\x5b\x6c\x58\x7a\x79\x09\xf7\xdc\x84\x73\xcd\x7f\xc3\x86\x56\xe7\xf9\x07\xbd\x48\x63\xae\x14\x76\x9a\xb0\x3f\x86\x07\xb8\xbb\xcd\x59\x34\x72\xbc\x39\xe2\x8e\xbe\x19\x89\x91\xe3\xbe\xf5\xdc\xf9\x0d\x0a\x7e\x88\xfd\xc8\x79\x0c\x32\x41\x67\x55\x31\xab\xf5\x84\xc4\x3d\x62\xed\x06\x34\x58\x69\xee\xcd\x41\x42\xee\xc4\x4b\xc6\x6b\x5c\x57\x98\xd1\xd0\x0e\x7b\xe6\xdd\x34\xc8\xe8\xa2\x08\x32\x8d\x9c\x6e\x77\x17\x33\x29\x19\x55\x8c\x64\xd5\xd5\xcb\xd1\xc3\x21\xc7\x86\x80\x77\x77\xbb\x68\x9d\x3c\xa5\x86\x75\xd0\xd8\xac\xb7\xb8\x66\xd5\x37\xab\x6e\x59\x92\x6a\x9d\x42\xd6\xc6\xef\xf7\xc1\x81\xda\x31\x12\x14\xcc\x32\x3d\x5d\x6b\x31\xd9\xe8\xe3\x53\xfa\xf8\x06\xf8\x48\x8f\x4f\xc9\x17\x9f\xff\x9f\x2f\xff\xb4\xe4\x46\x4b\x18\x21\xfe\x06\xb8\xb3\x05\x6d\x08\x86\xf9\x07\x67\x8d\x86\x45\x88\xe7\xa8\xb8\x27\x18\xb9\x0b\x0c\x7a\xa0\x18\xc0\xe1\xd8\x65\x9e\x19\xb8\x18\x42\x6f\x6d\x0d\x11\x74\x8c\x90\xb4\x70\x32\x16\x08\x78\x32\x25\xaf\x3f\xef\x90\x81\x03\xf1\x3c\xf9\xfe\xf1\xf1\xa7\xde\x82\x25\x33\x45\xfe\xdc\x99\x59\x0f\x53\xc4\x6c\x95\x18\x22\xe2\x58\x15\x53\x82\xe5\x84\xde\x18\x30\xcf\x09\x21\xac\x77\xdd\xc6\xad\xb3\x07\x6e\x66\x0b\x4c\x19\x67\x69\x9e\x9e\x92\x57\x4b\x6e\xb1\x24\x6d\xc3\xdd\xb4\x37\x17\x82\x00\x35\xa4\x6b\x24\x69\x6a\x44\x9e\x88\xb0\x18\xb8\x66\x43\x86\x41\x03\x01\xb5\x51\xdd\xb7\x0f\xfa\x18\x94\x00\x45\x0c\x4f\x31\x74\xa8\x84\xec\x7d\x2b\xe7\x48\xe4\xc0\xce\x7b\x13\x95\x09\xd4\x34\x03\x7b\x1a\xac\x02\x43\xe0\x31\xb3\xa2\x6a\xc9\x0d\x91\x02\xe5\x8c\x8f\x7c\xd8\x8b\xb7\x25\x5b\xae\xfb\x30\x06\xe7\x3d\x87\xb2\x2f\x28\x32\xca\x52\x8c\x7a\x13\x25\xa3\x9c\x4a\xca\xb5\x51\x63\xcf\xfa\x57\x56\x46\x9f\xb5\x69\xd2\x22\x16\xd2\x9f\x46\x7b\x54\x2d\xb1\x32\x4b\x74\x7e\x73\x3c\xb1\xcd\x1d\xd5\xd7\xaf\x3e\x5f\xb9\xe5\xe1\xbe\xe5\x2e\x3c\xaa\x35\x48\x7e\x4a\xfe\xfb\xc7\xb3\xee\xff\xa3\xdd\x5f\x7e\x3a\x72\xff\x78\xd5\xfd\xf3\xbf\x3a\xa7\x3f\xfd\xae\xf4\xe7\x4f\xc7\x5f\x7d\xb6\x64\xa6\xc5\xc2\xfc\x12\xf4\x71\x4c\xc4\xcb\x89\x7e\x47\x3b\x3e\x4a\xe5\x4e\xe6\xd0\x21\x5f\xd3\x44\x41\x87\x7c\xcf\x91\x35\xd4\x04\xda\x6a\x0f\xb5\xe1\xca\x07\xe6\xad\xcb\x3c\xe5\xee\x16\x5c\xd2\xea\x7b\xdc\x72\x57\xa9\xaf\x9b\x01\xc9\x9b\x1a\x4a\x94\xa6\x14\x73\x8b\x41\x9a\xe6\x20\x89\x9e\x93\x70\x7b\x91\x48\x4f\x4a\x31\xb9\x46\xb4\x7e\x4b\xf9\x94\x14\x64\xcd\x0a\xa5\xb3\x98\xae\xb4\xa1\x4d\x34\x92\x42\xa9\x10\x54\xac\x48\xc2\xee\x81\x9c\x15\x7a\xa3\x21\x96\x03\x88\x28\xca\xe2\x72\xc0\xb4\xa4\xd6\xe8\xeb\xe5\xca\xc2\xa2\x34\xcc\x13\x72\x64\xd4\xd5\x1e\x06\x92\xcd\x51\xd7\x63\x67\xbd\x1d\xb0\x84\xe9\xa9\x55\xa5\x23\xc1\x87\x09\x73\x2a\x40\x9a\x09\xa9\x29\xd7\xce\xce\x08\x23\x78\x24\xac\x70\x7d\x33\x45\x8e\x62\xae\x5e\xbf\xfe\xfc\x8b\xdb\x7c\x10\x8b\x94\x32\xfe\x75\xaa\x4f\x8e\xbf\x3a\xfa\x4f\x4e\x13\xf4\xf2\x5e\xd3\x14\xbe\x4e\xf5\x71\x73\x6c\xf1\xf5\x97\x1b\x9c\xa2\xa3\x1f\xed\x59\xf9\xe9\xe8\xc7\xae\xfb\xd7\xef\xfc\x4f\xc7\x5f\x1d\xbd\xef\xad\xbc\x7e\xfc\x3b\xf3\x0d\xa5\x13\xf8\xd3\x8f\xdd\xe2\xf8\xf5\x7e\xfa\xdd\xf1\x57\xa5\x6b\xc7\x8b\x0e\xe3\x63\xb7\x08\x15\xe9\x1a\x2d\xa0\x9b\xd2\xac\x7b\x0f\xd3\x25\x87\x73\xa9\x38\x3a\x3f\x91\x85\x58\x4a\xb3\x45\xda\xb7\x8d\xad\xbd\x01\x8c\xe7\x8c\x16\x22\x79\x4d\x0f\x0c\xa7\x4b\x44\xb2\x6e\x11\x81\xb5\x83\xd5\xc9\xf0\x1d\x6b\x69\x5b\x25\x4e\x6f\x80\x2d\x9b\xc9\x8f\x7c\x45\xfc\xe2\xda\x97\x84\xef\xdc\x79\x06\x7f\xbe\x97\xa4\x7e\x6c\x3c\x4f\xce\x96\x6a\x5a\x55\x1b\xe6\xd5\x85\x15\x7d\x91\xf4\xa0\x38\x37\x16\x46\xcf\xcb\x39\xfb\x4f\x0e\xe4\xea\xc2\xd1\xa3\x0e\x61\x3c\x4a\xf2\xd8\x48\x0a\xdf\x7f\x7f\x75\x61\xf4\xf7\xbf\x3b\x72\xf3\x00\x24\x16\xfc\x50\x93\x77\xd7\x6f\xfe\x89\xc6\x00\xbc\xa3\x63\x19\xba\xf5\x47\xd1\x84\xd9\xac\x11\xcf\x80\xc9\xdf\xc1\xc6\xc9\xe1\x9b\x23\x9a\x05\xfb\x09\x92\x3b\x8c\xb0\x4a\x32\x23\x40\xdc\x03\x51\xb9\x74\xab\x33\x13\x5b\x8f\xaf\x81\x35\x71\xfe\xe0\x11\x68\x44\xf2\x04\xb3\x1f\x76\x01\x9a\x8b\xc7\x67\x82\xdf\x1a\x29\xf0\x09\xce\x87\x41\xe4\x77\x4e\x66\xc5\x77\xec\x70\x18\x56\x24\x21\xac\xfd\x42\xe2\x0e\xd3\xb9\xfd\xd2\x27\x3f\x49\x73\xdf\xbb\xd3\x1b\xad\x3d\x13\x3d\x9b\x37\x6b\xec\xcf\x73\x61\x5c\x55\xd5\x79\x26\x17\x0c\x6d\xab\xc1\x39\x3a\xa6\x8a\x0c\x00\x38\x9a\x73\xad\xf5\x0f\xb8\xc3\x3a\x28\x0c\xb1\x79\xd6\xd5\xa2\x1b\x2f\xde\xbc\x35\x90\x5b\x0f\xb5\x15\x9a\x6b\xe5\xdb\xce\xb6\x56\x54\x1f\xc6\xd3\x45\x30\x50\xd6\x9c\x89\x81\x43\x5e\x06\xd9\xf6\xc3\x96\x2b\x26\x33\x56\x5d\xd4\x2c\x9c\x51\xc3\xe9\x19\xf3\x4b\x32\xda\x63\xc5\xb2\xa1\x05\x7a\xf3\xaa\x96\xbd\xed\xd7\x68\xb7\xf9\x16\xe4\x84\xed\xc4\xfc\xd6\x1d\xcc\xc8\xc6\x99\x9c\x3d\xfd\xb1\x32\xa2\xd7\xce\x2f\x41\xd3\x5f\x24\xd6\xb8\x6f\x56\xc6\xbf\x23\x04\x57\x45\xf9\x6f\x33\xc7\xb6\xcc\xd2\x52\x93\x53\xcc\xb8\xf0\x3f\x69\x21\xd1\xe5\x5e\xfe\x2d\x1f\x04\x41\xb9\x98\xdd\xe9\x40\xe4\x7f\xfe\xf7\x37\xbf\x79\x96\x79\xe4\x49\xae\x34\x48\x07\x3e\x9f\x44\xfd\xe1\xf2\xc9\xed\xeb\xdd\x19\x72\x90\xc3\xeb\xa5\xbc\xf2\x45\xf7\xcc\xe7\x97\x2f\xfc\x10\xbc\x65\x61\x9e\xb9\x9a\x94\xff\xed\x6e\x2c\x32\xce\x17\xcd\xf6\x94\x99\xe7\x95\xac\xb5\xdb\x1f\x4a\xd8\xfb\x61\xd2\xcd\x67\x7c\x8b\xab\x97\x30\x29\xed\x53\xf9\xf5\x3f\xcc\xfd\xbe\xe9\xeb\xfd\xe7\x53\xf3\xe6\x52\x40\x8b\xe0\x98\x09\x9b\x50\x5f\x33\x60\xf1\x82\x16\xdc\x62\x57\x74\x33\x7f\x61\x7d\xde\xb9\xd3\x5d\xb3\x31\x55\xf3\x20\xee\xcf\xfc\xba\x60\xba\x66\xb3\xcd\x17\x61\xbf\x15\xaf\x2d\x05\x09\x9e\x35\xdc\x3b\x23\xf7\xfe\xbc\xf0\x99\xdb\x0c\xa2\x9f\xdb\xcc\xf3\x36\xf3\xbc\xcd\x3c\xdf\xd3\xcc\xf3\xf5\xe7\xde\x9c\x61\x12\x43\x94\x50\x9f\xe9\xa2\x21\x49\x30\x0d\x7c\x2c\x1e\x42\xf4\x65\x92\x94\xa3\x35\x8b\xd8\xaf\x94\x72\x8c\x68\xc8\x32\x6b\x1b\xa7\x64\xc4\x26\xc0\x43\x30\xca\xa6\x8b\x5f\x9d\x09\xbf\x98\x41\xf9\xab\x6e\x81\x33\x57\x56\x26\xc9\xcf\xca\x40\x2b\xa0\x76\x56\xdc\xeb\x6c\x04\x39\xb7\x2e\xff\x5c\x42\x8c\x69\x0f\x16\xc9\x53\x9a\xa1\x94\xe7\x53\x1b\x69\x19\xc1\x31\xe3\x66\xea\x93\xce\x06\x53\x62\xc4\x38\x24\x08\x5a\x08\x17\x98\x63\x9e\x45\xc2\x20\x41\x4b\x06\x93\xb2\x81\x34\x38\xa2\xb6\xd7\x09\x36\x4f\xa3\x5d\x29\x12\xd3\x8c\x39\xd9\x25\x0e\x82\xe5\x06\xd0\xeb\x5f\x39\x7c\x2b\xc4\x51\xe5\xf0\x0d\x14\xe6\x29\x38\xf9\x20\xc8\xb5\xf8\x26\x87\x58\x31\xc1\xd4\x0b\x8b\x19\x06\x6c\x65\x24\x1c\xa0\x65\x46\x52\x6e\x2e\x2c\x44\xee\x27\x48\xcf\x16\x0f\x7c\x79\x74\x40\xb3\x29\x5e\x65\xd8\x85\x9f\xcd\x02\x27\x98\xe1\xee\x55\x67\x2d\xf0\xb4\x5a\x0d\x1a\x61\xe7\x6e\x89\xc9\x84\x51\x42\x47\x23\x89\xd1\xb2\x4b\x23\x0d\x36\x4c\xd3\x5a\x17\x1a\x41\xf0\x30\xa2\x24\xbf\xf2\x0e\x43\x06\x57\xde\xb0\xd4\x42\xeb\x6f\x98\x17\x16\xab\x63\xb3\x84\x32\x8a\x66\x34\x0f\x5a\x21\xd7\xe4\xae\xac\xdf\x5b\x3b\xd6\xec\xb0\x1d\xd5\x7d\x9e\x59\x88\xbb\x3a\x30\xe7\xa3\x20\xcd\x86\x1c\x44\x85\x37\xdb\xb9\x49\x32\x90\x46\x1f\xb7\xf1\xc4\x94\x44\x56\x7e\x0b\x84\xc7\x7b\x87\xd7\x2c\x67\xa3\xfd\xb7\x63\x13\x2c\xb0\xa3\x8b\x21\x55\x6b\x6e\xdb\x6c\xab\xec\x58\x53\xca\x62\x76\x6c\x98\xc2\xe4\xe6\x5e\x5d\xea\xa2\xd6\xdc\x06\x0c\x8d\x4f\xba\x41\x4e\x8e\x1d\x55\xf3\x16\x7d\x78\x5b\x8e\x24\x91\xf4\x81\x00\x8f\x84\x21\x16\xff\xdf\xdb\x77\xd7\x3e\x7f\xed\x4a\x13\x96\x66\x09\xa4\x18\x57\xf1\x96\x4a\x35\xa6\x09\x48\xe4\x4e\xdf\xf3\xb4\xf2\xf7\x4c\x08\x78\x0c\x09\x9d\xda\xc9\x62\x88\x04\x5a\xe2\x85\x24\x99\x11\x70\xd3\x2c\xc7\x14\x0e\xbc\x8a\xef\x5d\x9b\xa4\xb3\x03\x68\x0a\x13\xd5\x60\xba\xd0\x02\x5a\x1d\x8f\xdd\x78\x53\x1a\x50\x5e\xcc\x7a\x4a\x60\xc7\x46\xf4\xa0\x3c\xf1\xda\xaf\x0c\x19\x32\xfd\x15\x36\xb6\xf2\x8c\x5b\xe6\x82\x7d\xf1\xf9\x8a\x3b\x63\xc8\x12\x31\x35\x78\xb1\xfe\xac\x6c\xf8\x3d\x1b\x9f\xeb\x4d\xe7\xdb\xf4\x2c\x6f\x38\x9f\x35\x4e\x35\x31\xd3\x22\x05\x6a\xa7\x89\x56\xb9\xff\xb6\x9a\x68\x81\xfd\x71\xf9\x6c\x4f\xc2\xfc\xfa\x57\xde\xda\x10\xbc\xbe\xbe\x02\x9e\xff\x13\x73\x77\xbe\x0b\x6e\xe4\x92\x5c\x1d\xbc\x81\xd6\x5a\x8f\x79\x49\x92\xe4\x9a\x25\xec\x17\x58\x93\x34\xfc\x64\x6c\x6f\x8d\x80\xe3\x6f\x5b\x23\xe6\xf8\xdb\xd6\x09\x3b\x76\x6c\xc3\x47\xd7\x63\xa1\x1d\xd5\xe4\x71\xa3\xd9\x3b\x51\x3d\xec\x4c\x5c\xdd\x8a\xc6\x29\xf9\x7a\x34\x5f\xb0\xd2\x3e\x9a\x6f\x2b\xe6\xcf\x65\x0b\x26\x47\xcb\x4c\xe6\x3d\xa3\x17\xf7\xd0\x28\xfb\xe3\x4f\x3d\x3b\xe5\xb1\xcf\x86\x77\xb6\x0d\xb6\x66\x72\x17\x92\x3a\x27\x95\x35\x0e\xa6\xc9\x6a\x2f\xfc\x52\x48\x9d\xf5\xaf\xbc\x81\xf5\x03\x6e\xad\xca\x20\xda\x03\xa9\xfb\xb6\xb2\x8c\x8a\xcc\xed\xf2\x40\x8d\x40\x8d\xa5\xc3\x06\x89\x88\xee\x9d\x2d\xf9\xe6\x22\xa4\x5c\xfa\x52\x79\x2e\xe1\x92\xb0\x75\x44\xa4\x15\xb3\x5b\x31\xbb\x15\xb3\x9f\x8b\x98\x6d\x7d\x36\xfb\x40\xa9\x66\x16\xb2\x94\x56\xd9\x78\xd8\x96\x5a\xad\x18\x2d\xb5\xc2\xd1\x52\xab\x35\xe3\xd9\x51\xab\x8d\x64\xc0\x0d\xe2\x3a\x57\x1f\xe4\xd6\xc0\xdd\x1a\xb8\x5b\x03\xb7\x1b\x2d\x2f\x73\xa3\xe5\x65\x2d\x2f\x6b\x0d\xdc\xab\xa6\x6c\x0d\xdc\x5b\x4e\xd4\x1a\xb8\x5b\x03\x77\x65\xb4\x06\xee\xd6\xc0\xdd\x1a\xb8\x5b\x03\xf7\x92\xd1\x8a\xd9\x3b\x4e\xda\x8a\xd9\x2b\xc6\xcb\x16\xb3\x5b\x03\x77\x4b\xad\x5a\x6a\xd5\x52\xab\xe7\x41\xad\xea\x1b\xb8\xa3\x04\x28\x5f\xac\xe8\xce\xe4\x49\xe0\x7d\xa1\xd5\x83\xab\x67\xeb\x7e\x1d\xc0\x98\x4e\x98\xc8\x65\x51\x50\xec\xfc\xf6\x07\x32\x02\xad\x0c\x16\xc0\xe2\xe6\x23\x35\x93\xf2\x81\xd3\x41\xb2\x70\xe2\x75\xa4\xc4\x3d\xb9\xda\xa0\x3f\x10\xc2\x7c\xdd\x3c\xc4\x50\xae\xf7\x72\xf2\x36\x71\xff\x07\xcb\xf4\x8e\xc5\xc1\xff\xe7\x37\x17\x4d\x85\xfc\x63\x17\xa0\x30\xab\x2b\x58\x8d\x15\x36\x5d\x4d\xcc\x77\x0f\x1c\x62\x4c\x06\xf5\xe5\xfd\xcd\xa1\x67\x11\xd3\xc9\x34\xbc\xb8\xb7\xa8\x3c\xcf\xf3\x49\x1d\x38\xbf\xb9\xd8\xdc\xa5\xe2\x37\xe0\x43\x78\x4f\x5a\xdf\x48\xeb\x1b\x09\xa3\x15\x83\x76\x9c\xb4\x15\x83\x56\x8c\x97\x2d\x06\xed\xbb\x2f\xa1\xf5\x00\x90\xd6\x03\xe0\x6f\x6b\x3d\x00\xad\x07\xa0\x19\x30\xb5\x1e\x80\xd6\x03\xb0\xfa\xa6\x56\x98\xdc\x71\xd2\x56\x98\x5c\x31\x5e\xb6\x30\xd9\x7a\x00\x5a\x6a\xd5\x52\xab\x96\x5a\x3d\x0f\x6a\xf5\x1c\x43\xdc\x5b\x43\x6c\x6b\x88\x6d\x0d\xb1\x2d\x37\x6a\xb9\xd1\x9a\xf1\xec\xb8\x51\x6b\x88\xdd\x76\xa2\xd6\x10\xdb\x1a\x62\x97\x8d\xd6\x10\xdb\x1a\x62\x5b\x43\x6c\x6b\x88\x5d\x3d\x5a\x61\x12\x47\x2b\x4c\xae\x19\xcf\x4e\x98\x6c\x0d\xb1\x2d\xb5\x6a\xa9\x55\x4b\xad\x9e\x07\xb5\xaa\x6f\x88\x5d\x73\x92\x2a\x28\x53\xb6\x9f\x3a\xc9\xd1\xc7\x03\x63\x65\x7f\xd7\xf1\xcd\xb6\xc0\xf2\x0d\xee\x3b\x24\x61\x29\xf3\x75\xdb\x85\x34\xd8\xd1\x8d\xa8\x02\x35\x37\xc7\x82\xf7\xaf\x5e\xfb\xea\x93\xba\xb2\x0f\x4b\x08\x64\x66\xdc\xcf\xe3\x70\x65\xeb\x65\xb0\x68\x03\xd8\x99\xf7\x9b\x1b\x8b\xbe\xb5\xeb\x3f\x7b\x87\x16\xff\x6b\xc9\xf7\xfa\xb6\xea\x03\xaa\xe0\xcb\x3f\xcc\x75\x03\x29\xdf\x92\x42\xcc\xa8\xde\xbd\xeb\x79\xf1\x8a\xe5\x98\xbb\xc1\x09\x08\xcb\xd8\x71\x16\xd7\xae\x60\xed\xde\x19\x04\x8b\xaf\xec\xcd\xbe\x6b\xfe\x6c\xb7\xeb\x82\xff\xf2\x25\x6d\x5d\x82\x66\xf5\x30\x06\xdf\x26\xce\x35\x74\x50\x7e\x52\xa6\x42\xae\xc3\xc2\xae\x84\x35\x93\x17\xfc\x7b\x16\x5c\x5e\xb7\x69\x8b\x7a\x5a\x2c\x04\x96\x07\xd0\x85\xf5\xab\x5c\x84\x22\x0e\xb3\x10\xcb\xa8\x34\x7c\xc2\xfb\x5f\x50\x74\x29\xdd\x3d\x03\xef\xd5\x3d\x1a\x57\xca\x2b\xeb\xe5\x94\x6e\xa9\xd6\xc4\x32\x9f\xcf\x26\xe2\x89\xeb\x2c\xd5\x07\x99\x32\xa5\x96\xa5\x67\x54\x97\xbe\x8e\x79\x6c\xc0\x34\x96\xc0\xdf\x7f\x51\x69\x39\x41\x88\xb4\x6a\xff\x80\x46\x44\xe6\x89\x6b\xad\xed\x9a\x4a\x10\x1a\x45\x22\xe7\x9a\x70\x80\xd8\x26\x7e\x2c\xc2\xd5\x0d\x58\xce\x06\x52\xe4\xa6\x32\x64\xd7\xae\x73\xed\x5d\xee\x1b\xce\xec\x27\x2c\x6c\x53\x52\x1e\x9b\xcb\x9c\xf8\xfa\xf5\xbc\x7b\x1b\x81\x60\x63\x71\xa0\x6a\xe8\x12\x09\x8b\xa6\x37\x79\x02\xae\xf1\x2a\xe3\x96\x6f\x05\x57\x58\x59\x51\xc8\xf0\x6e\x5c\xbd\xed\xf8\x1c\x0b\xb0\x06\x2a\x57\xda\xa5\xf2\xb8\xef\xfd\x68\x1b\x26\x99\x87\x08\xcd\xb2\x04\x13\xaf\x84\xe1\xdd\x0f\x63\x16\x8d\x8b\xae\xb5\x8b\x6e\xdb\x5c\x86\xdb\x48\xc9\x20\x5b\x29\x1a\xc4\x1b\x4f\x07\xeb\x50\x85\x6c\xa9\x71\x10\xdb\x78\xe5\x1b\x29\xf2\x6c\xc3\xdb\xe7\xed\x6e\xf6\x69\xdf\xd3\xb2\x2c\x8e\xf8\x8b\xce\x99\xe9\xfb\xf0\x5b\xe3\x9c\x33\xd6\xf7\x08\xb9\x1a\x92\x34\x4f\x34\xcb\x12\x7c\xc4\xd6\x8b\xb1\xad\xbf\x03\xdf\xe8\x10\xca\xa7\xde\x37\xea\x9a\x2f\x41\x4c\xe8\xc8\xcc\xa8\x7d\x4b\x76\xdb\xb5\x29\x4f\x8d\x0c\x52\x32\xfb\x61\x83\x4f\xf3\x7c\x98\x9d\x3c\xb0\x24\xc1\xa6\xf8\x49\x22\x1e\x20\xee\x91\x83\x83\x59\x52\x1e\x09\x59\x5a\x0f\x12\x93\x83\xdf\x55\xee\x32\x94\xa3\x58\xf0\x26\x38\x42\xb6\x16\xaf\xc9\x76\x22\x36\xd9\x5e\x99\x20\x84\x0b\xee\xcd\xc6\xdf\xdf\xbc\xd9\x0d\x11\xae\xab\x73\xb8\x2e\x5d\xa0\xcd\xb6\x64\x54\x6a\x46\x13\x92\xcb\x44\x59\x5c\xa0\x46\x60\x96\xbe\xcd\xd9\x98\xa2\xdf\x3b\x02\x65\xfb\x69\x91\xdf\xd9\xdd\x77\x9b\x63\xcf\xb8\xe0\xc9\x94\x50\xbb\x35\xc3\x3c\x49\x3a\x64\xc8\x38\x35\xa4\x1b\x32\x9f\x7b\x67\x34\x51\x72\xcb\x78\x04\xe6\x9b\xba\x41\x38\xc1\x15\x99\x19\x0d\x8d\x08\x07\x3d\x76\xad\x99\x9d\xdd\x41\xb9\x57\x98\x43\x1f\x61\x43\x59\x23\xd5\x3a\xb1\xe7\x46\x24\xe8\xad\x09\x26\x65\xec\x12\x46\xcb\x97\xff\xce\x38\xaa\x7b\xe4\x06\x99\x8f\x51\x1b\x81\xe9\xb1\xd1\x22\xb3\x2c\xc1\x06\xf2\x06\x59\x0a\xa4\x3c\x52\x79\x34\x36\x9f\x74\x90\x89\x58\x1d\x18\x52\x74\xa0\x20\x92\xa0\xd5\xc1\xb1\xf9\x6b\xf6\x1b\xf0\xfb\xca\xcf\x9d\xd0\x8c\x1d\x1c\x77\x08\x02\x08\x5b\x90\x09\x3d\x7e\xbe\x78\xe8\xbf\xb5\xd2\xf9\x72\xdd\x98\xe9\xaf\x5b\x9a\xc1\xf5\xd3\x12\x99\x6d\x4f\x65\xe8\xbc\x06\xcc\xcc\x34\x48\x69\x3b\x67\x17\x1e\xb7\x19\x82\x4f\xc8\x19\x27\x60\x7d\x24\xa0\x49\x0a\x94\xbb\xbb\x61\x02\x72\xaa\xc7\xe8\x36\x51\x81\x80\x3c\x7b\xa0\xd7\x03\xb8\x3b\xf0\x1e\xb8\x05\x92\xdb\x9e\x87\xb3\xc0\x3d\xfc\xdd\xe1\x2c\x21\x2d\x38\xc2\xb3\x05\x25\xb2\xe8\x9d\xc0\xf8\x83\x79\xb2\x0a\x42\xfb\x93\xa5\x96\x81\x7e\xbc\x79\x63\xfb\x1b\x3a\x58\x7d\xc7\x78\xac\x42\x3d\xbb\x38\xf4\xb1\x36\xf0\x5e\x08\x64\x5c\xe1\x73\x04\xf0\xbc\x08\xbc\xa9\xd8\xba\x66\xfa\x92\x8e\xb4\x0f\x6a\x0d\xf6\x4b\xac\x48\x4a\x86\x4e\x75\xac\xf3\xce\x88\x20\x09\x1d\x40\xa2\x9c\xc1\x05\x4a\xcb\x27\x67\x6f\xde\x86\xbe\xa1\xd8\x87\xfb\x43\x2b\x33\x1b\x44\x01\xcc\x75\x5f\x9d\x1f\x9b\xcb\xaf\x08\x8a\xed\xcc\xea\xe4\x16\xb4\x3d\x66\x29\xcd\xcc\x29\xb3\x73\x2c\xb4\x0a\xbf\x41\x48\xaf\x3f\x2c\x5b\xc9\xfd\x9b\x77\x4b\x5c\xf4\x92\x8d\x8e\xca\x66\x91\x06\xdb\x9c\xbd\x15\x56\x92\x62\xcc\x18\x55\x2b\x08\xed\x74\x03\x27\xcd\x47\xb4\x6c\x6c\x8d\x41\xd9\x52\x0c\xb6\xf0\x85\xf4\xbf\x17\x53\x34\xbc\x05\xdb\x28\x5e\x46\xf7\x4e\x20\xd2\x62\x75\xf1\x4f\x7f\xb3\x86\x34\x4b\xd6\x9d\x3c\xb2\xb5\x92\x96\x32\x7e\x03\x34\x9e\xde\x42\x24\x78\xbc\x21\x81\xad\xec\xc7\x5b\xc6\x59\x9a\xa7\x84\xe7\xe9\x00\x10\xc4\xca\xce\x85\x84\xc4\x2a\xc0\x94\x70\x78\x48\xa6\xbe\x89\x3f\xc9\x44\xec\xe9\xc9\xc0\x28\x6c\x34\x9e\x62\xe7\x51\x2c\x93\xcd\xa7\x66\x12\xa6\x0b\xee\x23\x49\x24\xa9\x32\x62\x51\x07\x27\x65\xda\x70\xac\x01\xa0\x97\x8e\xc5\x60\xf6\x98\x4e\x28\x4b\x8c\x68\xdd\x23\x17\x30\xa4\x79\x82\x0d\x74\xc9\x2b\x72\x64\x5e\xe6\x75\xb2\x45\x0f\x18\x71\x57\x09\xa3\xcd\x2b\x57\x55\x03\x17\x74\xbc\x85\xdf\x61\x93\x2a\xae\x7e\x6c\x5a\xcd\xd5\x8f\x8c\xe6\x6a\x53\x55\xbe\xb2\x31\x57\x3c\x36\xe7\xa1\x2c\x89\x96\x48\x3a\x53\x6e\xe6\xcd\x58\xf6\xea\x6a\x2b\x0b\x56\x2d\xc5\x48\x82\x52\x17\x40\xe3\x84\x71\xd8\x1d\xbf\xee\xc6\x40\x52\xfa\x88\x38\xa6\x59\x0a\x46\x12\x29\x63\x18\x2d\x7f\x95\x16\x24\xa5\xf7\x10\x5e\x4f\x06\x30\xc4\x06\xc9\xf8\xc1\xa5\xdd\xb7\xf8\x33\xa4\x2c\x31\x1a\xfa\x5d\x15\x36\xd8\x2b\x59\x24\x09\x48\x8b\x38\xe6\x6f\xc6\x73\x0c\xb1\xcb\xa4\x40\x65\xd2\x3e\x5a\xe6\xf1\xc8\x43\xa9\xb9\xd9\xd2\x61\xdf\x4b\xb7\x3f\x03\x8a\xcb\xc7\xc8\x1a\x0a\x25\x50\x85\xb7\x59\xdc\x54\xb9\x1c\x1a\xd5\xd1\x6b\x9c\xa5\x05\xb9\x26\xec\xe4\x5a\x68\x17\xc9\x17\x3e\x10\x9f\x76\x2d\xa2\x41\x69\x96\xe2\x01\x8b\x73\xe9\x1b\x56\x23\xcc\xe8\xe2\xad\xaf\x1c\x95\x2f\x5f\xbd\xda\x50\x7e\x7b\x7a\xa4\x97\x80\x9a\xf2\x2e\xf8\x72\x1d\xe8\x90\x27\xff\x46\x05\x36\x7b\xcc\x9c\x18\x8c\x9d\xb7\x41\xa2\xc7\x95\x29\xcd\xf8\x28\x67\x6a\x4c\x06\xa0\x1f\x00\x38\x81\x47\x5b\x53\x87\xfc\x02\x52\xe0\xa6\x1a\xf0\x16\x6e\x86\x0a\xd0\x5e\xef\x0f\xc4\x26\x4c\x31\xc1\xbf\x65\x4a\x0b\x39\x7d\xc3\x52\xb6\xa6\x00\xb5\x1f\xf3\x6e\xbf\x00\x41\x91\xc4\xe4\xc6\x6e\xc5\x2d\xd8\x0f\x96\x80\x56\x50\x2d\xac\x7a\x4a\xcc\x39\x19\xd0\xe8\xfe\xc9\x00\xfc\x6a\x5f\x20\xec\xd9\xf5\x0e\x50\x45\x79\x2f\x4c\x80\x64\xcb\x22\xe5\xe5\xa3\x85\x4f\x05\xca\x0f\x63\xa1\x00\x6f\xb0\x86\x4a\x7c\xcc\x3b\x16\x98\x0a\x04\x03\xdd\xb2\x1c\x14\xa1\xc3\x61\xf5\x8e\xe2\xb0\xa3\xe4\x99\xe6\x4a\x93\x94\xea\x68\x6c\x4d\x59\x22\x0e\xe2\xc4\xa1\x72\x62\xff\x36\x50\xde\xd8\x10\xbd\xbd\xc9\x98\xd8\x75\x5e\x3e\x1a\xdd\x72\xad\x47\xa8\x3a\x2a\x20\x9f\x9d\xa6\xaa\x01\x27\xd5\x0d\x71\x72\x5b\x6a\x9b\xf7\xdf\xa1\x11\xb9\xf8\x05\x77\xe1\xec\xfa\x62\x73\x53\xcc\x2e\x0a\xee\xd6\x2a\xee\xac\xb9\x7c\xc5\x47\x79\x93\xa9\xbb\x52\xb5\x99\xa3\x86\xa2\x3a\x84\x92\x7b\x98\x76\x2c\x17\x9b\x6d\x98\x2f\x21\x71\x92\x04\x60\xdf\x78\x73\x93\x7d\x6e\x73\x90\xec\x80\x3d\x76\x6c\xe7\xce\xf0\xa3\x6b\x16\xba\xe5\x13\xfe\xa3\xb7\x78\x6c\x7b\x04\xb7\xe3\x1e\xa6\xdb\x3d\x30\xb3\xdd\x66\x17\x9c\xee\x63\xf7\xdd\xfc\x10\x04\xbd\xb0\xd5\xdb\xf9\x99\xca\x63\x6b\x13\x95\x1f\x1e\x88\xb5\x3e\x2f\xa0\x5f\xd9\xca\x64\xbe\xf1\x50\x59\x64\x34\x67\x7a\xcc\x32\x9b\xf5\xe0\x9c\x01\x0e\x23\xc9\x0f\x34\x61\x71\x98\xc2\x9e\xdf\x2b\xde\x31\xe2\x93\xf9\x0f\x12\x5d\x2b\xae\x5d\x08\x50\xd7\x42\xe3\x2f\x1f\x0c\x40\x76\x99\xb5\xc0\x63\xa7\x70\x56\x68\xa4\x32\xa8\x78\xd9\x88\x7b\x0f\x86\xab\xd9\xc8\x1d\x45\xae\x38\x11\xd2\xc3\xc1\x5c\x74\x13\xd9\x29\x90\x4f\x0c\xac\x83\x03\xed\xd3\x0b\xe7\x70\xe0\x13\xb2\x02\xbd\x15\xd3\xb9\xa9\x50\x3e\xb0\x57\x50\xc7\xca\x12\x94\x76\x9d\xa8\x4a\xbd\xa3\x9c\x45\x24\x05\x39\x42\x8f\x4b\xb4\xb1\xc7\xa1\xba\x29\xdb\xd1\x5d\x3b\xb6\xa6\xbe\xe5\x17\x6e\x85\x05\xc8\x9a\xac\x09\xa8\x0e\x73\xb3\x33\x54\x4c\x4e\xff\x63\x28\x38\xee\xc1\xff\x92\x8c\x32\xa9\x7a\xe4\x8c\x28\xc6\x47\x09\x54\xae\x39\x0d\xa3\x3c\x8d\x99\x81\x29\x62\x48\xed\x84\x26\x4e\x97\xa2\x9c\x80\xb5\x59\x99\xd9\x67\x59\x6a\xc7\x49\x2a\x86\xf2\x04\x47\xd7\xc1\x3d\x4c\x0f\x3a\x73\x48\x73\x70\xc5\x0f\x2c\x6f\x99\x43\x93\xc0\x88\xd0\x47\x76\x80\xd7\x0e\x9a\xe4\xc2\x5b\x32\x9c\x5d\xed\x68\xd5\x97\x6e\x8c\x11\x3e\x3e\x64\x47\x61\xbd\xa2\x25\xba\xa8\x28\x2d\x48\xae\xc0\x4a\xeb\x78\xca\x08\x78\x39\x13\xa5\x4a\x54\x4c\x39\x3c\xa0\xf4\xb8\x37\x82\x9f\xd1\x24\x18\x1f\x7d\x9f\xc5\x54\x6f\x14\x9e\x6b\x47\x05\x22\x87\x37\x76\x12\x92\xe3\x2c\x06\xb7\x86\x6c\x44\x32\x2a\x69\xaa\x7a\xa4\xef\xea\xa9\x22\xa6\xb1\x61\xd9\x96\xe8\x60\x77\x37\xcd\x80\xfc\x95\xdc\x94\xd7\xd2\x23\xdd\x6e\x97\xdc\xbd\xbb\x78\x77\x4a\xec\x2f\x56\xca\xd6\x82\x0c\x05\x2a\x41\x22\x97\xe6\x55\x13\xe0\xa8\xf8\x1b\xf9\x5e\x70\x78\x37\x34\x27\x84\x6a\x98\x80\x24\x0f\x66\xab\x22\x16\x43\xb0\x5e\xf5\x0e\x9f\x16\x8f\x77\x93\x4c\x52\xfa\x78\x9b\xcb\xd1\x16\x1b\x40\xe6\x36\xa1\x6c\xb2\x29\x94\x49\x44\xbd\x72\xee\xb9\x8a\xc6\x10\xe7\x09\xc4\x84\x0e\xc4\x04\x2a\x26\xdb\xea\x63\xc8\xd2\x73\xf0\x0f\x1a\x9e\x37\x50\x22\xc9\x75\x50\x56\x8f\xe0\xf1\x94\xfc\x11\x5d\xdb\x94\x64\x20\x23\xe0\x9a\x8e\x60\xd6\x0c\x60\xef\x7b\xfd\xea\xbf\x8e\x1d\x3f\x32\x33\x3a\xeb\xc9\x2b\x83\x11\x6f\xe9\xe3\xf7\xbc\x30\x0d\x32\x45\x5e\xf5\xc8\xd9\xcc\xcb\xf0\xb9\x24\xca\x13\xb4\xb5\xa0\xbb\xbe\xf4\xca\xc1\x94\x48\x91\xa3\xc3\x9e\xe4\x59\x55\x9b\xfd\xfc\x8f\xff\x65\x94\x3e\x9a\x66\x09\x9c\xfa\x32\xcc\x56\x6d\x36\x32\x8c\x16\xe4\x8b\x57\xff\x65\xa9\xa7\x39\x9f\x85\x56\x58\xc0\x8c\x1a\x80\xe5\x19\x61\xa9\x0d\xe7\x84\x64\x5a\xd4\x73\x96\x55\xf4\x57\x9a\x4a\xad\x3a\x04\xbd\xfa\x41\x38\xd4\x42\xd3\x64\x46\xcb\x47\x2d\x1c\x1e\x2c\x90\x62\x81\x30\x01\x34\x54\x91\xd7\x5f\xbc\xfa\xaf\x79\x73\xca\x3b\x1e\x01\x3e\x89\x4f\x60\x98\xc5\xc0\x28\xf7\xf7\x2c\x49\x20\xee\xac\x5d\xfe\x30\x97\x7a\x0c\xb2\x43\x80\x2b\x6f\xac\x32\xeb\x9b\x59\x1b\xce\x2e\x73\xce\x51\x46\xb0\xd6\x61\xb4\x68\x95\x2c\x5c\xee\x63\x0d\x23\xd4\x24\x15\x4a\x2f\x5e\xf2\xe6\xc7\xcd\x0c\xca\xa7\xef\x86\xdb\x8a\x03\xdd\x1d\xcc\x10\xf3\x4f\xef\x20\x52\x3e\x76\xef\x43\xe2\x6f\x97\x71\xdd\x15\xb2\x6b\xa7\x39\x25\x5a\xe6\xeb\xbd\x06\xc5\x48\x2b\x27\xe0\x03\x90\x81\xbc\x74\xde\xe6\x76\xf5\x49\x4e\xfe\xee\xe7\x39\x16\x0f\x7c\x39\xe5\x40\xc2\xe9\x68\xc6\x8e\xa7\xbe\x6a\x71\x9b\x39\x36\xe6\xed\xe6\xee\xff\x33\x8f\xdd\x5b\x90\x03\x77\x76\xc3\x69\x37\x72\x15\x7a\x3c\x3a\x1b\xbc\x3d\x1c\x5b\xcb\xf9\xac\xcd\xc9\xdc\x60\x5f\xb3\x80\x72\xcd\x9d\xf0\x05\x14\xc8\xae\xa3\x70\xc8\x68\x8c\x28\x30\xe7\x5c\x2d\x3d\xe8\x09\x50\xa5\x17\x81\xa2\x3d\xe8\xeb\xc7\xea\x24\x80\xd9\x51\x15\x3a\x8d\x84\x84\x20\x2f\x6c\x8c\xe7\x16\x51\x0e\x6e\xc0\x7a\xf8\x6c\xc0\x59\x45\x88\x3a\x08\x47\xc2\xec\x5f\x55\xbe\x7a\xaa\xb0\x19\x6f\xe4\xdc\x45\xb4\x76\x8f\x96\x82\x83\x9d\xe9\xd4\x11\xaf\xe0\x51\xb4\x2e\xcd\xbd\x91\xa2\x53\xd0\x74\x75\xa2\xc8\xec\xa8\x12\xed\x5b\x4d\x79\x4c\x65\xec\x56\x79\x78\xa8\xc2\x94\x3d\xf2\x16\x7d\x69\x7c\x28\x4e\xc9\x58\xeb\x4c\x9d\x9e\x9c\x8c\x98\xee\xdd\xff\x49\xf5\x98\x38\x89\x44\x9a\xe6\x9c\xe9\xe9\x09\x3a\xd0\xd8\x20\xd7\x42\xaa\x93\x18\x26\x90\x9c\x28\x36\xea\x52\x19\x8d\x99\x86\x48\xe7\x12\x4e\x68\xc6\xba\x85\xcc\xac\x7a\x69\xfc\x5b\xff\xa2\x27\x16\x8c\x2b\x67\x08\xad\x4b\x72\x02\xdd\x9c\xdf\x73\xf1\xc0\xbb\xa8\xc9\xaa\xad\x4e\xd3\x66\x51\x0c\x7e\xcc\xc0\x7b\x9b\xc0\x85\x4c\xc4\x4f\xbe\x09\xe6\x63\xba\x94\xc7\x5d\xeb\x74\x7c\xe2\xbd\xd8\xc5\xb6\xdb\x2d\x02\x03\x36\x89\x5a\xb7\x63\x37\x6d\x88\x46\x9a\x4d\x60\x27\x27\xb6\x1f\x95\xed\x7e\xe7\x03\x46\xe3\x5c\xda\x1d\x2f\x79\xb3\xbd\x6f\x26\xa5\x53\x94\x75\xf0\xdd\x44\x58\x56\xce\x45\x0c\xce\xf2\x39\x41\xd5\xfe\xd6\x30\xf3\x3b\x23\x0a\x3b\x1f\x37\xda\x7d\xa7\x4a\x43\x6a\x89\x93\x7d\x3e\x99\x12\x2d\xa7\xd6\x31\x2e\xef\x8d\xf2\xe9\x3c\xd7\x46\xe2\xbf\xc7\xfb\x94\x12\x11\x43\xd1\xa7\x80\xab\x97\xbb\xbc\x0d\x8f\x92\x4c\x28\x86\xef\x76\x3c\x6f\x3b\xcb\xdc\xee\xec\xb2\xe4\xa6\xfb\xf2\x0f\xdb\x6c\xdd\x10\xab\x94\x6c\x69\x65\xaf\x46\x50\x0c\xcb\x59\x02\x6e\x7b\x0e\x95\x57\x5c\x8d\x58\x12\x09\xae\xb4\xa4\x6c\x79\x1e\xd4\xe2\xb1\xa3\x2b\x64\x77\x7f\x03\x41\x0c\x3a\xdb\x09\x28\x64\x71\x62\xeb\x00\x33\x63\x62\x08\xa0\x2e\x03\xc6\xa6\x49\xf9\x58\x42\x43\xb8\x76\x34\xad\xee\x00\x23\x52\x0b\x4e\xf6\x69\x5b\x25\x29\xbe\x40\xe9\xf3\x36\x7c\xd7\xd5\x88\x8b\xf0\xf3\xe5\x23\x44\xf9\xa6\x39\xf5\xf3\x63\xce\x96\xe7\x0d\x22\x2e\xec\xc4\x2e\xc2\x1c\x5d\x7f\xc1\xc9\x1f\x02\xc1\xee\x04\x11\x45\x35\x53\x43\x9b\x73\x16\x36\x02\x4a\x8e\xcf\x80\xc2\xc1\x3d\x8c\x2c\xce\xa6\x3e\x30\x8d\xe4\x26\x1a\x0b\xa1\xcc\x29\xc7\xfd\xc4\x79\x27\x4c\x58\x9f\x1f\x26\xc0\x48\x92\x1a\x1a\xe3\x13\x61\x8a\xe9\xad\xa1\xb6\x78\x8c\x29\xab\x82\x07\x08\x7a\x2f\x95\x99\x06\x0d\x8f\xe6\x8f\x11\x4a\x4d\x4a\x13\x95\xa7\x66\xd2\x07\x60\xa3\xb1\x56\x1d\xc2\x7a\xd0\x43\xac\x01\x1a\x8d\x4b\xd3\xa6\x00\xba\xd2\x77\xa9\x8c\x6a\x65\x2b\xf1\x51\xc8\x6a\x70\xa9\x3c\x9d\xc0\x63\x66\xf7\x72\x21\xb8\x3a\x04\x74\xd4\x3b\xee\x90\x22\xe5\xde\xac\x71\x30\x25\x4c\x83\xa1\xd9\xa8\x8b\x48\x91\x8f\xec\x97\x80\x8f\xe9\xc4\x75\x85\x94\x0f\xf4\xa2\xc6\xa8\x33\x1e\xd8\x8f\x3b\x30\xfb\x86\x2b\xcf\x53\x5f\x14\x09\xbf\x0f\xcd\xea\x10\x12\x83\x24\xa8\x4c\x58\x6d\x73\xd6\xe0\xfe\x7f\xc3\x43\x47\xea\xb8\x00\xe6\x98\x8d\xc6\x1e\x96\xd4\x31\x82\xea\x1e\x6c\x7f\xf6\x48\x2d\x5f\x8a\x1d\x3b\x7a\x54\xec\xa8\xfa\xb6\x7d\xbe\x44\x81\x55\xa5\xfd\xd7\x20\xd3\x00\x45\x44\x11\x24\x19\xce\xce\xed\x5b\x64\x39\x1c\x23\xaf\xc8\x11\x22\x19\xd3\x87\x0a\x11\xbe\x2b\xb2\xe3\x1e\x39\x23\x3c\x0f\x67\x6e\xd5\x0b\xb8\x08\xf3\xbb\x89\xcc\x4b\x95\x28\xe6\xda\xf1\x8b\x6b\x91\x3b\x3b\x76\xf3\x94\x97\x47\xd7\x41\x00\xd6\x17\xfd\x5c\x35\x89\x85\xf5\x8e\x13\xd4\x23\xdd\x7e\x0e\xff\x15\xbb\xcf\x31\x17\x60\x81\xc7\xb5\x88\xa2\x00\x99\x76\xca\xd2\x53\x38\x90\xd5\x53\x6c\x61\xb1\x2b\x56\x90\x66\x30\x83\x34\x04\x57\x52\x2b\x42\x67\xf1\x98\x0d\x63\xf1\x59\x54\x15\x68\x57\x88\xfc\x60\x8a\x57\xb7\x0c\x5e\x5a\x3e\xea\x52\xba\x62\xd4\xa2\x79\xc5\x58\x89\x78\xfb\x17\xd8\xb3\x78\x34\x84\xb6\x76\xd4\x27\x6d\xc5\xd8\x3e\x34\x68\xd9\x3c\x3b\x04\x0c\x2d\x1e\x4d\x9d\x4d\x3b\x76\x08\x2e\x5a\x3c\xe6\x44\xd4\xa7\x89\x35\x5a\x3c\x76\x36\x92\x2e\x1e\xbb\xc6\x25\x2d\x1e\x33\xa9\x8a\x4f\x14\xa4\xd4\xa9\x46\x28\x91\x6f\xb4\x3d\xc7\x6f\x6a\xf1\x93\x62\x34\x0c\xe2\xdd\x22\x9b\x16\x8f\x59\x01\xf0\x99\x44\x39\x2d\x98\xea\x1b\x6d\xa6\x79\xb3\xf4\x61\x9b\xa3\xee\xe3\x74\x9c\x42\xd1\x71\xa9\x33\xde\xce\x8c\x11\xd5\x99\x04\x2c\x4d\x80\x61\x5f\xde\x0e\xf3\x61\x02\xab\x16\x8f\xe6\x18\xa7\x1d\x0d\xb1\x4f\x3b\x1a\x43\x6e\x14\x78\xbe\xb6\x76\xe1\x8f\x28\xeb\x58\xcb\x74\x2b\xeb\xb4\xb2\xce\x16\xa3\x95\x75\x36\x1d\xad\xac\xb3\x6c\xb4\xb2\xce\x82\xd1\xca\x3a\xad\xac\x53\x6b\xec\x9f\xac\x63\x2d\x55\x8d\x19\xcc\xfe\x61\x0d\xae\xb3\x16\x32\x94\xa6\x7c\x48\x4f\xd5\x54\x66\x78\xff\xad\x23\xb1\x77\x68\x5e\x73\x91\xea\x92\xf2\x11\x90\xd7\xdd\xd7\xaf\x36\x4c\x07\x5c\x3c\xea\x04\xed\x94\xc7\xb6\xa9\x83\xb3\x63\x99\x47\xe2\xc9\xbc\x4b\xee\xa4\x06\x87\x47\x45\xc2\x5c\xe2\x20\x0a\x55\xad\x52\xd0\x84\xea\x8a\x41\x9c\xa5\x10\x1c\xa2\x95\x14\xe4\x22\xa6\x57\x70\xe7\xef\x30\x9b\xda\xdb\x6d\x05\x11\x50\x1b\xc7\x3e\x80\xb0\x0a\x91\x82\x4d\x30\xf5\x87\xde\x2c\x01\x3c\xac\xc8\x11\xf4\x46\x3d\x12\xdb\x64\x6d\xca\x5d\xcc\xd8\x71\xa7\xec\x1e\x4f\x0d\x71\x95\xf8\x1f\xb3\x6c\xe7\x1f\x87\x09\x70\x9d\xd3\x24\x99\x12\x98\xb0\x48\x87\xef\xc3\x80\x40\xa6\xad\xb3\xb3\x8e\x2b\xa5\x86\x78\x58\x57\x24\xec\xce\x9d\xad\xed\xfc\xd5\x7e\xd4\x97\xdd\xe6\xd6\xb1\x3b\xbd\x99\x91\x4b\x2c\x84\x7a\x4b\xd5\x2a\x6d\xde\x66\xfd\x95\xf8\x4f\x44\xf0\x77\x37\xbb\xba\xc7\x48\x43\x3c\xa1\x36\x1f\x98\x55\xa0\xf2\x24\x31\xe8\x6d\x3d\x66\xf3\x20\x58\xe0\xc9\x5a\x90\x6d\x63\xdd\xac\x69\x29\xeb\x06\xef\xb9\x13\x99\x48\xc4\x68\x5a\xde\x41\xd7\xc7\xa5\x28\x6f\x43\x89\xca\x07\x4e\x04\x34\x87\xe8\x7a\x66\xcb\x5b\x5f\xc8\xd2\xd1\xfa\x42\xe6\x46\x6b\x1f\x98\x1d\xad\x7d\x60\x8b\xd1\xda\x07\x16\x8c\xd6\x3e\x30\x3f\x5a\xfb\x40\x6b\x1f\xa8\x33\x5e\xbe\x7d\x80\xb4\xbe\x90\x65\xa3\x95\x75\x8a\xd1\xca\x3a\x9b\x8f\x56\xd6\x99\x1f\xad\xac\xd3\xca\x3a\xad\xac\xd3\xca\x3a\xbb\x8e\x1a\xc8\x9d\x89\xb8\xf1\x14\x99\x4c\xc4\x2b\x32\x64\xac\xbd\x3a\x12\xdd\x44\x44\xa1\xb2\x88\x79\xc4\x79\x3e\x14\x4d\xad\x09\xbd\x43\x7e\x11\x1c\x6c\x7a\x82\x2d\x59\x9b\x02\x11\xd8\x04\x22\x13\xf1\x91\x3a\xde\x21\xf0\xbc\xcd\xb0\x69\x33\x6c\x3e\x81\x0c\x9b\x31\x55\xae\xf0\x11\x92\xd6\xe5\x09\x37\xa5\xe3\x7f\x07\x32\xfd\x64\xf3\x6d\x0c\xc2\x39\x84\xc1\x3e\x73\x05\x52\x58\xd8\xc5\xce\xb7\x0b\x71\xbf\x0a\x31\xa7\x97\xd9\x16\x3b\x71\x0c\x31\xc9\x40\x76\x2d\x92\x09\x32\x64\xae\xfe\xd7\x0c\xfe\x3a\x08\x3f\xf3\xbc\x99\x2a\x24\x9e\x75\xf2\x4c\xf5\x53\x1a\xf3\x4d\x95\x5d\x74\x15\xae\xf8\xec\x52\x69\x9a\xd1\x4a\xbb\x44\x3b\x77\xda\x77\xb5\xf4\xd2\xa6\x94\x48\x54\xf2\x6e\xb7\x2a\x73\xbc\x7c\x2c\x2c\x4e\xfb\x9f\x1c\xe4\x94\x88\x09\xc8\x42\x31\x0a\xdd\x79\x3a\xa1\xc9\x4c\x44\x5d\x01\xe4\x66\x0c\x3c\x8d\x98\x22\x9a\xd4\xd4\x9b\xf6\x1a\x92\x3d\xab\x7e\xbc\x7c\x34\xab\x38\x34\xa8\x36\x3c\xb7\x5a\xca\xcb\x47\xa3\xe6\x37\xd2\xb0\x09\x8e\x34\x68\x86\x23\xcd\x9a\xe2\x48\xe3\xe6\x38\xd2\xa4\x49\x8e\x7c\xf0\x0a\xd0\xcb\x47\xc3\xe6\x23\xd2\xb8\x95\x8e\x3c\xc3\x7a\xd2\xcb\xc7\x13\x80\xbb\x49\x8b\x1d\x69\xab\x53\xd7\x1e\x4d\x1b\xd4\x48\xd3\x46\x35\xd2\x34\x1e\xee\x54\x05\x7b\xf9\x68\xeb\x63\x3f\x81\x9c\xd6\x98\x10\x51\xb7\xa6\xf6\xba\x85\x36\x80\x93\xa1\x77\xef\x87\x52\x80\x2c\x97\x2e\x1a\xc6\x9a\x77\x97\x7a\x75\x61\xa8\x66\xb9\xb1\xa9\x8f\x5b\x45\x8c\xc6\xdf\x63\x6f\xf0\xca\x79\xa9\x78\x5c\x69\xb2\xb9\xd6\x31\x85\xe9\x2c\x34\x8f\x31\x4a\x41\xd1\x74\xaa\xf4\x30\xde\xdb\xb3\xe1\xa4\x85\x34\xc1\xe3\xd9\x00\xd3\xe2\x09\xd4\x2f\x6c\x3b\xdb\x03\x6f\xc7\x3e\x54\xc5\x1d\x07\xbd\x72\xe7\x5b\x37\xe3\xd1\xff\xfc\xef\x71\xa5\x7a\x4b\x31\x61\xab\xfd\x6d\x3c\x5a\xed\xaf\xd6\x68\xb5\xbf\xa5\xa3\xd5\xfe\x6a\x8c\x56\xfb\xdb\x6c\xb4\xda\xdf\xf2\xd1\x6a\x7f\xad\xf6\xb7\xc3\x68\xb5\xbf\x56\xfb\xdb\x75\x7c\xc2\xda\x5f\xb3\x51\xcd\x65\x5d\xcc\x05\x89\xa0\xfc\xa8\xa9\x66\x51\x11\xf1\xec\xef\xb2\xff\x6a\x56\x07\x2c\xeb\x77\x8b\x35\xc0\xb2\x96\x38\xa7\x05\xf7\xd6\xa8\x7b\x41\x21\x9c\x7b\x72\xb5\x26\xf8\xd2\x22\xb7\x1b\xc3\xc4\x92\x4b\xb8\x51\x54\xbc\xf3\x81\x65\x45\xe3\xf5\x10\x75\x16\x93\x23\xef\x8b\xc7\x46\x2a\x5c\xe8\xea\x45\xae\x59\xb7\xb8\x23\x78\xe7\x31\xa8\xa6\x92\xcf\x5f\x71\x21\x87\x18\xb6\x10\x1f\x55\x60\x8f\x21\x8f\x20\x2b\x6b\xc0\xc6\xb5\x43\xc6\x6d\xa4\xa3\x6f\xfa\x23\xb8\x0f\x9a\xb2\xf4\x14\x29\xa0\xc7\x73\x2b\xfa\xe2\x7a\x50\xfe\x2d\x60\x57\x8a\xf2\xa1\x78\xc8\x28\x77\xc9\xb0\x82\xfb\xae\xf4\xb6\xd3\x7c\x21\x2f\x87\x5e\x2a\xe1\xed\x3d\x72\x89\x58\x5f\x9e\x98\x29\x84\x0f\xb5\xfd\x4f\x9a\x41\xe4\xfd\x2a\xdc\xf0\xb0\x75\xe1\x86\x99\x88\x91\xb6\x6e\x43\x5b\xb7\xa1\x56\xdd\x06\xbc\x68\x0f\x77\xe3\x05\x1c\xc8\x3f\x5c\x7b\x24\x09\x08\xaa\x34\x4f\x34\xcb\x8a\x08\x6c\x65\x5f\x95\x58\x4d\x62\xe8\x22\x41\xab\xf8\x6e\xde\x46\xa3\xf1\x2c\xde\xe3\x7c\x18\xb1\xad\x90\x9c\xb8\x68\x4b\x6c\x66\x84\x15\x07\xbc\xda\x61\x43\x4a\xd9\xf3\x8f\x14\xbc\x40\x82\xad\x0a\xad\xd9\xf6\xda\x32\x74\x3e\x31\x28\x61\x28\xf6\x0a\x06\x51\x6e\x68\x81\x51\xab\x6c\x02\xbc\xe0\x12\x47\xea\xf8\xd8\x4b\x43\x8d\x72\xaf\x27\xe1\x3e\x7f\x29\x71\x89\xbf\x6d\xc2\x7f\xf0\x83\x02\x07\x2a\xc0\x57\xf0\x9f\xe7\x1d\x12\x59\x3f\xba\xad\x09\x8b\x5c\x63\x51\x6d\x1f\x3d\xa2\xed\x53\xaa\x7d\xb1\x97\x3e\x8c\xbd\xd3\x3a\x5e\x86\xdf\xa2\x4d\x18\xdd\x7c\x3c\x87\x84\xd1\x8f\xe4\x9b\x78\x3e\x79\xa3\xcf\xd6\x1f\xf1\x5c\xf2\x46\x5b\x1f\xc4\x56\xe3\xa5\xa6\x73\x56\x47\x83\x3e\x87\xd6\xdf\xd0\xb0\x4c\xd5\x08\xf3\x7f\x1a\x3f\x43\x23\xf8\xd7\x68\x74\x59\x1b\x59\xf6\x31\x23\xcb\x5a\x2d\xac\xd5\xc2\xaa\xa3\xd5\xc2\xe6\x46\xab\x85\x6d\x31\x5a\x2d\x6c\xf9\x68\xb5\xb0\xf9\xd1\x6a\x61\xad\x16\xb6\xc1\x68\xb5\xb0\x56\x0b\xdb\x74\x7c\x62\x5a\x58\x73\xf5\xd6\xdb\x08\xaf\x27\x88\xf0\x6a\x86\x12\x36\x40\xff\x1a\xc1\xba\x86\x22\xba\xda\x68\xae\xfd\x8e\xe6\xaa\x59\x76\x8e\x6b\xf6\x34\xa5\xe7\xca\xbb\xbd\xac\xfe\x1c\x9d\x08\x16\x93\x2c\xd7\xae\xfa\x56\x5b\x83\x6e\x9f\x6b\xd0\x55\x76\xb4\x2d\x44\xb7\x51\x21\xba\x65\x30\x6b\xab\xd1\x2d\x19\xfb\x13\x63\xd6\x56\xa3\xdb\x76\xb4\xd5\xe8\x16\x8f\xb6\x1a\xdd\x8a\xd1\x56\xa3\x6b\xab\xd1\xb5\xf5\x08\x6a\x8c\xb6\x1e\xc1\x82\xd1\xd6\x23\xd8\x7d\xb4\xf5\x08\x36\x1a\x6d\x3d\x82\xb6\x1e\x41\x75\xb4\x5e\xa8\x7a\xa3\xad\x47\x50\x73\xb4\x9e\xa9\xb6\x1e\x41\xad\x09\xdb\x6a\x74\x2f\x2a\x66\x90\xb4\xda\x5f\xab\xfd\x6d\x3c\x5a\xed\x6f\xe9\x68\xb5\xbf\x1a\xa3\xd5\xfe\x36\x1b\xad\xf6\xb7\x7c\xb4\xda\x5f\xab\xfd\xed\x30\x5a\xed\xaf\xd5\xfe\x76\x1d\x9f\xb0\xf6\xd7\x56\xa3\xdb\xfb\x58\x45\xb2\x8f\x19\x49\x6d\x35\xba\x36\x7e\x71\xa7\xed\x6e\xab\xd1\xad\x1f\x9f\x7c\x35\xba\x4a\x2c\xdd\xc7\x2b\x49\xb7\xfd\x32\xda\xba\x74\x6d\x5d\xba\xb6\x2e\x5d\x5b\x97\xae\xad\x4b\xd7\xd6\xa5\xdb\x7c\xec\xbf\x37\x63\xef\xf4\x8f\x97\xe1\xc1\x68\x2b\x22\x6c\x3e\xda\x8a\x08\x4b\x47\x5b\x11\xa1\xad\x88\xd0\x7a\x23\x76\x19\x6d\x45\x84\x2d\x47\xeb\x79\x68\x2b\x22\x6c\x35\xda\xba\x74\x2f\x26\xc6\xac\xd5\xc2\x5a\x2d\xac\x3a\x5a\x2d\x6c\x6e\xb4\x5a\xd8\x16\xa3\xd5\xc2\x96\x8f\x56\x0b\x9b\x1f\xad\x16\xd6\x6a\x61\x1b\x8c\x56\x0b\x6b\xb5\xb0\x4d\xc7\x27\xa6\x85\xb5\x75\xe9\xf6\x3a\xd6\xab\xad\x4b\xb7\x60\xb4\x71\x5d\xfb\x1d\xd7\xb5\x23\xae\xd0\x5c\x8b\x54\xe4\x5c\xdf\x82\x9c\xb0\x08\xce\xa2\xc8\xfc\x75\x27\xee\x61\xcb\x58\xa2\xaa\x1a\xba\x62\x5a\xc2\x78\xcc\x22\x54\x24\x1f\xc6\x80\x65\xe5\x8c\x7c\x8b\xf7\x11\x6a\x6f\x24\x1a\xef\x2c\xd0\x0b\xd7\x69\x88\x1a\x06\xd8\xe0\xd4\xdb\xc2\xcb\x42\x68\x20\x44\x02\x94\x6f\xf1\xa4\xe3\x86\x20\xb7\x3c\xcd\x15\x80\xbc\x71\xa4\xb8\x98\x8c\x0c\x20\x11\x7c\xe4\xe2\x79\xdc\x09\xe8\x91\xf3\xe2\x86\x88\x72\x3c\x3c\xb9\x94\xc0\x75\x32\x45\x38\x60\x81\x2b\xd4\x1a\x52\x31\x81\x18\x49\x36\x86\x11\x59\x39\x92\x6a\x92\x00\x35\xef\xe2\x50\xbc\xcc\x1c\x1e\x4a\xfa\x38\xbf\x9d\x74\x00\x2e\xb4\x69\x27\x20\x6e\x4f\x1b\x77\xa2\x86\x33\x96\x0d\x27\x36\x21\x5f\x8a\x50\x3f\x2a\x7d\x21\x1e\xcd\xa9\xc8\xc9\x03\xb5\x92\x92\xcc\x39\x1e\x66\xfc\x74\x03\xda\x2d\x5f\x5e\x43\x26\xd9\xdd\xfc\xd0\x45\xaa\xb6\xe5\x63\x75\xcc\x01\x54\x8e\x76\x62\x52\x95\xad\x39\x3c\x93\xa3\xdc\x8a\x84\x0e\x95\x81\x6b\x39\xc5\x78\x3b\x2b\x53\x94\x30\x31\xa5\x23\x38\x3c\x54\xe4\xfc\xed\x85\x21\x7f\xb9\x32\xd4\xda\x55\xd9\x73\xe4\x30\x93\x62\xc2\x62\x83\xdc\x3f\x50\xc9\xe8\x20\x31\x72\xe7\x10\x24\x70\x23\x16\x7c\x76\xf4\xc3\xd9\xcd\xbf\xae\xcf\xde\x5e\x1e\xa3\x04\x0a\x8f\x19\xe5\xe6\x54\xe4\xaa\x08\x14\x75\xaf\x33\x2f\x02\x3e\x61\x52\x70\xb3\x3e\xd4\xd5\x28\x99\xf8\x59\xa3\x70\x18\x24\x28\x91\x4c\x20\xb6\x72\x72\x78\x9b\xe7\x3a\x8c\x67\xb9\xf6\xba\x23\x86\x2f\x9a\x03\xc4\xa3\x31\xe5\x23\xb3\xce\x0b\x91\x9b\xf9\x3e\xfb\x0c\x57\x24\x21\xce\x23\x2b\x39\x51\x8f\xb5\x9f\x75\x3c\xa7\x30\xb4\x5e\xd9\x92\x88\x2a\xa2\x99\x5f\x73\xf9\xb3\xd4\x94\x6b\xfa\x78\x6a\xe3\xf7\x0e\x3e\x2b\x5d\x3a\xf0\xe5\x24\x85\x79\x85\xe5\x37\x76\x55\x09\x56\x32\x4c\xc8\x41\xf9\xee\x1e\xb9\x34\xef\x80\xb8\x0c\x40\x1b\x7e\x09\x13\x90\xa8\x79\x3a\xf0\x75\x88\x84\x11\x95\x71\x02\x0a\x03\x0f\x3d\x6d\xb6\xda\x81\x03\x18\x04\xbd\x96\x0b\xbd\x88\x98\x90\xb7\x02\x83\x10\x87\xe2\x94\x8c\xb5\xce\xd4\xe9\xc9\xc9\x7d\x3e\x00\xc9\x41\x83\xea\x31\x71\x12\x8b\x48\x9d\x68\xaa\xee\xd5\x09\xe3\xe6\x70\x75\x63\xaa\x69\xb7\x74\xaa\x4f\x2c\xe7\xee\x46\x22\x4d\x29\x8f\xbb\xd4\x61\x57\x37\x6c\xeb\xc9\x6f\x1d\x4f\xed\xd2\x70\x17\xe3\x5d\xda\x55\x63\x48\x92\xc3\x1d\xf0\xb9\x9e\xcc\x57\x43\xd6\xab\x25\xe3\xb9\x6f\xaf\x7f\x80\x2f\xc3\x79\xb5\x30\xe8\x91\x6b\xa1\x5d\x7c\xac\x0b\xc5\x46\x3a\x8a\xf0\x5d\x7a\xa4\x2f\xaf\xef\x6e\xfe\xd9\x7f\x77\x75\x7d\xd7\x9e\xec\xf6\x64\xb7\x27\xbb\xc6\xc9\x06\x3e\xa9\x7d\xaa\xbd\xcc\x59\x3a\x26\x61\xbf\x91\x53\x2b\xd0\xfe\x18\x84\x0d\xa8\x2d\x21\xda\xf1\xd1\xa0\x5e\x81\xc0\x25\x9f\xfc\x40\xab\x16\x76\xbe\x10\x1c\xc4\xdd\x60\x05\xe5\x20\x83\xd7\x89\x8f\xaf\x61\xcd\xaa\xeb\xbe\xda\x49\x8a\xb4\xa3\xbe\x6b\xc9\xbc\x7a\x77\x43\x43\x65\xfb\xae\x69\x5a\x54\xa8\x5e\xb0\x6b\x3d\xf2\xd6\xab\x3d\xe4\xfc\x5f\x57\x17\x97\xd7\x77\x57\x5f\x5f\x5d\xde\xec\xae\x47\x37\x60\x71\x41\x9b\x42\x43\x00\x38\xdc\x91\x4b\x66\x12\x26\x4c\xe4\x2a\x99\x06\x2b\xc8\x62\x22\x30\x7b\xfa\x9d\xdf\x77\x1a\xf4\xf1\x85\x8f\xb5\xcc\xb6\x59\x66\x7b\x01\x43\x9a\x27\x56\x7b\x3a\x38\xe8\xed\xc2\xe5\xec\x68\x0a\x7d\xbf\x96\xa2\x46\x05\xe6\x0a\x0a\xdf\xda\xda\xed\x43\x21\x97\x1e\xe3\x43\x17\x7d\x50\x61\x3d\x4e\x78\xb4\x16\x3a\x27\x3d\x5a\x27\x59\x4d\xe8\xd4\xf4\x32\x34\xe3\x7b\x8f\x04\x1f\xb2\xd1\x5b\x9a\x7d\x07\xd3\x1b\x18\xd6\x33\x13\x57\xe1\x8d\xd6\x47\xe7\x4a\x46\x5b\xa5\x61\x67\xf6\x65\xf5\xdc\x34\x8d\x39\x69\x9a\x8a\xce\xa8\x1f\x99\xd1\x5c\x20\x45\x23\x41\x14\x73\xf5\xf0\xad\x1d\xda\x59\x94\x9b\x8a\xb1\x69\xc4\x73\x5f\x8f\xcb\xfb\x51\x65\x76\x65\x76\xef\xe8\xac\xde\x54\xed\x88\x04\x8f\x20\xd3\xea\x44\x4c\x0c\xe7\x82\x87\x93\x07\x21\xef\x8d\x1e\x61\x74\xd7\xae\xc5\x5a\x75\x82\x3e\x83\x93\xdf\x5a\x37\xd8\xdd\xbb\x8b\x77\xa7\xe4\x2c\x8e\x5d\x73\x93\x5c\xc1\x30\x4f\x5c\x3b\x81\x1e\xa1\x19\xfb\x01\xa4\x62\x82\x77\xc8\x3d\xe3\x71\x87\xe4\x2c\xfe\x6a\x77\xe2\xec\x47\x83\xbb\x20\x32\xeb\xea\x6c\x78\x27\x6e\xd1\xc7\x32\xad\xf0\xae\x40\x44\x0c\xd7\x62\x5a\x21\x6e\x7a\xab\xb3\x13\x32\x1a\x02\xcd\xf6\x26\xfa\xd9\x81\x5b\xd8\x2c\x5d\x3d\x2c\x08\xab\x75\x71\x3a\x44\xcd\x44\x7c\x4a\x54\x9e\x65\x42\x6a\x45\x52\xd0\xd4\x28\xbd\x3d\x83\x61\x9d\xea\x9f\xe8\xab\xea\x90\x9f\xc3\x8f\xe8\x70\x52\x3f\x1e\x1e\xfe\xe5\xbb\xcb\x7f\xfe\xed\xf0\xf0\xa7\x9f\xcb\x57\x91\x15\xda\x28\xa0\xea\x2d\x2a\x83\xa8\xc7\x45\x0c\xd7\xf8\x0e\xfc\x53\x55\xdc\x2c\xee\x82\xa6\x3a\x57\xbd\xb1\x50\xfa\xaa\x1f\xfe\xcc\x44\x3c\xfb\x97\xaa\x21\x71\x90\xfd\x64\x0c\xb8\x45\x7d\xaa\xc7\x7b\xc2\x1e\x0a\x5a\xd2\xf0\x51\x75\xb3\x96\x9b\xe8\xa4\x14\xff\xf9\xb5\x07\x81\x91\x9e\x1e\x24\xd3\x1a\x5d\x6f\x2e\x15\x5c\x0c\x3b\xe6\xd4\x16\x62\xe7\xe4\x75\xed\xfa\x28\x8d\x92\xb6\xb0\x83\x0d\x03\x0c\x21\xe2\xa0\x65\x0f\x72\x60\xb0\xf3\x2e\xe6\xb3\xfe\x15\x99\x58\x08\xef\x0d\x70\x7c\x7a\xef\xd7\x4f\x4a\xe3\x42\xd3\x25\x07\xaa\xa0\x21\x9e\xda\xa0\xa0\x90\x64\x4c\x12\x96\x32\x17\x6b\xe8\x1a\x34\x29\x72\x64\x7f\xec\x45\x59\xde\x71\x37\xf4\x52\x48\x85\x9c\x86\x3f\x21\x1b\x43\x6a\x34\xad\xae\xd2\x42\xd2\x11\x74\xc2\xe3\xf6\xb1\xf0\x97\x7d\xb0\xf2\x82\xf9\xa7\xad\x2a\x5c\xb8\x4a\x1d\x45\x86\xf8\xe5\xd1\x36\x0f\xfa\x3d\x21\x6d\x01\x33\xae\x9f\x40\x24\x0c\x96\x38\x2b\x70\x06\x28\xa2\x3e\x39\x11\x49\x9e\x82\xea\x04\x31\xc8\x5a\x03\xf8\xc4\x68\x96\x6a\xaf\x04\xb5\x98\x4d\x98\x6a\x22\x8c\x78\x81\x9c\xc6\x5c\x44\xbe\xc8\x75\x96\x6b\x57\x6f\xa6\xd4\xd8\x4d\x28\xb4\x5b\x84\xa2\x00\x15\xb2\xff\xfa\xa0\x7e\x34\x3a\xd5\x1a\x24\x3f\x25\xff\x7d\xf4\xfe\xf7\xbf\x76\x8f\xbf\x3a\x3a\xfa\xf1\x55\xf7\xcf\x3f\xfd\xfe\xe8\x7d\x0f\xff\xf1\xbb\xe3\xaf\x8e\x7f\xf5\x7f\xfc\xfe\xf8\xf8\xe8\xe8\xc7\xef\xde\x7e\x73\xd7\xbf\xfc\x89\x1d\xff\xfa\x23\xcf\xd3\x7b\xfb\xd7\xaf\x47\x3f\xc2\xe5\x4f\x1b\x4e\x72\x7c\xfc\xd5\x67\xb5\x97\x4e\xf9\xf4\x5d\x4d\x02\x6a\x47\xb7\xb1\x72\x41\xb3\x33\x36\x14\x67\xfd\xd8\x2d\x94\xa6\x2e\xe3\xba\x2b\x64\xd7\x4e\x7d\x4a\xb4\xcc\xeb\x11\x93\x82\x29\x35\x7d\xfe\x7d\xf7\xae\xd3\x82\x21\x05\x76\xbd\x37\x07\x5c\x41\x24\x41\x7f\x08\x4b\x8e\x7d\x93\x97\x53\x66\x62\x1e\x5f\x1a\x9f\xfb\x14\x8c\x3b\x21\x64\x10\xf7\xb5\x90\x44\x87\x52\xa4\x3d\x52\x72\x6f\x4c\x30\xe1\xc3\xdd\x77\x0f\x35\xac\xa0\x7e\xb4\xc6\xa0\xd6\x18\xb4\x64\xac\x35\x06\xdd\x5a\x3c\xdc\x5b\x4b\x10\xf0\xc9\xae\x2e\x8c\x85\x1e\x74\xaf\xeb\x68\x41\x32\x91\xe5\x09\xd5\x4b\x3c\x63\x0b\xdc\xe9\xee\xa8\x17\xf1\xc8\x45\x30\x8d\x65\x68\xe9\x62\x1f\x26\x39\x4b\x12\xc2\xb8\x3d\xf8\x38\x81\x77\x98\x49\xb0\xaa\x0d\xa1\xd6\x9f\x3d\x31\x4b\x78\x70\x65\xe5\xca\x71\x39\x8a\x28\x4d\xa5\xc6\xd8\x63\x2c\x3b\x67\x59\x89\xf3\x3e\x31\x5e\x14\x9f\x0b\xc2\x61\xc8\x05\x59\xd8\x19\x33\xa1\x4a\xfb\x65\xe3\x6a\x34\xbd\x47\x6f\x63\x04\x31\xf0\x08\x30\x31\x2d\x87\xe2\x5b\x07\x46\x6f\x23\x97\x7c\x62\xe7\xa0\x24\xce\x6d\x30\x88\x25\x7f\x8b\xe7\x78\x59\x01\x08\x06\x11\x6f\x7d\x03\xe3\x10\x87\x80\x54\x3f\x68\xd8\x21\xbf\x2f\x58\x59\xd5\xc7\x89\x3c\xa8\xcf\x33\x83\x67\xab\x96\x30\x34\xc7\x2c\x0b\xf3\x73\x95\x49\xbe\x04\x67\x60\x7d\xf6\xf9\xc9\xb1\xce\x86\xd8\x66\x33\x2c\x73\x0b\xdf\x49\x93\x6c\xb2\x09\x67\x49\x26\x61\xc8\x1e\x1b\x3a\xa7\x67\xbc\xb0\xc4\xb0\x18\xb8\x66\x43\x66\x7b\xde\x67\x12\x32\xe0\x71\x28\x5c\x8a\xc9\xe1\xbc\x0a\x9b\xbd\x0c\xe6\xb1\x02\x77\xb3\xa4\xec\x76\x91\xb0\xdf\xd2\x31\xd2\xd2\xb1\x9d\xc7\x07\xa2\x63\x0e\x73\xf7\x87\x88\x61\xe4\x79\xfd\xe8\xf7\xf3\x6a\x28\x3b\x22\xf2\xd6\x88\x56\x64\x76\x9d\xe0\x2c\xca\x66\x49\x86\x34\xec\x40\x1a\xb5\xb0\xc1\x6b\x64\xcc\x46\x06\xb2\x09\x4c\x20\x71\x72\x13\x49\x29\xa7\x23\x9b\xdf\xad\x85\x37\xd5\x1a\x45\xcb\xe0\xb1\x64\xf1\x5c\xdc\x3d\xca\xf1\x06\xb7\x13\x41\x63\xbc\x28\x45\x92\x80\x54\x24\x61\xf7\x40\x2e\x20\x4b\xc4\xd4\xa5\x6b\xf3\x98\xdc\x6a\xaa\x0d\x56\xdf\x82\xde\xcd\xed\x5b\x0b\x63\x71\xc5\xfd\x3c\x49\xfa\x22\x61\xd1\x4e\x46\x95\xea\xce\x5d\xe1\x7e\x65\x79\x92\x90\x0c\xa7\xec\x91\x77\x1c\x89\xc6\x59\xf2\x40\xa7\xaa\x43\xae\x61\x02\xb2\x43\xae\x86\xd7\x42\xf7\xad\xf4\x5d\x0d\xb8\xb3\x37\x12\x36\x24\xa7\x58\xdd\x46\x13\x4d\x47\xa8\x3b\x79\x37\x60\xc7\xc0\xbf\x3c\x81\xa5\x0f\x0f\x4c\x2d\x54\x56\x6a\x23\xce\x6f\x71\x26\x43\xab\xec\xdf\x1f\x7c\x9b\x12\x36\x84\x68\x1a\x25\xf5\x8f\xd6\x59\x84\x01\x0c\x45\xc6\x79\x09\xbf\x5d\x35\x75\x97\xe3\x89\x5a\x20\xe3\xc4\x96\x39\xb7\xf5\xdb\x0b\x54\x0f\x2b\xb2\xda\xae\x6a\x54\x49\xdc\x99\x79\xd6\x65\x9b\x99\x50\xfa\xd6\x68\xe8\x8d\x14\x43\x3f\xec\xfb\xe9\x08\x96\x7c\x4e\x12\x88\x09\x4b\x53\x88\x8d\x16\x9f\x4c\x09\x1d\x6a\xcc\xb5\xad\x58\x08\x22\x09\x16\x6b\x5d\x15\x93\x31\xe5\x71\x02\x92\x0c\x29\x4b\x9c\x3d\xa0\x72\xbf\x06\x99\x32\x8e\x66\x01\xeb\x91\x45\x13\x83\xf9\x2b\x8a\x84\xf4\xe5\xe9\x99\x56\xfe\x52\x71\x30\x91\x8f\x94\x10\x60\xd6\xb5\x4c\x06\x89\x88\xee\x15\xc9\xb9\x66\x89\x5d\x8c\x10\xf7\x24\x12\x69\x96\xe0\xd1\xa9\x71\xb2\xc2\x3f\xbb\x01\x95\xba\x66\x76\x75\xf2\xdb\xe2\x12\xfe\xb0\x2b\x43\x6f\x40\x10\x6b\x42\x0c\x83\x47\x88\x1a\xcb\xf3\xbf\x7c\x84\xa8\x54\x58\x02\xfb\x31\xe0\x89\xc6\x3c\x4f\x7a\x0f\x2f\xa8\x92\x5d\x8d\x5c\xba\xf2\xa8\xc0\xef\xdc\xce\xe9\x0b\x61\xb9\x57\x90\x84\x71\xa4\x6f\x2e\xbf\x8e\x30\xae\x0c\x67\xaf\x1c\x06\x7b\xf4\x9c\xd0\x4a\x62\x26\xb1\x0a\xc2\x34\x04\x52\xfb\xb9\xb0\xc0\x80\x10\x9a\x1c\x1d\x9e\x1c\x1e\xcf\xd9\x1f\x0f\x8d\x04\x92\x80\xa5\xb5\x3e\x71\x2f\x2c\x4a\xb1\x34\x4b\xa6\xb8\x8e\xc3\xb8\x43\x98\xf6\x91\xd6\x32\xe7\x7e\x55\x2e\xe9\xaf\x43\x94\x20\x5a\x52\x5f\x5d\xc5\xfe\x6a\x6e\xd2\x32\x77\x54\xfe\xe8\xf0\xd7\xc3\x0e\x01\x1d\x1d\x93\x07\xc1\x0f\x35\x2e\xbf\x47\xee\x84\x11\xa5\x8b\x89\xa6\x22\x27\x1c\x6c\x60\x3f\x3c\x66\x09\x8b\x98\x4e\xa6\x48\xb1\x88\xc8\xb5\xcd\x21\xa6\xda\x27\x1b\x5e\x3e\x32\xed\xe2\xd5\x0c\xc9\x78\x85\xd0\xb4\x54\x8b\x50\x23\xe6\x4c\xe0\x64\x0c\x34\xd1\x63\x1b\x24\xc2\x05\xef\xfe\x02\x52\x60\x0e\x22\x77\x57\x5e\x5c\xd5\xbf\x46\x34\x07\x43\x44\xbf\x81\xe6\x9a\xf8\x7c\x7b\x77\xd7\xff\x06\xf4\x0c\xc9\x30\x6f\xf1\xa1\x3b\x68\x0d\x00\x39\x14\x32\xdd\x03\xda\xd1\x8c\xb3\xb2\x4b\x32\x21\xf7\x81\x84\x8d\x85\xaa\xb5\x97\x64\x6e\x3f\x85\xd2\xa8\x0d\x39\x69\x8c\x43\x64\x76\xb0\x1a\x43\xe2\xfb\xdc\x5c\xf5\x7b\xe4\x9f\x22\x37\x5f\x33\xa0\x83\x64\x1a\x2a\x31\x28\xd0\xe4\xc0\x4c\x75\x60\xc8\x93\xc1\x86\x6f\x81\xc6\x46\x45\x31\xd4\x03\xe8\x7e\xf4\xb3\x22\xee\x3c\xb8\xb5\x35\xcb\x07\x72\xa5\x45\x4a\xc6\xee\xb3\xab\xa9\x97\xee\x64\xf4\xf0\xf4\xf8\xbc\x26\x09\x99\xa5\x70\xee\x99\x17\x47\xbf\xe6\xe8\x86\x85\xbb\xfb\x7d\x80\x65\xac\xa2\x32\xd8\x5c\x43\x27\x9b\x18\xc4\x2d\xb0\x0c\xaa\xc1\x6e\xae\x92\xf2\xd8\xe3\xda\xa3\x3b\x27\x72\xce\x4e\x84\x4e\xbd\xfa\xb1\x5e\x8d\x56\x1e\x6d\x26\x6e\x80\x2c\x32\xb2\x3a\x9c\xb1\xd6\x97\x86\x80\xf8\x34\xa5\x2f\x3f\x04\x00\x9a\xd9\x7c\xd2\x24\x04\xb2\x06\x42\xbb\xe7\x03\xbb\xb5\x30\x7a\x28\xa6\x5e\x5a\xe2\x8a\x64\x42\x81\x9c\xec\x9a\xcc\x5d\x8c\xe6\x3e\x5d\xec\xae\xf1\xfb\xb1\x20\x4f\x5a\x12\x9e\xa7\x03\x90\x45\x66\x8a\xd4\xf3\x00\x29\x45\x26\x5c\xdb\xdb\xbd\x39\xb7\xda\x3e\xd1\x3c\xf9\xe5\x1f\xff\xf8\xc5\x1f\x7b\x76\xfa\x10\xa5\xc0\xc9\xd5\xd9\xf5\xd9\xbf\x6e\x7f\x38\xc7\xe4\xd8\xba\x50\x6d\x28\x04\xb3\xe9\x00\xcc\x46\xc3\x2f\x9f\x34\xf8\x12\x53\x3e\x6a\x53\x91\xaa\xed\x1f\xa7\x34\x18\x60\xf4\x36\xa3\x71\x3a\xd9\xaf\x54\xac\xcc\xc8\x9a\x55\x43\xaa\x39\x6a\x7b\x71\xc6\x74\x94\xdd\x8a\xe8\xbe\x41\xbd\xe6\x02\x32\x09\x91\xb5\x93\xdd\x9d\xf7\xed\xec\x46\xbf\xbc\x7e\x77\x57\xa4\x1a\x60\x3c\x0e\x79\xe3\xed\x4b\xdf\x3a\x4b\x9a\xd1\x49\xef\x21\xd3\x41\x75\x1f\xd0\xe8\xfe\x81\xca\x18\x2d\x5b\x54\xb3\x01\x4b\x98\x2d\xfe\xeb\x9b\x42\x72\x61\x03\xfe\x6c\x91\x33\x31\x9c\x2d\xad\x59\x98\x43\xd1\x64\x65\xe3\x68\x86\x94\x25\x68\x41\xcd\xb9\x66\x29\xb8\x88\xa0\x28\x0b\x26\xbd\xb2\x4d\xbb\x55\xbe\xfc\xd8\x5b\xe5\xeb\xf0\x9d\xf7\xea\x6d\xad\x87\xd5\x8d\x4b\xdc\x63\x56\xe7\x58\x9c\x4d\x08\x69\x59\xdd\x27\xc1\xea\x32\x09\xb7\x5a\x64\x0d\x79\x49\xec\x64\x4b\x7c\x24\x03\x18\x0a\x43\x84\x97\x3a\x3d\x7c\x8f\x60\x8e\xc9\x81\xde\xaa\x25\x2a\x8e\x0d\x1b\x91\xa9\xf2\x68\xec\x0d\x94\x1c\x94\x3a\x41\x77\x48\x9e\x59\xad\x15\xc9\x75\x2e\xa1\x63\xbe\x0e\x52\x5c\x5d\xa7\xc8\x72\x30\xaf\x07\x6e\x7f\x04\x1d\x59\xcb\x6d\x89\x90\x63\x61\x50\xb7\xfc\x59\x37\x4a\x24\xa9\x1a\x03\x96\x17\x81\x47\xe6\xbb\xa1\xf4\x45\x7c\x78\x58\x7c\x8a\x61\x2c\x23\x49\x23\x20\x19\x48\x26\x0c\x33\xca\xb9\x8e\xc5\x03\x27\x03\x18\x31\xae\x3c\x28\xcc\xdc\x1e\x66\xe8\x8f\x61\x2a\x14\x86\xeb\x91\x9b\x4a\xb1\x13\x97\x86\x14\x89\xe2\x68\xba\x35\xcf\x7a\x92\x90\x63\x95\x5a\x26\x07\x08\xfb\xf0\x58\xbd\xc1\x92\x8f\x72\x8e\x6f\x8e\x21\xa1\x53\x1b\x6d\x3a\x64\x9c\x26\xec\x17\x90\xea\xb8\x01\x8f\x93\x01\x61\x71\x6d\xe9\x3a\xb0\x54\x3f\x8d\xc6\xf5\x9c\xbf\xad\x8b\x6a\xc3\xd1\xba\xa8\xea\x4c\xd2\xba\xa8\x5a\x17\xd5\x9a\xd1\xba\xa8\x5a\x17\xd5\xcc\xd8\x5b\x2d\xa9\x75\x51\xed\x3c\x5a\x17\xd5\xea\xd1\xba\xa8\x36\x18\xad\x8b\x6a\xc3\xd1\xba\xa8\x5a\x17\x55\xeb\xa2\x6a\x5d\x54\x9f\x90\xdd\xce\x8f\xd6\x45\x35\x37\x49\xeb\xa2\x6a\x5d\x54\x1b\x8f\xbd\x55\xbe\x5a\x17\x95\x1d\xad\x8b\xaa\x3a\x3e\x2d\x56\xe7\x1d\x3c\x7d\xa3\xea\xd5\xcf\x69\xeb\xa3\x53\x81\x45\xce\x4f\x54\x6e\x1a\x17\x5e\x55\xea\x13\x57\x2a\x0b\xe2\x53\x71\x9c\x47\xa8\xf0\x33\x2d\xcc\x97\xda\xd6\x55\xe1\x93\x0c\xd5\x49\x26\xec\xff\x15\x8e\x8a\x92\x87\xc2\x2a\xbc\xbb\xe7\xac\x7d\xb4\x6c\xac\x3a\x6e\x89\x0f\xe3\x92\xd8\x13\xff\x4d\x03\x6e\x88\xd6\x05\xf1\xe2\x5c\x10\x2f\xa7\x6b\xae\xf3\xcc\xdf\x8d\x25\xa8\xb1\x48\x76\x46\xf4\x0a\x92\xbf\x65\x9c\xa5\x79\x6a\x70\x4e\x19\x7c\x66\x93\x10\x02\xa0\x02\xba\x5a\x8a\x6d\xad\x88\xe6\x46\x16\x03\x16\x3b\xa5\x2c\x31\xdb\x88\xf9\x9b\x63\x3a\x31\xb8\xae\xf2\x28\x02\xc0\x56\x6a\x65\x0d\xe7\x8b\x5e\x78\x53\x68\x9d\xf1\xba\x1e\xbd\xa9\xc7\xc4\x6d\x39\x52\x9c\xe5\x8b\xcf\x77\x9a\x63\x24\xb3\x66\xe8\xf2\x37\x37\xfd\xf3\x72\x9b\x6c\xee\xc9\x32\xe3\x13\x91\x4c\x6c\x87\x7d\xbc\xc9\x08\x6b\xae\x19\x3f\x36\x73\x1f\x80\xa6\x25\xdd\xc6\xa9\x05\x8a\x00\xa7\x83\xc4\x3c\x67\x9e\x0a\x1c\xb9\x6f\xf9\x2e\x50\x9d\x4b\x20\x23\xaa\x3f\x26\xc1\xaf\xaf\xc2\xd4\x52\x5f\x9a\xe0\x37\x75\x25\xf4\xaa\x0d\xce\xc8\xe1\x55\x2b\xd4\x08\xf1\xc2\x56\xd0\xdf\x58\x0e\xaf\x4d\x29\xeb\xcb\xc6\xf5\x8f\x16\xc1\x12\x37\xf8\xe1\x8d\x01\xf8\xc0\xb5\x7c\xf6\xec\xbc\xac\x04\xf9\xae\x52\x5a\x90\x2c\xa1\x45\x5f\x28\xdc\x81\x6f\x91\x07\x9d\x8f\x21\xba\xbf\x71\x9e\xd8\x23\x05\x10\x64\xd3\x11\xd3\xe3\x7c\xd0\x8b\x44\x7a\x62\x48\x82\xfd\xbf\x41\x22\x06\x27\x29\x55\x1a\xa4\x11\x57\x1d\x8b\xeb\x46\x66\x16\xc6\x47\xbd\x34\x3e\xee\x91\xf7\xdc\x66\xb7\x17\x7d\x28\x4b\xb5\x1d\xcc\xfb\x7d\x9d\x8d\x01\x18\xea\x2a\x64\xb9\x7d\xf8\x60\x8a\xcb\xeb\xd5\x29\x94\x5c\x9b\x25\xd5\xf4\x82\x7f\x78\x0f\x78\x4b\xb9\x48\x03\x06\x97\xe7\xe6\xe9\x6e\x2c\xe2\xa3\x01\x0f\xf7\x1e\x79\xb7\xf7\x46\x34\xde\x17\x8f\xf6\x1e\x56\x9b\x6e\xc0\x01\xdb\x84\x07\xbb\x39\xef\xf5\x13\x14\x65\x7e\x1a\xaf\x75\x83\xa6\xbd\x86\xbc\xd5\x1f\xc2\x53\xdd\xc8\x57\xd7\xf5\x50\x7f\x38\xef\x74\x33\x9f\xdb\xa4\x22\xf0\x5c\x3d\xd2\x0d\x98\xe8\x9b\x34\xcf\x37\x66\x9a\x7f\x32\x0f\x74\x7d\xef\xf3\x1e\x78\x9e\x6b\x03\x99\x71\xa6\x19\x4d\x2e\x20\xa1\xd3\x5b\x88\x04\x8f\x77\xe6\x30\x33\x55\x3a\xc3\xf9\x51\x76\x5a\x67\xa7\xaa\x26\x5a\x8c\xa9\x2b\x46\x6e\x34\x2a\x9b\x58\xe2\x7d\x19\x4e\xa0\x40\xaf\xb2\x5d\xe5\x5e\x7a\x27\xc8\xde\x18\xc4\x6c\xd6\x49\x93\x9b\xf8\xad\x78\x20\x62\xa8\x81\x93\x23\xc6\xfd\x3e\x1e\x97\xd4\xc0\xc2\x3a\x19\xd0\xda\x5c\x7d\xfd\xca\xdf\xfc\xf2\xcc\x8e\x68\x60\x55\xea\xe9\xad\xc0\xee\x45\xeb\xcd\xc0\xee\xc6\x61\x9e\x54\x4d\xc1\xd6\x3c\x5c\xa5\x37\xaf\x8b\x72\xca\xaf\x71\xde\x70\xda\x28\x8f\x89\xcb\x44\x7b\x79\x9b\x56\x3b\xae\xa6\x2a\xfa\x85\x38\x9a\x75\x56\xe3\xbb\xf3\xbe\x35\x1a\xb7\xe6\x92\x7d\x31\x97\x7c\xa4\xd8\x94\x3d\x14\x74\x9f\x69\x3c\x4a\x2b\xe8\x6e\x31\x4a\xb9\xa9\xdf\x48\x1a\x41\xbf\x71\x19\xc1\x1f\x27\x12\xe7\x92\x3a\x02\x18\x44\x3e\x7f\x78\x38\x40\x6c\x4f\x53\xc8\xe7\xc5\x4c\xd9\x61\x9e\x24\x53\x92\x67\x82\x57\xb3\x9f\xad\xaf\x7d\x36\x99\x16\x4d\xf2\x0b\xde\x52\x08\x96\x99\x14\x8e\x67\xca\x9c\x73\x43\x83\x8b\x9e\x68\x28\x48\x62\x99\x66\x5a\x49\xd9\x55\x6c\x64\x96\x6f\xf8\x1f\x66\xf3\x16\x01\x88\x95\x09\xcd\xd3\x43\x21\x23\x36\x48\xa6\x64\x4c\x93\xd0\x00\x87\x92\x7b\x96\x24\x6e\x9a\x1e\xb9\x05\x6d\x5d\x0a\x96\x77\x26\x82\x8f\x70\x71\x94\xfb\xc6\x8b\x10\x99\x67\xa3\x04\x28\xcf\x33\xfb\x3e\xc3\x89\xa7\x22\x97\xfe\x7d\xbd\xe0\x98\x08\x1c\x98\xb3\xa4\x53\x6a\xef\xb6\x72\x63\x43\xec\x4f\xae\x8c\x00\xf0\xce\x97\xa5\xee\x94\xe7\xf4\x95\xc3\x55\xa9\xb9\x4f\x26\xc5\x84\xc5\xd6\xbb\xe1\xc1\x86\x8d\xa4\x6d\x03\x9f\x70\x9e\xb9\xe0\x5d\x0e\x23\x8a\x82\x8a\x3b\x45\x76\xcf\xec\x3c\x36\x82\x80\xc7\xd8\xd2\xc7\x48\xf8\x22\xab\xa4\xd3\x4f\x98\x6d\x46\x5c\x82\x1c\x39\xe2\x82\x08\x8c\x47\xcd\x39\xd3\xb6\xc1\xfd\x38\xd7\x24\x16\x0f\xfc\x78\x2b\xaf\x2b\x3a\x5a\xef\x16\x02\xa8\xea\x7e\x5d\x24\xe7\xd8\xef\x5d\x0d\x5e\xa6\x9c\xe9\x73\x48\x72\xae\xa0\x26\x7b\x6f\x4c\x38\xfa\xf2\x0f\xbb\xd1\x08\x96\x82\xc8\xf5\x07\xd1\xfe\x1e\xc6\x2c\x1a\x97\x85\x59\x96\x82\x22\x22\x9f\x51\x8b\x5f\xbb\xc7\x16\xef\x50\xab\x02\x2e\x1a\xbb\x1a\x76\x17\x58\xbf\x66\xcb\x21\x14\x9d\xaf\x31\x4e\xfc\xe2\xfa\xf6\x5f\x6f\xce\xfe\x7e\xf9\xa6\x47\x2e\x69\x34\x2e\xd7\xc4\xe0\x84\x22\xd1\x40\x42\x31\xa6\x13\x20\x94\xe4\x9c\xfd\x27\x77\x0e\xdf\xa3\xf0\xec\x71\xa3\xb5\xda\x77\xe4\xbe\xd8\x9d\xbf\xb1\x76\x70\xb6\xd7\xbf\x8d\xcb\x12\x0a\xb0\x81\xcb\x9c\xf8\x14\xbc\xcc\x53\xab\x22\xa0\xc0\x85\xe1\xf3\x17\xef\x2e\x6f\x31\x2c\x3f\x93\xb6\x52\x08\xc6\x71\xe1\x75\x9c\x69\x00\xe6\x09\xd7\xb9\xb7\x47\xce\xf8\xd4\x5e\xb4\x67\x8a\x29\x92\x30\xa5\x01\xb9\x9e\x13\xdb\xbc\xff\xfa\xe0\x55\x0f\xff\x77\x40\x68\x1c\x4b\x23\xd7\x85\xf0\xb4\x68\x2e\x5e\xd4\x4a\x7e\x6c\x90\x94\x3e\x80\x83\xb6\xd1\x68\x6f\x45\xec\x56\x8e\x9c\x04\x7d\x57\x96\x0d\x2a\x2d\xa9\x86\x11\x8b\x48\x0a\x72\x04\x24\xa3\x3a\x1a\x93\x94\x4e\x49\x24\xa4\xcc\x33\x5b\xe7\x3f\xa6\x9a\xf6\xc8\xd7\x42\x92\xd4\x1f\x62\x83\xf3\x86\x0f\xdf\x2e\xf6\xe9\x17\x27\xbb\xfc\x4f\xa6\x54\x0e\xea\xe4\xf5\xab\x3f\x7d\xfe\xc7\x3f\xbe\xa8\xd6\x70\x45\xb8\x90\xd9\xdb\x52\x6b\x38\xea\x77\xc1\xee\xba\x6d\x15\xc8\xf8\x28\x29\xe3\xd7\x6e\x0c\xa0\xae\x96\x59\x57\xc7\xec\x16\x5f\xd0\xdf\x55\xd5\x6c\xa4\x45\x5d\xb1\x86\x86\x1a\x3b\x15\x7c\xd0\x2b\x56\x8e\x36\x88\x72\xaf\xde\xab\xbe\x3f\x98\x4e\xce\x49\x67\x1a\xbc\x66\x45\x74\x52\x87\xbc\x22\x7f\x21\x8f\xe4\x2f\xa8\x68\x7d\x59\xb7\x0d\x56\x5d\x15\xa8\x89\x60\x23\xa3\xdf\x5f\xf5\x1b\x82\xf8\x3f\x0c\xd1\x34\x33\x1a\xa8\x6a\x41\x06\xcc\x09\xf6\xf0\xa8\x41\x1a\x41\xd3\xed\xc4\x47\x6d\x20\x66\x16\xf8\x01\xd1\xcc\x3a\x1e\xae\x86\xd5\x00\xa7\xed\x10\xcd\x3c\xfe\xad\x50\xfa\xda\x51\xa1\x6a\x2b\x9c\x62\xb6\x14\x09\x7f\x85\x8c\x19\xbe\xa1\x74\x71\xc0\x14\x89\x05\xc6\x5b\xd9\x40\xe6\x31\xab\x11\x46\xb1\x3f\x68\x5c\xcf\xb3\x5e\xd9\xcf\x55\x3b\x35\x63\x4a\x41\x1d\xc8\x89\x58\xa5\x1a\x59\x99\x88\x9d\x74\x66\x96\x15\x97\x78\xc6\x0a\xf1\xcc\x59\x6d\x82\xbd\x19\x71\xc9\x9c\xa7\x88\x72\x9b\x4a\x32\x04\x29\x6d\xec\xf9\x60\xea\xc3\xf6\x6a\x6f\x5e\xad\x93\x94\x49\xa1\x45\x24\x6a\xf4\x38\xab\x7a\xbb\xdd\x74\x08\x04\x1b\xef\xeb\x0d\xe6\xdf\x5f\xf4\x3b\xe4\xee\xbc\x8f\x7d\x9f\x6e\xcf\xef\xfa\x55\x9d\xe5\xe0\xee\xbc\x7f\xf0\x51\x41\x41\xbc\xc0\x87\x26\xea\x1d\x26\xa9\x98\xa0\x8c\x34\xd9\x4d\x69\xd6\xbd\x87\xe9\x8e\x3c\xb5\x09\xbe\xde\x0d\x3b\xdc\xc8\x07\x59\x30\xa7\x34\xdb\x7a\x36\x09\x34\x66\x1f\x28\x9f\xcb\x07\xc4\x86\x77\x2e\x4e\xec\x4a\xc5\x04\x62\x2b\xa5\xfb\x27\x80\xc7\x99\x60\x46\x5e\x6c\xb3\xbd\xb6\x7f\xba\xcd\xf6\xda\x78\xb4\xd9\x5e\x6d\xb6\xd7\xfc\xd8\x9b\x90\xd6\x36\xdb\xeb\x65\x79\xf0\xdb\x6c\xaf\x4f\x3c\x08\xa0\xcd\xf6\x5a\x3c\xda\x6c\xaf\x36\xdb\x6b\xb3\xd1\x66\x7b\x6d\x3f\xf6\x2e\x7c\xa9\xcd\xf6\xda\x6a\xb4\xd9\x5e\xf3\xa3\xcd\xf6\x5a\x32\xda\x6c\xaf\x25\xa3\xcd\xf6\x6a\xb3\xbd\xda\x6c\xaf\x36\x08\x76\xed\x5c\xfb\x19\x04\x4b\xda\x6c\x2f\x37\xda\x6c\xaf\x17\x11\xea\x47\xda\x6c\xaf\x8d\x46\x9b\xed\xd5\x66\x7b\xed\x32\xda\x6c\xaf\x97\x62\x2e\x69\xb3\xbd\xda\x6c\xaf\x4f\x47\xd0\x6d\xb3\xbd\xda\x6c\xaf\x36\xdb\xab\xcd\xf6\x5a\xb9\x8a\x36\xdb\xeb\x25\xa8\x80\xbe\x23\x70\xfd\xec\xa5\xc3\x73\x91\x66\xb9\x06\x72\xe3\xa7\x0c\x52\xa4\x25\x0c\x4c\x95\x25\x82\xfa\x21\x84\x91\xe0\x43\x36\x72\x94\xfd\xc4\xb6\xe1\xed\x86\xef\xe9\x96\x5a\xdf\x3e\xc3\xf8\xc1\x28\xa1\x6c\x77\x07\x4d\xd5\x87\x7e\x8e\x73\x61\x5a\x57\xe1\x45\xc7\xc0\xae\x00\xad\x4e\xf0\x50\x1b\x0e\x69\x68\x99\xbf\x64\x1f\xee\xd8\xf0\x30\xc3\xce\x90\x86\x2d\xd8\xd0\xf7\xbc\xa0\xb6\x9c\xd0\x24\x1b\xaf\xa6\xb7\x66\x21\x17\x53\x4e\x53\x16\x79\x8c\x39\x4b\x12\x11\x59\xfe\x5a\xa5\xb8\x7e\x6e\x3b\x9f\x79\x49\x9a\xe6\x9a\x0e\x12\xd8\xd9\x93\x5e\xdf\x8d\x56\xd3\x85\x56\xd9\xa3\x9b\x32\xb4\x6d\x7c\x3c\x70\x73\x84\x04\x07\x02\x5c\xcb\xa9\xd9\x98\xbe\x88\x6f\xcd\xde\x54\xee\xae\x1d\x36\x5f\xd3\x73\xd6\x84\xd7\xac\xa6\xc7\xac\x19\x3f\x57\x7d\x1f\xd7\xbc\x4b\xa0\x94\xc9\x52\x0e\x5f\xa9\xec\x6a\x26\xe2\xde\x82\x23\xe7\x75\xab\xbe\x88\x8d\x64\x89\xad\xd2\xcb\x47\xc0\x4a\x69\x57\x66\xfa\x7b\x14\xc7\xa8\x2e\xfa\xbb\xd3\x09\x65\x89\x39\x1f\x0b\x32\x34\xeb\x35\x71\x69\x40\x6f\x69\x3a\x3d\x80\xd4\xc5\xa0\x26\xc3\xfb\x09\x76\x6c\x49\xd9\x6e\xf9\xc0\x64\x8e\xab\xbe\xc1\xb9\x4a\x4e\x75\x83\x13\x29\x7d\x44\xf9\x86\xa6\x22\xb7\x7d\xe7\x23\xc7\x7c\x03\x45\xb7\xa1\x07\x7b\xc7\x56\x49\x33\x64\x87\xc6\x3e\x28\xba\xdf\x44\x4c\x20\xd5\x1a\x24\x3f\x25\xff\x7d\xf4\xfe\xf7\xbf\x76\x8f\xbf\x3a\x3a\xfa\xf1\x55\xf7\xcf\x3f\xfd\xfe\xe8\x7d\x0f\xff\xf1\xbb\xe3\xaf\x8e\x7f\xf5\x7f\xfc\xfe\xf8\xf8\xe8\xe8\xc7\xef\xde\x7e\x73\xd7\xbf\xfc\x89\x1d\xff\xfa\x23\xcf\xd3\x7b\xfb\xd7\xaf\x47\x3f\xc2\xe5\x4f\x1b\x4e\x72\x7c\xfc\xd5\x67\x3b\x2f\xb9\xb6\x3d\xa3\x39\x6b\x46\x43\xb6\x8c\x27\xb1\x64\xb8\x68\x9c\x86\xce\xa2\x8b\x24\x9c\x3b\x8d\x4e\xdb\x58\x75\x1a\x3d\x97\x44\x1d\x3d\xcc\xc3\x14\x11\x29\xd3\x46\xb3\x37\xca\x3c\x2d\xe7\x22\x30\x5d\xb1\x28\x3a\x3a\x80\xd9\x38\x14\x93\x06\x4a\x71\xfc\xa5\x08\x44\xe1\xd5\x76\xb4\xc7\x71\xc2\xd2\x2c\x81\x14\xb8\xc6\xf3\xdc\xf5\x62\x1e\x6a\x46\x2d\x6d\x58\x3f\x5a\xda\xf0\x12\x69\x83\x82\x28\x97\x4c\x4f\xcf\x05\xd7\xf0\xb8\x93\x79\xbc\x4a\x1a\x6e\xab\x13\x3a\x75\x4a\xb9\x40\x65\x7b\x8d\x88\xcc\x26\xed\xcc\x54\x45\x19\x8b\x3c\x89\x31\x13\x2f\xe7\x68\x1d\xb4\x29\xd6\xa0\xad\xe9\x0e\x25\x3e\x14\x07\x67\x5f\xe2\x8d\x71\xd6\x46\xf8\x9f\x9c\x4d\x68\x02\x5c\x97\x9e\xe8\xa3\xf9\xa9\xfc\xd0\xa6\x67\x5e\x53\x75\x5f\x1c\x78\xe8\x66\x22\x2e\xce\xf7\x89\xff\x24\xfc\x09\x1e\xf5\x73\x54\xb1\x51\x40\xea\x4b\x36\x61\x09\x8c\xe0\x52\x45\x34\x41\xba\xd6\x0c\xaf\x38\x5b\x32\x3b\x6e\xbc\x14\x89\x32\x42\xbd\xa1\xd5\x84\x7a\xfb\x2d\xa6\x47\x8f\x28\xe3\xb6\xa8\x49\xe6\x1f\x56\xd6\x10\x6c\xc8\x7f\x46\xa5\xd9\xe0\x60\xf0\x45\xad\x78\x20\x44\xe2\xd2\xd5\x92\x69\x31\xbf\x4b\xdc\xe4\xe2\x5f\x1c\x1e\xfe\x65\x66\x53\x64\x98\xd0\x51\xb0\xf3\x2a\xd0\x73\xae\x9a\x62\xea\xa5\x1f\x80\xb9\x60\x39\x10\x9a\x3c\xd0\xa9\x2a\xac\xde\xa5\xf2\x3d\xea\x94\xbc\x3e\x46\x74\xa6\x8a\x84\x39\x62\xf2\xf9\x31\xc6\x6e\x9c\x9f\xf5\xff\x75\xfb\xcf\xdb\x7f\x9d\x5d\xbc\xbd\xba\x26\xd7\x42\x83\x65\x6a\x25\x05\x27\x0a\xe6\x21\xb3\x4a\x7c\x07\xea\x48\x42\xf5\x50\x89\x62\x8a\x3c\x30\x1e\x8b\x07\xb5\xb3\x83\xcd\xa2\x9f\x01\x1e\x50\xbe\x9b\x91\x86\x66\x14\x5b\xd7\xd6\xe0\x30\x73\xe1\x81\xe5\x49\x91\x87\xc7\xf1\x49\x2c\x45\x66\x81\xe0\x3d\x14\x05\xab\xad\xda\x40\xcb\x09\x08\xb8\xbf\xc3\xea\x84\x23\x49\xb9\x2e\x4c\xf5\xc5\x9e\xb9\x9e\xb9\xbd\xda\xdb\xf1\xf1\x18\x7f\x13\x66\x00\x1a\x37\x97\x8a\x7a\x16\xc7\x10\x57\xc0\xff\xe2\xc2\xbe\xcf\xfd\xc7\x4d\x8b\x12\x43\xa4\xff\xee\xf6\xea\xff\x37\x83\xc7\xd3\xac\x5e\x94\x6b\x33\x65\x0d\xa4\xc8\x1a\xdb\xdd\x1b\x97\x36\xdf\xee\xef\x5e\xec\x6f\xe0\x96\xcd\xc4\x56\xdd\xe4\xbc\x5a\x8f\xae\x98\x9f\xa4\x22\x86\x1e\xe9\x07\x27\x6f\xf5\x6a\xa9\x3a\x0d\x95\x40\xcc\x2d\x5c\x33\x9a\x24\xd3\xb2\x88\xa6\x85\x4d\x21\xaf\x14\xd6\x29\x13\xf2\x21\x4d\xd4\xc7\xa6\xc6\x75\x78\xa3\x91\x23\xde\x1a\x7d\xb8\x91\xed\x08\xb3\x91\x18\xb8\xd0\x4e\xb0\x36\xab\xc4\x62\x45\x52\x44\xc4\x2a\xdf\xa5\x48\xda\x0a\x7f\x53\xd6\xd1\xec\x59\x23\x53\x1e\xd8\xfd\x30\xb3\xf5\x32\xe6\x0a\x66\x05\x74\xdf\x4e\x3e\xa8\xe3\x66\x76\x09\x34\x16\x3c\x99\x62\xd8\xbc\x0d\x84\x4b\xa9\xba\x87\xd8\xfe\xe0\x44\xb3\xe0\xf6\x40\x4b\xae\x7f\xd5\x9d\x59\xb7\xf7\x70\xa0\x48\x66\xc3\xf3\xd0\x37\x02\xf1\x47\xde\xf5\x1a\x87\xd0\x00\xe5\x1d\x4f\xa6\x37\x42\xe8\xaf\x43\x0d\x84\x46\x30\xe0\x1f\x4e\x5a\xae\xba\x9d\x50\x9c\xa4\xf8\xde\x2e\xee\x06\x1e\xaa\x72\xf9\x85\x8b\x62\xc7\x9f\xfb\x91\x92\x39\x3f\x53\xdf\x48\x91\xef\xcc\xc4\xe6\x84\xcd\x6f\xae\x2e\x90\x14\xe5\x2e\xce\x84\x6b\x39\xc5\xba\x2f\xf3\xc5\x3b\x83\x62\xf0\xbd\x8b\x94\x29\x9f\x89\x22\xa8\x81\xbc\xa5\x53\x42\x13\x25\x3c\x2c\x9d\xdf\x6a\x56\x0b\x75\x2a\xae\xb9\x3c\x10\x7a\x3c\xa7\xdb\x9a\x03\x35\xff\x5c\xa7\x14\x76\x52\x54\x13\x65\x7c\xee\x71\x8d\x4e\x91\x4c\x42\x04\x31\xf0\xe8\x63\x6f\xfb\xc7\x8e\xd6\x40\xd4\xb9\x16\xdc\x1c\xcc\x46\x90\xe7\x2a\x84\xe9\x38\x90\x96\x51\x05\xbd\x5e\x4e\xfb\xa3\x18\xf6\x83\xc7\x32\x57\x20\x6d\x8c\x92\xcc\xc1\xee\xe4\x77\xf9\x00\x12\x03\x79\xa3\x92\x62\xe9\x38\xaa\xad\x39\x83\xa5\x74\x04\x84\xea\x80\x69\x5a\x10\xe0\x2a\x97\x6e\x13\x99\x26\xb1\x80\xa2\x74\x0a\x55\xe4\xfb\xab\x0b\xf2\x8a\x1c\x99\x77\x1d\x23\xfe\x0c\x29\x4b\x30\x22\x48\x53\x39\xbb\x46\x36\xf4\x53\xe0\x92\x10\x79\x89\x90\x96\x48\x74\x08\x17\x44\xe5\xd1\xd8\xaf\xc9\xe8\xbd\x5e\x6d\x76\x51\xec\xe8\x5a\xd9\x4f\x5c\xff\xb8\x14\xea\x7b\x05\xb2\x31\x02\xf5\xfd\x0e\x04\xaa\x2c\x46\x19\x9c\xab\x42\xcf\x22\x56\x0a\x9a\xc6\x54\x53\x47\xb8\xfc\x0d\x7b\xbb\xa5\x9f\x36\xf9\x52\xf0\x86\xf1\xfc\xd1\x46\x8d\x36\x67\x6a\xb9\xbd\xc4\x69\x49\xe4\xa1\x8e\xbb\x4e\xb3\x2c\x61\xb6\x54\xd2\x4c\x14\xf3\x55\x05\x57\x3a\x4b\xc4\x44\xa4\x13\xd4\x86\xb2\x80\x11\x4e\x28\x8f\x45\x3a\xf7\x32\x23\x44\x42\xa5\xec\x75\x8f\xb4\xd8\x57\x1d\x7b\x62\x14\x4a\x60\x02\x35\x0a\x43\xce\x96\xf9\x36\xb3\x19\xe0\x78\x8c\xc0\xe9\x49\x42\x07\x90\xb8\x30\x2b\xc4\x40\x35\x8f\x81\x1f\x3b\x95\x40\x8a\xa4\xb9\xdc\xc7\x1b\x91\x80\x8d\xcd\xf5\x80\x30\xd3\x3f\x0b\x38\xe0\x24\x4d\xc1\x01\xb5\xc1\x0a\x1c\x50\xaf\x7d\x0e\x70\xc8\x6b\xb0\x7a\x32\x0b\x07\x23\x37\x54\xe1\x80\xcc\x7b\xdf\xe1\xa0\x20\x8a\x44\x9a\xf5\xa5\x30\x6a\x67\x63\xbc\xc9\x4d\x5b\xf8\x0c\xad\x61\x63\x41\xe0\x25\xf2\x82\xea\xcd\x54\x96\xa2\xf2\xa9\xb6\x4c\xc2\x87\xe6\xff\x7f\x4a\x3c\x0b\x49\xcf\x2c\x23\xf3\xb3\x54\xdc\x8b\xe6\x49\x77\xe1\x39\xb3\x83\x26\x12\xdb\x6a\x18\x3b\x1b\xe1\x46\x22\xa2\x09\x16\xfe\xae\x87\x72\x64\x16\xed\x66\x27\x2e\xe5\x62\xa0\x8f\x12\x7f\x2b\xc5\x09\x53\x34\xb4\x78\x13\x26\x17\x31\x94\x7c\xd9\x36\x3c\xf1\xce\xc6\xec\xe3\x7d\x3e\x0d\xc4\xc8\x15\xde\xad\x1c\x57\x9e\xd6\xc2\x95\xaf\x7c\x1b\xca\x89\x9b\x05\x02\x8f\x19\x1f\xa1\x5d\xad\x43\x24\x24\x36\x81\xc4\x11\x81\x7b\xab\x41\x1e\xe2\x91\xf0\x93\xfa\xf3\xe0\x5f\xed\xc3\x8a\xdd\xcc\x68\x29\xf2\x12\xd6\xd0\x92\x5b\xa6\xc8\xc1\x1b\x0f\x80\x1a\xf5\x97\xf7\x91\xc3\x1c\xd8\x2f\x0c\xbb\x69\x2d\x9d\xf7\x8c\xc7\x2e\xd7\xa2\x02\xac\xd0\xc0\xc3\xca\xc1\x98\xc5\xc3\xe2\x32\x6d\x39\x25\xef\x39\x09\xc0\x22\xdd\x9d\xd1\xe3\xc6\x8a\xcc\xde\x46\xd7\x5d\x6d\x78\x0d\x2f\x99\x9d\xe6\x7b\x8e\x7b\x6f\xde\xdb\x35\x9a\xfb\xfc\x7d\xfe\x5b\x3e\x6a\xdd\x35\x47\xfd\x9a\xd6\x62\xfe\x61\xa7\xf5\x22\x7d\x64\xd0\x5a\x33\x3e\x52\x65\x4d\x86\x26\x49\xc5\x18\xbe\x48\x95\xf1\x3b\x1c\xda\xb5\xcc\xab\x10\x33\x39\x62\xcf\x45\x0d\x49\x8c\x38\xf1\xcc\x95\x90\x51\xaa\xe8\xb9\x34\x90\xd0\x8c\x26\xb7\xd9\xee\xf5\xa5\xc9\x5c\x2d\xd3\xb7\xb7\x67\xd5\xa9\x91\x59\xbb\xa0\x73\xc0\xeb\x84\xc6\x29\x53\x0a\x0d\x61\x30\x18\x0b\x71\x4f\x8e\x56\xb6\xd9\xe9\x2a\x36\x52\x27\x0e\xe7\xbb\x66\xf5\xc7\x84\xf1\x24\x44\x45\xa1\x1e\xcc\x75\x88\x73\xc7\x97\x44\x61\x15\xb8\x87\xae\xe9\x80\x0b\x56\x98\x5f\xa6\x6d\x33\x60\xb0\xe0\xa3\x13\xec\xf9\xed\xb9\xae\x99\x4f\xb0\x66\x8b\xae\x1d\x6e\xcf\x96\xc5\x5c\x08\x47\x2b\x3d\x7e\x74\x20\x39\xe1\x22\x02\xd5\x5c\x35\xbe\x6f\x8b\x39\x49\x0c\x36\x05\x13\x30\xfa\x89\x2e\x0d\xb2\x43\xbb\xf4\x21\x66\xf2\xbb\x47\x0f\xcb\x12\x75\x35\xd7\x08\x53\x99\xba\x56\x49\x37\x14\x0d\x49\xa0\x17\x21\xc6\x82\x0b\x97\xe1\x66\x98\xa8\xe0\x88\xd2\x48\xa2\xac\x37\x0f\xf7\xc4\x91\xe8\xd2\x52\xcf\x0b\x2f\x71\xd9\x11\x88\x99\xc0\x3a\xf4\xc5\xb2\x6b\x78\x60\x7a\x8c\x45\xba\xc7\x33\x5e\x43\x5c\x89\x04\x85\x0e\x18\x4e\x40\x4a\x21\x5d\x40\x96\xb7\x5b\xbb\x44\xab\xbe\x88\x31\xa2\xcb\x20\x09\x35\x7f\x1d\xaa\xb2\xa3\xba\xe8\xe3\x81\xf1\x8a\x06\x9b\x60\x38\x84\x08\x05\xad\x32\x80\x2d\xd5\x3e\x2a\xaa\x96\xbb\x2c\x03\x83\x60\xae\x0f\x48\xca\x1e\xcd\x5b\xca\x4f\x95\x5d\xe2\xae\x5a\xf8\xe2\xcb\xc7\x3d\x42\xae\x78\x88\xe0\xed\x98\x5d\x2c\xdf\xe9\x43\xcf\xb4\xf9\xc4\x72\x13\x19\xfc\x80\xb2\xe1\xcc\x48\x87\x32\x6f\x00\xe3\xeb\x98\xc3\x49\xd9\x24\xde\x28\x39\x40\xd3\xb8\x9b\xd4\x6c\xbd\x97\x01\xea\x98\xca\xcd\x2d\x4f\x65\x2e\x7f\x1e\x0e\x10\x52\x97\xce\xb9\x52\x38\x0d\x75\xf6\xb8\x2d\xcd\x56\x92\xde\x83\xc3\xad\x2f\x62\x5b\x0a\x2b\x94\xf2\x49\xa6\xbe\x34\x17\xfb\xc5\xcb\x67\x85\x8c\xc7\x85\xcd\x0e\x28\xd7\xc8\x72\xfd\x10\x62\x62\x44\xed\xc4\xdb\x16\xd2\x2c\x01\x4c\xc1\x2f\xcd\x5c\x54\x17\x28\xb5\x02\xe9\x14\x29\x6a\xa1\x9b\x88\xab\xcc\xd5\x21\xff\xc6\x43\x19\x02\x51\x7d\xd1\xa0\x7e\x78\xdc\x6a\x88\x4c\xf9\xbe\x40\x98\x5a\xaa\x85\x37\x5d\x90\x98\x0d\x31\x11\x52\xbb\x57\x66\x54\xd2\xd4\x90\x78\x45\x1c\x08\x06\x30\x62\x36\x20\x32\x10\xb6\x43\x23\xee\xb9\x44\xed\x8e\x25\x86\x4c\x93\x94\x8d\xc6\x16\x51\x08\xc5\xf2\x0a\xc4\x3b\x15\x13\x41\x63\xec\x27\x48\x84\x24\x0f\x54\xa6\x86\x6f\xd0\x68\x8c\x1e\x4a\xca\x49\x9c\x4b\x2c\x91\xaf\x81\xc6\xd3\xae\xd2\x54\x1b\x49\x19\xa4\x53\x28\xfd\xfa\xdb\x7e\x28\x2b\x47\xdb\x0f\x65\xc3\xd1\xf6\x43\x69\xfb\xa1\xcc\x8f\xbd\x89\x0e\x6d\xfb\xa1\xbc\xac\x1a\x77\x6d\x3f\x94\x8f\xed\x4d\x68\xfb\xa1\xb4\xfd\x50\x56\x8d\xb6\x1f\xca\x9a\xd1\xf6\x43\xd9\x61\xbc\x00\xca\xd5\xf6\x43\xd9\x61\xb4\xfd\x50\x16\x8f\xb6\x1f\xca\xfc\x68\xfb\xa1\x2c\x1d\x6d\x3f\x94\x9d\x47\xdb\x0f\xa5\xed\x87\xd2\x96\x89\xde\x6e\xae\xfd\x2c\x13\x4d\xda\x7e\x28\x6e\xb4\xfd\x50\x5e\x44\x31\x5c\xd2\xf6\x43\xd9\x68\xb4\xfd\x50\xda\x7e\x28\xbb\x8c\xb6\x1f\xca\x4b\x31\x97\xb4\xfd\x50\xda\x7e\x28\x9f\x8e\xa0\xdb\xf6\x43\x69\xfb\xa1\xb4\xfd\x50\xda\x7e\x28\x2b\x57\xd1\xf6\x43\x79\x09\x2a\xa0\xd2\x31\xdb\xa9\x02\xe8\x26\xc5\x8a\x5c\x10\x7a\xa9\x36\xc0\x20\x1f\x0e\x41\x22\xe5\xc2\x37\xcf\x05\x4f\x15\x75\x19\x67\x9d\xac\xa0\x3b\x58\xf7\xc8\xe5\xeb\x2c\x79\xdc\x15\x23\xc0\x4a\x9d\x45\xa4\xf8\xe5\xbb\xaf\x17\x54\x46\xda\x39\xaa\x70\xd7\x18\x69\x5c\xf3\x3b\xbe\x9b\x7f\x7c\x09\xc0\x17\xe5\x8f\x39\xb8\x47\x89\x50\x2e\xc2\x1d\x81\x15\x8d\x29\xe7\xe0\xf5\x3d\xa6\xd1\x8e\x32\x00\xe0\x44\x64\xe0\xbc\xd3\x94\x28\xc6\x47\x09\x10\xaa\x35\x8d\xc6\x3d\xf3\x26\xee\x81\x5d\x44\xa3\xbb\x5f\x94\x96\x40\x53\x1f\x97\x9f\x52\x66\xa7\x22\x34\x92\x42\x29\x92\xe6\x89\x66\x59\x98\x8c\x28\xc0\x84\x1a\xcb\xa8\x02\x30\x30\x2a\xae\x08\x61\xef\x14\x6f\x73\xcb\x12\xe5\xd2\x74\xa8\x6d\x76\xb0\x1e\x78\x9a\xe9\x69\x88\xe3\x05\x32\x64\x52\x69\x12\x25\x0c\xb9\x35\xbe\xd1\xe6\x4e\xe3\x7c\x1d\xcf\xab\xb9\x5b\xa9\x72\x4b\xe5\x31\x8a\xad\x99\x56\x36\x2a\xb6\x98\xd0\x4d\x15\x33\xe5\xc4\x7c\xd5\x21\xd4\xd7\x4d\xb3\x80\xf6\x2b\x45\x50\x7b\xce\x62\x67\x77\x3f\x95\xa6\x2b\xd5\x8b\x2d\xc2\x86\x0b\x44\xc7\x14\x07\x8f\x9c\x9d\x4a\x36\x47\x21\x50\xb8\xb6\x17\x33\xc7\x00\x37\x80\xc3\xc4\xe0\x00\x44\x60\xf8\x2b\x5d\x82\xf5\x1f\x1c\xe9\x4b\x4c\xf1\x2d\x28\x45\x47\xd0\xdf\xd1\xd1\xb0\x4c\x23\x43\x5f\x43\xb1\x31\x88\x0a\x89\xcd\xae\x0d\xbf\x14\xd1\x99\x55\x31\x88\xa4\x76\x4d\x41\xf8\x79\x90\x4c\x6b\xc0\x4d\xc5\x0a\x7b\xe8\xab\x9c\x4d\xc0\x3f\x9c\x89\xf1\x7c\xeb\x27\x29\x1e\x36\x44\x9d\xc7\x36\xe2\x72\x00\x64\x20\x19\x0c\xc9\x90\x61\x18\x27\x06\x56\x76\x6c\xc1\x25\x6a\xad\x00\x4a\x19\x7d\x57\x70\x2f\xcb\xfa\x75\xf5\xc8\x3f\xdc\xc2\xb4\xcc\x79\x44\x4b\xb5\x6c\x31\xc3\x94\x0d\xc9\x08\x03\x33\x9d\xb4\xf8\x87\x57\x7f\xfe\x92\x0c\xa6\x86\xa5\xa1\x64\xa5\x85\xa6\x49\xf8\xc8\x04\xf8\xc8\xc0\xca\x1e\xcf\x6a\x8e\x64\x80\x00\x76\xf3\xb0\x0b\x7f\xfd\xf9\xfd\xa0\xca\x63\x4f\x62\x98\x9c\x94\xe0\xd7\x4d\xc4\x68\x51\x73\xab\xdd\x43\xb6\x77\x54\x89\x16\xa0\x99\x48\x58\x34\xad\x8d\x68\xbe\xf2\x17\x19\x8b\x07\x2b\xeb\x2f\xc0\x9e\x22\xdd\x2a\x13\x59\x9e\x58\xa3\xf3\xd7\x21\xbb\x38\x57\x30\x9f\x03\xb8\xf0\x5c\xa0\x99\xd4\x4d\x31\x5b\x37\xdd\xc6\xe3\xfa\x57\x0a\x97\x5b\xe2\x0c\x79\xa1\x00\x18\x2a\x42\x5f\xd3\x24\x19\xd0\xe8\xfe\x4e\xbc\x11\x23\xf5\x8e\x5f\x4a\x29\x64\x75\x2d\x09\x35\xd4\x72\x9c\xf3\x7b\xdb\xc1\x21\x94\x48\x10\x23\x23\x5a\x65\xb9\xf6\x89\x0c\x8b\x3e\xd8\xe6\xcb\x7b\x22\xec\xd5\xa0\x62\x16\x78\x64\x85\xae\xe3\x52\xb5\x2c\x46\x96\xe7\x57\x65\x64\xfb\xfc\xd5\x1f\xfe\x64\x51\x97\x08\x49\xfe\xf4\x0a\x63\xb6\x55\xc7\x1e\x62\xa4\x6d\x86\x51\xa4\x34\x49\x8c\xda\x50\x46\x4a\x03\xe8\x45\x48\xf8\xc1\x71\x50\xd7\x47\xb7\x8d\x45\xa9\xbb\xbb\x7f\xa2\x1c\xc5\xb4\x82\x64\xd8\xb1\x59\x49\x41\xad\x39\x44\xc6\x70\xe8\xa8\x0f\xa6\x86\xed\x81\x00\x34\x11\x49\x9e\xc2\x05\x4c\x58\x13\x1d\xf8\x2a\xb3\x79\x55\x3f\x61\x0a\x13\xc0\x06\x89\x88\xee\x49\xec\x2e\x96\x22\x4f\x66\x2b\x81\xef\x0e\x85\x5d\x63\x70\x6a\xc4\xde\x2c\xfd\xfe\x4a\xd4\x4d\x4a\xb3\x2c\xe4\x08\x49\xfa\x50\x01\x06\x9e\x49\x2c\x57\x50\xb3\x9e\x4c\x6d\x33\x73\x5d\x23\x73\xd7\x7d\x91\xa1\x9b\x3b\x4f\xb1\x73\xd4\x49\x7d\x1b\x75\xb1\xfa\x86\xba\xea\x15\x13\xfa\xd3\x90\xe1\xbf\x6d\x56\xc9\x5c\x56\x64\x48\xac\x0b\x88\x61\x05\x00\x83\x3e\x48\x92\xeb\x76\xda\xab\x65\xdd\xac\x17\x72\x54\x81\x0b\x5f\xd1\x9a\x8e\x92\x0c\xa4\x62\xca\xf0\xe5\x1f\xf0\x40\xd9\x9e\x84\x85\x09\xf0\xe3\x00\xc1\x1e\x6e\x2c\x9f\x5c\x9f\x52\xf6\x45\xec\x26\x44\x52\x68\x4b\x47\x2f\x10\x6b\xab\x52\x6d\x83\x0c\xf5\x63\x93\xca\x1f\x0a\x68\x56\x29\xa5\xf9\x25\x90\x4a\x7b\xd7\x4b\x22\x90\xf8\x7d\xcf\x95\x3e\x86\xc5\x37\x44\x06\x90\x30\xba\xcd\xad\x52\xc2\x8a\xf2\x68\x0f\x4a\x49\xa4\x77\x7a\x60\x8f\x58\x2f\xb8\x39\x13\xee\x51\x72\x78\x7a\xf8\x51\x89\xa4\x05\x91\x14\x19\x1d\xd5\xea\xe5\x33\x03\xa9\xd9\x69\xcb\x85\x26\x8c\x1a\x84\xd7\x43\xd9\x35\xbc\x0b\xe2\xa2\x8e\x0e\x56\x49\xb2\xde\x51\x0f\x60\xa7\x20\xd8\x7c\xec\x07\x3a\x25\x54\x8a\x9c\xc7\xce\xbe\x14\x0c\x7c\x6f\x67\x5e\x7c\x2d\x38\x14\xcd\x3f\xab\x75\x2a\xd0\xa2\xcf\x38\x79\xdd\x7b\xfd\xea\xa5\x70\x2a\xfc\xc2\x19\x4e\x75\x1d\x38\x95\xa5\x4f\x1f\xf5\x5b\x7d\xc5\xfb\x86\xbe\xf7\xad\x33\xb1\x14\x05\xed\x99\x2f\x97\x8d\x3f\x3d\x48\xa6\xa1\xd4\xe3\xef\x08\x15\x17\xa3\x1f\x96\xaa\x32\x1c\x2f\xea\x24\x51\x13\x48\xf5\xca\x60\xa8\x7c\xf0\x84\x74\xcb\x11\x28\x3c\x6e\x8b\x2c\x5c\x6a\x05\x09\x2b\x03\xea\xe0\x80\x1c\xd9\x3b\x0f\x6d\x42\xf3\xf1\x47\x45\x2d\x07\xb4\xcb\xc7\xac\x46\x8d\xcd\x99\xdc\xf9\x8c\xa2\x0d\x2e\x6b\x10\x82\x7f\x87\x31\x9d\x00\x26\x72\xb3\x84\xca\x04\x7d\x8e\xb7\x76\xed\x64\x90\x6b\x02\x7c\xc2\xa4\xe0\x29\x70\x4d\x26\x54\x32\xac\x8a\x53\x6a\x71\xfd\xd9\xd1\x0f\x67\x37\x18\xd0\x70\xec\x4a\x52\xb8\x55\xe6\xca\x97\xaf\x29\xaf\xa4\x34\xdd\xda\xed\xf3\xeb\x30\x30\x44\x9a\xeb\xd7\x65\xde\x93\xe6\x3a\xb7\x6d\x59\x1e\xa3\x24\x57\x6c\xf2\xb1\x28\x89\xcb\xb0\xbf\x60\x3b\xed\xf3\x4c\xb6\x7f\x01\xa8\xb9\xc4\x7d\x34\xad\x2f\x48\xd0\x9b\x73\x98\x1c\xaa\x90\xb4\x57\xf6\x81\x3b\xd3\x93\xab\xa5\x61\xc3\xe7\x7c\xc5\xc5\x39\x11\x02\xeb\xc6\x7c\x5c\x23\x54\xcc\xd5\x39\xae\x70\x3b\xb0\x56\x03\x92\x2b\x79\x7c\x17\xd7\xb7\xe5\x22\x24\x56\x5d\x12\x71\x8f\xf4\x8b\x1f\x8b\x4a\x35\x58\x3f\x2d\x28\x91\x20\x47\x45\x51\xf1\x11\x70\x90\x28\x24\x98\x29\x2b\x6d\x55\xc9\x80\x2a\xeb\xe4\xb9\xb8\xbe\xb5\x36\xdb\xed\x60\xb6\xb3\x98\xbd\xbb\x84\x6a\x38\xbe\x4d\x63\xd8\x41\xb8\xad\xf6\x4c\x0b\x06\x2b\x03\x18\x54\x4a\xed\xc4\xe4\xaa\x4f\x68\x1c\x4b\x74\xfb\x38\xd1\xa7\x54\xa9\x32\xf8\x16\xb0\x2a\x0c\x55\x50\x5e\x53\x09\xdc\x48\xe2\x0a\xc0\x92\x8b\x3c\x4b\x98\x75\x23\x94\x1f\x28\xaa\xd9\x60\x93\xaf\xed\x91\xb6\x8e\x9a\xb7\xb3\x92\x57\x83\x0a\x89\x5d\x8b\x52\xae\xd8\x3d\x09\x4a\x24\x93\xa2\xa0\xf0\xcc\xae\xb9\x13\x81\x26\xf1\xb0\x6b\xbe\x06\xe5\x46\x3b\x06\x5c\x4b\x73\x34\x67\x77\x8b\xdc\x98\x37\xe7\x78\x9a\xc2\x84\x6c\x02\xe8\x1f\x77\xe5\x37\x5d\x19\xb7\xa2\xc4\xb1\xf5\x0d\xdb\x2a\xd3\x40\xa5\xa7\x68\xb8\xaa\x1d\x4f\x22\xf9\x58\x88\x30\x6b\xec\xb8\xb8\xbe\xb5\x94\xd0\x7e\x7c\xe8\x4e\xbb\x68\x97\x0a\xaa\xb6\x33\x06\x7e\xb4\x2a\x43\x75\x34\x8f\x99\xe6\x7e\xae\x5d\x77\xad\x40\x96\x1a\xe2\x5f\xad\x64\xbb\x1a\x6f\x57\x40\x65\x34\xde\x05\xfe\x2b\x08\x81\x9d\x94\xc4\xc2\x46\x02\x0c\x85\x44\x95\xb8\x8b\xe4\x3d\x11\xe2\x3e\xcf\x36\xa1\xe8\x6e\x1a\xdb\x70\x6d\x23\x02\x51\x79\xe2\x93\xa2\xe9\x31\x57\xbb\xf8\x7b\xab\xb2\x0f\x68\x2b\xf1\xe0\x44\x45\x02\x85\x98\xd5\x9b\xce\x93\x5c\x69\x90\x5f\x33\xa9\xf4\x81\xaf\x17\x8d\x18\x6c\x6d\x22\x87\xe5\x1b\xfe\xc1\xf4\xd8\x95\x6e\x3c\xec\x54\x2f\x99\xbf\xdd\xc4\x87\x46\xa7\x3d\xbc\x16\x1c\x0e\x7b\xb3\x62\x57\x20\xe5\x81\xac\x2d\xe5\x29\x6e\xe9\x0a\x12\x1b\x2f\x8a\x17\x4a\xb8\x72\xe7\xca\x56\x9a\x37\x78\xfa\xa7\x40\x13\x8a\x25\xe2\xf0\xee\x71\x51\x66\xd2\xd6\x8d\xb2\x75\x32\x85\x13\xf4\xa6\x65\x10\x95\x4a\x49\x69\xb1\xfc\xb3\x77\x91\xe7\xb6\xc6\x00\x5b\x7e\xd4\xd5\x0b\x79\xc3\xf8\xfd\x96\xe8\x57\x8d\x2e\xb9\x9c\x9b\xad\x52\x4f\xdc\xfa\x68\x19\xb7\xc1\x77\x86\xc5\xd0\x81\xc8\xb5\xaf\x49\xa2\x4a\x8a\x23\xe3\xff\xb6\x7b\x81\xf6\xf6\xcc\x56\xec\x5b\xa4\x23\xaa\x8e\x35\xfa\x78\x25\x50\x4d\xb9\xa6\x58\x5b\xf4\x42\x44\xf7\x20\x49\x62\x96\xd1\x23\x45\xe0\x4b\xa5\x9a\xa5\xcc\x61\xcb\xa8\x8b\x5d\x2d\x1d\x90\x8d\x21\x05\x49\x93\xa2\xa8\x6b\x0d\x50\xbf\x71\x84\x33\xcc\x5a\x8e\x49\xb1\x45\xd1\x5c\x19\x46\x73\x0e\x2f\x17\xdd\x95\xd2\xa9\xaf\x74\xcb\x38\x86\x1b\x3c\x32\x85\x66\xfd\x4c\xc4\xe5\xc4\xb3\x5c\x81\xec\x86\xb4\x40\x97\x7b\xa3\x42\x20\x4e\x0c\x83\x7c\x34\x62\x7c\xe4\xa8\x33\xd2\xf4\x52\xb9\xed\xa0\xe9\x60\xa4\x77\x24\xc1\x16\x9c\x45\xe9\xc1\xc6\x97\xb1\xf2\xfd\xa9\x88\xed\xed\x83\xa9\xd5\x06\xfd\xce\x16\x01\xd2\x57\x9c\x08\xe9\x4a\x23\xd0\x38\xc6\xb5\xcf\x7f\x21\x5e\xad\x7e\x55\x27\xc4\x71\xd8\xc8\xee\xf0\x54\x09\x2c\x2a\x1f\x18\x61\x27\x97\xdb\x56\x08\xdd\x95\xf0\xef\x44\xf4\xab\xf5\x7e\xce\x78\xb1\xc5\xe7\xe5\x80\x39\x4a\x34\xa4\x99\x90\x54\x4e\x67\x5d\x98\x86\x48\x19\x14\x30\x00\x9c\x81\x54\x5f\xc4\x48\xc7\x17\x6c\xfc\xc4\x76\xf2\x5d\xb0\xf7\x0b\x71\x0c\xa9\x20\x17\xc4\x43\xd4\xd0\x6b\x15\x8d\x21\xce\x31\x7a\x7c\x94\x53\xec\x34\x6e\x4e\xb1\x33\x76\x4f\x5d\x58\x9e\x45\x86\x10\xf0\x17\xd2\x04\xa6\x18\x24\x83\x55\x38\xcd\x2f\x58\xcd\xd3\x86\x06\xda\x46\xcb\xd8\x74\x35\x44\x09\xde\x15\xbd\x1f\xf0\x63\x61\xc2\x22\xed\x1f\x1a\x2e\x43\x9c\x88\x86\xfe\xae\x7d\xe1\xaa\xff\x45\x60\x88\x91\x56\xc5\xa7\xb8\xa8\x12\xac\xef\xf9\x9e\x1b\x26\xb1\x1c\x17\x0b\xc4\x5b\x83\x72\x28\x57\x57\xb7\x62\xc5\xf1\x0d\x50\x5a\xf0\xed\xdb\x16\x4b\xaa\x21\x94\xef\xee\x71\xdb\xc9\x53\x56\x47\xfe\xa7\x72\x54\x5f\x57\x3a\x3c\x93\xa3\x3c\xb5\x35\xbc\xc5\x4c\x19\x65\x8b\x73\x68\xd7\x32\x2c\xeb\xfc\xed\x45\x39\x85\xa1\x1c\x9b\xed\x13\x40\x8c\x28\x54\xd3\xde\x39\x6b\xf0\xbc\x32\xca\x59\xb0\xa2\x16\xb4\xd5\x69\x71\xce\xa2\x17\xde\xe6\xb5\x58\xc6\x33\xc3\x8d\x51\x86\x28\x6c\x7a\x3c\x1a\x53\x3e\x42\x33\xb8\xc8\xcd\x7c\x9f\x7d\x86\x2b\x92\x10\xe7\x91\xeb\x1b\xe1\xe3\x9f\x3f\xf3\xd6\x3f\x57\xc2\x07\xdb\xd7\xa9\x88\x66\x7e\xcd\xe5\xcf\xb2\xac\xfa\x94\xb0\x1e\xf4\xc8\xc1\x67\xa5\x4b\x07\xf6\xed\x99\x14\xe6\x15\x2e\x74\x1a\x57\x95\x30\x8d\x07\xe1\xa0\x7c\x77\x8f\x5c\x9a\x77\xa0\x47\x24\x00\xb0\x14\xdd\x3b\x28\xc0\xd7\x21\x12\x46\x54\xc6\x09\x66\xdc\x0d\x83\x50\x62\xf3\x72\x1c\xc0\xf0\xf4\x61\x3c\x1d\x17\x7a\x91\x75\x72\xc3\xb4\x08\x4d\xd5\xbd\x3a\xb1\xa2\x4c\x37\xa6\x9a\x76\xb1\xd7\x86\x25\x1a\x27\x56\xbd\xee\xba\x2a\xa7\x5d\xea\x70\xaa\x1b\xb6\xf5\xe4\xb7\x2e\xb3\xaa\x4b\xc3\x5d\x8c\x77\x69\x17\xeb\x8d\xee\x1e\x2b\xfa\x11\xc2\x0a\x6a\x69\xba\x35\x8a\xdd\xce\x8a\xa7\xa1\xd8\x39\xc2\x00\x5b\x85\x14\xc5\xad\x43\x04\x83\xab\xe7\x5a\x39\xc8\x97\xd7\x77\x37\xff\xec\xbf\xbb\xba\xbe\x6b\xcf\x73\x7b\x9e\xdb\xf3\x5c\xe3\x3c\x03\x9f\xd4\x3e\xcb\x41\xff\x59\xa4\x12\xce\x14\x97\x2b\x65\x54\xbf\xa0\xe0\xac\x4b\x3e\xf9\x81\x1a\x81\x2f\x93\xa0\x50\x16\x31\x72\xe3\x22\x2f\xaa\xbb\xc1\x76\xdb\x3a\x7f\xf6\xd1\x59\x1f\x31\xb6\xaa\xc1\x98\x95\xeb\x52\x21\x80\x45\xbb\x56\x6e\x6f\x77\xfe\xaf\xab\x8b\xcb\xeb\xbb\xab\xaf\xaf\x2e\x6f\x3e\x6a\xb0\x41\xcd\xe2\x6e\x55\x6e\xbc\x23\x97\xcc\x24\x4c\x98\xc8\x55\x32\x0d\xf5\x61\x17\x13\x81\xf9\x78\x35\x6e\xd4\xb3\x69\x28\x81\xbb\xf0\xb1\x96\xd9\x36\xcb\x6c\xab\xb1\x17\x35\xea\x7a\x34\x85\xbe\x5f\x4b\x91\x36\x84\xc2\xb7\x56\x65\xf7\x26\xef\x45\xf8\x74\xe8\x4a\x00\x54\x58\x8f\x13\x1e\x8b\x7a\x03\x46\x0a\x4d\x33\x5d\xa3\xf8\x7f\x23\xe5\x3c\x9b\xa9\x7c\x69\xe3\x14\xde\xd2\xec\x3b\x98\xde\x40\xcd\xf2\x21\x33\xae\x86\x04\x22\xc3\xe8\xc8\x3d\x4c\xad\x07\xf2\xdc\xbf\xac\x4e\x99\x93\xbd\xac\x86\x7a\x0f\x75\x2a\xd5\x36\x59\xc6\xf4\x1e\x6a\x04\x2e\xfa\x31\x57\xd0\xd3\x6c\x21\xca\x69\x66\x4f\xeb\xed\x1e\x69\xb6\x84\xe9\x13\x94\x6d\x3d\x2c\xb3\x7b\x47\x67\xf5\xd6\xd5\x15\xc4\xc4\x70\x2e\x78\x38\x71\x41\x5b\x5d\xa3\xb1\x76\x2d\xd6\xaa\x13\x8c\x4c\x39\xf9\x2d\xfe\x87\xdc\xbd\xbb\x78\x77\x4a\xce\xe2\xd8\x05\x0f\xe7\x0a\x86\x79\x62\xc3\x80\x55\x8f\xd0\x8c\xfd\x00\x52\x61\xf7\xb4\x7b\xc6\xe3\x0e\xc9\x59\xfc\x55\x9d\xa2\x4b\x76\x34\xb8\x0b\xc2\x3b\x6c\x9a\xdd\x89\x5b\xe7\x8f\x2b\xf3\xae\x40\x44\x88\xcd\x0c\x44\xdc\xf4\xf5\x57\x9c\x90\xd1\x10\x68\xea\x36\x8a\x23\x76\x0b\x9b\xa5\xab\x87\x05\x61\xb5\x71\xe2\xa1\x40\x55\x7c\x4a\x54\x8e\x85\x62\x54\xe8\xee\x86\xfd\x52\x3b\xd5\x3f\x55\x46\x23\xe8\x90\x9f\xc3\x8f\xd8\x8f\x5d\xfd\x78\x78\xf8\x97\xef\x2e\xff\xf9\xb7\xc3\xc3\x9f\x7e\x2e\x5f\x45\x56\x88\x5a\xf3\xcc\x2d\xe8\xdf\xe1\x22\x86\x6b\x7c\x07\xfe\xe9\xc4\xb5\xb3\x28\x12\x39\xd7\xee\x02\x66\xf5\xf6\xc6\x42\xe9\xab\x7e\xf8\x33\x13\xf1\xec\x5f\xaa\x56\x25\xb1\xbd\x64\x0c\xb8\x45\x35\xb2\x53\xec\x68\x8e\x3d\x14\xb4\xa4\xe1\xa3\xea\x66\x0d\x9d\x2b\xa2\x31\xa4\xb6\x96\xd1\xd7\x1e\x04\xd8\x81\xd6\x97\x0f\xe0\x98\x73\x6d\x24\xd3\x6a\x59\xb9\x83\xc9\xeb\x5a\xad\xba\xed\x68\x90\xb4\x85\x1d\x6c\x18\x60\x08\x11\x07\x2d\x7b\x90\x03\x83\xf5\x5a\x4a\xe1\x8d\x3d\xeb\x5f\x91\x89\x85\xf0\xde\x00\xc7\x7b\xc1\xbe\x7e\x52\x1a\x57\xf6\xb5\x55\x34\xc4\x53\xdb\xb0\xd5\x5f\x77\x79\xf6\x2a\x94\xbe\x02\xa3\xd8\x1c\xd9\x1f\x7b\x51\x96\x77\xdc\x0d\xbd\x14\x52\x21\xa7\xe1\xcf\xe0\xe3\xeb\x2a\x2d\x24\x1d\x61\x5e\x86\x7d\xdc\x3e\x16\xfe\xb2\x0f\x56\x5e\x30\xff\xb4\x55\x85\xa3\x5c\x1a\xa1\x21\x99\x7a\x8a\xbc\x63\xbd\x88\x62\xec\x21\x6d\xf3\xa0\xdf\x13\xd2\x16\x30\xa3\x6e\x5b\x56\x3b\xaa\x08\x59\x38\xea\x51\xe0\x0c\x50\x44\x7d\xd2\xe5\x9d\x76\x82\x18\x64\xad\x01\x7c\x62\x34\xcb\x9d\x2b\x67\x15\xa3\x41\x6a\x16\xb3\x09\x53\xa2\x46\xf6\x49\x98\x68\x79\x48\xbd\x2b\x7d\x61\x03\x87\x82\xd9\xec\x31\xc3\x62\x41\xe1\xbc\xce\x90\xfd\xd7\x75\xfa\x05\xd9\x91\x51\xad\x41\xf2\x53\xf2\xdf\x47\xef\x7f\xff\x6b\xf7\xf8\xab\xa3\xa3\x1f\x5f\x75\xff\xfc\xd3\xef\x8f\xde\xf7\xf0\x1f\xbf\x3b\xfe\xea\xf8\x57\xff\xc7\xef\x8f\x8f\x8f\x8e\x7e\xfc\xee\xed\x37\x77\xfd\xcb\x9f\xd8\xf1\xaf\x3f\xf2\x3c\xbd\xb7\x7f\xfd\x7a\xf4\x23\x5c\xfe\xb4\xe1\x24\xc7\xc7\x5f\x7d\x56\x7b\xe9\x0d\xd4\xee\xb4\xa3\xc9\x0a\x9e\xd5\x19\x1b\x41\xbf\x27\x2c\x5b\x6f\x87\x47\xaf\xa6\xcf\xbf\x8f\x1e\x3e\x2d\x18\x52\x60\xd7\x7b\x73\xc0\x15\x44\x12\xf4\x87\xb0\xe4\xd8\x37\x95\x2a\x08\x1c\x2a\x12\x54\x8b\x97\xc6\xe7\x3e\x05\xe3\x4e\x68\x38\x87\xfb\x5a\x48\xa2\x43\x29\x52\x9f\x15\x8e\xee\x0d\xec\x42\xef\xef\xbb\x87\x5a\x2d\x50\xed\x68\x8d\x41\xad\x31\x68\xc9\x58\x6b\x0c\xba\xb5\x78\xb8\xb7\x96\x20\xe0\x93\x5d\x5d\x18\x0b\x3d\xe8\x5e\xd7\x29\x97\x50\xdb\xcc\xa1\xd6\xf3\x47\xbd\xe8\xd4\x58\x84\xd0\x58\x86\x96\x2e\xf6\x61\x92\x33\xec\xc8\x6c\x0f\x3e\x4e\x50\xa4\x5d\x58\xd5\xc6\x55\xf8\x83\x89\x59\x42\x28\x11\x5d\x29\x06\x89\x81\x8e\x18\x7a\xfa\x0f\x1b\x09\x7a\x6f\x83\x43\x8d\x92\xc6\x78\x51\x46\x33\x08\x87\x45\xed\x65\xaa\x94\x88\x6c\x50\x6b\x48\x02\xc0\xca\x6e\x6e\xd9\xb8\x1a\x6c\x03\x9f\x49\x88\x20\x06\x1e\x81\xab\xcb\x5c\xe9\x4a\x49\x39\xb9\xe4\x13\x5f\x9b\x3a\xf6\x29\x25\xb8\x92\xc5\x73\xbc\xac\x00\x04\x83\x88\xce\x09\x56\x8a\x43\x40\xaa\x5f\x44\xb3\x62\x28\x86\x18\x16\x56\xd6\xdd\x1a\xd7\xd5\xe6\xe2\xf5\x79\x66\xf0\x6c\xd5\x12\x86\xe6\x98\x65\x61\x7e\xae\x32\xc9\x97\xe0\x0c\xac\xcf\x3e\x3f\x39\xd6\xd9\x10\xdb\x6c\x86\x65\x6e\xe1\x3b\x69\x92\x4d\x36\xe1\x2c\xc9\x24\x0c\xd9\x63\x43\xe7\xf4\x8c\x17\x96\x18\x16\x03\xd7\x6c\xc8\x6c\x8a\x49\x26\x21\x03\x6e\xb3\x04\x68\x34\x46\xda\xef\x38\x65\xe1\x9c\xde\xc7\x60\x1e\x2b\x70\x37\x4b\xca\x6e\x17\x09\xfb\x2d\x1d\x23\x2d\x1d\xdb\x79\x7c\x20\x3a\xe6\x30\x77\x7f\x88\x18\x46\x9e\xd7\x8f\x79\x3f\xaf\xd6\x5a\x41\x44\xde\x1a\xd1\x8a\xb4\xa3\x13\x9c\x65\x27\x03\x74\x2d\x7c\xc0\xd7\xf6\xf3\x24\x69\xa8\x3e\xf5\xe1\x15\x42\x23\xcb\x93\xc4\xa5\xe5\xf6\xc8\x3b\x8e\x47\xf2\x0c\xfb\x20\x74\xc8\x35\x4c\x40\x76\xc8\xd5\xf0\x5a\xe8\xbe\x95\x6d\xab\xe1\x6c\xf6\x46\xc2\x86\xe4\xd4\x68\x4d\x4a\x13\x6d\x6b\xd1\x97\x2a\xe7\x08\x59\x99\xa0\x28\xca\x55\x23\x0c\x7d\xf9\xb6\xfc\xd6\x27\x4c\x76\x3f\xd2\x36\x85\x66\x1f\x0d\xa8\xa7\x6e\x26\x1f\x20\x87\x41\x91\xce\x3b\xb2\x28\xeb\xf5\x19\x16\xa2\xc8\x84\xd2\xb7\x46\x8b\x6d\xa6\x11\x4c\xdf\x4f\x87\xbd\x15\x68\x92\x40\x5c\xe9\x04\x64\x3b\x58\xd0\xaa\x16\x8d\xf9\xb8\xa1\xa1\x02\x90\x31\xe5\x71\x02\x12\x8b\xa2\xab\xd9\xca\x4f\xac\xe8\x02\x10\xfa\x36\xf8\x04\x4d\x1a\x45\x42\xc6\xae\x03\xab\x4b\x94\xc4\xc5\x84\xe3\x85\xb4\x36\xa5\x9c\x8e\x00\x2d\x0b\x73\xa5\x75\xb1\xe0\xb2\x2a\x35\x7f\x18\x0b\x71\x4f\x22\x91\x66\x09\x1e\x80\x1a\xe7\xa3\xe8\x3d\x13\x50\xb4\x6b\x66\x57\x27\xa5\xb6\x34\xf8\x43\xbd\xae\x34\xb5\x84\x95\x26\x44\x15\x78\x84\xa8\xb1\xbe\x75\x97\x8f\x10\x95\x1a\x2f\x9a\x2d\x71\x9d\x17\xb5\x40\xdb\x46\xfd\x7e\xba\xb5\xcd\xf2\x4d\x99\xc2\x6b\x64\x99\x95\xc7\x4c\xa1\x35\x9c\xd3\xd7\x95\x76\xaf\xc0\x12\xfd\x36\xab\x18\x33\xcf\x7c\xa9\xe9\xca\x61\xb0\x47\x6f\xae\x3a\x5b\x08\x36\xf6\x73\x61\xee\xb3\x10\x9a\x1c\x1d\x9e\x1c\x1e\xcf\xd9\xe8\x66\x8a\x13\xdf\x95\x9e\x64\x58\x8d\x2f\xc3\xd2\x76\x10\x1d\xc6\x1d\xc2\xb4\x27\xb6\xb6\x28\x00\xae\xca\xa5\xc3\x75\x88\x12\x44\x4b\x1a\x33\xa7\x05\xe1\xaf\xe6\x26\x2d\x73\x57\x11\xe0\xe8\xf0\xd7\xc3\x0e\x01\x1d\x1d\x93\x07\xc1\x0f\x35\x2e\x1f\xcb\x67\xe4\xaa\x34\xd1\x54\xe4\xd8\xa5\xce\x82\x20\xd4\xc2\x30\x14\x8b\x88\xdc\xb6\xb4\x19\x53\xed\xd3\xf0\x2e\x1f\x99\xf6\x6d\x1c\xc4\x90\xbc\xb2\x1d\x75\x80\x3a\x2b\x61\xc2\x26\x70\x32\x06\x9a\xe8\xb1\x0d\xa4\xe0\x82\x77\x6d\x53\x34\x43\x4a\xdc\x95\xba\x3e\x85\x7a\x26\xb7\xf2\xa8\x61\x7e\x9b\x5f\x50\x4d\xe9\xda\x10\xd1\x6f\x76\xef\xd4\x4a\xe6\x9a\x18\xdf\xdd\xf5\xbf\xa9\xf4\x6a\x45\x2a\xae\x75\xe6\xc3\x5b\x4a\x75\x25\xf6\x80\x76\x34\xe3\xd0\xab\xd5\xb4\x95\x34\x48\xc2\xea\x36\x6f\x25\xf3\x4d\xa9\xb7\xeb\xda\x4a\xfe\x29\x72\xec\x36\x47\x07\xc9\x94\x3c\x50\xae\x7d\x2a\xde\x81\x99\xea\xc0\x90\x27\x83\x0d\xdf\x02\x8d\x41\x2a\xa4\x1e\x40\x77\xae\x9f\xe5\x47\x63\x8e\xa6\xd2\xda\x9a\xe5\x03\xb9\xd2\x22\x25\x63\xf7\xd9\xd5\xf4\x44\x77\x32\x7a\x78\x7a\x7c\xee\x8f\x84\xcc\x52\x38\xf7\xcc\x8b\xa3\x5f\x73\x74\xc3\xc2\xbd\x52\x67\x3e\x2a\x83\xad\xdc\x8d\x84\x71\x0b\x2c\xdb\x47\xb0\x21\x5a\xda\x40\x80\x00\x69\x30\x48\x80\xd4\x4b\x76\x9c\x9d\x08\x1d\x5f\xf5\xe3\xa1\x1a\x8b\x3b\x20\x8d\xf9\xd6\xc9\x22\x43\xa4\xc3\x19\x1b\x05\xdb\x10\x10\x1b\xf5\x68\x93\xfa\xe9\x94\xe5\xb1\x1a\x00\xcd\x6c\x3e\x69\x12\x02\x59\x03\xe1\xcf\xf3\xc1\xcf\x73\xdd\xb4\x91\x4c\xd8\x7a\xad\x7b\xc3\x65\xea\xb6\x16\x27\x8b\x73\x89\x25\xe1\xa1\x13\xec\xf3\x68\x2f\x4e\x9a\x0b\x53\x6c\x3a\x48\xb1\xd1\x10\xc5\x27\x0d\x50\xc4\xb4\x88\xda\x54\xa4\x6a\x1f\xc7\x29\x0d\x06\x18\xbd\xcd\x68\x9c\x4e\xf6\x73\xd6\x1d\xdf\xad\xa2\x6a\x0e\x35\x47\x6d\x2f\xce\x98\x8e\xb2\x5b\x11\xdd\x37\xa8\xd7\x5c\x40\x26\x21\xb2\x76\xb2\xbb\xf3\xbe\x9d\xdd\xe8\x97\xd7\xef\xee\x8a\x70\x7c\x8c\x59\x29\x0c\x97\xdf\x3a\x4b\x9a\xd1\x49\xef\x21\xd3\x41\x75\x1f\xd0\xe8\xfe\x81\xca\x18\x2d\x5b\x54\xb3\x01\x4b\x98\x9e\xa2\x72\x2e\x01\x63\xfd\xb9\xb0\x41\x71\xb6\x48\xa2\xf0\xad\x4e\x43\x1f\xee\x60\xc3\x42\x0b\x99\x8b\x9e\x19\x52\x66\xf4\xf1\xd0\xcf\xd6\x46\xcd\x44\x59\x30\xe9\x95\x2d\xd3\xad\xf2\xe5\xc7\xde\x2a\x5f\xa5\x5e\xad\xdb\xea\x61\x75\x63\xf7\xf6\x98\xd5\x39\x16\x27\x43\x2b\xb2\x96\xd5\x35\x34\xdf\xfe\xb2\xba\x4c\xc2\xad\x16\x59\x43\x5e\x12\x3b\xd9\x12\x1f\xc9\x00\x86\xc2\x10\xe1\xa5\x4e\x8f\x38\x07\x57\x2e\xf3\xac\x7f\x15\xac\x5a\xa2\xe2\xd8\xb0\x51\x8b\xbe\x46\x66\xc2\x26\xc0\x41\xa9\x13\x74\x87\xe4\x99\x6b\xc7\xef\xba\xce\x76\xcc\xd7\x41\x8a\xab\xeb\x14\x99\x00\xae\xe7\x2d\xfe\x08\x3a\xb2\x96\xdb\x12\x21\xc7\x76\x5a\x6e\xf9\xb3\x6e\x94\x48\x52\x35\xb6\xfd\x60\xe1\x91\x69\xd7\xd3\xb8\x6f\x6b\xe8\x96\xdb\xd2\x8e\x24\x8d\x80\x64\x20\x99\x30\xcc\x28\xe7\x3a\x16\x0f\x9c\x0c\x60\xc4\xb8\xf2\xa0\xc0\x2a\x98\x0e\x66\xe8\x8f\x61\x2a\x94\x4c\xeb\x91\x9b\x4a\x41\x10\x97\xaa\x13\x89\xe2\x68\xba\x35\xcf\x7a\x92\x90\x63\x21\x9c\x6c\x77\x95\x00\xe1\x72\xc3\x99\x75\x4b\x3e\xca\x39\xbe\x39\x86\x84\x4e\x6d\x44\x26\xf6\x8a\x66\xbf\x80\x54\xc7\x0d\x78\x9c\x6c\xcb\x24\x7f\x6d\xe9\x3a\xb0\xfc\x28\x8d\xc6\xf5\x5c\xb8\xad\x8b\x6a\xc3\xd1\xba\xa8\xea\x4c\xd2\xba\xa8\x5a\x17\xd5\x9a\xd1\xba\xa8\x5a\x17\xd5\xcc\xd8\x5b\x2d\xa9\x75\x51\xed\x3c\x5a\x17\xd5\xea\xd1\xba\xa8\x36\x18\xad\x8b\x6a\xc3\xd1\xba\xa8\x5a\x17\x55\xeb\xa2\x6a\x5d\x54\x9f\x90\xdd\xce\x8f\xd6\x45\x35\x37\x49\xeb\xa2\x6a\x5d\x54\x1b\x8f\xbd\x55\xbe\x5a\x17\x95\x1d\xad\x8b\xaa\x3a\x3e\x2d\x56\xe7\x1d\x3c\x7d\xa3\xea\xd5\x6f\xc4\x8b\x0a\xa3\xa3\xb1\x2f\x32\xed\xa9\x8e\xfd\xff\xc3\xd8\xfe\xf7\xc4\x51\xd2\x80\xbd\xbf\xb5\xf5\xbf\x38\x5b\x7f\x33\x76\xb2\x06\x6c\x64\xb5\x69\xb2\x73\x81\xdf\x8d\x25\xa8\xb1\x48\x76\x46\xf4\x0a\x92\xbf\x65\x9c\xa5\x79\x6a\x70\x4e\x19\x7c\x66\x93\xe0\x6b\x57\x45\x77\x62\x74\xc1\x5b\x73\x9d\xb9\x91\xc5\x80\x95\x37\x29\x4b\xcc\x36\x62\xa2\xe4\x98\x4e\x0c\xae\xab\x3c\x8a\x00\xb0\xaf\x57\x59\x95\xf8\xa2\x17\xde\x14\xfa\x38\xbc\xae\x47\x6f\xea\x71\x4b\x5b\x1b\x13\x67\xf9\xe2\xf3\x9d\xe6\x18\xc9\xac\x19\xba\xfc\xcd\x4d\xff\xbc\x44\x97\x29\xf7\x64\x99\xf1\x89\x48\x26\xb6\xfb\x2b\xde\x64\xa4\x22\xd7\x36\x16\xbb\x95\x0e\x40\xd3\x92\x12\xe1\xe4\x6f\x65\xdb\x14\x9b\xe7\xcc\x53\x21\xa5\xbd\x6f\x03\x29\x80\xea\x5c\x02\x19\x51\xfd\x31\x09\x7e\x7d\x5d\xa1\x96\x9e\xd0\x04\xbf\xa9\x2b\x0a\x57\xe5\x18\x23\xf0\x56\xcd\x3d\x23\xc4\x0b\x5b\xce\x7d\x63\x81\xb7\x36\xa5\xac\x2f\x84\xd6\x3f\x5a\x04\xeb\xad\xe0\x87\x37\x06\xe0\x03\xd7\x67\xdb\xb3\xf3\xb2\xb6\xe1\x5b\x1c\x69\x41\xb2\x84\x16\x4d\x8a\x70\x07\xbe\x45\x1e\x74\x3e\x86\xe8\xfe\xc6\xb9\x3c\x8f\x14\x40\x88\x57\x19\x31\x3d\xce\x07\xbd\x48\xa4\x27\x86\x24\xd8\xff\x1b\x24\x62\x70\x92\x52\xa5\x41\x9e\xc4\x22\x72\x2c\xae\x1b\x99\x59\x18\x1f\xf5\xd2\xf8\x18\xdb\xe0\x5e\x55\x9b\x22\x96\x4a\x21\x98\xf7\x3b\x65\x90\x0c\xc0\x50\x57\x81\x0a\x7f\xa9\x9e\x9a\x59\xde\xd6\x8d\x6b\xcb\xa3\x36\x4b\xaa\xe9\x6e\xfe\xf0\xae\xe6\x96\x72\x91\x06\x2c\x1b\xcf\xcd\xa5\xdc\x58\x68\x45\x03\xae\xe4\x3d\x72\x23\xef\x8d\x68\xbc\x2f\xae\xe3\x3d\x2c\x7d\xdc\x80\xa7\xb3\x09\x57\x71\x73\x6e\xe2\x27\xa8\x10\xfc\x34\xee\xe1\x06\x6d\x68\x0d\xb9\x85\x3f\x84\x4b\xb8\x91\xaf\xae\xeb\x0a\xfe\x70\x6e\xe0\x66\x3e\xb7\x49\x45\xe0\xb9\xba\x7e\x1b\xb0\x85\x37\x69\x07\x6f\xcc\x06\xfe\x64\xae\xde\xfa\x6e\xde\x3d\x70\xf1\xd6\x06\x32\xe3\x4c\x33\x9a\x5c\x40\x42\xa7\xb7\x10\x09\x1e\xef\xcc\x61\x66\x4a\x46\x86\xf3\xa3\xec\xb4\xce\x4e\x55\xcd\x68\x18\x53\x57\x19\xdb\x68\x54\x36\x83\xc3\xfb\x27\x9c\x40\x81\xae\x05\xbb\xca\x5d\x8a\xce\x3d\x08\x79\x9f\x08\x1a\xab\x93\x4c\xd8\xff\x2b\xf2\x15\x4a\x89\x0a\xf6\x5d\xf5\x32\x15\x3e\xb6\x41\xcc\xa6\x77\x34\xb9\x89\xdf\x8a\x07\x22\x86\x1a\x38\x39\x62\xdc\xef\xe3\x71\x49\x0d\x2c\xac\x93\x01\xad\xcd\xd5\xd7\xaf\xfc\xcd\x2f\xcf\xec\x88\x06\x56\xa5\x9e\xde\x0a\xec\x5e\xb4\xde\x0c\xec\x6e\x1c\xe6\x49\xd5\x14\x6c\xcd\xc3\x55\x7a\xf3\xba\xa8\xed\xfb\x1a\xe7\x0d\xa7\x8d\xf2\x98\xb8\x94\xaf\x97\xb7\x69\xb5\x03\x58\xaa\xa2\x5f\x08\x58\x59\x67\x35\xbe\x3b\xef\x5b\xa3\x71\x6b\x2e\xd9\x17\x73\xc9\x47\x0a\x02\xd9\x43\x41\xf7\x99\x06\x7e\xb4\x82\xee\x16\xa3\x94\x04\xfa\x8d\xa4\x11\xf4\x1b\x97\x11\xfc\x71\x22\x71\x2e\xa9\x23\x80\x41\xe4\xf3\x87\x87\x03\xc4\xf6\x34\x85\xc4\x59\x4c\x49\x1d\xe6\x49\x32\x25\x79\x26\x78\x35\xcd\xd8\xfa\xda\x67\xb3\x56\xd1\x24\xbf\xe0\x2d\x85\x60\x99\x49\xe1\x78\xa6\xcc\x39\x37\x34\xb8\x68\xd0\x85\x82\x24\x56\x35\xa6\x95\xdc\x58\xc5\x46\x66\xf9\x86\xff\x61\xda\x6c\x11\xe9\x57\x99\xd0\x3c\x3d\x14\x32\x62\x83\x64\x4a\xc6\x34\x09\xdd\x58\x28\xb9\x67\x49\xe2\xa6\xe9\x91\x5b\xd0\xd6\xa5\x60\x79\x67\x22\xf8\x08\x17\x47\xb9\xef\x02\x08\x91\x79\x36\x4a\x80\xf2\x3c\xb3\xef\x33\x9c\x78\x2a\x72\xe9\xdf\xd7\x0b\x8e\x89\xa2\xeb\x3e\x4b\x3a\xa5\x5e\x63\x2b\x37\x36\xf4\xa7\xc9\x95\x11\x00\xde\xf9\x2a\xce\x9d\xf2\x9c\x62\x02\x52\xb2\xd8\xd9\xf9\xed\x6f\x99\x14\x13\x16\x5b\xef\x86\x07\x1b\x76\x35\xb6\xdd\x64\xc2\x79\xe6\x82\x77\x39\x8c\x28\x0a\x2a\xee\x14\xd9\x3d\xb3\xf3\xd8\x08\x02\x1e\x63\x7f\x19\x23\xe1\x8b\xac\x92\xb7\x3e\x61\xb6\x33\x6e\x09\x72\xe4\x88\x0b\x22\x30\xf0\x33\xe7\x4c\xdb\x6e\xeb\xe3\x5c\x93\x58\x3c\xf0\xe3\xad\xbc\xae\xe8\x68\xbd\x5b\x08\xa0\xaa\xfb\x75\x91\x9c\x63\xbf\x77\x35\x78\x99\x72\xa6\xcf\x21\xc9\xb9\x82\x9a\xec\xbd\x31\xe1\xe8\xcb\x3f\xec\x46\x23\x58\x0a\x22\xd7\x1f\x44\xfb\x7b\x18\xb3\x68\x5c\x16\x66\x59\x0a\x8a\x88\x7c\x46\x2d\x7e\xed\x1e\x5b\xbc\x43\xad\x0a\xb8\x68\xec\x6a\xd8\x5d\x60\xfd\x72\x0d\x4b\xe7\xe3\xf7\x4a\x0d\x99\x31\x34\xfb\xe2\xfa\xf6\x5f\x6f\xce\xfe\x7e\xf9\xc6\x9d\x4f\x5e\x66\xfa\x39\x67\xff\xc9\x81\xd0\x54\x18\x59\x38\x29\x87\x01\x76\x50\xa3\x2f\xfd\x80\x27\xb9\xd9\x80\xc1\x1d\x19\x32\x76\x8f\xaf\x1f\x16\x89\x3d\xe8\x9f\x3e\x2a\xf2\x63\x77\xd5\x2a\x82\x5b\x8c\xdc\x58\xea\xaa\x45\x09\x07\x6d\x4e\x9e\x95\x28\x6d\x97\x35\xc6\x47\x49\x59\x98\xdc\x8d\x5c\xd5\xd5\x89\xea\x6a\x44\xdd\xe2\x0b\xfa\xbb\x2a\x46\x8d\x74\xf7\x2a\xd6\xd0\x50\x4f\x9c\x82\x6a\x7b\x35\xc0\x36\x2d\xf6\x6a\x80\x15\x3d\xae\xfa\x84\xc6\xb1\x44\x31\x05\x4f\x7d\x3a\xd3\x1b\x33\x2b\x62\x69\x3a\xe4\x15\xf9\x0b\x79\x24\x7f\x41\xb5\xe0\xcb\xba\x1d\x84\xea\x0a\xec\x4d\x84\xc6\x18\x6d\xf4\xaa\xdf\x10\xc4\xff\x31\xa6\x1a\x67\x34\x50\xd5\x82\x0c\x98\x13\x43\xe1\x51\x83\x34\x62\x91\xdb\x89\x8f\xda\x7b\xc9\x2c\xf0\x03\xa2\x99\x35\x93\x5f\x0d\xab\xe1\x38\xdb\x21\x9a\x79\xdc\xe8\xf7\xd7\x8e\x0a\x55\xfb\x9c\x14\xb3\xa5\x54\x47\xe3\x2a\x19\x33\x02\x86\xaa\x30\xa7\x58\x20\x19\xb7\x61\xb7\x63\x56\xc3\xe9\xbf\x3f\x68\x5c\xcf\x0f\x5c\xd9\xcf\x55\x3b\x35\xa3\xf8\x23\x9f\x77\x82\x41\xa9\x74\x52\x26\xe2\x1e\xb9\xa4\xd1\x18\x97\x15\x97\x78\x86\xd1\x40\x70\xb2\x31\x9d\x98\x8d\x77\xcf\xda\xbe\x40\x28\xad\x04\xeb\x28\xe2\x92\x39\x4f\x11\xe5\xb6\x39\xe7\x10\xa4\xb4\x91\xd2\x83\xa9\x0f\x32\xab\xbd\x79\xb5\x4e\x52\x26\x85\x16\x91\xa8\xd1\x1e\x6a\x36\xfb\x02\xa7\x43\x20\xd8\xe8\x54\x6f\xde\xfd\xfe\xa2\xdf\x21\x77\xe7\x7d\x6c\xea\x73\x7b\x7e\xd7\xaf\x4a\xd8\x07\x77\xe7\xfd\x83\x8f\x0a\x0a\xe2\xcd\x6c\x68\x50\xdd\x61\x92\x8a\xc1\x24\x61\x4a\x77\x53\x9a\x75\xef\x61\xba\x23\x4f\x6d\x82\xaf\x77\xc3\x0e\x37\xf2\x41\x16\xcc\x29\xcd\xb6\x9e\x4d\x02\x8d\x59\x9b\xe6\xb3\xf9\x68\xd3\x7c\x36\x1c\x6d\x9a\x4f\x9b\xe6\x33\x3f\xf6\x26\x96\xb1\x4d\xf3\x79\x59\xae\xdb\x36\xcd\xe7\x13\xf7\xfe\xb6\x69\x3e\x8b\x47\x9b\xe6\xd3\xa6\xf9\x6c\x36\xda\x34\x9f\xed\xc7\xde\xc5\xad\xb4\x69\x3e\x5b\x8d\x36\xcd\x67\x7e\xb4\x69\x3e\x4b\x46\x9b\xe6\xb3\x64\xb4\x69\x3e\x6d\x9a\x4f\x9b\xe6\xd3\x46\x3f\xae\x9d\x6b\x3f\xa3\x1f\x49\x9b\xe6\xe3\x46\x9b\xe6\xf3\x22\x62\xbc\x48\x9b\xe6\xb3\xd1\x68\xd3\x7c\xda\x34\x9f\x5d\x46\x9b\xe6\xf3\x52\xcc\x25\x6d\x9a\x4f\x9b\xe6\xf3\xe9\x08\xba\x6d\x9a\x4f\x9b\xe6\xd3\xa6\xf9\xb4\x69\x3e\x2b\x57\xd1\xa6\xf9\xbc\x04\x15\xd0\xf7\x5c\xad\x9f\xa3\x72\xe3\x67\xda\x3c\xac\x8f\x5c\x2e\xf8\x15\x2d\x21\x2a\x33\x93\xc8\x62\xca\x44\x02\x8d\xa7\x38\x25\xf6\x79\x28\x09\x59\xcf\x30\x3a\x30\x4a\x28\xdb\xdd\xfd\x52\xf5\x90\x9f\xe3\x5c\x24\x61\x4a\x17\x3e\x72\x0c\xdb\x0a\xe0\xeb\x04\xff\xb3\xe1\x7f\x86\x52\xf9\x4b\xf6\xe1\x8e\x0d\xfe\x32\x20\x47\x0a\x85\x74\xfc\xff\xcf\xde\xfb\x78\xb7\x8d\x1b\xff\xa2\xff\x0a\x8e\xdb\x73\x6d\x75\x25\x39\xd9\x6d\x7b\xdb\xdc\xbe\xee\x71\x63\x67\xd7\x6f\x13\xc7\x37\x76\x76\x6f\xdf\x66\xbf\x5b\x88\x84\x24\x7c\x4d\x02\x2c\x01\xca\x51\x5f\xde\xff\xfe\x0e\x66\x06\x20\x48\xc9\x4e\x4c\x32\xb1\x93\x15\x7b\x4e\x37\x96\x28\x10\x1c\x00\xf3\x7b\x3e\x23\x4d\xac\xc0\xbd\x51\x35\x2f\x55\x8c\x67\xc5\xf2\x76\x6e\xea\x26\x72\xbc\x56\x3c\x97\x89\xdf\x18\x47\xb8\x76\x4e\x7a\x36\xf9\xa9\x1f\x1b\xc7\x73\x0f\xc9\xf3\xca\xf2\x59\x26\x3a\xc7\xc9\xfb\x07\xc9\x7a\x06\xc8\xb6\x1e\x0d\xa0\x36\x26\x92\x0b\xe5\xb6\xb5\x56\x82\x09\x65\xcb\xb5\x5b\x98\x73\x9d\x5e\xb8\xb5\x69\xdc\xdd\x3b\xbf\xbc\x67\x5c\x6c\x88\x98\x58\xcf\x78\xd8\x30\x51\xac\xfe\x11\xac\x4d\x87\x7f\x54\xf2\x11\x27\xa7\x34\x56\xd5\x31\xa8\x2d\x47\xce\x5b\x4e\xe7\x3a\x75\x7a\x23\xb4\x9a\x8e\x8f\x00\xea\x60\xa7\x6e\xf8\x2b\x50\xb6\xb8\xad\xfb\x63\xf3\x15\x97\x99\x3b\x1f\x75\xc2\x68\xcf\x2a\x38\x7f\x0d\x60\x95\x0c\x9d\x47\xcf\xfa\xee\xa0\x21\xf3\xe0\x19\x74\xbc\xc8\x65\xb7\x9a\x4e\xb6\xa1\xf1\x3c\x87\xb1\xa2\x90\xb9\xdb\x13\x39\x7f\x0b\xda\x0b\xcf\x75\x85\x7d\xbb\x13\x9d\x17\x95\x6d\x0a\x44\x90\xad\x5d\x5a\x6e\xcf\xe5\x82\xcc\xa1\x43\xec\x0e\x3e\x09\xc3\x4e\xa2\x8e\xdc\xf7\xd8\x67\x9b\xa7\x3e\xe5\xf9\x7c\x88\x8c\x3f\x6e\xad\x28\xd5\x13\xf6\x5f\x07\x6f\xbe\x7a\x37\x19\x7d\x7b\x70\xf0\xf3\xa3\xc9\x5f\x7f\xf9\xea\xe0\xcd\x14\xfe\xf1\x87\xd1\xb7\xa3\x77\xfe\x8f\xaf\x46\xa3\x83\x83\x9f\x7f\x78\xf1\xdd\xe5\xf9\xc9\x2f\x72\xf4\xee\x67\x55\xe5\x57\xf8\xd7\xbb\x83\x9f\xc5\xc9\x2f\x1f\x38\xc8\x68\xf4\xed\xef\x3b\x4f\xb9\xb7\xb7\x62\x38\x5f\xc5\x40\x9e\x8a\x8f\xe2\xa7\xa0\x5c\x9b\x81\xce\x22\xe5\x09\x6e\x9c\x46\xb2\x25\x6e\x3b\x8d\x5e\x4a\x82\x05\x1e\xc6\x91\x86\xe9\x5c\x5a\x4b\x2a\x30\x8f\x2b\x0d\xa4\x6d\xf8\x0b\x89\x0f\xc8\x39\x72\x7a\x69\xe2\x2c\xfd\x28\xbf\x50\x7b\xa3\x1c\xbc\x6d\x8a\xc9\xbc\xc8\xa0\xbb\x3f\x9c\xe7\x89\x57\xf3\xc0\xee\xd9\xf1\x86\xf7\x5f\x3b\xde\xf0\x25\xf2\x06\x23\x92\xaa\x94\x76\xfd\x54\x2b\x2b\xde\x76\x72\x7e\xdf\xe4\xfd\xbf\x68\x0e\x4d\x86\x95\xa1\x84\x64\xfc\x8e\xe9\x02\x8b\x73\x6e\x84\xbd\x58\xea\x2a\x4b\xa1\xa8\xb4\x52\xe0\x0f\xc4\xfa\x64\x61\xd1\x59\x07\x5a\x20\xa8\x88\xed\xc7\x79\xf7\x1b\x0e\xfd\xef\x4a\xae\x78\x26\x94\x8d\x7e\x71\x0e\x0e\xa7\xf8\x47\x9d\x22\x10\xf7\x6c\x20\x83\x7a\x73\x5e\xca\x95\xcc\xc4\x42\x9c\x98\x84\x67\xc0\x95\x86\xe1\xf4\x47\x37\x8c\x0e\x4b\x54\xea\xcc\x38\x95\xdc\x71\x5a\xc6\xbd\x6f\x15\xaa\x80\x17\x5c\x2a\x96\x3b\xa6\x5a\xf8\x1f\x1b\x74\xd2\x3a\xe6\x5d\xf0\xd2\x2d\x45\x70\xc6\x82\x4d\x3b\xd3\x3a\xa3\x52\xb2\x6c\x5d\x8f\x2f\x51\xfb\x57\xfa\x57\x25\xae\x7f\x75\xa3\x19\x36\xcf\xf8\x22\xf8\x60\x8d\xb0\x1b\x61\x94\x7a\xe8\x1b\x5f\x00\xea\xb4\x2a\xc1\x78\x76\xcd\xd7\xa6\xf6\x48\xd7\x63\x48\xf3\x84\x3d\x1e\xc1\xc6\xe3\x86\x85\x31\x52\xf6\xf5\x08\xf2\x2a\x9e\x1e\x9d\xff\x7a\xf1\xcf\x8b\x5f\x8f\x8e\x5f\x9c\x9e\xb1\x33\x6d\x05\x8a\xa4\xc8\x3c\x49\xb8\x52\xda\xfa\x59\xc2\x33\xc0\xc2\xd1\x66\x0a\x26\x90\x34\xec\x5a\xaa\x54\x5f\x9b\xce\xc1\x2f\xdc\x7e\x8e\x78\x82\xab\x6e\x2e\x16\x5e\x70\x68\xdc\xd9\x43\x3e\x6c\xa4\xee\xc5\x83\x82\x04\x4e\xd3\xc3\xb4\xd4\x05\x12\xc1\x47\x0f\x62\x0f\xd7\x71\x2b\x28\xe8\x8b\x03\x60\x7d\xe7\xcd\x01\x17\x25\x57\xb6\x76\xa3\xd7\x6b\x46\x1d\x43\xa7\xbd\x97\xe3\xfe\xc4\xf6\x10\x46\x3c\x4f\x87\x2b\x13\x3d\x4a\x53\x91\x36\xc8\xff\xc5\xa5\x64\x3f\xf5\x2f\xb7\xae\x91\x74\xd8\xf9\xcb\x8b\xd3\xff\xd3\xda\xc7\xeb\xa2\x5f\x06\xea\x30\xd5\xfb\xa5\x2e\x06\x5b\xdd\x57\x22\xd7\xab\xdd\xfa\x3e\x94\xf5\x0d\xd2\x72\x98\xbc\xa7\x57\x95\x8a\x05\x9a\x8a\xc6\x67\xb9\x4e\xc5\x94\x9d\x87\x00\x6c\xf3\xdb\x18\x21\xac\x14\xcc\xdd\xa2\xac\xe4\x59\xb6\x8e\x95\x29\xab\xb1\xbc\xbb\x81\x1f\x13\x33\xf2\x39\xcf\xcc\x7d\x73\xe3\x3e\xb2\xd1\xe9\x11\x2f\x9c\x35\x3b\xc8\x72\x84\xd1\x58\x2a\x94\xb6\xa4\x0c\xbb\x59\x02\x26\x4f\xa9\x13\x86\xa6\x73\x94\xe5\xda\x90\x6f\x06\x83\xc0\x5e\x34\x4a\xe3\x89\x7d\x1e\x46\xc6\x08\x60\x65\x84\xd9\x2e\x1a\x6b\x63\xda\x8d\x5e\x0a\x9e\x6a\x95\xad\x21\xa5\x1d\x93\xd4\x72\x6e\xae\x44\x8a\x1f\x90\x6a\x16\x82\x16\xe0\x87\xf5\x8f\xba\x74\xf3\xf6\xf1\x09\x50\xc9\x30\x75\x0e\x22\x1b\xce\xc2\xbf\xd7\x55\xef\x71\x08\x1d\x51\x5e\xaa\x6c\xfd\x4a\x6b\xfb\x2c\xe0\x13\x0c\xb2\x03\x7e\x22\x6d\xb9\x19\x34\x02\x75\x92\xc3\x73\x27\xb0\x1a\x70\xa8\x62\x68\x84\xe3\x7a\xc5\x3f\xf7\x23\x55\x56\xea\xc8\x7c\x57\xea\xaa\xb3\x10\xdb\x50\x36\xbf\x3b\x3d\x06\x56\x54\x51\x0e\x88\xb2\xe5\xba\xd0\x12\x7d\x50\x37\x18\x06\xaf\x29\x8b\x25\x3e\x13\x75\xc2\x01\x7b\xc1\xd7\x8c\x67\x46\x7b\x5a\x52\xd4\xa9\x65\x2f\x32\x32\x46\xdd\xd7\x33\x6d\x97\x1b\x56\xa8\x3b\x50\x9b\xbf\x1b\x47\x29\x21\x35\xb0\xa3\x54\x1b\x3f\xb7\x10\xd2\x28\x4a\x91\x88\x54\xa8\xe4\xbe\x97\xfd\xbe\x33\x29\x60\xeb\x9c\x69\xe5\x0e\xe6\x20\x9b\xe7\x34\xa4\xd0\x10\x49\xe3\xad\x02\x31\x2b\xb2\xfe\x38\xa4\xe4\xc0\xb1\xac\x8c\x28\x31\x7f\xa8\xac\x04\xae\xe4\x0f\xd5\x4c\x64\x8e\xf2\xce\x24\x05\x84\x34\x6e\xd1\xf1\x20\x73\xbe\x10\x8c\xdb\xb0\xd3\xac\x66\x42\x99\xaa\xa4\x45\x94\x96\xa5\x5a\xd4\xb0\x26\xdc\xb0\xd7\xa7\xc7\xec\x11\x3b\x70\xcf\x1a\xc1\xfe\x99\x73\x99\x41\xb6\x8e\xe5\x65\x7b\x8e\x72\xee\x87\x80\x29\xc1\xe6\x65\xba\x44\x26\x31\x66\x4a\x33\x53\x25\x4b\x3f\x27\x67\xf7\x7a\xb3\x99\x32\xcc\x21\x30\xf2\x30\xf7\xfa\xfd\x72\xa8\xd7\x46\x94\x83\x31\xa8\xd7\x1d\x18\x54\xac\x46\xb9\x3d\xd7\xa4\x1e\x6e\xac\x5c\x58\x9e\x72\xcb\x89\x71\xf9\x1b\x1e\xec\x92\xfe\xb6\xd9\x97\x11\xcf\xa5\xaa\xde\xa2\x8b\x74\x38\x57\xcb\xc5\x09\x0c\x0b\x7b\x08\xa8\x0e\xab\xce\x8b\x22\x93\x75\xf6\x4f\x94\xa0\x72\xda\xd8\x2b\xe3\x1b\xd4\x44\xe0\x13\x3e\x89\xc8\x29\x27\x5c\xa5\x3a\xdf\x78\x18\x64\x2c\xf1\x64\x19\x3f\x60\xb7\xfb\x9a\xd7\x03\x71\x0a\x65\x62\x25\x7a\xe0\x1f\xb6\x76\xde\x73\x37\x9a\x23\x8e\xdf\x11\x30\x3c\xcb\xf8\x4c\x64\x94\x24\x05\x3b\xd0\x6c\xee\xc0\xfb\x4e\xf3\x2f\x75\x36\x5c\x5d\xe2\x2b\x9d\x09\xcc\x9b\xf5\x84\x70\xc3\x7f\x16\x74\x80\x41\x86\xa2\x03\x58\x83\x0d\x3a\x80\x5d\xfb\x39\xd0\xa1\xea\x21\xea\x59\x9b\x0e\x4e\x6f\x68\xd2\x01\x84\xf7\x43\xa7\x83\x11\x49\xa2\xf3\xe2\xbc\xd4\xce\xec\x1c\x4c\x36\xd1\xb0\x75\x9c\x0f\x1d\x1b\x5b\xd2\x26\x41\x16\x34\x6f\xe6\x65\x94\x31\xcf\x2d\x0a\x09\x9f\x36\xff\x3f\x22\x99\x05\xac\xa7\x2d\xc8\xfc\x28\x8d\x40\xa0\xfb\x25\x7d\xf1\x39\x8b\x83\x21\x8a\xce\x7a\x38\x3b\x07\x91\x46\x3a\xe1\x19\xe0\x5b\xf7\xdb\x72\xac\xbd\xed\xda\x03\x47\x75\x12\x10\xa3\x84\xcf\xa2\x2c\x5f\x0e\x8e\x16\xef\xc2\x54\x3a\x15\x51\xd4\x19\x93\x0b\x2f\x31\x9f\x1e\xee\xf3\x25\x1a\x4e\xaf\xa0\x2c\x10\x91\x36\x7e\x6d\x35\x41\x4b\xbe\x08\xa8\xd9\x6e\x82\x42\xa5\x52\x2d\xc0\xaf\x36\x66\xa5\xc8\xb0\xb8\x83\x98\xc0\x15\x5a\x90\xfb\x70\x24\xfc\xa0\xfe\x3c\xf8\x47\xfb\xa4\x60\x1a\x19\x3c\x45\x5e\xc3\x9a\x23\xbb\x95\x86\xed\x3d\xf7\x04\xe8\x01\x33\xfc\x10\x25\xcc\x1e\xbe\x61\x58\x4d\xf4\x74\x5e\x49\x95\x52\x1d\x44\x83\x58\xde\xce\x25\x3d\x18\x2a\x6c\x64\x1a\xf3\x96\x27\xec\x8d\x62\x81\x58\x6c\xd2\x79\x7b\xbc\x42\x95\xd9\xfb\xe8\x26\xb7\x3b\x5e\xc3\x43\xda\xc3\xbc\x56\xb0\xf6\xee\xb9\x13\x67\xb9\x6f\xde\xe7\xdf\xe5\x5e\x31\xd1\x88\xfb\x0d\x6d\xc5\xfc\x84\xc3\x7a\x95\x3e\x71\xdb\xda\x4a\xb5\x30\xb1\x25\xd3\x6c\x66\xb2\xdd\x94\xf1\x2b\x3c\x2f\x75\xee\x13\x87\xdb\xa6\x41\xb3\x7e\xeb\x73\x31\x43\x32\xa7\x4e\x7c\xe6\x46\xc8\x22\x37\xfc\x69\xe9\x28\x61\x25\xcf\x2e\x8a\xee\xd8\xcf\x6c\x03\x67\xf4\xc5\xc5\x51\x73\x68\x10\xd6\x94\x32\x2e\xe0\x7b\xc6\xd3\x5c\x1a\x03\x8e\x30\x31\x5b\x6a\x7d\xc5\x0e\xb6\x00\x1d\x46\x59\x56\x46\x2e\xcc\x21\xed\xf9\x89\x9b\xfd\x88\x49\x95\x85\x4c\x26\xb0\x83\x95\x0d\x59\xea\xf0\x90\x24\xcc\x02\xd6\x90\xb0\xf5\x29\x59\x61\x73\x9a\x88\xa6\xef\x76\xc1\xbd\x33\xec\xcd\xe5\x39\xeb\x59\x0d\xf0\x9e\x25\x3a\xa3\xbd\xdd\x86\xac\xdc\x4a\x47\xd4\x1e\xef\x9d\x48\xa4\x5c\x24\xc2\x0c\x87\x94\xf7\x7d\x3d\x26\x4b\x05\x96\x47\x0a\xc8\x7e\xe2\x37\xa6\xc3\x81\x5f\x7a\x1f\xaa\xec\xe9\xa7\xfb\xb1\x46\xdd\xac\x14\x82\x42\xa4\x09\x1a\xe9\x8e\xa3\x01\x0b\xf4\x2a\xc4\x52\x2b\x5d\xe2\x16\x75\x42\x54\x2b\xd8\xd2\xc0\xa2\x30\x9a\x07\x6b\x42\x2c\x3a\x9a\xea\xd3\x3a\x4a\x1c\x07\x02\xa1\x4a\x17\x81\x79\xea\x39\x5c\x4b\xbb\x04\x00\xed\x65\x2b\x6a\x08\x33\x29\x85\x81\x00\x8c\x62\xa2\x2c\x75\x49\x09\x59\xde\x6f\x4d\x65\x52\xe7\x3a\x85\x8c\x2e\xb7\x49\xb8\xfb\x6b\xdf\xc4\x81\xea\xba\x5d\x05\xe4\x18\xba\xdd\x24\xe6\x73\x91\x80\xa2\x15\x13\x18\xb9\xf6\x41\x8d\x28\xee\xeb\xef\xac\xf6\xed\x2e\x72\xf9\xd6\x3d\x25\xfe\x55\xab\x69\x96\xd2\x6a\xb2\xfd\xeb\xd1\x94\xb1\x53\x15\xf2\x6f\xc7\x6e\x15\xe3\x3b\x7d\xea\x99\x75\xaf\x18\xf7\x4a\x81\x17\x88\x1d\x67\x4e\x3b\x2c\xab\x01\x76\x7c\x1f\x77\x38\x8b\x5d\xe2\x83\xb2\x03\x70\x8d\xd3\xa0\x6e\xe9\xbd\x0e\xd0\xc7\x55\xee\x6e\xf9\x58\xee\xf2\xcf\x23\x00\xc2\xfa\xf2\x39\x82\xa9\xd9\x35\xb0\xf8\xb0\x6b\xd7\xc0\xe2\x03\xaf\x5d\x03\x8b\x5d\x03\x8b\xcd\xeb\xc1\xa4\x0c\xee\x1a\x58\x7c\x59\xa0\x64\xbb\x06\x16\xf7\xed\x62\xde\x35\xb0\xd8\x35\xb0\xb8\xed\xda\x35\xb0\x78\xcf\xb5\x6b\x60\xd1\xe1\xfa\x02\x38\xd7\xae\x81\x45\x87\x6b\xd7\xc0\x62\xfb\xb5\x6b\x60\xb1\x79\xed\x1a\x58\xdc\x78\xed\x1a\x58\x74\xbe\x76\x0d\x2c\x76\x0d\x2c\x76\xb8\xbe\x77\x1b\xeb\x61\xe2\xfa\xb2\x5d\x03\x0b\xba\x76\x0d\x2c\xbe\x08\xf4\x52\xb6\x6b\x60\xf1\x41\xd7\xae\x81\xc5\xae\x81\x45\x97\x6b\xd7\xc0\xe2\x4b\x71\x97\xec\x1a\x58\xec\x1a\x58\xfc\x76\x14\xdd\x5d\x03\x8b\x5d\x03\x8b\x5d\x03\x8b\x5d\x03\x8b\x5b\x67\xb1\x6b\x60\xf1\x25\x98\x80\xc6\xa6\xb2\x13\x2c\xe4\x87\x20\xd8\x50\x66\x72\x54\x30\x3e\xab\xe6\x73\x51\x02\xe7\x82\x27\x6f\x24\x4f\xd5\x60\x7d\xed\x20\xab\xb0\x63\x00\xc3\xa1\x22\x8e\x1b\x7e\x4e\x15\xea\x00\xdf\x58\xa7\x0f\x9f\xbc\x7c\xb6\x05\x2e\xa7\x73\x56\x61\xd7\xc4\x59\x98\xf3\x4b\xd5\x2d\x3e\x7e\x03\xc1\xb7\x15\x15\x11\xdd\x93\x4c\x1b\x4a\x7b\x06\x62\x25\x4b\xae\x94\xf0\xf6\x9e\xb4\xe0\x47\x99\x09\xa1\x98\x2e\x04\x45\xa7\x39\x33\x52\x2d\x32\xc1\xb8\xb5\x3c\x59\x4e\xdd\x93\x94\x27\x76\x9d\xa2\x4c\x9f\x18\x5b\x0a\x9e\xfb\x64\xed\x9c\x4b\x1c\x8a\xf1\xa4\xd4\xc6\xb0\xbc\xca\xac\x2c\xc2\x60\xcc\x08\xa8\xb2\x40\x41\x15\x88\x01\x59\x71\x75\x5e\xf3\xb8\x7e\x1a\x4d\x4b\xc7\x78\x65\x60\x6d\x8e\x01\xe2\x39\x2f\xec\x9a\xb9\x57\xce\x08\xf6\xb5\x34\x96\x25\x99\x04\x69\x0d\x4f\xc4\x82\x5a\x18\x6f\xec\x65\xb5\xa2\x99\x1a\x9a\xaa\x4a\x41\x6d\x2d\xac\x61\x90\x06\x5c\x0f\x48\x43\xa5\xd2\x90\x9a\x6f\xc6\x8c\x7b\x30\x2d\x24\xb4\x9f\x29\x90\xda\x4b\x16\x1c\x9d\x3e\x8a\x86\x8b\x40\x44\xdd\xde\x44\x07\x56\xbd\xd1\x21\xef\xdd\x6f\xce\x71\x23\xc5\xbf\x56\x28\xa8\x93\x41\xeb\x18\xc0\x02\x28\xb1\x72\x7b\x40\x24\xc2\xc9\x57\x7e\xc3\xae\xff\xe4\x9b\xde\xf2\x72\x21\x6c\xc8\x67\xea\x9a\x2b\xde\x4c\x0b\x89\xe1\x7e\x63\x43\xa4\x26\x19\x50\x87\x7a\x82\x44\x75\x55\xdb\xf0\x84\x71\x86\x04\xa3\xb6\xed\x06\xaf\x18\x61\x8a\x66\xdd\x25\xa6\xe0\x89\x30\xec\xe0\xf4\xfc\xe9\x98\x9d\x9f\x1e\x53\x1e\xa6\x9e\x6f\xab\x63\x26\x1e\x86\x3b\xf0\x26\x64\xe3\x80\xd0\x16\x0d\x1f\xd5\x7e\xd2\xb3\xcf\x83\x7e\x05\xad\x5f\xb6\x71\x00\x50\xb9\x02\xba\x39\x33\x15\xa8\x48\xe4\x13\x92\xa1\x30\x83\x36\x9f\xa8\xcb\x11\x3d\xee\x90\xff\x45\x98\x08\x51\x89\xaa\x2e\x7c\xac\x1b\x18\x2c\xc8\xeb\x8d\xd2\x0e\x48\x05\xa5\xbc\x97\x4e\xf9\x2e\xbd\x2c\xa4\x48\x15\x7b\x21\x8c\xe1\x0b\x71\xde\x31\xbc\x75\x93\x1f\x00\x22\x5c\x35\x3b\x00\x06\x94\x61\xa1\x6f\xf8\xa4\xce\x09\x6e\x2a\xdf\x2c\xc7\x39\x85\x9d\x75\x5d\x4a\x6b\x05\xb0\x12\x00\xfb\x83\xc5\x6e\x63\x01\xec\xb7\x32\x8b\x5f\xf8\x41\xea\x1f\x3b\x55\x42\xa5\x98\xe7\x3b\x13\x6c\x56\x4a\x31\x67\x73\x09\xc9\xc3\x90\xce\x3b\x46\xec\x27\x8e\xbe\x27\x63\x44\x89\x1d\x85\xd0\x82\xf2\xf3\x9a\xb2\x9f\x68\x62\xb6\xac\x14\x76\x8c\x22\xe5\x1e\x8a\x5d\xe5\x9c\x2d\x20\x1d\x98\x6c\x94\x3f\x3e\xfa\xeb\x9f\xd9\x6c\xed\x14\x29\xd8\x90\x56\x5b\x9e\x85\x97\xcc\x84\x5a\x38\x5a\xa1\x50\x68\x96\x6b\x06\x0a\x40\x5b\x10\x9c\xf8\xe3\xaf\xaf\x66\x4d\xcd\xee\x30\x15\xab\xc3\x88\x7e\x93\x4c\x2f\xa6\xec\x69\xa8\x8e\xac\x8a\x14\xfc\xfc\xdd\xa1\xba\x87\xdb\x66\x3a\x93\xc9\xba\xf7\x46\xf3\x20\x64\x6c\xa9\xaf\xd1\xc2\xdc\xb2\x7b\xea\xca\xaf\x42\x17\x55\x86\xa1\x8e\x67\xa1\xd0\xb9\x32\x62\xb3\x1c\x71\xeb\xb9\x00\xe7\x3c\x0d\xd1\xe2\xa3\x94\x05\xee\x1f\xa9\xa9\xcc\x85\xdc\xc7\x01\x8b\x0c\x98\xc9\x33\x9e\x65\x33\x9e\x5c\x5d\xea\xe7\x7a\x61\x5e\xaa\x93\xb2\xd4\x65\x73\x2e\x19\x77\x32\x7a\x59\xa9\x2b\x6c\x05\x11\xd0\x1a\xf4\xc2\x29\xf4\x45\x65\x3d\xb8\xf7\xb6\x17\xc6\xd2\x7d\x2f\xfa\xbd\xf1\x5d\x8f\x22\xde\xca\xda\xc2\xa6\xaa\x31\xdc\x91\xf1\xf8\x26\xde\x6c\x5f\x3f\xfa\xe3\x5f\x70\xeb\x32\x5d\xb2\xbf\x3c\x82\x4a\x01\x33\xc6\x43\x0c\x12\xd5\xa9\x27\x39\xcf\x32\xc7\xc8\xe3\x4d\xe9\x08\xbd\x6d\x13\x7e\xf2\x3d\x68\xfb\x6f\xb7\x0f\x56\xe0\x2f\x2f\xff\x09\x52\x44\x5a\x23\xb2\xf9\x18\x0b\xa4\x82\x31\xbd\x0f\xea\xc8\x3e\x71\x1f\xa8\x52\x7b\x00\x6a\xf7\x4a\x67\x55\x2e\x8e\xc5\x4a\x0e\xd1\xa8\xaf\x31\x9a\x77\x30\x65\xd2\x80\x1c\x9c\x65\x3a\xb9\x62\x29\x7d\x19\xe5\x3b\xb5\x41\xc9\xbb\x53\xa1\x6b\xe6\x57\x8f\x8c\xaf\x1b\xdf\xbf\x91\xeb\x95\xf3\xa2\x70\x3a\x00\xd4\x61\x96\xfc\xba\x41\x0c\x38\x93\x80\x9c\xd0\x13\xda\xa6\x77\x70\xa3\x6f\x68\x63\x42\x6f\xe4\xf8\x66\xe7\x21\x3a\xe7\x3a\xf5\x8f\x8c\xd4\xb3\x1f\xa8\x3d\x5f\x3d\xa0\x3f\x0d\x05\xfc\x1b\x6b\x99\x36\x14\xf3\x00\xaa\x19\x36\x06\x2a\x00\x6e\xfb\x00\x4b\xee\xdb\xb2\xaf\x97\x4f\xbd\x5f\xa2\x5b\x83\x2e\xea\x96\x1e\x77\x9c\x15\xa2\x34\xd2\x38\xb9\xfc\x23\x1c\x28\x6c\x6e\x58\x3b\x9e\xef\x87\x08\x78\xb8\x01\xc9\xb9\x3f\xa7\x74\x76\x0a\x0e\x08\xac\x10\x51\xac\xb7\xa8\xb5\x4d\xad\xf6\xa2\x9a\xc1\xfe\x81\xdb\xef\xd2\x0d\x75\x40\x49\x7c\xdf\x3c\xf6\xc7\x7a\x19\x9a\x2c\xd6\x7d\x12\x78\x2c\xde\xf5\x25\x71\x56\x78\xbf\xcf\x95\xb1\x86\xc9\x0f\xc4\x3f\x80\xa3\xd2\xe2\x36\x59\x68\xc3\xea\xc4\x13\x16\xd9\x02\x64\x40\x4e\x19\x26\x6d\xb8\x33\x41\x3f\x65\xfb\x4f\xf6\xef\x95\xbb\x22\x89\x4a\x5d\xf0\x45\xaf\x7e\x44\x2d\x4a\xb5\x87\x8d\xc1\x32\x9c\xfd\x14\xb1\x92\x82\xee\x72\x9c\xc4\x63\x01\x01\xd2\x13\x06\xf3\x3d\x81\xc9\xb2\x80\x7e\x71\xec\x9a\xaf\x19\x2f\x75\xa5\x52\x72\x87\x06\x7f\xf4\x8b\xd6\x83\xcf\xb4\x12\x75\xfb\xd1\x26\xd6\x06\x04\xa0\xa4\x62\x8f\xa7\x8f\x1f\x7d\x29\x22\x0e\xde\xb0\x25\xe2\xce\x82\x88\x43\xfe\x74\xaf\xef\xea\x51\xfb\x07\x7a\xdf\x17\xe4\x9b\xa9\x41\xf9\xa5\x87\xfc\x86\x8f\xae\x4b\x69\x45\xd4\x65\xf0\x00\x2c\x1e\x67\x58\x46\xc8\x12\xa3\x6d\xdd\x30\x7a\x12\xa9\x1f\x94\x87\xa9\x66\x1f\x91\x6f\x11\x83\x82\xe3\xb6\xcd\x35\x66\x6e\x61\x61\x31\xa1\xf6\xf6\xd8\x01\xde\xb9\x8f\xf5\xf7\xa3\x7b\xdd\x5a\x44\xb4\x93\xb7\x45\x0f\x9c\xd0\x16\xd4\x43\xc1\xc1\x79\x57\x0c\x48\xc1\x7f\x88\x25\x5f\x09\xc0\x1d\x90\x19\x2f\x33\x08\x91\x5f\xe0\xdc\xd9\xac\xb2\x4c\xa8\x95\x2c\xb5\x02\x3f\xf1\x8a\x97\x12\x90\x7d\xa2\x26\xdb\xbf\x3f\xf8\xf1\xe8\x15\xe4\xdf\x8c\xb0\xeb\x8b\x9f\x65\x65\x3c\x04\x4f\x3c\x93\x68\xb8\xf7\x2e\x9f\x9f\x87\xa3\x21\xf0\x5c\x3f\x2f\xf7\x9c\xbc\xb2\x15\xb6\x96\x79\x9b\x64\x95\x91\xab\xfb\xe2\x24\x04\x08\x71\x2c\x3b\xad\x73\x0b\x9c\xa2\x26\xd4\x06\xce\x44\x1d\x26\x78\x0f\x0c\xf7\xbe\x09\x35\xa6\x71\xca\x06\xf9\xac\x58\x2e\x17\x4b\x4b\xd9\x9e\xad\xc8\x41\x14\x82\xca\xc1\xcd\x7b\x9f\xde\x2b\x27\x76\x8f\x32\xc9\xcd\x5d\x55\xae\x8d\x42\x46\x1a\x85\xba\xeb\x6b\x9f\x5b\xe4\x9d\x32\xee\x41\xe8\xa9\x3c\x3d\xa7\x08\x9a\xa7\x9b\x54\xff\x8d\x89\x35\xc1\x2c\xc1\x44\x19\xfc\x09\xba\x1b\xe7\x2c\x02\x05\xf2\x09\x25\xc0\xfc\x01\x89\x0a\x2c\x12\xa5\xd5\x64\x19\x81\x36\x15\x3a\xbd\x63\x91\x5f\x57\xc3\xa3\x93\xc9\xb1\x9d\x82\x6c\xa9\xb3\xd4\xf7\xd0\x46\x5f\xce\x4c\xd8\x6b\x21\x14\x3b\x3d\x07\xfa\xb9\x57\x84\x88\xd0\x0d\x54\xc4\xb0\x42\x68\xde\xbe\x8d\x9e\x77\xdd\x60\x3d\xac\x92\x3e\x2a\x7d\x78\xd3\xde\x67\xfe\xfb\x40\x33\x9f\x91\xcd\x67\x7a\x25\x80\xa4\x69\x5a\x0a\xd3\x03\xde\xe8\x1e\xec\xd4\x5e\xac\x54\x76\x6a\xef\xd3\x0c\x8c\x04\xb2\x79\xd7\x12\xa8\xef\x70\x54\x61\xe3\x7d\x62\x0e\x76\x7a\xfe\xb4\x07\xf7\xda\x7f\x4d\x71\x11\x37\xd4\xfe\xbe\x61\xb2\x48\xea\x98\xeb\x94\xd5\xe1\xc6\xa8\x50\x02\x35\xc6\xbb\xc5\xba\xba\xaa\x89\x11\x53\xeb\xc9\xa4\x99\xc2\x61\x1c\x5b\xa1\x22\x69\x72\xe7\x40\xd0\xa1\xd0\x29\xf4\x5f\xaa\xa9\x61\xfc\x2f\x62\x82\xf8\x64\x09\x64\xf2\x94\x3a\x32\x0e\x49\xc8\x2d\xc6\x04\xae\x77\x9f\x7e\x18\x71\xf1\x0d\x62\x7e\x32\x5a\x9e\x9f\x1e\x0f\xb9\x5d\x0a\x99\x3e\xb8\xed\xf2\xda\xdc\xb9\xd8\xfe\xf6\x97\x04\xe4\xbe\xf7\xbd\x25\x06\x9b\x08\x8c\x8f\xfe\x86\x34\x75\x6d\x19\x75\x77\x0c\x99\xb0\xdb\x12\x3a\x80\x8b\x34\x9f\x34\x76\x7f\xcf\xab\x0c\x36\x69\x9d\xdc\x1b\x32\x93\x79\xc8\x0b\x05\x6d\x80\xaf\xb8\xcc\x10\x17\x53\xdf\x3c\xa4\x0f\xbf\x67\x9a\xa7\x58\xee\x71\x25\x4a\x25\x32\x96\xeb\xb4\xca\xd0\x9b\x17\xba\x08\xbf\x78\x79\xfc\xfa\xf9\x89\x4f\xc2\x12\xf5\x72\x8e\x19\x67\x4a\x5c\xc3\xe8\x0a\x14\x92\x84\xe0\xb9\x42\xd9\x8f\x3b\x4f\x1e\x71\x13\xcd\x50\x74\x4c\xf8\x17\xca\xa5\x95\x0b\x84\xd1\xac\xd5\xc2\x59\x29\xf8\x95\xae\x2c\x5b\x55\x99\x12\x65\xdd\x05\x53\xac\x84\x42\x1f\xac\xfb\x81\x7b\x6c\x8c\xc8\x28\xcb\x06\x10\x26\xc1\xa3\x79\x70\x4f\x9e\x90\x26\x4f\x25\x46\xf0\x65\xd4\x02\xba\xd1\x28\xf2\x76\x80\x52\xaf\x79\x45\xd8\xa4\x58\x4e\xbc\x09\x4c\xea\x31\x24\x31\x8d\xe6\xc2\x67\xc0\x50\xe2\xcb\xa7\x3b\x0e\x77\x77\xb7\x34\x2b\x44\x9b\xc0\x2a\x34\xa0\x97\x7d\xe7\x3a\xbd\xc1\x6a\xa8\xf5\x2e\xb8\x3f\x6e\x8c\x6d\x35\xe3\x0c\xdd\xed\x13\x0f\x4c\x03\x99\xb2\x5d\xd8\xe0\x9d\x85\x26\x58\x1e\xe7\x55\x96\x5d\x88\xa4\x14\x77\x0d\x33\x34\x39\xc5\x69\x6b\xac\x9b\x2c\x80\xc8\x9c\x05\xb4\x0e\xba\x59\xd5\x98\xb0\x51\x9e\x53\x5d\x8b\x5b\x54\x19\xa4\x86\x73\xb5\xf6\x04\x87\xd9\x9b\x28\xa6\x2b\x8d\xcf\x32\x43\xee\xd3\x58\x05\x23\xc2\xc3\x42\x8b\x35\x6e\x0c\x66\x1e\x48\x95\xca\x95\x4c\x2b\x9e\xc1\x83\xc0\x28\xa3\x84\x2d\x4e\x68\xe5\x78\x96\x73\x8f\x71\x7c\xd7\x1c\xe6\xfa\x4c\x1e\xe2\xbc\x7f\x87\xd3\x5b\x4b\xb5\x98\xc0\x27\xee\xc1\x34\xc3\x89\x56\x13\x3e\x71\xdb\xe6\x33\xb1\x5b\x00\xa5\xff\x25\x18\x06\xaf\xfc\xfa\x7a\x36\x64\x98\x50\xba\x5a\x2c\x81\x58\x65\xce\x3d\x60\x66\x26\x2c\x60\x21\x52\x3e\x03\x26\xb1\xd1\x6f\x53\xb2\x32\x62\x6c\xc8\xe6\xde\xf8\x4c\x6c\x97\xae\x0e\xde\x56\x32\x7e\xc4\x66\x88\x46\xf6\xce\x3b\x50\xaf\x44\xb9\x92\xe2\xfa\x90\x34\xbf\x89\x93\x09\x13\xa4\x88\x39\x04\xc2\x1e\xfe\x0e\xad\xa3\xcb\x97\xc7\x2f\xa1\xb1\x38\x79\xdd\xbd\xa8\x72\xa2\xc0\x4c\x19\x2f\xe4\x8f\xa2\x34\x00\x9d\x7c\x25\x55\x3a\x66\x95\x4c\xbf\xfd\x84\x09\x5f\x52\xc9\x3a\x8b\xb5\x17\xd7\x7a\x4e\x5c\x89\xaa\xe8\xe5\x7f\x70\x7b\x46\x12\x74\x26\x32\xad\x16\x11\x06\x00\x48\xf3\x53\x25\xed\x46\x0f\x66\xc4\x33\x05\x0f\x8f\x2e\x53\xc8\x15\x96\xba\x6c\x84\x33\xdc\x78\x80\xf2\x18\x65\x1c\x3b\x96\x26\x1b\xe3\x41\x1a\x97\xa9\x75\x24\x4c\x04\xf2\xe5\xc2\x1e\x04\xdb\xa3\x47\xa2\x2c\x5e\x72\x95\xc2\x9f\x49\xa2\xcb\x94\xe6\x2b\x6d\x48\x6f\xc6\x64\x38\xcc\xc0\x02\x31\xe4\x38\x1a\x57\xed\x27\x83\x9a\x56\xe6\x8d\x54\x58\xaf\xb5\x57\x4a\xfe\xbb\x12\x8c\xe7\xda\x31\xe2\x76\xab\x87\x16\x45\x72\xbe\x06\x59\x08\x53\x7d\xee\xcb\x35\xa8\xc6\xd6\x8c\xd9\x2b\xe1\x94\xae\x1a\x26\x60\xcc\x9e\x37\x71\x03\xc6\x6e\x2e\x17\x58\xd0\x4c\x1f\xe1\xec\x4b\x61\x74\x55\x26\xe2\x15\xc6\x38\x73\x9f\x4f\xb7\xf9\x32\x6e\x55\x2c\xbf\x12\x0a\x7d\x4a\x8e\x34\x10\xc6\xad\x4a\x58\x83\x64\x29\xd2\x0a\xa4\xca\x6c\xcd\xe6\x12\xfb\xbf\x80\x68\x97\x8b\xa5\x30\xd6\xdb\x46\x87\x90\xa3\x56\xb7\xd2\xf3\x13\x80\xed\x1b\x25\xb3\xd7\x5e\xd8\x9c\x03\x3a\x39\x1c\x59\x6e\x7d\xbd\x16\x6a\x83\xa6\xca\xfd\x59\x6e\x53\xda\x4c\xd9\x73\xf7\x28\xdc\x4f\x51\x5f\x0d\xd9\x22\x2e\xc4\x98\xc9\x8d\xcc\xe6\xdc\x2c\xa1\xeb\x4c\x7b\x09\xa8\x65\x45\x52\x95\x8e\x61\x20\x92\x3c\x4f\x53\xc7\x5d\x4b\x56\x62\x63\xf9\x6d\x7e\xc7\x9e\xf5\x39\x6e\xb2\x93\x48\xde\x7d\x2e\x42\xec\x28\xd4\x5b\x38\xc2\x27\x2d\x4e\x80\x2b\xe9\x04\x96\x47\x5c\x73\x0a\x77\x08\xf8\x3b\xae\xf0\xe9\x44\x52\xf7\xf0\x7e\xa7\xb0\x7c\x1f\x09\xc8\xcb\x45\x7f\xc7\xdd\xfe\x51\xb9\xa8\xf0\xa0\x13\x17\xae\x71\xe7\xa7\xad\xbc\x7b\x50\xa6\x9c\xad\xfa\xf4\xc5\x71\x5c\xe8\x17\x57\x30\xf9\x32\xc9\x29\xfb\xb1\x6f\x98\xa5\x1d\x67\x71\x0c\xbd\x0e\xde\xd4\x5d\x63\x1c\xd3\xc8\x56\xde\x24\x08\x4f\xf3\x9a\xaf\x54\x45\x65\x49\x12\xd6\x3e\x13\x95\x2c\xb9\x5a\x80\x9b\x44\x57\x6e\xbc\xdf\xff\x1e\x66\x54\x8a\xb4\x4a\xa8\xe5\x8e\xdf\xb5\xbf\xf7\x41\x07\x02\xba\x03\x76\x65\x12\x5e\xf8\x39\xc7\xaf\x65\xd6\xca\xf2\xb7\x4f\x98\x9c\x8a\x29\xdb\xfb\x7d\xf4\xd5\x1e\x3e\xbd\x28\xb5\x7b\x04\x15\x18\xc1\xac\x32\x69\x21\xd1\x67\x2f\xbe\x7b\xca\x4e\xdc\x33\x20\x10\x1b\x08\x18\xd5\xc0\xcc\x6a\xf2\x8d\x59\x29\x16\xbc\x4c\x33\x72\x18\x5e\x47\x85\x53\x81\x60\xe2\xad\x34\xd6\x90\xb7\xa0\x07\x73\xb2\xdc\x5c\x39\x56\xe4\x0e\xd7\x24\xe5\x96\x4f\xa2\x53\x7d\x88\xa6\xd6\x84\xb0\xc0\x27\x9c\x76\x57\xcd\xb5\x0e\x7f\x47\xf5\xc7\x13\x1e\xee\x92\x4e\x29\x07\x54\xee\xee\xaa\xce\xe7\xe6\x25\xee\x01\x09\xdf\x3c\xc0\x27\x75\x9f\x08\xa0\x01\x74\x59\xaa\x55\xa6\xc0\x47\x09\xf5\xfc\x86\x23\x7d\x72\x76\xf9\xea\x9f\xe7\x2f\x4f\xcf\x2e\x77\x27\x7b\x77\xb2\x77\x27\xbb\xc7\xc9\x16\x6a\xd5\xfb\x54\x7b\xeb\x69\x5b\xde\x42\x1b\x8c\x35\x2a\xc1\xfb\x82\xb2\x43\x4f\xd4\xea\x47\xee\x94\x69\xf2\x6b\x53\xd0\x75\x4b\x1a\x07\xdd\x80\xaa\xfb\xd3\xcf\x3e\x3d\xf4\x1e\x93\x3b\x07\x4c\x9a\x8b\x1d\x2b\xdb\x56\x2d\xee\x11\xfa\xf4\xd7\xd3\xe3\x93\xb3\xcb\xd3\x67\xa7\x27\xaf\xee\x35\xdb\xa9\x27\x18\x6a\x53\x2e\x77\x94\x92\x45\x29\x56\x52\x57\x26\x5b\x07\x3c\xf5\xed\x4c\x60\x33\x61\x56\xa5\xe0\xf1\xf0\x90\xf1\x5b\x7f\xb6\x13\xb6\xc3\x0a\xdb\x66\xf2\x57\x0f\x1c\xac\xa1\xb6\xef\xb3\x52\xe7\x03\x6d\xe1\x0b\xf4\xc5\xf8\x60\xdb\xb6\xfd\xb4\x4f\x90\x39\x0d\xd1\x43\xca\x63\x8d\xcf\xe3\xf4\xd1\xbc\xb0\x3d\x9a\xe5\x0c\x02\x7f\x3d\x0c\x52\x34\x26\x9c\xbd\xe0\xc5\x0f\x62\xfd\x4a\xf4\x84\xdb\x6a\xd2\x5b\x64\x22\x71\x82\x8e\x5d\x89\x35\x66\x17\x3f\xf5\x0f\xeb\x03\x0b\xf6\x20\xd1\xc3\xaf\x44\x1f\x64\xf7\x21\x61\xbf\xaf\x44\x8f\xcc\x69\x7f\x6d\x00\x60\xbb\x25\x04\x3d\xcd\xad\x69\xbf\xd5\x63\xc3\x42\x7e\x7f\x04\x98\xf3\x2f\x37\x8e\xd2\xbc\x06\x5c\x05\x1f\xbe\x1d\x78\x25\x30\x92\xbe\x6e\xc8\xae\xc0\x44\x18\xd6\x34\xc3\xde\xf4\xa1\x07\x52\x32\x06\x22\x4d\xdf\x6e\x9b\x0c\x97\x70\x58\xbe\xba\x5f\x33\x56\xcc\xb9\x08\x80\x8e\xe9\x13\x8f\x01\x62\x42\x8b\x4c\x68\x3a\x3d\x6e\xfe\x49\x69\x2d\xff\x0a\x1f\x66\x7c\x26\x32\xf3\xf3\xfe\xfe\xdf\x7e\x38\xf9\xe7\xdf\xf7\xf7\x7f\xf9\x57\xfc\x2d\x88\x42\x0c\x6f\x37\x6f\x01\x40\x13\xa5\x53\x71\x06\xcf\x80\x3f\x49\x5d\x3b\xc2\x10\x0a\x7d\x01\x78\x04\x53\x4c\xbd\x0b\x7f\x16\x3a\x6d\xff\x65\x7a\x21\x6f\x3e\x48\xc1\x00\x4b\xd4\xa3\x3c\x0e\xaf\xe1\xc4\x43\xcd\x4b\x06\x3e\xaa\x34\x6a\xe8\xf4\x94\x2c\x45\x8e\xd8\x7f\xcf\x3c\x09\xa0\x8d\xb7\x07\x3e\x51\x80\x16\xe1\x34\xd3\x26\x0c\xeb\xde\xea\xf1\xde\x83\x12\x30\x61\x05\x07\x26\x18\x50\x84\xa8\x85\x07\x39\x08\xd8\x90\xe6\x12\xda\xcc\x1e\x9d\x9f\xb2\x15\x52\xf8\xc1\x10\xc7\x87\x37\x9f\x7d\x54\x1e\x17\x82\xa8\xed\xaa\xf4\x27\x98\x56\xe6\xbf\x27\x84\x10\x13\xa0\x22\x85\x33\x6c\x0e\xf0\xc3\x69\x52\x54\x63\xba\x61\x9a\x8b\x5c\x97\xeb\xf0\x67\xa8\x4c\x9e\x18\xab\x4b\xbe\x80\xc2\x30\xfc\x39\xfe\x2c\xfc\x85\x3f\x6c\x3c\x60\xf3\xd7\x68\x0a\xd7\xb1\x54\xe2\xc8\x1d\x91\x6e\xea\xeb\x01\xf2\x36\x4f\xfa\x07\xc2\xda\x92\xbe\x78\x65\xcd\xab\xb9\x21\x83\x27\x0e\x15\xce\x40\x45\xb0\x27\xa9\x62\x7e\x5c\x67\xb1\x81\x37\x40\xad\x9c\x65\xd9\x19\x69\xb2\xbe\x06\xe4\x66\xa9\x5c\x49\xa3\x7b\x94\xbf\x85\x81\x6e\xce\x78\x24\xd0\x1e\xcc\xe2\x0a\x6e\xb3\xb7\x05\x80\xeb\x85\xf3\xda\x62\xfb\x8f\xfb\xf4\xd7\xc3\xab\xe0\xd6\x8a\x52\x3d\x61\xff\x75\xf0\xe6\xab\x77\x93\xd1\xb7\x07\x07\x3f\x3f\x9a\xfc\xf5\x97\xaf\x0e\xde\x4c\xe1\x1f\x7f\x18\x7d\x3b\x7a\xe7\xff\xf8\x6a\x34\x3a\x38\xf8\xf9\x87\x17\xdf\x5d\x9e\x9f\xfc\x22\x47\xef\x7e\x56\x55\x7e\x85\x7f\xbd\x3b\xf8\x59\x9c\xfc\xf2\x81\x83\x8c\x46\xdf\xfe\xbe\xf7\xd4\x07\xc0\xba\xc6\x6b\x48\xc4\xeb\xe6\x88\x83\x6c\xbf\x8f\xd8\xe6\x05\x2f\xbf\xbd\x86\x3e\xff\xaf\x3c\xd7\x8c\xb2\x7a\xbc\xb8\x7e\x30\x07\x1c\xd3\x42\x3f\x85\x27\x07\x9f\xd4\x2c\x18\x0b\xa6\xc5\x97\x26\xe7\x7e\x0b\xce\x9d\xd0\xa0\x15\xd6\xb5\xd6\x44\xe7\xa5\xce\x3d\x2c\x05\x84\x37\xb0\x80\x92\xee\xbb\x12\xbd\x5a\x86\xe3\xb5\x73\x06\xed\x9c\x41\x37\x5c\xef\x75\x06\x61\x11\xc1\xc3\xf5\x04\x09\xb5\xea\x1a\xc2\xd8\x1a\x41\xf7\xb6\x4e\x0c\xfe\xf8\x61\x01\xb5\xa9\x3f\xea\x75\x67\xe3\x3a\x99\x06\x05\x5a\xbe\x3d\x86\xc9\x8e\xb2\x8c\x49\x85\x07\x1f\x06\x08\xb5\x58\x02\x4d\x1b\x5f\x44\xbc\x72\x53\x08\x55\x57\x0d\xf0\x64\xc8\x2d\x96\x6a\x41\x85\x51\x28\x4a\x28\xfa\x24\x55\x0d\x3b\x1d\x94\xc3\xba\x57\x01\x37\x46\x27\xd0\x14\x0c\x2b\xad\x02\x26\x25\x4d\x1b\x66\x63\xf9\x15\x44\x1b\x13\x91\x0a\x95\x08\xea\x63\xd0\xe8\xe2\xcc\x15\x3b\x51\x2b\xdf\xcb\x21\xad\x30\x19\x04\xd9\xdf\xf6\x31\xbe\xac\x04\x04\xb7\x11\x29\x08\x16\xe5\x21\x00\xd7\x0f\x16\x36\x87\x54\x0c\x3d\xaf\xbd\xac\xdd\x1a\xbd\xf6\x96\xe2\xfd\x65\x66\x88\x6c\xf5\x52\x86\x36\x84\x65\xed\x7e\x6e\x0a\xc9\x2f\x21\x18\xd8\x5f\x7c\xfe\xe6\x44\xe7\x40\x62\x73\x18\x91\x79\x87\xd8\xc9\x90\x62\x72\x88\x60\x49\x51\x8a\xb9\x7c\x3b\xd0\x39\x3d\x8a\xea\x09\x65\x2a\x94\x95\x73\x89\xbd\xac\x8b\x52\x14\x42\x81\xab\x15\x4a\x34\x1c\xef\x27\x49\x59\x07\xa7\x1f\x62\x32\x0f\x2a\xdc\xc3\xb2\xb2\x8b\x6d\xca\xfe\x8e\x8f\xb1\x1d\x1f\xeb\x7c\x7d\x22\x3e\x46\x3b\xf7\xe1\x30\x31\xc8\x3c\xef\x9f\xfd\xfe\xb4\x99\xca\x0e\x1b\xb9\x7f\x09\x71\xab\x40\x3f\xb0\x46\xab\x31\x79\x0d\xeb\xd8\x4a\x86\x35\xfb\xa8\x37\xb1\x9c\x2b\xbe\xc0\x56\x14\x56\x07\xf0\x2a\x5d\x86\x76\x62\xed\xbc\x7b\xd0\xe3\x7d\x89\x17\x7c\x59\xea\x2c\x13\xa5\x61\x99\xbc\x12\xec\x58\x14\x99\x5e\xe7\x94\xfb\x9a\xb2\x0b\xcb\xad\xdb\xd5\x17\xc2\x76\x0b\xfb\xf6\x43\xb5\xf1\x55\xe8\x03\x61\xff\x63\x59\x3b\x14\x85\xb3\x82\x2a\x28\x5f\x2a\x60\x1a\x47\xd0\xd9\x68\xcc\xce\xc4\x4a\x94\x63\x76\x3a\x3f\xd3\xf6\x1c\xb5\xef\x66\xc2\x1d\xde\xc8\xe4\x9c\x3d\x71\x76\x9d\xb1\xcc\x62\x77\x99\xa8\x40\x5d\x97\x8d\x01\x6a\xdc\xc2\x21\xea\xf3\x36\x6b\xcf\x61\xa4\x50\x79\xde\x29\x92\xd1\x6b\x99\x42\xfb\xae\xde\x0b\x74\x84\xf5\xa4\x35\x94\x75\xb4\xbf\x11\x57\xc1\x23\xf1\x81\x15\x28\x15\x2b\x85\x29\xb4\x32\xa2\x09\x33\x1a\x66\x84\xd6\xee\xb0\x18\xc6\x9d\x85\x67\x5f\xb1\x59\x68\x63\xa1\x84\x76\x98\xa6\x70\xe7\x7e\x38\xa8\x48\xe6\x59\x26\xd2\x46\x57\x40\xec\x66\xc5\x9b\x1e\x02\x42\x43\x09\xfd\x6d\xb0\x50\xb9\x51\xe3\xdc\xb8\x3f\x74\x98\xf4\x3d\x9c\x7c\x7b\xf1\x9b\x2a\x9b\xeb\x83\x09\x72\x24\xda\x00\x1b\x80\xe7\x00\x83\x6f\xa2\x46\x50\x4b\xad\xaf\x58\xa2\xf3\x22\x83\xa3\xd3\xe3\x64\xd5\x7d\xe8\xc2\x56\x9a\xb8\xd1\xcd\x61\xd4\xa2\x0e\x3e\xe8\xd7\xa1\xae\x97\x22\x36\x84\x1a\x26\xde\x8a\x64\xb0\x1e\xb6\x27\x6f\x45\x12\x35\x61\x06\x48\xb6\xc4\x23\x44\xb8\x13\xdb\xbf\xb7\x7e\xef\x90\xc3\x50\x6e\xfe\x1e\xb5\x74\xf1\xd5\x42\xb1\x84\x31\x3d\xda\x3f\x3d\x02\x1a\xa7\x80\x2d\x84\xf5\x75\x31\x8c\x46\xd8\x8c\x78\xf4\x36\xa0\x2f\x43\x22\xb5\x1f\x0b\x5a\xa4\x69\x6d\xd9\xc1\xfe\xe1\xfe\x68\xc3\xff\xd8\x82\x8c\xbf\x8c\x7e\x29\x01\xea\xb4\x00\xdc\x50\x91\xec\xa7\x63\x26\xad\xcf\xb4\x46\xb8\x27\x98\x15\x15\xfd\x8d\x99\xd1\xcc\x96\x3c\x95\xa4\xc6\xc0\xa7\xee\x26\x5b\x56\xc4\xe5\x0f\xf6\xdf\xed\x53\x6b\xaf\x6b\xad\xf6\x2d\x4c\x7f\xca\x2e\x11\x27\x26\x0c\xb4\xd6\x15\xe0\x42\x21\x09\x8a\x4c\x26\xd2\x66\x6b\xe0\x58\x4c\x57\x88\x49\xe5\xe4\x05\x15\x1b\x9e\xbc\x95\xd6\x37\xd7\xd1\x73\xf6\x08\xbb\xeb\x21\x86\x13\x37\xd0\x61\xfd\x70\x29\x78\x66\x97\x98\x24\xa2\xb4\x9a\x60\x83\x54\xc7\x4a\xe8\x9b\xbe\xf1\x92\x7e\xee\xc4\xf8\xea\xe1\x5a\xdc\x9c\x50\x4f\xcb\xc1\x31\xd1\xef\xba\x77\x6d\x67\x1b\xe8\x75\x97\x97\xe7\xdf\x35\xfa\xb6\x03\x17\xb7\xb6\xf0\xa9\x3b\xe0\x0d\x10\xe5\x5c\x97\xf9\x03\xe0\x1d\xc3\x04\x2b\x7b\x35\x70\x67\x03\xb2\xb0\xbe\x8d\xdc\xd9\x76\x34\xc2\x0f\xef\xe0\xce\xfe\xa9\x2b\x00\x03\xe1\xb3\x6c\x1d\x90\x18\x8c\xb0\x6c\xcf\x0d\xb5\xe7\xd8\x93\xdb\x0d\xdf\x0b\x9e\x22\x50\x86\xb1\x82\x77\x52\xdd\xe2\x6b\xb0\x20\x5a\x34\xb7\x61\xe5\x40\x65\xac\xce\xd9\x92\x5e\xbb\x59\x7a\x49\x27\x63\x0a\xa7\xc7\xd7\x35\x95\xa2\x40\x0e\x47\xbf\xf9\xe2\xf8\xd7\x06\xdf\x40\xba\x37\x9a\x78\x24\x31\xd9\xe2\x1e\x51\x52\x21\xb1\x10\x77\x66\x20\x5e\x3a\x40\xf2\x03\x1b\x30\x01\x82\xf5\x2b\xe4\x6c\x0f\x04\x41\xbd\xfe\xb9\x5e\x83\xe5\x54\xb0\xc1\xf2\x06\xd8\x36\x27\x2b\xed\x19\xf4\xbe\x0c\x44\xc4\x41\xa3\xf5\xac\x7f\xa9\x68\x7c\xdd\x4e\x80\x61\x16\x9f\x0d\x49\x81\x62\x80\xd4\xee\xcd\xc4\x6e\x84\x91\x82\xd2\x4b\x64\xae\xc0\x26\x10\xf8\xf2\xc1\x48\x19\xa7\x2d\x0c\xfa\xea\xe8\x28\x2f\x99\x0a\x5d\xe1\x3d\xca\xef\x26\x41\xa2\xcc\x04\x6a\x22\xef\xdd\xb9\x5e\x1c\x71\xb5\x10\xec\xb1\xfb\xe5\x9f\xff\xf4\xa7\x6f\xfe\x34\xc5\xe1\x43\x96\x82\x62\xa7\x47\x67\x47\xbf\x5e\xfc\xf8\x14\x8a\x63\xfb\x52\x75\xa0\x14\xcc\xa1\x13\x30\x07\x4d\xbf\xfc\xa8\xc9\x97\x50\xf2\xd1\x9b\x8b\x34\x7d\xff\x30\x64\x8c\xef\x49\xba\x5f\x84\xb3\x87\x18\xb4\xb1\x23\xd5\x1d\xb5\x07\x71\xc6\x6c\x52\x5c\xe8\xe4\x6a\x40\xbb\xe6\x58\x14\xa5\x48\xd0\x4f\x76\xf9\xf4\x1c\x47\x77\xf6\xe5\xd9\xcb\xcb\xba\xd4\x00\xf2\x71\x6a\x30\xbd\xef\xc9\x93\xe6\x6c\xd2\x2b\x51\xd8\x60\xba\xcf\x78\x72\x75\xcd\xcb\x14\x3c\x5b\xdc\x4a\x80\x0e\x46\xec\xbf\x52\x50\x1b\x37\x4c\xf8\x43\x90\x33\xdf\x26\x1b\x79\x39\x3a\x10\xbc\x3b\x14\x5c\x56\x98\x47\x33\xe7\x32\x03\x0f\x2a\x75\xa8\xc6\x8c\xa0\xa4\x08\x2e\xbd\xd8\xa7\xbd\x33\xbe\xfc\xf5\x60\x8d\xaf\xa8\x83\xf6\x5d\xed\xb0\xbe\x79\x89\x0f\x58\xd4\x91\x88\x2b\x1b\xcd\xec\x77\xa2\x6e\x80\xf1\x1e\xae\xa8\x2b\x4a\x71\x61\x75\xa7\x8e\x18\x6c\x33\x4a\x82\x83\xdd\x10\x23\x99\x89\xb9\x76\x4c\xf8\xc6\xa0\x47\x5a\xc1\x21\xe4\x0a\x8a\x03\xbd\x57\x4b\x37\x02\x1b\x98\x91\x19\xf0\xeb\x09\x38\xf5\xd0\xc4\x68\xa9\xbe\x17\xf8\xd8\xbd\x9d\xc8\x61\x76\xe3\xba\xca\x81\x3a\x91\xc3\x87\xc2\x26\xe8\xb9\x8d\x18\x39\x20\x87\xd2\xf4\xdb\x61\x94\xa4\xe4\x66\x89\x5d\xba\xc5\x5b\x69\x09\x97\xf5\x5c\xa7\xed\xde\xfa\x8b\x92\x27\x82\x15\xa2\x94\xda\x09\xa3\x4a\xd9\x54\x5f\x2b\x36\x13\x0b\xa9\x8c\x27\x05\x80\xa7\x13\xcd\x20\x1e\x23\x4d\x00\x86\x9b\xb2\x57\x0d\xb0\x13\x2a\x43\x4a\x74\x7d\x34\x69\xce\xed\x48\x12\x48\x2c\xa0\x13\x02\xde\x07\x0a\xc7\xdd\xbc\xde\x37\xe5\x83\x4a\xc1\x93\x53\x91\xf1\x35\x66\x9b\x42\x07\x7f\xf9\x1f\x51\x9a\xd1\x00\x11\x27\xec\x47\xe7\xbf\xbb\x71\x1e\xd2\xb0\x52\xf0\x64\xd9\x2f\xf8\xbb\x0b\x51\x7d\xe0\xb5\x0b\x51\xf5\x19\x64\x17\xa2\xda\x85\xa8\xde\x73\xed\x42\x54\xbb\x10\x55\xeb\x7a\xb0\x56\xd2\x2e\x44\xd5\xf9\xda\x85\xa8\x6e\xbf\x76\x21\xaa\x0f\xb8\x76\x21\xaa\x0f\xbc\x76\x21\xaa\x5d\x88\x6a\x17\xa2\xda\x85\xa8\x7e\x43\x7e\x3b\x7f\xed\x42\x54\x1b\x83\xec\x42\x54\xbb\x10\xd5\x07\x5f\x0f\xd6\xf8\xda\x85\xa8\xf0\xda\x85\xa8\x9a\xd7\x6f\x4b\xd4\xf9\x00\xcf\xb9\x33\xf5\xfa\xd7\xb4\x9d\x43\x50\x41\x26\x14\x27\xd2\xf3\x46\x1d\x14\x3e\x6a\x5a\xf7\xa8\x88\x60\x41\x7c\x29\x0e\x45\x84\xea\x38\xd3\xd6\x7a\xa9\x9e\x7d\xe4\x0a\x9d\xd6\x81\x8a\x28\x42\x81\x06\x6f\xf7\x9a\xb5\x7b\xab\xc6\xea\x13\x96\xf8\x34\x21\x89\x07\x12\xbf\x19\x20\x0c\xb1\x0b\x41\x7c\x71\x21\x88\x61\xdc\x77\x03\xb8\xee\x7a\x8b\x0a\x8a\xcc\x5f\x2e\x4b\x61\x96\x3a\xeb\xbc\xd1\x1b\x9b\xfc\x85\x54\x32\xaf\x72\xe8\x14\xeb\xf6\xb3\x5c\x85\x14\x00\x53\xb7\xa2\x07\x8e\x8d\x5e\xc4\xa8\xa5\xac\x6f\x25\x0b\xf5\x9b\xd4\x1a\xde\x54\x49\x22\x04\xb4\x52\x8b\x2d\x9c\x6f\xa6\xe1\x49\xa1\x75\xc6\xe3\x7e\xfc\xa6\x9f\x10\x47\x38\x52\x18\xe5\x9b\xaf\x3b\x8d\xb1\x28\x8b\x61\xf8\xf2\x77\xaf\xce\x9f\x46\x7c\x99\x2b\xcf\x96\xa5\x5a\xe9\x0c\xa8\xca\xf1\x26\xa7\xac\x51\x83\x7d\xe9\x0c\xa6\x99\xb0\x3c\xb2\x6d\xc8\x2c\x30\xd8\x44\xdf\xfd\xce\xfd\x2a\x48\xe4\x73\x94\xbb\xd8\x3f\x9f\x2d\xb8\xbd\x4f\x86\xdf\xdf\x84\xe9\x65\xbe\x0c\x21\x6f\xfa\x6a\xe8\x4d\x1f\x9c\xd3\xc3\x9b\x5e\xa8\x05\xec\x0b\x44\xd0\xff\x60\x3d\xbc\x37\xa7\xec\xaf\x1b\xf7\x3f\x5a\x0c\x20\x6e\xe0\xc5\x07\x23\xf0\xde\x05\xb5\x8e\x22\x71\x1e\x1b\x41\xbe\xab\x94\xd5\xac\xc8\x78\xdd\x17\x0a\x56\xe0\x7b\x90\x41\x4f\x97\x22\xb9\x7a\x45\x91\xd8\x03\x23\x44\xd0\x4d\x17\xd2\x2e\xab\xd9\x34\xd1\xf9\xa1\x63\x09\xf8\x7f\xb3\x4c\xcf\x0e\x73\x6e\xac\x28\x9d\xba\x4a\x22\x6e\x92\xb8\x51\xa4\x5a\x4c\xf3\x74\x34\x65\x6f\x14\x56\xb7\xd7\x7d\x28\x23\x6c\x07\xf7\x7c\x8f\xb3\x31\x13\x8e\xbb\x6a\xf0\x43\x44\x10\x76\x6e\x7a\xd3\x3e\x40\xc9\xbd\x45\x52\xcf\x28\xf8\xa7\x8f\x80\xef\x38\x17\x1b\xc0\xe1\xf2\xb9\x45\xba\x07\xcb\xf8\x18\x20\xc2\xfd\x80\xa2\xdb\x0f\x46\x35\x7e\x28\x11\xed\x07\x88\x36\x3d\x40\x00\x76\x88\x08\xf6\x70\xd1\xeb\x8f\x00\xca\xfc\x71\xa2\xd6\x03\xba\xf6\x06\x8a\x56\x7f\x8a\x48\xf5\x20\x6f\xdd\x37\x42\xfd\xe9\xa2\xd3\xc3\xbc\xee\x90\x86\xc0\xe7\x1a\x91\x1e\xc0\x45\x3f\xa4\x7b\x7e\x30\xd7\xfc\x47\x8b\x40\xf7\x8f\x3e\x3f\x80\xc8\x73\x6f\x22\x4b\x25\xad\xe4\xd9\xb1\xc8\xf8\xfa\x42\x24\x5a\xa5\x9d\x25\x4c\x0b\xa5\x33\x9c\x1f\x83\xc3\x92\x9f\xaa\x59\x68\xb1\xe4\x04\x46\xee\x2c\x2a\x2c\x2c\xf1\xb1\x0c\x52\x28\x20\xaa\x8c\xb3\x7c\x90\xd1\x09\xf6\x60\x1c\x62\x58\x75\x32\xe4\x22\x7e\xaf\xaf\x99\x9e\x5b\xa1\xd8\x81\x54\x7e\x1d\x47\x91\x19\x58\x7b\x27\xc3\xb6\x76\xdf\x3e\x7e\xe4\x6f\xfe\xf2\xdc\x8e\xe0\x60\x35\xe6\xe3\x7b\x81\xe9\x41\xef\x77\x03\xd3\x8d\xf3\x2a\x6b\xba\x82\xd1\x3d\xdc\xe4\x37\x8f\x6b\x38\xe5\xc7\x30\x6e\x38\x6d\x5c\xa5\x8c\x2a\xd1\xbe\xbc\x45\xeb\x9d\x57\xd3\x54\xfd\x42\x1e\xcd\xfb\xbc\xc6\x97\x4f\xcf\xd1\x69\xbc\x73\x97\x3c\x14\x77\xc9\x3d\xe5\xa6\x3c\x40\x45\xf7\x33\xcd\x47\xd9\x29\xba\x77\xb8\xa2\xda\xd4\xef\x4a\x9e\x88\xf3\xc1\x75\x04\x7f\x9c\x58\x5a\x95\x9c\x18\x60\x50\xf9\xfc\xe1\x51\x42\xa4\x78\x9a\x42\x3d\x2f\x54\xca\xce\xab\x2c\x5b\xb3\xaa\xd0\xaa\x59\xfd\x8c\xb1\xf6\x76\x31\x2d\xb8\xe4\xb7\x3c\xa5\x56\x2c\x8b\x52\x93\xcc\x2c\x2b\xa5\x1c\x0f\xae\x7b\xa2\x81\x22\x09\x30\xcd\xbc\x51\xb2\x6b\xe4\xc2\x4d\xdf\xc9\x3f\xa8\xe6\xad\x13\x10\x1b\x03\xba\x5f\xcf\x75\x99\xc8\x59\xb6\x66\x4b\x9e\x85\x06\x38\x9c\x5d\xc9\x2c\xa3\x61\xa6\xec\x42\x58\x0c\x29\xa0\xec\xcc\xb4\x5a\xc0\xe4\xb8\xf2\x8d\x17\x45\xe2\x7e\x9b\x64\x82\xab\xaa\xc0\xe7\x39\x49\xbc\xd6\x55\xe9\x9f\x37\x0d\x81\x89\x20\x81\x95\xcc\xc6\x51\x7b\xb7\x5b\x17\x36\xe4\xfe\x54\xc6\x29\x00\x2f\x3d\x2c\xf5\x38\x1e\xd3\x23\x87\x9b\xa8\xb9\x4f\x51\xea\x95\x4c\x31\xba\xe1\xc9\x06\x8d\xa4\xb1\x81\x4f\x38\xcf\x4a\xab\x89\x12\x0b\x0e\x8a\x0a\x9d\x22\x5c\x33\x1c\x07\x33\x08\x54\x0a\x2d\x7d\x9c\x86\xaf\x8b\x46\x39\xfd\x4a\x62\x33\xe2\x88\x72\xec\x40\x69\xa6\x21\x1f\xb5\x52\xd2\x62\x83\xfb\x65\x65\x59\xaa\xaf\xd5\xe8\x4e\x51\x57\x08\xb4\x5e\x6e\x25\x50\x33\xfc\xba\x4d\xcf\xc1\xf7\xbd\x9d\xbc\xd2\x90\xeb\x73\xce\x2a\x65\x44\x4f\xf1\x3e\x98\x72\xf4\xe7\x3f\x76\xe3\x11\x32\x17\xba\xb2\x9f\xc4\xfa\xbb\x5e\xca\x64\x19\x2b\xb3\x32\x17\x86\xe9\xaa\x65\x16\x3f\xa6\x9f\x6d\x5f\xa1\x9d\x09\xb8\xed\xea\xea\xd8\xdd\xe2\xfd\x6a\xc3\x21\xd4\x9d\xaf\x21\x4f\xfc\xf8\xec\xe2\xd7\xe7\x47\xff\x38\x79\x3e\x65\x27\x3c\x59\xc6\x98\x18\x8a\x71\x60\x1a\xc0\x28\x96\x7c\x25\x18\x67\x95\x92\xff\xae\x28\xe0\x7b\x10\x7e\x3b\x1a\x14\xab\xbd\xa3\xf4\x85\xee\xfc\x83\xb5\x83\xc3\x5e\xff\x98\x97\xa5\x8d\x80\x06\x2e\x1b\xea\x53\x88\x32\xaf\xd1\x44\x00\x85\x0b\xd2\xe7\x8f\x5f\x9e\x5c\x40\x5a\x7e\x51\x22\x52\x08\xe4\x71\xc1\xf7\x30\xd2\x4c\xb8\x5f\x50\xe7\xde\x29\x3b\x52\x6b\xfc\x12\xcf\x94\x34\x2c\x93\xc6\x0a\x90\x7a\xa4\xb6\xf9\xf8\xf5\xde\xa3\x29\xfc\x6f\x8f\xf1\x34\x2d\x9d\x5e\x17\xd2\xd3\x92\x8d\x7c\x51\xd4\xfc\xe4\x2c\x8b\x5e\x40\x09\x8b\xd9\x68\x2f\x74\x4a\x33\x07\x49\x02\xb1\x2b\x14\x83\xc6\x96\xdc\x8a\x85\x4c\x58\x2e\xca\x85\x60\x05\xb7\xc9\x92\xe5\x7c\xcd\x12\x5d\x96\x55\x81\x38\xff\x29\xb7\x7c\xca\x9e\xe9\x92\xe5\xfe\x10\xbb\x3d\xef\xe4\xf0\xc5\xf6\x98\x7e\x7d\xb2\xe3\x7f\x4a\x63\x2a\x61\x0e\x1f\x3f\xfa\xcb\xd7\x7f\xfa\xd3\x17\xd5\x1a\xae\x4e\x17\x72\x6b\x1b\xb5\x86\xe3\x7e\x15\x70\xd5\xb1\x55\xa0\x54\x8b\x2c\xde\x5f\xdd\x04\x40\x5f\x2b\xb3\xaf\x8d\x39\xa9\xdf\xe0\xbc\xab\xa9\x39\x48\x8b\xba\x7a\x0e\x03\x35\x76\xaa\xe5\xa0\x37\xac\x88\x37\xe8\xb8\x57\xef\xe9\xb9\x3f\x98\xa4\xe7\xe4\xad\x06\xaf\x45\x9d\x9d\x34\x66\x8f\xd8\xdf\xd8\x5b\xf6\x37\x30\xb4\xfe\xdc\xb7\x0d\x56\x5f\x13\x68\x88\x64\x23\x67\xdf\x9f\x9e\x0f\x44\xf1\x9f\x1c\xd3\x74\x23\x3a\xaa\x5a\xcd\x66\x92\x14\x7b\xf1\xd6\x8a\xd2\x29\x9a\xb4\x12\xf7\xda\x40\xcc\x4d\xf0\x13\x6e\x33\x0c\x3c\x9c\xce\x9b\x09\x4e\x77\xdb\x68\xee\xe7\xdf\x6b\x63\xcf\x88\x0b\x35\x5b\xe1\xd4\xa3\xe5\xc0\xf8\x1b\x6c\xcc\xc9\x0d\x63\xeb\x03\x66\x58\xaa\x21\xdf\x0a\x13\x99\x97\xb2\x47\x1a\xc5\xc3\xd9\xc6\xfd\x22\xeb\x8d\xf5\xbc\x6d\xa5\x5a\xae\x14\xb0\x81\x48\xc5\x8a\x30\xb2\x0a\x9d\x92\x76\xe6\xa6\x95\x46\x32\xe3\x16\xf5\x8c\xbc\x36\xc1\xdf\x0c\x7b\xc9\x9d\xa7\x84\x2b\x2c\x25\x99\x8b\xb2\xc4\xdc\xf3\xd9\xda\xa7\xed\xf5\x5e\xbc\x5e\x27\xa9\x28\xb5\xd5\x89\xee\xd1\xe3\xac\x19\xed\xa6\xe1\x80\x08\x98\xef\xeb\x1d\xe6\xaf\x8f\xcf\xc7\xec\xf2\xe9\x39\xf4\x7d\xba\x78\x7a\x79\xde\xb4\x59\xf6\x2e\x9f\x9e\xef\xdd\x2b\x29\x98\x57\xf8\xc0\x45\xdd\x61\x90\x86\x0b\xca\x69\x93\x93\x9c\x17\x93\x2b\xb1\xee\x28\x53\x87\x90\xeb\x93\xb0\xc2\x83\xbc\x10\x92\x39\xe7\xc5\x9d\x47\x2b\x05\x4f\xe5\x27\xaa\xe7\xf2\x09\xb1\xe1\x99\xdb\x0b\xbb\x72\xbd\x12\x29\x6a\xe9\xfe\x17\x42\xa5\x85\x96\x4e\x5f\xdc\x55\x7b\xdd\xfd\xd7\xbb\x6a\xaf\x0f\xbe\x76\xd5\x5e\xbb\x6a\xaf\xcd\xeb\xc1\xa4\xb4\xee\xaa\xbd\xbe\xac\x08\xfe\xae\xda\xeb\x37\x9e\x04\xb0\xab\xf6\xda\x7e\xed\xaa\xbd\x76\xd5\x5e\x1f\x76\xed\xaa\xbd\xee\x7e\x3d\xb8\xf4\xa5\x5d\xb5\xd7\x9d\xae\x5d\xb5\xd7\xe6\xb5\xab\xf6\xba\xe1\xda\x55\x7b\xdd\x70\xed\xaa\xbd\x76\xd5\x5e\xbb\x6a\xaf\x5d\x12\xec\x7b\xc7\x7a\x98\x49\xb0\x6c\x57\xed\x45\xd7\xae\xda\xeb\x8b\x48\xf5\x63\xbb\x6a\xaf\x0f\xba\x76\xd5\x5e\xbb\x6a\xaf\x2e\xd7\xae\xda\xeb\x4b\x71\x97\xec\xaa\xbd\x76\xd5\x5e\xbf\x1d\x45\x77\x57\xed\xb5\xab\xf6\xda\x55\x7b\xed\xaa\xbd\x6e\x9d\xc5\xae\xda\xeb\x4b\x30\x01\x7d\x47\xe0\xfe\xd5\x4b\xfb\x4f\x75\x5e\x54\x56\xb0\x57\x7e\xc8\xa0\x45\x22\x63\x90\x26\xd6\x08\xfa\xa7\x10\x26\x5a\xcd\xe5\x82\x38\xfb\x21\xb6\xe1\x9d\x84\xf7\x99\x44\xad\x6f\x3f\xc3\xfc\xc1\x24\xe3\xb2\x7b\x80\xa6\x19\x43\x7f\x0a\x63\x41\x59\x57\x1d\x45\x87\xc4\xae\x40\xad\x71\x88\x50\x3b\x09\xe9\x78\x99\xff\x0a\x7f\x3c\xc6\xf4\x30\x27\xce\x80\x87\x6d\x59\xd0\x37\xaa\xe6\xb6\x8a\xf1\xac\x58\xde\xce\x6f\xdd\x44\x8e\xd7\x8a\xe7\x32\xf1\x3b\xe6\x28\xcb\x74\x82\xf2\xb5\xc9\x71\xfd\xd8\x38\x9e\x7b\x48\x9e\x57\x96\xcf\x32\xd1\x39\x92\xde\x3f\x8c\xd6\x33\x84\xd6\x58\xa3\x57\x31\xb5\x31\x3f\x5e\x28\x77\x84\xb4\x12\x4c\x28\x5b\xae\xdd\xc2\x9c\xeb\xf4\xc2\xad\x4d\xe3\xee\xde\x69\xf3\x3d\x23\x67\x43\x44\xcd\x7a\x46\xcc\x86\x89\x73\xf5\x8f\x71\x6d\x86\x04\xa2\x4a\x96\x38\x7d\xa5\xb1\xaa\x85\x4e\xa7\x5b\x8e\x9c\xb7\xad\xce\x75\xea\x34\x4b\x68\x95\x1e\x1f\x01\xd4\xd2\x4e\xdd\xf0\x57\xa0\x8e\x71\x5b\xf7\x77\xe7\x2b\x2e\x33\x77\x3e\xb6\x54\x68\xf6\x6b\xe2\x32\x80\xdd\x32\x74\x79\x00\xeb\xbb\x83\x86\x4c\xef\x67\xd0\xb1\x25\x97\xdd\xea\x81\xd9\x86\x54\x7d\x0e\x63\x45\x41\x75\xb7\x27\x72\xfe\x16\xf4\x1b\x9e\xeb\x0a\xfb\xce\x27\x24\x7c\x03\x47\xc7\xd4\x83\x07\x27\x56\xd9\x30\x6c\x87\xa7\x3e\x29\xfa\x7c\x88\x9c\x40\x6e\xad\x28\xd5\x13\xf6\x5f\x07\x6f\xbe\x7a\x37\x19\x7d\x7b\x70\xf0\xf3\xa3\xc9\x5f\x7f\xf9\xea\xe0\xcd\x14\xfe\xf1\x87\xd1\xb7\xa3\x77\xfe\x8f\xaf\x46\xa3\x83\x83\x9f\x7f\x78\xf1\xdd\xe5\xf9\xc9\x2f\x72\xf4\xee\x67\x55\xe5\x57\xf8\xd7\xbb\x83\x9f\xc5\xc9\x2f\x1f\x38\xc8\x68\xf4\xed\xef\x3b\x4f\xb9\xb7\x3f\x63\x38\x6f\xc6\x40\xbe\x8c\x8f\xe2\xc9\xa0\x6c\x9c\x81\xce\x22\x65\x12\x6e\x9c\x46\xb2\x36\x6e\x3b\x8d\x5e\x4a\x82\x8d\x1e\xc6\x91\x86\xe9\x5c\x5a\x67\xd9\x3b\x63\x9e\xc7\xb5\x08\xd2\x36\x3c\x8a\xc4\x07\xa0\x1a\x87\x43\xd1\x40\x94\xc7\x1f\x65\x20\x6a\x6f\xb6\x83\x3f\x4e\x31\x99\x17\x99\xc8\x85\xb2\x70\x9e\x27\x5e\xcd\x03\xcb\x68\xc7\x1b\xde\x7f\xed\x78\xc3\x97\xc8\x1b\x8c\x48\xaa\x52\xda\xf5\x53\xad\xac\x78\xdb\xc9\x3d\xde\x64\x0d\x17\xcd\x01\xc9\x9c\x32\x94\xa8\x8c\xdf\x31\x5d\x60\xd1\x4e\x0b\x15\x65\xa9\xab\x2c\x85\x4a\xbc\x4a\x81\x77\x10\x4b\xac\x85\x45\xd7\x1d\x68\x7c\xa0\x0e\xb6\x1f\xe2\x9d\x71\xe8\x23\xfc\x77\x25\x57\x3c\x13\xca\x46\xbf\x38\x07\xf7\x53\xfc\xa3\x0f\x3d\xf3\x96\x9b\xab\xfa\xc0\x8b\x49\xa1\xd3\xfa\x7c\x1f\xfa\x57\x82\x8f\xc4\x5b\xfb\x39\x9a\xd8\xa0\x20\x9d\x97\x72\x25\x33\xb1\x10\x27\x26\xe1\x19\xf0\xb5\x61\x64\xc5\xd1\x0d\xa3\xc3\xc2\x97\x3a\x33\x4e\xa9\x77\xbc\x9a\x71\xef\xbf\x85\xf2\xe8\x05\x97\x0a\x41\x4d\x0a\xff\x63\x83\x8e\x60\xc7\xfe\x0b\x5e\xba\x05\x0e\x0e\x5f\xb0\x8a\x67\x5a\x67\x54\xae\x96\xad\xeb\xf1\xa9\x70\x53\xe9\x5f\x95\xb8\xfe\xd5\x8d\x66\xd8\x3c\xe3\x8b\xe0\xe7\x35\xc2\x6e\x84\x6a\xea\xa1\x6f\x7c\x01\xa8\x05\xab\x04\xe3\xd9\x35\x5f\x9b\xda\xeb\x1d\xc1\xf7\x98\x27\xec\xf1\x08\xb6\x33\x37\x2c\x8c\x91\xb2\xaf\x47\x90\xbb\xf1\xf4\xe8\xfc\xd7\x8b\x7f\x5e\xfc\x7a\x74\xfc\xe2\xf4\x8c\x9d\x69\x2b\x50\xa8\x45\x06\x4e\x12\xdc\x43\x6e\x96\xf0\x0c\xb0\x91\xb4\x99\x82\x11\x25\x0d\xbb\x96\x2a\xd5\xd7\xa6\x73\x80\x0d\xb7\x9f\x23\x9e\xe0\xaa\x9b\x93\x86\x17\x1c\x5a\xd7\xf6\x90\x30\x1b\xe9\x81\xf1\xa0\x20\xc3\xd3\xf4\x30\x2d\x75\x81\x44\xf0\x11\x8a\x5a\xd4\x36\x7d\xa0\x71\x01\x02\xac\xef\xbc\x39\xe0\xa2\xe4\xca\xd6\xae\xfa\x7a\xcd\xa8\x67\xee\xb4\xf7\x72\xdc\x9f\xe0\x1f\xc2\x0d\xc0\xd3\xe1\x4a\x51\x8f\xd2\x54\xa4\x0d\xf2\x7f\x71\x69\xdf\x4f\xfd\xcb\xad\x6b\x88\x21\x76\xfe\xf2\xe2\xf4\xff\xb4\xf6\xf1\xba\xe8\x97\xe5\x3a\x0c\xac\x41\xa9\x8b\xc1\x56\xf7\x15\x95\xcd\xef\xd6\xf7\x41\xac\x6f\x90\x96\xc3\xe4\x56\xbd\xaa\x54\x13\x8f\xae\x1e\x9f\xe5\x3a\x15\x53\x76\x1e\x82\xbc\xcd\x6f\x23\x74\x1a\x5e\x0a\xe6\x6e\x51\x56\xf2\x2c\x5b\xc7\x2a\x9a\xd5\x58\x42\xde\x00\xd6\x89\x19\xf9\x9c\x67\xe6\xbe\xb9\x71\x1f\xd9\xe8\xf4\x88\x17\xce\x1e\x1e\x64\x39\xc2\x68\x2c\x15\x4a\x5b\x52\xac\xdd\x2c\x01\xac\xa8\xd4\x09\x43\xe3\x3b\xca\xa4\x6d\xc8\x37\x83\x81\x66\x2f\x1a\xa5\xf1\xc4\x3e\x0f\x23\x63\x94\xb1\x32\xa2\xad\xa0\xfb\x76\xf2\xc1\x1c\x77\xa3\x97\x82\xa7\x5a\x65\x6b\x48\x9b\xc7\x44\xb8\x9c\x9b\x2b\x91\xe2\x07\xa4\x9a\x85\xb0\x07\x78\x72\xfd\xa3\x2e\xdd\xbc\x7d\x84\x03\x54\x32\x4c\xcf\x83\xd8\x88\x48\xef\x79\xd5\x7b\x1c\x42\x47\x94\x97\x2a\x5b\xbf\xd2\xda\x3e\x0b\x18\x08\x83\xec\x80\x9f\x48\x5b\x6e\x86\x9d\x40\x9d\xe4\xf0\xdc\x09\xac\x06\x1c\xaa\x18\x7e\xe1\xb8\x5e\xf1\xcf\xfd\x48\x95\x95\x3a\x32\xdf\x95\xba\xea\x2c\xc4\x36\x94\xcd\xef\x4e\x8f\x81\x15\x55\x94\x67\xa2\x6c\xb9\x06\xdc\x97\x4d\xf0\xce\x60\x18\xbc\xa6\x4c\x99\xf8\x4c\xd4\x49\x0d\xec\x05\x5f\x33\x9e\x19\xed\x69\x49\x71\xab\xb6\x15\x4a\x26\xae\xfb\x7a\xa6\xed\x72\xc3\xb6\x75\x07\x6a\xf3\x77\xe3\x28\xed\xa4\x46\x13\x95\x6a\xe3\xe7\x16\x82\x22\x45\x29\x12\x91\x0a\x95\xdc\xf7\xb2\xdf\x77\xb6\x06\x6c\x9d\x33\xad\xdc\xc1\x1c\x64\xf3\x9c\x86\x34\x1d\x22\x69\xbc\x55\x20\xea\x45\xd6\x1f\x87\xb4\x1f\x38\x96\x95\x11\x25\xe6\x28\x95\x95\xc0\x95\xfc\xa1\x9a\x89\xcc\x51\xde\x99\xa4\x00\x1d\xc7\x2d\xba\x33\x64\xce\x17\x82\x71\x1b\x76\x9a\xd5\x4c\x28\x53\x95\xb4\x88\xd2\xb2\x54\x8b\x1a\x3a\x85\x1b\xf6\xfa\xf4\x98\x3d\x62\x07\xee\x59\x23\xd8\x3f\x73\x2e\x33\xc8\x08\xb2\xbc\x6c\xcf\x51\xce\xfd\x10\x30\x25\xd8\xbc\x4c\x97\xc8\x24\xc6\x4c\x69\x66\xaa\x64\xe9\xe7\xe4\xec\x5e\x6f\x36\x53\x16\x3b\x84\x56\x1e\xe6\x5e\xbf\x5f\x0e\xf5\xda\x88\x72\x30\x06\xf5\xba\x03\x83\x8a\xd5\x28\xb7\xe7\x9a\xd4\xc3\x8d\x95\x0b\xcb\x53\x6e\x39\x31\x2e\x7f\xc3\x83\x5d\xd2\xdf\x36\xfb\x32\xe2\xb9\x54\xd5\x5b\xcc\x1a\x1d\xce\xd5\x72\x71\x02\xc3\xb2\xc4\x53\x1d\x56\x9d\x17\x45\x26\x11\x2a\xa9\x95\xc5\x7c\xda\xd8\x2b\xe3\x1b\xd4\x44\xe0\x13\x1c\x53\x59\x84\x53\x4e\xb8\x4a\x75\xbe\xf1\x30\xa7\x44\x8a\x06\xec\xf5\x94\xed\x76\x5f\xf3\x7a\x20\x4e\xa1\x4c\xac\x44\x0f\x60\xc8\x36\xcc\xb7\x1b\xcd\x11\xc7\xef\x08\x18\x9e\x65\x7c\x26\x32\x4a\xb3\x82\x1d\x68\x36\x77\xe0\x7d\x97\x12\x94\x3a\x1b\xae\xf6\xf1\x95\xce\x04\xe6\xe6\x7a\x42\xb8\xe1\x3f\x0b\x3a\xc0\x20\x43\xd1\x01\xac\xc1\x06\x1d\xc0\xae\xfd\x1c\xe8\x50\xf5\x10\xf5\xac\x4d\x07\xa7\x37\x34\xe9\x00\xc2\xfb\xa1\xd3\xc1\x88\x24\xd1\x79\x71\x5e\x6a\x67\x76\x0e\x26\x9b\x68\xd8\x3a\x66\x88\x8e\x8d\x2d\x89\x97\x20\x0b\x9a\x37\xf3\x32\xca\xca\xe7\x16\x85\x84\x4f\xcd\xff\x1f\x91\xcc\x02\xd6\xd3\x16\x64\x7e\x94\x46\x78\xd1\xfd\x92\xbe\xf8\x9c\xc5\xc1\x10\x85\x6d\x3d\x9c\x9d\x83\x48\x23\x9d\xf0\x0c\x80\xbf\xfb\x6d\x39\xd6\xde\x76\xed\x81\xa3\x5a\x0c\x88\x51\xc2\x67\x51\x9e\x30\x07\x47\x8b\x77\x61\x2a\x9d\x8a\x28\x96\x8d\xe9\x89\x97\x98\xb3\x0f\xf7\xf9\x32\x10\xa7\x57\xf8\xb0\x72\xda\xf8\xb5\xd5\x04\x5f\xf9\x22\xc0\x89\xbb\x09\x0a\x95\x4a\xb5\x00\xbf\xda\x98\x95\x22\xc3\x02\x12\x62\x02\x57\x68\x41\xee\xc3\x91\xf0\x83\xfa\xf3\xe0\x1f\xed\xd3\x8a\x69\x64\xf0\x14\x79\x0d\x6b\x8e\xec\x56\x1a\xb6\xf7\xdc\x13\xa0\x07\xfe\xf2\x43\x94\x30\x7b\xf8\x86\x61\x35\xd1\xd3\x79\x25\x55\x4a\xb5\x16\x0d\x62\x85\x06\x1e\xa8\x07\x43\x15\x8f\x4c\x63\xde\xf2\x84\xbd\x51\x2c\x10\x8b\x4d\x3a\x6f\x8f\x57\xa8\x32\x7b\x1f\xdd\xe4\x76\xc7\x6b\x78\x48\x7b\x98\xd7\x0a\xd6\xde\x3d\x77\xe2\x2c\xf7\xcd\xfb\xfc\xbb\xdc\x2b\xee\x1a\x71\xbf\xa1\xad\x98\x9f\x70\x58\xaf\xd2\x27\x6e\x5b\x5b\xa9\x16\x26\xb6\x64\x78\x96\x35\x9c\xe1\xdb\x4c\x19\xbf\xc2\xa1\x5d\xcb\xa6\x09\xd1\xaa\x11\xfb\x5c\xcc\x90\xcc\xa9\x13\x9f\xb9\x11\xb2\xc8\x0d\x7f\x5a\x3a\x4a\x58\xc9\xb3\x8b\xa2\x3b\xbe\x34\xdb\xc0\x32\x7d\x71\x71\xd4\x1c\x1a\x84\x35\x25\x9d\x0b\xf8\x9e\xf1\x34\x97\xc6\x80\x23\x4c\xcc\x96\x5a\x5f\xb1\x83\x5b\xdb\xec\x4c\x8c\x5c\x98\x43\xda\xf3\x13\x37\xfb\x11\x93\x2a\x0b\x59\x51\x60\x07\x2b\x1b\xf2\xdc\xe1\x21\x49\x98\x05\xac\x21\x35\x1d\xa0\x64\x85\xcd\x69\x62\x9b\x01\xb7\x0b\xee\x9d\x61\x6f\x2e\xcf\x59\xcf\x7a\x82\xf7\x2c\xd1\x19\xed\xed\x36\x2c\xe6\x56\x3a\xa2\xf6\x78\xef\x44\x22\xe5\x22\x11\x66\x38\x34\xbe\xef\xeb\x31\x59\x2a\xb0\x04\x53\x40\xf6\x13\xbf\x31\xc9\x0e\xfc\xd2\xfb\x50\xc9\x4f\x3f\xdd\x8f\x35\xea\x66\xad\x11\x94\x32\x4d\xd0\x48\x77\x1c\x0d\x58\xa0\x57\x21\x96\x5a\x69\xaa\x70\x73\x42\x54\x2b\xd8\xd2\xc0\xa2\x30\x9a\x07\x6b\x42\x2c\x3a\x9a\xea\xd3\x3a\x4a\x1c\x07\x02\xa1\x12\xd8\x86\xbe\x58\x38\x87\x6b\x69\x97\x00\xd2\xbd\x6c\x45\x0d\x61\x26\xa5\x30\x10\x80\x51\x4c\x94\xa5\x2e\x29\x21\xcb\xfb\xad\xa9\xd0\xea\x5c\xa7\x90\xd1\xe5\x36\x09\x77\x7f\xed\x9b\x38\x50\x5d\xf7\xf1\x80\x7c\x45\xb7\x9b\xc4\x7c\x2e\x12\x50\xb4\x62\x02\x23\xd7\x3e\xa8\x51\xcb\xa9\xca\xc0\x6d\x30\xea\x03\x92\xcb\xb7\xee\x29\xf1\xaf\xe2\x90\x38\xa1\x85\x6f\xff\x7a\x34\x65\xec\x54\x85\x0c\xde\xb1\x5b\xc5\xf8\x4e\x9f\x7a\x66\xdd\x2b\xc6\x4d\x64\xe0\x05\x62\xc7\x99\xd3\x0e\xcb\x6a\x80\x1d\xdf\xc7\x1d\xce\x62\x97\xf8\xa0\xec\x00\x5c\xe3\x34\xa8\x5b\x7a\xaf\x03\xf4\x71\x95\xbb\x5b\x3e\x96\xbb\xfc\xf3\x08\x80\xb0\xbe\x7c\x8e\xa0\x70\x06\xea\xec\x71\x11\x8d\x16\x69\xef\x21\xe0\x76\xae\x53\x84\xc2\x0a\x50\x3e\xd9\xda\x43\x73\xc9\xff\x78\xfd\xac\xd6\xf1\x94\xc6\xea\x80\x18\x23\x8b\xfa\x21\xa4\xcc\xa9\xda\x99\xf7\x2d\xe4\x45\x26\xa0\x04\x3f\x1a\xb9\x46\x17\x88\x5a\x81\x8c\xeb\x12\xb5\xd0\x4d\x84\x90\xb9\xc6\xec\xbf\xe1\x50\x86\x44\x54\x0f\x1a\x74\x1e\x7e\x8e\x16\xa2\x34\xbe\x2f\x10\x94\x96\x5a\xed\x5d\x17\x2c\x95\x73\x28\x84\xb4\xf4\xc8\x82\x97\x3c\x77\x2c\xde\x30\x22\xc1\x4c\x2c\x24\x26\x44\x06\xc6\xb6\xef\xd4\x3d\x2a\xd4\x1e\x23\x33\x94\x96\xe5\x72\xb1\xc4\x8d\xc2\x38\xc0\x2b\x30\x1f\x54\xcc\x34\x4f\xa1\x9f\x20\xd3\x25\xbb\xe6\x65\xee\xe4\x06\x4f\x96\x10\xa1\xe4\x8a\xa5\x55\x09\x10\xf9\x56\xf0\x74\x3d\x31\x96\x5b\xa7\x29\x8b\x92\x0c\x4a\x3f\xff\x5d\x3f\x94\x5b\xaf\x5d\x3f\x94\x0f\xbc\x76\xfd\x50\x76\xfd\x50\x36\xaf\x07\x93\x1d\xba\xeb\x87\xf2\x65\x61\xdc\xed\xfa\xa1\xdc\x77\x34\x61\xd7\x0f\x65\xd7\x0f\xe5\xb6\x6b\xd7\x0f\xe5\x3d\xd7\xae\x1f\x4a\x87\xeb\x0b\xe0\x5c\xbb\x7e\x28\x1d\xae\x5d\x3f\x94\xed\xd7\xae\x1f\xca\xe6\xb5\xeb\x87\x72\xe3\xb5\xeb\x87\xd2\xf9\xda\xf5\x43\xd9\xf5\x43\xd9\xc1\x44\xdf\x6d\xac\x87\x09\x13\xcd\x76\xfd\x50\xe8\xda\xf5\x43\xf9\x22\xc0\x70\xd9\xae\x1f\xca\x07\x5d\xbb\x7e\x28\xbb\x7e\x28\x5d\xae\x5d\x3f\x94\x2f\xc5\x5d\xb2\xeb\x87\xb2\xeb\x87\xf2\xdb\x51\x74\x77\xfd\x50\x76\xfd\x50\x76\xfd\x50\x76\xfd\x50\x6e\x9d\xc5\xae\x1f\xca\x97\x60\x02\x1a\x9b\xca\x4e\x08\xa0\x1f\x02\x56\x44\x49\xe8\x11\x36\xc0\xac\x9a\xcf\x45\x09\x9c\x0b\x9e\xbc\x91\x3c\x55\xe3\x32\xb6\x83\xac\xc2\x8e\x01\xf7\x88\xea\x75\x6e\xf8\x39\x81\x11\x00\x52\x67\x9d\x29\x7e\xf2\xf2\xd9\x16\x64\xa4\xce\x59\x85\x5d\x73\xa4\x61\xce\x2f\x55\xb7\xf8\xf8\x0d\x04\xdf\x56\x3f\x46\x74\x4f\x32\x6d\x28\xc3\x1d\x88\x95\x2c\xb9\x52\xc2\xdb\x7b\xd2\x82\x1f\x65\x26\x84\x62\xba\x10\x14\x9d\xe6\xcc\x48\xb5\xc8\x04\xe3\xd6\xf2\x64\x39\x75\x4f\x52\x9e\xd8\x75\x36\x3a\x7d\x62\x6c\x29\x78\xee\xf3\xf2\x73\x2e\x71\x28\xc6\x93\x52\x1b\xc3\xf2\x2a\xb3\xb2\x08\x83\x31\x23\xa0\xa0\x06\x05\x55\x20\x06\x64\xc5\xd5\x29\xec\xe3\xfa\x69\x34\x2d\x1d\x43\xd3\x81\xb5\x39\x06\x3c\xf0\xbc\xb0\xeb\x90\xc7\x2b\xd8\x5c\x96\xc6\xb2\x24\x93\x20\xad\xe1\x89\x58\x3b\x0d\xe3\x8d\xbd\xac\x56\x34\x53\x43\x53\x55\x29\xa8\xad\x85\x35\x98\x15\x5b\x0f\x48\x43\xa5\xd2\x90\x9a\x6f\xc6\x8c\x7b\xdc\x34\x24\xb4\x9f\x29\x90\xda\x4b\x16\x1c\x9d\x3e\x8a\x86\x8b\xf0\x62\xeb\xb4\xe1\x7a\xa3\x43\x89\x83\xdf\x9c\xe3\x46\x35\x47\xad\x50\x50\xdb\x8b\xd6\x31\x80\x05\x50\x62\xe5\xf6\x80\x48\x84\x93\xaf\xfc\x86\x5d\xff\xc9\x37\x7d\x24\x14\x5f\x08\x63\xf8\x42\x9c\x77\x0c\x34\xdc\x64\x91\x41\xac\xa1\x5e\x18\xd8\x0a\x19\x56\xd7\x86\x4f\xea\xec\xcc\xa6\x1a\xc4\x72\x9c\x53\x50\x7e\xae\x4b\x69\xad\x80\x45\x05\x84\x3d\x88\x55\xb6\x0b\xf0\xf7\x5b\x39\x9e\x2f\xfc\x20\xf5\x8f\x1d\x53\x57\x29\x66\x5c\xce\x04\x9b\x95\x52\xcc\xd9\x5c\x42\x1a\x27\x24\x56\x8e\x11\x70\x89\xa3\x17\xc0\x18\x67\xef\x6a\xe5\x75\x59\x3f\xaf\x29\xfb\x89\x26\x66\xcb\x4a\x25\x3c\xc2\xb2\x85\x0a\x53\x39\x67\x0b\x48\xcc\x24\x6d\xf1\x8f\x8f\xfe\xfa\x67\x36\x5b\x3b\x91\x06\x9a\x95\xd5\x96\x67\xe1\x25\x33\xa1\x16\x8e\x56\x78\x3c\x9b\x35\x92\x81\x02\xd0\xcd\x03\x27\xfe\xf8\xeb\xab\x59\x53\xc6\x1e\xa6\x62\x75\x18\xd1\x6f\x92\xe9\xc5\xb6\xe6\x56\xdd\x53\xb6\x3b\x9a\x44\x5b\xb6\x99\xce\x64\xb2\xee\xbd\xd1\x3c\xf2\x17\x5b\xea\x6b\xd4\xf5\xb7\xec\x9e\xba\xdc\xaa\xd0\x45\x95\xa1\xd3\xf9\x59\xa8\x2e\xae\x8c\xd8\xac\x01\xdc\x7a\x2e\xc0\x4d\x4a\x43\xb4\x71\xd3\x31\x1f\xd7\x3f\x52\x53\x6d\x09\x39\xf2\x02\x00\x18\x18\x42\xcf\x78\x96\xcd\x78\x72\x75\xa9\x9f\xeb\x85\x79\xa9\x4e\xca\x52\x97\xcd\xb9\x64\xdc\x71\xcb\x65\xa5\xae\xb0\x83\x43\x80\x48\xd0\x0b\xa7\x5a\x15\x95\xf5\x85\x0c\xdb\x5e\x18\xeb\xe5\x3d\x13\xf6\x66\x50\x3d\x8a\x78\x2b\x6b\x5b\x87\x4a\xb5\x70\x47\xc6\xe3\x9b\x78\xb3\x7d\xfd\xe8\x8f\x7f\xc1\xad\xcb\x74\xc9\xfe\xf2\x08\x72\xb6\xcd\x18\x0f\x31\xf0\x36\x27\x28\x72\x9e\x65\xce\x6c\x88\x37\xa5\x23\xf4\xb6\x4d\xf8\xc9\xf7\xa0\xed\xbf\xdd\x3e\x58\x95\xba\xbc\xfc\x27\xe8\x51\xd2\x1a\x91\xcd\xc7\x58\x95\x14\xcc\x9a\x7d\x10\x0c\xfb\xc4\x7d\xa0\x34\xec\x01\x28\x40\x2b\x9d\x55\xb9\x38\x16\x2b\x39\x44\x07\xbe\xc6\x68\xde\xd4\xcf\xa4\x81\x02\xb0\x59\xa6\x93\x2b\x96\xd2\x97\x51\xe6\x49\x1b\x09\xbc\x3b\x15\xba\xe6\xe0\xf4\xc8\xbd\xb9\xf1\xfd\x1b\x59\x37\x39\x2f\x8a\x50\x23\x54\xf2\xeb\x06\x31\xe0\x4c\x02\x5c\x41\x4f\x3c\x99\xde\x6e\xe6\xbe\x4e\xe6\x09\xbd\x91\xe3\x9b\x9d\x87\xe8\x9c\x75\xd2\xdf\x47\x5d\xcf\x7e\xa0\xae\x7a\xf5\x80\xfe\x34\x14\xf0\x6f\xac\x2a\xd9\xa8\x8a\x0c\x85\x75\x61\x63\xa0\x02\xe0\xb6\x0f\xb0\xe4\xbe\x9d\xf6\x7a\x79\x37\xfb\xa5\x1c\x35\xe8\xa2\x6e\x69\x4d\xc7\x59\x21\x4a\x23\x8d\x93\xcb\x3f\xc2\x81\xc2\x9e\x84\xb5\x0b\xf0\x7e\x88\x80\x87\x1b\xe0\x93\xfb\x73\xca\x73\x9d\xd2\x80\xc0\x0a\x11\x3a\x7a\x8b\x5a\xdb\xd4\x6a\x07\x14\xa8\xf7\xcd\x2a\x7f\xac\xa9\xd9\xe4\x94\xee\x93\xc0\x2a\xf1\xae\x2f\x89\x41\xc2\xfb\x7d\xae\xfc\x31\x4c\x7e\x20\x36\x00\x8c\x91\x16\xb7\xc9\x09\x1b\xc6\x23\x1e\x94\x48\xa5\x27\x3b\x70\xca\x30\x0a\xee\xce\x04\xfd\x94\xed\x3f\xd9\xbf\x57\x26\x89\x24\x2a\x75\xc1\x17\xbd\x7a\xf9\xb4\x28\xd5\x1e\x36\x06\x9a\x70\x66\x10\x7c\x1f\x60\xd7\xe0\x2e\x91\xd6\x38\x3a\x80\x92\x84\xd1\x51\x4f\x60\x32\x10\xb0\x1e\xfb\x9a\xaf\x19\x2f\x75\xa5\x52\xf2\x2f\x05\x07\xdf\x8b\xd6\x83\xcf\xb4\x12\x75\xf3\xcf\x26\x4e\x05\x78\xf4\xa5\x62\x8f\xa7\x8f\x1f\x7d\x29\x92\x0a\xde\xb0\x25\xa9\xce\x82\xa4\x42\xfe\x74\xaf\xef\xea\x11\xef\x07\x7a\xdf\x17\xe4\x62\xa9\x01\xed\xa5\x87\xcb\x86\x8f\xae\x4b\x69\x45\xd4\xe3\xef\x00\x0c\x17\x67\x1f\x46\xa8\x0c\xa3\x6d\x9d\x24\x7a\x12\xa9\x1f\x0c\x86\xa9\x66\x1f\x91\x6f\x11\x83\x82\xe3\xb6\xcd\xc3\x65\x6e\x61\x61\x31\xa1\xf6\xf6\xd8\x01\xde\xb9\x8f\x05\xcd\xa3\x7b\xdd\x5a\x44\xb4\x93\xb7\x45\x0f\x8c\xcd\x56\xed\x7c\xc1\xc1\x07\x57\x0c\x48\xc1\x7f\x88\x25\x5f\x09\x28\xe4\x96\x19\x2f\x33\x88\x39\x5e\xe0\xdc\xd9\xac\xb2\x4c\xa8\x95\x2c\xb5\xca\x85\xb2\x6c\xc5\x4b\x09\xa8\x38\x51\x8b\xeb\xdf\x1f\xfc\x78\xf4\x0a\x12\x1a\x46\x04\x49\x41\xb3\xac\x8c\x87\xaf\x89\x67\x12\x0d\xf7\xde\xe5\xf3\xf3\x70\x34\x04\x9e\xeb\xe7\xe5\x9e\x93\x57\xb6\xc2\xb6\x2c\x6f\x93\xac\x32\x72\x75\x5f\x9c\x84\x2a\xec\x8f\x65\xa7\x75\x6e\x55\xfb\xd7\x84\xda\x28\xdc\x07\xd7\xfa\x96\x02\xbd\x8d\x80\xc9\xbe\x09\x45\x7b\x71\x0c\x9c\x5c\x4f\x84\xa5\x81\xe9\x73\x1e\x71\x71\x43\x85\x00\xdc\x98\xfb\x75\x42\x29\x9d\x8a\xbb\xa3\xee\x34\xd3\x7b\x68\x08\x8c\x99\x47\x15\x7c\x26\x59\x8a\xb4\xca\xa8\x29\x37\x80\xa3\x3a\xf3\x81\xd7\x28\x7c\x0a\xba\x04\x9d\xce\x03\xa4\x81\x9a\x80\x73\x10\x69\xee\x7f\x5f\x7a\x00\x04\xff\x81\x69\x8d\x08\x46\xa9\x1b\x6b\xcc\xb8\x31\x55\x8e\x47\x02\x1b\x20\xcc\xa5\x35\x75\xcf\x6f\xd2\x8e\xdd\xc1\xb8\x63\x41\x55\x0f\xfa\x5e\x88\x0c\x36\x57\x0f\x1a\xef\x9f\x45\xe3\x20\xa1\x8d\xff\x8b\x36\x1c\x25\x4c\x40\xb4\x2d\xe4\x71\x6a\xf0\x92\xce\x25\x34\x51\xe2\x44\xef\x8b\x2d\xbf\x44\xd5\x01\xef\x00\x78\x18\x3e\x13\x99\x69\x0f\x34\xab\x17\x85\x50\x49\x89\xf0\x3d\xbb\xe4\x72\x63\xe4\x42\x41\xff\x4c\x37\xda\x1d\x3b\x65\x76\xb6\x99\x86\xe8\x82\xdb\x99\xab\x35\xb2\xb0\x72\x5e\x50\x3f\x75\x6e\x75\x2e\x93\x3b\x8c\xa4\xef\x38\xe5\x56\xad\x74\xa3\x06\xf7\xe5\xc5\x86\xc7\xc7\x44\x5e\x8d\x29\xbb\xd0\x39\xa5\x38\xa9\xa8\x8b\x97\x6f\xa6\xea\x24\x46\x29\x1c\x2d\x20\xf1\x48\xd6\xd1\x78\xe8\x7a\xe3\xab\xa0\xe1\x39\x41\x25\xa7\x30\x2e\xc0\x4f\x52\x33\x57\x9d\x65\xfa\x1a\x12\x8b\x71\x5c\xbf\xb7\x21\x05\xe6\x09\x9b\xb4\x3a\xd3\x4e\x9b\xa0\xa1\xb7\x3f\x87\xee\x1d\xbf\xff\x29\x98\x9f\x03\x70\x7c\xa7\xc7\xf1\x9f\xa7\xe7\x4f\xe3\x3f\x5f\x1b\x47\x25\xfa\xa0\x3d\xb5\x66\x57\x86\x9b\xef\x8a\xf1\xb1\x6f\xba\x6b\x8e\x8d\x8d\xde\xf3\xf5\xd3\x25\x57\x3e\x90\x75\xe3\xf3\xd6\x26\xb1\x59\x3d\x9d\x25\x2f\x05\xe1\xc7\x39\x4e\x6e\x0a\x9e\xdc\x38\x8b\x00\xd6\x76\xeb\x0d\xb7\xce\xd4\x54\x85\x6f\xb8\x9d\xc1\x8d\x61\x26\xf5\xb6\xfb\xf9\x0f\xbf\x7c\x20\x31\xdf\xf7\x9b\x6d\xa4\xbd\xfd\x37\x8d\xb6\x7d\x1f\xf4\x8b\xed\x4d\xbd\x3e\xec\xb7\x51\x5f\xbc\x0f\xba\xff\xa6\x9e\xbc\x1f\xfa\x34\xdf\xcb\xed\xc3\x5e\xac\xbd\xda\x1f\x70\x3b\x2c\xe9\xdd\xd0\x0a\x3a\xb3\xf0\xae\xee\xae\x0e\x4e\xaa\xee\xce\xa9\x6e\xc6\x7e\x4b\x01\xb8\x01\xca\x94\x60\xd6\xd4\x82\x35\xc0\xa3\xaa\xb2\x14\x0a\xda\xde\x57\x90\xe9\xe8\xdb\xd9\x23\x93\x06\x66\x4b\x40\x9d\x88\x36\xcf\x8e\x82\x2c\xa4\x0c\xb8\x9c\x03\x78\x67\x04\x56\x3d\xaf\x20\xa1\x11\x58\x3f\x82\xd1\x69\xe5\xe6\xf1\x64\x1b\x42\x86\x2e\x84\x8a\x7a\xdd\x93\xd6\x3c\x71\x7b\xa8\x81\x99\x81\x8a\xc0\x34\x4f\x7f\x57\x64\xdc\xce\x75\x99\x4f\xbc\x7a\x38\x69\x28\x09\xec\x29\xa4\xd6\x18\x6f\x5f\x61\x7e\x2b\x82\x6a\xaa\x34\x13\x91\x34\x0f\xaf\xaa\x52\x84\xa0\x62\x95\x2a\x45\xa2\x17\x4a\xfe\xa7\x26\x04\xc8\xb5\xe0\x1c\xe2\xc6\x49\x52\xa6\xaa\x2c\xbb\x7b\x1e\x42\x47\x25\x40\xaf\x44\xb9\x14\xfc\x8e\x9b\xb7\x95\xd2\x42\x63\xd4\xbd\x47\x0d\x61\x0a\x90\xca\xeb\x1f\xe2\x54\x63\x9d\x40\x6d\x1b\x86\xd8\x7d\xe2\x32\x07\x81\xee\x34\x3d\xce\x16\x72\x25\x94\x87\x1c\x7f\x9a\xf1\xd0\x3f\xdb\xa3\xac\x12\xec\x79\x65\x75\x48\x5a\x60\xdc\x46\xc0\xc7\x90\xe3\x44\xf1\xd2\x78\x9c\xe8\x16\xea\xbe\x9d\xf9\x4e\x67\x1f\x72\x27\xe4\x0d\x60\xeb\xc7\x71\xfd\x4a\xb9\xf7\xad\x36\x90\x35\x59\x02\xd9\x2d\xde\x14\xa1\xac\x96\xf7\x3f\x82\x52\xd2\x1c\x0f\xda\x36\x0c\xa9\xcb\x01\x02\xb6\x26\x6c\xe6\xd8\xff\x1a\x95\x9c\xd3\x79\xf3\x49\xb2\x01\xba\x0f\xb5\x4f\xa0\x7e\xd7\xf6\xe0\xb9\x4e\x9d\x16\x36\x66\x61\x29\xe3\xe6\xe3\x14\x6f\xc1\x33\x19\x1d\x46\x54\xd2\xca\x52\x98\x42\x23\xf6\x7f\xfc\xd8\x71\xe4\xff\x92\xb6\x91\x6c\x87\x5d\xdc\xc2\xd1\x40\x74\xb6\xff\x88\x52\x6f\xd5\xe1\x17\xd2\x4e\xaf\xfe\x02\x0a\xbc\x50\x4b\xae\x12\xb4\x9d\x0e\xaf\x44\x61\x0e\x8d\x5c\xa0\xbe\xfe\xe7\xbf\xfc\x05\x94\x77\x4f\x92\xc3\x57\x27\x47\xc7\x2f\x4e\xa6\x79\xfa\x19\x69\xf2\x05\xb7\x56\x94\xea\x09\xfb\xaf\x83\x37\x5f\xbd\x9b\x8c\xbe\x3d\x38\xf8\xf9\xd1\xe4\xaf\xbf\x7c\x75\xf0\x66\x0a\xff\xf8\xc3\xe8\xdb\xd1\x3b\xff\xc7\x57\xa3\xd1\xc1\xc1\xcf\x3f\xbc\xf8\xee\xf2\xfc\xe4\x17\x39\x7a\xf7\xb3\xaa\xf2\x2b\xfc\xeb\xdd\xc1\xcf\xe2\xe4\x97\x0f\x1c\x64\x34\xfa\xf6\xf7\x77\x9c\x68\xc7\xba\x94\xbe\xb5\x28\xbd\xea\x4f\x06\xac\x39\x29\x4a\x21\x72\x60\x7f\x5d\xb2\xb5\x9a\x5e\xd2\xd6\x50\x5e\xc0\xd2\x5f\x8e\x27\xfa\xa7\xa9\x85\x63\x93\x06\x59\x67\xa6\xaf\x21\xc3\x52\x6a\xa7\xfc\x4c\xd9\x4b\x90\x83\xec\x4c\xac\x44\x39\xf6\xa3\x3e\x77\x37\x9d\x87\x7b\x62\x37\xdc\xb6\x3b\x3a\xe6\xf8\x77\x5c\x13\x3f\xf7\x1e\xc4\xc3\xbe\x25\x34\x79\xe0\x4f\x53\xf6\x23\x2f\xa5\xae\x0c\xe9\x22\x31\xdc\x37\xa6\x90\x05\x49\x02\x5e\x09\x0a\xf0\x84\x41\x42\x65\x98\x8f\xf1\x04\xda\x1c\x05\x7e\xfd\x74\xbb\x48\x90\xd6\xad\xd4\xca\x3f\xaa\xf4\xa9\xae\x1b\x48\xe1\x28\x0c\xb6\xf2\x7f\x2f\xd1\x4c\x3c\x51\x18\xc6\xcf\x03\x78\xab\xd3\xc4\x70\x94\xa5\x5c\xf8\x84\x6a\x78\x7f\x34\x5f\xa3\x4f\xc3\x0e\xe9\xb0\xa4\x5d\x8e\x69\xd7\xbc\xfe\xa2\xfd\x7e\x3d\xb6\x45\x13\x4f\x39\x86\x64\xf6\x15\x45\xf5\xb9\xd9\xc3\x7d\x02\x42\x64\x92\x94\xd2\xca\x84\x67\x7b\x20\x9c\xfc\x57\x49\x56\x39\x3d\x31\xfe\xb6\x14\xcc\x5e\x6b\x7c\x0a\xcf\xd8\x95\x58\x5f\xeb\x32\xf5\xf2\xd9\x3f\xb1\x5e\x0b\x63\xfd\x23\x9d\x3d\x07\x07\x18\xdd\x0c\x65\x2e\x4a\x36\x13\xde\x83\xde\xba\x79\x3d\x65\x47\x6a\x4d\xe1\x47\x15\x17\x19\x46\xc8\x6c\xa0\x23\xa0\x16\xd5\xd8\x24\x24\xc4\xfc\xd3\x38\x96\x7f\xde\xe4\x5d\x76\x0a\x58\x38\x05\x5e\xfa\x7b\xf7\xb2\x2e\xa9\xca\x09\x4e\x47\x89\x35\x5a\xda\x7f\xfd\x49\xb8\x85\xd3\x6f\xa4\x12\xc6\x7c\xe7\x96\xb2\x8f\xba\xda\xdc\x1d\x1c\xd4\x12\x1a\x1b\x2a\xa5\xea\x94\x62\xe1\x8e\x14\xc6\x88\x1d\x1b\xd6\x69\x7d\xe7\x94\x1d\xc1\x07\x90\x13\xef\x34\x2f\xa8\xa2\x73\x83\x49\x6b\xda\xcd\xe5\xf1\x8e\xa3\xb3\x63\x9f\xbb\x8c\x9a\x82\x69\xc2\xa5\xa3\xca\xdc\x9c\x09\x68\x7a\x94\x41\x2b\xfe\x5d\x71\xe8\x93\xbb\x77\x59\x56\x62\xaf\x9b\xaa\x84\x40\xfc\x87\x7f\xfa\xcb\x23\xd0\x96\xc2\xf3\x26\xf0\xbc\x2e\xaa\xd2\xdd\x73\x64\x3a\x65\xc7\xb4\x13\x83\x5e\xc5\xfb\xc1\x13\xdc\xdb\x1d\x14\xb4\x82\xda\x5e\x58\xa6\x40\xf3\x4e\xae\xd5\x4e\xb9\x30\xdd\xb3\x60\x26\xf5\x74\x2f\xef\xde\xc3\xac\x4f\x02\x4b\xe3\xb9\x43\x44\xb9\xea\xd1\x70\x55\x0c\x2e\x49\x78\x4e\xe4\xd9\xc5\x56\x17\xf4\x31\xa4\xc3\x02\xe3\x82\xa8\x00\xb0\xc7\x75\xd1\x23\xf5\xb7\x03\xbf\x41\xe3\x15\xd2\xea\x7a\xf9\xb7\x5f\x35\x46\x22\xce\xed\x45\x45\xeb\xcb\x50\x43\x4e\x09\xd3\xbe\x36\x07\xc0\xa7\x02\x6a\x8c\x07\xf3\x87\xae\x27\xa1\xb1\x07\x54\xe6\xa0\x56\xe0\x27\x6f\xa2\xe4\xc8\x54\x30\xbe\xe2\x32\xc3\x6e\x27\xce\xa4\xd3\xa6\xe1\x64\xc7\x09\x25\x5a\x99\x2a\x87\x67\xe4\x4e\xba\xa0\xcc\x78\xa3\xea\x9a\x54\x85\xad\x56\x6e\xad\x4a\x75\x33\x3c\x5e\x2b\x9e\xcb\xc4\xbf\xe1\x51\xe6\xdb\xbb\xb5\xea\x52\xfd\xd8\xc1\x4d\x2e\xf3\xbc\xb2\x6e\x9a\x77\xc4\x1b\xbd\x67\x7e\x14\x2d\x64\x1c\x37\x17\x6f\x79\x62\xb3\x35\x38\xaa\x9a\x37\xd9\x65\xa9\xab\xc5\x92\x71\x06\x7f\x5f\xc0\x57\x53\x76\x6a\x9d\x2d\x09\x2d\xd9\x09\xae\x41\x5a\x94\xdf\x95\x92\xff\xae\x44\xb6\x66\x12\xba\x06\x85\x98\x49\x73\xd8\x08\x23\x1e\xfa\xc9\x44\x3d\x6c\x50\x0b\x10\x22\xf5\x90\x07\x64\xda\xdf\x30\x79\xb4\xdb\x41\x7b\x70\x02\x9f\xdf\x3d\x89\xe7\x9e\xf8\x67\x87\xec\xbf\x3e\x6c\xb3\x6b\x26\xd5\x26\x16\xdb\xf6\x15\x96\x51\xf8\x38\x69\xaf\x31\x98\x2a\x75\x02\x16\xb4\x63\x3c\x3e\xbb\xf8\xf5\xf9\xd1\x3f\x4e\x9e\x7f\xf2\x5a\x12\x9c\x65\x6f\x62\xe0\x59\x88\x72\x5e\xa9\xcb\x59\x64\xb2\x35\xf6\x6c\xf7\xf7\xbc\xb7\x56\x1b\x0d\x01\xd3\xa7\xeb\x50\xb3\x5b\x73\x7b\xd4\xb6\xc3\x9e\xb7\x0e\x3b\x19\x09\x24\x87\xa1\xa7\x94\x0a\xf1\x37\x5e\xa7\x39\xf4\x2b\xfb\xef\x91\x61\xd5\xa0\xd3\xa5\xc8\x0b\x67\x1f\x0f\x46\xaf\xa6\x74\x8e\x87\x7f\x0f\xe1\xfc\xad\x1f\x4e\x40\x14\x74\x82\x59\xff\xcb\x38\x69\x07\xf2\x4e\xd1\xd9\xcb\x99\x12\xd7\xcd\x87\xf9\x94\x1e\xff\x8b\x99\xae\x14\x75\xbe\xf7\x83\xff\x84\x28\x1e\x94\x93\x02\xd8\xdd\x99\xb0\xde\xba\x6b\xae\x39\x55\x9b\x63\x3b\x28\xba\x0f\x15\x87\x38\xac\xb3\xe5\x37\x33\xc1\xfe\x06\x10\x27\x3c\x17\x7f\x9f\xfc\x2d\x30\x25\xf8\x7b\x4c\x87\xb4\xf5\x71\xed\xd0\x6a\xca\xc8\x29\x3a\x31\x20\xc7\x9f\xba\xa0\x69\xd5\x70\x80\x7b\xb3\x54\x86\x7c\x00\xa7\x12\x29\x50\x8b\x7c\xcb\x48\x67\xc9\xc2\xcf\x29\x7a\xd0\x9c\xf4\x81\x98\x2e\xa6\xcc\x6a\x0d\xd0\x24\x88\x82\x7e\xa4\x98\x78\x2b\x0d\x58\xcc\xed\x57\x8c\x0d\x65\x4a\xdf\xc1\x47\xe8\x6b\xd5\x04\x0a\xc1\xd2\x65\x4a\x99\x32\x64\x21\x46\x69\x2a\x7c\xa5\xa5\x4f\x8d\xe3\x0a\x82\x3f\x18\xa9\x08\xc4\x99\xad\x59\x2e\x0d\xb4\xc2\x01\x3c\xc5\xb4\xca\xf0\xe6\x14\x91\x48\x10\x9e\x0c\x5d\x0d\x6e\x6d\xa1\x18\xaa\x51\x99\x5d\x0f\xda\x52\x00\x9c\xb8\xc8\xf5\x4a\xa4\xb7\x29\x57\xd4\x01\x05\xca\xeb\x17\x6d\x4d\x31\x94\x58\x34\xbc\xfb\x8d\xa7\x44\x05\x69\xa5\xce\x58\x91\x71\x25\xa8\x46\x3f\x78\x24\x36\xf9\x74\x57\x04\xf9\x61\x72\x5c\x9c\x59\x01\x89\x2e\x57\x62\x7d\x67\xb6\xdd\x41\xad\xd8\x7c\x38\xbe\x47\xce\x8b\xbb\x99\x22\x6e\x33\xf4\x76\x35\xef\xbf\xc2\x81\x58\x51\xfb\x96\x37\x8a\xa9\x43\xb2\x29\x70\x15\xf2\x2a\x1f\x01\x32\xc5\x98\xbd\x54\xcf\xb0\x54\x77\x8c\x8e\xe6\x06\x10\x22\xde\x34\x28\x62\xc9\xe1\xef\xe8\xdd\x27\x38\xe5\x2e\xfe\x89\xbb\x5b\x7e\x51\x10\xab\xa7\x23\x72\xff\x55\x6b\xac\x86\x15\xdc\x08\xd2\x35\xc5\x08\x24\xb4\xa1\x27\x87\x2d\x4a\x5d\x15\x5e\x02\x34\x7b\x2a\xd7\x8d\x04\xbd\x18\x40\xef\x5e\x73\xe8\xc0\x72\xc0\x96\x16\xb5\x58\x4b\x9d\x36\x69\xcc\x78\x2b\x57\x2b\x2b\xe5\xfb\x0f\x0b\xf0\x00\x46\x69\x91\x7b\x99\x58\xf0\x64\xbd\xd7\x7c\xce\xb6\x24\x54\x34\x18\x65\x8e\xbd\x9b\xf0\x79\x75\x79\x35\x54\x61\x83\x41\x8c\x66\x3f\x5a\x39\x86\xa6\xe8\xbd\x8f\x1e\x1f\x04\x83\xec\x65\x8f\x20\xe1\x9f\xfe\xf2\xa7\x89\x4f\x03\x80\xa9\x7c\x92\x0d\x15\x92\x48\x07\x75\x6b\x37\xd6\xcc\xc9\x71\x69\x0a\x58\x5f\x90\x53\xb5\x67\x31\x3c\xfd\x36\xcf\xef\xf6\x41\xfc\x02\xd4\x43\x7c\x42\x72\x49\xb5\xe8\xeb\xea\xdd\xbb\x68\x0e\x45\xbb\x51\x17\xfc\xdf\x55\x5d\x72\x4d\xb9\x18\x28\xee\x23\x12\x13\x51\xa0\x06\xb9\x9e\x53\xcd\x1b\xa3\x5d\xf8\xe1\xdb\xb0\x1e\xe8\xf0\x9b\x3f\x7d\xfd\x18\x9c\xb0\xf5\x67\x93\xc8\xbf\xbc\xc5\xe5\x42\xdd\x6d\xbd\xfb\x84\x22\x4f\x6e\xa5\xce\x75\x5a\xbf\x6b\x70\x8d\x36\x1d\x2d\x9f\x91\x33\xa5\xb9\x6e\x40\x82\x3a\x73\x04\x78\xe7\x39\xaa\x59\x8b\x8a\x97\x29\xb8\xdc\x6b\x22\xee\x7c\x14\xdb\xae\xe1\x7c\x14\xbe\x8f\x51\x7d\x24\xd0\x8f\x77\x02\x58\x49\xcd\x4f\xa3\x96\xc5\x9c\x9c\x1b\xa8\x5c\x77\xee\x06\xfe\x5b\x56\x04\x5b\xa9\x8e\x7d\x14\x93\x76\x6f\xde\xa5\xce\x52\x50\x21\x88\xc7\xf8\x47\x31\x6e\x6d\x29\x67\x95\xa5\x5c\xb6\x44\xe7\x79\x13\xd8\x0a\xc3\xdb\x66\xca\x6a\x64\xa3\x38\xcf\x00\x64\xfc\x94\xb1\x0b\x21\x60\xed\xe2\x79\x80\x06\xea\x85\x0c\xb1\x61\x3d\x67\xc2\x6d\x24\xdc\x20\x9f\x28\x77\xa7\xfb\xc1\xa2\x8c\xe7\x9e\xa9\x95\x7b\x47\x21\x94\x1c\x27\x26\xa3\xea\x87\x92\x89\x17\x45\x26\xb1\x0e\xbe\xa5\xb3\x43\xcd\x77\x9d\x1a\x4f\x25\x60\x8e\x16\x14\x1e\x80\xe3\xfa\x43\x35\x73\x86\x3e\xf8\x19\xc0\xe2\xc3\x04\xb2\x6b\x37\xc4\x52\x16\x78\xaa\xb9\x0d\x3f\x07\xdf\x40\xdb\xec\x7d\xe2\xa4\xd2\x63\x74\x15\xe8\x6b\x48\xdd\xfb\xee\xf4\x38\x68\x0f\xee\xae\x67\x17\x98\x77\xfd\x35\xde\x65\x84\x5d\xc8\x94\xcd\xb0\xba\xc6\x69\x92\x07\x4a\x5c\x63\xbd\x3e\x39\x3c\x42\xf0\x73\xe5\xeb\xd8\x71\xb4\xf0\x70\x1a\x72\xc4\xbe\xc1\x31\x0b\x51\xfa\xd4\x89\x99\xa4\x7a\xde\x97\xaf\xf6\x7d\x4e\xe1\xf5\xa4\xbc\x9e\x4c\x26\x13\x4a\xc2\x07\xfd\x75\xdc\xa0\x41\x50\x73\x73\x9d\xca\xf9\xba\x45\x09\xb0\xc0\xc3\x23\x60\x47\x72\xb5\xa6\xd9\x4d\xd9\x99\xb6\xc2\x63\x50\x04\xc3\xba\xee\x2c\xec\x5e\x11\x62\xc1\x90\xaa\xac\xcd\xd4\x7b\x2a\x7c\x9a\xeb\xdd\x2d\xe0\x7e\x39\x53\x7d\x30\x33\xb7\xe4\xf3\xf7\x4d\x22\xde\x56\x22\xe0\x43\x62\xa1\xf5\x9c\x9e\xe3\x26\x05\x88\x83\x1b\x16\xc6\xcb\x21\xda\x35\x14\x1a\xc3\x54\x0a\xf1\xb6\xd0\xd8\xae\x09\xdc\xe4\xe7\x3a\xdd\xcc\x21\x85\xb2\x5d\x77\xaa\xa0\x12\xb2\x71\x6a\xc8\xd4\xc2\xb4\x65\x4f\x04\x36\xe3\x6e\xc8\x30\x9d\x83\xd6\x3e\x19\x41\xe4\x06\x86\x06\x79\xa7\x34\x35\xe7\x67\x5a\x31\x51\x2c\x45\x2e\x4a\x9e\x35\x1f\x44\x50\x6a\x4f\x1c\xbb\x2d\xdd\x2e\xc5\x3c\xcd\x9c\x17\xc8\x6d\x81\x79\xa6\xb2\x04\x48\x5a\xd9\xc8\x9f\xde\x7b\xa9\x5e\x69\x6d\x5f\x48\x03\x56\x1d\x65\xac\xa0\x0d\xbe\xb7\x4d\xd5\xf7\xdf\xd5\x75\xe9\x7d\x77\xf2\x27\x4b\x52\x66\xbe\x41\xff\x10\xbc\xd6\x71\x10\xc7\xb4\xee\xda\x83\xff\x35\x21\x2d\x83\x29\xea\x85\x56\x48\x98\xdb\xd6\x61\x7f\xa3\xbd\xfe\x27\xee\xaf\x4f\x3e\x49\x6e\x1b\x90\xe6\x3d\x17\xfd\x33\xe2\x5e\xb0\x65\xce\x34\x9c\x93\x9e\x9b\xe6\x74\xb3\xad\x7f\xbd\x45\x40\xc7\x75\x7b\x89\x43\xd0\x56\xab\x09\xb4\xd9\xae\x8c\xcf\x2e\x2f\x7d\x5e\x5e\x43\x00\x91\xd7\x1b\xc5\x26\xd4\xe1\x32\x5e\x3b\x3b\x9c\xea\xa4\x4c\x55\x8a\x50\x46\x9a\x6a\x51\xb7\xdc\xe6\x86\xbd\x3e\x3d\x66\x8f\xd8\x01\x94\x50\x07\x18\xbd\x90\x08\xd0\xae\xf3\x9d\xfb\x21\x9a\x4e\x1d\x42\xed\x54\x1a\x79\x51\xdb\x13\x3f\x13\xbe\xfb\x09\xb4\xa3\x79\x78\x7b\xbc\xeb\x7e\xec\x06\x94\x10\x4a\x91\x06\xe0\x41\xaf\x3b\xf0\xa0\x58\xb1\x76\xdb\xab\x49\x2b\xdc\x43\xb9\xb0\x1c\x10\x61\x91\x37\xf9\x1b\x1e\xe4\xea\xfd\xd6\x39\x54\xb3\x9a\x70\x80\x4d\x75\x71\x02\x03\x22\x62\xe7\x5b\x4b\x6a\x3c\xda\x0e\xe9\xa6\xed\xe0\x79\xc1\x7b\x80\x06\x7c\xc0\x30\x80\x38\x96\x5c\xa5\x3a\xdf\x78\x9a\x5b\x4d\x30\xde\xa2\xd5\xdc\x6d\xbb\x9b\xae\x5e\xf9\x07\xfd\xb2\x0f\xc0\xc6\x1f\x00\x9f\xec\x39\xf8\x0a\xa4\x09\x3b\x01\x9d\x07\x50\xb9\xbf\x61\xb6\xf6\x86\xaf\xec\x9d\x4c\x50\xea\xac\x63\xd6\x40\x33\xc7\x42\x67\x84\x34\xe1\x5f\xdb\x0d\xfc\x60\xdf\xda\x76\xcc\xe5\x6c\xb3\x97\x75\xd1\x7a\x6b\x70\xe7\x3c\xd4\xb7\xae\x3a\x49\x69\xd6\x7e\x6b\xa8\x3b\x6e\xbc\x35\xc8\xdd\x87\xf8\xd6\xcd\x32\xf3\x01\x84\x09\x0d\xc8\x34\x15\xbb\x53\xbb\xc7\x36\x12\x6d\x5d\xc6\x0a\x4e\xa8\xcf\x8b\x8f\xf6\xc1\x2a\xc4\x6a\xb4\x4f\xcd\xba\x75\xc2\x33\x40\x84\xe8\xba\xce\xac\xbd\xd6\xed\x21\xa3\x8a\x19\xee\x66\x0b\x9f\x45\x75\x9f\x1c\x61\xb4\x75\x1d\xaa\x6e\x85\xa5\xc9\x4d\x47\xbf\xf4\x69\x89\x4e\xfe\xd6\x65\xa8\xf1\xaf\xad\x06\x14\xa4\xba\x5d\x1f\x87\x09\x0a\x4c\x3b\x29\xb8\x5d\x8e\x19\xa4\xba\xc8\x55\x48\x4d\xb9\x42\x53\x6a\xbf\x51\xdb\xea\x77\xac\x7f\xb4\xcf\x38\xa6\x91\xc1\xe5\xe3\xd5\x90\x39\xf2\x2f\x69\xd8\xde\x73\x4f\x80\xbd\xcf\x99\x41\xef\xe1\xfb\x84\xb5\x43\x2f\xd6\x95\x54\x29\xb5\xa6\x69\x90\x26\xd4\x51\xa3\x6e\xe8\x3d\x4c\xfe\xac\xf3\x52\x80\xb3\x37\x90\x86\x4d\x3a\x6f\x06\x4a\x12\xf0\xa9\x22\x93\x1b\x94\x4c\xef\x53\xf1\x0f\x69\x0f\xf3\x5a\xc1\x4a\x2b\x00\xa9\x50\x7a\xcb\x7d\xfe\x5d\xba\x25\x19\xf5\x61\xbd\x1b\x68\x22\x3d\xd9\xef\x51\x88\x4e\x2f\x10\x9c\x24\x52\xe1\xeb\xa6\x21\x64\x17\x82\x0d\x29\x55\x4b\xf5\x1e\xc3\xea\x50\x51\xf2\x86\x74\xc2\x1a\xb8\x9c\x97\x6b\xf6\xdd\xe9\x31\x81\xde\x90\xa3\xf3\x20\x8e\x82\x8f\xb0\x03\x09\x46\x22\x72\x91\xcf\xd0\xfb\x69\x36\x0b\xc1\x1b\x90\x62\x21\x1f\xae\x92\xe9\x2d\x06\x6d\xdb\xfc\x50\x3a\xc6\x50\xf0\xef\x5e\x02\xb2\x02\x19\x30\x6a\xbd\x5d\x6b\xff\x28\x33\xc4\x3e\x6a\xd6\x9d\x15\x74\xe6\xca\x95\x18\x33\xb1\x12\x8a\xb2\x12\xd7\x70\x87\x93\x6d\x52\x25\x59\x95\xfa\xc7\x41\x8f\x00\x63\xef\x4d\x1c\x76\x43\x2e\xee\x8c\x5b\xdc\xb7\x23\x54\x2f\x23\x1a\x91\x84\x7a\x9e\xb8\x0b\xc2\x23\x5a\xea\x2c\x65\x3c\x1c\xbf\x90\xca\x9b\xfa\xe7\x6c\xa4\x7b\x42\x0e\x2b\x25\x35\x55\xaa\x06\x3b\xf1\xf7\x1f\xb4\x15\x26\xcf\xf1\x46\x04\xd1\xe7\xfd\x76\x19\xaf\x54\xb2\xfc\xad\x6c\x99\x2d\xd4\x0f\x81\x20\xce\xae\x44\xa9\x44\xc6\x0a\x5e\xf2\x5c\x40\x9b\x18\xef\x40\xf8\xf4\x99\xfe\xfd\xf0\xac\x7b\x60\x51\x4f\xd0\xb9\x71\x0f\xc5\x09\x7d\xb0\x81\xb7\x66\x8c\x70\x3f\x25\xec\x75\xd8\x69\x19\xd9\x10\xe5\x04\x40\xd1\x41\x5e\x0d\xbb\x44\x3e\x8c\x77\x6b\xc2\xcf\x0d\x60\xfb\xfd\x84\x03\xd6\x38\x99\x3e\xcf\xe3\xae\xce\x44\xaf\x50\x6e\xa2\xd3\xef\x9b\x0d\x47\x5d\xb3\x95\xe7\x27\x8e\x24\x74\xe6\xbb\x00\x65\xf5\x59\xf9\xff\x16\xb9\xe1\x4f\x4b\x01\x35\x66\x3c\xbb\x28\x44\x32\x80\xfd\xf1\xdd\x8b\x8b\xa3\xe6\xa0\x20\x94\xb0\x70\x6b\x29\xe0\xfb\x08\xf5\xe2\x5a\xcc\x96\x5a\x5f\xb1\x83\x2d\xc8\x5d\x51\xb2\x94\x91\x0b\x73\x48\xdb\x7b\xe2\xe6\x3d\x62\x52\x41\x8b\xa5\x20\x54\x43\x6b\x2a\xff\x90\x24\xcc\x02\xd6\x8a\x72\x9d\x49\x0c\x6f\x4e\xf3\xac\x57\x42\x5a\x6f\x9e\xb4\xb9\x18\xdd\xab\x9b\xde\xb3\x20\x37\x21\xb8\x6d\xa5\x1a\xba\x7b\xee\x85\x24\xe4\x8c\x70\x1a\xf8\x00\x74\xf8\xbe\x1e\x2d\xee\x08\x20\xe7\x8d\x66\x85\xb5\x19\x19\x42\xb9\xfb\xd0\x34\x9d\x7e\xba\x1f\x9b\x1d\xcd\x9a\x9a\x38\x39\x17\x11\xed\x7c\x7e\xc9\x4c\xb0\xa5\x56\xba\x24\xa4\x8e\x1a\x8b\x06\xd8\x0c\x26\xf0\xc2\x0a\x10\xbf\x8d\xa6\x1a\x95\xed\xfa\x34\xde\x79\xc6\x17\xd0\x74\xb9\x05\x28\x03\xcc\x55\x57\x18\xf3\x8d\x6f\xf6\xe5\x54\xbe\xa1\x28\xf4\x33\x33\xc8\xc5\x7c\xa8\x97\x52\x9a\x21\x47\xe6\xc8\xcd\x7b\x8e\xe9\xb5\xfb\x0d\x18\x8b\x3a\x8f\x33\x54\xb9\x05\x83\xa8\x41\x60\xe4\xbc\x07\x32\x94\x4e\x45\x15\xea\x94\x07\x9a\xcb\xb7\xee\x29\xf1\xaf\x62\xc0\x0c\x28\x4b\x52\x93\xed\x5f\x8f\xa6\x8c\x9d\xd6\x76\xed\xd8\xad\x62\x7c\x67\xd4\xec\x53\xc1\x17\x67\x88\x78\x81\x2f\x10\xc7\xa1\xa8\x6f\x67\x9f\xfd\xdd\x1d\x6d\x3f\x04\x92\x07\x3a\xea\x10\x50\xa6\xe1\xdc\x42\x7b\xf1\xdd\x27\xc0\x0c\xb6\xf1\x00\x41\xe6\x4d\x19\xfd\xc9\x45\xfb\xa7\xe4\x61\x46\x94\x2b\x99\x88\xa3\x24\xd1\x95\xea\x95\xa3\x7b\x2c\xdc\x2b\x70\x2b\xd2\x8b\xc6\x98\x18\x8f\x48\xe1\x5b\x4c\x89\xe7\x99\xe4\x88\x94\xdd\xbc\x13\x4b\x2c\xeb\x71\x20\x9e\xd1\x9a\x21\x6d\x19\x63\x05\xef\x96\x6f\xdb\x93\x42\x7d\x4b\xac\x36\xdf\x78\x9b\x84\x6b\x51\x90\x42\x19\x1b\xe5\x53\x1f\x56\xbb\x66\xb9\xb9\xaa\xf1\xc3\x05\x14\x71\x84\xc3\x14\x7d\x4e\x2f\x3a\xe1\xf8\xd4\x4e\x98\xe2\x1d\xa8\x6b\x1d\xdf\x73\x2f\x7f\x64\x9e\xfd\xef\xe3\xb3\x7e\x15\x47\xa1\x75\x32\x42\xb4\x2c\x69\xe8\xa0\xaa\xc7\xc8\x92\x31\xc2\x96\x7b\xf2\x98\x95\x9c\xba\x42\x72\x64\x42\x99\xe0\xe8\x53\x61\x07\x51\x85\xd7\x68\xea\x78\x7a\x9d\x4b\x80\xac\x9e\x1a\xf8\xe7\x82\x2b\x13\xa1\xa8\x09\x18\xda\x3b\xf5\xc2\x7c\x50\x10\xd2\x6a\x93\xf7\xe0\xc0\xbb\xa4\x9b\x77\x18\x5b\x56\x89\x65\x95\x35\xee\x73\x7c\xb8\x67\x98\x1f\xf0\xf8\x52\x2c\xa4\xb1\x25\x01\xce\xb9\x01\xeb\x49\x90\x57\x28\xdc\x72\x25\xd6\xec\xfb\x1f\x4e\xfe\xf9\xeb\xf3\x97\x4f\x8f\x9e\xff\xfa\xe2\xe8\xe9\xf7\xa7\x67\x27\x6f\xde\x5c\xfc\xf3\xe2\xf2\xe4\xc5\x9b\x37\x4f\x11\x24\x97\x10\xe5\x2e\x84\x7d\xf3\x86\x76\xaa\x79\xf3\xe6\x32\x29\x64\xf1\xe6\xcd\xb9\xf7\x81\x60\xd3\xd0\xff\x7d\x7c\x06\xfc\x13\x81\x8d\x42\x52\x18\xc8\x56\x24\x3a\xcc\x7b\xc9\x4d\x9d\x82\xda\xa8\xd3\xec\xd0\x68\xa6\xab\xb8\xdb\x8a\xea\xdd\xeb\xb0\x2f\xc1\x19\xec\xbb\x7d\x7b\x2f\x6d\x5d\x70\x3f\x13\xf6\x5a\x10\x12\xd7\x56\x1c\x79\xde\x2e\x97\xa7\xb4\xf4\x2d\x1d\x85\x3d\x52\xce\x4a\x8a\x6b\x84\x4d\x95\x0b\xc5\xb3\xa8\xad\x35\x20\xf3\x21\x3a\xdb\x26\x5a\x3d\x28\x49\x85\x4e\x43\x0b\xef\x96\xd7\x7e\xc3\x63\xdf\x28\xbf\xc4\x7e\x04\x22\x65\xe7\xa7\xc7\xec\xf1\x14\x95\x9c\xd3\x63\x6c\x8f\xb2\x15\x2c\xdd\x5b\xaa\x4e\xa0\xa2\xf4\xdd\x52\x93\x51\x6f\x80\x2e\xcc\xa8\xc3\x0e\xa8\x66\xa9\xce\xf9\x5d\x9b\xf5\xbf\xa7\xee\x71\x5e\x65\xd9\x9a\xfd\xbb\xe2\x19\xea\x00\xe7\x3a\xdd\xe4\x4c\x7b\x7f\xf3\x1f\xfd\x7d\xfa\xb7\x30\x8f\xbf\x4f\x03\x82\x01\x90\xed\xef\x53\xb3\x4a\xa6\x7f\x23\x8c\x3f\x46\x37\x6d\xcd\xa0\xde\xa8\x92\x25\x7d\x16\x7f\x03\xcf\xe6\xa0\xef\x7e\x92\x32\xc9\xa8\xbd\xf1\x77\x25\x4f\xc4\xb9\x28\x25\xa8\x4c\x5a\xa5\x7d\x8a\x26\xfd\x96\x61\xa9\x47\xbd\x96\x8a\x19\x1c\x36\x90\x40\x09\x91\xa2\x92\x48\xb3\x10\x6c\xe1\x26\x01\x0b\x83\x5a\x20\x40\x4b\x24\xa5\xe0\x98\x88\x4f\x38\x13\x1e\xca\x78\x4a\xee\x33\x1f\x1c\x76\x1a\xbf\x12\x0b\x0c\xf1\x52\x1c\x01\xc3\xc8\xc8\x65\x11\x7e\x30\xc4\x36\x8d\xd5\x05\x93\x79\x2e\x52\xa7\x00\x65\x6b\xb6\x92\x1c\x39\xbf\x5b\x1b\x3a\xa7\x07\x4a\x33\x0d\xde\xf8\x4a\x49\x72\xce\x2d\x2b\xcb\x52\x7d\xad\x46\x75\x03\x7b\x7c\x80\xb3\x56\x64\x36\x6e\x14\x1e\xc3\x2b\xb1\x02\x08\xdb\x44\xeb\xf0\xfa\x12\xcc\xb0\x71\x1b\xe9\x1e\xdb\x88\x87\xe0\x08\x08\xca\xe9\x39\x88\x47\xc0\xae\x8b\xee\x31\xe4\x24\x94\x65\xbc\xd1\xc2\x9a\x5e\xca\xf3\x12\xcc\xcb\x43\x2e\x16\x0f\xe8\x7e\x3d\xd7\x65\x22\x67\xd9\x9a\x2d\x79\x56\xb7\xb3\x8e\x69\x03\x56\x64\xfc\xfa\x99\x56\x8b\x58\x50\x23\xb4\x39\x54\x88\x0b\xae\xaa\x02\x9f\xe7\xe4\xdb\x5a\x57\x37\x18\x0c\xdf\x3c\xf2\xaf\x7a\x0f\x60\xa3\x77\x0a\x1b\x59\x9d\x09\x5c\x9f\x3e\x27\x65\x6b\x3d\xf6\xbe\x89\x47\xef\x42\x88\xfb\xa8\xb9\xbd\xf4\xc8\x25\x6e\x47\x5c\x86\xf9\x83\xa5\x61\x2d\x87\x82\x70\x77\xda\xf1\x1b\xa8\x05\x5c\x33\x27\xb5\x08\x99\x2c\x46\x16\xb0\xa5\x2c\x32\xc1\xfe\x76\x25\xd6\x63\xc4\xa4\x45\x25\xe4\xef\x51\xa7\xb0\x80\xea\x87\xbd\x03\x74\xc9\xfe\xe6\xff\xf5\xf7\x4f\x58\xbf\xdb\xc7\x8b\x8a\x2f\xd5\x3b\xf2\x75\x82\x35\x42\x4d\x90\x5a\xa4\x2c\x95\x0f\x59\x8d\xe4\x9a\xb2\x13\xc0\x4b\x40\x8d\x94\xba\x25\x65\x59\xe3\x66\x43\x9a\x4d\x13\xe0\x14\xfc\x2f\x51\xed\xd0\x99\xa6\x02\x6b\x01\x48\xd1\x73\x51\xd6\x9f\x00\x83\x39\xd3\x27\x6f\x45\x52\xd9\x4f\x09\xb8\x88\xd7\x95\xe8\xdf\x8b\xfe\x07\x11\x50\xb4\x91\x36\x4e\x0b\x0f\x75\x1b\xf5\xe9\x8c\x52\xf7\x6e\xa7\xed\x95\x58\x9b\xd0\x27\xe0\x0a\x47\x27\x34\x8c\xb0\x7f\xbd\x20\x3b\x79\x2b\x8d\x35\xff\xcb\x37\xc2\xcf\x67\x9e\x7f\xe3\xd0\x7e\x31\x61\xf4\xa8\x47\x84\xfb\x13\x1e\xf3\xa9\x09\xee\x5f\xa0\x37\xd5\x5f\x7a\x4a\x44\x5d\x20\xb8\x7b\xa7\x7d\x43\xc9\x5b\x5a\x41\x19\x5f\xdc\x4e\xa0\x4e\x3b\xc2\x1f\xe3\xfe\x44\x1a\x02\x5d\x4e\x9c\x92\xd7\x14\x33\xf4\x11\xdd\x24\x01\x18\x57\xae\x78\x26\x14\x75\x57\xca\xd2\x84\x97\x18\xa2\x27\x4c\x6c\x43\x0d\xda\x08\x0c\xd6\xc9\x38\xe2\x64\xf5\x2a\x1b\x0a\xe5\xf1\xd2\xca\xa4\xca\x78\xc9\xdc\x79\x5c\xe8\xf2\x8e\xd0\xd9\x78\xf5\x5a\x93\x7a\x8b\x76\x52\xe7\xf0\x6a\xf2\xf7\xf6\x88\xed\x5e\x1d\xa4\xbd\x38\x93\x49\x22\xfa\x67\x7c\x50\x0e\x9a\x0d\xde\xf4\xdc\xf3\xa6\xc0\x28\xe2\x6e\x0f\xb6\x09\x38\xb5\x00\xff\xf7\x28\x12\x1e\xe1\x64\x4e\xd9\x3f\x02\xca\xc8\x98\xd5\x3e\x63\xa8\xd8\xa5\x67\xd2\xb1\xa1\xe5\xaa\x0f\xf5\x5c\x97\x62\x25\x4a\x76\x90\x6a\xf8\x8d\x58\xc9\xc4\x8e\xa6\xec\xff\x71\x9a\x22\x38\x91\xbd\x3a\x49\xc7\x2c\x54\x29\xd7\x3d\x27\x1e\xb1\x03\xf8\x59\xac\x4a\x8e\x7c\xa0\x88\x9a\xd9\x7c\x66\xd9\x30\x3d\x22\xdc\x5b\xa2\xdb\x0d\x36\x8a\x9a\x62\x6b\x6b\x04\xc9\xaf\x03\x87\x0c\x3c\x51\x1a\x3a\xa5\x0d\xcf\x6d\x88\xb3\x78\x16\x1a\x36\xce\x7f\x83\x8f\x9e\x95\x62\x01\xe7\x0f\x4f\xcf\x27\x3c\x7d\x56\x17\x3a\xd3\x8b\xf5\x45\x51\x0a\x9e\x3e\xd5\xca\xd8\x12\x58\x43\x9f\x16\x05\x37\x8d\x19\x81\x5b\x2e\xf5\x35\xe3\x94\xc0\xa6\xe7\xd8\xe4\x41\x57\x8b\x25\xb6\xb0\x84\x1f\x32\x9e\x94\x1a\x00\x5b\x71\x38\x32\x3a\x4d\xc0\x8e\xf3\xee\x83\xd0\xf1\x12\x46\x01\x87\xc7\x35\x5f\xd3\x61\xe2\x33\x99\x0a\x13\x65\x70\xfb\xc9\x60\xe8\xe7\xc6\xf7\x07\xae\x7c\x74\x76\x7c\xd7\xbe\xa0\xf7\xa8\xd0\xde\xf0\x2a\x41\x33\x42\xaa\xd7\xf4\x0d\x1a\x29\xd0\x8d\xe7\x9a\x34\x55\x6c\x47\xe4\x29\xf3\x99\x60\xcb\xe4\xfc\xed\xc5\x95\xb8\xee\xf0\x4b\xff\xa2\x3f\x88\xbb\xa7\x82\x4d\xc0\x1e\x7d\xad\x0c\xb7\xd2\xcc\xa1\x81\xf0\x27\xd4\xc7\xa1\x24\xa3\x5b\x9f\x53\xbc\x9a\x95\x4d\xf1\x68\xbe\x64\x3e\xe0\xcf\x36\x36\x0b\xe5\xff\xd5\x76\x10\xa5\x7f\x42\x89\x48\x68\x91\xea\x4e\x50\x42\x6d\xc3\xad\xae\xe3\xd0\x18\xa9\xa8\xf2\x99\x28\xc3\xd9\x47\x67\x80\x2c\x5b\xf8\x8b\xad\xb3\xff\x19\x62\xde\x02\x79\x4e\xde\x3a\xcd\xc3\x74\x4b\x54\xc2\xab\xd9\xf5\xbf\x35\x28\x86\xc7\x7c\x02\x67\x6b\x19\x1a\xdd\x77\x09\x2b\xbd\xfe\xa4\x2b\x9f\xab\xaf\x3e\xa9\x94\x78\x75\x4e\xa8\xc4\xab\x9d\x46\x7e\xe3\xeb\xb7\x5a\xf8\xc6\xe5\x90\xe4\x14\x32\x63\x54\xe0\xd1\x81\x0d\xc0\x69\x24\xd8\xe1\x66\x04\x1f\x35\xc1\x28\x72\x37\xe1\xef\xfa\x36\xe8\xee\xbc\x3f\xf1\xea\x97\xaf\x89\xd7\xc4\xbd\x52\xaf\xdf\x7b\x62\x75\x1e\xa4\xef\x61\xc3\xab\xa3\x41\x5d\x5f\x8d\x0d\x75\x55\x9b\xd6\xb8\xb3\x1a\xa6\x75\xcd\xec\x6a\xc3\xba\xd7\xb3\x07\x68\xcf\xcf\x7a\xda\xb8\xf5\xd5\x20\x84\xbe\x83\xb5\xcb\x21\xc0\x14\x90\x06\xb7\xdb\xbc\xa7\x6a\xcc\xce\xb4\x75\xff\x89\xcc\xdf\x63\x2d\xcc\x99\xb6\xf0\xc9\x83\x20\x25\xbe\xc2\x80\x84\xf4\x9d\x30\x11\xe5\xd0\xf1\x4d\x0a\xd1\x3a\x89\xe7\x09\xb6\xc5\xb0\x38\x55\x4c\x97\x9e\x62\xc1\xba\x30\x34\x44\x1c\x56\x20\x04\xb2\x1b\x8d\x13\x37\x4e\x4c\xe7\x5b\x86\xa3\xa1\x20\xfb\x0b\xbf\x01\xac\xe5\x22\x83\x02\x81\xb4\x2a\xb1\x0d\x93\xd3\x35\xad\x58\xc8\x84\xe5\xa2\x5c\x08\x06\x90\x9a\x43\x2c\x5f\x1f\xb9\x82\x57\x4f\xe9\x12\x4f\xa6\xc7\x5e\x02\x91\x0d\x2a\xd6\x80\x2a\x00\x8e\x87\x62\x2d\xe7\x60\x49\xfd\xbf\xc1\x07\xfd\xff\xb1\x82\xcb\x12\xda\x36\x51\xec\x38\xfe\x8e\xa2\x2f\xf1\x30\x6e\x84\x0d\xdf\x12\x57\x4c\x60\x9d\x97\x1b\xbd\xad\x78\x8c\xd9\x35\xf4\x54\x71\x3c\x31\xb8\x3f\xf6\xae\xc4\x7a\x6f\xbc\xb1\xf5\xf6\x4e\xd5\x5e\x1d\x18\x6e\x6c\xb6\x20\x84\x21\x83\x70\x0f\xbe\xdb\xfb\x78\xba\x4a\x2f\x61\x3b\x44\xd3\xcb\xf6\x84\x3a\xee\xab\x7a\xf1\x7e\xe8\x80\xe9\xc8\xda\x5b\xea\x45\x63\x38\xaf\x2c\x59\xd2\xd1\x6b\xe9\x67\x30\xe7\x3f\x8b\x00\xeb\x0d\xf4\x65\xf5\x28\x62\x05\x62\xba\x2e\xea\x8c\x19\x9e\x25\xd8\xb6\x16\x17\x15\x06\x71\x8b\xe9\x4d\x8c\x4c\xeb\xab\xaa\xf0\x9b\x02\x72\x0c\x00\x22\x48\x25\x3a\x27\xa3\x03\x9f\x0f\x7e\x15\xda\x71\x13\x8a\xe3\xe1\xee\x0d\x7b\x83\x9a\x45\x36\xac\x99\xe6\x84\x83\xdb\x21\xa0\xe2\xdf\xe5\x15\x42\xca\x4b\x3c\xbb\x29\x03\x9a\x81\x5e\x90\x6a\xb5\x6f\x71\x6c\x7f\xcc\xb6\xbc\x48\x18\x99\xbc\x85\xee\x9c\xaa\x2a\xcb\x02\xee\x34\xea\xf3\xe8\x0c\x84\x73\x41\x5e\xf4\x85\x3b\x29\xb6\xf9\x82\xdd\x0d\xa3\xae\xfc\xb5\x07\x57\xed\xc9\x4b\x6f\x02\x16\xe5\x56\xe7\x32\xe9\x70\x88\xc0\x71\xd0\xfb\xf4\xec\xbf\xc0\x81\x22\x27\x17\x06\xd6\x17\xa5\xc0\x7a\x6f\xd8\x59\xb0\xd3\xa8\xcb\x77\xa5\xc4\x4a\xb8\x95\x4d\xa5\x21\xc8\x51\x9f\xa7\xf3\xaf\x0d\xbf\xc2\xff\x75\xac\xcf\xb4\xf5\xae\xaf\x7f\x79\xdf\x31\x32\xf1\xb7\x32\xaf\x72\x84\xe6\xb3\x6e\x8b\xa6\x72\xee\x1b\x1a\xf9\xf4\xa0\xa6\xd1\xdd\xf4\xfd\xd0\x2e\xb5\xbc\x5c\x40\x9a\x30\x19\xdd\x9e\x57\x2f\x32\x3d\xe3\x19\xcb\xa5\x72\x8f\xa1\x0c\x80\xc6\x67\x61\x26\xf4\xe7\x2d\x0f\x02\x81\x22\x17\x72\x96\x09\xb2\xea\x5b\xbd\x16\xa3\x1f\xb7\x6e\x04\x9e\x94\x41\x13\xa7\x25\x57\xec\x85\x54\xc7\xde\x25\xf8\xcc\x9d\x9a\xb7\x3c\x2f\x32\x81\x55\xc0\xec\x9b\xc9\x7f\xb4\x12\x8c\xb2\x5c\xc6\xcc\x2f\x0f\x25\x3f\x59\xcd\x1e\x8f\x7d\xeb\x89\xa8\x3f\x25\xa4\x30\x35\x99\x87\x77\x47\x1a\xf6\xf5\xe1\xd7\x87\x8f\x9f\x38\x45\x0c\x63\x5d\xdc\x10\xca\xd9\x26\x35\x1e\x4f\xd9\x3b\xe6\x66\xf0\x98\xfe\xfb\x35\xfd\xf7\x1b\xf6\x8e\xbd\x63\xec\x9c\x9d\xb3\xf8\xbf\xee\x3f\xec\x1d\x9b\x38\x22\x44\x53\x7d\x3c\x6e\xf2\x8e\xc4\xd9\xa4\xbe\xa6\x9f\xf6\x02\x70\x50\x1c\x1a\x4a\x06\x13\x9d\x0b\x98\xea\xd7\xff\x2b\x06\x27\x96\x96\x69\x45\x77\x3e\x3e\x80\x29\x8d\xd8\x35\x78\xa6\x73\x7e\x85\x5e\x99\xa3\xc4\x56\x3c\x73\x0f\x3f\xf8\x66\xf2\x78\xc4\xb4\x6a\xde\xbe\x92\x1a\xfa\xb8\xd0\x0c\x0f\x1e\x8f\xa6\x1b\x53\xfe\x7a\xcb\x94\x1b\xb3\x85\x59\x70\xb5\x86\xa1\x6f\xde\xef\x7e\xab\x1f\xa9\xf5\x35\x5f\x87\x0d\xef\x45\xc6\x42\xae\x42\xd7\xd7\x08\xe7\x08\x42\xf6\xb0\x7f\xa5\x87\xae\xc3\x41\xd7\x4c\xda\x29\x3b\xb5\xfb\xfb\x06\x1c\xee\x68\x30\xfb\xf6\xb4\xc7\x31\x24\x2f\x10\x1e\xf6\xc6\xa3\x56\x4a\x7f\x07\x00\xc8\x41\x63\x23\x77\xea\x2f\x8b\x57\x1e\x4e\x49\x6f\x16\xb7\x57\x9f\xb8\x06\x60\xc6\xe6\xa9\x6f\x1f\xdc\x90\x7d\x78\xeb\xe9\x6e\x75\x3f\xf4\x6c\xe8\x8a\xb4\x91\xfa\xe4\xd7\xef\x34\x86\x44\x38\xef\xfa\x66\xe8\xfb\xc6\x78\x97\x61\x6f\xf6\x9a\xe7\xf2\xcd\x1e\x44\xc0\x82\x12\x4a\x45\xf2\x24\xd9\x09\x60\xd5\x6f\xe3\x08\x04\xf0\x48\xa5\x75\xde\x51\xc7\xf9\x43\x2b\x53\x30\xbc\x16\x10\x8c\x2b\x37\xdf\x24\xca\x4d\x6a\xa4\xb2\xba\x53\x18\x61\xbd\xb3\x23\xdc\xc0\x06\x22\x88\x1f\x32\xaf\x1b\x69\x67\xea\x40\x0a\xe8\x2c\x21\x92\x92\x63\xcf\x45\x77\x3b\x1d\x6c\x74\xf8\xfa\x1e\x8a\x61\x59\x4f\xe7\x5b\x92\xc9\xea\x28\x0b\xe2\xdb\xba\x4d\x02\xc5\x47\xf1\xfe\x89\xba\xbb\x3e\xde\x02\xf6\x4a\xc7\xc5\x34\xc9\xf5\x88\x36\x52\xfd\x4c\x6d\xf1\xb9\x3f\xb5\xf9\x47\xb0\x60\x1b\x72\x13\x9a\x0c\x74\x11\x16\x5f\x8f\x5b\xb3\xa7\xcf\xff\xd4\x45\x86\x7c\xfd\xe4\x6e\xc2\x81\xfe\x7b\xd9\x58\xe6\xad\xab\xfb\xa7\x83\x7a\x96\x23\xc8\x02\xd8\x72\x08\xa0\x62\xa8\x8e\x08\x4f\x83\x40\x33\xd2\x56\x1c\x8b\x8c\x94\xb8\xa6\xcc\xcf\x9b\x5f\x2a\x2a\x14\xf5\xcc\x7d\xec\xe4\x0f\xaf\xa0\xcd\x66\x5e\x54\x00\x0a\xe0\x08\xe9\x95\xdd\x6f\x0e\xbe\x61\x13\xf6\x68\xe4\x76\x83\xc2\x6d\x05\xc4\x8c\x45\x99\x13\x0d\x94\xc8\x6c\x97\x4e\x79\x72\x94\x31\x63\x6c\xcd\x98\x65\x6d\x21\xd4\xec\x1b\xe1\xf4\x9d\xad\x8d\x3a\xdd\x70\x35\x6d\x4e\xd5\xb9\x4e\x9b\x11\xb3\x46\xeb\x08\x2a\xbe\xf7\xfd\x26\x0e\xa2\xc6\x13\x21\x83\xbf\x0b\xe6\xca\xfd\xca\x02\xa5\x53\x71\x34\x87\xde\x33\xeb\xae\xd8\xd6\x6d\x99\x70\xb6\x31\x66\x24\x1b\x96\xfa\x9a\x5d\x53\x7e\x32\x6c\x39\x2a\xb3\x8b\x27\x72\xe8\xfe\x08\x7b\x0a\xf8\x59\x60\xc9\xa4\x42\x04\x56\x4a\xc7\xc8\xc0\xb2\xbf\x8c\x81\x7b\x26\xec\x7b\xad\x74\xf9\x04\xb5\x23\x37\xa4\xa9\x59\xf1\xcd\x8f\x43\x56\x13\xc3\x98\x34\x04\x82\x71\xea\xcd\x29\x18\x68\x4f\xde\x37\x4a\x30\xe3\x20\x55\x3a\x0d\x7c\xec\xb6\xc1\x11\xaf\xfd\x86\x9c\xdc\x80\x0d\xbe\xe1\x94\x71\xdf\xc2\xeb\x52\x5f\xab\x69\x6b\xff\xb7\xba\xa6\xf8\xe4\xde\x68\x13\xbb\x11\xdc\xca\x9d\xba\xe9\x19\xa9\x15\x2e\xdd\x6d\xc7\x02\x4a\x31\xbb\xef\xf9\x8e\xf6\x9e\xa3\xe4\x25\x44\xe4\x87\xdc\xb0\xf1\x88\xb7\x6e\x57\x04\xeb\xc2\x8c\x80\xde\x5b\x13\x77\x45\xa8\x5c\x85\x51\xc7\x8c\x67\x1a\xfc\x0c\x8e\xcf\xba\x8f\x44\x4a\x37\xce\xb5\x77\x47\x6c\xb8\x10\x96\x50\xac\x5b\xe7\xa4\x8c\x1b\x7b\xad\xbd\x69\xfd\x0b\x7c\xc0\x36\xed\xb5\x25\xf1\x99\x5f\xfe\x9e\x8c\x32\x06\x06\x48\x53\x0b\x63\x79\x23\xfa\x4a\x80\xfc\x83\x95\x43\x5f\xd1\x14\xe8\x42\xe6\x0c\x95\x60\xa0\x3b\xae\xee\x55\xec\xe3\x91\xd8\x46\x37\xe1\x59\xac\x4d\x39\x8d\x4c\xa6\xa2\x44\x01\x3b\x13\x8d\x82\x9d\x90\xe9\xc1\x7e\xaa\xef\xc4\x42\x1d\xc8\x68\xc6\x81\xfe\x8e\x05\xe2\x7b\xb3\x2a\xb9\x12\xd6\x7b\x72\x4b\xa8\x31\x28\x2a\xcb\x66\x3c\xe3\x2a\x71\x9b\xb7\x1d\xd9\xb7\x1a\x07\xc3\x5f\xc2\x53\x10\xf5\x26\x14\x92\xe0\xd0\x51\x1e\xa2\x54\xc6\xba\xd1\x30\x41\xb1\x9e\xe0\x51\x66\xf4\xd8\x1d\x51\x3f\xc0\xa6\x33\x01\x86\xa2\x7f\xa3\x73\x9a\x84\x81\x10\x96\x2a\xd5\x22\x8f\x32\xd1\xb9\x25\xc0\xb0\x20\xbb\xc9\x26\xa6\x0c\x3a\x6b\x9e\xce\xdb\x4b\xb6\xd7\x2c\x97\xf4\x15\x38\x7b\x63\x7c\x6b\xb7\x72\x54\xbe\x4a\xde\x0e\x6a\x3b\x12\xbd\x95\x4a\xa1\xaa\xbb\x3d\x70\xb8\xa3\xf9\x04\xa7\x0e\xf9\xd1\x41\x6d\xbd\x7d\xf4\x53\xbb\xcd\xe2\xfd\xd4\x67\x66\xc3\xbe\xef\xef\x70\xdb\x54\xf9\x9b\x9c\x1c\x72\x4e\x78\xe6\x6b\x41\xa8\xaf\x2a\x61\xc2\xab\xfd\xfd\xda\x33\x00\x47\x01\x39\x4b\x6d\xbb\x38\x2e\xda\xb0\x1d\xd8\x81\x57\xfd\x98\x15\x59\x86\x87\xb5\x36\xa1\x9c\x2a\x6c\x75\x6d\x43\x49\x18\xa1\xe9\xc5\xd8\xfa\xc3\xf8\x47\xbe\x22\x06\x1c\x65\xeb\x80\xe6\x38\x66\xb3\xca\xb2\x85\x5c\x39\x01\xf0\x41\x4e\x0f\x74\xec\x2c\x45\x56\xb0\x52\xa4\x55\x42\x28\x06\x20\x9d\x8e\x62\x0b\x0d\x72\xb6\x03\x77\xd8\x6b\x10\x74\x0f\x1b\x66\xaa\xa6\xf0\x91\x73\x38\x20\xa0\x68\xc9\x39\x13\x2b\x51\xae\x59\xa1\x8d\x81\x63\x08\x6c\x0b\x4b\xf9\x20\x6a\x14\x80\xa7\xc1\x9a\x80\x59\x79\x05\x7e\x8f\x34\xf8\x3d\xb0\x70\x75\x83\x15\x7d\x1a\x87\xde\x37\x87\x8f\x0f\x1f\xdf\x6e\x8c\x9d\xc3\xff\x6a\x0f\x9d\xff\xef\xe9\x7c\x8b\xcd\x59\xcf\xa5\xb1\x73\xee\xe2\xc4\xfb\x1a\x7c\x6d\xdf\x8c\x22\x5f\xde\x37\x87\x5f\x1f\x3e\x3e\x70\x73\xfd\x7a\xe4\x66\x1d\x79\xe9\xbe\x8e\xbc\x74\xe1\x97\x34\x23\x61\x1a\x7e\xba\x53\x45\x75\x9b\xd7\xba\x4c\x29\x3f\xd5\xd7\x00\xba\x19\x21\xe6\x9f\x93\x0d\xb9\xe7\xe5\xb8\xed\x9a\x5e\x82\x7d\x8b\xee\x42\x69\xd9\x1f\x72\x5d\x8a\x3f\x44\xf7\xdf\xe8\x5f\xeb\xee\x36\xbb\xe7\xb6\x67\xdd\x93\x03\xfb\xa6\x06\x0e\xd3\x3f\x0d\x7b\xef\xf4\xc9\xe6\xdd\x7f\xee\x9b\x46\xe2\x50\x94\x36\x85\x4e\xdd\x9c\xd2\xfb\x66\xeb\xb8\x1a\x78\x26\x9c\x4a\x8b\x3e\xb0\x1a\x32\xf0\x8e\x4d\x72\x8d\xd5\x25\x5f\x88\x43\x7a\x6c\x97\xda\xdd\xfb\xc8\xc2\xfd\x11\x9b\x1d\x35\x72\x64\x10\x8c\x89\xda\x20\xf9\x82\x6c\x9f\x3d\x09\x5c\x80\x27\x50\xcb\x08\x84\x6c\xc0\x7d\x46\x55\x92\x9f\x49\x22\xee\x27\x6e\xf2\xc8\xaf\xcd\x49\xc6\x8d\x95\xc9\x3f\x32\x9d\x5c\x5d\x58\x67\xf5\xf4\x56\x2d\xb6\x8d\xda\x58\x53\xc5\x8e\x7e\xba\x60\xc7\xd2\x5c\xd5\xbd\x86\x7d\xf7\xf4\xb8\x7c\x90\x07\xd4\x66\x42\x92\x60\x39\x4f\x96\xa8\xba\x92\x0f\xda\x77\xee\x1a\xee\xac\xfc\x8e\x5f\x1b\x81\xd3\x87\x5e\xae\xee\x6b\xd1\x9d\x05\xdf\x1b\x8a\x24\xbe\xce\xe9\xf1\x3d\xa4\xed\xce\xcd\x65\x67\x88\xea\xcd\xfe\x6f\xbe\x91\x00\x22\x22\x64\x02\xeb\x6c\x10\x8d\xbb\xd9\xd3\x0d\xf6\xd0\x5a\x57\xec\x9a\xa3\x5d\x0d\x1c\x76\xca\x2e\x65\xf1\x84\x9d\x44\xdd\x91\xb6\x0d\xe5\xb4\x8f\x80\xc5\x4a\x06\x35\xec\x39\x4c\xc3\x71\x0c\x99\x2a\x7c\xd8\x09\xaa\x56\xe6\x09\xdb\x13\x6f\xed\x1f\xf7\xc6\x6c\xef\xed\xdc\xb8\xff\x28\x3b\x87\x6e\x6a\xd4\xbf\xda\xe9\x78\x6a\x2e\xca\xda\x74\xc4\x1f\x6c\xc2\x20\x0d\xbf\x65\xd9\xe5\xcb\xe3\x97\x4f\x40\x97\x4f\xb5\xb3\xfa\x8a\x52\xac\x9c\x4e\x49\xa0\x5e\xc4\x1b\x23\x32\x40\xe6\x48\xa2\xf3\xa2\xd4\xb9\x8c\x4a\x6f\xe1\xc8\x75\x39\x01\x6c\x88\xdc\x2f\x30\x6c\x61\x33\x0c\xb2\x9f\xc2\x70\x7e\x4b\x45\x1f\xa8\x0f\xd9\x4c\xa7\x73\xa6\x31\x51\xa0\x59\xfc\x2f\x4d\xb8\xc9\x6d\x1f\x1a\x45\x01\xa2\x52\xbd\x61\x9c\x66\x4e\x5f\x1d\xa6\x62\x75\x68\x52\xfe\x78\x0c\x8f\xc1\xdd\xb0\x6e\xcd\x89\x1b\xb6\xf7\x78\x6f\xca\x2e\x64\x2e\x33\x5e\x66\xd4\x50\x9d\x86\xa8\xef\x73\x86\x82\x1f\x10\xcc\xdf\x47\x7b\xec\x00\xab\xef\x41\xdd\xc8\x84\xc7\x62\x0b\xd8\xa3\x90\x27\x33\xea\xa4\x5d\xb2\x01\x9c\xf1\xac\xb7\x43\x9e\x01\x97\xe4\xe9\x4b\x95\x75\xce\x59\x6e\x6e\x0e\x3f\x9a\x2f\x5d\x2b\x2b\xf2\x67\xce\x75\x49\x46\x60\xb8\xc5\x43\xfc\x48\x45\x6a\xcb\x0b\xb7\xf4\xe6\xc1\x88\x1f\x36\x00\xec\x1c\x0b\x52\x64\x18\xfa\xfa\xd1\x20\x15\x01\xbb\x3b\x9f\x1e\x7b\x26\x5e\x88\xd2\x48\x63\x1d\x8b\x4a\x1b\xaa\x81\x44\x7d\xe1\xe0\x28\xe7\xff\xd1\x8a\x9d\xfc\xe3\x82\xa6\x35\x7a\x80\xc4\xee\xc8\xe9\xf8\x7f\xaa\x52\x38\x8d\xa8\xb7\xfa\x15\x46\x6a\xab\x5c\xee\x73\x76\xcc\x2d\x47\xcd\x0b\x39\x95\xae\x61\xb1\x40\xa9\x9a\x41\xb9\x92\xc7\x3c\xeb\xa8\x3c\xb3\xfb\xd7\x7e\xdc\x0e\x3a\xeb\x8e\xa3\xed\x7e\xfe\xfa\xd5\xe9\x3d\xe8\x4e\x09\x88\xdb\xc5\x0b\x9d\x0e\xa4\x40\x45\x03\x7a\x91\x07\x30\xa5\x4f\xf1\x73\x96\xbb\x27\xb1\x33\xad\xc4\x98\xbd\x12\x3c\x65\x8e\xbb\xd1\x3f\x7f\x2a\xa5\xbd\x2b\xf2\x53\x7d\xf5\x16\xfd\x7e\x11\x07\x21\x84\x1f\xcc\x13\x21\xee\x4d\x0f\xd0\x94\xc0\x74\x48\x07\x98\x65\x7a\xc6\x88\x59\xdc\xe7\xdb\xbf\x7e\x75\x3a\xd8\xcb\xbf\x7e\x75\xea\xdf\xdd\xfd\x53\xcf\x1f\xe6\x6b\x0f\x68\x3c\xd4\xb6\xc3\xb3\x96\xb2\x5f\xab\x73\x75\x0b\xa1\xb6\x41\xf0\xe1\xd6\xc0\x74\x28\x3b\xe0\xbe\x68\x7e\x25\x55\xe7\xea\xb7\x26\xb7\x81\xf6\x41\x01\x0c\x2a\x0a\xa2\x01\x06\x5d\xfa\x84\xe5\x55\x66\x01\xef\x07\xf6\x9a\xdb\x7c\x90\x2d\xe6\x77\x1d\x23\xec\x4b\xc6\x8e\x05\x86\x23\xd2\x27\xbe\x02\x23\xfc\x62\xfb\x0f\x5e\x70\xc5\x17\xee\x76\x90\x80\x2c\xc7\x3f\xa3\x4d\x7e\x80\x4e\x77\x15\xbe\xe2\x2b\x2e\x33\x3e\x93\x99\xb4\xa0\xcf\x8d\xa6\x5e\x9b\xc7\x2c\x7d\x98\xf2\xbd\x71\xbf\x41\x55\xdb\xa0\xb6\xc6\xc8\x28\x00\xec\xc7\x0e\xdc\x77\x87\xd7\x8e\xd5\x8f\xa6\xc0\xf7\xe1\x46\xc0\x61\x6f\x29\xbf\xaf\xde\xa7\xfc\xde\x8b\x9e\x0a\xeb\xfd\xac\x63\x6f\xb3\x4d\xdd\xc9\x8d\xb4\x55\x77\x82\x2f\x08\x6e\xf3\x0b\x57\x9f\xb0\xbf\x7c\x0f\x05\x0a\xce\x4e\xc7\xdf\xf7\x55\xa1\x3e\xce\xc1\x49\xbf\xbc\x83\xc3\xb0\x0b\x24\xad\xf4\x20\xe4\xaa\x87\xf3\xba\x46\x80\x55\xc6\xaf\x5a\x85\xe3\x78\xb2\x2e\x88\x97\x7b\xb8\x65\xf8\xbd\x3b\x4f\x5d\x60\x25\xf0\xea\xcd\x7e\xc3\x0e\x1e\x86\x2e\x7e\x34\x4f\x16\x14\x52\xf0\x31\xeb\x7c\xce\x7a\xbe\x66\x22\x8a\xe5\xbc\x7f\x66\xbb\x1b\xe6\xd9\x45\x33\x6a\xf3\x54\x14\x4b\xf6\xec\x62\x0b\x9b\xc4\xaa\x02\xf7\xde\x06\x63\x39\xfb\x86\x65\x72\x2e\xac\xec\x44\x84\x7b\x66\x94\xb9\x56\xd2\xea\xd2\xdc\x03\x9b\xf3\x8f\x1e\x46\x71\xf3\xa3\xb9\xfd\xf9\xca\x13\x85\xbd\x88\x3e\xe5\x2c\xd1\x59\x26\x12\x9f\xeb\x0f\x4b\x1c\x7e\xb6\xc5\x11\x43\x19\x08\x66\x7a\xf5\x17\x70\xc5\x90\xd3\xe5\x10\xb7\xdd\xe1\xab\x93\xa3\xe3\x17\x27\xd3\x3c\xfd\xdd\x52\x5f\x4f\xac\x9e\x54\x46\x4c\xa4\xed\xa7\x6f\xdd\x23\x92\xc6\x00\x9e\x6e\xbb\x1c\xca\xc9\x6d\x97\x6e\xc9\x6a\x38\xe7\xd7\xa6\x06\x5c\xf7\x71\xe7\x52\x6b\xbb\x09\xb9\x3e\xaf\xb2\x0c\xd7\xd6\x96\x42\x8c\x63\xff\xf6\x1d\x01\xe9\xeb\xeb\x61\xe9\xc2\xb5\x9b\xb7\x41\xa2\x8f\xab\x19\x3f\x94\x03\xd2\x5f\x57\xe8\xaa\x69\xb3\x8d\x75\xa8\xc7\x6b\xae\xc4\x45\xe3\x73\x0c\x88\xd8\xa5\x5b\x97\x2b\xb1\x66\x00\x9a\x30\xd7\x25\x34\x30\x69\xee\x4f\x61\x13\x20\xde\x61\x65\x44\x39\x25\x85\xe3\x81\x10\xbe\x8f\x2a\x02\x2f\xf2\x4a\xcc\x87\x24\xfb\x2b\x31\xdf\x46\x75\xfa\x18\x50\x5e\x43\x7a\x9c\xd3\x57\x2a\xbb\xc4\xdc\x58\x44\x97\x46\xda\x6e\x5d\x06\x42\xbd\x78\x20\x74\xef\x85\x57\x30\x04\xa6\x4e\x9f\xde\x88\x6c\x63\xf1\x62\xb7\x25\x2d\x92\xbd\x73\x18\x44\xaf\x9c\x15\x2b\xae\x0f\xaf\x75\x79\x25\xd5\x62\x72\x2d\xed\x72\x82\x94\x32\x87\x80\x75\x7f\xf8\x3b\xf8\x0f\x45\x91\x8f\xd2\x94\xf2\xdf\x2a\x23\xe6\x55\x86\x99\x69\x66\xca\x78\x21\x7f\x14\xa5\x81\x2c\xcb\x2b\xa9\xd2\x31\xab\x64\xfa\x6d\xd7\x15\x63\x43\x9c\x96\xee\x9d\xfc\xdb\xb4\xae\xa8\x99\xbf\x8e\xc5\x68\xe9\x79\x52\xc9\x53\x6d\xb0\xe3\x91\x23\x55\xe3\x08\xf0\x34\x97\xea\xa1\x9c\x80\xae\xd6\x81\x54\x69\x37\x4a\xb6\x02\x10\x30\x4e\xd3\x3c\xa0\xcf\x28\x8c\x1d\x72\x7e\xb8\xf7\x9e\x60\xc3\x77\xca\xfe\x69\xe6\xfe\x7c\x10\x63\xc9\xd7\xe6\xdf\xd9\x04\x9f\x32\x29\xd2\x9a\xae\xbb\x44\x9e\xbb\x5c\x9f\x2e\x91\x67\x58\x87\xfc\x27\x48\xcf\xf9\xa8\x3b\x8e\x3d\x60\x9d\xf9\xe3\xfa\xc1\xee\x91\xd4\xfd\x35\xe3\x8f\xa3\xa1\xd5\xd2\x07\xba\xf1\x19\x0f\x11\x07\x0a\x18\x72\x25\xef\x4f\x83\x1c\xf9\xba\xfd\x93\x47\x7b\x48\xb4\x52\xd4\x19\xe0\x65\x21\xd4\x85\xe5\xc9\x55\xcf\xa8\xee\x4e\xab\xfa\x8d\x69\x55\x1f\x29\x11\xc8\x6f\x51\x2c\xbc\xa3\xf4\xb7\x3a\xd9\x1b\x0f\xf9\x67\xc8\x80\xb1\xcd\xdd\x0b\x5e\xf4\xf7\xae\xfa\x91\x5a\x1a\x54\xf8\x98\x1c\xaa\x50\x1c\x54\xe8\x02\x70\xb6\xa8\x04\x15\xe8\xf8\xe9\x35\x9e\xbe\xe7\x9b\x44\xcc\x70\x39\x30\xd1\x80\x4d\x8e\x9a\xbb\x4f\x66\xd2\xd6\xbc\xd2\x08\x8b\x50\x50\x04\x0e\xac\x15\x4b\x08\xee\x01\xf4\x91\x08\xc4\x20\xd2\x55\x14\xd3\x89\xf5\x55\xa3\x01\x35\xea\xd1\xa3\x47\x8f\x10\x09\xe7\x7f\xfe\xcf\xff\xc9\x74\x09\x5d\x38\x13\x99\x6f\xde\x08\x77\xfd\xe9\xf1\xe3\x29\xfb\xe7\xd1\x8b\xe7\x50\xd1\x50\x58\x83\xbd\xd9\x70\x64\x77\x43\xe3\xc7\x66\xcc\xfe\xef\x8b\x97\x67\x35\x46\x43\xf3\x5b\x30\xcd\xc3\xeb\x35\x3b\x62\x3c\xfa\xf3\x1f\xff\x38\x65\xc7\xb2\x84\x8a\x2e\x29\x42\xb7\xf5\xe0\x6a\xe1\xa5\x40\xe4\x1e\xc0\x50\xf1\x1a\x97\x0c\x8d\x0d\xa9\x3e\x39\x97\x8b\xa5\xa5\x8a\x58\xb7\x21\x33\x99\x58\x2c\x1e\x43\xb6\xe6\x9b\xb9\x63\x33\x0d\x6a\x4f\x43\xda\x1f\x4c\x6e\xcc\x32\x79\x25\xd8\xdc\x7c\x57\xea\xaa\xa8\x01\x0e\xa9\x05\x31\x15\xca\xe0\x60\xf5\x5a\x19\x61\x3f\xf3\xb4\xd5\x5e\xae\xe6\xc6\xde\x86\x91\x5a\x0a\x2b\x95\xb7\xd6\x28\x7f\x05\x97\xa1\x18\x06\x32\x00\x1b\xdd\x2f\x83\xaf\x27\x65\x4f\x03\x57\xf1\x98\x23\x45\xa9\xff\x1b\xb7\x00\xd4\x22\x47\xec\x19\x6a\x85\x61\x25\xa9\x52\x38\x8a\x6e\xf9\x7a\x6a\x6a\xb7\xee\x3f\xa6\x1e\x2e\x9b\x8d\xb0\x32\x69\xdc\x23\x00\xec\xe7\x96\x27\xd7\x5d\x7c\xdd\x2e\x35\xb8\x5f\x2a\xb5\xf1\x6b\x02\x56\x21\x76\x49\xed\x2f\x09\x8b\xb8\x1e\x03\xe1\x01\x08\x07\x87\xee\xf5\x54\x0a\x84\x68\xe4\x5b\x1b\x61\x2b\x22\x0d\x64\xd1\xbb\x67\x43\x6b\x46\x78\xc3\x9c\x97\x57\xce\x70\x25\xee\x32\x65\xe7\x6e\x92\x01\x4a\x07\x61\x7e\x57\x18\xd8\xcc\xf9\x1a\x1e\x4b\x8a\x1b\x3c\x64\x7f\x3a\xdd\xc7\xe3\xa7\x4b\x66\x2c\x2f\xe9\x2c\xb9\xcf\xbf\x0c\x7c\xf1\x17\xbc\x30\x88\x77\xeb\x34\x55\xc0\x82\xd6\x50\xbb\x6e\x97\x9e\x05\x71\xa2\xf5\x0e\x13\x9c\x4d\x80\x30\x9d\x07\x78\xe0\x78\xe0\xb4\xfa\x74\xca\x1f\x04\x58\x75\xde\x43\xe1\xc0\xab\x1d\x53\x4d\x5b\x91\x8d\x0f\xd2\x37\xa8\x1f\x52\x26\x3e\x2b\x05\x63\x7b\xff\x53\x62\x9c\xb1\x02\x16\x37\xc6\xfc\x7c\xf5\x08\xbc\x86\xd0\x26\xf0\xea\xaf\x53\xe0\xd5\x27\x88\x8c\x57\x63\x0f\xfb\x48\x32\x12\x93\x04\x18\xca\xa8\x79\xbd\x04\xd0\xa5\xae\x88\x8e\x35\xb6\x74\xf5\xad\x89\x15\xe3\x33\xa3\xb3\xca\xe2\x4f\xeb\x2f\x63\xe9\x07\x83\x7a\xb4\x6c\x10\x79\xe1\xb6\x48\x16\x82\x16\x80\xe2\xa3\x8f\x58\xc4\xab\x37\xdb\xe8\xe3\x84\xf8\x0d\x39\x20\x7a\xd3\x39\x18\x6c\x43\xd0\xda\x0f\x16\x2a\xee\xae\x97\x82\x52\x20\x22\xbd\xcf\x71\x53\xc7\x23\x40\xa9\xf4\x2a\x1c\x02\xe7\xa4\xf7\xe2\x66\x4c\x8c\xec\xef\x4b\x30\x92\x1d\x3c\x0d\xe5\xf1\x3e\xed\xee\x54\x59\x51\xce\x79\x22\x46\xb1\x8f\x41\x14\x4b\x91\x8b\xd2\x11\x8a\xee\xf3\x35\xda\x4b\xae\x52\x82\x9d\x4a\x44\x09\x27\x58\xbc\xb5\xa2\x74\x44\x7d\x7a\x71\xca\xd2\x52\xae\x44\x69\xd8\xc1\x3f\x00\x4e\x10\xe1\xa6\x46\x9f\x61\x1a\x2c\xbe\xc8\x7d\x78\x40\xe0\xc1\xc3\x94\x7e\xc0\x50\x9e\x87\xab\x88\xcf\xd4\x4b\xe5\xb1\xb1\xdc\xb2\x9a\xd8\x77\x34\x75\x07\x02\x44\x28\x70\x5f\xe8\xe5\x8c\xb1\x4d\x8f\xe3\x0e\x2d\xa7\x12\x8b\x03\x73\xc3\x4a\xb1\x70\xd6\x58\x19\x81\xf6\x21\x4c\xca\xbd\x15\x37\x0c\x5f\x50\x52\x07\xab\x6e\xab\xfd\x98\x93\x5d\xa9\x57\x32\xf5\xea\x10\x62\xd3\x07\x68\xb8\x82\x9b\x08\xbc\x80\x1b\xa3\x13\x09\xae\xa6\x68\x69\xd0\x4a\x05\xa5\xa9\xd9\x04\xcc\x87\x9b\xe3\x30\x99\x86\x56\x3a\x9d\x3a\x90\xb2\x41\x04\xa2\x4e\xc5\x79\x35\xcb\xa4\x59\x5e\x0c\x1a\x12\xd9\x36\x30\x26\x25\x6e\x64\xaa\xdc\x18\x19\x31\x42\x19\x49\x0d\xe3\x51\xdd\x92\x4e\xdb\xd6\xb0\x0c\xfe\xd7\xf1\xa1\xd0\x50\x0d\x0f\x6d\xe8\xfd\x57\x67\xf5\x3c\x08\xac\x04\xfb\x1f\xa7\xe2\xb5\x2a\x1a\x9f\x27\x3c\xcb\x0c\xe9\xb7\xa1\xbb\x87\x97\x3d\xa8\xa1\x7a\x00\x13\xdc\x15\xd2\x6d\x18\x3f\x7b\x48\xc1\x41\xe6\x15\x5a\xd1\x6c\x7d\x31\x13\xc1\x0d\x6b\xe5\x6f\x82\x36\xce\xfe\x07\x81\x42\x58\x89\x83\x9b\xee\x1e\x9b\x80\xec\xc2\x3f\x9f\x5f\xf8\xe7\xe3\xd4\x54\xd4\xcd\x35\x39\x7c\x38\x81\x0a\x2d\x0c\x6d\x54\xd4\x30\xd6\x0b\x1a\x2f\x90\xde\x93\xa6\x79\x6f\x21\x60\x9c\xdf\x91\xa5\x5e\x14\xc3\x78\x77\xdb\x83\x82\x2a\xe6\x4c\x71\xe0\x50\x13\xa2\x5f\x12\x1d\x29\xb2\x91\xc3\x39\xdf\xe4\x6b\xb5\x4c\x07\x71\x8e\x1f\xee\x1b\x96\xea\xa4\x72\xc6\x57\x4d\xf6\x3a\xe1\xa2\x5f\x9f\xbe\x2f\xab\x71\x50\xaa\xaf\xd5\x35\x2f\xd3\xa3\xf3\x4e\xb5\xb9\x4d\xe5\xac\x1e\x2b\x56\xbd\xfd\xc7\xcc\x7d\xce\x67\x00\x78\x4b\xd8\x86\xbb\x68\xdf\xd6\x21\x62\x6e\xbe\xcd\xdd\x66\xb5\x63\xb2\x1f\x18\xcd\xbb\xab\xc3\x6e\x17\x20\xdc\x05\x08\x1b\xd7\x43\x0a\x10\x9e\x62\x80\x30\xee\x71\xdb\x60\x2f\xe4\xa1\x75\x14\xff\x22\x62\x4c\xc7\x35\x4b\x45\x4d\xbc\x5d\xcf\xdb\x52\xfe\xf1\xf0\xd6\xbb\x2e\x32\x18\x3c\xcf\x05\xbd\xec\x4b\x88\x47\x3d\x80\x78\x12\xd0\xb2\x87\x55\x88\x57\x93\xe1\xd7\xf5\x6a\x88\x52\x8b\x81\xe9\x28\xc2\x5d\xe8\x94\x7a\x1b\x40\xd3\x0d\x6c\x20\x30\x0e\x4d\xf1\x94\x2f\x37\x05\xed\xbc\xe0\x89\x00\xfe\x16\xd4\x9f\x41\x82\x04\x3d\x37\x00\x1b\x68\x13\x30\xd8\x08\x40\x9d\xf3\x3e\xbb\x81\x0d\xb6\x23\xdc\x55\x5b\x3c\x7d\x47\x6a\x23\x8a\xe2\xa8\x7e\x23\x98\x64\x29\x72\x0e\xff\x7c\xe6\x49\xe0\x78\xa3\x33\x1e\xac\x40\x08\x38\x51\xe6\x86\xe9\xf9\xb8\x91\xe9\xba\xb7\x7a\xbc\xd7\x2f\xd8\xc0\x86\x8b\x53\x32\x7f\x8e\xce\x7b\x07\x7b\x58\x9b\x60\xe7\x8d\xd8\x8e\x3b\x43\x75\xfb\x47\x8f\x7b\x1f\x32\x28\x40\x7e\x20\x85\x1f\x0c\x71\x86\x0e\xe2\x76\x0d\xde\x8e\x43\xd4\xe0\x33\x50\xfe\x76\xc1\xdb\x2f\x31\x78\x1b\x09\x46\xcf\xe8\xb6\x04\x72\xe3\x90\x80\x8f\xe6\xce\x84\x37\x6a\xc8\x86\xf1\xa1\x5c\x1f\xc7\xd5\x65\x33\x75\x69\x7f\x3a\xdd\xdf\xf7\xd1\x5d\xda\xf7\x95\x9d\x4f\xfe\xc2\x84\x4a\x74\xea\x7b\xd7\xce\x65\x69\x2c\xa8\x7b\xb5\xbb\x2d\x9e\x4b\xee\x9f\x15\xa7\x3f\xc1\xd8\x43\x2c\x75\x6f\xde\xe2\x21\x09\x9f\x7d\x04\x25\xa6\x56\x5d\x02\xf0\x21\x91\x28\xe0\x59\x93\x0e\xe3\xbf\x37\x2c\x93\xb9\xa4\xce\xef\xee\xa0\x0b\x63\x0d\x3b\xc0\x0f\xa7\x49\x51\x8d\xe9\x86\x69\x2e\x72\x5d\xae\xc7\xe1\x26\xf7\x65\xe3\x57\x74\xc7\x08\xfb\x9d\x54\x65\x29\x94\xcd\xd6\x5f\xb2\x06\xe4\x89\xf8\x40\x14\xa0\xb0\xc6\x7d\x10\x47\xea\xab\xb9\xb5\xea\x88\x2f\xb8\xcd\xa3\xfe\x02\x01\x8d\xd6\x8c\xeb\xb8\xb8\xfb\x54\xa8\x15\x5b\xf1\xf2\x8e\xc8\xf1\xdb\xae\x01\x75\x9e\x54\xae\xa4\xd1\x9d\xc3\xa2\xd1\x40\x31\x79\x2e\x82\x13\xda\x1d\x36\x5d\xd9\xa2\xb2\xc4\xd1\xfd\x09\xf4\x28\xe3\xe1\xe4\xb5\x94\xc3\xc7\x5d\xba\x28\x35\xaf\x82\x5b\x2b\x4a\xf5\x84\xfd\xd7\xc1\x9b\xaf\xde\x4d\x46\xdf\x1e\x1c\xfc\xfc\x68\xf2\xd7\x5f\xbe\x3a\x78\x33\x85\x7f\xfc\x61\xf4\xed\xe8\x9d\xff\xe3\xab\xd1\xe8\xe0\xe0\xe7\x1f\x5e\x7c\x77\x79\x7e\xf2\x8b\x1c\xbd\xfb\x59\x55\xf9\x15\xfe\xf5\xee\xe0\x67\x71\xf2\xcb\x07\x0e\x32\x1a\x7d\xfb\xfb\xde\x53\xe7\x6a\xfd\xb2\x27\x2b\xc4\x6b\x32\xa0\x48\x6e\x8e\x38\xc8\xf6\x6b\xb5\x95\x90\xca\x4e\x74\x39\xc1\xa1\x9f\x00\x58\x70\xcf\x07\xf8\xed\x35\xf4\xf9\xaf\xd5\x80\x1a\x6e\xdf\x2b\xf5\xf7\x7c\xc0\x21\xf4\x79\x2c\x07\x28\x33\xf6\x23\x35\xcb\x64\xac\xc8\x0b\x5d\xf2\x72\xcd\x52\xf2\x66\xae\xb7\x20\x10\x45\x10\x44\xbd\x21\x85\x61\x1e\xa9\x2c\xef\xa1\xd2\xb8\x37\xa2\x90\x48\x65\x95\x0f\x84\x27\x04\x63\xc5\x8b\x71\x0d\xc8\xfb\x84\xda\xef\x53\x8a\xe8\x36\x0a\x68\xcc\x78\x72\x85\x16\x54\x58\x2d\xd4\x1b\xa3\xd2\xfa\xbd\x3d\x4a\x89\xc0\xe6\xfe\xe4\xd8\x87\xdc\x16\x9d\x0a\xb7\x94\xfe\x66\x1c\xbb\xe1\x84\xc7\x48\x3b\x25\x10\xd6\x1d\xa9\x74\xc9\x5e\x80\x02\x74\xaf\xab\xcf\x06\xc1\x0a\x91\xff\x11\xcf\x9d\xd6\x37\x50\x25\xaa\x1f\xce\x27\x10\x59\x0d\xf6\x26\xe1\x7a\xcd\xa1\xc9\x56\x9d\x21\xd6\xd0\x2c\x60\x21\x4f\xfc\xb1\xf4\xf1\x5b\xb7\x9c\x6e\x54\xd4\x4d\xc1\x31\x9d\x19\xcc\x5b\x91\x09\xf4\x81\x02\xdb\x14\x96\x23\x2c\xe1\x65\xd4\xa8\xbf\x32\xee\x49\x5a\x35\xef\xa9\x1f\x84\x6d\xb2\x66\xb8\x27\x7c\x77\xed\xa6\x45\xed\xbe\xb9\x08\x6f\x56\xfb\x33\xa0\x64\xd9\x9b\x9f\xa6\x02\x23\x85\x9e\x42\xaa\xb6\x9e\x43\x66\x45\xd4\xaf\xc7\xb7\xa4\xd9\xd8\xa8\x4a\x66\xcd\x9d\xea\x3b\x4f\x84\x17\xaf\x14\x25\x14\x6e\x6c\xbb\xed\xbb\xae\x32\xa2\x9c\x2c\x2a\x99\x0e\xb7\xdf\x3e\x3b\xb5\xa3\xa7\xb2\x31\x94\x8a\x31\x88\x62\x31\xb8\x3a\x11\x52\x36\xfb\x37\x7a\xad\xb3\x3f\x1b\xf2\x34\x6e\x8e\xd1\xcc\x04\xe5\xa1\x1f\x9a\x67\x06\x3e\xdd\xe0\x32\xb8\x92\x48\xce\x26\xeb\x84\xa0\x9d\x64\xa3\x75\x0f\x0e\x8b\x67\x02\x8a\xaa\x26\xa1\x6d\x75\xed\x90\x60\x33\x31\xc7\x8c\x27\xfc\x0d\x78\x0a\xa8\x14\x2c\x15\x99\xb0\x22\xea\x37\x5f\x60\x87\xec\x52\xe4\x7a\x45\xfd\x59\x5f\x1b\x8a\x97\xcb\xf9\x13\xc6\x47\x8d\x82\x63\x43\x0d\x90\x85\x48\xb1\x3e\x2c\x6a\x2a\x58\x56\xca\x8c\xd9\x6c\xe4\xf3\x59\xa9\xfd\x65\x09\x4e\x35\xea\xee\x05\x7e\xac\x52\x38\x02\x00\x48\x55\xa9\x73\x66\x14\x2f\xcc\x52\x5b\x70\x99\xf0\x82\x27\xd2\xae\x99\x2d\x79\x72\xe5\x6e\x81\x38\x2a\x3c\x6e\xcc\x92\x11\xa5\xb7\xc7\xe4\x6b\x96\xac\xd9\x65\xa9\xab\xc5\x12\x6a\xa8\xf0\xae\x24\xe3\xc6\xbf\xfd\xd6\xdf\x93\x0d\x6f\x58\xba\x56\x3c\x97\x49\xe8\x1d\x52\xea\x95\x34\x52\x53\xa4\xcb\x8f\x7b\x1e\xba\x30\x60\xf4\xec\x69\xc6\x65\xce\x0e\x8c\x10\xec\xc4\x6f\x09\xfc\xe6\x02\x35\x49\xf4\x24\x96\xcd\xa4\x3a\x02\x7c\x24\xe0\x01\xf7\x49\xcd\x7a\x43\xaa\x02\x2a\x03\x6e\xe6\x5b\x1f\x3a\x0a\xcb\xb5\x7d\x4e\xba\x84\x84\x37\xdf\x02\x48\xa8\x54\x47\x19\x31\x47\xe7\xa7\x26\xb6\x6f\xa9\x8d\x22\x8e\x04\x5f\x64\x5a\x2d\x62\xe0\xbb\x7a\x67\x3a\x26\xaf\xa0\x1f\xe6\x4a\xa6\x15\xcf\x90\xbd\xd3\x64\x9e\x5e\x9c\xe2\xcf\xe5\x62\x69\x27\xd7\x02\xbc\x9f\x28\x05\xeb\x33\xe3\x1f\x2a\x37\x32\x6d\xa5\x01\x71\x60\xc9\xcb\x86\x9e\x64\xe8\x39\xc9\xd7\x00\xbc\x4b\xc9\x9d\x8d\x64\x1c\x0f\x53\x8f\x43\x6c\xa3\x38\x4c\xef\x28\x34\x48\x74\x2a\x11\xb8\x87\x1d\x89\x61\xa7\x6e\xce\x0d\xba\x3d\xd6\x3d\x37\xc2\xc7\xb6\xee\xfc\x08\x0a\x71\xf7\x0e\xc1\xf7\xa6\xc8\xae\xea\x6d\x72\x29\xf2\x22\xe3\x76\x98\xd4\x92\xbd\x9f\x22\xf7\x77\x14\x3c\x76\xc7\x91\xab\x74\xc2\x33\xb7\x23\xcf\x7f\x7c\x4a\x95\x6d\x78\xc0\x1a\xe9\x6b\x97\x75\x8f\x52\xdf\x9e\xda\x69\x49\x5b\x8f\x16\x60\xa9\xcd\x44\x0a\xcc\x88\x9e\x0c\x3e\x8a\x6b\x85\x3d\x82\xdd\x1f\xe7\x3f\x3e\x1d\x33\x39\x15\x53\xff\x57\xb8\xd5\x73\x43\xab\x17\x58\xe0\x10\x2a\x68\x60\x3f\xc3\x54\x62\xe7\x6f\xfc\xdb\x7f\xfd\xcd\x4d\xd2\x7d\xfb\xf7\xc9\xdf\xa2\x5e\x46\x7f\xff\x97\x63\xae\xa5\xbb\xa1\xf9\x69\x9c\x5f\x0e\x7c\xcf\xfd\xf5\xaf\x73\x9d\x5e\x14\x22\x99\xe2\x6b\x99\x7f\x61\x96\x00\x13\xca\x3a\x5d\xfb\x5c\x43\x66\x99\x4c\x71\x97\xc3\xb3\x4b\xf1\xdf\x3e\x40\x40\xed\x52\x89\x91\x24\xdc\x0a\x05\x02\xc0\x17\x1a\x2b\x6d\xf1\xe7\xd8\x68\x15\xe6\x7f\x30\x8f\x5b\x9f\x5a\xad\xe1\x98\x23\x2b\x39\x52\x4c\xbc\x95\x06\x70\x67\xf0\x5d\x81\x1c\x9c\x92\xd7\xbd\x4c\x73\xc3\x3a\x0a\x07\x98\x21\xe8\xbd\xea\xe6\xf6\x07\xa5\xed\x1f\xc2\xf2\xfb\xc4\x44\x6c\x64\xce\xf8\x4a\xcb\x94\x55\xd0\x37\xcb\x9d\x40\x05\x9e\xed\xba\x75\xe1\x6c\xcd\x72\x69\x2c\xbf\x12\x53\x76\xe1\x64\x56\x9c\x61\x80\xd4\x53\x0c\xba\xd0\x88\x94\x55\xca\xca\x0c\xbe\xad\xc7\x71\x53\x8e\x65\xd9\xe9\x9c\x99\x2a\x81\xe6\xbc\xa5\x98\x78\xe9\x48\x77\x6d\xf0\x98\xfa\x5d\xc6\x61\xb1\x97\x1c\xed\xa7\x22\x85\x9f\x62\xab\x5f\x45\xdb\x6b\x23\xaf\xda\xcd\x53\xab\xa4\x96\x88\x40\x4c\x68\xaf\xed\x84\x60\xe6\x13\x80\xd0\x94\xa3\x80\x81\x12\x89\x30\x86\x97\x6b\xec\x86\x2a\x43\xd3\x46\x4a\x79\x05\x49\x9d\x73\x55\xc1\x00\xa5\xc0\xde\xba\x55\x02\xd4\xe1\x6c\x56\xea\x2b\xa1\x42\x09\x81\x5b\xc5\x66\x42\x75\x9d\x35\x8a\x6d\xa7\x59\xb2\xe4\x6a\x21\xea\x2a\xf2\x9c\xa7\x40\xfb\x1f\x82\xa6\xe5\xdf\xc7\x51\x80\xcf\x9d\xc2\x22\x2d\x90\x62\xe6\xe4\x53\x08\x7b\xbc\x51\x01\x07\x77\x5c\xc7\x25\xdc\x2b\xc9\xac\x13\x4f\x64\xc3\x38\xc2\xfb\xbb\xc0\x27\xa0\x50\xdc\x63\xf2\x76\x2e\x2c\x4f\xb9\xe5\x83\x25\x70\xbf\xe0\xa1\xeb\x27\x25\x75\xc0\x76\x88\x92\x3d\x48\xc6\x7a\x55\x52\x17\x32\xc6\x15\x00\x6e\xb0\xf4\xab\x0f\xb8\x54\xd6\xed\x6b\x0a\x3a\x62\x5e\x36\xe8\x6a\x3c\xcb\xf4\x35\x21\xd5\xf9\xd1\x90\x65\x89\x94\xa5\x15\xa8\x7d\x35\x4b\xeb\x13\x14\x1f\x24\x66\xe2\x16\x7a\x30\x2a\x5f\xd6\xb1\xff\xa4\x99\x9b\xbd\x55\x41\x43\x59\x27\x94\x95\xd8\x43\xdf\x03\x41\x10\xf1\x2b\x85\x47\xb5\xb5\x0c\xb0\x4e\x0b\x61\x4d\x9d\x55\x89\xd2\xc4\xb1\x48\x92\xe5\xe4\x44\x00\x51\x43\x4b\x43\x76\xf8\x76\x4d\x11\x17\xce\x68\x92\x16\x4e\x7e\xdd\xfb\xca\x0c\x17\x3c\xc2\xf6\xb7\x2f\x74\xda\x3f\x0a\xd5\xea\xe3\x5a\x0f\x5c\x57\x9b\x60\xe5\x91\x01\x27\x0f\xde\x00\x31\x79\xd3\x80\xc9\x40\x11\xb0\xe4\xab\xee\xee\xd4\x5a\x33\x9d\x84\x66\x6d\xf0\xb8\x09\x3c\x6e\xf2\xb8\xaf\xe3\xba\x7f\xd6\xa2\xbf\x7a\x66\x2f\x36\x27\x34\x40\xa4\xc2\xb1\xd6\x8b\x41\x02\x09\x2d\x14\xa5\x30\x2e\xc9\x5f\xca\xcc\x08\xd9\x30\x54\x4f\x2b\xa4\xe3\x9a\x4f\xd8\x1f\x1a\x1a\x17\x69\xb6\xc1\x1a\xc6\x2a\xa6\x03\x6f\x1e\x4f\x69\xe1\x3d\x9c\x57\xf3\xf6\x51\x6b\x30\x50\xf5\xb6\x5b\x8d\xbe\x5a\x2a\xa8\xdf\x4e\x55\x86\x3e\xfc\xa1\x46\xd5\x6d\xe6\x52\x67\x99\xef\xdd\x8e\x16\x72\x2b\xb7\x09\xfa\x06\x61\xb4\x64\x1c\xdc\x10\x41\xdf\x57\xe2\x3a\x28\x76\xdc\x20\x5c\xa9\x8f\xd5\x83\xab\xc4\x27\x9c\x6d\x1b\x6f\x0a\xcd\xef\xe1\xfb\x23\xb5\xc6\xc9\x1f\x47\xc4\x45\x07\x03\x5b\xb8\x47\x39\x1b\x40\xf1\x59\xe6\xb4\x90\x68\x01\xc2\x73\x5a\x22\xcd\xea\xe8\xae\x57\x62\x4e\x9e\x81\xf8\xa3\x0f\xfb\x2d\xca\xc3\xc6\x0f\xa7\x75\x7a\x24\xa9\xc9\x11\x44\x26\x51\xbd\x71\x4b\x33\x9d\xa8\x35\x5a\x03\xa9\x67\xdb\x0c\x7a\xe6\x1c\x0c\x98\x75\x30\x5c\xde\x01\x80\xc2\x48\xd5\x3d\x99\xb8\x1e\xa6\x43\xab\xf0\xf6\x35\x5c\xfa\x02\x64\x70\x42\xfa\xd6\x10\x71\xe0\x06\xdb\x39\x3a\x3f\x85\x81\xbd\x85\xb9\x80\x3f\xbc\xe6\x11\x02\x9a\x33\xe1\xf8\x42\x0d\x65\x05\x3b\x32\xfe\xed\x96\xfc\xb6\xfa\x70\xfe\x00\x7d\x9b\x28\x4e\xe4\xeb\x96\x9d\xe0\x3a\x3a\x3f\xc5\x27\x4e\xa1\x75\x2f\x57\x6b\xd2\x09\xed\x52\x96\xe9\xa4\xe0\xa5\x5d\xa3\x93\x65\xdc\x78\x5a\x28\xde\x1c\x80\x1c\x83\x86\xb0\xfb\xb4\x7a\x8b\xaf\xc6\x1a\x01\xf9\x7c\x80\x88\x22\x7c\x37\xae\xcc\x43\xa3\x48\xdf\x52\x52\x7f\x35\x28\x12\xb7\xfa\xf1\x3e\x96\xcf\x82\x22\x0d\x1e\xfd\xb1\xf4\x07\xc7\xfe\x4d\x33\xed\x06\xd5\x01\xd0\xf5\xc9\x2f\xa6\xe3\xfa\xb6\xa0\x5b\x82\x93\xc2\x8d\x34\x66\x72\xee\x04\xb1\x56\x13\xaa\xaa\x0f\x4e\x7c\xd2\x4f\x7d\x7e\x2a\x3a\x1c\xe0\xe8\x46\x4f\x89\x7f\x1a\x4e\x39\x3b\x50\x5a\xe1\xc9\xc7\x7b\x47\x98\x98\x7b\x83\x07\x1a\x6e\x09\xd2\x3c\xf6\x4b\x44\x9c\xc6\xab\x09\x52\xa5\x6e\xd9\x41\xec\x81\xc7\xc2\x54\x49\x22\x44\xf0\x71\xc5\x0d\xed\x6b\xce\x44\x53\xce\xb9\x4d\x96\xc2\x30\xa3\x01\x18\xd5\x58\x9e\x65\xb5\x6f\x89\x08\xa5\x41\xd3\xf1\x7e\xfe\x48\x01\x6a\x94\xa1\x93\x9b\xad\xc8\x38\xf9\x72\xe6\x95\x4a\x30\xf5\x4b\xda\x75\xdc\x12\xb5\xa1\xec\x81\x41\x6d\xd0\xe5\x24\xe7\xe8\x5d\x8e\x0c\xe3\x40\x4c\x60\xad\x6b\x64\xa6\x4b\xdf\x74\x1c\x6c\x35\x42\xff\x73\x7c\x74\xc6\x93\xab\x6b\x5e\xa6\x06\x2a\xec\xb9\x95\xd8\x84\x71\x8c\x5a\x47\xac\x44\xa8\xfd\xfd\x38\x42\x2b\x55\x5b\xbf\x89\x27\x72\x10\xcd\x7a\x43\xef\x19\x05\x7d\xc7\x88\xd0\x9e\xaf\x9e\x18\xe3\x95\xd5\x39\xb7\x32\x01\x57\x94\x9c\x47\xd1\x85\x3c\xb4\xb5\x08\xd1\x61\x94\x02\x20\x57\xe8\xc5\x69\x1f\x6c\xd7\x80\xb6\x4c\x3c\x9a\xab\x7f\xcd\xed\xf3\x8a\x44\x13\x3d\xe8\x12\x03\xd5\x10\x05\x2b\x85\x60\x32\x77\x0a\x2c\x87\xce\xd9\xf3\x50\xec\xef\x43\x2e\xb7\x11\xc5\x69\xe9\x3f\x41\x9c\x2b\xba\x0b\xfd\x69\x59\xa6\xaf\x0d\xb3\xd7\x3a\x18\xfd\x75\x34\x81\xaa\xda\xc7\x2d\x95\x8e\x7e\xe3\x8e\x9a\x23\x4b\x74\x8e\xc6\x6e\xef\x5c\x8b\x2c\x73\xff\xbd\xed\x34\x99\xe9\xb6\x19\xc9\x85\xc2\xba\x67\x69\xbc\x07\x86\x12\xd9\x0f\xd2\x52\x17\x05\xf9\x52\xf3\x51\x7b\x46\x10\xba\x2c\x57\xc2\x40\xd8\xde\xa7\xc6\x3b\x32\x2c\x84\x12\x25\xb7\x10\x08\x21\x34\x47\x60\x28\xed\x47\x34\x96\x71\xeb\xe4\x62\x72\x61\x20\xe8\x76\xf2\xd0\xb7\xe0\xb1\x70\x94\xf2\x1b\xc6\x4c\x11\x31\x67\xc4\x5e\x1b\x7c\xa1\x70\x66\x43\x1a\xff\x07\xd9\x0c\xe8\xf6\x25\xb3\x61\xca\x0e\x8e\xb2\x62\x19\x8d\x1a\x6b\xe9\xa1\x4c\xaa\x39\xd3\xc6\xf3\x9e\x96\xda\x98\x33\xff\x93\xbb\x3c\x7a\xa7\xc1\xdf\x36\xcc\x4e\x83\xdf\x69\xf0\x1d\xae\x9d\x06\xdf\xbe\x76\x1a\x7c\xfb\x0a\x0c\xfe\xa3\x90\x25\xa8\x37\x4d\x59\x72\x1b\x81\xd8\x99\xb6\x14\x62\x05\x15\x8f\xdf\xe8\x29\xe2\x20\x48\xae\xf9\x7a\xaa\x84\x25\x28\x1d\xef\x14\x7c\xe5\xc7\xfb\xae\x74\xca\x0e\xe9\xc6\xd1\x61\xf5\x27\xdf\x83\xf8\x44\x4f\xb1\x1a\xe5\x6f\x1d\xf1\x85\xcf\xf7\x0d\xc5\x3b\xdd\xf7\x50\x58\x17\x0f\x90\x88\x29\xbb\x10\xbe\x77\x49\xe3\xe1\x9b\x70\x29\xa9\xb0\x5c\x66\xa6\x16\xb8\x97\x37\x08\xf0\xee\x02\xf5\x21\xed\xb3\x50\x0c\x31\xac\x95\x58\x57\x37\x45\x89\x67\x71\x2a\x67\x7d\xc3\x4d\x21\x87\xd3\x39\x7b\x25\x12\xbd\x12\x25\xd2\xf6\xe4\x6d\xc1\x95\xb3\x84\x9e\x71\x99\x39\xca\x7a\x0a\xd7\xce\x55\xe8\xe3\xd5\x0c\xf1\x45\x1e\xed\xb0\xad\x69\x19\x73\x9a\x14\x21\xed\xb8\xfb\x29\x91\xa8\x28\xc5\x4a\xea\xca\xf8\x84\xd3\xca\xa2\x50\x32\x96\x6c\x8f\xa5\x5c\x84\x76\x9b\x21\x1d\xac\x14\x89\x2e\xd3\x7a\xfb\x1a\xcb\x6d\x65\x9a\x35\xec\x09\xc6\xd4\x86\x0b\xa7\x04\x3a\x3e\x20\x2d\x6d\x48\x7d\x06\x08\x36\xc0\x38\xed\x1c\x20\xb0\x56\x0c\x80\x69\x44\x1c\x30\xe6\x7e\x58\x1e\x24\x15\x2e\xa8\xdb\x44\x53\xff\x15\xfe\x78\x5c\xef\x9d\x3a\x39\x43\x9a\x3a\xad\xb8\xce\x74\x90\x60\x9f\x70\xc7\x50\x22\x43\x3c\xb0\x13\xd8\xbe\x5e\xad\x3f\x46\xcb\xff\x15\x3d\xeb\x28\x73\xd6\x08\xb2\xa7\x88\xa5\x6c\xc9\xa2\x90\x79\x5e\x59\x77\x0e\x3a\x27\x36\xc4\xd7\x70\x91\x35\x36\x5c\x74\x8d\xb5\xd7\xf1\x55\xbc\x22\x31\x46\x9e\x33\xfb\x21\x41\xc9\x2d\x9e\x4f\x60\x6a\xdc\xdd\x19\x08\xab\x79\x0d\x78\x6e\xf0\x1a\xce\xc6\xc1\x6b\x10\x13\x05\xaf\x21\x0f\x36\x5e\x43\x29\x7d\x78\x6d\xaa\x7e\xc0\xb6\xc1\xed\xd6\x50\x01\x1b\xbb\xa3\xd0\xe9\x74\xcb\xf1\x0e\x09\x75\x3a\xa5\x6c\xb9\xa6\x73\x10\x8b\xe7\x4f\xdd\xf0\x57\x3e\x33\x35\x88\x18\xbe\xe2\x32\x83\x3a\x08\xa9\x8c\x4c\x05\xf6\xfa\x21\xb6\x30\xd8\xfb\x0e\xaa\x6d\xb6\x32\xd9\x1d\x67\x9c\xe4\xbc\x98\x5c\x89\xf5\x40\xcb\x3d\xd8\x4e\xdc\x9c\x28\x52\x22\xe7\x45\xef\xd1\xb1\x44\x64\x70\x81\xb3\xff\x1c\x4b\x4f\xf0\xc3\x19\xe9\x3d\xbe\x1a\xa6\xae\xc4\x49\x74\x5e\x54\x56\x44\xfa\x11\x69\x32\x77\x56\x1a\x1a\x00\x8c\x87\x39\x57\x7c\x21\x26\x61\xd8\x49\x5d\xfc\xd2\xb9\x21\x78\x7c\x0d\xcc\x06\x87\x45\x0a\x8c\xaf\xcf\xae\x56\xa6\x79\x0d\x56\xa6\xcb\x3e\x4a\xa9\x2e\x1b\xbe\x5c\x97\x7d\xfc\x92\x5d\x16\x20\x14\x86\x3f\xf7\xaf\x3c\xa4\x43\xeb\xe4\x93\x1d\x74\xdb\xc9\x6f\x60\x07\x87\x71\xa4\x61\x3a\x97\xd6\x0a\x9f\x31\x1d\x4e\x32\x64\xb8\xc4\x25\xed\xc4\x73\x20\x34\x85\x69\xd1\xe2\x6d\x68\x9a\x1a\x59\xeb\xe0\x4a\xbb\x96\x06\xed\x6b\xc5\x64\x5e\x60\x0b\x07\xe0\x1d\x13\xaf\x06\x53\xe8\x67\xc7\x87\xfa\x8f\xbb\xe3\x43\xf1\xb5\xe3\x43\x0c\xda\xcf\x66\x50\x2d\x3d\xa8\x27\xc6\x0f\x4a\xd8\x91\x7c\x26\x32\xf6\xef\x4a\x94\x6b\xa6\x57\x22\xaa\xab\x82\xfe\xb2\x4e\x53\xc5\xca\x24\x8a\x73\xf7\x55\x55\x1f\xa8\x53\xe1\xff\x67\xef\xdb\xbf\x1b\xb7\xad\x84\x7f\xef\x5f\x81\xe3\xf6\x1c\xdb\xa9\x24\xcf\xa4\xdd\xb6\x3b\x5f\xb7\x3d\xce\x78\x26\xeb\xcd\x3c\xfc\xd9\x93\xe4\xec\x97\xc9\x6e\x20\x12\x92\x50\x93\x00\x43\x80\xf6\xa8\x8f\xff\xfd\x3b\xb8\x17\x00\x41\x8a\x92\x48\x89\x7e\x4d\xc8\x1f\x92\x31\x45\x82\xc0\xc5\xc5\x7d\x3f\x40\x21\x78\xf5\x29\xcb\x19\x96\xfc\xea\x9d\xea\xd7\x3f\x50\xad\xdc\x89\xbb\xe0\x77\x26\x34\x47\x61\x50\x74\xc5\x40\x45\x73\x46\x4e\xdf\x9d\xf5\x69\x37\x7c\xec\x5a\xfd\xe9\x06\x10\x21\x28\xfd\x2f\xc0\xd8\x7c\x5c\xb3\x77\x0d\x93\x6b\xb6\x1c\xd9\xf4\x01\xdb\x5c\xdc\x3d\x8c\x99\x38\xd5\x0e\x87\xfb\x55\xc6\xae\x5e\x4f\xc0\x20\xb0\x5f\x47\xbb\xea\x58\x0e\xb8\x8f\xd4\xc0\xb0\x77\xe7\xbb\xf0\x5a\xd7\x05\x0f\xb1\x15\x9a\x66\xb9\xf2\x00\x1e\x41\xa1\x24\x02\x50\xd8\x47\xab\xf7\x13\x68\xce\x84\xdb\x78\x47\xc0\xf2\x47\xb0\x92\x87\x7e\xcd\x96\x87\xca\x16\x8f\x93\x42\x2d\x78\xe6\xda\xa2\x03\x9d\xb4\xa7\x92\x7c\x07\x09\x1f\x6e\x08\xa4\x88\xe7\x62\x44\xde\x49\x6d\xfe\xf7\x0a\x32\xd8\xe0\x1c\x9f\x49\xa6\xde\x49\x0d\x77\x1e\x35\xb8\x71\x69\x77\x04\x6c\x1b\x54\x63\x8d\xce\x90\xab\x09\xc5\x5a\x5c\x5e\x13\x00\xd5\x86\x7a\xfb\x8d\xe1\x8a\x9c\x0b\x22\x73\x07\x55\xed\x3a\xbd\x2a\x3b\x84\x73\xcb\x07\xa1\x52\x0d\x63\xd8\xcd\x90\x79\x65\x2f\x36\x0c\xe7\x83\xa1\xb8\xfb\x05\x3c\x81\x10\xd8\xe6\x93\xb1\xa0\xdb\x28\xd5\x6c\xce\x23\x92\xb2\x7c\x0e\x85\x06\xa3\x45\xdf\x5b\xdc\x17\x5f\xc4\xab\x47\xee\x88\x57\xaf\x78\x08\x22\xca\x1b\x48\xb3\xbb\x1b\xf1\x07\xc7\x46\x76\x9d\xd2\xcc\xa0\xe0\x3f\x0c\x57\x06\x2c\xf8\x17\x74\x33\x56\x13\x72\x4a\x14\x17\xf3\x84\x55\x7e\xb3\x0e\xb4\x70\x18\x33\x82\xd1\x5f\x7f\x2e\xf8\x0d\x4d\x18\xa6\xc5\x52\xe1\x7b\x0d\xca\xd9\x8a\xd0\x35\xb2\x2d\x8d\x0d\x5d\xf6\x56\xdb\x83\x6b\xb6\x3c\x18\xad\xa0\xed\xc1\xb9\x38\x28\x6b\x96\x56\x10\xd5\x0b\x17\x10\x21\x76\x00\xbf\x1d\xdc\x8f\x9c\xf6\x04\xd4\xd8\xde\x70\xd2\xfa\x38\x5f\x26\x14\xbd\xea\xfd\xfa\xa3\xeb\xa3\x37\x75\x52\xbb\x0a\x9e\x29\x63\x11\x6c\xca\x75\xef\x8e\x5b\x28\xf9\xd1\x57\x02\x5c\x0f\xf0\xc7\x79\xed\xd3\xbf\xc3\x5d\x0d\xbd\x6f\xa0\xea\xb0\x2b\x09\x53\x29\x21\x56\xc6\x7b\xaf\x81\xf8\x77\xe0\x82\x97\x33\xf2\xba\xec\x90\x06\xce\x4e\x23\x56\xd9\x22\x31\x42\x6a\xc2\x45\x94\x14\xd6\xfb\x0e\xaf\xa2\xcb\xf6\x71\x81\xb7\x77\xc4\x2e\x87\x75\x18\xed\x22\xd4\x57\x32\xff\xeb\xf1\xba\x10\xbe\xed\x23\x54\x11\xda\x0f\x09\xad\xd9\x4e\x39\xce\xd5\xce\x7e\x51\x55\xbe\x7c\xcd\xa7\x39\x23\x2f\x17\x54\x08\x96\x04\x65\x13\xad\x31\x94\x6a\x4d\xa3\x05\x06\x89\x50\x62\xce\x71\xc2\xf4\xa1\x22\x0b\x09\x4e\xc3\x68\xc1\x85\x2f\x24\x26\x7c\xf9\xd0\xb2\x90\xc2\x03\xf4\xc2\xdc\x57\x41\xea\xb1\x8d\xe2\xa1\xed\xa3\x68\xf1\x2e\x6c\x60\x58\x6d\xaf\x58\x76\xe4\xa9\x3f\x53\xb6\xa6\xb2\x67\x1e\x20\x8f\x7c\x19\x7a\xfd\xc1\xb3\x9b\x1b\x34\xa6\xde\xa0\xcd\xc5\x8c\xe5\x39\xee\xd0\x94\xd9\x17\x08\x9f\x91\x42\x04\xa1\xdf\xd8\xb5\x6d\x21\x6f\x49\x2c\xc9\x2d\x83\x58\x1f\x23\x40\x40\xf0\xb8\x72\xa2\x47\x30\x53\xc8\x33\x89\x64\x9a\xe5\x32\xe5\x3e\xf8\xda\xa2\xc7\x83\x55\x08\x4c\x8a\x9d\x9b\x2c\x54\x77\x31\x29\x44\xb5\xbb\xf9\xeb\x97\x44\xd3\x7c\xce\xb4\xf9\x06\x11\x45\x3a\x65\x7b\x16\x42\x7c\xe8\x36\x3c\xbd\xb6\xbd\x3b\xf4\x7d\xef\x2a\x50\xdb\xd2\xd0\x8e\x5c\xba\xb7\x20\x92\x00\x72\x58\x66\x32\x8f\x5c\x50\xa2\x6b\xa5\x87\x7d\x97\x0c\x16\x7e\x67\x19\x67\x21\xb4\xda\xb3\x0d\xd2\x3e\x0d\xf1\x10\x15\xbe\xff\xfe\x5d\x3f\x7d\x8c\x0e\xcb\xf1\xd6\x61\xdd\xad\xcc\x93\xf8\x96\xc7\x2e\x24\xeb\xc8\x3c\x7c\xbc\x1f\x04\x1e\xb0\xad\xd1\xde\x27\xfd\xf6\x96\xc7\x3d\x01\x1f\x86\xaa\x02\xdd\x25\xe4\x19\xa0\x13\x80\x3a\x8f\x99\xd0\x86\x58\xe6\x8a\x1c\xc1\x1b\xc7\xe4\x15\xc7\xd2\x53\xf0\x3e\x74\x0d\x48\xa7\x5c\x94\x65\xcd\xca\x4d\x35\xec\xd2\xd0\x0d\xa7\xde\x2b\xa6\xb1\x68\x10\xe4\x88\x4b\xbd\x20\x8a\xa7\x45\xa2\xa9\x60\xb2\x50\xc9\x72\x4f\xd4\x7e\xaa\x1b\x3b\x4b\xd8\x27\x3c\xe1\xfb\x0b\x3d\x7e\xa8\xaa\xf0\x03\xa9\x51\x65\xa5\xc0\x15\xe9\xa7\xcc\x2c\x8c\x4f\xbc\x24\xe4\x2b\x5f\xb1\x4f\x2c\xb2\x45\x11\xb2\xa4\x98\xf3\x9d\xaa\xe0\x0c\x8d\xbf\x77\x7a\xbb\x5d\xe3\xef\xb2\xbf\x71\xa1\x58\x59\xaa\xd7\x96\xa8\x7b\x28\xb9\xa4\xff\x3e\xdd\x0f\x2b\x5f\x7e\x68\xee\xd1\x1d\xb3\x8c\x89\x18\x7a\x05\xbd\x2e\xcf\x1f\x4e\xfe\xc1\x60\x6f\x7b\xf4\xf4\xc3\x2b\x5c\xc3\x9f\x0a\x97\x0e\x22\x20\x17\x32\x89\x15\x61\x9f\x74\x4e\x0d\x3b\x48\x0d\xe1\xf7\xef\xcc\x08\x15\xfb\x92\xf6\xcf\xa5\xd3\x2c\xb9\x27\x09\x34\xfe\x4c\x25\x50\xd5\x6b\x0b\xfa\x43\x15\x36\x9e\x2f\xa1\x57\xb9\xdd\x73\x37\x7a\x64\xa0\x96\x3a\xa8\x6a\x41\x83\x86\xae\xf1\x65\x42\xd4\x6a\x65\x9e\x1d\xbb\xc7\xab\x86\x5e\xd2\xb5\x59\x3d\xe0\x61\x1d\x5a\xc9\x3f\xad\x56\xf2\x33\xa8\x6f\xba\x7f\xb7\x0f\x3b\x4e\xcd\x66\x67\x6f\x5a\xb1\xb5\x8d\x8d\xce\x9e\xa8\x80\x27\x9b\x7d\x73\x03\xd9\x3a\x61\x44\x99\xdd\x28\x93\x1a\x0b\x21\x76\xa3\xe6\x0f\xdd\x68\x9b\x6a\xaa\x98\xde\xc7\x92\x5c\x15\x30\xcb\xf1\x0c\xc9\x09\x31\xdf\xfe\x84\xed\xea\xa1\x6e\x88\xab\xf9\x49\xc6\x7f\xb1\xb2\xa8\xa8\x3c\x69\xa4\x50\x07\x77\xd7\x0d\x84\xf9\xc8\x32\x1c\x23\x36\xbb\x1d\x51\xbd\x73\xbe\xed\xde\xdc\xd8\xce\xf6\xdb\x6f\xcf\xcf\xfa\x04\xa1\x19\xcf\x49\xab\xf0\xef\x2a\x18\x27\x3e\x15\xac\x10\xfc\xe7\x22\x54\xb4\xa1\x56\xb9\x07\x9c\x7d\xfe\x21\xa0\x33\x8f\x58\xe9\x26\x38\xe3\xea\x7a\xff\x8e\x3e\x2b\x43\x56\x8f\xfb\xd7\x2f\x5f\x11\x7b\xb7\x95\x75\xbe\x8b\x79\x7e\xdf\x36\x30\xf3\x88\x95\x8e\xbb\x98\xab\xeb\x07\xe8\x06\xb4\xaf\x0e\x9c\xc5\xef\x76\xcb\xb9\x79\x9c\x9e\x86\xba\x86\xe7\xfa\x06\x04\x0d\x2d\x96\xb2\x20\xb7\xb6\x6e\xb6\xd5\x10\x3f\xf0\xec\x05\x79\x25\x54\x91\xb3\x32\x42\xab\x3e\x94\x91\xb7\x5a\xeb\x8b\x50\x9a\x5c\xbd\xe8\xcd\x2b\xd1\x37\xa6\x7e\x2e\x6e\x8e\x8c\xe6\x1a\x14\xb9\x7e\x10\xc9\x0f\xe7\xe8\x74\x70\x43\xb4\xc1\xa4\xf3\x99\x4b\xbe\x18\xd9\x22\xba\xbe\x53\x90\x7b\xc8\xe0\x4e\x50\x55\x3f\xc4\x96\xd7\xbe\x93\x05\x39\x89\xd9\xcd\x89\x8a\xe9\xf3\x11\x7c\xc6\xe5\xa8\x57\xe7\x44\x15\x39\x78\x7e\x30\x21\x57\x3c\xe5\x09\xcd\x93\x65\xa5\xa3\x6f\xf9\x9c\x61\xbb\x6e\x40\x88\x66\x79\x76\x40\x8e\x64\x0e\x23\x47\x54\x90\x84\xb9\x12\x5e\xf6\x54\x2f\x51\xef\x38\x7e\x1c\x24\x92\x3c\x1a\x4f\x11\x52\xcb\x9e\x70\x2d\x76\x32\x95\xe5\xf7\x95\x2e\x0d\x67\x25\xc3\xe3\xc2\x70\xc1\x09\xf9\xd6\xb2\x2f\x2b\x17\x20\x32\xc0\x61\x76\x4f\x3c\xae\xcd\x7a\x7c\xf6\x90\x9d\x2c\x1b\xab\xae\xbb\xc7\x06\xe8\x5d\xad\x27\x73\xae\x2f\x59\x26\x7b\x90\xe1\x70\xa0\x9a\x7f\x81\x6b\x73\x43\x2a\x0e\xfd\x18\xa9\x26\x14\x49\x52\x54\x24\xd4\x28\x75\xe8\x5d\x98\x90\xb3\x57\x17\x97\xaf\x5e\x9e\x7e\x78\x75\xf6\x82\x7c\x6d\x47\xe2\xa1\x1e\x30\x21\x1f\xc2\x46\x2b\x41\x46\x9b\xed\x66\xe1\xbf\x35\xb2\x24\x96\x8a\xb2\x53\x1c\x14\x9e\xa7\x82\x9c\x0b\xae\xcb\x1e\xb9\x98\x17\x90\x48\x61\x23\xfd\xcd\xdb\xd6\xbb\x31\xe7\xda\x96\x32\xc6\xc1\xcc\xcf\xd5\xd1\x6c\xda\xb7\x11\x36\xcb\xac\xed\x27\x28\xfc\x95\xdb\xf3\x10\x8a\xaa\x6b\xfe\xd8\x8f\x8e\xe5\x1b\x7f\xba\xfa\x56\xe8\x2d\x2e\xef\x23\xb3\xf5\x7d\xce\x5d\x27\x09\x99\x57\xda\x90\x4f\x26\x87\x13\x62\xd8\xf8\xe1\xe4\xd0\x89\x7c\xc9\x4a\xaf\x7c\x3f\x68\xd8\xb0\xa7\x8a\xf0\x13\x42\xde\xbb\xb4\x49\xa8\x62\xda\xdc\x76\x1f\x0b\x8e\x07\x4d\xd6\x6b\xc7\xc6\xd5\x8a\x29\xa6\xe1\x47\x6d\x87\x9f\x39\xbf\xb1\xb5\x28\x1f\xcc\xa7\x50\x4e\xb5\x97\x6d\x0c\x57\x6e\x35\xe5\xcb\x37\x0f\xb7\x36\xa4\x38\x3d\xad\xcc\x92\x2f\xbb\xae\x48\xa6\x29\xb6\xa4\x59\xf8\x2a\x79\x65\xa1\x3b\x4f\x1d\x1f\x44\xcb\xc7\x46\x3c\xb3\x9d\x0e\x76\x8d\x33\xb8\xa1\x6a\x5a\xbd\xbf\x6d\xd3\x9b\x45\xa9\x4e\x75\x6f\xdc\x6b\x3b\x41\x29\x57\x40\xcc\xb2\xd9\x13\xff\xf1\x93\xcb\x57\xa7\x67\x6f\x5f\x4d\xd2\xf8\x09\x12\x69\x26\xe2\x4c\x72\xa1\xd5\xae\x1a\x3e\xd5\x8b\x07\x20\xef\x7e\xda\xfd\xc8\x70\x7e\x38\x77\x7e\xdc\x8d\xa0\xad\x97\x2d\xcd\x16\x60\x97\x96\x99\x4c\xe4\xbc\xb9\xe3\x6f\x07\xb4\xf9\x35\xb6\x84\x18\xd3\xb1\xc1\xc7\x87\x53\x76\xf5\xa2\x2f\x3d\x57\x2f\x1c\x20\x4b\x68\x79\xbd\x51\x2f\x3e\x0f\x80\xdd\xa3\x1a\xb1\x02\x45\x34\xe7\x00\x79\x73\x5d\xd7\xca\x36\x66\x19\xcb\x53\x8e\x59\x28\x6d\xf5\x8b\x87\x01\xfe\xae\xaa\x85\xa1\xe4\x17\x3b\xa2\x6b\x15\xea\x6e\xa4\x2a\x03\xc9\x72\x36\xf6\x7d\x62\x66\x3c\x61\x50\x13\xdd\x4b\x48\x21\x3f\x71\x96\x60\x67\x37\xc6\xa7\x92\x65\xdd\x22\x1c\x94\x65\x73\x86\x78\xac\x1e\x9d\x24\xcb\xb2\x17\xa0\xb5\x86\xd1\x39\xf6\x7f\xc9\xad\x43\x2e\xcb\xf9\x0d\x4f\xd8\x1c\xfa\x7c\x72\x31\x0f\xea\x06\x86\x95\x06\x6d\x91\xc9\xaa\x73\xea\xad\xf9\x2b\xe8\x35\x0d\x98\xf5\xee\xfd\x07\x68\x19\x0b\x21\x15\x7b\x2b\x9c\xe6\x83\x70\xe6\xc7\xe3\x31\x98\xfe\x8e\xfe\x66\x34\x9f\x38\x39\x26\xdf\x33\xfb\x1d\x09\x3d\x6d\x73\x1e\x69\x72\xbb\x90\xbe\xc1\x28\xcc\xb5\x84\x2c\x20\x34\x86\xf1\xd9\xa7\x4e\xcc\x93\x46\xa2\x46\x56\x5e\x79\x9e\x33\xe8\xda\x55\xc6\x19\x3c\x45\x2d\xe9\x81\x18\x68\xcf\xd4\xde\x39\x9b\x9a\xce\x88\x0f\x1f\x70\x7c\x81\x12\xb5\x4c\x13\x2e\xae\xcb\xa6\x48\x33\x69\xeb\xaa\x32\x62\x7e\x70\xa7\x26\x67\x34\x59\xcf\x31\x76\xc1\xd1\x07\xe3\x16\xba\x37\x7f\x04\xf8\x0b\x0c\xb5\xf8\x4f\x47\xbc\x6c\x00\x58\x48\xea\x0f\x0e\x9e\x34\xc4\xb8\x8a\x14\xdf\x9f\xbc\xc3\x30\x15\xda\x2e\xc8\xf9\xd5\xcb\xab\xf3\x7b\xf5\xfa\xad\x63\xae\x30\xbb\x27\xad\x3d\xf0\x9f\x77\x8b\xaa\x1a\x93\xa4\xd8\xf5\x4d\x34\xbd\x5c\xc8\x5c\xd3\xe4\x01\x08\x67\xb4\xa0\xd9\x69\xa1\x17\x67\x5c\x41\x79\xe0\x7e\xc4\xbf\x95\x51\x83\x7c\x45\x6c\xbc\xec\x3a\xcc\x71\x87\xbe\xf6\xb9\x97\xff\x79\x7a\x41\x68\x61\xf0\x51\xdb\x9e\x9a\x0f\x16\x2c\xe7\x56\x71\x85\x39\xd0\xbd\x42\xc6\x8e\xb9\x05\x2e\xee\xa9\xc7\x04\x95\xfb\xcb\x7a\x1b\xfc\xd1\xc0\xb9\x90\xea\x7f\x26\x3e\x68\x2e\xb8\xe6\x54\xcb\xbc\x37\xdf\x60\x65\x44\x6f\x30\x2c\x94\x96\xa9\x3d\x45\xe7\xee\x09\x08\xc8\x02\xf9\x6d\xe5\xa5\xd2\x9a\x08\xda\x27\xc0\xfc\x5c\x18\x5d\x91\x46\xac\x96\x66\x33\x82\x5e\x97\x38\x36\xf7\xcf\xfc\xd9\x1a\xd1\xa1\xef\x50\xf2\x97\x17\x95\x6e\xf0\x65\x63\x49\xd7\xc2\xd7\x5a\x31\x23\x29\x04\x8b\xf6\xe9\x8c\xbc\xff\x96\xfc\xdc\x0f\x69\xe3\x3f\x8b\x9a\x3f\x01\x41\xf4\x7f\x0b\x9a\x20\x68\xdf\x3d\xa4\xf1\xbd\xba\xa5\xfd\xac\xb8\x8a\x25\x76\xf1\x25\x4a\xbc\xf3\xd6\xb6\x42\x61\x57\x25\x84\x88\xce\xa9\x50\x06\x4f\xaa\xf6\x8c\x43\x1b\x00\x71\x48\x8e\x74\x94\x1d\x3f\x18\xa4\xfa\x4a\x87\x4d\x0a\x11\x0a\xab\xb8\xf6\x0f\x88\x1a\x6f\x7c\x3a\xec\x7e\xcb\x7c\xf0\x20\x07\x38\xed\xfd\xd8\x6d\xed\x58\x1e\x8f\x42\x78\xa1\x80\x48\xde\x70\xa5\x31\x8f\x06\x1f\x86\x32\x2e\x98\x4f\x68\x74\x81\x0b\x22\x73\xc2\xb3\xff\xa5\x71\x9c\xbf\x40\x39\xc2\xea\xaa\xf0\x6f\xe5\xfb\xfc\x50\xe1\xa3\x6d\x8e\xf4\x32\xb3\x1d\xde\x3e\xbc\xbc\x80\x27\x15\xf9\xd3\x1f\x9e\x81\x5e\xf0\xbb\x2f\xff\xf0\x6c\x4f\x44\x7c\xaa\x59\x85\xa4\x6f\x9b\x68\xef\x91\x15\x9f\x49\x16\x49\x25\x5b\x04\x9a\xc1\x18\x69\xf7\x0a\x93\x33\x0c\x9f\xb4\x44\x13\x0f\x82\xc1\x4a\xcf\xbd\xfb\x94\x89\x87\xac\x8b\x5f\x50\xd6\x05\xf1\xd9\xf8\x48\x58\x7b\x41\xe4\x70\x40\x28\xab\xb3\x4a\xc0\x91\x76\x5f\x3c\x15\xda\xbd\x23\x74\x77\xc5\xe4\x2a\x06\x87\x21\x7e\x36\x11\x37\x48\x4f\x3d\x7b\x77\xf5\xbf\x6f\x4e\xbf\x7a\xf5\x06\xd6\x6a\xa3\x02\x0d\x7a\x5a\x4d\x68\x97\x98\xf5\xf6\xe8\xbe\xbb\x71\x6b\x57\x90\xf6\x11\x60\x20\x6a\xa1\x05\x82\xbc\x7b\x7d\xd5\x35\xaa\x60\x5f\x75\x56\xcc\xf6\x80\xde\x53\xf3\x6b\x98\x57\xa1\xdb\xea\x43\x64\xce\xf7\xec\x14\x09\xca\xde\x57\xec\x28\x06\x87\x70\x8d\x7b\x9b\x3a\x76\xc4\x0d\xf2\xe8\x64\xbd\xcd\xfe\x6f\x03\x31\x84\x62\xef\x9e\xef\x7b\x85\xf6\x7e\x32\x64\xde\x57\x59\x87\x43\x1c\xcb\x89\x8f\x86\x84\x21\xef\xc8\x0d\x57\x35\xfc\x94\x29\xdf\x81\xe8\x33\xc0\xd6\xac\xa9\x59\xf4\xfe\xdc\xa1\x71\x58\xfc\xe7\x95\xeb\xf5\x17\x44\x15\x54\xf2\xba\xd7\xf5\x83\x77\x11\x99\x34\x0d\xda\x62\xf6\x59\xf9\xb1\xbc\x85\x77\xb0\xc5\xdd\x13\x64\x30\x30\xf1\x07\x4a\x2f\xf3\xdf\xee\xe7\x38\xfa\xe1\xea\x95\x56\x3a\x61\x09\xa1\xca\x09\x72\x36\xd6\x3c\x2c\xc9\xf2\x28\x51\x88\x3c\x3a\x3e\xe4\xd9\xd0\xf7\x3b\x9a\x1b\x1e\xd2\xd4\x90\x2d\xa4\x96\xa2\xe7\x1c\xda\xa6\x41\xab\x84\xed\x02\x9e\x78\x89\x99\xee\x09\xcb\x03\x7a\x8b\x19\x44\xde\xad\x6e\x34\x0f\xc7\xba\xa5\x70\x0e\xf6\xaa\x7b\xfd\xe9\x51\xa2\x2c\x3e\x3f\x7b\x00\x22\xf4\xb9\x15\x3b\xea\xea\x26\x7c\xb0\x40\xd9\xb8\xa7\xcc\x7d\x33\x90\x83\xf9\xf9\x99\x55\x17\x5c\x5a\xbe\xb2\xc7\x8a\xac\x3f\x57\x0f\x22\x4a\xc9\x5c\xdf\xca\xbc\xaf\xf2\x71\xd5\xe1\x6a\x51\x98\xf6\xb7\x95\x62\x1c\x9f\x27\x15\xc1\x55\x3e\x79\x4a\x72\x05\x94\xa4\xd6\x77\x7b\x1d\x45\xb9\x0b\x82\xf2\x74\x08\xc9\xdd\x08\x2e\x77\x5b\x89\xeb\xc1\xd4\x5f\x77\x3c\x7a\x01\x96\x1b\xcc\x9a\x41\x0d\xa2\x94\x74\x97\x82\xb9\x39\xa0\x3c\x0f\x42\x67\x73\x69\xe8\xd0\x6e\xe4\xa4\x4a\x62\xdd\x48\xe8\x1c\xc4\xb6\x8d\x49\x62\x76\x56\x8a\xb0\xe1\xa3\x2d\xd6\x35\x22\xd8\x33\x31\xa5\x99\xc2\xa6\x14\xb1\xbc\x15\xb7\x34\x8f\xc9\xe9\xc5\xf9\xfd\xd3\xd5\xbd\x33\x41\xf1\x3c\xec\xd3\x5b\xa0\x9a\x0b\x5a\x8e\x07\x11\xf8\x10\x24\x64\xfe\x98\x72\x8d\x7d\x99\x31\x18\x5f\x87\xd6\x28\xc3\xa7\x7c\x24\x8b\xa1\x74\x86\xaa\xd9\x91\x02\xb1\x4a\x10\x19\x69\x9a\xb8\xce\xff\x4c\xdf\x32\x26\xc8\xb3\x67\xcf\xd0\x41\xf1\xec\x8f\x7f\xfc\x23\x81\xae\x9b\x31\x8b\x78\xba\xfa\x20\x3c\xf5\x6f\xcf\x9f\x4f\xc8\x7f\x9f\xbe\x7d\x43\x68\x04\xba\x1c\x56\xbe\xc5\x91\x61\x3f\xc3\x97\xd5\x88\xfc\xd7\xd5\xfb\x77\x65\x3b\xf8\xea\xaf\x80\x2e\x7e\x79\x13\x72\x16\xc4\xde\x87\xce\x03\xaa\x17\x00\x0d\x21\x35\xa1\xb3\x19\x22\x9c\xeb\x49\x6f\x89\x89\xab\x3d\xc7\xe7\x0b\x58\x2e\x17\x80\x6a\x09\x24\x05\x70\x33\x45\x70\xd8\xb8\x3a\x8e\x98\xe3\x00\x63\x79\x26\x02\x53\x19\x91\x84\x5f\x33\x32\x53\x5f\xe7\xb2\xc8\xca\xc6\x29\x39\x53\x46\x01\x8b\xa8\x30\xa3\xe3\x60\xe5\xce\x28\xb6\x67\x6d\xcc\x87\x8e\x9c\xb0\xe7\xb4\x1f\x17\xb2\x3d\xf3\xae\x85\x98\xed\x0d\xe8\x72\xb4\x90\x64\x98\x5d\x78\xaa\x91\x0c\x95\xd5\x5e\xf8\xf5\x20\x52\xd9\xea\x87\x25\x65\xa4\x89\x14\xf3\x10\x07\x4b\xe9\xc3\x05\x53\x2e\x33\xb6\x2b\x30\x7a\x6a\xa8\xd3\x4f\x7b\x3a\x24\xee\x6f\x69\xb6\x5f\x27\x90\x6a\x8c\xae\x1b\xb3\x52\x87\x92\x4e\x65\xa1\x5d\xcc\x9e\xfd\x1d\xca\xb7\x69\xe9\x40\xbf\xd7\x14\x7a\xeb\x52\xd4\x5f\xdf\xbf\x9e\x9a\x6e\x55\x63\xe6\x80\x6b\x57\x45\xd6\x11\x61\x34\x5a\x90\x6b\xb6\x1c\x23\x07\xc8\x28\x54\x8f\x00\x68\x9f\x19\x18\x63\x99\xdc\x6a\x38\x43\xc4\x62\xa3\x4d\xda\xad\x70\x01\x96\x81\x7c\xe0\xaa\x4f\x38\x85\x4b\x59\xb9\xdc\xb6\xb2\x12\x81\x85\xd2\xf5\xae\x8c\xa4\xd0\xb6\x2f\xa6\xef\x5d\x05\x01\xa3\xb5\x82\x04\x86\xc2\xb0\xd8\xbc\xa6\x36\x7d\xb9\x8c\x2a\x35\x1c\xc5\xca\x1f\x85\x58\x79\x1b\xea\xb9\x43\x4c\xaf\x62\xb6\x32\x12\x75\x3d\x11\x83\xc8\xd4\x05\x8f\x20\xe3\xc8\x3c\x6e\x9f\x75\x50\xf2\x80\xa8\x14\x4c\x50\x4c\x17\x16\x34\x10\x27\x6c\xbe\xcd\x94\x22\x1c\x56\x98\xd2\xfc\x9a\xb9\x42\xc3\x34\x99\x90\x0b\x33\x49\x5f\x6d\x1e\x5b\x09\xde\x60\x82\x88\xa1\x31\x61\x25\x08\xf3\x91\xc3\xc9\xe4\x10\x59\x65\x43\x5d\x88\xbd\xb1\xa6\xcf\x2e\x72\xbd\x75\x8f\xab\xa0\xf2\x5b\x9a\x29\xec\xa6\x67\x54\x0b\xe8\x58\x29\xa1\x6e\x8b\x5e\x38\x61\x82\xee\x59\x42\x3c\xbc\x7a\x6e\x63\xd6\x6f\x27\xd4\xfe\xfa\xa0\xee\xe1\x6b\xaf\x5e\x7d\xf7\x3f\xed\xb1\xfb\xe9\xba\xde\xa7\x16\x87\x2c\x25\xe9\xab\x23\x63\xef\x2d\x37\xd3\x1e\x1a\x9b\xb9\xab\xea\x3a\x02\xf9\xb6\x52\x4b\xba\x95\x2e\x62\x4b\xa9\x27\xec\x49\x29\x1f\xe7\x33\x20\xa9\xcd\xb5\x6e\x42\xbd\xcc\x71\x18\x03\x81\x87\xd7\x3a\xf6\xed\xb2\xe7\xae\xbb\x68\x53\xbf\xbf\x5a\x52\xbf\xf6\x09\xa2\xa9\x5f\x55\x43\x46\x50\x56\xc2\xb3\xda\x30\xfb\x18\xb6\x4a\x4b\xe8\xd6\x59\x12\x87\x09\x79\x6b\x59\x31\x22\x39\x9d\x2a\x99\x14\xda\x57\xa2\x68\xe0\xd3\x30\xa8\xeb\xed\x89\x45\x9b\xdc\x63\x01\xd7\x06\x79\x05\x59\x59\x3f\x0c\x1c\xaf\x1e\x89\xcf\xbe\x01\xb2\x78\xfd\xc2\xc2\x64\xf1\xea\x71\x17\x9c\xb8\xd8\xf3\x4e\xb8\x61\x7d\xf5\x4e\x97\x11\x59\x91\x6e\x21\x46\x56\x2b\x14\x9d\x9d\xa0\x8a\x39\x94\xbb\x56\xc0\x2e\xaf\xfd\xad\xba\x76\x5d\xd6\xc0\x78\x7a\x71\xde\xa3\x56\x1a\x8c\xba\x46\x2f\x0d\x9f\x18\x34\xd3\x36\x57\x05\xc0\xe7\xa8\x99\x1a\x91\xde\x19\x90\xce\x4a\x88\x5a\x97\x9e\x21\xca\xbf\x00\xd5\x66\x65\xe1\xaf\x0d\x33\x0a\x93\xb9\xaa\x1d\x3a\xd0\x18\x5c\xb2\xad\xa0\xab\x87\x8b\xe1\x01\x12\xf7\xf9\xab\x41\x8f\x54\x79\x01\xe8\xef\x91\xb1\x53\xbf\xaa\x5c\xf4\xd2\x01\x91\x5c\xb1\xc4\x30\x3d\x52\x33\xd9\x64\x32\x7e\x81\x3d\xbf\xa9\x10\x52\x03\xde\xa8\x11\x49\xa0\x1f\xf9\x08\x4d\x31\x46\x02\x0d\xa2\xbf\xf2\xc0\x69\xda\xb3\xcc\xd9\x1b\xf2\x90\xde\x11\x88\x00\x12\x01\xec\x2e\xfa\xc1\x24\x72\x07\xd8\x64\xae\x52\x54\xe9\xb3\x2d\x7f\x05\xaf\xec\xf8\x0e\x89\x54\xb4\x60\x29\xc5\x7e\x24\x0e\x40\x86\x5e\xdf\xe6\x5c\x6b\x86\x55\xc7\x59\x9e\x2a\x22\x67\xa3\x8a\xdf\xf8\xe0\xe6\xf9\x41\x5f\xf2\x2c\xb9\x0b\x85\x9a\xb8\x13\xba\x6b\x19\xb0\x75\x57\xd5\x6f\x50\x51\x2e\xcc\xe9\x04\x6d\x3a\x81\x06\x49\xa2\x66\xb0\x34\x42\xc4\x0d\xc2\xff\x51\x83\xee\xee\x6c\x11\xbb\xda\x20\x46\x5e\x30\x1d\x6c\x10\x83\x0d\xa2\x8f\x11\xef\xcc\x06\x11\x30\x6e\x47\x4c\x1b\xec\x11\x61\x22\x9e\x33\x4a\x94\xa5\x2c\x82\x32\xd1\x06\xe5\x9d\x39\x42\xe6\x55\x5f\xc1\xe1\x64\x72\x78\xe8\x8c\x14\xf6\x7c\x14\x7a\x36\xfe\x13\x61\x22\x92\x31\x22\x95\x19\x3f\x57\x1a\x84\xda\x52\x2b\x0f\xe7\x92\xba\x6f\x85\xfe\x06\x18\xbb\x5f\x94\xe8\x91\x42\xb9\x90\x94\xd7\x77\x2a\x82\x95\x82\x97\x2f\x03\x66\x01\xe8\xab\x25\x5a\x09\xac\x0c\x91\x49\x78\xca\x6d\x7d\x42\x43\x2e\x98\xd2\x8a\x1c\xe1\xcd\x49\x94\x15\x23\xfb\xc0\x24\x65\xa9\xcc\x97\x23\xff\x90\xf9\xb1\xf2\x96\x7d\xe2\x18\xa4\xb6\xa8\xc8\x73\x26\x74\xb2\xfc\xe5\xca\x6f\x0e\xc4\x8f\x58\x7c\xf3\x58\xb1\x4f\xde\x47\xd3\x55\x45\xcb\xb2\x89\x00\x58\xef\x3c\xb4\x81\x0f\xd9\x0c\x8c\x51\x69\xfc\x31\x77\x99\xb8\x21\x37\x34\xdf\x39\x03\xa3\xe9\xba\x13\x89\x2d\xe6\x37\x5c\xc9\x9d\x73\xd8\x1a\x87\x0c\x81\x77\x65\x99\x32\xda\x88\x65\xa1\xb3\x42\x5b\xee\xe2\xce\xb6\x2b\xd9\xe7\xcf\x74\x4d\xf0\x7d\x7e\xd0\xe3\xe4\x32\xaa\x35\xcb\xc5\x0b\xf2\x3f\x47\x1f\x7f\xfb\xcf\xf1\xf1\x5f\x8f\x8e\x7e\x78\x36\xfe\xf7\x1f\x7f\x7b\xf4\x71\x02\xff\xf8\xe2\xf8\xaf\xc7\xff\x74\x7f\xfc\xf6\xf8\xf8\xe8\xe8\x87\x6f\xde\x7e\xfd\xe1\xe2\xd5\x8f\xfc\xf8\x9f\x3f\x88\x22\xbd\xc6\xbf\xfe\x79\xf4\x03\x7b\xf5\x63\xcb\x41\x8e\x8f\xff\xfa\x9b\x1e\x17\x41\xc5\xf2\x7d\x6f\x24\x18\xaf\xf1\x9d\x88\x11\xd5\xb1\x7b\x46\x5d\x42\x3e\x8d\x4b\x8b\xf6\x98\x0b\x3d\x96\xf9\x18\x3f\xf2\x82\xe8\xbc\xe8\x8b\x74\x95\xec\xef\xee\x68\x4c\x29\xc4\x94\x15\x30\x9d\x62\xf3\x08\x89\x08\x06\xa6\xf6\x68\x19\xb6\x7d\x6c\x9b\x8d\xc2\xf6\xc7\xc1\x1e\xdc\xe6\xba\xc3\x48\x25\x5b\xcf\xe6\x17\x1e\xa6\x74\x65\xbb\x29\x0f\x31\x4a\x2b\xd7\x10\xa3\xb4\x7a\x0d\x31\x4a\x1d\xaf\x21\x46\xc9\x5d\x43\x8c\xd2\x60\x1f\xdc\xff\xfa\x85\xdb\x07\x87\x18\xa5\xae\xd7\x10\xa3\xb4\xf3\xf5\x84\x62\x94\x50\xc8\x6f\x8a\x54\xb2\x62\x7e\x19\xa6\xf4\x68\xa3\x94\x94\xc1\x87\x88\x9d\x46\x91\x2c\x84\xfe\x20\xaf\xd9\x9e\x8e\xdc\x9a\x4e\xba\x32\x3a\x94\x44\x5c\xa3\xa3\xae\x3e\xfc\x28\x15\xd6\xbe\xe4\xd1\x1e\xe4\xc7\xfe\x24\x47\x5a\xc4\xdc\xe8\xa8\x3d\x1f\x16\x37\x6c\x58\x16\x5b\xc4\x2c\x2e\x7f\xb0\x24\x4d\x9b\xfd\x9e\x90\x53\x92\xb3\x88\x67\xdc\x30\x00\xa8\x15\x04\xf7\xf1\xf8\xf8\x2e\xce\x5c\x2b\x96\xcc\x6c\x27\x5b\x51\xa6\x39\xe7\x81\xfe\x69\x39\x4a\xe3\x67\x50\x86\x90\xae\xd7\x28\x51\x0b\x59\x24\x31\xc9\xd9\xdf\x9c\xf0\x61\x67\xf3\x21\x1c\x21\x34\xa9\xc2\x52\xca\xcf\xda\xc1\x69\xc6\x6d\x51\xb1\xc7\x44\x06\xd9\xa7\x8c\xe7\x70\xd8\xae\x58\x24\x45\xdc\xb7\x85\x64\x65\xfc\x52\x56\x00\xbf\x10\x8b\x49\x5c\xe0\x03\x90\x8e\x49\x13\x1e\x73\xbd\xf4\xf1\x1c\x78\xec\x8d\xd8\x8a\xbd\x83\x2d\x22\xa8\x72\x23\x08\xcd\xb2\x5c\xd2\x68\xc1\x54\xf0\x35\x14\x42\x6d\xa1\x0c\x9f\xe5\x99\x14\x73\x2e\x50\x0e\x85\x77\x8c\xb0\x92\x2c\x49\x2e\xb5\x0b\x4d\x5b\xf3\xc1\x0f\xc1\x60\xf0\x3a\x4a\x1c\x3a\x5f\x42\xfc\x9a\x0c\x87\xc0\x59\xf1\x59\xf8\x87\x22\x32\x89\x5d\x69\xd6\x3f\x3d\x33\x82\x7f\x64\xb1\xd8\x30\x01\x28\x9a\xa9\x25\x49\x8c\xf0\x64\x18\xc3\xfa\x97\xbf\xfc\x3d\x59\xc8\x22\x57\x93\xb0\xd8\xdf\x73\xb8\x87\x16\x0e\xa7\x38\x68\x92\x30\xaa\x34\x79\xfe\x8c\xa4\x5c\x14\x86\xe3\xf7\x84\x78\x7d\xc9\xba\x81\x94\xfb\x87\xdf\xef\x39\x5a\x3f\xf2\xed\x5a\xc9\x36\xc3\x8e\x79\x56\xbc\xb5\x67\x1c\x0b\x7a\x60\xd7\xcc\x9a\xb0\x6b\x59\x52\xb8\x8b\x42\xcb\x07\x3e\xf9\x3f\x17\x72\xba\xd4\xfb\x97\xb0\xb1\xe3\x54\x6b\xd7\xfc\x5f\x7b\xb3\x4d\xa9\xd8\xb2\x52\xec\x0e\x53\x79\xf0\x1e\xdf\x73\xae\xf4\x4e\x1d\xbe\xcb\x9a\x37\x3b\xbc\xbc\x2f\x33\x9f\x1b\xfd\xb8\x97\x4c\x7a\x18\xc9\x69\x74\xce\x22\x1d\x45\x4c\x01\x29\x72\x45\xe1\xc0\xb8\x8b\xcf\xee\xf8\xd1\x47\x5a\x6d\xa6\xa9\x88\x8c\x43\xfe\x1e\x7a\x95\xee\x05\xac\x7d\x44\x7e\x87\xd8\x3d\x41\x0b\x07\xab\xd2\x08\xc5\xc5\x1c\x5b\x8b\xa6\x45\xa2\x79\x96\x94\x90\xbb\x74\x2f\x58\x06\x1c\x7a\x0b\x68\x60\x9e\xa6\x58\xf4\x0a\xab\x9f\x83\x67\xe5\xc8\x8f\xc5\x84\xc6\x0e\x99\xb9\xe1\xe3\x19\xcd\xa9\x07\x7f\x24\xd3\x94\xaa\x63\xeb\x78\xa0\x10\x05\x63\xdb\x00\x99\xb7\x68\x52\xce\x38\x88\x3a\x78\x28\xc4\xd5\x4c\x50\xb1\xb3\xfb\xaf\x5a\x70\x1e\x86\x22\xf2\xd6\x07\xda\x63\x93\xfb\x1a\xc6\x5a\x81\xf8\x2b\x1a\x5d\x33\x11\x93\x6f\x95\x03\x5c\xbc\x14\x34\xb5\xf5\xe3\xb3\x5c\x62\x17\x75\x16\xd7\xde\x57\x23\x6b\x76\xc4\xd2\x27\xae\x80\x15\xca\x5b\x0f\x05\xc5\x42\xf5\x54\x3c\xd8\x0c\xb4\x8d\xde\x29\x34\xe9\xe6\xfc\x26\x62\x4e\x76\x34\xef\x3d\xd4\xe2\x6f\x76\xae\x56\x47\x9a\x4b\x47\xd9\x36\xa6\x78\x0a\x81\xa5\x7b\xcf\x25\x94\x89\xa7\x89\x21\x71\x4b\x5f\xf3\xa7\x86\x60\xd3\x25\xd8\xbd\x1e\xa4\xf2\x58\x3e\xdd\xbf\xa6\xd4\x61\x3e\x8d\xab\xc4\xec\x92\xc6\x52\x91\xaf\x12\x19\x5d\x93\x33\x06\x4a\xc3\x5d\x36\xdf\xcf\xa7\xf1\xd3\x6e\x9c\x99\xd2\xf9\x6e\x11\x23\x63\x92\x4a\xc1\xb5\xcc\x77\xa1\xc7\x8f\xa8\x50\xe0\xd0\xca\xb0\x4d\xc5\x74\x73\xce\x3e\x97\x46\x86\x06\xe5\xfb\x41\x1d\x18\xca\x9b\x4e\x80\xf2\xe0\x2d\x20\xaa\x3b\xd3\x91\x5f\x2f\xe4\xed\x58\xcb\x71\xa1\xd8\x98\xef\x1c\x08\xb5\x37\xa0\xae\xd9\x12\xa2\xca\x7a\x01\x95\x1d\xac\xa2\xb9\x6b\x09\x76\x76\xb8\x6f\xe4\xbb\xcb\xaf\xce\xbe\x55\x2c\x9f\x84\xda\xca\x09\xd3\xd1\x49\xc4\xb2\xc5\x89\x1d\xe1\xc9\x83\xd5\x91\xcd\x7e\xe0\xea\x46\x43\x41\x20\x92\x49\x62\x0b\x8c\xc9\x19\x79\xc9\xb2\x85\xff\xdc\xe3\x80\xdb\x53\xee\x29\x97\x49\xd9\x4f\xbb\xa9\x43\x33\x52\x95\x6c\xc0\x1d\xa4\x1a\x01\xf2\xe7\xd3\x6e\x8d\xbc\x1f\x23\xba\xdf\x63\x77\x96\x5d\x5a\xf1\x3d\x0a\xf0\x3e\x9e\x96\x7e\x87\x95\x9e\x7e\x61\xfe\x50\xb5\x61\x9f\x8b\x4e\xad\x90\xed\xf3\x19\x2a\xa3\x31\x8b\x89\xbc\x61\x79\xce\x63\xa6\x88\xa7\xdb\xa1\x0d\x8a\x27\x8f\x03\xf2\x43\xef\xc0\xa7\x15\x70\xf0\x78\xcc\x0f\x87\x60\x7f\xa8\x10\x71\xb8\xb3\x42\xc4\x69\x9c\x72\xf1\x38\xb0\x7d\x47\xb8\xa9\x88\x26\xec\xfc\xfd\xde\xda\xba\x1d\xa7\xaa\xb0\x5f\xd9\x9b\x41\x4f\x81\x2d\x75\xf6\xbf\xf1\xb8\x4b\x84\x8c\x77\x73\xa0\x3d\xb0\xda\x3d\xa7\x9a\xdd\xee\x28\x08\x8d\x4b\x92\xbf\xeb\xfb\xa0\x9e\x3d\x6d\xb5\xfd\x51\x74\x0a\x09\x4e\x39\x96\xfc\x7f\x28\x21\xcb\xe2\x53\x3f\x8e\x24\x1c\x2b\x6c\xca\x56\x6f\xc5\xe6\xce\xec\xe9\xc5\x39\xf9\x1a\x1f\x7f\xb8\x2e\x28\xb9\xd4\xa8\xf2\x9c\xc9\x94\xf2\x7e\x1a\xa0\xd7\x07\xad\xf7\xc3\x0a\x81\x70\xe1\x9f\x25\xf6\x61\x23\x14\x95\xe5\x86\x8b\x9c\xc5\xc4\xda\x53\x3e\xb3\x16\x0f\x2b\xe2\xf4\xe7\xd1\xe2\xe1\xae\xba\x64\x07\xa6\x79\x97\xbf\x53\x4a\xd1\x0e\x9d\x40\x88\xf0\xb1\x4e\x44\x31\xa1\x38\x84\x37\x04\x11\x78\x20\x6a\x43\x58\xba\x4f\xd6\x41\xb1\x7b\x44\xde\xc8\x39\x17\x8e\x8a\x49\x1b\x55\x33\xa3\x3c\xd9\x0f\x9c\x83\x9c\xfc\x0b\x93\x93\x95\x4a\x5e\x09\x3a\x4d\x76\x0f\x99\xac\x1e\x02\x3f\x1c\x79\x9d\xd0\x39\x61\xf0\xc7\x49\xcc\x95\xf9\x3f\xb9\xba\x7a\x03\xce\xe0\x42\x38\xfd\x12\xdc\x9c\x96\xb7\xf8\xd4\x68\x24\x32\x0f\x47\x17\x90\x88\xf7\xd6\xc1\x23\x18\x8f\x70\x11\x9b\xa5\x33\x55\x09\x4a\xb6\x4f\x60\xaf\x14\x9f\x77\x87\xa1\x8f\x53\x46\x3e\x2c\x78\x74\x7d\x11\xf8\x7f\x65\x6e\xee\x89\xe0\x56\x45\x48\xa9\xff\xf6\x50\xdc\xc8\x2e\xeb\xa2\x2f\x83\x5a\x30\x9e\xe3\xd4\x8e\x9c\x5e\x59\x08\xc2\x6f\x54\x29\x19\xf1\x32\xfe\x00\x2c\xd1\x25\xfb\x8e\x81\x7d\x3f\x1c\x54\x40\xe0\xec\x07\x20\x28\xe7\x36\x48\x2d\x0e\xa3\xec\x13\x54\x85\x52\x0a\x17\x0e\x6e\x0f\x06\x04\xc4\xf1\xde\x5a\x9a\x96\xc3\xad\xb6\x34\x75\x6a\x66\xcd\x45\xee\x12\x5e\x2d\x02\x39\x95\xc1\xf6\xd0\x5e\x45\x21\xdf\xda\xd4\x36\x33\x79\x10\xd0\xed\x9e\x9a\xde\x64\xfe\xab\xc5\x07\xe1\x3d\xeb\x34\x07\xda\x93\xc9\xac\x48\x30\xb2\x76\xff\xce\xae\xce\xc7\x88\xdf\x79\x00\x27\xfa\x63\xeb\xec\x74\x18\xa6\xe7\x75\xcf\x57\xfc\x3c\xfa\x3b\x05\xaa\xc5\xb3\x3f\xfc\xfe\xf7\x4f\xbd\xe3\xd3\x7e\x86\xbb\x87\x6e\xf9\xb4\x97\xeb\xad\xa1\x36\xc3\xf9\x50\x9b\x61\xa8\xcd\x50\xbd\x1e\xdc\x3f\x7c\xff\xd5\x17\x7a\xc9\x6e\xeb\x23\xb3\x6d\xdf\xfa\x0a\x7b\x66\xc5\xf5\x93\x11\xb7\x77\x05\x85\xfb\xa8\x9b\xd0\x53\x8e\xd8\xfe\x35\x12\x86\xca\x08\xbf\xac\xca\x08\xfd\xe5\x88\xf5\x55\x05\x61\xff\xdc\xb0\x5f\x4e\xc5\x83\xbd\xc9\xc6\xbe\x79\xf5\x7b\x67\xd3\xf7\xd5\xf4\xa3\x2f\xeb\x7e\x6f\x16\x86\xc3\x72\xbc\x46\x7b\x8b\x2b\xf1\xe6\xaa\xe9\x1f\x1e\xaa\xa0\x58\xbe\x96\x86\xba\x3c\xa0\xea\x4c\xf6\xb6\x3c\xe0\x54\xe4\x4e\xbc\xbb\xc9\x8a\xf7\xfe\xaa\x16\x20\xe0\x6f\x3f\xfe\xb8\x80\xc1\x41\xbe\x5f\x98\xfa\xe7\xe5\x1e\xfd\x4c\x3b\xe0\xdf\x95\x7b\x54\x55\xaa\xe6\x3a\xab\x23\x10\x48\x10\xe1\xe4\x34\xec\x4c\x53\x92\x85\xd3\x8b\x73\x12\xe5\x0c\x4a\x3b\xd0\x44\x4d\x48\x83\x84\xe7\x1c\x48\x56\x22\x74\x92\x1d\xd5\x9a\xa5\x99\xde\x17\xf3\x06\xef\xe8\x2f\xcc\x3b\x7a\xe7\x5e\x8a\x45\x91\x52\x31\x36\xd4\x02\xfc\xa3\x95\xb8\x93\x1a\x3f\x9c\x10\x4b\x17\x50\xac\x00\x5b\x28\xa4\x34\x17\x82\xff\x5c\xb0\xd2\x5c\xe1\xa5\x8e\x47\xe0\xdc\x81\x79\xf4\x0c\x3b\x94\xa8\x6a\x54\x24\x92\x2b\x49\x5c\x16\x20\x1e\x8e\x8e\x60\x04\x62\x59\xc5\xf4\xa6\x17\x0c\xa5\xb7\x0b\x28\x92\x50\x3e\x55\xd5\x0f\x51\x41\xa4\x49\x22\x6f\xf1\xdb\xa1\x3c\x62\xf6\xcf\xcc\xc5\xd6\x25\x99\x32\x92\xf2\x3c\x97\xb9\x75\x23\x85\xd3\xc1\xf0\x21\xa3\x67\xb2\x1c\x15\xb6\xdc\x06\x7d\x5c\x31\x6d\xb7\x1a\x50\x45\x4b\x42\x05\x26\x70\x9a\x7f\xbb\x88\x6b\xf8\xb6\xa3\x77\x53\xb6\xa0\x37\x5c\x16\x39\xbe\xad\x25\x39\xb0\x3f\x01\xef\x5d\xca\xc2\xdb\xce\x0b\xc8\xd0\xf2\xab\x53\x0d\x70\x7a\x57\xfe\x08\x0a\x6e\x2c\x9d\x39\x72\xcc\x3e\x71\xa5\x57\xd7\xe2\x40\xe4\x5a\x4e\x3c\x04\xe6\xdd\xa8\xcc\x30\xd8\xef\x76\xce\xbd\xad\xe2\x5b\x38\x5a\x55\x52\xbd\xb9\x82\x9f\xb6\xc9\xa9\xb6\x62\x0d\xa6\xcc\xbb\x74\xb8\xa7\x17\xc3\x8a\xab\xdc\xb1\xd7\xd5\xa3\x14\x94\x07\x21\x79\xe3\xe5\xa3\x2c\x12\x1e\x2d\xcf\xcf\xfa\x8d\xdc\xc0\x31\x1d\xfb\x53\x3e\x6a\xc3\xdc\x27\x5f\x51\xc5\x62\xf2\x96\x0a\x3a\x47\xab\xcb\xd1\xd5\xc5\x57\x6f\x8f\x0d\x16\x81\x55\xe7\xfc\xac\x31\xb4\xe3\x2a\x1c\xfc\xdd\x43\xe5\xb9\x93\x3a\xe8\x7a\x13\x1b\x56\x46\xdd\x11\x7c\x0f\x56\x02\x80\x78\x99\x60\x9f\xf6\x69\x0d\xe2\xc0\x45\xbd\x48\x14\x86\x6f\xb8\xea\x6f\xaa\x4e\xaa\x6f\xd2\xf8\xfa\x2e\x01\x10\xd8\xcd\x37\xad\xb2\x9d\x0f\xac\x85\x9f\xab\xda\x8d\x44\xe7\x54\xb3\xf9\xf2\x8c\x65\x89\x5c\x1a\x04\xb8\x08\xcc\xf8\xf8\xe8\x14\xc5\x86\x7c\x4a\x23\x92\x17\x09\xc3\xde\x42\xf5\xb2\x6b\x82\xb1\xb8\xa4\x74\x5c\x28\x4d\xa1\xe8\x1a\x8e\xbf\x71\x46\xad\x99\x55\x5b\xb6\x34\xc6\x79\x6e\x7d\xaa\x5a\xa2\xd2\x9c\x92\x8d\xaf\xb4\x67\x4c\xf0\xf9\xed\x38\xdb\xc5\xaf\xd9\xda\x83\x59\xed\x0e\x08\xa7\xfc\xb2\x48\x0c\xf3\x49\xe2\x5a\x8b\x57\x90\xd3\xec\x1e\x63\xb5\x0b\xa0\x09\x66\xf6\x23\x32\x2d\x8c\x10\xc7\x54\xc5\xc6\xbd\x5a\xea\xf3\x76\x81\x2e\x6d\xf3\x12\xa1\x59\x96\x70\x0c\x61\x96\xb9\xf5\x4b\x07\x06\xcd\xd5\xc7\xda\x90\x96\x8e\xb2\x4c\x37\xd9\x65\x4c\x6e\x58\x3e\x6d\x53\xa7\xa2\xab\x58\x42\x33\x0e\x7e\x9c\xd6\x52\x4c\x65\xe3\x4e\x2f\xce\xf1\xed\x26\xc3\xb1\xfb\x11\x77\xd0\xee\x8d\x73\x6f\xd8\x9e\x41\xa8\xb9\xf8\x4a\x4b\xa7\x17\xe7\x58\xda\xcb\x16\x5b\x2a\xcd\x1f\x46\x4f\xa0\x18\xe4\x58\x56\x78\xa4\x73\x33\xa2\x26\x52\xf8\x8f\x32\x51\xa4\x0c\x0b\x34\x95\xcd\xc6\x8c\xf2\x28\x96\xe5\xe8\xa5\xf5\xc4\xe8\x3a\x46\xf5\x39\x38\x08\x05\x61\x4c\x7d\xc8\x83\xf9\x00\x31\x39\xf8\xa2\xf2\x94\xa1\x1c\xe5\x84\xdb\xb2\x9f\xee\x51\x02\x1d\xa3\x02\x3a\xf3\x33\x21\xc5\xa5\x05\xd5\xb7\x97\x6f\x76\x43\x84\x77\xd5\x31\x6c\x51\x1f\x06\xf5\x0b\x33\x9a\x6b\x4e\x13\x52\xe4\x89\x73\x2b\x62\x8e\x80\x0d\xc5\x5b\xd0\x9b\xa0\xf0\xd1\x84\x90\x2f\x70\xf7\xed\xe6\xe0\x19\xc7\x06\xbe\xd6\x14\x5c\x24\xc9\x88\xcc\x38\xb4\x6c\xd7\x2c\x23\xa1\x5b\xeb\x8a\x8b\xc8\xa8\x83\x62\xec\x3b\xf2\xc0\x8c\x9c\x92\xe8\x0f\x3a\x78\x4d\x41\x66\x66\x49\x0c\xc5\x30\xe1\x13\xe6\xd0\x47\x60\xb2\x30\x5a\xec\xcb\xa4\x50\x9a\xe5\x97\xd2\x30\x94\x20\x6c\x07\x0a\x83\xd0\xf0\xe7\xaf\xb8\x88\x21\x4e\xeb\x12\x98\x4f\x44\x05\x61\x1c\x8c\x41\x66\x48\xf0\xbf\x1b\x64\x29\x91\xf2\x48\x15\xd1\xc2\x2c\xe9\x20\x93\xb1\x3a\x30\xa4\xe8\x00\x4d\x86\xea\xe0\xd8\xfc\x55\x5f\x03\x46\xe1\x04\xef\x9d\xd0\x8c\x1f\x1c\x8f\x08\x00\x08\x1c\x80\x52\x2f\x9e\x2e\x1e\xba\xb5\x82\x8e\xbe\x13\x16\x5e\x86\x23\x00\x0e\x8a\xd2\xd5\x77\xbb\xe0\x9a\xf9\xf6\xea\x68\x69\xf2\x95\x6e\xea\x04\x9f\x90\x53\x41\x58\x9a\x69\xb0\x5e\x93\x94\x51\xe7\x12\x67\x37\x2c\x5f\xea\x85\xad\x04\xe2\x08\xc8\x93\x07\xfa\x7e\x00\xaf\xf5\xae\x2f\x91\x1c\x4e\xd8\x0a\x70\x0f\xbf\x38\xac\x13\xd2\x92\x23\x3c\x59\x50\x02\x8b\xde\x09\x8c\xdf\x99\x37\xab\x20\xc4\x5b\x48\x2d\x3d\xfd\x78\xf3\xc6\x3a\x56\x10\x56\xdf\x70\x11\x2b\xdf\x4d\xd1\xc6\x7d\x5b\x78\x37\x02\x19\x66\xf8\x14\x01\xbc\x2a\x02\xb7\x15\x5b\x37\x0c\xef\xa4\xfe\x75\x43\x6d\x1c\xc0\xaa\x0e\x6f\x65\xdc\x7c\x74\x2a\xfb\x7b\x1e\x3c\xec\x83\x0d\x4a\xbb\x8b\x1d\xcb\x8a\xbb\xcb\xac\x51\x27\xd8\xbc\x1d\x1b\x40\xbf\x6e\x26\xa5\xc1\x01\xe8\x64\xf0\x0b\x58\x93\xb0\xce\x39\x99\x25\x74\x5e\xa2\x11\x50\x3d\x14\xb4\x5e\x5e\x7d\xe7\x96\xa0\x08\x6f\x16\x79\xb7\xca\xc4\xdb\xa4\xe0\x71\x09\xa5\xb5\x4f\x98\x8f\x34\xfe\xb8\x5d\x14\xf6\x83\xaf\xc7\xa6\x36\xce\x46\xbd\xd1\x90\xb7\x0e\xfe\xce\x66\x47\x03\x4c\x70\x05\xdb\x9c\x62\x0a\xf1\x53\x20\x87\x5c\x7d\x57\x41\x93\x2d\xf3\x5d\x83\xb4\xd7\x6c\x79\x2b\xf3\xe6\x5a\xec\x55\xb9\xde\xd3\x21\xf7\x8a\xd3\xc0\x9c\xf3\x12\xed\x83\xb2\xb1\xe8\xfc\xce\xa8\xba\x71\xf2\x09\x9d\xb2\x64\xfb\xd4\xdf\xd2\xcc\xcc\xbb\x8c\x7b\x45\x43\x80\x75\x9b\xa2\x2a\x82\x21\x6a\x2e\x2c\x50\xe6\x73\x2a\xf8\xdf\x31\x58\x38\x32\x24\x41\xe6\xe6\xcf\x23\x74\xbd\xa0\x19\x21\x61\x91\x3e\xb6\xa8\xdc\x48\x42\xb7\xe0\x3a\x8d\x63\x8e\x82\xc8\xc5\x16\xb4\xdc\x0c\x04\x2e\xae\xbb\x6c\x1f\x3c\x8f\xd1\x64\xb8\xd8\x3b\xde\xbb\x0d\x67\x7d\xfb\x71\xdc\xec\x03\x6e\xc1\x2e\x8a\x7c\x43\x78\xd8\xc6\xf7\x53\xca\x6d\xb3\xe0\x2e\xd0\xb5\x98\x43\xad\x84\x69\x08\xa4\x59\x9f\x1f\xed\x1e\x0e\xcb\x5e\x00\x67\x29\xe5\xbb\x42\x0c\xaf\x3d\xb6\x2c\xa5\xba\xc8\xb9\x6e\x64\xbf\x9b\x5f\xe4\xe2\x9b\x62\xca\xac\x47\xbd\xf3\xeb\x02\x02\x2b\x4f\x2f\xce\x1b\xc1\xd2\x0f\x9b\x05\xbb\x87\x9d\xa0\x91\xd2\x48\x21\x68\x3a\xe5\xf3\x42\x16\x2a\x59\x86\x66\x5c\x0a\x01\x01\x13\x42\xce\xd1\x8e\x25\x0e\x35\xa1\x42\x8a\x65\x6a\x1f\x15\x51\x52\xc4\xac\x32\x22\xf8\x4d\x6f\x24\x8f\x09\x2d\xb4\x4c\xa9\xe6\x11\x89\x24\xcb\x23\xf0\xb1\x86\x23\x15\x8a\x11\xba\xe6\xdd\xa8\x50\x5a\xa6\x24\xa5\xb9\x5a\xd0\x24\x59\xb7\xc7\x3d\xf0\xf0\x4d\xc5\xda\xc7\xb0\xfe\xb5\x3f\xde\xe0\xac\x77\xc4\xef\x2d\xb5\xe9\x5b\xe0\xb7\x99\xdc\x5e\x03\xdc\xac\xc7\xd2\x16\x63\xd8\xaa\x08\x8d\xf5\x9e\x2a\x08\xf7\x61\xc1\x48\x56\x4c\x13\xae\x40\x33\x05\x4a\xb4\x24\x53\xb6\xe0\x36\x3a\x7b\x3b\x09\x5a\xbb\xc5\xdb\xe0\xbc\x89\x06\x6c\x85\xd0\x06\x92\xbd\xf1\x5d\xcb\xd2\xce\x53\x3a\x6f\x21\x80\xbf\x31\x04\x9b\x8a\xa5\xe7\x84\x50\xe4\x54\x8d\x88\xcc\x6d\xc4\x8e\xef\x49\x6f\x7f\xf2\x85\x72\x73\xf2\xde\x82\xce\x86\xce\x5b\x7c\x87\x84\x0a\x96\xcf\x64\x9e\x1a\x00\xf3\x9c\xcc\x0a\x01\x06\x4a\x65\x23\xed\x81\x4b\x58\x1b\x17\x4d\x94\xf4\x67\x19\xf6\x42\xb8\x49\x10\xaa\xc8\x2d\x4b\x92\x09\x39\x4d\x12\x5b\x7d\x35\xa8\xb3\x51\xe6\xca\x97\xf1\x1c\xd3\x25\x89\xf9\x9c\x29\x4d\x8e\xae\xfe\xf3\xf4\x18\x44\x14\xb0\xff\x2c\x89\xa6\x2e\x55\xb0\x6a\xd7\x02\x61\x27\x2e\x40\x28\x8a\xa8\xa6\x89\x9c\x63\x48\x03\xd8\xc8\x45\x4c\xb2\x84\x2e\xa1\xb5\x42\x46\x73\x88\xf6\x8d\xd0\xb6\x45\xf2\x42\x40\x51\xe9\x7b\xe5\x5d\xdb\x89\xca\xa6\xba\xcf\x63\xc0\xc9\x1d\x89\xc6\x96\xea\xba\x77\xcb\x14\x73\x96\x25\x74\x8d\x35\x66\xe5\xc0\x97\x89\xe0\x46\x3d\x00\xd5\x5f\x0a\xe6\xc7\x98\x90\x2b\xc4\x9d\x94\xea\x08\xfd\xc9\x3f\xa5\x4c\xd3\x98\x6a\x3a\x31\x3a\xf4\x4f\xd5\xac\x44\x99\xc4\x66\xa0\xf5\x1b\xbd\x66\xce\x28\x1c\xcb\xed\x44\xea\x8d\x91\xe0\xfd\xe3\xa0\xd7\xb8\xf3\xb8\xd1\xfc\xb3\x27\x7d\x82\xe5\xbf\xfa\x64\x54\xd8\x8d\xfe\xcb\xca\x5c\xeb\x2f\x55\xad\x33\x49\x75\x25\x16\x5b\x53\x06\x25\x3a\x3f\xd8\x2e\x54\xee\x0e\x98\x9e\x4f\xdf\x9d\xad\x37\x13\x6e\x37\xb5\x6c\x31\xad\xd4\xe5\xd3\xb5\xd3\x73\x86\x79\xfb\x4b\xd5\x33\xe3\x52\x91\x20\x79\x13\x13\x7b\xa8\xf0\x9c\xc3\x15\xe7\x4f\xc0\x62\x10\xa6\x9d\xe2\x7b\xeb\xed\x4a\xad\x5c\x63\x6d\x1c\x62\xdb\xb2\xfc\xc6\x7e\xb2\x6b\x1f\x6a\xe7\x1f\xdb\x9a\x89\xb7\x2e\xd3\x0e\x21\x0f\x89\x39\xce\xb4\xec\x81\xdd\xd6\x9f\xd8\xd2\x2e\xe6\x96\xda\x61\xa2\x7e\x2b\x2b\x41\x5f\xd7\x6c\x79\x68\x75\x44\x83\xe9\x0b\x9e\x61\xaa\xa8\x75\xdf\xd8\xdd\x25\xdf\xd1\x84\xc7\x7e\x08\xc4\xea\x73\x31\x22\xef\xa4\x36\xff\x7b\xf5\x89\x2b\x8d\xba\xf6\x99\x64\xea\x9d\xd4\x70\xa7\x97\xa5\xe2\x14\x3a\x2c\xd4\x6a\xfb\xe8\x01\x80\x73\x15\xd8\x04\xdc\x82\xce\x67\x15\xc9\xc8\x3c\x7d\x2e\x8c\x44\x60\x57\xe4\x53\xa8\x95\x1d\xc2\xe5\xff\x08\x29\xc6\xe0\x1b\x68\x1c\xc3\x02\x42\xe6\x15\x38\x6c\x18\xce\x0e\x85\xc1\x97\xf0\x0b\x57\x8e\x88\x7b\x9e\x4d\x9d\xb9\x92\x47\x24\x65\xf9\x1c\xbc\x5d\xd1\x16\x6f\x4f\x5b\x13\x6e\x2b\xc3\xed\xd6\xbd\x02\x92\xf9\x66\xad\x95\x66\x65\x93\x82\xe7\x91\x2c\xa5\x68\xba\xf9\x87\xa1\x3e\x00\xa9\x7f\x41\x1e\xbd\x9a\x90\x53\xd7\xe2\x27\xfc\xcd\x7a\xfd\xc2\x61\xcc\x08\x5c\x11\x43\x4a\x6e\x68\xc2\xb0\xc3\x01\x15\x3e\xd7\x4d\xce\x56\x08\xfb\xc8\xe6\xd3\x9b\x33\xeb\x45\xa6\x83\x6b\xb6\x3c\x18\xad\x6c\xed\xc1\xb9\x38\x28\x13\x1e\x2b\x9b\xe9\x89\x28\x48\x5b\x07\xf0\xdb\xc1\xee\xbc\x60\x23\xb1\x6c\x6f\x4b\xda\xba\x6f\xea\x9a\x37\xbb\xfe\x1b\x85\x8d\x23\x75\x0c\x66\x0f\x81\xbd\x96\x64\x0e\x66\x60\x73\x37\x2c\xad\x62\x44\xd5\x6b\x9e\x65\x65\x25\x9a\x22\x9b\xe7\x34\x66\x64\x9e\xd3\x6c\xd1\x55\x2c\x41\xd9\xa6\x69\xf8\x27\x23\xe8\xae\x01\xfe\x06\xdd\x70\xe3\x7b\xb7\x6c\xba\x90\xf2\x1a\xd2\x10\x01\x11\xee\xd0\x92\xf1\x3d\x7e\xeb\xac\xbc\xe7\x94\x52\x45\x62\xa6\x29\x4f\x20\x8e\xe6\xfd\x9b\xb7\x36\xd2\xc6\xf1\x71\x37\xcb\xe6\xa0\x95\x1e\x14\x00\x1a\xdb\x08\xb0\x4b\x76\xc3\xd9\xad\xb5\x6f\xac\x8b\x91\x19\x93\x39\x13\x10\x18\xb2\x21\x80\x6a\x4c\x14\x8f\xd9\x2b\x48\x7a\x5e\x3f\xd0\x1e\x0e\x87\x35\x73\xde\x76\x78\x37\x53\xf0\xad\xd4\xbb\x05\x97\xf5\xea\xef\x85\xcc\x37\x14\x61\x6a\x97\x83\xdd\x2e\xbf\xda\x46\xf1\xbf\x20\xbf\xff\xfd\xef\xd6\x3e\x94\xd2\x4f\x3c\x2d\xd2\x17\xe4\x0f\xff\xf6\x6f\xbf\xfb\xb7\xf5\x8f\x71\x81\x8f\x3d\x5f\xbf\x3e\x7b\xda\x5e\x5e\x9e\x3d\x02\x78\xc7\x3e\x92\x71\xb3\x33\xb3\xc5\x50\x33\xca\x93\x22\xb7\x31\xb4\x2d\x55\x84\xd7\xe1\x3b\xe0\x88\x2a\x93\x4e\xa8\x1b\xd1\x05\xda\xd9\x00\xbc\x19\x17\x4c\x41\xf3\x9c\x42\xe4\x2c\x92\x73\xc1\xff\xce\x62\xd7\x3b\x07\x02\x62\xa0\xca\xbe\x43\x71\xc2\x44\x8c\x3d\x4c\x0d\xcf\x5b\x50\x11\x27\x9b\x02\x25\x5a\xac\x34\x3c\xc1\x7b\x81\x0c\x38\x4f\x27\x80\xbd\x2d\xdf\xa8\x81\x0b\x3a\xb1\x5a\xb7\x1d\x72\x34\x04\xdb\x5e\x2b\x45\xc2\x78\xb5\x41\xb1\x6e\x98\xe3\x8a\xde\x87\x2a\x2b\xdc\xfb\xb9\x60\xf9\x12\x12\x6c\x4a\xc1\x3e\x08\xc2\xfb\x50\xd6\x6f\x70\xcb\xb0\x12\x15\x16\xd0\xa9\xe9\xc2\xa5\x10\x53\x86\xc9\xd4\xbe\x0d\xef\x30\x0c\x3b\x70\x5e\x33\x72\x4a\x44\x91\x24\xeb\x1e\x15\x72\x93\x7f\x2d\x84\xdd\x16\x55\xb2\x9d\x8e\xd7\xd6\x2c\xd0\x00\xe9\x7b\x35\x0e\x84\x0b\xef\x49\x94\x7f\xdc\xe6\x82\x70\xc1\xad\xe2\x69\xdb\xc7\xd2\xb6\x2b\x13\xd4\xc2\x8c\x80\x57\x97\x60\xdb\x96\xc5\x7d\xee\xd2\xb0\x80\x57\xa7\xb8\xa6\x76\x46\x86\x86\xa9\x3f\x3a\x53\xc3\x0e\x8b\x6f\x63\x76\x68\x58\xfa\x60\x7c\x58\x01\x78\xdb\x28\xb2\x0e\x11\x64\x2d\x77\xb2\x85\x51\x02\xaf\xc1\x34\xd1\x89\x13\xb5\x20\xcc\xdd\xcc\x14\xad\x77\x35\x67\x5c\xdc\x48\x2c\xb2\xdd\x49\x86\xbb\x5c\x79\xb1\x26\xca\xdd\x02\x65\xb5\xb2\x9c\x17\x7e\x43\x91\xd6\x28\xb4\xa4\x50\xdb\x8d\xdd\x9b\x57\xb0\x39\xef\xa6\x17\x1d\xa4\xba\xf2\x22\x61\xdf\x73\xbd\x78\xef\x8a\xea\x5b\xac\xd6\x45\x96\xc0\x62\x83\x1f\x0c\x0a\x5d\x96\x92\xe1\x39\xb6\x71\x63\x91\x4c\x53\x26\x62\x0c\x22\x4a\xe9\x35\x23\x65\xab\x50\x23\xe3\x81\x18\x0c\xc3\xb1\x4f\x19\x15\xa5\x9c\x78\x63\x68\xf9\x26\x8c\x6a\x89\x4f\x6d\x79\x6d\xeb\x84\x96\xcd\x89\x2c\x41\x26\x4a\x25\x61\x85\x4c\x59\x22\x21\x05\x1e\x23\x6c\x31\x06\xdc\xe5\x80\x18\x92\x6c\xef\x5a\xae\x67\x0b\x6e\x32\x31\x2f\xeb\x78\xa9\x04\x9a\xfa\x5a\x0a\x2c\x05\x9b\x90\x4b\x2b\xc2\xb4\x93\x8a\xda\x90\xd3\x96\xa4\xb4\x03\x43\xfc\x34\x2e\xab\x65\x8c\x8d\xb0\x3b\xb6\xb3\xd1\x32\xe5\xd1\xb6\x4d\xd9\x6e\xeb\xc0\xab\xbe\x2d\xee\xbd\x70\x63\x6e\xdc\xbd\x36\x5b\xe3\x1e\x1e\x36\x67\xcd\xe5\x5b\x6d\x74\xdb\x9b\x2a\x31\x29\xf9\x91\xdf\x98\x1a\xd9\x8c\xb0\x59\x35\x18\x09\xc7\xe4\xe5\xe5\xab\xd3\x0f\xaf\x46\xe4\xdb\x8b\x33\xf8\xff\xd9\xab\x37\xaf\xcc\xff\x5f\xbe\x7f\xf7\xee\xd5\xcb\x0f\x46\x82\xf9\x02\x9b\x06\x18\x05\xd2\x6c\x8d\xe1\x84\xb2\x4a\xa7\xa8\x58\x92\x59\xa1\x0d\x21\x2a\x3f\x56\x99\x05\x45\xeb\x03\x8d\x63\xa3\xac\x3e\x39\x04\x68\x06\x78\xdd\x60\x13\x76\x4b\xc1\x3e\x0b\x36\x45\x6e\xbb\x80\x76\x3f\x18\xd6\x3a\xc9\xa4\xb2\xde\x83\x1d\xb3\x4b\x3e\x0a\xf2\x5a\xe6\xc4\xf6\xa6\x83\x66\xa5\xb1\x3a\xb4\x39\x3c\xe6\xdf\x13\xbc\x75\x92\xc8\xf9\xa1\x4f\xed\x61\x24\x91\x73\xa2\x8a\xa9\x4f\xb9\x02\x21\x00\x9e\xfe\xc2\x3d\x56\xc9\x54\x19\xf9\xbc\xab\xe0\x2d\x3f\x78\xe5\x9d\xf0\x81\x70\xdc\x13\x68\x28\x57\x79\xd2\xdc\xa8\x0f\xf8\xc5\x49\xf3\x0c\x9c\xbc\xc7\xf3\xda\x1b\x1f\x85\xc1\xf5\x5b\x9e\xc4\x11\xcd\xe3\x15\x84\x07\x9e\x8c\xf8\x02\xd0\xc3\x2a\xcb\xd8\xfc\xbb\x1c\xdc\xd6\x46\x91\x37\x2c\x4f\x68\x86\x09\x01\x50\xe6\x1a\x22\xa6\xe0\x23\x67\x2c\x63\x90\xf6\xe6\x9a\xd3\x33\x11\x25\x12\xca\xb0\x20\x43\x1f\x55\x97\x8e\x11\x54\xae\x56\xa5\x4b\xbe\xf4\xc7\xeb\xe0\xf3\x24\xb0\x10\x47\xde\x09\xf5\x31\xf2\x7c\x6d\x21\x20\x9f\xe3\x83\x8a\xb2\x97\xf6\x19\x39\xb0\x19\x89\x07\x23\x72\xe0\x6b\xdd\xc4\x56\x33\x38\xf8\xe2\xa0\x7c\x20\xcc\x69\x03\xc5\xc0\xba\xc1\xc6\xf0\x9d\x30\x7b\x16\xb0\xc3\x39\xeb\xfc\xa7\xcb\x7a\x45\x86\x23\x5b\xc3\x1d\xcc\xa1\x3a\xd0\xa4\x32\x91\x95\xaf\x96\xe9\x98\x5b\xbf\x68\xa6\x1f\xbc\xae\xa1\xfc\x01\xa6\x75\x5a\xe0\xe4\xcc\x6c\xa5\x0b\xc2\xbb\xaa\x60\x9e\x77\x36\x86\x05\x95\x78\x4e\x32\x9a\x1b\xf5\xcb\x3d\x59\x6d\x89\xf7\xc5\xd6\x86\x78\x2d\x30\x28\xf0\x29\xb5\xd4\x54\xae\xfc\x1b\x2f\x13\xaa\x54\x83\xb5\x19\xa8\x88\x19\x98\x30\x1c\x99\x50\xe7\x70\x83\x7a\xe7\x0b\x7a\xb3\xa1\x20\x46\x8b\x49\x6b\x9a\xcf\x99\xde\xec\x0d\xa2\x62\xf9\x7e\x63\x09\xbd\x71\xeb\xa2\xbd\xe3\x76\x47\xb1\x72\x08\xb9\xd0\x63\x99\x8f\xf1\x95\x17\x44\xe7\xc5\x3a\xbf\x9e\xe6\x29\x93\x85\xbe\x62\x91\x14\xcd\xd9\x2f\xf6\xb9\xde\xdc\x5b\x1d\x52\x82\xac\x87\xf5\xd4\x09\x30\x61\xd1\x4b\xa7\x8c\x96\xd2\x8d\xf3\xaa\x56\xcb\xf6\xbc\x7f\xf3\x76\x9f\xcd\x26\x90\x36\xbf\x79\x27\xbf\xb3\x3c\x43\xcc\xfd\x4c\xed\xcc\x37\xbe\xf6\xb6\xd0\xdd\x5f\x7a\xe9\xbd\x75\x9b\x9f\xb6\xc0\xd8\x5c\x7a\x65\xed\xfa\x95\xa6\xba\x58\xc1\x86\xca\xde\x58\x62\x79\x85\xe9\x87\x56\x15\xb9\x82\xf7\x42\xc3\xe6\x6a\xbd\x09\xac\x61\x03\xcf\xb9\x00\xcd\x09\xb1\x2f\x9a\xf3\xa9\x73\xca\x51\x69\xa6\x91\x2e\x20\x8f\x9d\x6a\x1b\xcc\x69\x0b\x2e\xfd\xaa\x69\x19\x8d\x6a\xf2\x26\xd5\x38\x62\xb9\x56\x6f\xa8\xd2\xdf\x66\x31\x5d\x93\xe9\x56\x0b\xd2\x54\x1a\x0e\x0c\x8a\xf4\xb7\x82\xc5\x86\xc2\x5b\x10\xe0\x78\xe4\xd6\x90\xde\x02\x47\x5c\x1b\x7a\xb0\x16\xe5\xdc\x01\x32\xaf\x8f\xcd\xa7\x9a\x67\x7d\x29\x0d\x4c\x4e\x1b\x09\x50\x35\x3c\x65\xdb\x6c\x0d\x3b\xc9\x61\x34\x22\xd8\xa7\x26\x2b\xc3\xfe\x33\x4e\x18\x15\xcd\xc9\x06\x35\x8c\x82\xe7\xba\xe3\x90\xfd\x00\xb9\x5d\x70\x23\xef\x62\x46\xa0\x22\x4e\xfe\x8a\x59\xc2\xd6\x24\x06\xee\x19\x3e\x6b\xbf\x70\x66\x3f\xd0\x2a\xb4\xeb\xa2\xfa\x8e\x77\x62\x58\x09\xde\xa6\x9e\x94\x92\xb6\x95\x1e\xbc\xbe\x56\x5f\x15\x88\x2f\xd3\x44\x46\xd7\x58\x80\x0e\x6a\x3f\xf0\xbf\xb3\xdc\xc5\xda\x97\xcd\xe7\x6c\x47\xb4\xb9\xeb\xf6\xea\xe0\xe6\xda\x5f\xc1\x28\x66\x6c\x03\x40\x3f\xbe\xcc\x4b\x6b\x6a\x21\x6c\xa6\xe5\xfd\x84\xeb\x3a\x2d\x07\x72\x14\x2a\xde\x92\x55\x85\x07\x6b\xd5\x40\x7d\x4c\xab\xac\xd2\xd4\xe6\x06\x9d\x7c\xb3\x3e\x8f\xa6\xd7\x10\xdc\x4d\xd9\x3c\xf8\x04\x80\x4f\x44\x1b\x4b\x1b\x6d\xcc\xfb\x69\x6b\xed\xdb\x92\xdf\x43\xda\x4b\xf8\x7e\xca\x6d\x46\xeb\x35\xa0\xb2\x77\x0f\xe7\xda\xd4\x87\xf2\xea\xe2\xb7\x6c\x5b\x98\xb7\x93\x67\x4d\x74\x29\xa0\x5a\x2d\x34\xe3\xd5\x0e\x9b\xc5\x8b\xd1\x07\x33\x99\xaf\x55\x60\xfa\x9b\xfc\xe6\x6c\xb0\xad\x03\x19\xe9\x73\x7d\xbc\xde\x6a\xc2\x92\xa1\x5e\xfe\x95\x11\xa1\x64\xc1\x95\x96\xb9\x75\x27\x42\xf3\xba\x9c\x42\x73\xdd\xe6\xb8\xb7\x7e\x22\x00\x5f\xfa\x29\x10\x9a\x65\x8c\xfa\xbe\x56\x96\x37\x41\x63\xaa\x9c\x45\x32\x8f\x1b\x27\xe6\x4c\x03\x8d\xb2\x54\xe3\xe7\x7b\xc8\x6c\x4d\xa8\xd2\x1f\xfc\x1c\x8c\x80\xd0\x92\x1a\x57\xc5\x1f\xbb\xc4\x72\x35\xae\xf4\x8f\x14\xe5\x8f\x92\x50\x81\x26\x91\xfd\x64\xf0\xed\x42\x46\xb9\x36\x94\xe6\x76\x5a\xd7\xad\x97\xdc\x82\x25\xde\xcf\xcc\x53\xa6\xd4\xc6\xe4\xaa\x5a\x60\x0a\xd4\x90\x26\xbe\x86\xb4\x7d\xdd\x31\x7b\x14\x10\x30\x04\xd5\x55\x79\x5b\xae\x47\x35\x02\x62\x02\x1a\x14\xfc\xb1\xda\x6b\xcb\xb2\x05\x55\x6d\x17\xe3\x4f\x91\x0f\x6b\x6e\x7d\x1c\x5a\xce\x26\x67\x54\x6d\x4a\x34\xad\xc1\x76\x9a\x73\x36\x23\x2f\x69\xca\x92\x97\x54\xf5\x09\x5c\xa0\x00\x13\xc2\x26\xf3\x09\x39\xbc\x0c\x3c\xcc\xef\xa4\x7e\xbb\xa9\xc7\xc7\x96\xf2\x0f\x6d\x4e\xf4\x9d\x9e\xe5\xbd\x95\x84\xed\x27\x77\xcf\x33\xbb\xf7\x0c\x37\x9c\xd0\x47\x71\x36\x37\x67\x4b\xaf\x3b\x8f\xd5\x93\x58\xe4\x60\xf1\x8b\x76\x3d\x91\x5b\x12\x38\xd7\x9d\xc2\xc7\x7c\xfe\xb6\x2c\xc9\x0f\x71\xd5\x68\x32\x59\x59\xdd\x87\x8a\xe6\x0a\x3e\x83\x30\xa8\x10\xca\xc3\x9b\x99\xbe\xbc\xfa\xae\x4f\xb1\xe5\x61\x4b\x15\xd8\x0d\x5c\xfb\xfb\x06\xb9\x7c\xbc\x99\x0b\xef\x5b\x06\x21\x06\x2f\x8d\xc1\x80\xfb\x0c\x3a\x39\x73\x5f\xb5\xb6\x0e\x5f\xd9\x19\xfe\x9a\xd9\x0e\x7a\xf6\x99\x0a\x7e\x1c\x41\xaf\x42\x76\x83\x0d\x42\x21\xc9\x85\x11\xc1\x94\x39\x14\xc7\x1b\x3e\xdf\x52\xa1\x6a\xa7\x4c\x6d\x57\x74\xb7\x2a\xb1\x64\xfb\xd6\xba\x87\x36\x6d\x30\x5e\x6d\x75\xb6\x16\x3a\x71\x07\x65\x6d\xbb\xc6\xd3\x61\xb0\xad\xe2\x5f\xc7\xf1\x9a\x0d\xb8\xf5\xab\x56\x49\xda\xbc\x72\x09\x44\x1a\xbd\xca\x91\xa1\xc0\x11\xd4\x17\x47\xda\x6d\xc9\x53\xd5\x7e\x7b\x59\xa7\x81\x10\x62\x59\xc5\xf0\xbe\x96\x55\x14\xbc\x3f\x98\x6f\xad\x3f\xd2\x7a\xbc\x47\x50\x4c\x65\x2b\x02\xdd\x6d\x71\x06\xbc\xb6\x61\xdd\xc3\xe3\x5b\x9b\x4a\x59\x1b\x71\xec\x8e\xea\xda\x28\x96\xdf\xb0\xb8\xe2\xa9\xb3\x75\xfe\xab\xf7\x02\xbf\x6d\x39\xbe\x05\x3b\xf9\xc7\xbf\x7e\xf5\xab\xf1\x78\xfc\xab\x32\xa4\xec\x05\xa1\x19\x67\x9f\x34\xc3\xa8\xc3\xc9\xf5\x9f\xa0\x99\xd3\xcd\xf3\x5f\x01\xc2\x91\x97\x60\x6d\x76\x66\xd6\x33\x9f\x35\xf9\x2b\x97\x75\x6a\x3e\x42\x85\x90\x3a\x8c\x82\x8a\xa4\xd0\xb9\x4c\x12\x96\x8f\xe7\x4c\x4c\xae\x8b\x29\x9b\x16\x3c\x89\x59\x0e\x83\xbb\x4f\xdf\x3c\x9b\xfc\xfb\xe4\xd9\xaf\x88\xcf\x31\x35\x92\xbd\xd2\x34\xcd\x5e\x40\xb2\xcb\xaf\x2c\xc6\xb9\xea\x7d\x59\x42\x85\x9a\xf8\xd0\xf6\x49\x24\x73\x26\xcd\xff\xd2\x5f\xa9\x8c\x45\xe6\xdb\x78\xd0\x48\xe3\x33\xd6\x74\x66\xa7\x68\x6b\xd5\x95\x60\x1a\x13\x99\xa4\xf0\x6f\x5c\xba\x2d\x37\x78\x91\xd8\xda\x85\x09\x57\xfa\x9b\xfa\x2f\x6f\xb8\x42\x76\x99\x25\x45\x4e\x93\xea\x54\xe1\x07\xb5\x90\xb9\xae\x94\xe5\x1d\x13\x8e\xac\x51\x71\x31\x2f\x12\x9a\x57\xde\xfa\x95\x8b\x79\x28\xcd\x75\x86\x4b\xde\x54\x42\x00\xc7\x95\x00\x61\x2e\x34\xcb\x5f\xca\xa4\x48\x43\xeb\xd8\x78\x55\xae\x9c\xf1\x5c\x69\x5b\x0f\xb1\xea\x54\x68\x92\x8b\xe1\xfb\x01\x8e\xfe\x4d\x49\x01\xee\x42\x32\x31\xe0\x9e\xac\x7f\xe9\x87\x67\x3f\x06\xef\xe1\x1e\x56\xe5\xd5\xc6\x53\xd2\x30\x63\x9a\x65\xb9\xbc\xa1\x58\xcd\x71\xc3\x5c\xdc\x73\x2b\x9f\x3d\x5d\xfd\x61\xcd\xb7\x9b\x87\xac\xf8\xe8\xc2\x21\x2b\x3f\xe8\x86\x4a\x97\xf8\xf0\xcd\x73\x9a\x64\x0b\xea\x72\x2b\x55\xb4\x60\x29\x2d\x37\x49\x66\x4c\x9c\x5e\x9c\x7f\xf7\xbb\xab\xda\x0f\xcd\xb5\x2f\x0d\xca\xf9\x74\xc2\xa0\x0b\x03\x75\xba\x98\x4f\x07\x29\x4f\xc0\xca\x34\x57\x84\xbc\x66\xa1\xce\x48\xe5\x78\xc6\x6b\xb7\x0d\x74\x82\x5b\xeb\x84\xab\x80\xc8\xd4\x08\x5d\xb5\xdf\x5c\x19\xa7\x5a\x59\x99\x45\x78\x16\x5b\x98\x95\xd1\x3b\xce\xcd\x53\x2e\x5a\xd8\x35\x4d\x88\x41\x46\x96\xfb\xca\x4f\x98\xba\xaa\x49\x90\x73\x89\xa3\x29\x57\xcf\x11\x52\xac\x34\xc4\x2d\xe4\xc2\x35\x8d\x1e\xf9\xde\xf7\x39\x33\xe3\x56\xb3\x36\x5d\x1a\x4a\x43\x4b\xbc\x39\xd7\x8e\x84\x46\x32\x4d\x0b\xc1\xf5\xf2\x04\xa8\x21\x9f\x16\x66\x37\x4e\x62\x76\xc3\x92\x13\xc5\xe7\x63\x9a\x47\x0b\xae\x59\xa4\x8b\x9c\x9d\xd0\x8c\x8f\x61\xb2\x02\x03\x70\xd2\xf8\xd7\x9e\x8e\xd7\x95\xce\xb5\x1c\xa6\x49\x46\xa8\xc2\x1a\xea\xe9\xf1\xa0\xb7\x3d\xb6\xdf\xae\xd4\xa8\x85\x2a\xc9\xaf\xae\x3e\x94\x2e\x46\xac\x8e\x04\x10\x0e\x9c\x6c\x25\xb0\x0d\xa0\xa0\x77\x91\x2d\x0a\xef\xd2\x59\x7d\x12\x2b\xf4\x04\x48\xb8\xd1\x49\x54\x31\x4d\xb9\x56\x2e\xca\x12\xa3\x0e\x5f\x02\x07\x81\xba\xa2\x68\xa9\x99\x90\x73\x51\xea\xf7\x77\x0e\x6a\x88\x0a\x1a\x1b\xf0\xb5\x07\x76\xc8\x00\x57\x5f\x68\x50\xa4\x1c\x8b\x5a\xbb\x3b\xc1\x19\xbf\xca\x58\xe4\x4f\x83\x3f\xd3\xa7\x58\x5f\xdf\x36\x72\xf0\x81\x9c\x12\x3b\x92\xc3\xcb\x2b\x21\x05\x1b\xf4\xba\xf5\xba\xdc\x98\x34\xd0\xd3\xea\x4f\x0d\xb1\x0b\xe3\x76\x6c\x84\x6c\x51\xc8\xdc\xa7\xb7\xdb\x81\x1c\x6f\xb0\xda\x31\xf4\x45\xf0\x0c\xc3\xe6\xa0\x80\xae\x2c\x42\xd8\x42\x5e\x46\x10\xa2\x6c\x20\x7b\x70\xea\x8a\x41\x62\x2f\x81\xb7\x54\x14\x34\x69\x0c\x60\xdb\x28\xdf\x39\xd8\xac\xaf\x29\xb1\xae\x1a\xf2\x7a\xd0\xf5\x5a\x9f\x62\xe3\xec\x6d\x8e\xf8\xc6\xb2\x1a\xeb\x02\xbc\x10\x1b\x3b\x97\xe3\x08\x7a\x0e\xac\x73\x69\xee\x13\x83\x74\x10\x9e\xa9\x95\xb0\x11\x64\xa0\x9b\x43\x47\x94\x66\x99\x2a\x0b\x73\x68\x49\x22\x99\x66\x09\xd3\x55\xde\x0b\x11\xbd\xdd\x62\x94\xea\x01\xbb\x3b\x9e\x54\x5b\xa7\xe5\x6a\x8d\xbf\x76\x8c\x96\xdd\x2e\xe7\x4f\x6b\x26\x0a\x43\x85\xaf\x2a\x95\xe3\xd7\xb4\xfc\xad\x1e\xc9\xf5\xef\x86\x75\x19\x31\x03\xb7\xda\x5d\xca\xc5\x98\xb8\xca\xd2\xb1\x0d\x4c\x8d\x83\x54\xbd\xf5\xa1\x25\x7b\xc6\xe9\xac\x97\x55\x9a\x97\x59\xe6\xd1\xac\x74\xca\x5d\xf3\xfe\x56\xb5\x10\x92\x14\x37\x45\xe3\x55\x39\xf9\xb9\x05\x68\x6e\x7b\x8a\x52\x92\x71\x86\x81\xf7\x5e\x1c\x02\x80\x31\x1a\xdb\x9b\x86\xe1\xe5\xcc\x07\x97\x5b\x7b\x37\x0c\x50\x8a\x4b\xd0\x03\x8a\x62\x94\x3b\xf9\xaf\xab\xf7\xef\x4e\xbe\x96\x36\x81\xd2\xb6\x99\x01\x4c\x4e\x21\x1e\xde\x75\x53\x89\x99\x32\xe8\x79\x05\xc6\xf3\x94\x0a\x3e\x63\x4a\x4f\x7c\x5d\x14\xf5\xc3\x97\x3f\x4e\xc2\xbc\x82\x91\x2b\x84\xef\x85\x0a\x8b\x1a\x40\xca\xcd\x62\xca\x92\xa2\xbe\x81\x6d\x26\x5d\xd7\x99\x5b\x98\xac\xa6\xd7\x86\x7e\xe3\x64\x0b\xa3\xcb\x5c\xb3\x17\xe4\x00\x55\x13\xff\xe9\x7f\x18\x31\xfc\x5f\x07\xe4\xe8\x16\x42\x9e\x0f\xcc\x9f\x07\xf8\x41\x2f\x03\x86\x8d\x97\xca\x0f\x63\xa0\x74\xce\xe7\x73\x96\x5b\xdf\x11\x98\x55\xa1\xbf\x0c\x87\x96\xb1\xe5\xc3\xc2\xf6\xdf\x2b\xeb\x8c\xd6\x27\xf2\xc3\x97\x3f\x1e\x90\xa3\xea\xba\x08\x17\x31\xfb\x44\xbe\xf4\xee\x87\x4c\xc6\xc7\x36\x2a\x4b\x2d\x85\xa6\x9f\xcc\x98\xd1\x42\x2a\x26\x30\xe4\x5b\x4b\x6c\xf9\xa3\x24\x78\xb6\x92\x64\x8c\x52\x42\x4c\x6e\x31\x55\xda\x81\x12\x53\x8f\xa1\x4c\x53\x55\x42\xc6\x76\xcb\xf0\x35\xb3\x6d\x73\x30\xad\x18\xe9\x0b\x7b\x02\x61\x56\x44\x58\x19\x4a\x15\xb8\x49\x86\xf4\x2d\xa8\x00\x37\x8b\x6d\x25\x64\xe4\xa9\xc9\x3a\x9f\xe4\x56\x8c\xdf\x64\xd2\x6a\x10\x5b\xdb\xb4\xa4\xbe\x27\xa1\xb0\xf5\x12\x37\x19\xcc\x1e\xb4\xeb\xf6\x5e\x2b\xda\x18\x7d\xb4\xba\x2c\x0c\x39\xba\x87\xb5\x41\x6f\xe2\x93\x9d\x97\xe6\x44\xea\x2e\x9c\xe0\xf0\x0a\x0f\x7c\x54\x7f\xdb\x1c\x17\x8c\x38\xb4\x4a\x6b\x40\xe1\x52\x1a\x23\x09\xa4\x62\x79\xe7\x68\x6c\x00\x08\x5e\xdb\x68\x39\xb6\x76\xb9\x31\x15\xb1\xf9\xb7\xe2\x4a\x9b\xfb\x3b\x43\x6c\x83\x21\xb4\x0a\xa5\x6f\xcf\xcf\xee\x07\xb9\x0b\xbe\xe3\x69\x9d\x16\x22\x4e\xd8\x1b\x29\xaf\xd7\xa4\x3f\x57\x16\xf4\x55\xf8\xb4\xf7\xce\xa1\x96\xc6\xc5\xd8\xc7\xd0\x06\x5a\x2e\xc9\x8a\x04\xc9\x6b\x21\x32\x1a\x5d\xd3\x39\xb3\x1f\x05\x36\x62\x8b\x1a\xa0\xa6\x0c\xaa\x40\xaf\xb5\xf4\xd6\xce\x1e\xad\x01\x76\x9e\x6b\xa6\xe9\xf8\xa2\x2d\xb5\x40\xdd\xbc\xb7\xcf\xb7\x17\xbf\x72\x45\xc2\xbd\x64\xb3\xb5\x0f\xfa\xd6\x00\xeb\xf2\x4f\xc6\xd0\x06\x6e\xed\x8f\xae\xf8\x73\xe3\x03\xdb\x7d\x88\xf5\x79\xb6\x8d\x6e\xaa\xbd\xe6\x76\xc4\x11\x0c\x0b\xe5\xca\x63\x70\xc7\xee\x02\x74\xee\xbb\xa5\x0a\x28\x50\x72\x63\x23\x73\xee\xa5\x0c\xd4\x76\xb1\xb9\x61\xbd\x3b\x08\xcf\xe1\xc4\xb7\xfa\xed\xb6\x0a\xd2\x0d\x73\x1a\xc4\xe9\x41\x9c\x7e\xe4\xe2\x74\xa7\x33\xb0\x3d\xf4\xe0\x69\x08\xd8\x9d\x16\xbd\x3d\xda\xfe\x51\x8a\xdc\x9d\xd7\xd8\x22\xf8\xff\xd1\x0a\xe1\x9d\x16\xdb\x52\x20\x6f\x5a\xf2\xe7\x2c\x96\x77\x82\xe1\xd6\x78\x98\x47\x28\xa8\xb7\x5e\xe0\xe6\xa4\x90\x86\xf5\x05\xf9\x18\x35\x3b\xb0\x99\x34\xb6\xb3\xf7\x76\xda\x50\x4c\xde\x26\x4e\xf5\x52\xf5\xb6\xb7\xe8\xbb\x56\x61\x73\x6b\x4b\x31\xe3\xd5\x36\x66\xae\x4b\xb6\x08\x5e\x1b\xe2\xcc\xcb\xb8\xe2\xbd\xd3\x46\xf0\xea\x90\x59\xd5\x36\x11\xa3\x5c\x76\x9b\x44\x92\x0e\x4b\x36\x32\x7c\x96\xcb\x69\xdb\x5a\x39\x77\xb0\xaa\x96\x51\x86\x7b\x86\xb3\x43\x76\xbe\xdf\xdf\xde\x16\xbb\x2d\x89\xa3\x61\xee\x58\xc7\xaf\x12\x49\xe6\xf7\xe3\x50\xc1\x26\xdf\xc5\x4c\x77\x0e\xbe\x0c\xc4\x6a\x9c\xe4\xc8\x79\x30\x3f\xe4\x05\x1b\x91\xd7\x34\x51\x6c\x44\xbe\x15\xd7\x42\xde\xf6\x37\xdf\xcd\x15\x19\x1a\x66\xfb\xc1\xd6\x5e\x68\x91\x2b\xd4\x7a\x2a\xa5\x76\xdf\x92\xd8\x9f\xfb\x17\x9c\x85\xc6\x6a\xe8\xe3\x42\xf0\x9f\x8b\xaa\xa2\xe2\x9d\x4c\x47\x75\x15\xe6\xe5\xd5\x77\x80\x1c\xa8\x6e\xab\x4a\x21\x5f\xf3\xa3\x5a\x1f\x56\xdd\x26\x0f\x6a\xa3\xa2\x5a\x4d\x0c\x37\x8a\x7e\x55\xd5\x4a\x6c\x49\xc6\xba\x59\x26\x2b\x92\x64\x42\xce\xf5\xa1\x32\x73\xe0\x11\x4d\x92\xa5\xd1\x5a\x6a\x1d\xd2\xf6\xcb\xe0\x6a\xc1\x20\x56\x0e\x1b\x56\x5c\xe1\x37\x2c\x78\xdd\x01\x1a\x0d\x4e\x2c\xb6\xeb\xd8\xaf\x4c\xe4\x86\x5e\x60\x0d\x53\xbb\xb4\x8f\x3b\x44\x09\xf7\xbf\x84\xaa\x1d\x14\x75\x4d\x40\x1a\xc1\xc8\x4c\x16\x22\x26\x54\xc3\xf6\xec\x38\xe7\xaa\x0f\xf7\xfe\x1c\xfe\x9b\xe5\xa7\x7e\x8c\x8d\x81\x07\xbe\xcc\xe3\xdb\x20\x7c\x95\x44\x8e\x7d\x62\x51\x11\xc4\x78\x85\x31\x1c\xbb\xd9\x1a\xfb\xcd\x7d\x7d\x90\xc4\xd4\xfb\xcd\x29\xed\x3b\x75\xd2\x63\x40\xfb\xa8\xee\x76\xa2\x42\x0f\xb1\xe7\x6d\x0a\x3b\xb5\xaf\x4c\xd4\x84\xf6\xc0\x15\x6d\x2f\x70\xa6\x82\x15\xae\xe0\xb7\xa1\x27\x14\x2a\xb0\x18\x26\x63\x3b\x41\x40\x9d\xaa\x85\xdc\x99\x32\xb6\xcd\x4f\x7c\xeb\xe4\x37\xf3\x41\x90\xed\xc6\x2b\xb2\x9d\xe5\x7f\xa5\x6c\x07\x0d\x8b\xca\x50\x1a\x60\x92\x29\x5d\x42\x68\x5a\x9a\xc9\x5c\x53\x74\x70\x14\x22\x66\xb9\xd2\x14\x6b\x94\xb8\xbc\xbc\xcc\xac\x79\x41\x15\xe1\x5a\x91\xc8\x26\x19\xe2\x86\xdd\x51\x26\x63\x00\xec\x0b\xf3\x82\x17\x11\x2a\x1f\x47\xbe\x5a\xd9\x98\x8d\xbb\xb0\x79\x62\x09\xdd\x10\x58\xb5\x2f\x9d\xbd\xd2\x2c\xab\xd3\xd5\x60\x11\x02\xc4\xf1\x1b\x1e\x63\x30\x12\xcb\x08\x17\xfd\x10\xd5\xed\x0e\x1c\x74\x4c\xac\x3f\x56\x63\x6f\xa5\x59\xfb\xc0\x06\x8d\x76\x3b\x51\x97\x19\x46\xca\x6f\x3b\xfb\xeb\x62\xf3\xf0\xf2\xab\xd8\x93\x5c\xae\x8f\x94\xc3\x6b\x65\x57\x5d\xf6\xc5\x86\xdd\x0d\x62\x75\x21\x1a\x54\xe7\x56\x92\x5a\xb6\xda\x63\x72\xdf\x55\x6e\xb6\xa4\xfe\x6d\x2d\xc4\x32\x0e\x02\x07\x5b\x3e\x06\x86\xc9\x8d\xcf\x6e\xcb\x23\xbc\xef\xba\x3a\x7b\x56\x4c\x29\x2f\xe7\x42\xea\x65\xb0\xed\x56\xf6\x96\x03\x95\x5b\xd3\xf3\x70\x2d\xec\xe3\x2d\xc7\x6c\x95\x00\xd8\x7f\xda\x1b\xcb\xaa\x69\xbf\x4d\x3c\x29\xa3\xb9\xe6\x51\x91\xd0\xbc\x3c\xfb\x40\xe4\x57\xf2\x96\x3a\xcf\x59\x69\x9a\xeb\x56\x45\x16\xae\xdc\x93\xbe\xe6\x22\x14\x5c\x58\x30\xe1\x9d\x7f\x98\x06\x46\xa6\x6c\x6e\x98\x67\x96\x25\x4b\x97\x63\x50\x46\xb0\x27\x5c\xe9\xb2\xe1\x21\xc8\x02\x6d\x43\x21\x3a\x97\x6b\xf8\x45\xe7\xd1\xc9\x24\x8d\xa4\x98\xf1\xf9\xfd\x65\xd1\xbd\x7f\xf3\xf6\x25\x7c\x12\xee\x95\x39\x74\xfe\xfe\x4a\x06\x5d\x39\x49\xb8\x5d\x26\xc9\xf9\x1f\xca\x14\x39\x5b\xcf\xa1\x21\x3f\xce\x65\x5f\xb9\xfd\xdc\x31\xef\xca\x4f\xd3\x45\x65\x78\x56\xac\x32\x29\x14\x37\x32\x31\xd4\xcf\x82\x87\xb0\xe3\xcb\xfb\x37\x6f\xfb\x4d\xba\x1a\x32\xac\x86\x0c\xab\x21\xc3\x6a\xdb\x81\x6a\x91\x61\xe5\x4f\x33\xe4\x57\xb9\xb0\x3d\xf3\x6f\x9b\x26\x54\x1e\x77\x5f\xd3\xba\xed\xc7\x37\xcb\x87\x33\x46\x0d\x68\xb6\x47\x16\xbe\xb6\x0f\x96\x9d\x87\x2a\x79\xba\x96\xcc\x80\x2e\xfe\xfe\xcd\x5b\x3f\xee\x1d\xe4\x44\xc4\x5c\x99\xcf\xbc\x94\x19\x67\xf1\xcb\xab\xef\xda\x35\xa6\x3e\xab\xbf\x55\xc9\xe9\xc0\x1f\xcd\xcc\x0f\x15\x39\xc0\x87\xc8\xcb\xab\xef\x0e\xdc\x42\x60\x23\xca\xe6\x65\x3e\xab\x8d\x50\x1d\x0a\x04\x48\xff\x47\x04\xa3\x90\x68\xf5\x76\x5c\x69\xee\x24\x85\xed\xb4\xb3\xa0\x8a\x4c\x19\x13\xc1\xa0\xa8\x02\xbf\xb7\x4f\x43\x29\x50\x1b\xa7\x04\x15\xbc\xb1\x63\x40\x19\xd5\x30\x21\xdf\x1b\xd1\x26\x67\x4c\x98\x65\xc4\x23\xd8\x02\xac\x90\xcb\x80\xf7\xa2\x4b\x2f\x58\x98\x3a\x80\x15\x41\x19\x9f\x35\x93\xdc\x9c\x31\xd2\xa4\x93\xb6\x48\x7c\x2a\x31\x7d\x6d\x01\x99\x3b\xc4\xf6\xfb\xb0\x2b\x1f\x94\xd6\x64\x7f\x54\x9c\x9b\x11\x90\x48\x30\x42\xcd\xd9\xd6\xde\x69\x16\x88\xd1\x65\x33\x80\xd3\x8b\x73\x5f\x46\x76\x42\xc6\xe3\xb1\x8d\x17\xd3\x79\x11\x69\x2c\x0d\xa5\xb1\x79\x93\x19\x35\xe6\x39\x70\x2b\xc5\xc0\x12\xe4\x7a\xd4\x59\xec\xc4\x20\x2f\x08\xc8\x9c\x58\xeb\x55\x09\x8a\x09\xa9\xc6\xec\x7d\x14\x00\x09\xf2\x5a\x4a\xbb\x49\xf8\xcd\x7f\x90\x93\x13\x72\x59\x33\x90\x4f\x8d\xdc\x6a\x3b\xb3\x80\xfc\x3f\x93\xf2\xb0\x6a\x2a\x63\x13\xf3\xe2\x37\x42\xde\x8a\xa6\xaf\xc3\xb7\x68\xce\x5e\x90\x8f\x07\xa7\x37\x94\x27\x06\x85\x3f\x1e\x8c\xc8\xc7\x83\x0b\x1b\xae\xcc\xc5\xfc\xa3\x6d\x77\xf0\xf1\xe0\x8c\x41\xdf\xf1\xf8\xe3\x81\x19\xf6\xb7\xd0\xb4\xee\x2d\xcb\xe7\xec\x1b\xb6\xfc\x0f\x18\xcc\xdf\xbe\xc2\x06\x77\xcb\xff\xc0\xfe\x76\xe6\xbe\x21\x58\x1f\x96\x19\xfb\x8f\x94\x66\xfe\xc6\x5b\x9a\xf9\x97\x83\x48\x8c\x1f\x7e\x34\x94\xfe\xe6\xf9\xa4\xdc\xd1\x9f\xfe\xa6\xa4\x78\xf1\xf1\x20\x28\xe1\x29\x53\x83\x19\x99\x5e\x7e\x3c\x20\x95\xaf\xbe\xf8\x78\x00\xdf\x75\xf7\xdd\x24\x5f\x7c\x3c\x30\x5f\x32\xb7\x73\xa9\xe5\xb4\x98\xbd\xf8\x78\x30\x5d\x6a\xa6\x46\xcf\x47\x39\xcb\x46\xe6\x60\xff\x47\xf9\x85\x8f\x07\x3f\x99\x3d\x39\x39\xc1\x1e\x1d\xb8\x99\x8a\xfc\xab\xb9\xb1\x46\x0f\x66\xb1\x55\x5f\xc3\xda\x47\xb7\xd5\xc7\x42\xbb\xf9\x2e\xd6\xb3\x3d\x9b\x72\xef\x5c\x2b\x74\xf5\xc5\xb2\x5b\xe7\x7e\x11\x21\xf6\xfc\xfa\x86\xf7\x5e\x1d\x05\xd3\x33\xea\x9f\xe5\xa8\x18\x83\x19\x4f\x08\x76\x84\xc4\x1c\x44\x23\x2a\x81\x07\x1d\x5a\xbe\x08\x52\x28\x27\xb6\x55\x15\x5c\x43\x3b\xf0\xcc\xdb\x61\x40\xf2\x8b\x22\x96\x69\x73\xba\xee\xa9\xa6\x69\xb7\xca\xa0\xe9\x8a\x75\x7f\xf7\xc8\x0d\x04\xb5\x35\xf3\x53\xd7\xcd\x18\x97\xb5\xe7\xe2\x53\xfa\xe9\x0d\xb4\x96\x7a\x41\x7e\xf7\xe5\x1f\xff\xf0\xa7\x75\xa6\xdd\x29\x2a\xf4\x5f\x6f\x4c\x5d\x6e\x00\xc3\xea\x8b\x75\xf3\xea\xc4\xc9\x9f\x93\x32\x2f\xba\x6c\x20\x5b\x0d\xdb\x51\x4c\x93\x29\x78\xb0\x8a\xcc\xc0\xe5\xb5\xcb\x56\x15\x11\x86\x14\x36\x0e\xc6\x3d\x01\x4f\x96\xe4\xf9\x97\xd8\x13\x09\x3e\xbd\x42\xbe\x7f\xf8\xf4\xe3\xa4\x61\xca\x5c\x91\x7f\x1f\xd5\xe6\x63\x64\x9e\x02\x98\x9e\x41\x1c\x74\x56\x1b\x75\xd5\x06\x1d\xaf\xe1\x84\xcc\xcf\x77\xdb\xc6\x75\x68\xf1\xf1\x87\xdf\xaf\xdf\x5f\xd7\x75\xfe\x59\x1f\x7e\x45\xeb\x37\xf4\x82\x00\xc5\x32\xf6\x34\x85\x9c\xfe\x20\x74\x24\x44\x6d\xdd\x2d\xf8\x87\x5c\xe4\x32\x2e\x22\xa3\x8e\xc9\x99\x8b\x4c\x8f\x42\x02\x05\xbd\x65\xcc\x69\x40\x2d\x9b\xb0\x4f\x06\xe8\xac\x6c\x32\x64\x54\x5e\x46\x05\x17\x73\x55\x16\x72\x04\x02\x82\x5c\xf7\x76\xc1\x80\xf5\xe8\xb0\x0d\x29\xcc\x4a\xf1\x18\xc2\xe6\x29\x99\x17\x34\xa7\x42\x33\x6c\xd6\x80\xad\x48\x51\xc7\x2c\x49\x1e\x0d\x6a\x63\xda\xd3\x88\x47\x15\x89\x95\x99\xa2\xd5\x06\xb1\x85\x6d\x6f\x47\xf5\xf9\xb3\x2f\x37\x6e\xb9\x7f\x6e\xbd\x91\x9d\x6a\xcd\x72\xf1\x82\xfc\xcf\x0f\xa7\xe3\xff\x47\xc7\x7f\xff\xf1\xc8\xfe\xe3\xd9\xf8\xdf\xff\x77\xf4\xe2\xc7\x2f\x82\x3f\x7f\x3c\xfe\xeb\x6f\xfa\x30\xb9\xaa\x5e\x83\xab\x5a\x01\x6d\x7b\xd3\x98\x03\xf3\xd5\x4d\x5d\xbd\xc6\xe4\x00\xa6\xb4\xf9\x19\x3b\xdd\x4d\x4a\x46\x3b\x20\xe9\x7a\x4c\x97\x51\x9f\x4a\x3c\x03\x8a\x67\xc4\xd2\x89\x95\x70\x27\x91\x4c\x4f\x02\x0b\x83\x11\xad\xdf\x52\xb1\x24\x25\x59\x43\xa1\xb4\x8e\xe9\x0a\x12\xcd\x68\x94\x4b\xa5\x2a\x56\xe2\x6b\x46\xbc\xe4\x8a\xc4\x72\xca\x22\x0a\xb2\x78\x3e\xe5\x3a\xa7\xf9\x32\x50\x3d\x5c\x91\xfb\x42\xb1\x59\x91\x90\x23\xc5\x18\x99\x08\x19\xb3\x55\xea\x7a\x8c\x34\x94\x4e\x79\xc2\x35\x64\x85\xc4\xcc\xa8\xda\x09\xb7\x2a\x80\xf3\x60\xbb\xce\xbf\x73\xf6\x89\x70\xed\xbb\xef\x73\x45\x8e\x62\xa1\x9e\x3f\xff\xf2\x77\x57\xc5\x34\x96\x29\xe5\xe2\x75\xaa\x4f\x8e\xff\x7a\xf4\x73\x41\x13\xc8\x60\x79\x47\x53\xf6\x3a\xd5\x7b\x05\x8b\x55\xd9\xe2\xf3\x3f\xb4\x38\x45\x47\x3f\xe0\x59\xf9\xf1\xe8\x87\xb1\xfd\xd7\x17\xee\xd6\xf1\x5f\x8f\x3e\x4e\x36\xfe\x7e\xfc\x85\x59\x43\x70\x02\x7f\xfc\x61\x5c\x1e\xbf\xc9\x8f\x5f\x1c\xff\x35\xf8\xed\xf8\x37\x83\x91\xbd\xb4\x9a\x07\xba\xd7\xbd\x19\xdb\xed\x18\x5e\x91\xaa\x1b\xdd\xeb\xbf\xaf\x1a\xdf\x57\x26\x8f\x46\xf8\x86\x22\x76\x51\xe5\x23\x81\x99\xbe\x3e\x44\xcb\x8a\x76\x7d\x59\xec\xeb\x6b\x44\x49\x17\x71\xc3\x6b\xfa\x40\xeb\x0d\xf1\xf9\x69\xe5\xf9\x9f\x6c\x82\x48\x60\xb7\x02\x63\xe6\xb2\x1a\xe0\x22\xc1\xf8\x53\x2d\x19\xe3\xf3\x05\x1b\x4c\x3b\x83\x1b\x60\x70\x03\x0c\x6e\x80\xc7\xe1\x06\xa8\x1f\x79\x70\x07\x40\x4b\x55\x15\x18\x93\x69\x9c\x72\xb1\xe6\xf8\x6f\x3e\xf7\x96\x3a\x8c\x48\x26\x8d\x2c\xc3\x21\xfc\x5a\xde\xb0\x3c\xe7\x10\xf6\x86\xef\xe4\xac\x6c\x42\x18\x86\xa0\xf7\x64\x84\x8d\x59\x96\xc8\x65\xba\xae\x74\xf9\xdd\x44\x14\xdb\x45\xf6\x1c\xc4\x3c\x18\x7e\x07\xc3\xef\x67\x64\xf8\x1d\xac\xb9\x83\x35\x77\xb0\xe6\x36\x5c\x83\x35\x77\xb0\xe6\x0e\xd6\xdc\xc1\x9a\xbb\x72\x0d\xd6\x5c\xfb\xcc\x60\xcd\x1d\xac\xb9\xf7\x6d\xcd\x2d\x2f\x55\x29\xea\x7b\x4f\x6a\x65\x9b\x68\xa7\x15\x85\xde\xb6\x57\xb5\x2a\x7d\x55\x33\x6f\x50\xe7\xb9\x56\x2e\xd9\x10\x34\xf7\x49\xd8\x86\xed\x7e\x7b\xce\x0f\xa1\x53\x83\x06\x3d\x68\xd0\x43\xe8\x54\xe5\x1a\x94\x6d\x7f\x0d\xca\xf6\xa0\x6c\x0f\xca\xf6\xa0\x6c\x0f\xca\x76\xfd\x1a\x94\x6d\xbc\x06\x65\x7b\x50\xb6\x1b\xae\xa7\xa1\x6c\x6f\x0a\x9d\x9a\x19\x94\x75\x37\xb7\xc5\x4e\x91\x30\xa8\xe6\xcb\x21\xa8\x66\x08\xaa\x19\x82\x6a\x86\xa0\x1a\x77\xdd\x77\x50\x4d\xd5\x02\x87\x91\x2f\x15\x8b\x1b\xe0\x6c\x96\xcb\x1b\x1e\x33\x55\x0b\xc1\xf1\xf5\xf6\x02\x2e\x93\x42\x87\xbe\x32\xac\x86\xdd\x4f\x50\xcd\x60\x9e\x1b\xcc\x73\x83\x79\x6e\x30\xcf\x55\xaf\xc1\x3c\xe7\xaf\xc1\x3c\x37\x98\xe7\x06\xf3\xdc\x60\x9e\x1b\xcc\x73\xf5\x6b\x30\xcf\xe1\x35\x98\xe7\x06\xf3\x5c\xc3\xf5\x34\xcc\x73\x21\x06\x0d\xe9\x15\x83\xf6\x39\x68\x9f\x8f\x4f\xfb\x1c\x54\xca\x41\xa5\x1c\x54\xca\x86\x6b\x50\x29\x07\x95\x72\x50\x29\x07\x95\x72\xe5\x1a\x54\x4a\xfb\xcc\xa0\x52\x0e\x2a\xe5\x90\x5e\xd1\x31\xbd\xe2\xfd\x9b\xb7\x41\x3c\x07\xc6\x79\x04\x98\x05\x0d\xb6\xa1\xf0\xae\xe3\xc9\x83\x2f\x76\xd0\x86\x07\x6d\x78\xf0\xc5\xda\x6b\x50\x9c\x07\xc5\x79\x50\x9c\x07\xc5\xb9\xb2\x71\x83\xe2\x3c\x28\xce\xd5\xad\x1c\x14\xe7\xee\x40\x1b\x14\xe7\x41\x71\x6e\xd8\x8a\xcf\x43\x71\x1e\xaa\xcc\x6a\x99\x43\xf5\xd8\xfb\xaf\x30\xfb\xb5\x6f\xf1\xb9\x5a\x5d\x16\x7e\x5b\x5b\x59\x16\x27\x0c\x3f\x35\x55\x95\x95\x88\x95\xab\xe5\x64\x5d\x53\xd1\x07\x28\x25\x8b\x8d\x81\xac\xe2\x50\x08\x0e\x62\x4f\x5a\x24\x9a\x6b\x26\xa8\x88\x96\xc0\x66\xdf\xbf\x79\x4b\x52\x2a\xe8\x3c\xe8\xed\xa3\x26\xe4\x5c\x03\xbd\xd1\xb9\x6f\xe6\x64\xfb\x0f\xf9\x04\x90\xb0\xdd\x11\x54\xa2\xf0\x1d\x87\x40\xe1\x70\x42\x00\x8b\x41\x00\x34\xec\x03\xba\x13\x85\x8d\x89\x7e\x55\x3f\xe0\x43\x4a\xcc\x90\x12\x33\xa4\xc4\x3c\x92\x94\x18\xa0\x1f\x6b\x5b\xce\x55\x88\xcc\x0e\x8d\xb8\x62\x36\xa3\x45\xd2\xd0\xdc\xb7\xc8\xc0\xb6\xe6\x2d\x58\xe4\x0c\x9f\xec\x60\x62\x55\x2c\x61\x91\x96\xf9\xd6\xb6\x75\x57\xf6\x41\xfb\x06\x2e\xb3\xb2\xb4\x43\xb5\x99\x6e\xb5\x58\xe9\xb6\xd9\x12\x10\x5d\x74\xb4\x78\xf5\x29\x03\x4b\xe3\x1a\xd3\xf0\xca\xec\xeb\x2f\xe1\x89\x72\x4d\xf7\x12\x3a\x65\x89\x07\x85\xa3\xa4\x29\x1e\x19\x94\xd4\xca\x3b\x20\x60\x9e\xbe\x3b\x5b\xb5\x72\x57\x17\xb8\xce\x30\x4d\x36\x1b\xa7\x57\xa6\x7e\xba\x61\x7a\x96\x30\xb8\x5f\xc0\xaa\xe0\x95\x57\x24\x7a\x23\x42\xc9\x35\x5b\x22\x7d\xac\x64\x69\x99\x87\x73\x06\xd4\x14\x36\xf3\x9a\x2d\xe1\x21\x4b\x2c\xb7\x08\x98\xbd\xf4\x11\xbf\x66\xeb\x20\x84\xbf\xbb\xc9\xae\x17\x50\x5b\x75\xec\xbe\x66\xcb\x4d\x3f\xd7\x00\x6e\xe0\xe0\x6d\x88\x06\xf2\xe6\x86\x37\xd8\x78\x60\xd3\x2c\x4b\x38\x03\x6a\xb8\x71\xec\x56\xf2\x38\xf1\x4b\xed\x30\x51\xbf\x95\x81\xc5\x09\x36\xfb\x50\xe1\xc6\x1a\x4c\x5f\xf0\xcc\x0a\x19\x28\x5a\x38\x56\xf8\x1d\x4d\x78\x20\xc6\x00\x56\x9f\x8b\x11\x79\x27\xb5\xf9\xdf\xab\x4f\xdc\x90\x7a\x83\x0f\x67\x92\xa9\x77\x52\xc3\x9d\x5e\x96\x8a\x53\xe8\xb0\x50\xab\xd9\xf1\xc0\x53\x22\x67\x15\x7e\x68\xc4\xb0\x59\x25\x1d\xd0\x3c\x7d\x2e\x8c\x3a\x69\x57\x54\x31\x86\x98\x21\xd2\x42\x01\x03\x13\x52\x8c\xd1\x7e\xd1\x34\x86\x05\x84\xcc\x2b\x70\xd8\x30\x9c\x1d\x0a\xec\x24\xf8\x0b\x4a\x40\x89\x11\x65\x49\x8c\x1d\x84\x81\x9b\x1b\xa2\xcd\x23\x82\xde\x0e\xf0\x39\xb4\x01\xef\x26\xba\x82\xd7\x16\xea\xd2\x72\xaf\x80\x64\xbe\x31\x07\xa0\x03\x89\xc5\xe7\x91\x2c\xa5\x34\x33\xdb\xf4\x0f\x43\x7d\x00\x52\xff\x22\x19\xe5\x46\x62\x3e\x05\xe9\x3f\x61\x95\xdf\x6c\x73\xf0\x70\x18\x33\x02\x57\xc4\x90\x92\x1b\x9a\x18\x7a\x07\xf6\x79\xc2\x12\xa4\x7e\x46\x48\xaf\x11\xf6\x11\xb9\x5d\x48\x85\xc4\x0c\xad\x54\x5c\x91\x83\x6b\xb6\x3c\x18\xad\x6c\xed\xc1\xb9\xb0\x6e\xaa\x95\xcd\xf4\x44\x54\x8a\x64\x49\x0e\xe0\xb7\x83\xdd\x79\xc1\x46\x62\x49\x63\x34\x1f\xd0\xe4\xa2\x05\x35\xdb\xb8\x6f\x55\xff\xf2\xba\xce\xfb\x35\xbe\x5e\x7f\xc5\x11\x3f\x4c\xcd\x0d\x75\x13\x78\x92\x50\x7c\xd4\xfa\x81\xa1\x39\x2a\x9a\x47\xb0\x03\x2c\x44\x4d\x7b\x38\x1f\xa9\x63\xdc\x59\x23\x8f\x3a\xd8\x83\xa6\xd7\xb9\xe5\xbb\x51\xe8\x79\x74\x81\x19\xc4\xf1\xe9\xc5\xf9\xf6\x5e\xbb\x57\xf0\x0a\xd1\x2c\x49\xd0\x8b\x6d\x64\x56\x2d\xad\xcc\xda\x28\xc2\x64\xc1\xf8\x81\x92\xbf\x76\xb2\x4d\xed\x5b\xe1\x57\x10\x85\xbc\x12\xbb\x7d\xae\x1f\x6a\x2f\x58\x72\xc7\x3e\x65\x09\x8f\xb8\x76\xf4\xbb\x94\xad\x40\x1f\x82\x97\x80\x70\x71\x90\x06\x14\xd3\xa3\x52\x56\xe3\x8a\xf0\xb9\x90\x79\x33\x7e\xde\x4d\x04\x3b\x21\x9f\xc6\xd7\xc5\x94\xe5\x82\x69\xa6\xc6\x46\xc6\x1a\xdb\x17\xd8\xea\x11\xa8\x8b\xb0\xdb\xa0\x74\xf0\x6d\xf5\x85\x8a\x02\x6a\x07\x73\xb4\x75\xb9\xd2\x6b\x18\x9e\xf2\x10\x84\xf3\x9c\x33\xb4\x18\x7a\x07\x8a\xbe\x95\x44\x15\x99\x4d\x32\xaf\x0d\x69\x8e\x26\xf9\x28\x9c\xa0\xfd\xa2\xec\x0f\x0c\x84\x02\xe2\x25\x5c\x6e\xbb\x3d\x59\x56\x53\x86\xed\x4a\xe5\x0d\x73\x6a\x2c\xb2\x04\xc3\x0c\xb2\x05\x55\xac\xd4\xc1\x54\x11\x45\x8c\xc5\x2c\xc6\x1f\x2c\x2b\x61\xb3\x19\x8b\x34\xbf\x61\xc9\x12\x8c\xff\x0a\x45\x12\xff\x7d\x83\xd9\xf8\xf9\x72\xc1\xb5\x2f\x0a\xf6\x49\x3b\x25\x9d\x70\x50\xc2\xab\x96\x8a\xdc\x2f\x77\x41\x15\x99\x51\x9e\x18\xbd\xee\xa3\x20\x1f\x58\xb4\xb8\xc8\xd9\x0d\x67\xb7\xdf\x0a\x45\x67\xec\x35\xe5\xc9\x6b\x99\xdf\xd2\x3c\x0e\x60\x70\x17\xcb\x37\xb3\xf2\xbf\xe1\x94\x1c\x5c\x4e\x3d\xe1\x4c\x96\x41\xa7\x66\xeb\x19\x33\xeb\xbd\x75\x0b\xbc\x48\x0c\xc4\xc0\xe1\x4a\x8d\x42\xeb\x31\x8a\xe4\x6c\xc6\x72\x26\xcc\x79\xa2\x6e\xfc\xe0\x25\xcf\x1e\x22\xaa\x69\x22\xe7\x65\x93\x69\xab\xf7\xa2\x63\x8c\xc2\xc7\x1c\xf4\x9c\x1b\x88\x19\x51\x01\xda\x81\xe0\xd9\x0d\x8c\x46\x1f\x05\xf9\xfe\xf4\xf2\xdd\xf9\xbb\xaf\x5f\x00\x57\xd9\x04\xe1\x55\xbc\xe6\x8a\x14\xf0\x54\x60\xf5\x50\x45\xa2\x0d\x8a\x17\xc2\xfb\x8b\xa6\x6c\x41\x6f\xb8\x39\x03\xb9\xb5\x87\xdc\x30\xec\x2c\x6e\xd4\x60\x92\x48\x65\xc6\x49\x98\x52\x64\x29\x0b\x8c\xe3\x89\x19\xcb\xd0\xc5\xad\x34\x15\xd0\xcc\xc4\xfa\x33\xea\x8b\x20\x53\x66\x7e\x75\x16\xb1\x95\xd3\xd5\xe4\x4f\xd8\x42\x39\x9c\xa6\xbb\x46\x91\x25\x1b\x1d\x1e\xe3\x0d\x6f\x99\x5f\x37\x81\xb8\xaa\xf6\xb7\x0f\x98\x42\xc5\x7f\x53\x07\xee\xf0\xc1\xcb\xee\xba\xff\x7a\x3d\x0a\x03\x3f\xbe\x45\x2c\xec\xa0\xf1\x6f\x0e\xaa\xaa\xac\x32\x08\xae\xa9\xc9\xde\x4d\x9c\x33\x08\x12\xea\x93\xd9\x0c\xd1\x5a\x43\xb4\xd6\x10\xad\xd5\xf4\xfb\x10\xad\x35\x44\x6b\x0d\xd1\x5a\x43\xb4\xd6\x10\xad\x35\x44\x6b\x0d\xd1\x5a\x64\x88\xd6\x2a\x9f\x19\xa2\xb5\x86\x68\xad\x87\x4b\x73\x0a\x14\xd3\xad\x3a\xe6\x9b\xf2\x59\x94\x4e\xb4\x8b\x87\x72\x27\xb3\x2a\x1a\xd6\xb5\x4e\x7b\x8a\x0d\x3f\xb6\xc3\x74\x36\x2c\xb7\x11\xba\x44\x7b\x43\x6e\xd5\x84\x1b\x58\x4e\x56\xbc\xe3\x9e\x03\x55\x16\xf5\x58\x4d\xb5\x55\xe7\xc2\x25\x9b\x75\xf4\x2d\x5c\xb2\x59\x68\x6d\x43\xc0\x54\x5d\x0a\x36\x62\xc5\xfb\x1c\xee\x20\x7c\x60\x7d\x8c\x53\xe3\x12\x8c\xb0\xef\x4c\xa6\x16\x1f\xed\x1a\xd6\xfa\x42\xb7\x1e\x69\xe0\xc7\x17\x54\x2f\x5a\xcd\xe0\xf0\xdc\x82\x0d\x1c\x87\xe0\xca\xcd\x38\x8b\x58\x25\x8c\x0a\xe4\x38\x46\x63\x7b\xd3\x08\x3e\x39\xb3\xbf\x8d\x50\xe2\xb0\xee\xd2\x32\xcc\xca\x08\x4d\x84\x1a\x42\xcc\x63\xf2\x5f\x57\xef\xdf\x9d\x7c\x2d\xad\xac\x60\xb4\x19\x65\x1b\x26\xa5\x4c\xe8\x11\x51\x45\xb4\x20\x54\x99\xa9\x19\xfd\xf6\x0a\x4c\x0f\x29\x15\x7c\xc6\x94\x9e\xd8\xd1\x58\xae\x7e\xf8\xf2\xc7\x49\xd5\xe2\xc1\xad\x4f\xd5\x05\x23\x59\x04\x80\xb3\x61\x16\xe3\xdf\x05\xa1\x15\xa6\x94\xc9\xd8\x4e\xfa\x16\x26\xab\xe9\x35\x23\xd2\x4e\xb6\x60\xc0\x14\x5e\x90\x03\x83\x26\xc1\xa7\xff\x61\x0e\xd6\xbf\x0e\xc8\xd1\x2d\x58\xf5\x0f\xcc\x9f\x07\xf8\x41\x1f\x3b\x66\xee\x05\x1c\xdf\x7e\x18\xe5\xfb\x9c\xcf\xe7\x20\x6e\x81\xe9\xf6\x86\x09\x7d\x0c\xfc\x6d\x46\x84\x0c\x1e\x16\xd6\x45\x56\x3a\xc6\xea\x13\xf9\xe1\xcb\x1f\x0f\xc8\x51\x75\x5d\x46\x04\x65\x9f\xc8\x97\xde\x19\x96\xc9\xf8\xd8\x69\xad\x4b\xa1\xe9\x27\x50\x0c\x16\x52\x31\x81\xbe\x04\x2d\xd1\x20\xab\xa4\x51\x3e\x59\x92\x8c\x51\xc0\x8c\xc9\x2d\xda\xe0\x1c\x28\xd1\x9f\x9c\xd1\x5c\xd7\x22\xeb\x3e\xbc\x3f\x7b\xff\x02\xbf\x66\xb6\x6d\x2e\x9c\x96\x3b\xe3\x82\x26\xd6\xb2\xed\xe5\x43\x33\x91\x02\x37\x49\x4b\xab\xda\x3a\xa3\xee\xac\xd0\x45\xce\x26\xf5\x48\xab\xd6\x18\xdf\x14\xe6\xd6\x8c\xec\x10\xee\x56\x3f\x68\x0f\x18\x4c\xd6\x7a\x89\x62\x8d\xb3\x75\x75\x89\xef\x02\x1c\xdc\xb8\xc4\x92\x34\x9b\x55\xc6\x32\x52\x66\x81\x11\xcb\xb4\x3a\x91\x37\x86\x74\xb2\xdb\x93\x5b\x99\x5f\x73\x31\x1f\x1b\x24\x1b\xe3\xce\xab\x13\x60\x31\x27\xbf\x86\xff\xed\xb5\x22\xe0\x53\xed\x97\x85\x31\xad\xf7\xb0\x36\x60\x9f\x27\x3b\x2f\xcd\xc9\x97\x5d\x38\xc1\xe1\x95\x53\xfe\x6a\x6f\x9b\xe3\x82\xbe\x70\x1b\xec\x1a\x50\xb8\x94\xc6\x48\x02\xa9\x58\xde\x39\x1a\x1b\x00\x82\x8e\x1f\x2d\xc7\x36\x1a\x7d\x4c\x45\x3c\xf6\xf2\x75\xb4\xdc\x19\x62\x05\x6f\x79\x80\xbf\x3d\x3f\xbb\x1f\xe4\x2e\x78\xa7\xd3\xda\x57\x2e\x01\xa9\xc4\x9f\xd3\x24\x5b\xd0\xbe\x7a\x2f\x0c\x51\xe8\x70\x0d\x51\xe8\x43\x14\xfa\x10\x85\x5e\x5e\x8f\x24\x0a\x7d\x88\x22\x1f\xa2\xc8\x87\x28\xf2\xf5\x3f\x0f\x51\xe4\x43\x14\xf9\x10\x45\x5e\xbf\x86\x28\xf2\x21\x8a\x7c\x88\x22\x1f\xa2\xc8\x1b\xae\x3e\x0a\xd6\x3d\xc1\xf8\xcb\xc1\x39\xf6\x34\x9c\x63\x83\xbb\x6b\x70\x77\x0d\xee\xae\xc1\xdd\xb5\x03\xc6\x0f\xee\xae\xc1\xdd\x35\xb8\xbb\x06\x77\xd7\x23\x75\x77\x75\xea\x32\xfe\xa4\x6b\x67\xdd\x7f\xd9\x2c\xb8\xb5\x5a\x31\x6b\x6d\xb1\x2c\x5b\x27\x6b\xa5\x18\x56\x59\x07\xeb\x25\xa6\x53\xde\x7d\x11\xac\xaa\x01\xd0\x35\x68\xee\xd0\x94\x7d\x70\xe8\x0d\x0e\xbd\xc1\xa1\xb7\xed\x94\x74\x70\xe8\x81\x2f\x2f\x3c\x0a\x56\x1d\x29\x53\x38\xde\x37\xbb\x36\xd6\x7f\xba\xbd\x69\xc5\x5a\x55\xc2\xcf\xbb\x5c\x94\xf2\xfb\x81\x85\x05\x4e\x8a\xd9\xd0\x48\xa6\x99\x14\x06\x31\xfa\x71\x2e\x96\xe3\xb5\x48\x58\x75\x8f\xda\xfb\x53\x16\x06\x93\x5b\xcf\x56\x9a\x49\xc5\x2a\x76\xdc\x1d\x14\xef\xcd\xae\xa9\x31\x3a\x7d\x9c\x09\x6d\x07\xc5\xbd\xf2\x7e\x2b\x59\xe4\x4d\xf8\x86\x75\x4d\x82\xe7\xe9\xe7\x82\xe5\xd8\x46\xbf\x74\xe0\x94\x40\x71\x26\x57\x74\x49\x55\xc0\x72\xb8\x61\x33\x5b\x82\xa9\xcd\x52\x49\x07\x7f\xec\xca\xaa\xef\xd5\x27\x4b\x5a\xfb\x4f\x5a\x78\x4f\x1e\xb7\x7f\x96\xb4\xf5\xd1\x92\x96\x7e\x5a\xd2\xc2\x57\x4b\xda\xf9\x6b\x49\x6b\x9f\x2d\x69\xe3\xb7\x25\x77\xec\xbb\x25\xed\x9d\x9a\xa4\xb5\x0f\x77\x65\xd2\x8f\xce\x8f\xdb\x71\xd9\x6d\xfc\xb9\x2b\x8b\x1e\x7c\xba\x35\x50\x6f\xf7\xeb\x92\xb6\xbe\x5d\xd2\x3e\x3d\x69\xab\x8f\x97\x0c\x7e\xde\x6e\xfc\x65\x2b\xd1\xed\xe6\xef\x6d\xb5\x97\x39\x9b\xb5\x73\xd2\x5f\xb2\x19\x2e\x26\x10\x27\x4a\x47\x87\x5c\x2b\x43\x94\x52\xc7\xc8\x52\x51\x57\x3f\xa7\x22\xbb\xdc\x4f\x44\xd4\x25\x8f\x16\x97\xa1\xf1\x8a\x06\xb6\x2c\xa0\x91\x6e\xb6\x23\xc2\x44\xce\xa3\x85\x9b\xac\x11\x72\xad\x67\x6d\x73\xcd\x93\x70\xda\x5b\x36\xb4\x1d\x3b\xdb\xee\xcd\x69\x58\xe8\x0e\x3e\x9d\x70\xe2\x5b\x89\xf7\xe6\x82\x32\x6b\x26\x15\x54\x02\xa9\x65\xe0\x5b\x3d\xbc\x92\xa5\xee\x31\xe8\x1e\x43\x5b\x9a\xa7\x5b\xce\x36\x9c\x2c\x75\x09\xaa\xab\x35\x5b\x44\x39\x79\xeb\x90\xdd\x90\x6b\x1f\x2e\xa3\x85\xd8\xd5\x5e\xf0\xda\x5a\x0f\x24\x7c\x70\x6d\x65\x90\xf2\x6a\x2f\x7d\x75\xab\x16\x52\x5e\x2b\x7e\xf0\x7d\xaa\x83\xf4\xc5\xe9\xca\xab\x6d\x99\x8e\x2a\x18\xd0\x09\xdf\x2b\x08\x6e\x29\x44\x9b\x4c\x57\x62\x10\x1e\x64\x91\x5b\xab\x92\xac\x59\xdd\xe9\xbe\x45\x49\xfa\x5e\xfc\xb6\x42\x14\x6b\xd6\xf1\xa1\x5b\x75\x89\xbe\x67\xbd\xad\xfe\xc1\x9a\x59\x5f\xf5\x5a\x09\x61\xc7\xb9\x6f\x2e\x4a\xb0\x66\xe6\x1f\xea\xe5\x09\x7a\x9c\xd6\xd6\xb8\x85\x86\xf9\x0c\xd1\x0b\x43\xf4\xc2\x23\x8f\x5e\xe8\x74\x06\x36\x45\x32\x34\xa1\xff\x63\x8d\x67\xe8\xb4\xe8\x4d\xb1\x0d\x4d\x8b\x7e\x24\x11\x0e\x9d\xd7\xb8\x31\xda\x61\xdd\x42\x1f\x49\xcc\x43\xa7\xc5\xb6\x8c\x7f\x68\x5a\xf2\xe7\x1c\x05\xd1\x09\x86\x1b\x22\x22\x9a\xe0\xf6\x28\xe2\x22\xd6\x2e\xf0\x17\xdd\x58\x2c\x2c\x7f\x7c\x7f\x01\x12\x57\xc1\x57\x6b\x41\x12\xe1\x4f\x2b\x81\x12\x95\xd9\x62\xb0\x44\x43\x53\x31\x55\x4c\xc3\x7f\xd7\xa3\x2a\x54\xf5\xe3\x6d\x3a\x8c\x85\xf6\x35\x88\x09\x78\x29\x93\x22\x0d\x6d\x1c\xe3\x55\xd1\x3f\xa3\xd1\xb5\xd1\x5a\xec\xf7\xa6\xe0\x59\x0b\x90\xf3\x6f\x4a\x0a\x90\x28\xc9\x04\xc4\x10\x03\xc1\xe0\x67\xdc\x9f\x0b\x1c\xe4\x57\x1b\x31\xb8\xf1\xf3\xae\x46\xb5\xf5\xd6\x3b\x0d\xa4\x14\x7e\xb2\x95\xa1\xeb\x33\xc2\x57\x57\xe6\x74\x55\xbf\xdd\x7a\x4a\x0b\x2a\x04\x4b\x0c\x2d\x40\x8f\x3e\x48\x77\x1e\x3e\x9b\xc1\x63\x5f\x5e\x99\xcd\xcb\x95\xfb\x0d\xd3\xa9\xa4\xe8\xef\x1b\x23\x13\xa2\x28\xb9\x66\x2c\x53\x81\xb3\xa4\x00\x9f\x0a\xe4\x82\x4c\x97\x46\xbd\x8b\xae\xa1\xdc\x28\x48\x65\xb0\xde\x97\xb8\x31\x3d\x27\xd0\x03\xb2\x67\x2c\x0a\x6e\x0d\x21\x38\x43\x08\xce\x10\x82\xb3\xed\x8c\xb5\x08\xc1\x09\x0f\x7c\x25\x0c\x87\x0a\x72\x9a\x65\x09\x18\xa5\x5c\x69\x58\x5b\x73\xd0\x16\xdc\x58\xb1\xc4\xed\x98\x5e\x54\x63\x0e\xee\xf6\x0a\x85\xae\xfe\xe0\x99\x5a\xed\x89\x8d\x11\x36\x48\x4f\x9b\xe4\xbb\x8d\xd2\x61\x24\xc5\x8c\xcf\xb7\xe7\xc5\x04\xb0\x7c\x09\xaf\x94\x1e\x33\x1c\xa2\xb0\x95\x6d\x4b\x4e\x05\xe9\x5b\x15\xbe\x7d\x17\xc9\x31\x33\x90\xc0\xd6\x86\x07\x54\x56\x71\x3e\x2b\xa7\x37\x82\x68\x9a\x9c\xc7\x96\x3e\x66\x32\x3e\x54\x40\xcd\xe2\x22\xb1\xa5\xa6\xb1\x14\x8b\x39\x9a\x82\x27\x66\x25\x63\xaa\xf1\x3c\x30\x85\xf9\x8e\x5f\x08\xa9\xbf\xf0\x23\xa1\xe1\x25\xe7\x73\xee\x49\x9f\x6f\x59\x92\xc9\x78\xe2\x8b\x39\x68\x70\x59\x56\x07\x9c\x90\x6f\x95\x75\x30\x3b\xe2\x70\xf4\x8f\x7f\x1d\x1b\xc2\xca\x72\x2c\xd4\x69\x07\xae\xbc\xb7\x25\x0a\xa4\xa7\xd8\x1e\x21\x63\x76\xba\x05\xd4\x2b\xe0\x3e\xf3\xf1\x5b\xe6\x75\xbf\x55\x21\x90\xf3\x22\x09\xd2\xc4\x0c\x8c\xf6\x77\xab\xb6\x75\x6c\x64\x68\xe5\x63\xf1\x19\xb8\xed\xaf\xfc\xac\xce\x31\x53\x12\x6f\xbf\xfa\xc4\xa2\x42\x6f\x55\x39\x1b\x8c\xc8\x76\x99\x60\x90\x4a\x12\xfb\x39\x10\x9d\xec\x0f\x66\xbd\xc0\x38\x0d\x78\x6c\x68\x9b\xa2\x9a\xab\xd9\x12\xf3\x6e\x1d\xc0\x58\x10\x1b\x55\x9e\x2f\x23\xa8\x04\x75\x88\xa7\x85\xc6\xd2\xa6\x4b\x12\x2d\xa4\xc1\x2f\x8a\x70\x87\x71\x6f\xb8\xc4\x00\x22\xb0\x07\xe7\x24\x35\x1c\xc0\x6a\x77\xc1\xf0\xe8\xf1\x2e\x5f\x33\xaa\xb0\x54\xba\x84\x95\x0b\xaa\x31\xc3\x80\x9d\xcd\xfc\x31\x37\xea\x0a\x78\xfc\x8a\xd4\x0c\x7a\xcb\xf8\x7c\xa1\xd5\x88\xf0\x09\x9b\xc0\xee\x32\x1a\x2d\x82\x61\x53\xc6\xb4\x22\x34\x49\x7c\x63\x92\x00\x25\x42\x77\xfb\x91\x67\x9a\x96\xc1\x8d\x3c\xbd\xad\xef\x5a\x23\xb8\x46\x84\xe9\x68\x72\x3c\x02\x0f\x9e\x39\x2d\x14\xe6\x38\x5d\x12\xae\xa1\x16\x37\x30\xe8\x5c\x16\x73\x5c\x89\x0d\x34\x50\x5e\x3a\xb2\xf6\x59\x11\x83\x36\x21\xe6\xe4\x00\x17\x77\xe0\x04\x1e\x33\x9c\x35\xb9\xc2\xfa\x5c\x69\x59\xb4\x78\xe6\x39\x53\x99\xc4\x1e\x2c\xf5\xc8\x85\xff\xe3\x5f\x3a\x52\xc7\x25\x30\x17\x7c\xbe\x70\xb0\xa4\x39\xd2\x94\xea\x1e\xb4\x73\x3e\xb6\x09\x23\x69\x19\x44\x52\xf5\xf3\xb8\x72\xf1\x25\x4e\x04\xbb\xa7\x59\x9e\x7a\x18\xc0\x06\xa3\xae\x6f\x8d\xb2\xa9\xcd\x61\x46\x20\x92\x67\xe4\x08\x50\x84\xeb\x43\x05\xe8\x3a\x96\xd9\xf1\x84\x9c\x82\xb6\xdb\xe2\x03\x42\xfa\xf1\xed\x40\xe6\xa3\x4a\x96\x63\xb5\xf3\x59\xb4\xf3\xd4\x76\xf1\xd5\x1a\x6e\x9e\x79\x93\x52\xab\xc7\x11\x26\x5b\x1f\xed\xe2\xb7\x25\xc1\x1c\xda\x3c\xbd\xe2\xd2\x03\x94\x2e\xc3\x16\x59\x9e\x8e\x08\x55\x4a\x46\xbc\x6c\x9c\xb4\x8a\xe9\xb8\x92\x36\x7e\x9c\x8e\xf0\x27\x9d\xd7\x4f\x3a\x06\xa6\x56\xaf\x7a\x7c\xa7\x0d\x49\xad\x42\xa5\x42\xb0\xa6\x4b\xf8\x15\x1c\x85\x53\x96\x6c\x89\xce\x0c\xaf\x2e\xc1\x5f\xee\x6a\x1d\x04\xb6\x66\x41\x6b\x17\xf2\x60\xf1\xaa\x4d\x30\xe9\x80\x1c\x78\x75\x39\xa6\xe5\xd5\x26\xb2\xb5\xfe\x46\xab\x38\xd7\xea\xd5\x1d\x7f\xf1\x6a\x15\x03\x5b\xbd\x56\x44\x92\xbe\x42\x61\xab\x57\xc7\x90\x84\xf2\x6a\x1f\x26\xbb\x61\x5d\x97\x77\x15\x2b\x3b\xaa\x06\xca\x92\xaf\x35\xe2\xfa\x9b\x96\x94\xad\x07\x00\xb5\x0d\xa8\xdd\x00\x9e\xd3\x27\x13\x54\xdb\x30\xd4\xd7\xda\x0c\xf3\x66\xed\xcb\xe0\xb0\xa5\x2e\xb8\xd4\x0a\x6f\xa3\x5a\x41\x1a\xb0\x45\x65\x39\x33\x0c\x0b\x7b\x7f\xd9\x4e\x28\x77\x16\xc7\xdb\xb4\xfb\xdd\x08\x3b\x5e\x9d\xc9\x7b\xf8\xc1\x4e\xe8\x06\x2c\xf2\x35\x34\xce\xba\x1f\xee\x88\x4d\xba\x06\xee\x38\x70\xc7\xea\x35\x70\x47\x7f\x0d\xdc\x71\xcb\x35\x70\xc7\x81\x3b\xde\x39\x77\x44\x5d\x76\x07\xe5\xf9\x7b\x34\x71\xd4\xb5\x65\xe0\xb4\xce\x2f\x54\x55\x9b\x0d\xbf\x71\x09\x14\x1f\x40\xd5\xb6\xb6\xe3\x1c\x62\xc3\x9e\x8f\x9f\x3f\x7b\xd6\x45\xa9\xde\xd6\xf0\x2d\xbc\x82\xe6\x6f\xbf\xfb\x72\xe3\x1b\xeb\xec\x6f\x3d\x58\x4d\x2d\x8e\x7b\x43\x5e\x45\x76\x58\x63\xf8\x04\xea\x24\xa4\x26\x29\xd3\x84\xea\x8a\xa9\x88\xa7\x6c\xe4\x0c\xcb\x65\x8b\xed\x69\x69\x9a\x8d\x89\x14\x2e\x52\x51\xc6\x6c\xb2\xdb\x0c\x22\x46\x15\xe4\x9b\x4c\x99\x9f\x85\x4c\xcd\x57\xb9\xd0\xee\xb8\x98\x29\x30\x07\x15\x72\xc4\x26\xf3\x09\x89\x0b\x66\x13\x9c\xd0\x4f\x67\xdb\x59\xa9\xa5\xd2\x2c\x05\x4b\xae\xcc\x7d\xd3\x37\x9d\x43\x8c\x22\x04\x4a\x16\x34\x49\x96\x84\xdd\x70\x9b\xed\x6b\x06\x07\x37\x21\xd4\x84\x37\x2b\x69\x65\x22\xec\x3d\x3f\xa1\x8e\xc1\xdb\x52\x15\xba\x70\xfb\x95\xb1\x3b\x47\x1a\x5f\xda\x95\x4c\xd6\x0a\xab\xda\x8c\x8b\x36\x70\xf8\x27\x20\xd7\xfb\xcb\xed\x26\x57\xd2\x99\x92\x75\xa0\x5e\x75\xb1\xb4\x48\x12\x83\x18\x68\x85\x5d\x5d\x40\x83\x75\xb4\x21\x91\x0d\x0d\xef\x69\x90\xd0\x86\x4d\xcc\x65\x26\x13\x39\x5f\x86\x90\xc6\x0e\x72\x3c\xcd\x9c\x71\x1c\xbd\x7a\xcc\x37\x68\x7e\x57\xdb\x9a\xc1\xf2\x37\x58\xfe\x06\xdd\x66\xe5\x1a\x74\x1b\x7f\x0d\xba\xcd\x96\x6b\xd0\x6d\x06\xdd\x66\xb0\xfc\x91\x81\x3b\x6e\x80\xc9\xc0\x1d\xc9\xc0\x1d\xd7\xae\x6b\xe0\x8e\x1b\xc1\x33\x70\xc7\x81\x3b\x36\x5d\x99\x8c\xf7\x08\x74\xcc\x64\xbc\x21\xce\x11\xad\x3e\x91\x1c\x27\x32\xc2\xb6\x13\x98\x98\xea\xec\x7c\x8a\xa6\x68\x88\x1a\x91\xbf\x4b\xc1\x30\x78\xcd\xec\x0d\x98\x93\xa0\x0e\x82\x79\xfc\x48\x1d\x6f\x0c\x6c\x1a\xe2\x24\x87\x38\xc9\x47\x1f\x27\xb9\xa0\x0a\xf7\x15\x89\xd2\xfa\xb0\xc9\xe0\x40\x7e\x60\x79\xfa\x44\xa3\x26\x0d\xba\xd8\xed\x86\x14\x9b\x72\x4b\x71\xe5\xb1\xf5\x17\xb0\xf8\xa2\xba\x5e\x2b\x2f\x63\xad\xa6\x38\x66\x31\xc9\x58\x3e\x46\x14\x91\x64\xc6\x6d\x31\xab\x1a\xf6\x59\xf8\x3c\x68\xf4\x63\x75\x1d\x0f\x18\x02\x59\x9d\xc8\x0e\x36\xd7\xd0\x70\x5c\xa1\xf0\x8f\x22\x20\xb2\xab\x54\x3f\x26\xda\x1a\x79\xbf\x69\x29\xd7\x77\x17\xcd\x5b\x95\x3e\x5d\xbd\x1a\xeb\x69\x6e\xac\x7d\x3a\xf2\x05\x1e\x22\xaa\x90\x53\x74\x55\x2d\x3b\xaa\x51\xbb\xe9\x29\xbb\x5b\xa2\xc9\x83\x97\x4b\x5d\xbd\x76\x15\xdd\x76\x12\xdc\x1e\x7f\x91\xd5\x75\x00\xea\xac\xa0\x93\x9d\x95\x74\xb2\x93\xa2\x4e\x76\x55\xd6\xc9\x1e\x0a\x3b\xd9\x4d\x69\x27\xf7\x50\xe2\x75\xf5\xda\x59\x45\x25\x7b\xe8\xf1\xe4\x49\x14\x86\x5d\xbd\xf6\x02\xd6\x6e\x3a\x3d\x19\xca\xc9\x76\xb8\x76\x57\xb9\xc9\xee\x6a\x37\xd9\x1d\x33\x5a\x96\xa5\x5d\xbd\x86\x42\xb5\x7b\x71\xf6\x1d\x18\x57\xf7\x62\xb6\xeb\x3e\xde\x09\x4b\x7c\x9d\xa1\xfe\x85\x4d\x5d\x76\x36\x0c\x7b\x6d\x3a\x06\x03\xa1\x16\x01\x73\xf1\x51\x23\x80\x63\x70\x3f\x76\xca\x6f\x21\x82\xca\xad\xc1\x60\xbe\x82\x6e\x2d\xa4\xc9\x6e\xbc\x14\x4c\x81\x60\xc7\xbc\x89\x28\x6c\xae\x68\x9e\x9d\x60\x38\x48\xc9\xed\x44\x5c\x0f\x10\x29\xdf\x00\x19\x31\x65\x54\x28\x72\xe0\x6c\x4f\x87\xaa\x7c\xe2\x60\x52\x66\xf7\xf9\x11\x21\x09\x39\xcc\xe8\xdb\xdc\xd4\x7d\xd3\xce\x0e\x92\xf6\x20\x69\x0f\x92\xf6\x20\x69\x37\x5e\x83\xa4\xdd\xe1\x1a\x24\xed\x41\xd2\xde\xf4\xe1\x41\xd2\x1e\x24\xed\xed\x1f\xdf\x4d\xd2\xde\x35\x4e\x28\x94\x7b\xad\x73\x0e\x2b\x67\x41\x6b\x7e\x1f\x43\xe4\x0b\x94\xc2\xbf\xfa\x95\xb7\x43\x59\xba\x59\xda\x0e\x25\xf2\x15\xdd\x62\xb2\x45\xb4\xf6\xc2\xf7\xca\x9b\x9b\xa5\xee\xc7\x15\x0b\xb5\x03\x6e\x04\x0e\x85\x1d\x91\xe3\x83\x73\x85\xdb\x4a\x73\x53\x56\xfa\xc9\x63\x72\xe4\x3c\x2e\x50\x21\x5a\x48\x5d\xfd\x51\x68\x3e\x2e\x9f\xf0\x3e\x18\x70\x2f\x56\xf2\x6d\x92\x6a\x7f\x35\x51\xab\xad\x58\xee\xa7\x21\x21\x2c\xaf\xcc\x81\xbb\x46\x7a\x10\x2d\x91\x17\x42\x98\x51\xa1\x4a\x36\x78\xe3\x90\xe6\x60\x01\x38\xdf\xd9\xdf\x08\x4b\x30\x1f\x90\x98\x4a\x28\x05\xfe\x4e\x6a\xcb\x48\xdb\x50\x7e\x29\xac\x47\xd4\xdc\x71\x5e\x5f\x87\x94\xb0\x22\xee\xbf\x3e\x21\xaf\x00\x0f\xc3\x81\x6d\xc9\x69\x9a\x24\xf2\xb6\x0b\x49\xba\xaf\xb4\xa8\xdb\xce\x69\x51\x35\xff\xdd\x90\x15\xf5\x0b\xc9\x8a\x82\x1f\xf1\x08\xf5\x9e\x1e\x45\xbe\x5f\x30\xc0\xa2\x9c\x01\xa8\xd2\x22\xd1\x3c\x2b\x63\xa5\x14\x7e\x2a\x41\x29\x73\x66\x23\x4f\xaa\x78\x69\xbe\x46\xa3\x45\x1d\x3f\x61\x3c\x88\xad\x52\x70\x68\x6d\x74\x07\x4d\x12\x9b\x53\xe4\x44\x52\x0c\x61\xe1\x0f\x1d\x99\x70\xe6\xaa\x22\x3a\x6d\x06\x88\xcc\x91\xa1\x85\xc9\xd2\x56\xaa\xdb\x40\x44\x51\x29\xba\x61\x8e\xf5\xce\xf9\x0d\x13\x25\x25\x3d\x52\xc7\xc7\x8e\x87\xf7\x4a\xe1\xef\x84\x42\xff\x39\xa0\xa4\x7f\x69\x43\xa3\x61\x41\x9e\x4a\x97\xe0\x2b\x69\xf4\x43\x86\x60\x74\xf1\xf3\x77\xb3\x31\xec\xe0\xdf\xbf\x47\xdf\xfe\xd3\xc9\x2c\x7b\x60\x0b\xe3\x43\xc4\xd6\x3f\x7a\xab\xe2\x10\x5c\x5f\x5e\xfb\x06\xd7\xdf\xb9\xe5\xf0\x61\x63\xec\x9f\x80\xb5\xf0\x21\x63\xec\x07\x0b\xe1\xc6\x4d\x79\x6c\xa1\xef\xd5\x6b\x27\x8b\xe0\x60\x0d\xdc\x99\x0b\x77\x64\x38\xfb\x5a\x01\x3b\x62\xc4\x8e\x7e\xf6\xc1\xc7\x7e\x3f\x3e\xf6\x41\xe2\x6d\x79\x0d\x12\xef\x5a\xa0\x0c\x12\x2f\x19\x24\xde\x6d\xcb\x1b\x24\xde\x8d\xe0\x19\x24\xde\x8d\x9b\x32\x48\xbc\x83\xc4\x4b\x9e\x9a\xc4\xbb\x4b\x95\xae\xc1\xd7\xbd\x97\xaf\xbb\x2b\xb5\xe8\x44\x23\x3a\xe2\x41\x67\xdf\xf6\xe0\xd7\x7e\x2c\x7e\xed\xd6\x09\xff\x42\xf3\x7d\x93\xfe\xc3\xbd\x5a\x97\xf9\x4f\x6f\x24\x8f\x49\x56\x68\x9b\x4f\x3d\x64\xff\xf7\x91\xfd\x5f\x81\xfc\x50\x02\xa0\x55\x09\x80\x75\x30\x1b\xea\x00\x0c\x75\x00\x7a\x76\x42\x0f\x75\x00\x86\x3a\x00\x43\x1d\x00\x77\x0d\xd9\x49\x64\xc8\x4e\x6a\x75\x0d\xd9\x49\xeb\xaf\x21\x3b\xe9\xd1\x5a\x5f\xc9\x90\x9d\xf4\xb8\x2d\xb1\x64\xc8\x4e\x1a\xac\xb3\x2d\x37\xea\x09\x66\x27\x0d\x75\x00\x1e\x6b\x8c\x02\x19\x24\xed\x41\xd2\x1e\x24\xed\x41\xd2\xde\x7c\x0d\x92\x76\x87\x6b\x90\xb4\x07\x49\x7b\xd3\x87\x07\x49\x7b\x90\xb4\xb7\x7f\x7c\xa8\x03\xf0\x84\x62\x23\xc8\x50\x07\x60\x88\x97\x18\xea\x00\xfc\x72\xeb\x00\x54\x7c\xf7\x0f\x57\x0c\xa0\xfb\x34\x86\x8a\x00\x43\x45\x80\xa1\x22\xc0\x50\x11\xc0\x5d\x43\x45\x00\xbc\x1e\x93\xad\x71\xc8\x8f\x5a\x0b\x94\x21\x3f\x8a\x0c\xf9\x51\xdb\x96\xf7\x04\xec\x86\x43\x7e\xd4\x23\xb4\x15\x0e\xf9\x51\x83\x5d\xb0\xbe\x39\x4f\x24\x3f\x6a\xa8\x08\xf0\x18\xbd\xed\x83\xc4\xdb\xf2\x1a\x24\xde\xb5\x40\x19\x24\x5e\x32\x48\xbc\xdb\x96\x37\x48\xbc\x1b\xc1\x33\x48\xbc\x1b\x37\x65\x90\x78\x07\x89\x97\x3c\x35\x89\x77\xa8\x08\x30\x54\x04\x18\x2a\x02\x3c\x45\x0f\xf7\xd6\x9d\x66\xe2\x66\xdd\x9e\x56\x76\xf1\x95\xb8\xa9\xea\x29\x4c\xdc\xf0\x5c\x0a\xa0\xc0\x37\x34\xe7\x74\x9a\xc0\x49\x05\x89\xc7\xc2\xdf\xd2\x4f\x96\x4f\xc8\x4b\x2a\xac\xa3\x15\x3d\x99\x6b\xe7\xbf\x1d\xf1\xb7\xa0\x7a\x7d\xda\xdf\xd1\xaa\xa8\x26\x1a\xa7\x4e\xec\x03\x66\xea\x94\xbc\xf4\x13\x5f\xfb\x99\x56\x04\xbc\x8d\x7e\x30\x06\xe4\x5c\xfb\x40\x3b\x29\xde\x0c\xb1\xf9\x6c\x56\xc0\xf2\x8e\xa6\x65\x8a\x7f\x03\x34\x26\xe4\xad\x95\x90\x28\x79\xf9\xbf\xe7\x67\xaf\xde\x7d\x38\x7f\x7d\xfe\xea\x72\x33\xd2\xb5\x24\x2b\x70\x90\x3a\x4c\xf6\xf0\x3b\xb7\x47\x90\xe6\xcd\x84\xa1\xc0\xbf\x39\xfa\xee\xf4\xf2\x7f\xdf\x9d\xbe\x7d\x75\x0c\xec\x97\x7d\xca\xa8\x88\x59\x4c\x0a\xe5\x48\x42\x96\xb3\x1b\x2e\x0b\x95\x2c\xfd\xf1\x6e\x46\xda\x3a\xb6\x5a\x45\x73\x49\x14\xcb\x6f\x78\xd4\x0c\x22\x94\x62\x69\x89\x40\x91\xc7\xf0\x9c\x29\x99\xdc\xb0\x18\x65\x0d\x3f\x69\xf7\x1d\x2e\xb2\x42\x3b\x89\x18\x42\x10\xcc\xa9\x10\xd1\x82\x8a\x39\x8b\x27\xe4\x4c\x16\x66\xbc\xdf\xfc\x06\x16\x96\xb3\xb8\x88\x90\xd7\x51\x27\x30\xfd\x66\xe4\x28\x89\xa1\x05\x0a\xcb\x28\xa8\x88\x66\x6e\xe9\x21\x74\xd4\x52\x68\xfa\xe9\x05\xfa\xe0\x0f\x7e\x13\xfc\x74\xe0\x4a\x50\x48\xf3\x09\xa4\x47\x38\xab\x04\xaa\x1f\x24\xe4\x20\x7c\x7a\x42\x5e\x99\x6f\xb0\x38\xdc\x07\x0c\xa1\x60\x37\x2c\x07\x79\xda\xee\xc2\x88\xe4\x6c\x4e\xf3\x38\x61\x0a\x82\x07\x6e\x17\x0c\xca\x79\xa0\x84\x65\x01\xc6\xbc\xb4\x2e\xa4\x9e\x90\x33\x36\xa3\x45\xa2\x81\x86\x1c\x1c\x4c\x0e\x7b\x43\xb5\xd7\xb9\xdc\x92\xfc\x5e\x41\xb7\x2b\x2c\x2a\x31\x93\xf9\xda\xe3\x71\x68\x4d\x13\x15\xb2\xa6\x0c\x27\xb1\x9a\x9e\xa3\xd5\xa8\x5f\xb4\x58\x49\x0b\x41\xb0\xbd\x3a\x1f\x49\x31\xe3\xf3\xb7\x34\xfb\x86\x2d\x2f\xd9\xac\x63\x34\x04\x32\x51\xab\xd3\x02\x03\x33\xe4\x10\x07\xdc\xce\x74\xee\xd0\x97\xdf\xc6\x68\xd2\xcd\xe6\xd1\xda\xd2\xb1\x52\xd2\x02\x99\xbe\x65\xdf\x3d\x16\xe7\x29\xaf\xed\x14\xbd\x71\x72\x87\x21\x69\xb7\xe7\x54\x4f\xc8\x5b\x09\x21\x39\x33\xf9\x82\x2c\xb4\xce\xd4\x8b\x93\x93\xeb\x62\xca\x72\xc1\x34\x53\x13\x2e\x4f\x62\x19\xa9\x93\x48\x8a\x88\x65\x5a\x9d\xc8\x1b\x43\xf9\xd8\xed\xc9\xad\xcc\xaf\xb9\x98\x8f\x8d\xa4\x33\xc6\x5d\x55\x27\x20\x4c\x9d\xfc\x1a\x25\xf6\x0f\xef\xcf\xde\xbf\x20\xa7\x71\x6c\x2b\xf6\x14\x8a\xcd\x8a\xc4\x56\xef\x98\x10\x9a\xf1\xef\x58\x6e\x94\xb2\x11\xb9\xe6\x22\x1e\x91\x82\xc7\x7f\xdd\x7c\xb8\x77\x84\x98\xcc\x50\x37\xda\x01\x6a\x57\x20\x28\x2e\x2b\x74\xca\x23\xbd\xa1\x50\x5c\x2b\xd8\x73\x67\x38\xb0\x0c\xa5\xc3\x32\xa6\x52\x26\x8c\x8a\x2d\x6f\x00\xd8\xba\x9f\xd9\xc3\xf2\xd0\xa2\x96\x63\x11\x20\x93\xf1\x0b\xa2\x8a\x2c\x93\xb9\x56\x24\x65\x9a\xc6\x54\xd3\x89\xd9\xb9\x51\xf5\x4f\x10\x8e\x47\xe4\x27\x7f\x13\x24\x5c\xf5\xc3\xe1\xe1\x9f\xbf\x79\xf5\xdf\x7f\x39\x3c\xfc\xf1\xa7\xf0\x57\x20\x7b\x68\xea\xaa\x3e\x62\x44\xee\x89\x11\x77\xdf\xc1\x37\xe0\x4f\xcb\x46\x4f\xa3\x48\x16\x42\xdb\x1f\x34\xd5\x85\x9a\x2c\xa4\xd2\xe7\x17\xfe\xcf\x4c\xc6\xf5\xbf\xd4\x16\x4e\x40\xee\x96\xe8\x00\x38\x2f\xa8\x5e\xf4\x4c\x7a\xca\x73\xb1\x03\xba\xda\x37\xc3\x0a\x49\x29\x85\x7f\xbe\x76\xd3\x35\x1c\xe8\x36\xe7\x5a\x33\x01\x72\x07\xc4\xdd\xc9\xd9\xc8\x60\x6e\xc9\x66\x6f\x9e\x77\x52\x47\x5b\x1f\x45\x0f\xb5\x1d\x16\x07\xb3\xb7\x2b\x43\x64\xf6\x84\x76\x55\xaf\x3b\xbd\x38\x27\x37\x08\x8d\xde\x17\xe2\xa2\xb0\x5e\xef\x7d\x26\x7d\xa5\x2a\xbb\x2c\x2f\x69\xbe\x40\xcb\x92\x8f\xf7\x22\x09\x4f\xb9\x35\x00\xdb\xaa\x56\x8a\x1c\xe1\xcd\x49\x94\x15\x23\xfb\xc0\x24\x65\xa9\xcc\x97\xfe\x4f\x96\x2d\x58\x6a\x24\xb6\xb1\xd2\x32\xa7\x73\x36\xf2\xaf\xe3\x6b\xfe\x2f\x7c\xb1\xf2\x81\xd5\xb7\x51\xa4\x8e\x8a\xdc\x30\x8f\x64\xe9\x28\x08\x8b\x1f\xf6\x2c\x3a\x30\xf5\x7c\x14\xfd\x6e\xbc\xdb\x91\xe5\x7a\x6d\x11\x99\xb6\x5f\x15\xc8\x90\x37\x32\x29\x52\xa6\x46\x9e\x3d\xa1\xb4\x2e\x6e\x8c\x34\xa9\xee\x84\x11\xc6\xfc\x86\xab\x9d\xfc\xd3\x57\xde\x52\x07\x26\xb2\x42\x1b\x4d\x05\x83\xc1\x83\x8a\x70\x52\x81\x0e\xe0\x63\x14\x2b\x24\xe5\xf9\x41\x3b\xef\x2b\xd5\x9a\xe5\xe2\x05\xf9\x9f\xa3\x8f\xbf\xfd\xe7\xf8\xf8\xaf\x47\x47\x3f\x3c\x1b\xff\xfb\x8f\xbf\x3d\xfa\x38\x81\x7f\x7c\x71\xfc\xd7\xe3\x7f\xba\x3f\x7e\x7b\x7c\x7c\x74\xf4\xc3\x37\x6f\xbf\xfe\x70\xf1\xea\x47\x7e\xfc\xcf\x1f\x44\x91\x5e\xe3\x5f\xff\x3c\xfa\x81\xbd\xfa\xb1\xe5\x20\xc7\xc7\x7f\xfd\x4d\xab\xe9\x51\xb1\x7c\xdf\xe2\xc0\xe3\x35\xde\x21\xc2\xbe\x7c\xab\x83\x81\xfe\xd3\xb8\x14\xda\xc6\x5c\xe8\xb1\xcc\xc7\xf8\xfa\x0b\xa2\xf3\x62\xfb\xc1\x28\x89\xda\x2e\x78\xee\xca\x81\xbd\x28\x09\x9a\x27\xcd\xbd\x23\xb2\x62\x51\xce\x74\x5f\x1a\x0c\x8e\xe6\xf8\x47\xcd\x24\x3b\x28\x35\xa5\x52\xe3\xed\x92\x00\xaf\x92\xf3\xce\x72\x99\x4e\x48\x60\x16\xba\x01\x4f\xa6\x7d\xee\x9a\x6d\xd1\x72\xdd\x35\x28\x41\x4f\x4b\x09\xba\xc2\xfd\xbd\x73\x0d\x88\x89\x9b\x4d\x66\x9a\xba\x4d\xf7\x35\xa4\xb2\x84\xe6\x68\x27\x40\x69\x49\x32\x99\x15\x09\xd5\x6b\xcc\x76\x0d\xb6\x69\x8b\xfb\xa5\x17\xc0\x6c\x34\xd8\x81\x2d\x95\x4b\x9b\x8d\xa1\xe4\x34\x49\x08\x17\x78\x12\x60\x00\x67\xcd\xcb\x19\xca\x4b\x84\xa2\xc1\xf9\xc6\x4c\xe1\xd6\x26\xdc\x04\x86\x46\xae\x8c\xae\x93\x6b\xb0\xf8\x43\x42\x0e\xd2\x2c\x6b\x1a\xe3\xa2\x4c\xcb\xf1\xdc\xd6\x7b\x29\x1b\xeb\x2f\x26\x54\x69\x37\x6d\x98\x8d\xa6\xd7\x60\x0a\x8d\x58\xcc\x44\xc4\x20\x04\xa1\x60\xe5\x5a\xa7\x46\x18\x04\xf3\x3e\x8c\x41\x49\x5c\x64\x09\x8f\x0c\xfc\xcc\x4c\x9a\xc7\x38\x4f\xd3\x42\x83\xa1\xf8\xbe\xac\xf8\x66\xc7\xaf\x5c\xb9\x57\x6f\xcc\x07\x52\xe5\x45\x6b\x1f\x6d\xe1\x55\x77\xb5\x9f\xf9\xbe\x1d\xe1\xf5\xe6\xb6\xad\x9c\x6a\x85\xe2\x96\x36\x86\x2a\xa5\xbd\x6f\x8b\x61\x3b\x3a\xfb\x59\xd2\xd8\x0e\xf4\xb5\x3d\x6d\xed\x60\x5c\xea\x4a\x4f\xdb\x5a\x93\xb2\x9c\xcd\xf8\xa7\x0e\xf8\x78\x2a\x4a\x15\x85\xc7\x4c\x68\xa3\x08\x40\x65\xea\x2c\x67\x19\x13\xb1\x4f\xf7\x83\x00\x2f\x51\x5d\xc7\x9d\x7a\x8c\x50\xca\xe8\x7e\xbc\xae\x9a\xa4\x98\xe1\x6c\x7d\xe6\x67\xcb\xee\x7a\xff\x07\x4b\xc8\x78\x6b\xf0\x77\x6d\x1f\x83\x37\x6a\x91\xae\xb6\xfc\xb7\x9d\xa4\xd1\xde\xbc\xcb\x29\x93\x31\xd6\xb8\xd6\x65\x10\xc2\x84\x5c\x35\xbc\x09\xb1\x06\xf6\x89\xc3\x43\x85\x61\x09\xaa\x3e\x50\x2d\xbb\x19\x23\x13\x70\xd0\x8e\x28\x85\xac\xae\xc8\xc1\xf2\x7b\x42\x95\xe2\x73\x31\xce\x64\x0c\x75\xb9\x4f\xd6\x21\x44\x8b\x43\xd5\x2d\xb2\x69\x2b\x5e\x79\xe3\x44\xbb\x6d\xba\xf4\xf6\xb7\x40\xb6\x70\x15\xe1\xf3\xe0\x47\x6b\xd7\x71\x71\xf4\x81\x0c\x59\x4a\x44\xfb\xc1\x34\xa5\x82\xce\xd9\xd8\x7e\x7c\xec\x3f\x3e\xf6\xdf\xda\x07\xcc\x6d\xa8\x56\x94\x50\xbe\x39\x94\xa8\x02\xbc\x83\x97\xf0\xbc\x4d\x14\xf7\x11\x58\xb5\x34\x56\x27\x6d\x72\x81\x2e\x01\xf7\x13\xbe\x3c\x42\x94\xa4\xb9\x75\xa3\x36\xc0\xf7\xa3\xc0\x40\x22\x1b\x57\x9a\x64\x0b\x1a\x04\x74\xd9\x9d\x51\x84\x09\x3a\x4d\x9c\x17\xfc\x6c\x29\x68\xca\x23\xb7\xbb\xa7\x09\x04\xfc\x70\x29\xc8\x8c\x51\x5d\xe4\x8c\xcc\xa9\x66\xe5\xd8\x3e\x52\x90\xfb\xcd\xdc\x64\xcc\x6a\x17\xa2\xd5\x22\x30\xab\x56\x73\x3d\x80\x4c\xe8\x69\x97\xc2\x68\x34\x3a\x07\xde\x7b\x21\x63\x43\xfa\x26\x95\xa7\xb7\x44\xbc\xb7\xe6\x6d\x6d\x2d\x18\x5b\x22\x57\xc8\x5d\xb3\x49\xe0\x92\x01\x1d\x74\xc8\x67\x70\xaf\x02\xad\x4c\xc6\x93\x06\xb4\x73\x1c\xf6\x42\xc6\x36\x28\x4c\x57\xd0\xc0\xe0\xe2\x84\x9c\x9b\xe1\xaf\x5d\x40\x97\xb7\x7c\xd1\x1b\xca\x13\x88\x63\xe0\x42\xf1\xd8\xc8\x3d\xd1\xf6\xa8\x21\x77\xb5\xe4\x8c\x15\x83\x9f\x39\x61\xe3\x94\x66\x63\xa3\x6a\x6e\x06\xd5\xd6\x9d\x59\x1d\x18\x67\x94\xd2\x6c\xed\x5b\xe8\x6b\x68\x4d\x18\x0e\xdf\xa0\x2f\x23\xf6\x7d\x63\x30\xb0\xf7\x13\x4f\x8b\x94\xd0\x54\x16\x18\xbb\xbb\x4a\x67\x5d\x84\x5b\x2f\x94\xb4\x81\x82\xaa\xb5\x24\x94\xb4\x3f\x26\xdd\x63\x71\x1f\xa9\xc9\xbb\x95\xa9\xbb\x9b\x89\xbb\x83\x69\x7b\x67\x93\xb6\xf3\x5e\xb5\xc7\xc7\x4b\xe7\x50\xab\x61\x24\x17\x5b\x31\x32\xf7\x8d\x30\xce\x67\xc4\x8f\xc3\x15\x91\x29\xd7\xda\x7a\x7a\x02\x02\x30\x22\x5c\x57\xdc\x22\xf6\x2c\x40\x23\x18\xec\x9d\xc3\x3e\x65\x09\x8f\x38\xb8\xd7\x9c\x3b\x73\x84\xe2\xf7\x2d\xc7\xb2\x31\x54\x10\x9e\x66\x18\xe5\x0e\x38\x3d\x76\x6c\xd4\x46\x1f\x0d\xe7\x63\x38\x1f\x4d\x2f\xa9\x2e\x4a\x4a\xa8\x9f\x94\xa1\xcd\x5e\x4f\x31\x98\xed\x3a\x52\x41\xe8\x36\xe2\x90\x39\x0b\x90\x5d\x63\x84\xad\x4b\x06\x26\xc3\x2b\xa6\x95\x0d\x96\x86\x37\x8c\x3c\xb7\x92\x7b\xea\x4c\xa4\x3e\x06\x9f\xce\x66\xd5\x27\x62\x96\x25\x72\x99\x82\xca\x7b\xae\xeb\x0c\x1e\x74\x1a\x96\x66\x09\xd5\xcc\x6b\x3c\x9b\xcd\x90\x7b\x8b\xc4\x5d\x12\x3f\x1f\x36\xd5\xf3\x6e\x64\xd2\x47\x99\xc0\x79\x07\xe2\xec\x76\x67\x5c\xcb\x44\xcc\xf6\x62\x6f\x2b\x6f\xdd\x5d\xa7\x57\x76\xb2\xd3\xb4\x4d\xa1\x7c\xfc\x49\x93\x1d\x96\xdd\x36\x31\x72\x48\x85\xdc\x04\xea\x76\xe9\x4c\xad\x53\x99\x5a\xed\x5f\xcb\x94\xc6\x21\x89\xb1\x03\x7f\xb9\x03\xe1\x6f\xeb\x5e\x6a\x99\x30\x94\x5c\xdb\x19\xf5\x3e\x94\xcf\xfb\xc6\x88\x18\xf7\x11\x8c\x74\x3f\xee\xcb\x0f\x4e\x6c\x31\x67\xab\x9c\x17\xa0\x96\xd6\x14\xba\x20\x6a\xe9\xe6\x65\x36\x4e\x2c\x89\xd9\x33\x6d\x5b\x62\x06\x3d\x22\x75\x0e\xde\xe0\x3f\x7b\x6c\x1b\x31\x90\x9f\xfe\x12\x24\xbe\xf8\xc4\x38\x8f\x21\x7f\x76\xff\xfa\xcb\x9e\x09\x4d\xed\x18\x1b\x4e\xa9\x83\x80\xf1\x0a\x5e\x20\x5c\xc4\xe0\x79\xb6\x4b\x05\x08\xe0\x58\x06\x3e\xb0\x2c\x97\x18\x87\x19\x96\xd6\xfe\x0d\x2e\xea\xf2\x61\x65\x7d\xe9\x81\x5e\x65\x4d\x0a\xe5\xc9\x60\xe4\x9d\xb4\xd5\x4a\xd9\x88\x5c\x80\x9d\xad\xbc\x03\x27\xe9\x9d\xc4\xba\xa5\x6b\x9d\xdc\x21\xdc\xb6\x72\x91\xad\x8c\xbe\x02\x90\x6f\x4a\x26\x8f\x2b\xab\x30\xf9\x12\x83\x2b\x29\xb2\x9b\x20\x73\xcd\x96\x25\xb3\xb1\x22\x04\x90\xfc\x51\x89\x25\x8e\x15\x20\xef\xf8\x3f\xce\x06\x9b\x4e\xb9\xc0\x8f\xe1\xd0\x6e\x2b\x60\x74\x07\x50\x23\xd9\x25\x09\x7e\xa6\x0f\x70\xb5\x93\x33\x2a\x30\x7b\xdf\x41\xc6\xf0\x54\xb2\x59\xba\x08\x44\x8a\x57\x3f\x17\x34\xa9\x66\x27\xd9\x5b\xf6\xa1\x15\xaa\x7e\xcb\x93\x38\xa2\xb9\x0d\xff\x84\x33\x4a\x94\xb4\x26\x6e\x20\x04\x11\x15\xfe\xb4\x97\x7b\x84\x0d\x52\x49\x46\x73\xcd\xa3\x22\xa1\x39\x31\x67\x61\x2e\xf3\x56\x19\x44\x5b\x21\x5a\x22\xcd\x15\x8b\xa4\x88\xbb\x28\x00\x1f\xea\xef\xd6\x83\x30\x32\x96\x73\x5b\x07\x94\xa7\xac\x8e\xa4\x47\x55\x67\x97\x9c\xb9\x53\xed\x8f\x58\xc5\xf2\x51\xb5\xc5\x63\x21\xe1\xe3\x80\x3c\xfa\x53\x31\x21\x5f\x2d\x9d\x99\x05\x4c\x2e\x36\xed\x4a\x31\xed\x32\xe4\x1c\xca\x5a\x60\x97\x07\x6a\x26\x73\xc8\x5a\x3b\x8a\x25\xa6\x6a\xdd\xf0\x48\x1f\x4f\xc8\xff\x63\xb9\xc4\xd4\x6e\x36\xc7\xb2\xae\x16\xc5\xbd\xe2\x0a\x1d\x8d\x21\xb4\xe7\x19\x39\xc2\x12\xbb\x3c\x4d\x59\xcc\xa9\x66\xc9\xf2\x18\xf5\x58\x57\xa4\xb7\xcd\xd6\xb5\x31\x1a\x04\x15\x99\xff\xf0\xfb\x0d\x4f\x76\x4d\xae\xfc\xce\xa5\xab\x95\x90\xc1\xe0\xa2\xda\x16\x7a\x1e\x24\x37\x88\x9b\x61\x70\x52\x99\xed\xed\xc8\x8c\xdf\xe0\xbf\x19\x3c\xa0\x24\x67\x73\xc0\x72\xc4\xdc\x3d\x71\x1c\xc3\xac\xdf\xca\x42\xac\x37\x09\x56\x16\xfe\xc6\x2a\xe1\xdf\x05\x2f\xae\x4d\x5f\xbe\x17\x31\x21\x98\x49\x60\xa2\xa4\x04\xec\x92\xc0\xce\x0d\x79\xc0\xa7\xca\x10\xb5\x16\x4e\x87\x1e\x53\x95\x61\x2e\x5b\xd2\x61\x7a\x49\x68\xf6\x1f\xea\x80\xcb\x90\x39\x62\x01\x53\x4b\xe8\xd5\x96\x1c\x00\x7e\x22\x04\x4b\x04\x85\x6f\xb1\xd8\x85\xb7\x62\x11\x02\x78\x95\x1c\xbe\x38\xec\x85\xf8\xe2\x72\x72\x99\xd1\x39\xdd\x5e\x08\xbd\xaa\x8c\xd4\x5e\x25\x31\xd3\x2c\x4f\xa1\x62\xf5\x42\xde\xe2\xef\xc8\xb6\x32\xfb\x14\xb3\xc5\xbe\xcd\x6a\x17\x52\x01\x57\xaa\x66\x37\xc3\xf9\x85\x88\x89\x5b\xba\x24\x34\x97\x85\x88\xad\xd4\xe4\x09\xe8\xdb\xda\x87\xdf\x49\xc1\x4a\xb7\x58\xd5\x63\x3a\x65\x9a\x9a\x63\xf3\x7c\xf2\x7c\x4b\x51\xfa\x96\x00\xeb\x98\xd0\x0e\xb3\xa9\x59\x0a\x5d\x10\x8d\x3b\x33\xbd\xcc\x2b\x67\x34\x7e\x2f\x92\x2e\xb2\xdc\x5b\x44\x2f\x78\x75\x0c\x4a\x18\x9f\x81\xed\x76\x84\xb7\x6e\x73\xae\x59\x40\x1e\x8f\x66\x34\x51\xd0\x89\xbf\x10\x5e\x84\x3d\xae\x8a\x20\xf0\x48\x9b\x05\x6d\x0f\x14\x53\xc5\x74\xcf\x73\x66\x0f\x14\xa0\x5c\x79\xcc\x3c\xc2\x1d\xaa\x0d\x47\xae\x9a\xf5\x4d\x8e\xf0\x49\x23\xb1\x49\xa9\x8f\xfb\x89\x1e\xc3\x05\x1a\xcd\xba\x8b\x4a\xe2\x0a\x0a\x64\x3d\xae\xf6\x2b\xb6\xa0\x37\x4c\x11\xc5\x53\x9e\xd0\x3c\x81\x24\xe2\x2b\x9c\x1f\x99\x16\xba\xb9\x34\x45\xb7\xb2\x07\xe1\x4c\x82\xe1\xb6\x82\xda\xcd\xc3\xc0\x09\x68\x84\x9b\x17\x76\x07\x70\x2d\x05\x3e\x45\x49\xa1\xf8\xcd\xbe\xa7\xc9\xa6\x45\xed\xc0\xaa\xeb\x5c\x3a\xb3\xa1\x10\xf7\xc8\xa3\xab\x1a\x86\x21\x55\xb1\xdb\x74\xe0\xc9\xa8\xec\x83\xe6\xbe\x84\x90\xc8\x28\x62\x4a\xb9\x60\xeb\x65\x18\x00\xee\xd7\xf0\x54\x2a\x8d\xd0\x5b\xf5\x2a\xa1\x4a\xf3\xe8\xab\x44\x46\xd7\x57\x5a\xe6\x9d\x8a\x79\x34\xbd\x5f\xab\xcf\x72\xfa\xfd\x15\x39\xe3\xea\x3a\x48\x33\xb2\x4e\xd3\xd0\x5c\x42\xc9\x75\x31\x65\x09\xd3\x87\x87\x0a\xb9\x5c\x4a\xa3\x05\x17\xcc\x31\x38\xe1\x73\xd5\xac\xc2\x67\xa0\xdc\xd5\x67\x6a\x33\x22\x4f\x2c\xbe\xfe\x9a\xde\x2a\x86\xd3\x9f\x9a\xe9\x9b\x9f\x59\x9b\x52\x15\xbd\xfa\x29\x70\x32\xe7\x67\x3d\xf9\x20\x66\xea\x83\x99\x63\x37\xe3\xf6\x21\xbe\xe5\x54\x87\x19\x4f\x98\x6d\x4b\x62\x16\xec\x42\x6b\xec\xa9\x80\xfd\x5b\xca\x82\xdc\x52\xd4\x91\x81\x22\x4e\xc8\x07\x9e\xbd\x20\xaf\x84\x2a\x72\x56\x5a\x37\xea\x43\x71\x55\x26\xa0\x3a\xe5\x0a\xf6\x1b\x15\x10\x43\xf7\xac\xae\x45\x5e\x7d\xa2\x69\x96\x30\xf5\x82\x1c\xb0\x4f\xfa\xf7\x07\x23\x72\xf0\x69\xa6\xcc\xff\x84\x9e\xa9\x83\x09\x39\x4f\xbd\xd7\x9d\x8b\x19\xcb\x73\xe6\x22\x24\xf1\x05\xc3\x9a\x03\xae\x7b\x27\xe8\x62\xa3\x6d\x8d\xec\x16\x4b\x72\x8b\x85\x6a\x0c\xc1\x67\x79\x2e\x73\x9f\xa0\x12\x80\x01\x78\x4d\x24\xd3\x2c\x97\x29\x0f\xcc\x7c\x80\xee\xbd\x86\xe1\x82\xf1\xa1\x4d\xa7\x9e\x3a\x36\xf8\x17\x1d\x42\x04\x37\x44\x1b\x54\x38\x9f\xb9\x60\x0a\xd4\x22\xad\x5a\x0f\xc3\xd9\x87\xcc\xe6\xdb\x51\x0c\x21\x0b\xb7\xfb\xb5\xcf\xb4\x25\x27\x31\xbb\x39\x51\x31\x7d\x3e\x82\xcf\x28\x1b\x21\x5c\x9d\x13\x55\xe4\xe0\xf9\xc1\x84\x5c\x39\x46\x3c\x0a\xe7\x58\x3e\x37\x93\xb9\x1f\x10\xec\xec\xcf\x0e\xc8\x91\xcc\x61\xe4\x88\x0a\x92\x30\x7a\x63\x6d\xcb\x78\xdc\x96\xa8\xee\x1e\xb7\xce\x94\x6e\x9b\x34\xda\xbe\x25\x53\x5b\x21\x75\x75\x13\xdd\x7b\xce\x04\x90\x17\x36\x89\x68\x26\x73\x5b\x20\xc8\x3f\xa2\x98\x86\xa3\xc7\x45\x45\x85\x7e\x00\x02\x4b\x3a\xd6\xd8\x70\xd4\xb3\x2b\x74\xdc\x7b\xa0\x03\x09\xfe\x73\xc1\xc8\xf9\x99\xaf\xb4\xc1\x72\xc5\x95\x36\xc7\x38\xae\xb0\x2e\x8e\xfc\xec\xe8\x34\xa5\x7f\x97\x82\xbc\xfa\xea\xca\x4e\xe0\xf8\x41\x41\xb5\x95\x1a\xd0\xbf\x17\x39\x33\x5c\xb8\x03\x73\xf7\xef\xd4\x19\xba\xb9\x4f\xce\xa8\xa6\xc8\xd7\x6d\xa4\x95\x28\x49\xb9\x61\xd9\x53\x2e\x62\xfb\x53\xc0\xb0\xef\x9b\xb7\x9a\xdd\x7b\xb7\x2d\xac\xd5\x3d\xf8\xed\xe5\x79\x4f\x3c\x38\x02\x62\x3e\x7f\x2b\xe3\xce\x8c\x38\x78\xd5\x11\xdf\xff\x34\x30\x7d\x89\xf7\x49\x6a\xc6\x24\x46\x7b\x1f\x91\x4b\x46\x63\x62\xce\xaf\xfd\xe7\xf7\x46\xf7\x6c\x4d\xab\x5a\xb1\x10\x07\xc0\x8e\xcb\x70\xaf\xb9\x25\x84\x29\x30\xb1\xc1\x1c\x38\x56\x96\x97\x4c\x13\x39\x25\xf6\x38\xf4\x3d\xf7\x6f\x2f\xcf\x77\x98\xfa\xb7\x97\xe7\x6e\xe6\xe6\x9f\x72\x76\x7f\x93\xde\x49\x7c\x2b\xa5\xb7\xd7\x35\x71\xab\x64\xc9\x65\x46\x57\x5d\x24\x6b\x2f\x8f\x4d\xfa\x92\xc4\xfa\x84\xd8\x35\x17\x2d\xd2\xf3\xab\xa7\xcc\xbc\x63\x14\x0a\x8c\x55\x0b\xfc\x88\x57\x0b\x0a\x35\x11\x7c\xa6\x2e\xec\xb3\xd9\x78\x65\xb8\x82\xdb\x71\xa3\x04\x02\x6d\x23\x67\x0c\xbd\x9c\xf1\x0b\x17\x3b\xe0\xdf\x68\x7e\xe1\x2d\x44\x6a\xc6\x96\xbe\x12\x0c\xdc\x8c\x03\x04\x3b\x42\xab\x92\xf0\x3f\xd9\xe0\x74\x9e\x70\xe8\xb1\x60\xb4\xfb\x30\x1a\x55\xc1\x94\x7b\x3d\xf5\x3b\x8a\x1c\x5e\x9c\x58\x31\x6e\x91\x23\xf3\xdb\x09\x18\xc7\x8e\x27\x40\xad\xe0\x41\x88\xd3\xaf\x09\x25\x97\xdb\x84\x92\xde\xe4\x07\xd8\x01\x73\x62\xba\x72\x45\xf3\x4e\x23\x57\x84\x1f\xae\x6c\xa1\xc9\xc7\xcc\x18\x31\x09\xb3\x15\x6b\x04\xfc\xda\xfa\x64\x7b\xe6\xb8\x2f\x72\xc5\x4f\x03\xb9\x88\x4f\x75\xdd\x81\x7f\x96\x2f\x3a\x3e\xe4\x73\x61\x5c\x31\x8f\x4a\x68\x26\x62\xdf\x95\xa5\x35\xb6\x36\x1b\x72\x5d\x83\x73\x6d\x1a\x26\x76\xa9\xe6\xe2\x30\xa2\xeb\xaa\xdc\x7b\x6e\x51\x48\x02\xe1\x36\x69\x81\x8b\xad\x27\x19\xb1\x6c\x31\xeb\xe2\x12\x37\x2f\xbc\xbe\xaa\x5a\x02\x5f\xb2\x6c\x41\x5e\x5f\x35\x1c\x63\x80\x3d\xcc\x5a\xa1\x7d\xf0\x50\x91\x84\xcf\x98\xe6\x5b\x96\x70\x07\x07\x39\x95\x82\x6b\x99\xaf\xaf\x8d\x40\x3a\x1d\x4e\x37\x5c\x57\x86\xea\xde\x33\x3b\x5b\x56\x16\x7a\x1b\xdc\xa5\x24\x92\x49\xc2\x22\x6d\x6b\xdd\x01\x78\xfd\x6b\x0d\xca\x13\xb3\xf6\x80\xc9\xf5\x9f\x40\x7d\xb2\x8a\xd2\x09\x6e\xee\xc9\xe5\xab\xd3\xb3\xb7\xaf\x26\x69\xfc\xeb\x85\xbc\x1d\x6b\x39\x2e\x14\x1b\xf3\x16\xa5\x8b\x1e\x2e\x7a\x11\xaf\xac\x55\x25\xbd\xba\x41\x06\x8b\x00\xbe\x77\x89\xd5\xe4\x5b\x85\x51\x0b\x60\x3b\x72\x3e\x29\x29\xf5\x88\xe4\xd4\x26\x4f\x53\x6b\x7a\x2a\x92\x04\xa1\xad\x73\xc6\x46\xa1\x2d\x66\x63\x6a\x48\xe7\x85\xed\x6d\xa8\xa8\x2c\xf0\x6e\x65\x88\xfb\x47\xb8\x2e\x1c\x63\xbb\x4c\xb2\x0a\xc5\xf2\xcd\x2a\x1c\xaf\x2a\xf7\xd1\x70\xa6\x17\x06\xaa\xd7\x6c\x49\x20\x10\x78\x26\x73\x83\x4f\x79\x15\x37\x98\x8e\x60\xe9\x27\x85\x62\xf9\xc4\xb2\x9d\x7b\x07\x5b\x87\xf2\x62\x3b\x54\x75\xf4\x2f\x36\xc1\xcc\xde\x2e\x4b\x7e\x5b\x79\x8d\x16\x7a\xc1\x84\xe6\x36\xfd\xd8\x42\xa6\x11\x88\x36\x0e\xfb\xde\xa1\xd6\xb2\xba\x59\xb7\x5a\x64\x43\xfd\xae\x2e\x38\x69\x4e\x4d\x57\x74\x34\xef\x40\x22\x62\x48\xe6\x7d\x2e\x57\x4e\x63\x09\x01\x1b\x58\x9a\xb2\x82\x68\x34\x4e\xb9\x78\x84\xa7\x33\xe2\x22\xde\x06\x87\x9a\x01\x0c\xde\xa8\x8a\x62\xf6\x9e\x35\xe8\x7b\xbf\x21\x75\x9a\x14\x56\xc2\xb0\x1e\xc4\xaa\xff\xb0\xd5\xe1\x4b\x97\xea\xe7\x64\x8c\x5f\x19\x67\x71\x09\x95\xc1\x19\xb8\xea\xc1\xeb\xd7\xa4\x74\x0f\x2e\xbe\x9e\x76\x9b\xdc\xb3\x34\x74\xb7\x7a\xee\xbd\x00\xaa\x8b\xcc\xb3\x2f\xf7\x2e\x69\x66\x26\xb9\x0d\xff\xf4\xa5\x42\xf1\x8c\x3a\x7d\xd9\xc0\x23\xa3\x39\x4d\x99\x66\x39\x86\xc0\xd9\xa0\x3a\x61\xb3\x13\xde\x67\x4c\x5c\x69\x1a\x5d\xf7\x5d\x23\x79\xe0\xb8\x77\xc7\x71\xf7\x76\x05\x3a\x44\xb0\x05\xd3\x96\xa1\x17\x99\x0b\xcb\x85\x1e\x09\x89\xf1\x75\x0a\xbb\x58\x39\x7c\x9d\xba\x2a\x77\x2d\xeb\x16\xa2\x61\x03\x22\xdd\x7c\xe1\x4d\x88\xe0\x47\x28\xf4\xc3\x0d\xdb\x9f\x01\x4b\x02\x77\xf1\xa3\x05\xaf\x56\xa9\x43\x6a\xee\x4c\xb9\x2e\xcf\xbd\x62\x9a\x64\x2c\x4f\xb9\x4d\xeb\x96\x82\x44\x36\x2d\x00\xf8\x9a\xe1\x61\x76\xb8\x80\xe7\x09\x22\x23\x4d\x6d\xce\x0c\x99\x32\x7d\xcb\x98\x20\xcf\x9e\x3d\x7b\x06\x72\xc9\xb3\x3f\xfe\xf1\x8f\x04\xea\x48\xc4\x2c\xe2\xe9\xea\x83\xf0\xd4\xbf\x3d\x7f\x3e\x21\xff\x7d\xfa\xf6\x0d\x44\x95\x65\x5a\x91\xa9\xd4\x0b\x3b\xb2\x79\xa0\xf2\xb2\x1a\x91\xff\xba\x7a\xff\xae\x2c\x90\x54\xfd\x15\x54\x10\xbf\xbc\x6a\x88\xe0\xb3\x3f\xfc\xfe\xf7\x13\x72\xc6\x73\xc8\x27\xe6\x90\x01\xe1\x83\x20\x33\x17\x18\x08\x1d\xc9\xea\x19\xfc\x96\x83\xd8\x20\xe1\x94\xcf\x17\x00\x00\x73\x20\xa4\x98\x25\x3c\xd2\x58\x6c\x14\x8f\x3e\x02\xda\xd6\xd7\xa1\x36\xdd\xcb\x4a\x11\x30\xb9\x11\x49\xf8\x35\x23\x33\xf5\x75\x2e\x8b\xac\x4c\x73\xcc\x99\x32\xb2\x6c\x44\x05\x64\x95\xc0\x60\xe5\x5e\x29\xa6\x1f\x34\x08\xa3\xa5\x21\xa8\x82\x83\xf0\x4e\x4d\x40\x19\xf9\xa2\x8b\x63\xc4\x87\x8c\x72\x1f\x38\x08\x3e\xf5\x4a\xcb\x0f\xaf\x7b\xc6\x41\x91\x49\x97\xbb\x92\xe5\xf2\x6f\xb8\x55\x5c\xb8\x2c\x28\x2b\x21\x2b\x2b\x93\xd9\xa4\x53\x11\xd8\x5c\x5d\x56\xbe\xe1\x85\x36\xe3\x3f\xc8\x9f\x3a\x9f\x85\x89\x76\x90\x96\x8e\x7d\x17\x2b\x15\x71\x1b\xbe\x5c\x76\x71\x30\xd8\xa4\x70\x5f\x0b\xb1\xf2\xb6\x6d\xb0\x64\xc9\x8f\x6d\xbb\x65\x53\xd8\xca\x31\x30\x14\xd7\x26\x00\x05\xcd\xdc\x2a\x55\x2a\x2b\x51\x3e\x8a\xe9\xc2\x82\x06\x22\xaf\xcc\xb7\x99\x52\x36\x8f\x28\xa5\xf9\xb5\x51\x12\x2c\x15\x98\x40\xd4\xb3\xf2\x39\x4c\x98\x50\x76\x83\xc6\xf2\x94\x2e\x2b\x59\x03\xe6\x23\x87\x93\xc9\x21\x1e\x13\x99\x63\x91\x5f\xc4\x79\x73\xff\x81\xf2\xa5\xab\x51\xe9\x34\xc3\x7e\x9c\x60\xcf\xb1\xfd\x8c\x68\x25\xda\x99\x5a\x48\xb5\x29\xed\xdd\xb1\x9f\x69\xb7\xc6\xd9\xed\x1b\x66\x8f\x61\x01\x2d\x1e\xed\xda\x1c\xbb\x43\x53\xec\x75\xd5\x1a\x2c\x8c\xed\x49\x68\xdb\x2a\xb6\x73\x93\x80\xb4\x15\xeb\x6b\x98\xea\x61\x6a\x39\xdf\xfb\x6e\x9c\xcf\xe6\xeb\x55\xba\x06\x3e\x7e\x56\x77\x3e\xc3\x4c\x97\x2a\xe9\xb2\xa4\x21\x14\x05\x7c\x87\xbe\x32\xed\xe5\x51\x73\xb4\x10\x6d\xba\x75\xa4\xe8\xc2\xdd\xf0\x6a\xe7\x98\xc0\xab\x82\x6b\xce\x3b\x81\x8b\xb6\xa4\x34\xab\x74\xfe\x49\xd0\x6e\x00\x32\xa6\x3b\x3c\x13\xf2\xd6\x92\x5a\x44\x32\x3a\x55\x32\x29\x34\xbe\x5a\xfe\x18\xd2\x61\x18\xd4\x55\x59\x00\xe2\xeb\x1f\x0b\xa8\xb2\x2e\x7b\x1f\xb6\x23\xd0\x78\x75\x38\x9c\x43\x19\xe0\x3b\x2c\x03\xec\x0b\x57\xab\x96\x8d\xdc\xd4\x9d\xd5\xdd\x8e\x14\xef\xa2\x5f\x29\x4e\x8e\xca\xfe\x41\xce\x1d\x7f\x2e\x34\xcb\x67\x34\x62\xc7\xa1\xde\xe5\xfb\x34\xf9\x10\x21\x97\x17\xb1\xa0\x22\x4e\x50\x00\x8f\x58\x0e\xb8\xcf\x3e\x69\x96\x1b\x90\xbc\xbc\x3a\x27\x71\xce\x6f\x58\xae\xc8\xd1\x57\xcc\xc8\x8b\x58\xfd\xb4\x55\x76\x55\xbf\xb1\x95\x30\x8d\xbe\x34\x3d\x18\xac\x6b\xa8\x1e\xbc\xe4\x28\x8f\x08\xce\x57\x09\x26\x84\x2a\x82\x54\x85\xba\xec\xc4\xa0\x12\x10\x68\xa0\x19\x4b\x59\xe4\xd6\x8a\xee\x0a\x2e\x47\x32\x37\xea\x12\x0e\x4c\x15\xc9\xd9\xdc\x48\xb3\xb9\xeb\x42\xce\x48\x94\x14\xe6\x46\xaf\xe1\x6c\xfb\x04\x00\x96\xa6\xd9\x4d\xb1\x7a\x33\x2b\x55\xcb\x1b\x1e\x3b\x56\x89\x4d\xd1\x7d\xbb\xd3\x8c\xaa\x20\xd5\x26\x68\x4d\x11\x00\x16\x65\x74\x60\xa8\x3e\x89\xb5\x12\xec\x1f\x1a\x85\x25\xd4\xb6\x68\xd1\x57\xa6\x0b\x11\x96\x31\xbb\x28\xa6\x09\x57\x8b\xab\x1d\x4d\x88\x4d\x43\x60\xb0\xc2\x8a\xd7\x6f\xad\x25\x51\x31\xa1\x38\xb0\x3c\x43\xc6\x0d\xd3\xe5\x46\x8e\x92\x00\x44\xf7\x76\x88\x90\x12\xb2\x3f\x12\x66\x2b\x18\x98\x9f\xde\x95\xf3\xb0\x49\x69\x58\xb3\x24\x66\xdf\x8a\xac\x72\x3f\xa2\x49\xa2\xea\x09\xbb\x8e\x62\xa2\xec\xe1\x12\xd5\x70\x4f\xb9\xd9\x6e\xdf\x32\xa9\x56\xfd\x72\xed\xc2\x14\x49\x25\xa6\xf1\x08\xa8\xbe\x8b\x0f\x41\xe9\x15\xf7\x42\x90\xc8\x08\xe9\xca\x80\x32\x3d\xf7\x94\x1d\xcc\xa5\x77\x67\x2e\xdd\x37\x0e\x4f\xf9\xf6\x72\x34\xc8\x86\xae\x94\x25\xf5\xa4\xd4\x91\xdc\x2d\x41\x1d\xbd\xba\x15\xf0\x9b\xa7\x5a\xe7\x7c\x5a\xe8\xee\xf5\xde\x6a\xaf\x03\x9b\x36\x8a\x08\x9c\xe2\xb1\x5d\x7d\x14\xa0\x68\x59\xf7\xbc\x4a\x3e\xcb\xb3\x5f\xf2\x1c\x60\x37\x78\xf3\x50\x91\x58\x46\x85\xaf\x0b\x0b\x40\x2b\x1d\x68\x6d\xaa\x27\x92\xae\xe7\xaa\x7b\x49\xaf\xf0\x23\x5b\xd1\x2b\x96\xb7\xe2\x96\xe6\xf1\xe9\xc5\x96\xe8\xfb\x2a\x3b\x2f\xdf\x0a\x05\x25\x77\x1b\xda\x83\xd2\xa9\x2c\x74\x59\x3a\xf4\xf3\xb1\x57\x37\xa9\xe9\x5a\x1a\xd2\xd0\xd2\x1e\xdd\x55\xd1\x1f\x4c\xdc\x83\x89\xbb\x72\xed\x62\xe2\x3e\x47\x13\x77\x58\x07\xb7\x72\x5c\x5d\x79\x05\x9e\xb4\x8d\xed\xbd\x4b\x2b\xe9\x59\x49\x60\x50\x9a\xaa\xc7\xf1\xd7\x04\x38\x3c\x22\xe5\xde\x06\x42\x9f\xa3\x40\xc0\xb3\x1f\xde\xa2\x7a\x47\x76\xd2\xf6\x0d\xcc\xf1\x5a\xd7\x61\x74\x53\x43\x73\x90\x1a\x82\x0e\xe4\x23\x5b\x05\x7a\x64\xf5\x2e\x11\x97\xbd\x3d\xb1\x08\x75\x87\xfe\xc5\x78\x75\x04\x3e\xe9\xbc\x01\xa4\x63\x77\x71\xbc\xba\xee\x06\xd9\xa1\xd3\x38\x5e\x0f\xdc\x6f\x1c\xaf\xce\xb6\x6f\xd2\xbd\xf7\x78\xc3\x72\xef\xb6\x03\xf9\x8e\x4b\xdb\xdd\xac\xbf\xab\x39\x7f\x54\xf6\xbd\x7c\xfc\x6c\x7d\x30\xe7\xaf\x5c\xf7\x68\xce\x0f\x08\xb7\x23\x06\x0d\xa6\xfd\xd0\xdc\xe6\xec\xfb\x53\xe6\xc4\xca\x49\x59\x7d\xcd\xa0\x9c\xb3\xec\xcb\xbc\xea\x56\x3d\x9c\x4c\x0e\x0f\x9d\xbd\xdf\xe2\x67\xa1\x67\xe3\x3f\x11\x26\x22\x19\xe3\xa6\x9a\xf1\x73\xa5\x81\xe9\x97\x6a\x7a\x38\x97\xd4\x7d\x2b\x74\xcd\xc2\xd8\xdd\xb6\xa4\xc3\x09\x76\x25\x01\x5e\xef\xc5\x22\x4b\xc6\xe8\x4b\x0c\xd8\x05\xfa\xaa\x42\x96\x43\x96\xed\x4b\xb0\x73\x4f\xa5\xe9\x3f\x39\xc2\x9b\x93\x28\x2b\x46\xf6\x81\x49\xca\x52\x99\x2f\x47\xfe\x21\xf3\x63\xe5\x2d\xfb\x04\xd6\x9e\x8a\x8a\x3c\x67\x02\x1a\x98\x3c\x56\xfe\xea\x40\x70\x87\xec\xd5\x43\xbd\x5d\x76\x5b\x79\x55\xb7\xb5\xf4\x01\x80\x49\xaa\xec\x35\x37\xf3\x95\x4d\xd4\xa8\xf4\x73\x98\xbb\x4c\xdc\x90\x1b\x9a\xab\xb6\x30\x27\xbb\x72\xd4\x98\xdf\x70\xd5\xa6\xe4\xff\x9a\xc5\x5d\x79\xb3\x0f\x94\x1d\x2c\x74\x56\x68\x4b\x9d\x1c\xee\xba\x4a\x4d\xd5\x96\x71\xa5\xe0\xf0\x7c\x53\x23\xb6\xfa\xf5\x48\x1b\xc9\x54\xaf\x56\x6d\x65\xaa\x57\xb7\x26\x33\xcd\xef\x76\xdc\xfa\x3d\x1a\x34\xd5\x2f\xb7\xb5\xbb\x9f\x91\x92\xc9\x94\x85\xc1\x9c\x60\x76\x07\x87\x00\x8c\xe1\x67\xbc\x53\x2a\x82\x7b\xa7\x1a\x2e\xa9\x59\x9a\xc9\x9c\xe6\x4b\x12\x5b\x5b\xc3\xb2\x21\x23\x34\x48\x09\xdd\xbb\x34\x0c\xcc\x23\xe6\x79\x4f\xd9\x08\x1d\xb2\x41\x59\xcc\x8b\xb5\x7d\xdc\xd7\x81\x0d\xdf\x0a\x81\x76\x0b\xd5\xc0\x6c\x25\x31\xe7\xee\xb4\x8f\xb9\xc2\x8a\x34\xba\xb6\x1d\x83\x1c\x54\x91\xf7\x07\x49\x2e\x07\x07\xb5\x3a\xd0\x60\x1e\x03\xdf\x9f\x6d\x99\xea\x1e\xc6\xb1\x2b\xa6\x2c\xf4\x86\xd8\xb0\x80\x23\xfb\xe0\xb1\x91\x48\xde\x02\x1b\xbc\xa7\x5d\x22\x1d\x33\xdb\xf8\xdf\x19\xb4\x1b\xeb\x1c\x1b\xef\x5e\xf4\xe5\xa0\x25\x48\xe6\xbe\x2f\x5a\x22\xa3\xc0\xf7\x5c\xe1\x50\xb0\x0d\xaf\x1c\xf2\x3b\xdb\xbd\xd9\x0c\x33\x2a\xca\x17\x60\xf4\x49\x14\xfa\xf5\x78\x04\xa5\x2d\x41\x8a\x07\x60\xfa\x0d\xf8\x10\x74\x09\x2c\x94\xf9\x12\x54\x9e\x0f\x9e\x29\x3f\x74\xeb\x2a\x6c\xea\xa0\x91\x5b\x55\xf7\x30\xbf\x5c\xf9\x95\x95\x7a\x1b\xa4\x40\x38\x41\x5d\x15\x20\x26\xda\xaf\x58\x71\x49\xce\xc0\x77\x55\xb6\x45\xf3\xc5\x1d\x57\xd0\x4c\xf0\xa4\x8a\x67\xae\x96\x9d\x5f\x78\x21\x6c\xa0\xc1\x0a\xd2\x34\xe3\x4c\xa1\x58\x3e\x9e\x17\x3c\xde\x05\x5b\x1e\x31\x03\x6c\xcd\xf6\xba\x33\xbb\x8e\x2c\x6e\x0f\xc6\xe6\x03\x31\x3a\xb0\x86\x83\x32\x7a\xa3\xc2\x1b\xc2\xb2\x78\xd5\x48\x0e\xea\x82\x05\xfc\x91\x73\x2e\xa1\x0f\x5e\xb5\xb5\x3c\x23\x5a\x46\x36\x59\x97\x57\xca\x5d\xe2\xb0\x88\x79\x10\xd8\x3a\x36\xff\x71\x2a\xb0\xb3\xe7\x4f\xd9\x4c\x96\x1d\x52\x50\x23\xb2\xe1\xb8\x31\x4b\x98\x86\xe8\x5a\xe6\x2b\x95\xa2\x4b\x38\x95\x37\x06\x99\x3f\x0a\xf2\xad\xab\xd9\xcf\x67\x2f\x08\x3d\xae\xa4\x40\xd8\xae\x33\x82\xb1\x18\x63\x74\x93\xf2\x3b\x79\x21\xd4\x88\x4c\x8f\x5d\x3c\x0a\x9c\x38\x61\xc4\xc2\xc4\x49\xbc\xa8\x57\xe7\xcc\x00\x00\xd2\x8e\x73\x99\x12\x25\x68\xa6\x16\x52\x83\x6a\x48\x33\x1a\x71\xbd\x24\x3a\xa7\xd1\x35\xb4\x28\xca\x99\xfd\xdc\x88\x44\xc7\x36\xb0\x2b\x04\x5f\x35\x6c\x58\x2f\x72\x59\xcc\x17\x10\x09\x8b\x4f\x45\x09\x55\x6e\xf5\x8d\xef\x5b\x6d\x47\x91\x18\xfb\x0b\xfb\xaa\x81\xb9\xbc\xe1\x8a\x4b\x6b\xed\x75\xe3\x5e\xf8\xca\x70\x68\x41\xc6\xc6\xbe\x47\x8a\x31\xf2\xca\xa1\x04\xfe\x72\x85\x32\x0d\x5a\x36\xf2\x6a\x70\x80\xf4\x25\xcd\x85\x2d\x88\x50\x12\x38\xef\xbc\x42\x86\x69\x66\xde\xf8\xd1\x63\xbf\x5d\xcd\x73\x92\x39\x38\xee\x5d\xe9\x4e\x26\x62\x19\x78\x2d\x4f\x2f\xce\x55\xa8\x8d\x20\x6e\xd9\xba\x77\xf0\x43\x22\xc5\x3c\x2c\x23\x50\x62\xa6\x21\xa5\x02\xda\xbb\xdc\xf0\xb8\xa0\x09\x12\x51\x3b\x99\x97\x57\xe7\xf8\x3a\x9f\x2f\xf4\xf8\x96\x81\x35\x06\x79\x4d\x79\x66\xdc\x47\xf9\x4a\xb4\x0e\x57\x40\x74\xb5\xb5\x26\xa0\x65\xcb\x4c\xed\x96\x2e\xa1\x6c\x8d\x0d\x31\xa9\x38\x4c\x5d\x61\x31\x1c\xa2\x09\xe2\x30\xbd\x53\xdf\xae\xc3\x88\x0d\x60\xae\x32\x20\x06\x4c\x5d\x9d\x9b\x01\x7c\x50\x07\xd0\xdf\xb6\x9d\xd9\xa8\xd9\x20\x23\xdc\x6d\xd6\x65\xee\x40\x28\xbb\x29\x37\xf9\x83\x6d\x9d\xd8\x51\x38\x38\xf8\x3e\x30\x9b\x05\x8e\x0e\x73\x6c\xa8\x88\xc7\x34\x31\x98\x73\xf1\xdd\x4b\x1b\xe1\x8c\x07\xa1\xe2\xc8\x77\x5d\x90\xb8\xf0\x65\xb3\x8d\xcc\xd0\x78\x04\x20\x0f\x7e\xca\x62\x20\x1a\x61\xc3\xc8\x5b\xa3\x21\xbb\xb6\xcd\xdf\xbd\x1c\x11\x3e\x61\x13\xf7\x97\x7f\xd4\x51\x2d\x2d\xe7\x18\x06\xe8\x63\x3c\x01\xef\x60\x2a\xa1\x31\x2a\x7c\xf7\xa7\x3f\x9b\x49\x9a\x5f\xff\x32\xfe\x73\x50\x6d\xf4\x2f\x3f\xd9\x1e\xd1\x3f\xd5\xee\x86\xb1\x64\xbe\xea\xfe\x4f\xae\x41\xb7\xad\x59\xfd\x93\x6d\xc6\x05\x2d\xa9\x27\xd0\x71\xfa\x86\x26\x3c\x46\x6c\x84\x6f\xe7\xec\x6f\xce\xb0\x08\x60\xf2\x46\x9d\x88\x6a\x26\x80\x50\xbb\xa4\x0c\x21\x35\xbe\x6e\xfb\xce\x9a\xf9\x1f\x81\x49\x00\x93\xca\x46\x44\x4b\x09\xc7\x11\x8f\xfc\xa9\x20\xcc\xf5\xea\xc4\xb5\x02\x38\xa8\x0d\x54\x73\xbc\xc7\x0c\x6b\x20\xec\x53\x70\xcd\x3c\x60\x6e\x5f\x08\xa9\xbf\xf0\xdb\xef\x42\x34\x80\xc1\x48\x42\x6f\x24\x77\x05\xc8\xcd\x49\x11\xd8\xd1\xd1\x97\xc4\x9e\x2e\x49\xca\x95\xa6\xd7\x6c\x42\xae\x0c\x6f\x09\xbd\x61\x08\x3d\x41\xa0\x82\x25\x8b\x49\x21\x34\x4f\xe0\xd7\x72\x1c\x33\xe5\x90\xe7\x9c\xcf\x88\x2a\x22\x43\x5b\xb3\x9c\x8d\x1d\x17\xb3\x4f\xad\xd0\x82\x72\x2d\x23\xbf\xd9\x0b\x8a\xba\x40\x16\xc3\xab\x00\x0f\x2a\x2c\x7a\xad\xc4\x71\x99\x79\x4a\x11\x95\x9c\x0b\x80\xa9\x26\xe4\x1d\x30\xab\xc4\xb9\x84\x51\x2d\xb1\x06\x4c\xc1\x22\xa6\x14\xcd\x97\x23\x28\xec\xce\x7d\x31\x70\x1b\xba\x03\x1c\x35\xa5\x02\xcb\xaa\xe7\x2c\x92\x42\xe9\xbc\x88\x34\xf6\xd9\x9b\xe6\xf2\x9a\x09\x1f\x2e\xb8\xda\xa3\xbe\x8c\x9f\x01\x7f\x97\x24\xd1\x82\x8a\x79\xd0\xa7\x26\xa5\x31\xc0\xfe\x1b\x2f\xe5\xb8\xf5\x18\x08\xd0\x99\x11\x2c\xb8\x06\x50\x4c\x0d\x1f\xf1\x66\xd8\x8f\xc2\xd7\xe3\x19\x95\x76\x52\xb3\x24\x9e\x6c\xa1\x5d\x9d\xe8\x17\xe9\x68\xd4\x1b\x03\xdb\xee\x39\x00\x2c\x65\x9a\xc6\x54\xd3\x1d\x82\xc0\xde\x96\xcd\xf5\xac\x03\xd2\x36\x38\xf5\x8e\x49\xcb\x87\x9c\xb8\x25\x33\x1e\xe6\x3f\xc1\x49\x5c\x38\xc8\x43\xc6\xb5\x36\x38\x65\x1d\x05\x18\xdb\x05\xf2\x8c\xeb\x5e\x66\x86\x77\xa3\x21\xb9\x28\x5b\x33\x96\xe4\xa4\x9d\x1b\xaa\xa3\x05\xd6\x80\x7e\x07\x18\x7d\x28\x7d\x65\x51\x35\xbe\xab\x51\x04\x41\x2e\xc1\x84\xe6\x39\x0b\xd3\xcd\x2c\xe8\x0a\x81\x48\x5e\x03\x22\x40\x79\xce\xb4\x2a\x23\x54\x90\x0e\x1b\xe2\x62\xf9\x9d\x55\x46\x81\x48\x5b\xc0\x5a\x7d\xae\x59\x16\x42\xb0\x2b\x69\xe9\xac\xa1\xfc\x77\x02\xd7\x5d\x8c\xce\xd8\x4e\xe0\xad\x8c\xbb\xd8\xa9\x6b\x55\xf8\xcb\x21\xca\xf8\x4d\x8c\xc4\x55\xa0\xd4\xe3\x03\xe0\xad\x52\x95\xa4\x39\x24\x72\x0b\x7a\xb3\xbb\x91\xaa\x94\x91\xc6\xbe\x94\x31\x7c\x6e\x0c\x9f\x1b\x3f\x6f\x6f\xcc\xeb\x12\x01\xe2\xae\xd6\x91\x20\xd5\x8f\x74\xb2\x9c\x1a\x92\x72\xd5\xd1\xdc\x59\xcb\x46\xf6\x23\x58\x9a\x6f\xbd\x88\xde\x73\x6b\x33\x1d\x18\x37\xd4\xe2\x05\xf9\xa2\xc2\xe5\xad\x34\xe5\x35\x25\x8c\xd4\x3d\x72\xaa\xd3\xc4\x6e\x85\x4b\x3e\xaf\x3e\x7e\x5c\x1b\x0c\xc4\x8b\x66\x8d\xc2\x45\x04\x7b\x91\xcf\x88\x67\x39\x18\xcf\x5c\xfe\x81\x41\xaf\x5c\x26\x09\xcb\x61\x09\x56\x7b\xaa\x79\xd1\xa1\x96\x29\xda\x74\x47\x5e\x45\xf5\x32\xa6\x60\xb7\x5e\x98\xa0\x0a\x4b\xb7\x38\x8f\x17\xb3\x8d\xf3\xd6\x8e\x67\xdb\x1a\x99\xdf\x4f\xc5\x12\x27\x7f\x16\x00\x17\x95\x4f\x32\x37\x9f\x32\x72\xa7\xa0\xd3\xc4\x70\xbe\x60\x03\xfc\x77\x6a\xa4\x5c\xcb\xe0\xa9\x4b\x36\xb3\x5a\x63\x78\xab\xdd\xbb\xc8\x07\x2a\x2f\x4e\xca\x10\x16\xd7\xd5\xae\x2c\x59\x62\xa1\x5e\x79\xa4\xea\xfa\xae\x8d\x56\xc9\xa4\x6d\x9a\x41\x6b\xcf\xdd\x4e\xbe\xbb\x5d\xbc\x77\x90\xf6\xc9\x45\x9b\x50\xa9\xf2\x85\x8d\x0d\x4e\xea\xd7\x2e\xee\x3e\x88\xa7\x01\x37\x7f\x37\xdf\x4d\xb5\x9f\xfa\xc5\x39\x0c\xe1\x74\x87\x39\xfc\xe1\x38\xa3\x77\x6e\x4c\x99\x39\x7d\x65\x42\x37\xec\x7b\xf8\x6e\x43\xc4\x43\x79\x04\xbe\x81\xaa\xb1\xd6\x9a\xed\x3b\xa2\xe5\x0c\x22\x56\xe0\x8b\x13\x68\x9b\x40\xc5\xd2\x4a\x1c\x7a\xc1\xf3\x78\x9c\xd1\x5c\x2f\x51\xcd\x1d\x55\xbe\xe6\xd3\x00\x3a\x2d\x7c\x47\xb7\x53\xbb\x12\xcd\x6b\x21\x0c\x8b\x77\x66\x6c\xeb\x45\x58\x0b\xd7\xfb\x58\x4f\xfb\x44\x83\xc6\xf5\x84\x25\x50\x9d\xe6\xfa\x60\xeb\xa9\x50\x96\xfd\xf9\x9b\x21\x4f\xaa\xea\x22\x46\x76\x15\xb6\xd8\x92\x61\xb4\xb6\x97\x46\x40\x71\x33\x23\x8d\x8c\xbe\x4c\xcb\x9e\xe8\x81\x01\xd2\x4a\x34\x2e\xd6\xc7\x76\x64\x32\x48\x1f\x7c\x25\x7c\xd5\x9f\x0f\x72\x24\xa4\xc0\x33\x83\xcf\x1e\x63\x90\xd3\x1a\xeb\x19\x3c\xe2\xb9\x4d\xa8\xab\x05\x67\xd4\xb1\x31\x2e\x62\xb3\x69\x40\x96\x41\x8b\x53\x45\x14\x31\xe6\xf5\xfe\xb0\x89\x4e\x79\xa6\xed\x94\x5d\x33\x4e\x25\xa1\xcc\x8c\xd2\x34\x49\x4a\x7d\xdb\x02\x4a\x02\x27\x76\x36\xca\x80\x41\x57\x52\x81\xac\xe9\x01\xda\xbc\x63\x60\x4e\x21\x22\x0c\x32\xe0\x7a\x19\x16\xe0\xaf\x08\x23\xa0\xe8\x28\x54\xc3\xf9\x0c\x2d\x63\x81\xc2\xe2\x81\x09\x44\xc9\x36\x99\x5f\xb8\x56\x29\x20\x85\xdb\xea\x11\x86\x02\x4d\x69\x74\x7d\x4b\xf3\x18\x9a\x0d\x67\x54\x73\x2c\x5c\x3e\x42\xae\x18\x32\x39\x71\x78\x18\xfa\x70\xb8\xa8\xf3\xdf\x70\x22\x47\xc1\xac\x57\xf8\xf2\xb1\xe7\xc7\x8a\xf9\xb2\xda\xe5\xc4\x08\x2d\xb4\x4c\xa9\xe6\x11\xa8\xe7\x7c\x16\x58\x46\x53\x5f\xa6\xb1\xd6\x4a\x11\x28\xb2\x6f\xca\xff\x7d\x7d\xf2\x1b\x27\x1e\xcc\xd5\x2d\xb3\x79\x5e\x01\x51\xf7\x2d\xfb\xc1\x95\x05\x16\xfc\x9c\x31\xc2\x53\x23\x60\x51\xe8\x44\x32\xf3\x09\x57\xce\x5c\xbc\x09\x28\x46\x8a\xfc\x1e\x6c\xf4\xc1\x53\x68\x63\x30\x1a\xa8\x22\xfa\x56\x7a\x75\xae\xb4\x84\xda\x8c\xa5\x51\x4d\xe4\xb0\xef\x98\xa3\x66\xc0\x12\x9c\xa3\xd1\xff\x67\xef\x6b\x7b\xe3\xc6\xad\x7f\xdf\xf7\x53\x10\xee\x0b\x27\x80\x67\x9c\xec\xdd\xbb\x2d\xf6\x5e\x14\x70\x6c\x67\x77\xfe\x4d\xbc\x6e\xec\xec\xa2\x28\x8a\x82\x96\xe8\x19\xd6\x1a\x51\x2b\x52\x76\x06\x45\xbf\xfb\x1f\x3c\xe7\x90\x22\x35\x4f\x92\x46\x1e\x3b\xbb\x9e\x37\x89\x67\x44\x8a\x8f\xe7\xf9\xfc\x8e\x3d\x3b\x0f\x22\xcb\xec\xbf\x9b\x6e\x93\x1e\xaf\x1a\x11\x96\x04\xd6\x2c\x95\xba\x51\xd7\xfb\x55\x5a\xaa\xa2\x20\xfb\xd2\xfc\x75\x73\x44\xe0\x76\x29\xef\x85\x0e\x4a\x57\xa3\xcc\x36\x15\xb9\xaf\xbd\x4e\x68\x20\x40\x50\x9a\xaf\x88\xb6\x71\xe5\xe0\xc2\xe5\x42\x23\xf6\xe6\xe5\xa1\x5f\x41\x17\xb5\x2b\xe5\x0e\x8c\x1e\x63\xb6\xee\x6b\xf6\x99\x2a\x3e\xf9\x3b\xeb\x43\x22\x5b\xc9\xb4\x68\x0a\x23\xb1\x76\xcc\x5e\x9d\x64\xc5\x2c\xe8\x35\x94\x22\x7d\xa8\x75\x3c\xd2\xe8\x7d\xa7\xa5\xd2\xfa\xc2\x35\xe9\xf2\xea\x17\x09\xb3\xe5\xe7\x45\xc2\x7c\x91\x30\x7f\xdf\x12\xa6\x9b\x0f\xd0\x98\x1d\x27\xe5\xd9\x6f\x4c\xeb\x36\x4d\x8f\x5d\x28\x43\x6e\x11\x10\x41\xf8\x5a\x4d\x9b\x03\xa1\x7b\xe0\x8b\x71\x2e\x0c\xa5\xf1\x3a\xa3\xca\x27\xd7\xdf\x0f\xa5\x65\xc6\x24\xbb\x05\xc7\xdc\xdd\x19\x97\x40\x1c\xbc\xc5\x28\xe4\x0f\xb5\x97\x06\xbe\x3f\xd4\xe4\xa3\xb0\xbf\x43\x10\x7d\xd8\x41\x22\xc6\xec\x4a\x38\x34\xcf\xe8\xe5\xcb\xe9\xa2\xa9\x30\x5c\x66\xba\x66\x08\xd7\x6b\x18\x4c\x7f\x82\xff\xd8\xa7\xc4\x07\x8b\xf6\xd5\x41\xea\x08\xe9\x20\x24\x23\x0c\x25\xaa\x1f\x58\x67\x02\x9d\xdc\xb2\x4f\x22\x51\xf7\xa2\xc4\x95\x81\xb2\xc1\x56\xce\x7e\xcf\x65\x66\xd7\xc5\xad\x4f\x6d\x5a\x02\x3c\xe6\xd8\xb0\x1f\xd8\xf3\xfc\xa1\xa4\x4d\x98\xd3\xa0\x28\x4f\xd8\x3e\x4f\x2e\xf6\xa2\x14\xf7\x52\x55\xda\x05\x3c\x55\x06\x89\xb1\x36\x24\xd9\xce\xe4\xd4\xc3\xfa\xfb\x40\x89\x52\x24\xaa\x4c\xeb\xc3\xa7\x0d\x37\x95\x8e\xb3\xac\x12\xb4\xc5\x0f\x67\xde\xf5\xeb\xf8\xc8\x32\x40\x3f\x7e\x0b\xd3\xed\xd4\xa2\xe9\x1d\x07\x99\x55\x43\x42\x63\x40\x67\x42\x1a\x83\x01\xcd\x32\xc7\x85\xb7\x9b\x3d\x76\x3f\x61\xe3\xa3\x7a\x8f\x6b\xb7\xa5\xd4\x41\x7d\x7f\xef\x03\x94\x20\xa5\x72\x7b\x6d\x03\x75\xcc\x5f\x5a\x38\x66\x4e\xb8\x3b\x43\xfd\xef\x13\xbd\xeb\x24\xb3\x32\x29\x12\x81\xe0\xe2\xae\xf0\x2f\xca\xf9\xbc\x32\xf6\xbc\xb6\x70\xf9\x85\x9f\x3e\x16\x79\xd6\xc7\x2a\xbf\xb4\x0b\x9f\xc2\xf5\x0c\xb1\x26\xac\xea\x06\x8e\x77\xbb\xf4\xce\x31\x1f\x3d\xdd\x22\x59\x7e\xd5\x2c\x3b\x9e\x4e\xfc\xf4\x91\x53\xf1\xd3\x51\xf8\xc4\x4f\xbf\x2b\x81\x9f\xee\x22\x05\x7e\x96\x05\x8b\x46\x69\x7e\x27\x60\x44\x3b\x53\xa8\x74\xbc\xe2\x62\xf8\x20\x0d\x95\x52\x04\x46\x6c\x5c\xc1\x44\xae\x89\xed\xfe\xce\x45\x25\x79\x22\x4a\x85\xd0\x32\x30\x93\xc8\x54\x20\x76\x2d\x5d\xa8\x1e\x33\xeb\x29\xcb\x34\xa2\x0d\x2d\x9d\x18\xcd\x79\x31\xba\x13\x8b\xce\xdb\xd2\xe3\x14\x2c\xbf\x1c\xe7\x31\xe7\x45\x87\x7e\x30\x2c\x76\x07\x32\x79\xf8\x01\x03\x6b\xf1\xcb\x1b\xe2\xaa\x2e\xd6\xb7\x8e\x33\x4e\xd4\xbc\xa8\x8c\x08\xb8\x2f\xf1\xc9\xce\x2c\x29\x82\x16\x39\xc6\xea\x78\x23\xdf\xed\xa8\x0e\xed\x6d\x51\xd6\x26\xfc\xf4\xbe\xfe\x7d\x51\x34\xc2\xcf\x33\x8e\xee\x6d\x4c\xb6\x7b\x8a\x0b\xdb\x31\xcd\x85\xed\x92\xea\xc2\x86\x4c\x77\x61\x3e\x69\x6e\x97\x1b\xf3\xc9\xa5\xeb\x35\xee\x0c\xc9\xa7\x9b\xee\x4c\x84\xda\xe4\xfb\x91\xda\x95\xd9\xa6\xd8\x31\x7f\x07\xc0\xef\x1a\x26\x5d\xd1\x6d\x05\x83\x34\x06\x88\x89\x2f\xbe\xb4\x42\xa0\x03\x81\x6a\xff\x20\x35\x6a\x2d\x39\x93\xf3\x02\xe1\x16\xe1\xd6\x8d\x9c\xd8\x43\x06\xdf\x97\x1b\xfc\x72\x83\xdb\xb6\x7f\xca\x1b\x8c\x69\x65\x5d\xb2\x1e\x1b\xe5\x18\xb1\x39\x21\x9d\xf0\x1b\x91\xb1\x5f\x2b\x51\x2e\x98\xd5\x15\xeb\x18\x6a\xa8\x21\x61\x25\x13\x8c\x42\x26\xbf\x50\x7b\xd1\x64\x8f\x6a\x12\x88\x6f\xe7\x5f\xac\xa2\x0c\x60\x01\x3b\xd0\xb5\x66\x57\x31\x1e\x0c\xae\x96\x5f\xc1\x50\x11\xc6\x30\xae\x48\x35\xb6\x1a\xd3\xc9\xc5\x59\x3f\x7b\xc3\x53\xe8\x29\x27\x1b\x26\x88\x0b\xe1\x7f\x89\x4b\x76\x7a\x87\x05\xbb\x13\x8b\x23\x0a\x36\xa4\x12\x39\xee\x61\x8c\x99\x8d\x71\xdb\xdb\xe2\x81\xad\x5a\xa0\xbd\xab\x38\x6d\x91\xbe\xe3\x56\x6e\x11\xf6\xa8\x1c\x75\x40\x04\x0f\x3f\xeb\xd0\xc1\xf1\x4c\x00\xcc\xb1\x4b\x1e\xf3\xc7\x00\x12\xe6\x80\x5a\xec\x55\x67\x61\x00\xc8\x8b\x0b\xbb\xf3\x54\xfd\x31\x8d\xb2\x9f\xee\xc4\xe2\x50\x13\x34\x83\xca\xf5\x4c\x16\xae\x08\x0f\x50\x02\x3a\xb9\xec\x67\x08\xc2\x74\x5d\xe0\x9d\x9f\xe4\x47\xec\x42\x19\xfb\xcf\x39\xc4\x63\xc3\x59\x3f\x53\x42\x5f\x28\x03\xdf\xec\x7d\xb1\x70\xb8\x3b\x2f\x15\x39\x33\xc9\xcc\x03\x79\x03\x90\x04\xeb\xe2\x7c\x61\x49\x28\x04\xcc\x2f\xab\xd4\x6c\x92\x33\x55\xba\x35\x31\xae\x42\x83\xa6\x2e\x9c\xa3\x26\x70\x51\xaf\xe8\x83\x96\x52\x95\xd1\x4a\x6e\xe8\xce\x3b\xa1\xa5\xfb\x05\x2c\xdc\x10\x50\xe0\x83\x93\xa1\xce\x00\x37\x62\x2a\x13\x36\x17\xe5\x14\x40\x38\x92\x59\xff\x0d\xea\x4e\xb7\xf1\xd3\x8b\x7a\x87\x2f\xee\x7c\x32\x80\xd5\x7d\x80\xf0\xf0\x5d\x19\x26\xf6\x82\x2c\x62\xce\x0b\x7b\x28\xfe\x63\x39\x01\xec\xcb\x7f\xa1\x2e\x88\x1e\xb3\x13\x57\x55\x3e\xfc\x8d\x8c\xbd\x61\x37\xb6\x07\x2b\xd3\xff\x5a\xc9\x7b\x9e\x09\x4c\x9a\xe0\xb9\xc7\x4a\x57\xb7\x4b\x6c\xfa\x88\x8a\x83\x58\x2a\xe5\xed\x2f\x07\x77\x62\x71\x70\xb4\x74\x90\x0e\x26\xf9\x41\x8d\x84\x13\x1d\x1d\xcf\xd0\xc0\x57\x7e\x00\xbf\x1d\x0c\xcd\xd9\x9f\x48\xb4\xef\x71\x4a\xc8\x6e\x7e\x9a\x71\xf4\xb3\xf4\xf5\x66\x34\xfb\x59\x85\x72\x7d\x15\x3c\x53\xfb\xa1\x28\x45\x66\x70\xb3\x3f\xa4\x52\x76\x0f\xe7\xee\xb4\x7a\xf7\x54\xa2\xae\x3d\x3a\xd6\x4a\xd4\x56\xc0\x86\x72\x89\xb2\x11\xf8\x40\x1d\x49\xb6\x66\xbd\x7e\x06\xf7\x8b\xba\x85\x52\xfe\x84\x5e\x0d\x06\x74\xcb\xb4\x29\x75\x36\x57\x86\xc9\x3c\xc9\x2a\xf2\xbc\x40\x53\x74\x03\x3c\xfe\xe2\xec\x70\xa8\xea\x0e\xdc\x69\x72\x91\x6b\x4b\x59\x52\xcd\x38\x1e\x08\xeb\xf2\x91\x2b\xb8\x56\x43\xcf\xf5\x76\x4b\x4e\x4a\x8c\x78\x9e\xc4\xb2\xc7\x7b\x79\x53\x0a\x76\x3a\xe3\x79\x2e\xb2\x00\x52\x84\x8c\x1d\xbe\x66\x28\x08\x24\x54\x29\xf4\x30\x2e\x15\xea\xe8\x5b\xee\x01\x6c\xea\x94\xb1\x81\xd0\xf5\x7f\x4b\x95\x3b\xd7\x03\xcc\x77\xad\xd9\x89\x78\xd8\x33\xf5\xc0\x52\xc5\x1e\xa0\x38\xd4\xbd\x65\x5a\x10\xba\xa5\x1d\xbb\x0b\x46\x0a\x51\x9e\x89\x9a\x17\xa5\x9a\x4b\x1f\xfa\x44\xdb\x38\x28\xfe\x46\x56\xb5\x00\x5a\x8c\xf7\x20\xab\xf2\xb8\xee\xce\xfb\x53\x66\x78\x39\x15\xc6\xf6\xc6\xf2\x6a\x7e\x23\x5a\x83\x84\x3c\x06\xd0\xeb\xd7\x54\xa7\x7d\xd8\x4a\xa3\xb8\x0d\xbf\xfc\x72\xd1\x15\xe7\xf6\xb0\x6e\xb9\x6e\x6f\x1f\x54\x99\xa5\x0f\x32\x75\xee\xe2\x57\xf6\xe1\xd7\x6d\xc7\x3f\x30\xec\x6d\x87\x13\xfe\xf0\x20\xd3\xce\xcb\x01\x8d\xe2\x65\x70\x41\xdc\x76\x19\x18\xac\x03\x95\xd1\x94\x50\xab\x04\x5a\xbc\x66\xe7\x12\x53\xb8\xa1\x3d\xa0\x01\xce\x6f\x64\x5e\xa7\xf1\xd7\xcb\x6c\x89\xb1\xbd\x2f\x4e\x35\xd1\xc2\x60\xf2\x2d\xe4\xbd\x28\x33\x63\x5a\xce\xab\xcc\xf0\x5c\xa8\x4a\x67\x8b\xd6\x47\xe5\x69\x96\xfa\x36\x13\x5f\xf0\x64\x77\x61\x72\xbe\x51\xcc\xec\x20\xc0\xb5\xc6\xaa\x58\xe2\x76\x75\x7c\x78\x7a\xec\x39\x9f\xcf\xe9\x16\x5f\x44\x42\xa9\x57\x45\x56\x4d\xe5\x96\x1c\xd3\xdf\x59\xe9\x98\xba\x4a\x47\xa5\x45\x0d\x87\xd4\xb6\x78\xde\x9e\x2a\xbd\x3c\x2d\x87\xbf\x5e\x5d\xe5\x25\x15\x85\xc8\x53\xc0\x9d\x7d\x5f\x9f\x5c\x1c\xfc\xa0\x2b\x47\x18\xae\x5d\xa9\x96\x83\x7e\x8d\x28\x78\x10\x7f\x30\x53\x59\xaa\x99\xf8\x62\x4a\x6e\x09\xd3\xdc\x92\x20\xdf\xe6\x96\xf1\xbc\x3d\x91\x79\x1e\x75\x18\xd8\xe0\xdc\xfe\x71\x8b\x92\x3f\xc7\xba\xe2\xf5\xdc\xa3\xaf\x07\xae\x0f\x84\x84\x98\xee\x8a\x8e\xd3\x9b\x56\xd4\xf1\xa9\xc3\x4f\x97\xf3\x48\x7b\xd6\xf3\xd1\x2b\x2a\x97\x34\x46\xf5\x52\x0b\xfd\xab\x28\xee\x73\x0b\xe8\x2b\x5d\x90\x2e\xa9\x45\x43\xa3\xa6\x2f\x5d\x4d\xe1\x16\x1a\x34\x9d\xdb\x80\x0f\xd8\x55\x77\x1d\x51\xee\x38\xd3\x76\x2d\xeb\x40\xed\x2a\xcf\xb7\x51\xb1\xc7\x28\xd5\xc2\x0d\xd7\xc2\xb4\xb3\xa6\xc4\xa2\x43\xdd\xd2\x5e\xc0\xf0\x7c\xd1\x4f\x58\x2a\x08\x72\xea\x1c\x22\x09\x1b\xfd\x85\xa4\x8c\x3c\x7a\xd2\xca\x17\x6e\x7d\x1c\x12\xa6\xf0\x5e\x64\xec\x23\xb5\xbb\x92\x70\xd3\xba\xae\x61\x2b\xbe\x40\x23\xf8\xfc\xb9\x73\xc1\xfc\xa0\xa5\x93\x43\xe0\xff\xf1\x22\x8c\x7d\x78\x6b\x95\xcb\x5f\xab\x50\x1d\x00\x04\x31\x3f\x6d\x7a\x7e\xa8\xb9\x4d\x13\x51\x1b\xaf\xce\xa4\xbe\xeb\x82\xf8\xba\xd4\x38\xbe\x12\x3f\x9c\x9e\x33\xfa\xb6\x95\x7d\xa9\x8b\x81\x69\x57\xf8\xd1\x69\x22\x6a\xa3\x6d\x2a\xf5\xdd\x40\x68\xb1\xed\xa5\xfa\x22\xbd\xd8\x16\xcb\xb8\x3f\xfb\x57\x53\xea\x75\x38\x78\x01\x40\xe3\x42\x55\xec\x81\xf0\xa5\x48\x6a\xbe\x96\xc5\xf7\xec\x3c\xd7\x55\x29\x6a\xcf\x6d\xb3\x2b\xcb\x75\x5b\xcb\xd0\x00\xe1\xa5\xbf\x1f\xcc\x56\x36\xf4\x29\x79\xce\xc6\xb7\x82\x97\x06\xc4\xe3\xae\xc7\xc0\x37\x74\xf4\x29\xf8\x22\x6f\x73\x0e\x26\xb7\x2e\xb0\xee\x88\x80\x74\x3c\x3a\xac\x7b\xc8\xee\x7c\x80\x1d\x17\xee\xf5\x7b\x8f\xab\xc8\x8e\x53\x71\x7f\xac\x53\xfe\xf6\x08\x5e\xe3\xf2\x42\xe2\x31\x71\xcd\x0e\xde\x1e\x8c\xd9\x95\x9c\xcb\x8c\x97\xd9\x22\xaa\x77\x51\x3f\x67\x99\x85\xeb\x10\xbc\x72\x6f\x0e\xd8\x2b\x55\x42\xcf\x09\xcf\x59\x26\x5c\x52\x36\xdd\xb3\x05\xca\x8e\xaf\xf7\x4d\x5c\xd8\xa3\xda\x2f\x91\xce\x74\x3e\x13\xa9\xe3\xd8\xc4\x8f\x22\xcc\xc0\xb3\x9a\xa4\xcb\xdc\xd2\xf9\x31\xfb\x4c\x04\x9a\xf8\x16\x6e\x1a\x5c\x19\xf7\xc4\x53\x2d\xea\x7e\xf4\xbe\x5e\x1a\xdc\xb2\x39\xf8\xe9\x96\x69\xbb\x96\x38\x95\xe6\x93\x28\x54\x27\x09\x01\x9b\x34\xec\x71\xd2\xd8\x2f\x94\x96\x80\x06\xcf\x0d\xe3\x78\x6d\x93\x2a\xe3\x56\xac\x46\x6b\xdc\x98\x9d\x9d\x5f\x7e\x3a\x3f\x3d\xb9\x3e\x3f\xfb\x9e\xfd\x40\x3d\xc9\x50\xc2\x1b\xb3\xeb\x10\x72\x33\x88\xe8\x25\x5c\x43\xff\xae\x23\x22\x43\x3c\xaf\x11\xb4\x01\x48\x8d\xe7\x6c\x92\x4b\x53\xd7\xa0\xc0\xb8\xb3\x4c\xe5\xc2\x95\x68\x2f\x14\x59\x03\xa7\xd2\x10\xc0\x10\x76\x66\x7f\x8e\x7b\xa3\x64\x0d\x2b\xca\xd4\xb9\x16\x7b\x17\x2d\xea\xc5\x1d\x4a\xfc\x77\x20\xf3\x5d\x65\x5f\x0f\xf9\xef\xb2\x85\xd1\xfa\x5f\x7f\x8f\xcc\xc0\x57\xbf\x71\x98\x82\xaa\x8c\x8a\xd3\x40\xe9\x7a\xcb\x66\x0e\xc7\x87\x4e\xa0\xc8\x96\x2a\x1d\xf9\x4e\x43\xd8\xd4\xf8\xb0\x8d\x19\xfb\xc9\x85\x6c\x03\x6e\xca\xea\xa2\x49\x08\xc1\x15\x94\xde\x69\x1c\x59\x97\x3f\x58\xdd\x84\x2f\x25\x9c\xd5\xa9\xbc\x27\xf4\x8b\x41\xad\x78\xf5\xeb\x3b\x97\xa0\xad\xc7\x4d\xfa\xc7\xa7\x0f\xc3\x8e\x0c\xef\x5f\xe7\x71\xd1\xb5\xa5\x51\x25\x6a\x3e\x47\x50\xce\x99\xcf\xd6\xaf\x13\xee\x3d\x55\x18\x4c\xf3\x41\x78\xd1\xdb\x2d\x87\xbf\x41\xcf\x5c\xa3\x86\xa6\xe3\xbf\xa6\xa4\x84\xbc\x16\x73\xbb\x17\xbb\x20\x24\x5b\xed\x92\xa9\x89\xb4\x1f\xfb\x97\x1f\x7f\x3a\x3f\x39\xfb\x78\x3e\x9e\xa7\x7b\x27\x2d\x22\x4f\x0b\x25\x73\xa3\xb7\xeb\x37\xdb\x4a\xfb\xb5\x27\x3f\xfe\xa5\x5d\xb9\xb3\x6f\xe8\xce\x98\xfb\x22\x00\xff\xa5\x64\xf0\x60\x0f\x8d\x2a\x54\xa6\xa6\xab\x6b\x5c\x74\xd8\x9c\x3f\x22\x88\xdf\x88\x8f\xec\xae\x0f\x2b\xea\xb7\x29\x56\xd6\x94\xf2\xb1\x38\x99\x5d\x86\x7a\xae\x5e\x6a\x86\x9a\x62\xcf\x74\xba\x8f\x22\x9c\x2d\xad\x01\x2a\x92\x70\x81\x1d\x2e\x72\x0d\x34\x1c\x14\x0a\x6c\x2b\xb5\x3d\xf6\xd2\x6d\x17\xd8\x2c\xfd\xd9\x5e\x0d\x32\x5e\x33\xd7\x26\x26\x70\x45\x29\x46\x1e\x13\x13\xea\xd7\xa9\x32\x60\xb8\x21\xbd\x73\xd6\x1b\x67\xeb\xc1\xa7\xb2\x45\xd3\x8a\x13\x24\x77\x3b\xd3\x17\x22\x11\x65\xd9\xa2\xc6\xda\x26\x2d\x9a\x4f\x11\xeb\xb2\x24\x33\x71\x51\xca\x7b\x99\x89\x29\xe0\xdd\xcb\x7c\x1a\xa0\x04\x84\xb8\x02\x04\x08\x11\x1b\x5d\x3f\xda\xbf\x82\xca\x26\x70\x2e\x2e\x7e\xba\x86\xd2\x09\xe0\xe0\xda\x59\x08\xb7\x2f\x84\xfb\x36\x1a\x8d\xc0\x64\xf0\xea\xdf\x56\x9e\x4c\xb3\xd7\xec\x17\x41\xef\x51\x50\xdb\xa1\x84\x7a\x8b\x33\xe5\x81\xf6\x61\xac\xf5\xca\xc2\x71\x44\xf7\x3e\x3d\x75\x6c\x9f\xb4\xb2\x12\xb2\x9a\xe8\x79\x28\x2f\x8f\xf8\xd8\xe8\x63\xda\xbf\xec\x39\x20\xd9\xef\x4d\xe5\x9c\x69\x75\xd5\xf9\xf4\x8e\x1f\x47\x0f\x39\xd3\x8b\x79\x26\xf3\xbb\x1a\x7c\xf5\x56\x11\xfe\x88\x60\xf6\x07\x77\x62\x4b\xc1\xb3\xf5\x94\xb2\xcf\xf9\x18\x94\x4a\x9a\x1e\x16\x40\xb0\xd0\xd9\x7b\xf6\xa3\xbb\xf6\xe4\x86\x0e\x49\xdc\xc1\xc1\xb3\x9b\xaf\xd4\x89\x96\x5d\xc8\x1a\x34\x88\x68\x5a\xce\x26\x57\xa7\x57\x93\xbd\x5a\xa8\xd7\xb1\x04\x18\xdd\x13\x4a\x75\xf2\xd7\x6d\xde\xe1\x11\xcb\xaa\xed\xcf\xa0\x7a\x77\xa9\x4a\xc3\xb3\x81\x88\x40\x32\xe3\xc5\x49\x65\x66\x67\x52\x03\xd4\x4c\x57\x21\x60\xa9\x7d\x10\xe9\x8c\x05\x32\x1c\x2a\xb3\x74\xc7\x81\x9e\x3b\xfd\xf1\xe4\x92\xf1\xca\xee\xaf\x21\x04\xf7\x41\x1d\xee\x6e\x64\x57\x98\x61\xd0\x73\x5e\xd4\x7a\xcb\xac\xdc\x53\x8f\x3d\xa7\xc7\x88\xc3\x7d\xf1\x45\x00\x0d\x45\x0a\xf6\x8c\xfd\x0f\x32\x97\x46\x72\xa3\x5a\x56\x83\x8d\x8e\x40\xd4\xd6\x1b\x04\x2a\x6d\xd4\x9c\x4e\xf0\xc4\x3d\x01\x2e\x64\xe0\xe2\x4b\x8d\x6a\x6b\x01\x48\xef\xb0\x62\x93\xdc\xca\xda\x3c\x11\x8d\x00\xc8\x23\x40\x56\xc7\xbe\xa5\x7f\xe6\xff\x93\x81\x0a\x50\x44\xb3\xbf\x7c\x1f\xd5\xbb\x59\x2a\x1e\xe6\xac\x14\x75\x65\xaa\x41\x2d\x3e\xf2\xd7\xae\x44\x41\xfe\x9a\x37\x2c\x6d\x38\xc1\xbf\x55\x3c\xc3\x85\xb9\x18\xda\x2c\x15\x2f\x72\xd7\xf1\xc6\x3b\x44\x43\xaf\xb7\xe3\xc2\x6b\xe9\x95\x46\x7c\x52\x9c\x8f\x29\x79\xae\xed\x1e\xc5\xba\xd8\x21\x39\x9e\x0e\xd9\x2b\x93\x14\xaf\x07\x9d\x67\xf7\xd0\xf6\xac\xca\x43\x81\x03\x47\x7e\x8d\xdb\xf2\xc1\x87\xb6\xb7\x1d\xe4\xa3\xb8\x86\xe0\x94\x77\xb5\xaa\x50\x2b\xbf\x5b\xe1\xbc\x90\xf5\xb3\x0f\x52\x1b\x57\xf5\x0a\xbe\x90\x9a\x8a\x35\x80\xdc\x75\x69\x15\x39\x59\xfc\x8b\xa7\x69\xf9\x3d\x72\x29\x92\xc9\xe1\xff\xda\x23\x66\xf2\xdc\xfb\x12\x5f\x99\x45\x41\x88\xc4\xd7\xa7\x97\x0c\xab\xd0\xfd\xf9\x3b\x2c\xaf\xff\x7f\xbe\xf9\xee\x4d\xeb\xed\x7e\xba\xe0\xf1\x9e\x76\x8c\xc1\x7d\x4c\xcf\x22\x6e\x30\x8a\x0f\x04\xb0\x45\x2b\x9b\x5c\x61\x38\x9e\xa5\xac\x74\xd5\xf1\x60\xd9\x5d\xf6\xf4\xbe\x9f\x04\xf3\x12\x67\xf7\xa4\x71\x76\xcc\x67\x94\x20\x91\xe8\x78\x5c\xc2\xa6\x90\x62\xb8\x4c\x76\x90\xe2\x5c\x3e\x3f\x8a\xb3\x75\x6d\xb6\x9f\xa2\xf8\xf4\x84\xce\x78\x57\x63\xb0\x0e\x61\x3f\xbb\xb8\xfa\xd7\x87\x93\x77\xe7\x1f\x60\xa4\xe4\xbf\xb7\x47\x43\xe6\xbd\xe3\xa7\xda\x1f\xb5\x36\xca\xeb\xf6\x05\xe9\xe6\x96\xc9\x1b\x0e\x99\x9c\x5d\xbc\xbf\xea\xea\x8b\xd9\x55\x40\xcf\x6f\x5b\xcd\x7d\xbf\xd6\x36\x28\x1d\x27\xca\xe1\xf2\x47\x7a\x1b\xe5\x02\x20\xad\x48\xff\xb2\x3b\x85\x23\xdc\x59\x45\xda\xba\x03\xec\x19\xf8\x1d\xec\x7c\x71\x0d\x06\xf7\x38\x3c\xd2\x5a\xb5\x95\x03\xca\xee\x89\x45\x87\xd8\xca\x89\x00\xf6\x92\x22\x6d\x2b\x2d\xcd\xb6\xd4\x5a\x68\x8f\x82\xf9\x4c\x4f\x4a\xb1\xaa\x88\x43\x17\xea\xb5\xb2\x83\xa8\x26\x6c\xe4\x8b\x89\x72\x29\xd6\x55\x64\x71\x11\x0a\x7c\x1e\x00\x7f\x0f\x89\x6f\x50\x7f\x85\xdf\x20\x90\xf0\xde\x09\x20\xbc\x76\xc0\x40\x5a\xdf\x5f\xd7\x83\xec\x1b\x36\xb3\xe4\x3a\xed\x10\xe3\xda\xb1\x68\x8a\x39\x0a\xd3\xe9\x9e\x78\xfb\xd8\x7e\xb5\x9d\x5f\x7a\x2a\x3a\x43\x2b\x39\xc5\x4c\x19\x95\xf7\x8e\x92\x5f\xd5\x3c\xbe\xd0\x97\xf0\xc4\x69\x5d\x2b\x30\x28\xa4\x0d\x11\x94\xde\x19\x01\x15\x70\x88\x5d\xa8\xdc\xb9\x25\x62\xa7\xc4\xde\x45\x90\x74\x72\x36\xd0\xe5\xfb\x7a\x53\x3c\xbb\x1a\x83\x07\x0d\x06\x49\x3b\xe7\xa4\xd8\x26\x6e\xc5\x26\x67\x24\x9a\xb9\x84\x13\x4d\x07\x92\xad\x3f\x91\x83\xb1\x4e\x55\x9a\x07\x55\x76\x4f\xf5\x8e\x1b\x36\x62\x15\xe8\xb7\xa5\x54\xac\xe7\x78\x7b\x70\x8c\x4f\x7c\x83\xae\xe0\x06\x35\xea\x40\xac\xbb\x49\x8f\x71\x91\x9e\xf6\x02\xed\xca\xa8\x1e\x37\xcb\x77\x50\x21\xdd\x1d\xb7\x8e\x53\x75\xcd\xc8\x98\x60\x37\xa9\xa6\x16\x1c\x4c\x2e\xc1\x8d\x1b\x8c\x3a\x94\x0a\xeb\x7c\x77\x21\x0c\xae\x0d\x1a\x70\x11\xe8\x39\xcb\xec\xaa\xaa\x3c\x84\x88\xa6\x34\xde\x23\x86\x28\xcb\x73\x5e\x50\x39\xb4\x54\x3d\xe4\x0f\xbc\x4c\xd9\xc9\xe5\x64\x18\x6a\xd0\x21\xce\x1a\x4f\x52\x3b\x44\xaf\x38\xd2\xba\x6e\x49\xe5\xf0\x04\x14\xb0\x66\x37\xd2\xe8\xba\x70\xb2\x30\xa1\x5e\x69\xa9\xa0\xf7\x65\xd9\xbb\x6c\xef\x2d\xf5\x14\x30\xcc\x9c\xa9\xc4\xf0\xcc\xd5\x5a\xa1\x62\x7a\x6f\xde\xbc\x41\x53\xd8\x9b\x3f\xfd\xe9\x4f\x58\x1c\x32\x15\x89\x9c\x2f\x3f\x08\x4f\xfd\xdf\xb7\x6f\xc7\xec\xef\x27\x1f\x3f\x50\xf1\x1e\x8d\xa8\x24\xd8\x33\xac\x7b\xd8\x58\x1f\xb1\xff\xb9\xfa\xe9\xa2\x2e\xec\x11\xff\x0a\xdb\xea\xa7\x37\x66\x67\x41\xfc\x53\x68\xe8\xe2\x66\x46\x35\x19\x0d\xe3\xb7\xb7\x78\x30\x5c\x75\x11\xba\x70\x2e\x7b\x5c\x4e\x67\xae\x98\x97\x3d\x12\x19\x04\x66\x59\x95\x1c\x4d\x83\x0e\xd9\x00\xe3\xcc\xa0\x2f\x4f\x26\x61\x28\x47\x2c\x93\x77\x82\xdd\x6a\x28\xe9\x55\xc3\xff\x95\x42\x5b\xa1\x94\x4a\x58\x63\x67\xf5\xce\x68\xd1\x1a\xeb\xe1\x31\x3c\x40\xad\x8b\x08\xc5\xa6\x7b\xba\x43\x0e\xbe\x95\xb0\x8b\x5d\x2c\x29\x5e\x41\xbb\x5a\x4f\xe3\x91\x89\xc6\x7a\xe9\x47\x83\x5b\x47\x28\x01\x35\x9d\xe0\x99\x82\x62\xa4\x7e\xa7\x6b\x2e\xe6\x42\x0e\x16\x85\xd8\x3e\x95\xce\xe0\x8b\x5d\x01\x78\x91\x50\x7d\xe4\xad\x6b\xe3\xc5\xf1\x22\xae\x75\x84\xab\xc0\x6f\x54\x65\x9c\x0f\x9b\x7e\x87\x04\x6c\xa3\xdc\x12\xb5\x7c\x59\x0f\xe4\xc9\x3e\x08\xc4\x9d\x41\x4c\x63\x7f\x33\xf0\x84\x58\x94\x38\x62\x82\x27\x33\x76\x27\x16\x23\xa4\x5b\x05\x87\x6c\x1e\x2c\x21\x64\xd7\x22\xaa\x0f\x15\x54\x4a\x3b\xf5\x4b\xe6\x02\x03\x02\xee\xe3\xb2\x81\x9c\x10\xaa\x49\x5e\x22\x18\xd1\x3c\xb0\x14\x38\xac\x6a\x2a\x97\xee\xbe\xa6\xa2\x01\x93\xa5\x24\x15\x7b\xdf\x44\x6a\x9b\xe9\x4d\x6f\xae\xa3\x21\x2c\x1d\x24\xee\x56\xe5\x4b\xad\xa9\x32\x3a\x09\x7f\xf0\x42\xee\xd0\x99\x83\x88\x0a\xa8\x45\x4c\x65\x11\xe9\x59\xb7\x4a\x7e\x21\xa2\x24\x1a\x2d\x4c\x45\x4b\x83\x55\x45\xab\x3c\x13\x5a\x33\x09\x33\x9c\xf3\xf2\x4e\x38\xc0\x18\x9e\x8d\xd9\xa5\x1d\xa4\xc7\xaf\x42\x58\xe4\x7b\x2a\xfa\xca\x17\x51\x76\x90\x7d\xc9\xe1\x78\x7c\x88\x04\x7e\x45\xae\x50\x87\xf3\xd1\x0f\x53\xb7\x07\x96\x6e\x74\x10\x3f\xf2\x42\x23\x32\xb0\x15\xf9\x00\xf9\x5a\x41\x16\x9c\x99\x39\x06\xc6\x5b\x83\x28\x2d\x4f\xa7\x07\x00\x6c\x5f\xdc\xf2\x3e\xa8\xe5\xad\xfc\x16\xf1\xa7\x3f\x5a\x79\x2f\xac\xf2\x75\x48\xe5\xb4\x53\x74\xdb\xba\x63\x38\xef\x00\xb1\x3d\xef\x04\xf3\xea\x3e\xb1\x91\x12\xe4\x8e\x08\xa5\xa7\x95\x8c\x48\xa0\x4f\x99\xf8\xaa\x84\xc2\xc9\xed\xaa\x12\xae\x2e\x59\x30\x90\x97\x1d\x0d\xc5\x6a\x5a\x4f\x2d\x0d\x76\xab\xe5\xc2\x3a\x8b\x87\xcd\x4f\x17\x71\xb1\xf9\x69\xe7\x0c\x6c\x7e\x62\x85\x2d\x48\x4b\xf2\x44\x3f\x8c\xe2\x87\x25\x35\x0a\x30\xbb\xeb\x2b\x38\x66\x1f\x89\x29\xe0\x61\xe4\x37\x5a\x65\x95\xf1\x99\x4c\x2b\x38\x06\x74\xea\x10\xbe\x31\xa5\xd4\x3d\x16\xf0\x0f\xe0\x9c\x48\x96\xbb\xb2\x12\xfc\xf4\xba\xe2\x5d\xab\xcd\xfd\x66\x83\x49\x76\x58\x43\x27\x4a\xf4\x5e\x47\xd7\x81\xc7\x9d\x70\xb1\xd4\x91\x8c\x03\x91\x24\x46\xa3\x00\xe5\xc4\x15\x2a\xf4\xd4\x79\x8a\xed\xac\x36\x34\x56\x32\x4c\x9c\x5c\x4e\x7a\x69\x00\x41\xfb\x35\x3a\x40\xf8\xc4\x6f\x58\x0b\x98\xa0\x16\x10\x96\xdd\x39\xab\x67\x4e\x26\x65\x4b\x76\x9e\xbd\x18\xb9\x34\xec\xf7\x96\x58\x86\x41\xa7\x31\x86\x1e\x1a\x7b\x6a\xb2\x1a\xe0\xee\x39\xaf\x23\x5c\xe2\xe7\x2e\x72\xee\x51\x7c\x84\xf5\x68\x15\xdd\xd8\xfc\x2c\x57\xb3\x83\xc9\xb2\x2b\x28\x6d\x83\xfa\x60\xa0\x58\x16\x2a\xfd\x1e\xab\x42\xf0\x3c\x57\x58\x40\x4e\x1f\x61\x6d\x1c\x7d\x84\x0a\xa3\x95\x22\x02\x5f\x71\x19\x98\xdc\x7b\xcb\x0d\xbd\xaa\x1c\xed\x52\xe7\xc8\x6e\x20\xcc\xfc\xb2\xeb\x2e\xb2\x1d\xcb\x16\xb1\x80\x35\xf5\x2b\x84\x12\xed\x29\xf5\xe4\x36\x50\x27\x33\x31\xe7\x88\xe1\xe7\xa6\x67\xa9\xcc\x43\x29\x8d\x11\x88\xa5\x24\x4a\x28\xea\x7a\x14\xf9\x0c\x0e\xee\xdf\x1e\xf4\x29\x07\xb3\x63\xc5\x1e\x56\xef\xc2\x00\x8b\x71\x19\x89\x6c\xf6\x5c\x83\x2e\x91\x01\xf0\x66\xde\x30\x48\x58\x06\x73\x8f\xab\xb7\xf7\x89\x0f\xa1\x47\xf5\xd5\x9f\x8e\xbc\xc0\xf0\xa2\x3f\xbd\xe8\x4f\x83\xe8\x4f\x01\x63\x71\x04\x67\x85\x2e\x15\x06\x0c\x3b\x85\xaa\x4e\x64\x0a\x00\x78\xec\xd1\x74\xaa\x94\x2a\x63\x8b\x9b\xd5\x87\x0e\x9d\x82\x45\xe7\xb8\x32\xb7\xa3\x3f\x33\x91\x27\x2a\xc5\xcd\xb7\xfd\x97\xda\x80\x68\x53\xeb\x24\xe1\x58\xe6\xee\x5d\xa1\xd5\x0e\xfa\xee\xbb\x75\xbd\xe8\x80\x73\x05\xbe\x1f\x88\xc1\xd7\x6c\xdd\x27\x13\xd3\xf4\x3d\xd6\x00\xf1\xf7\xda\x09\x89\x65\xa5\x7d\x09\x7b\xa8\x52\xfb\x0a\xbf\x1c\x27\x45\x75\x44\x0f\x8c\xe7\x62\xae\xca\xc5\x91\x7f\xc8\xfe\x18\xb5\xa2\x27\x5e\x83\x4c\x90\x54\xa5\xd5\x00\xb3\xc5\xd7\x2a\x1d\xb8\x05\xda\xb3\x70\xe0\xf7\xa9\x5b\xd1\xa0\xf0\x13\x1f\x89\x1a\x54\x0c\xf4\xfb\xba\x88\xd2\xad\x87\x3c\xd4\x47\xb5\xda\x69\xbf\x15\xf9\x3d\xbb\xe7\x65\x8b\x48\xbc\x55\x9f\x1d\xe5\x81\x54\xde\x4b\xdd\xaf\xde\x61\x63\xea\x57\xc4\x34\xd0\xae\xa3\x2a\x53\x54\x86\x28\xa5\xbb\x15\x2e\x65\xde\xdf\x86\x86\x50\xf4\xf6\xa0\xd7\x30\xbe\x9a\xfa\xc2\xf8\xe9\x59\x65\x18\x3f\xbb\xd6\x1a\x8e\x7b\xe9\x7d\x6c\x06\xad\x1c\xee\x3e\xee\x58\x0c\x71\x0f\x6b\x16\x59\xe3\x3c\x38\xe1\x74\x4f\x17\x0d\xc3\x4d\x7a\xd9\x6d\x08\xa1\x7e\xb5\xc9\x86\x7e\xfc\x0d\x5b\x6b\x86\xf5\xd9\x52\x7e\xe1\xef\xdc\x61\x7b\x45\xf5\x0c\x5e\xbc\xb5\xad\x8e\xe0\x8b\xb7\xf6\xc5\x5b\xfb\xe2\xad\x7d\xb1\x36\xbc\x58\x1b\x5e\xbc\xb5\xec\xc5\x5b\x3b\xc8\x1a\x0e\xe7\xad\x45\x51\x6f\x95\xcf\x96\x84\xbd\xda\x61\xbb\x57\x7f\x2d\x15\xee\x39\x49\x12\x55\xe5\xe6\x5a\xdd\x89\xd6\x4e\x87\x86\xfc\xbf\xd4\x0f\x00\x20\xac\xd1\x07\x96\x1f\xde\x9b\x72\xd0\x5d\x2a\xe9\x24\x5b\xf4\x91\x2a\x78\x95\x4a\x2b\xf9\xf7\x3e\x66\xae\x83\x10\x9c\x28\x4f\x45\x5a\xff\x40\x57\xd9\xd8\xb5\x1e\xb3\x13\x56\x8a\x44\x16\x92\xca\xc8\x73\xfc\x1e\x0f\x9e\xaf\x8d\x20\x8d\x16\xd9\x2d\x61\xd4\xe7\x61\xad\x9f\x5a\x7e\x27\x3a\xb8\xf2\x35\xc8\xa1\x94\x43\x32\x77\xb5\x90\x4a\xf1\x6f\xc7\xda\x68\x34\xd7\x61\x0f\xa1\x79\x05\xa6\x12\x95\x18\x82\x97\x15\x92\x12\xac\x1f\xfb\xfa\x8b\x2f\x85\x2c\xe1\xf0\x5e\x89\x44\xe5\x6d\x6a\xaa\xae\xd9\xa0\xa5\x9e\x6a\xfe\x04\xb6\x51\x91\xb2\xb4\x2a\x7d\xcd\xd4\x7b\x9e\xc9\x54\x9a\x85\xf7\xda\x51\x79\x2d\x8e\x37\xc6\x6f\xa3\xae\x97\x91\xf1\xa2\x28\x15\x4f\x66\x42\x07\x6f\x43\x01\x85\x92\xc8\x7c\xec\x3b\x96\x80\x03\x19\x05\xda\x58\x06\x99\x2d\x58\xa9\x8c\x73\xbc\xaf\x79\xe1\x75\xd0\x19\x34\x47\x2e\x67\xca\x05\x78\xe7\x55\xd8\x05\x8e\x4a\xde\x86\x7f\x68\xa6\xb2\xd4\x41\x98\xfc\xf9\x8d\x15\x0a\x13\x3a\x83\x96\xf8\x01\xc0\x85\x51\x2c\xb3\x0c\xdb\x12\xc4\xf5\x8d\xbf\xf9\x96\xcd\x54\x55\xea\x71\x08\x3a\xf0\x16\xbe\x43\xfd\xce\x09\x95\x86\x65\x82\x6b\xc3\xde\xbe\x61\x73\x99\x57\x96\x4f\x75\x3e\x36\xdd\xe5\xa0\x40\x02\xfa\xee\xdb\xd6\xed\xba\xca\x3e\x6b\xa5\x9e\x02\xb1\x91\x49\xf4\xa1\x9b\x84\x89\x71\x88\x2c\xde\x10\x84\x88\xe8\x86\xab\x9d\x1b\xf5\x08\xf7\xeb\xd7\x4a\xdd\x2c\x4c\x97\x24\x4a\x6a\x11\x67\x4f\xfe\x8d\xbe\x6c\x03\x9e\x52\x63\xa7\x6c\x7c\xe9\xa3\x54\xb8\x98\x4a\x6d\xb6\xd4\xb7\xa8\xf3\x2b\x37\x3e\xd6\x9e\xad\x4c\xad\x76\xd0\x31\x57\x06\xda\x38\x89\xd8\xd9\x96\x92\x44\x60\x31\xcb\xb3\xba\x52\x52\xae\xf0\xd9\xad\xdd\x3f\x31\xe0\x98\x3b\x20\x03\xa0\xa6\xb7\x9c\x6a\x3b\xa1\xcb\x1d\x89\xce\x73\xc5\x66\xf1\x2d\xd0\x32\x9f\x22\xc8\xf9\xbc\xca\x8c\x2c\xb2\x7a\xde\x9f\x5c\x03\x22\xe4\xa1\xcd\x8d\x07\x66\x22\x8e\x89\xc5\x88\x36\x05\xf6\xc9\x57\xbe\x2f\x91\x1b\xc4\xea\x2e\x2d\x3f\x28\x78\xc9\xfd\xe2\x41\x25\x5d\xfd\x9a\xcc\x77\x1c\x3c\x8a\x04\x87\x69\x5b\xf1\xac\x1e\x71\xe0\x45\x1a\xf2\xd0\x18\x91\xf3\xbc\x85\xa9\x3a\x86\xe7\x82\x46\x4c\x3d\xf8\x60\x32\x2c\x83\xd2\x38\x2d\x24\xd4\xbc\xe3\xc9\x9d\xc8\x53\x2c\x1a\x05\xd3\x4e\x17\x39\x9f\x13\xda\x56\x50\x8f\xbb\xd1\x5e\x1f\x91\x61\x02\xd3\xf7\x5c\x9a\x31\x72\xdd\x21\xd7\xa0\xd2\x9d\xa1\x6c\x6c\x93\x6d\xf7\x5c\xa3\xc9\xa6\x94\xf7\x89\x70\xfc\xdf\xb6\x1b\x72\xe8\xf7\x2d\x72\xe9\x97\x06\xef\xb6\x27\x38\xbf\x40\xee\xbd\xe5\x1c\x40\xb5\x78\x66\xaf\xf6\xc2\xe7\x8c\x36\x36\xf7\x66\x31\x6c\xd5\x9b\xf2\xa6\x4b\xe6\xef\x61\x79\x93\xc6\x97\xf8\x13\x4f\x95\x66\xef\x32\x95\xdc\xb1\x33\x01\x42\xd7\x63\x96\x67\x29\x6f\xd2\xa7\x84\xf0\x9e\xf3\xe9\x36\x3f\xdb\x88\xcd\x55\x2e\x8d\x2a\x37\xd3\x8b\xfd\x95\x9d\x7c\x81\x7b\x5e\x8b\x50\x65\x4f\xf3\x73\x06\x7b\xb6\xc7\xad\xeb\xc6\x43\x23\xaf\x9e\xc1\xed\xc4\xaf\xa8\x0a\x58\xcf\xbb\xf6\xc7\x99\x7a\x18\x19\x35\xaa\xb4\x18\xc9\x16\x0e\xdd\x0e\xd3\xbc\x13\x0b\xf0\x62\x77\x9c\x28\x35\x8b\x74\x06\xa3\xc0\x02\x05\xdf\x5b\xce\xfd\xe9\xdd\xd9\x67\x2d\xca\x71\x28\x03\x1e\x0b\x93\x1c\x27\xa2\x98\x1d\x53\x0f\xcf\x72\x51\x1c\x11\xe9\xba\x2a\xae\x1d\xb2\x99\x44\x65\x19\x25\x66\xab\x5b\x76\x2a\x8a\x99\xef\x78\xdf\xb3\x7e\x3a\x44\xe0\x42\xa9\xae\x40\xa8\x87\xb6\x4d\x7c\x89\xe0\x1b\xbc\x43\xc1\x61\x2a\x6f\xba\x15\xa1\xd8\xd7\xf1\x79\xd6\xa5\x36\x1f\x71\x71\x1e\x17\x4e\xf9\x30\xc2\x53\x0e\xe3\x3d\x63\xb0\x64\x17\x31\x12\x91\xa0\xc9\x2d\x0a\xdd\xa9\x48\x99\xba\x17\x65\x29\x53\xa1\x99\xa7\x41\xa1\x96\x2a\xb3\x7d\xaf\xdb\x0b\x6e\xf3\x93\xe3\x36\xf7\x50\x87\x0e\x41\x1f\x8a\xc8\x14\x7c\xb3\x44\xa6\x78\x3a\x97\xf9\xb3\x23\x54\x3a\xe1\x99\x98\xfc\xd4\x41\xff\xa0\x16\xb1\x0a\x72\x45\x5f\x06\xf8\x69\x5b\x50\xc9\xfe\xea\xcf\x0d\xcb\x55\xba\xcd\xa4\xfa\x08\x8a\xc4\x94\x1b\xf1\xb0\x95\x1d\x8e\x6a\x42\xb5\xfd\x49\x10\x4e\x9f\x52\xe5\x78\x16\x18\x81\xc1\x99\x47\xd0\xb3\x21\x99\x2a\xed\x5a\x57\xe3\x24\xb6\x0a\xe1\x77\x9b\xa0\xbb\xee\x04\x9f\x5c\x4e\xd8\x0f\xf8\xf8\xb0\xe8\x85\xa5\x32\x28\x06\x9e\xa9\x39\x97\x5d\x8b\x6c\x34\x9b\x37\xd1\x57\xc3\x29\x5c\xfa\x67\x19\x3d\x1c\x14\x70\xb9\x95\xd3\xca\xea\x74\xa4\x87\x3d\x2b\x80\xb9\x25\xd1\xe5\xf9\x02\xcc\xed\x5e\x0d\x22\x30\x39\xb9\xb8\xc8\x5a\x62\x71\x5b\x09\xac\xc4\xfb\x40\x99\x16\xb9\x96\xe0\x90\x09\xbc\xe2\x54\xe9\x0f\x4b\x4b\x62\x10\x24\x8a\x38\x47\xec\x83\x9a\xca\xdc\xdd\x5e\x45\xfe\xba\x5b\x2e\xb3\xb6\x8b\xf1\x22\x93\x3c\xb9\x4c\xa2\x75\x76\x9e\xf3\x9b\xac\x4d\xb8\x41\x7c\xd4\x7c\x43\xf6\x3e\xe3\x53\x26\xe0\x8f\xe3\x54\x6a\xfb\x2f\xbb\xba\xfa\x00\x46\xf8\x2a\x77\x12\x33\x18\xa8\x89\xf6\xf9\x24\x05\xbc\x88\xc3\xde\x1d\x24\x3d\x3d\xd0\xff\x82\x96\x4c\xe6\xa9\x1d\x78\x50\x0a\x0e\x83\xa4\xe0\x09\xc4\x43\xf4\x31\xbf\x18\x36\x70\x23\xd8\xf5\x4c\x26\x77\x97\x81\xdd\x5d\x95\xf6\xbb\x3c\xf8\x2a\x62\x60\xcd\xdf\x86\xa4\x96\x34\xd4\xcb\xee\xaa\x71\xd0\xd2\xf1\x01\x47\x30\xae\x68\xfe\xf0\x1b\xd7\x5a\x25\xb2\xf6\xb9\x80\x8d\xa6\x66\x0e\x29\x30\x87\x61\xe7\x04\xe2\x41\xd7\xe9\xa0\xfc\xb1\x82\xa3\xb9\xdd\x74\xd5\x71\x75\xc8\xc1\x64\xee\x66\x3d\xe8\x14\xf0\xcc\xf4\x80\x46\xaf\x1b\x2e\x43\xa3\x3b\x61\xb8\xe1\x58\x70\x61\xea\xb4\x79\x4e\x10\x73\xb5\x39\x97\xb6\xcf\x43\xa4\x13\x34\xe1\x60\x13\x6f\x93\xb6\xb1\x4a\x0d\x6f\x78\x13\xf1\x3b\x72\x35\xc0\x9d\x2b\x54\x51\x65\x18\xcf\xb1\x3b\xbe\xbb\xb3\x19\xe3\x7b\x06\x72\x3d\xec\x03\xb5\xf4\x30\x0c\xec\xed\x1e\xe9\xfc\xdb\xc0\x2e\x0d\x84\xbb\x37\xdf\x7d\xfb\xed\xd7\x8e\x66\xda\x56\x05\x7f\x0c\x38\xd3\x96\x26\xda\x15\xf9\x45\x93\x97\xfc\xa2\xdf\x6f\x7e\xd1\xe3\xa3\xd0\x0e\x9c\x41\xd4\x31\x36\xb7\x5b\x5c\x6e\xfb\x1c\xa1\xd6\xd1\xbb\x5d\x23\x77\x3b\x64\x01\x0d\x9b\xfb\xd3\x39\x96\xb5\x4b\x9e\xcf\x4b\x76\xcf\x6f\x35\xbb\xa7\x4f\x2c\x6b\xf7\x4c\x9e\x2e\x31\xac\xbf\xc5\xac\x9d\x0e\x97\xb3\x7d\x76\xc9\xce\x39\x25\xdd\x41\x00\xbb\xdb\xd3\xfa\x14\xa4\xaa\x5b\xae\xd4\x20\x5d\x52\xb9\xc3\x1e\x3b\x3c\xd4\x01\xb4\x98\x51\xf6\x06\xee\x45\x21\x61\x1d\xb4\x31\xec\x5e\x75\xa9\x0d\x49\x6d\x7e\xba\x6a\x38\x66\xfc\xd7\x4f\xe3\x8f\xf9\x3d\x38\x3c\x5e\x6a\xba\x7c\x25\x26\x77\x1d\xa1\xb5\x38\x6b\x05\x90\x00\x60\xe4\xea\x26\x44\x89\xac\xaf\xce\xc9\xe5\xc4\xea\xe0\x90\x46\xc4\x33\x3d\x66\x2b\xf8\xbc\x33\x97\x92\x5c\xe0\xf8\x3b\x37\x46\xcc\x0b\xd3\x7e\xd7\x5f\x2c\xee\x4f\x6e\x71\x1f\xd0\x02\x38\xab\xe6\x3c\x1f\xd9\x1b\x05\x36\xf7\xc8\x5b\xd7\xa0\xcc\x63\x46\x77\x07\xd9\x13\x58\x40\x20\xb9\x20\x2e\x6c\xcc\x83\x32\x97\x8f\x63\xf6\x84\xbe\x7b\xcf\x1c\xf9\x6a\xe3\xa6\x25\x6a\x29\xe0\x95\xa6\xe3\x57\xc1\x5d\xaa\x80\x39\x47\x6a\xb8\x99\x09\xe4\xe1\x97\x90\x90\x53\x3f\x15\x4b\xd2\x28\x4a\xf3\x2c\x53\x0f\xf8\xee\x90\xaf\xd9\xd5\xb7\x63\xa1\x4c\xb3\x1b\xc1\xe6\xd2\xea\xe8\x64\x60\x0d\x87\x83\x2e\x53\x2b\x91\x8b\x12\x05\xde\x92\x9c\x6d\x57\xc2\xd0\x46\xc1\x46\x5b\xfd\x36\xc7\x80\x70\xfb\x7f\x17\x55\x04\xef\x76\x34\xe1\x46\xcc\xf8\xbd\x54\x55\x89\xad\x8d\x62\x07\xf4\x13\xf0\x86\x85\xaa\xbc\xbd\x0b\x8b\x61\xfa\xd9\xe9\x15\xeb\x74\x51\xff\x08\xaa\x40\xaa\x9c\x69\x62\x24\xbe\x48\x6d\x96\xe7\xe2\x96\xc8\xc1\xe0\x0d\x75\x6e\xee\x75\x61\xd9\x42\xe7\xaa\x76\x51\xbb\x58\x5e\xb9\xbf\x82\x9f\xbe\xa2\x9a\x76\x5b\xd1\x5d\xf7\x26\x02\xfd\x0e\xc5\x1f\xef\x09\xcb\x64\xb2\xe8\x5c\xee\xad\xd1\xda\x11\x6d\xed\x7d\x68\xf6\x7b\xf6\x8e\x6b\x91\xb2\x8f\x3c\xe7\x53\xd4\xf7\x5e\x5d\x5d\xbe\xfb\xf8\xda\xee\x2b\xe8\x93\x93\xb3\x95\x8e\xb6\xab\xb0\xf3\x8b\x21\xf3\x45\x96\x26\xde\x83\x55\x2d\xb5\xef\x39\xf9\x41\x13\x61\x98\xe7\x43\xed\xc0\x7a\x57\xb0\xa0\xcb\x66\x0a\x6b\xb3\xe6\x67\x83\xc0\xdc\xcf\xd3\x1d\xab\x7c\xca\x5c\x1b\x9e\x65\x97\x19\xcf\x4f\x8a\xa2\x54\xf7\xab\xb5\xf1\x68\xac\xee\x41\x37\x52\x0c\xf3\x70\x5f\x16\xb8\xf4\xe0\xc2\xce\xd9\xa4\xee\x7f\xcc\x26\xc6\x6b\xe1\x2a\x07\x96\x7a\x70\x52\x19\x35\xe7\x46\x26\x07\x56\x59\x3f\xf8\xc8\xf3\x8a\x67\x2b\x83\xae\x36\x4e\x63\x9d\x88\xb8\xb1\xd1\x7a\xe8\xba\x16\xcd\x36\xca\x1a\x9b\xdb\x1b\x5e\x5a\xea\x74\x7a\xf5\x73\xa7\xb6\xda\x70\x53\x2d\x51\xe1\x0d\x9c\x61\x3d\x2f\x18\xb1\x8c\x6b\xf3\xb9\x48\xed\xa5\x6f\xfc\xba\x89\xe0\x27\xdc\xf0\x4c\x4d\x7f\x14\x3c\x5b\x7d\xc2\xa3\x73\x72\x1a\x3e\xed\x0c\x50\xe4\xf0\xaf\x6e\xfc\x83\x87\x9a\x59\x01\xdb\xe5\xc0\x97\x22\x13\xf7\x3c\x37\xae\x39\x16\x57\xd7\x87\x34\x7f\x38\x45\xb2\x36\xbe\xa6\xc2\x88\x72\x2e\xf3\xb8\xcf\x2b\x78\xf6\x54\xe5\xa9\x44\xb3\x23\x18\xd4\xb0\x45\xdc\xef\xfa\xa3\xb6\xce\xd3\xb0\xc1\xb7\x10\xa3\x6b\x06\xe3\x89\x97\x02\x1f\xbb\x21\xf9\x72\x86\x5f\x82\xa7\x3d\x1a\xdb\xd2\x4a\xb1\xbb\xdc\x0a\x86\x80\x23\xb2\x9a\x6c\x6d\x95\x13\xb6\xc9\x07\x23\xb7\xc7\x38\x84\xf5\x81\xa3\x23\x1a\xf7\x3a\x1f\xc4\xa6\x23\x86\x9f\xed\x92\x45\x73\x28\xeb\x69\xea\xaa\x73\xe7\x9b\x61\x26\x4b\xa3\x20\x7f\xf4\xd0\x7a\x1e\xd0\x4a\xf0\x6a\x27\x23\xb5\x45\xb5\x8f\x69\x6d\x8d\xc1\xbe\xa4\xca\xb6\x90\x18\xb7\x32\xad\x96\xe0\xf2\xb1\x62\x3d\xa1\xf8\xbf\x92\x54\x11\xce\x0a\x29\x10\xfc\x84\xe7\xb4\x58\xc0\x59\x04\x4f\xe9\x4b\xcb\xc1\xac\x4a\x08\xbf\x1d\x91\x33\x1c\x8d\xcb\x14\x6b\xe1\x0c\xd4\x1c\xc1\x3f\xc0\x71\x71\xfc\x83\x22\x23\x2f\x25\xe9\x5a\x1a\x00\x9c\xfc\x88\xe9\x2a\x99\x31\xae\xed\xd0\xec\x81\xb6\x37\x5e\x8c\xe7\x3c\x97\xb7\x42\x9b\xb1\x47\x09\xd6\xff\xf8\xe6\x9f\x63\xf6\x5e\x95\x8c\x02\xd5\x8f\x1c\xaa\x06\x8d\xb3\x3e\x17\x52\xe3\x64\x7c\xdb\x5a\x6b\x2d\x54\x4a\x83\x7e\x80\xc1\x1a\x7e\x67\x79\x18\x0e\xb6\x12\xe0\xba\xf8\x9e\x1d\x58\x31\x31\x78\xf5\x7f\x2c\x5b\xfa\xef\x01\x7b\xf5\x00\x4c\xfb\xc0\xfe\x79\x80\x2f\xf4\x61\x93\xa1\x52\x5d\xbf\x18\x93\x25\x4b\x39\x9d\x8a\x12\xd5\x47\x06\x49\x85\xaf\x09\x15\x24\x57\xc1\xc3\xce\x29\x5d\xab\x9b\xcd\x81\xfc\xe3\x9b\x7f\x1e\xb0\x57\xf1\xbc\x98\xcc\x53\xf1\x85\x7d\x83\xd6\x65\xa9\xed\x1c\x5f\x93\x33\x47\x2f\x72\xc3\xbf\xd8\x3e\x93\x99\xd2\x22\x47\x55\xde\x28\x36\xe3\xf7\x82\x69\x65\x35\x60\x91\x65\x23\xb2\xa5\xb3\x07\x0e\x48\x2d\x6e\x29\x21\xb1\x9e\x15\xbc\x34\xd1\x91\x18\x93\x85\x04\xde\x66\xb7\x6d\x9a\x3b\xcf\xf4\xad\xcc\xc9\x7f\x45\x9e\x33\xbb\xe7\x90\x18\x8a\x9b\x64\x14\x4b\x66\x3c\x9f\xfa\xdc\xf4\xdb\xca\x54\xa5\xd8\xe2\xfa\x69\x79\x07\xee\x64\xde\x29\x85\xf9\xaf\x32\x6f\x06\x15\xac\xb6\x2b\x4d\xa5\x71\x59\x11\x14\xab\x68\x16\xc7\x76\x17\x4a\x79\x53\x19\x55\xea\xe3\x54\xdc\x8b\xec\x58\xcb\xe9\x88\x97\xc9\x4c\x1a\x91\xd8\x69\x1d\xf3\x42\x8e\x12\x95\xdb\x1d\x07\x54\x86\x79\xfa\x47\x28\x6f\x3a\xb2\x43\xdd\x82\x3a\xdd\x72\xd2\xdb\x8d\x6a\x4f\x6a\x4c\x1b\x6c\x8e\x2d\xec\x41\xcb\x13\x45\xdb\xcc\x1e\x66\x0b\x86\x90\xe3\x41\x26\xeb\x40\x93\xbb\xf3\x98\x43\xc2\x01\x4f\x9a\x7d\xd8\x6b\x87\x01\x24\x70\x2b\x23\x4a\x39\xe7\x29\x92\x52\x9e\x2f\x1e\xfd\xf0\xdb\x25\x05\xb8\xfc\x64\x31\x82\x2e\x54\x36\xe2\x79\x6a\xff\x8f\x09\x3b\xc9\x62\x90\x35\xac\x64\x27\x42\xf0\x79\x72\xb6\x9f\x2b\x51\xc9\x01\x6e\x3d\xc9\x6b\x2d\x85\x28\x14\x55\x31\x50\xa3\xac\x84\x63\x9a\xb1\x80\x2a\xb5\xeb\xf5\xff\x91\xff\xc5\xa3\x9d\x6d\x13\xa9\x36\x7b\x4d\x02\xd9\xb1\xe5\x78\x3f\xd4\x2d\x42\x9b\x1c\x04\x5e\x71\x6d\x08\x5a\xcb\x61\x10\x44\xd3\x70\x0a\x0a\x30\x98\xf5\x8e\xe1\x56\x67\xc8\xc5\x0b\xd8\x81\x8c\x56\x62\x2e\x25\x5e\x29\xd9\xae\x40\xd5\xfa\x4b\x54\x07\x0d\x27\x65\x84\x36\x8c\xdf\x73\x99\x81\x75\x5e\xdd\x68\x51\xde\x63\x41\x2a\x82\x1a\xe4\x4d\x3d\x8b\x6a\x4e\xa0\x18\xb5\x27\xcd\xc7\xcd\x61\x79\x57\x36\x4d\x00\xb4\xa1\xc6\xe8\xd7\x8e\x7a\x10\xbd\x07\xd5\xcb\xb5\x3f\xdb\x37\xf4\x54\x63\xec\xf9\xfb\x51\xf0\xd2\xdc\x08\x6e\xae\xe5\x26\xbe\xbb\x74\xa4\xa3\x76\xbe\x94\xbb\x3f\xd0\x0f\x82\x4d\x95\xb1\x22\x56\x05\x67\x1f\x65\x52\x04\xf5\xf1\x07\xed\xb1\x4f\x74\x3d\xcb\xeb\x92\x43\x8a\x8f\xca\x3b\x4e\x33\x6e\xb8\x3c\x4f\x92\x8e\xe9\x24\x19\x7c\x1a\x81\x34\x54\x2e\x68\xef\xd0\x9b\x01\x14\x68\x3f\x53\x9e\x0b\xad\x37\x02\x6c\xc4\xd1\x85\xf8\x34\x5e\xe5\x86\x6b\x6d\xee\x7e\xc3\xb4\x10\x2b\x40\xa7\xc2\x70\x99\xb9\xab\x8c\x4b\xe1\x57\x69\x1b\x75\xdd\x38\xc1\x52\x70\xbd\x49\x40\x88\x46\xfd\x09\x1e\xc6\x41\xab\x5c\x8c\x1e\x54\x99\xb2\x53\x3e\x17\xd9\x29\xd7\x82\xfa\x0a\x53\xf4\x70\x8f\x0e\xf5\xa0\x43\x5e\x6d\xfb\x5a\x33\x64\x34\xfe\xd4\x26\x61\xf8\xab\x56\xb1\x70\x80\x47\xce\x04\x79\x5d\x56\xe2\x88\xbd\xb7\xdc\xeb\x88\x7d\xce\xef\x72\xf5\xb0\xdb\x58\xcd\x46\x2f\x48\x34\xd2\x30\xfc\xc3\xc1\xea\x44\x06\x1f\x3f\xdc\x9e\x23\x22\x82\xbf\xc6\xd4\x18\x33\x1b\xff\xa8\x1b\x91\xfd\xef\x92\x09\xca\x2a\x8a\xa5\x9a\x96\x42\x23\x72\xcd\x4a\x90\xc4\xb6\x26\xe7\x1f\x44\x4e\xc9\x7d\x5b\x87\x37\x59\xd5\xca\x8d\xd4\xf1\xb5\x69\xfd\x0b\xed\x37\xbd\xac\xc8\x56\x8a\x1a\x9b\x23\x02\x83\x81\xae\x31\x3e\xad\x1b\xe1\x6a\xa3\x53\xc0\xf5\x82\x67\x51\x28\xd9\x64\x1d\x75\xb3\x3b\xbd\xfa\x79\xfd\x62\xaf\xe5\x7d\xdb\xf8\xd3\x76\xb3\xd4\xae\x06\xa9\xad\x77\x66\xab\x11\xea\xc5\xfc\xf4\x62\x7e\xfa\x9a\xcc\x4f\x5b\x4f\xfc\x26\x93\xd3\xd7\x61\x6c\xda\x3a\xc5\x4d\x06\xa6\x67\x69\x5a\x6a\x35\xa3\x8d\xe6\xa4\x67\x6b\x48\xda\x3a\xb5\x96\xc6\xa3\xdf\x8f\xd9\x68\xeb\x8a\x6d\x30\x15\x3d\x43\x23\x51\x1b\x81\x4c\xa4\x6d\xc4\xc4\x49\xf0\x70\x28\x28\xd6\xe5\x2c\x7d\x77\x2e\x28\x27\x14\x67\xfa\x4a\x8b\x56\x80\xdb\x3a\xb6\x43\x1a\x5c\x7b\xd9\x8b\x04\x46\x2a\xf6\xb8\x34\x58\x76\x76\x7e\xf9\xe9\xfc\xf4\xe4\xfa\xfc\xac\x29\xdf\xad\x5a\xe9\x2d\x92\xd8\x66\x1b\xc4\x28\x90\xc4\xd6\x3c\x60\x09\xf2\x9a\x9f\xec\x19\x58\xf3\x53\x55\xc9\x55\xad\x76\x97\x0b\x77\xe2\x72\x3b\xf1\x8f\xed\xb7\xb3\xed\xf5\xfc\x8c\x81\x53\x9c\x62\xce\xac\xdc\x33\x53\x59\xaa\x5d\xdc\xea\xe4\xcc\x67\x52\xc9\x3c\xc9\xaa\xd4\x0a\x17\x9f\x3f\x4f\xce\xf4\x98\xb1\x77\x22\xe1\x95\x06\x2b\x4c\xaa\xf2\x43\xc3\x7e\xba\xf8\xf0\x77\x88\xc7\x86\x27\x8e\x3c\xae\x09\xa0\xf2\x4a\x8e\xc0\xc2\x06\xe1\xda\xd8\x3b\x81\x82\x0a\xbc\x39\xe1\x85\xa5\x62\x1a\x2b\x57\x18\x90\x45\x66\x22\x2b\x2c\xc5\xbc\x13\xac\x46\x50\xb5\x1d\xd7\x15\xe6\x5d\xf8\xe4\x54\x18\xcc\xba\xda\x14\x21\xb9\x71\xd5\xb6\x58\x5c\x77\xb0\xb5\x46\xea\x23\x69\xe3\x0f\x5c\x93\xc5\x6a\xe5\x68\xb7\xec\xef\x76\xfb\xcc\x7a\x13\xc7\x1a\xe3\x06\x92\x67\xf8\x6b\x69\xcc\x76\xb0\xb5\x1d\x03\x83\x48\xa4\x69\x6d\x4d\x5d\x1f\x06\xb4\xba\x0e\xc0\x92\x2d\x43\x34\x17\x39\x7a\xb1\x8f\xc8\x0e\x86\xdc\x6e\x2c\x50\x44\x24\x8d\x6a\x7f\x52\xfc\x5c\xfc\x5d\x75\xe3\xab\xbf\xd6\xe3\x25\x8b\x0c\xfb\xcf\x7f\xff\xf0\x87\xff\x0d\x00\x00\xff\xff\xab\x25\x1f\x94\x2d\xcc\x0b\x00") +var _olmManifests0260CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x77\x23\xb7\xb1\x38\xfa\xbf\x3f\x05\x8e\xe2\xfb\x24\x39\x24\x35\x93\xed\x97\xe8\x26\xf1\xd1\x95\xc6\x8e\x9e\x67\xd1\x19\xc9\xce\xcb\xcf\xe3\x1b\x83\xdd\x45\x12\x51\x37\xd0\x01\xd0\x94\x98\x38\xdf\xfd\x1d\x54\x01\xbd\x70\x13\x97\x9e\x19\x69\x0c\xe4\x9c\x78\xc4\xee\xc6\x52\x28\xd4\x5e\x85\x7e\xbf\xff\x19\x2f\xc4\x77\xa0\x8d\x50\xf2\x94\xf1\x42\xc0\xbd\x05\xe9\xfe\x32\x83\xdb\xdf\x9b\x81\x50\x27\xd3\xe7\x9f\xdd\x0a\x99\x9e\xb2\xf3\xd2\x58\x95\xbf\x05\xa3\x4a\x9d\xc0\x05\x8c\x84\x14\x56\x28\xf9\x59\x0e\x96\xa7\xdc\xf2\xd3\xcf\x18\xe3\x52\x2a\xcb\xdd\xcf\xc6\xfd\xc9\x58\xa2\xa4\xd5\x2a\xcb\x40\xf7\xc7\x20\x07\xb7\xe5\x10\x86\xa5\xc8\x52\xd0\xd8\x79\x18\x7a\xfa\x6c\xf0\x87\xc1\xb3\xcf\x18\x4b\x34\xe0\xe7\x37\x22\x07\x63\x79\x5e\x9c\x32\x59\x66\xd9\x67\x8c\x49\x9e\xc3\x29\x4b\xb8\xe5\x99\x1a\xd3\x24\xcc\x40\x15\xa0\xb9\x55\xda\x0c\x12\xa5\x41\xb9\xff\xe4\x9f\x99\x02\x12\x37\xfa\x58\xab\xb2\x38\x65\x4b\xdf\xa1\xfe\xc2\x24\xb9\x85\xb1\xd2\x22\xfc\xcd\x58\x9f\xa9\x2c\xc7\x7f\xfb\xc5\xd3\xb0\xd7\x38\x2c\xfe\x9e\x09\x63\xbf\x59\x7c\xf6\x52\x18\x8b\xcf\x8b\xac\xd4\x3c\x9b\x9f\x30\x3e\x32\x13\xa5\xed\xeb\x7a\x78\x37\x5c\xc2\xad\xd1\x09\x3d\x16\x72\x5c\x66\x5c\xcf\x7d\xfb\x19\x63\x26\x51\x05\x9c\x32\xfc\xb4\xe0\x09\xa4\x9f\x31\xe6\x41\xe8\xbb\xea\x33\x9e\xa6\xb8\x2d\x3c\xbb\xd2\x42\x5a\xd0\xe7\x2a\x2b\x73\x59\x0d\xe5\xde\x49\xc1\x24\x5a\x14\x16\x41\x7f\x33\x01\x56\x68\xb0\x76\x86\x20\x61\x6a\xc4\xec\x04\xc2\xd8\xd5\x57\x8c\xfd\xc3\x28\x79\xc5\xed\xe4\x94\x0d\x1c\x84\x07\xa9\x30\x45\xc6\x67\x6e\x36\x8d\xb7\x68\x9b\x2e\xe8\x59\xe3\x77\x3b\x73\x53\x37\x56\x0b\x39\x5e\x37\x15\xf7\xde\xe6\x73\x20\xd0\xdc\xcc\x8a\xc5\x29\xcc\xfd\xb8\xe9\xf8\x45\x39\xcc\x84\x99\x80\xde\x7c\x12\xd5\x27\x0b\x73\xb8\x5a\xf2\x64\xc5\x44\x1a\x9d\x86\x03\x35\x58\x38\x0c\x0b\x03\x9c\x8d\x17\xd7\x98\x72\x1b\x7e\xa4\x97\xa6\xcf\x79\x56\x4c\xf8\x73\xff\xa3\x49\x26\x90\xf3\x1a\x1f\x54\x01\xf2\xec\xea\xf2\xbb\x5f\x5f\xcf\x3d\x60\x6d\xe8\xb4\xf0\x9c\x09\xc3\x38\xd3\x50\x28\x23\xac\xd2\x33\x07\xad\xf3\xeb\xef\x4c\x8f\x9d\xbf\xbd\x30\x3d\xc6\x65\x5a\x1d\x3c\x56\xf0\xe4\x96\x8f\xc1\x0c\x16\xe6\xaa\x86\xff\x80\xc4\x36\x7e\xd6\xf0\xcf\x52\x68\x48\x9b\xb3\x70\xe0\x09\x30\x99\xfb\xd9\xc1\xbf\xf1\x53\xa1\xdd\x98\xb6\x71\x90\xa9\x35\xa8\x5c\xeb\xf7\xb9\x15\x1e\x3a\x30\xd0\x7b\x2c\x75\x04\x0e\x0c\xa2\x80\x3f\x63\x90\x7a\xd8\x11\x6a\x08\xe3\xd6\xaf\xc1\x80\x24\x92\xe7\x7e\xe6\xd2\xaf\x69\xc0\xae\x41\xbb\x0f\xdd\x71\x2f\xb3\xd4\x51\xc2\x29\x68\xcb\x34\x24\x6a\x2c\xc5\xbf\xaa\xde\x0c\xb3\x0a\x87\xc9\xb8\x05\x63\x19\x9e\x5a\xc9\x33\x36\xe5\x59\x09\x04\xca\x9c\xcf\x98\x06\xd7\x2f\x2b\x65\xa3\x07\x7c\xc5\x0c\xd8\x2b\xa5\x81\x09\x39\x52\xa7\x6c\x62\x6d\x61\x4e\x4f\x4e\xc6\xc2\x06\x1a\x9e\xa8\x3c\x2f\xa5\xb0\xb3\x13\x24\xc7\x62\x58\x3a\x72\x78\x92\xc2\x14\xb2\x13\x23\xc6\x7d\xae\x93\x89\xb0\x90\xd8\x52\xc3\x09\x2f\x44\x1f\x27\x2b\x91\x8e\x0f\xf2\xf4\x17\xda\x53\x7d\x73\x38\x07\xbe\xa5\xc8\xcc\x02\xd9\x5c\x0b\x6b\x47\x3c\x09\x8b\xe8\x73\x5a\x4b\x0d\x52\xf7\x93\x83\xca\xdb\x17\xd7\x37\x2c\x4c\x80\xc0\x4e\x10\xae\x5f\x35\x35\xb0\x1d\xa0\x84\x1c\x81\xa6\x37\x47\x5a\xe5\xd8\x0b\xc8\xb4\x50\x42\x5a\x3a\xd2\x99\x00\x69\x99\x29\x87\xb9\xb0\x06\x71\x0e\x8c\x75\xfb\x30\x60\xe7\xc8\xc2\xd8\x10\x58\x59\xb8\x93\x94\x0e\xd8\xa5\x64\xe7\x3c\x87\xec\x9c\x1b\x78\xef\xa0\x76\x10\x35\x7d\x07\xbe\xcd\x81\xdd\xe4\xc0\x8b\x1f\x2c\x9c\x31\xc6\x02\x87\xdc\xe8\xe5\x55\x87\x92\xd1\x09\x5c\x46\x81\xd9\x9a\xb3\xe8\x1a\x4f\x53\x0d\x66\xc9\x83\x85\x03\x49\x2f\x12\x9e\x4c\x94\x71\xfb\xc7\x2d\x7b\xf3\xf2\x15\x4b\xb8\x64\xa5\x01\x77\x78\x12\x25\xa5\x43\x08\xab\x18\x77\xbc\xac\x0f\xf7\xc2\x20\x02\x69\x18\x0b\x63\xf5\x6c\xc0\xbe\x52\x3a\xe7\xf6\x94\xfd\x31\xfc\xd4\xc7\xee\x94\x66\xa2\xf8\xf3\xe9\x1f\x0b\xa5\xed\x9f\xd9\x1b\x99\xcd\x5c\xa7\x29\xbb\x9b\x80\x64\xd7\xd5\xda\xd8\x9f\x1a\x7f\x7c\xad\x8b\x64\xc0\x2e\xc7\x52\xe9\xf0\xa6\xc3\xaa\xcb\x9c\x8f\x81\x8d\x04\x64\x88\xd7\x06\xec\x60\x7e\x07\xd7\xee\x22\x23\x71\x69\x24\xc6\xaf\x78\xf1\x20\x68\xce\xc3\x9b\x6e\x2c\x37\x7c\x93\x79\xd7\x0f\xad\x42\x54\x76\x4b\x72\xff\xe4\xc9\x2d\xe3\x7e\x94\x9c\x17\x7d\x83\xc7\xa6\x01\xa6\xcd\x20\x70\x1e\x3a\x70\xf0\xab\x7f\xbe\xf4\x94\x6b\xb0\xed\xb2\x9b\x2b\xdb\xfa\xdb\x5a\x0c\x79\x10\x68\xaf\x96\x71\x91\x0d\xc6\x18\xeb\x22\xb9\x52\x29\x2d\xfb\xc1\x51\xbe\x6e\xbe\xcd\xe0\xbe\x50\x06\x0c\x4b\xc5\x68\x04\xda\xd1\x1d\x35\x05\xad\x45\x0a\x86\x8d\x94\xc6\xfd\x2a\x54\x8a\x67\xb2\xda\xbf\x16\xab\xbd\x52\xe9\xa6\x1b\xe3\x86\x46\x86\x41\xc8\xe8\xd1\x70\xe5\x72\x97\x9e\x76\xf6\xc0\xe1\x75\x8d\x8f\x50\xfc\x9f\x2d\x7f\x3a\x07\x8f\x33\xff\x72\xc0\x54\x2f\x51\x79\xd2\x71\x68\xdc\xf2\x0f\x4d\xd5\xe7\xb2\xe9\x6e\x30\xe5\x4d\xa6\xed\x9a\x54\x29\x9c\x3d\x30\xfd\x85\x25\x5c\xe0\x1f\x43\x30\xf8\x79\x35\x55\xe4\xe0\x69\x99\x21\xa9\x29\xb3\xf6\x8e\xae\x5a\xc7\x86\x6b\xd9\x74\x3d\xf4\x1e\x8c\x40\x6b\x48\x2f\x4a\x87\xbf\xd7\xd5\xac\x3c\x91\xa2\x9f\x5f\xdc\x43\x52\xae\x3a\x63\x2b\x97\xee\x84\x62\xbf\x4c\xd0\xec\x4e\x64\x99\x1f\xce\x11\x94\xf0\xc0\xad\x17\xe5\x18\x07\x1e\x43\x44\xda\x70\x2b\xcc\x68\x86\xe0\xa8\x00\x06\xf7\x8e\x67\xa3\xc6\x82\x18\x2f\x46\x02\x52\x36\x9c\x79\x76\xed\x88\x67\x8f\x0d\x4b\xcb\x84\x45\x5e\x9e\x4c\x94\x32\xc0\x38\xc1\x1d\xfb\x9d\x0a\x85\x92\x12\x53\x12\x1c\xfd\xc9\x1d\x43\xf6\x07\xa7\xd1\xfd\x00\x67\x5e\x7f\x26\x0c\xcb\x1d\xc5\xaf\x60\x15\xd0\xd1\x75\x73\x27\xec\x04\xff\x18\x3b\x91\xdb\x49\x61\xa6\xcc\x5d\xa7\x77\x20\xc6\x13\x6b\x7a\x4c\x0c\x60\x80\xbb\x0b\x3c\x99\x34\xba\xcd\x01\xac\x61\x3c\xcb\xc2\x14\x9a\x28\x41\x7c\x33\x77\x22\x0a\x3b\xaa\x64\x18\x2f\x6f\xf4\x2a\xbe\x3a\xbf\x6b\x4b\xc1\xd5\x63\x60\x93\xc1\x71\x8f\x25\x2a\x2f\x4a\xeb\x60\xe2\xe6\x38\x9c\x31\x61\x9d\x9c\x4d\xf2\x92\x56\xe5\x98\x56\x02\x99\x1f\x38\x08\xab\xc4\x99\x1c\x71\x70\x3a\xa2\x1c\xb3\x03\x5a\xdc\x41\x90\x3f\x5d\x77\x82\x16\x81\xeb\xcb\xb9\x4d\x26\x5e\x04\x4e\x94\xd6\x60\x0a\x25\xf1\x4b\x7c\xf2\xa2\x9e\xdb\x7f\x57\x1f\x1d\x99\xe3\x1a\x98\x13\x31\x9e\x04\x58\x72\x0d\xf8\x5b\x7b\x0f\xd6\x9d\x91\xfa\x9c\x70\xad\x5b\xba\xe4\xb2\x26\x2c\xe4\x0f\x9c\x92\x05\xd4\x3e\x93\x0c\xf2\xc2\xce\x1a\x38\xd1\xd8\x3d\x0b\x3a\xaf\x60\x80\x1b\x8c\xc7\xd5\xd0\xfa\x44\x5e\x64\x22\x11\xd6\x63\x08\x7b\xc6\x8e\x10\x45\x84\x75\xa4\x8c\x49\xd5\x57\xc5\xf1\x80\x9d\xa1\xf9\x62\x83\x01\xa4\xaa\xfa\xf7\x1d\xb9\x41\x8d\xaa\xfb\x7a\x70\x6d\x1b\x12\x15\x6a\xab\x65\xba\xc5\xd6\xf7\xf3\x07\x99\xcc\x4b\x79\xcb\x5f\x27\x98\x3c\xf8\xea\xa6\xe4\x2d\xbc\x1d\xe6\xb0\xc9\xdb\xf3\x5b\x4d\x28\x6d\x20\x83\xc4\xa9\xa4\x0e\xf6\x3d\xc6\x8d\x51\x89\x70\x52\x7e\x8d\xb4\x6d\x4c\xa7\x95\x3c\x0c\x7b\xb6\x2d\xfc\xd9\xd6\xeb\x77\x6d\xfe\xe0\x6d\xfa\xdd\x02\x34\x32\xe1\x84\xdf\xd1\x1c\x54\x5a\x04\x6b\x38\xc3\xa7\x87\x86\x65\x7c\x08\x99\xd9\x0c\x08\x6c\xab\x53\x5b\xb7\x0d\xcf\xef\xca\x05\xad\x5c\x88\xd7\x31\xab\x8d\x77\x44\xdb\xe9\x66\x5c\x48\xe3\xf5\xe7\x1e\xe3\xec\x16\x66\xa4\x6a\x3b\x0d\x3e\x18\x2e\xf0\x65\x0d\xc4\x6e\x1c\x72\xdc\xc2\x0c\x5f\xf2\x7a\xf7\x16\xd3\xdd\x1a\x39\xa8\x6d\x73\x4c\xeb\xd6\x77\x13\xdd\xf2\x8b\xb0\xe8\x2d\x3e\xdb\x1e\x7f\xa9\xdd\xc2\x5a\xc9\x6b\x59\x5b\x10\x49\x10\x27\x71\x3f\x70\x93\x90\x7f\x85\x3d\xe6\x45\x91\x09\x40\x7d\x7e\xcb\x61\xd6\x6a\x01\xeb\x5a\x80\xde\x5e\xeb\x7a\x5b\x19\x34\x08\x21\x0f\x0d\x21\x9f\x3b\xe9\x13\x51\x90\x7e\x6b\x00\x0f\x6e\xb0\xfc\x7c\xc7\x33\x51\x9b\xda\x0c\xf2\xd9\x4b\xd9\x63\xaf\x95\x75\xff\x79\xe1\x34\x61\xd3\x63\x17\x0a\xcc\x6b\x65\xf1\xcf\x01\xfb\xda\x12\xae\xbf\xdc\x90\xb2\x75\x00\x20\x9a\xef\x5e\xe0\x39\x93\x44\x53\xdc\xf2\x9b\x36\x23\x33\x60\x97\x24\xb6\x54\x07\x57\x18\x76\x29\x9d\x70\xe8\xc1\x80\x56\x3c\x7c\xd7\x77\x91\x97\x06\x8d\x3c\x52\xc9\x3e\xca\x00\x4b\xfb\x20\xe8\xb9\x7e\x9a\xf0\x5b\xd3\xdd\xea\xae\xbe\x46\x5b\xc3\xcb\x95\x1f\x4f\xf8\x14\x45\x3a\x21\xc7\x59\x25\xbc\xf5\xd8\xdd\x44\x24\x13\x92\xba\x87\x40\xa6\xc1\x42\x83\x63\x58\xdc\x38\x52\xe5\x7e\x19\x83\x76\xc2\xae\x08\xfd\x91\x61\x32\xe3\x09\xa4\x2c\x45\xd1\x92\x8c\x6c\xdc\xc2\x58\x24\x2c\x07\x3d\x06\x56\x38\x4e\xb2\xdb\xee\x6f\x47\xd8\xa9\x6d\x4d\xde\x9b\x03\x6e\x85\x6e\xc8\x22\xbf\x72\xb2\xee\x07\xe2\x8e\x28\x57\x47\xee\x18\xb9\xe3\x5c\x8b\xdc\xb1\x6a\x91\x3b\x3e\xd0\x22\x77\x8c\xdc\xf1\xbd\x73\x47\xd2\x65\x77\x50\x9e\xff\x4a\x26\x8e\x79\x6d\x19\x39\x6d\x70\xd3\xb5\xd5\x66\xc7\x6f\xae\x3d\xc1\xb9\x41\x55\x5b\x90\x93\x44\x73\x39\x06\xf6\xbc\xff\xfc\xd9\xb3\x6d\x94\x6a\xbf\x91\x1b\x7d\x31\xf2\x9e\x1e\x21\xed\xaf\x7f\xb5\xf6\x8b\x55\xf6\xb7\x0e\xac\xa6\x1e\xc7\x2b\x43\x5e\x4b\x76\x58\x61\xf8\x44\xea\x24\x95\x65\x39\x58\xc6\x6d\xcb\x54\x24\x72\xe8\x55\xae\x02\x44\x78\xef\xa5\x0c\x16\xd8\x94\x29\xe9\xed\x78\x0e\xf8\x83\xdd\x66\x90\x00\x27\x97\xda\x10\xaa\x59\xa8\xdc\x8d\x2a\xa4\x0d\xc7\xc5\x4d\x01\x02\x54\xd8\x11\x0c\xc6\x03\x96\x96\xf8\x19\x97\xde\x6d\x7a\x4c\xb3\x35\x33\x63\x21\x47\x4b\xae\xd2\xf8\x1f\x37\x6d\xab\x67\xee\x65\x98\x82\xb4\x25\xcf\xb2\x19\x83\xa9\x48\x6c\xb5\x3e\xf4\xda\x0a\x4b\xc6\xf6\xcd\x4c\x84\x1b\x89\x0e\x9b\x8b\x0b\xfd\x05\x0c\x36\x0f\x7c\xb3\x0d\xb7\x5f\xe8\x7b\x93\x33\x39\xc7\x0b\x69\x25\x83\x95\xc2\xaa\x75\xfd\x92\x0d\x1c\xff\x89\xc8\xf5\xe6\xed\xc3\x26\x57\xb6\x35\x25\xdb\x82\x7a\xcd\x8b\xa5\x65\x96\x39\xc4\x20\x2b\xec\xe2\x02\x96\x58\x47\x69\x49\x2d\x64\x26\xc3\x3b\x99\x98\xcf\x5e\x5f\x38\xa8\xb8\x77\x6e\x54\xa1\x32\x35\x9e\x35\x21\x4d\xe1\x45\x22\x2f\x82\x71\x9c\x33\x53\x0e\xbd\xd0\xe0\xd0\xef\xf5\xdc\xd6\x44\xcb\x5f\xb4\xfc\x45\xdd\x66\xa1\x45\xdd\xa6\x6a\x51\xb7\x79\xa0\x45\xdd\x26\xea\x36\xd1\xf2\xc7\x22\x77\x5c\x03\x93\xc8\x1d\x59\xe4\x8e\x2b\xd7\x15\xb9\xe3\x5a\xf0\x44\xee\x18\xb9\xe3\xb2\x56\xa8\x74\x8f\x40\xc7\x42\xa5\x6b\xe2\x1c\xc9\xea\x93\xa8\x7e\xa6\x12\x6e\x7d\x5c\xbe\xfb\xc4\xdb\xf9\x0c\xcf\xc9\x10\xd5\x63\xff\x52\x12\x28\x78\xcd\xed\x0d\x9a\x93\x94\x9d\x80\x76\xaf\x1f\x99\xe3\xb5\x81\x4d\x31\x4e\x32\xc6\x49\x3e\xfa\x38\xc9\x09\x37\xb4\xaf\x44\x94\x56\x87\x4d\x36\x0e\xe4\x0d\xe8\xfc\x89\x46\x4d\x3a\x74\xf1\xdb\x8d\x19\x4f\xf5\x96\xd2\xca\x53\xef\x2f\x80\xf4\xaa\xbd\x5e\x2f\x2f\xe3\xa2\x78\x9a\x42\xca\x0a\xd0\x7d\x42\x11\xc5\x46\x42\xa6\x4b\xd6\x1a\xe0\xf3\x51\xa3\x1f\xdb\xeb\xf8\x88\x21\x90\xed\x89\xec\x60\x73\x6d\x1a\x8e\x5b\x14\xfe\x51\x04\x44\x6e\x2b\xd5\xf7\x99\xf5\x46\xde\x6f\x36\x94\xeb\xb7\x17\xcd\x51\xa0\x0e\x26\xe1\xdd\xf5\x4a\x14\xcb\xff\x59\x82\x9e\x61\xfe\x47\x2d\xb0\x56\xb9\x75\xde\x47\x26\x0c\x4b\xb8\x21\x4e\xb1\xad\x6a\xb9\xa5\x1a\xb5\x9b\x9e\xb2\xbb\x25\x9a\xcd\xc3\x65\xbe\x2b\xd2\x49\x83\x0e\x4e\x30\x5b\xaa\x84\x2f\xf1\x02\xd4\xd6\xff\xad\xe6\xb3\xab\xe8\xb6\x93\xe0\xb6\x14\x29\x1e\xb1\x72\xce\x76\x57\xd0\xd9\xce\x4a\x3a\xdb\x49\x51\x67\xbb\x2a\xeb\x6c\x0f\x85\x9d\xed\xa6\xb4\xb3\x79\x54\x70\x3b\xe4\xa5\xac\xf7\xa3\xbf\xb3\x7d\x54\x54\xb6\x87\x1e\xcf\xe6\x97\x5a\xa1\xa9\x7e\x5f\x4a\x3d\xe2\x7a\x4b\xaf\xff\xd0\xc0\xda\x4d\xa7\x67\xf3\xa0\xf2\xca\xb0\x40\x85\xf6\x89\x68\xf8\x1f\x44\xdd\x66\x7b\xa9\xdc\x6c\x77\xb5\x9b\xed\x8e\x19\xc8\xea\x5e\xa2\x3b\x75\x5f\x86\x49\xbd\x10\x8b\xc0\x1c\xdc\x11\xfb\xb7\xe3\x04\xb8\x2f\xff\x61\x05\x17\xda\x38\xf9\xce\xdb\x4c\x9a\xcf\xbc\x76\xde\xec\x26\xa7\x14\x62\x47\xaa\xa7\x3c\x73\xbc\x87\xe2\x38\xbc\x5e\xe4\x7a\x9f\x67\xd3\x3d\x76\x37\x71\xda\xa6\xa3\x52\x55\xbe\xf3\xc1\x2d\xcc\x0e\x7a\x0b\x88\x74\x70\x29\x0f\x88\x47\x2d\xa0\x4e\xc5\xd0\x94\xcc\x66\xec\x00\x9f\x1d\x74\xcd\xd9\x77\x60\x5c\xcd\x12\x2a\xbb\xf2\x85\x1d\xb0\x44\x86\xb2\x2e\xdd\x0b\x9b\xc4\x45\xc8\xb1\x11\x46\x31\x35\x83\xc1\x50\x8b\x06\x73\xa9\xa2\x46\x10\xc7\xf0\xf7\x34\x28\xbf\xa5\xf4\x95\x2e\x42\xce\xb9\xef\x8c\x98\xd4\x62\x48\x93\xdf\x78\x25\xc1\xa0\x60\x07\x95\x89\xa8\xf1\x31\xbe\x3b\xa0\x70\x90\x9a\xdb\xc9\x74\x3e\x40\xa4\xfe\x02\x65\xc4\x1c\xb8\x34\xec\x20\xd8\x9e\x0e\x4d\xfd\xc6\xc1\xa0\xce\xee\xab\x7a\x3c\xfa\xf7\x7f\x8e\x5b\x19\x7d\x75\x87\x51\xd2\x8e\x92\x76\x94\xb4\xb7\xf8\x2a\x4a\xda\xab\x5b\x94\xb4\xb7\x68\x51\xd2\x8e\x92\xf6\xba\x81\xa3\xa4\x1d\x25\xed\x87\x07\xdf\x4d\xd2\xde\x35\x4e\xa8\x29\xf7\x7a\xe7\x1c\x15\x32\xe3\x56\x24\x75\x0c\x51\x78\x8b\xfe\xd5\xad\xbc\xdd\x94\xa5\x97\x4b\xdb\x4d\x89\x7c\x41\xb7\x18\x3c\x20\x5a\x57\xc2\xf7\xc2\x97\xeb\xa5\xee\xc7\x15\x0b\xb5\x03\x6e\x34\x1c\x0a\x3b\x22\xc7\x4d\x70\x85\xfb\xc2\x7f\x43\xa8\xfd\xe4\x29\x3b\x0a\x1e\x97\x63\x07\x7c\xa9\x6c\xfb\xa1\xb4\xa2\x5f\xbf\x51\xf9\x60\xd0\xbd\xd8\xca\xb7\x69\xb9\x25\x2a\xaf\x7b\xe5\x29\xae\xf7\xd3\x91\x10\xd0\xad\x39\x08\xe3\xcb\x1b\x62\xb4\x84\x2e\xa5\x74\xbd\x2a\x19\xdc\xc7\x44\x73\xa8\x1e\x9f\xc7\x3c\x12\x96\x70\x3e\x28\x31\xd5\x50\x6a\xf8\x3b\xb9\xa5\x12\x88\x3e\x94\x5f\x49\xef\x11\x75\xbf\x04\xaf\x6f\x40\x4a\x5c\x91\xa8\x46\x1f\xb0\x17\x88\x87\xcd\x8e\x85\x41\xf8\xf0\x2c\x53\x77\xdb\x90\xa4\x0f\x95\x16\x75\xb7\x75\x5a\xd4\x9c\xff\x2e\x66\x45\xfd\x4c\xb2\xa2\xf0\x21\x1d\xa1\xce\xd3\xa3\xd8\x5f\x7d\x01\x42\x0d\x08\xaa\xbc\xcc\xac\x28\xea\x58\x29\x43\x43\x65\x24\x65\x8e\x7c\xe4\x49\x1b\x2f\xdd\x68\x3c\x99\xcc\xe3\x27\xf6\x87\xb1\x55\x06\x0f\xad\x8f\xee\xe0\x59\xe6\x73\x8a\x82\x48\x4a\x21\x2c\xe2\x63\x47\x26\x5c\xf8\x9a\xad\x95\x36\x83\x44\xe6\xc8\xd1\xc2\xcc\x6d\xa8\xa3\x6a\x6b\x88\x28\x29\x45\x53\x08\xac\x77\x2c\xa6\x20\x6b\x4a\x7a\x64\x8e\x8f\x03\x0f\xef\x94\xc2\xbf\x17\x0a\xfd\xc7\x06\x25\xfd\xf3\x26\x34\x1a\x17\x54\x51\xe9\x1a\x7c\x35\x8d\xfe\x98\x21\x18\xdb\xf8\xf9\xb7\xb3\x31\xec\xe0\xdf\xff\x80\xbe\xfd\xa7\x93\x59\xf6\x91\x2d\x8c\x1f\x23\xb6\xfe\xd1\x5b\x15\x63\x70\x7d\xdd\xf6\x0d\xae\x7f\xef\x96\xc3\x8f\x1b\x63\xff\x04\xac\x85\x1f\x33\xc6\x3e\x5a\x08\xd7\x6e\xca\x63\x0b\x7d\x6f\xb7\x9d\x2c\x82\xd1\x1a\xb8\x33\x17\xde\x92\xe1\xec\x6b\x05\xdc\x12\x23\x76\xf4\xb3\x47\x1f\xfb\x87\xf1\xb1\x47\x89\x77\xc3\x16\x25\xde\x95\x40\x89\x12\x2f\x8b\x12\xef\x43\xcb\x8b\x12\xef\x5a\xf0\x44\x89\x77\xed\xa6\x44\x89\x37\x4a\xbc\xec\xa9\x49\xbc\xbb\x54\xe9\x8a\xbe\xee\xbd\x7c\xdd\xdb\x52\x8b\xad\x68\xc4\x96\x78\xb0\xb5\x6f\x3b\xfa\xb5\x1f\x8b\x5f\x7b\xe3\x84\x7f\x69\xc5\xbe\x49\xff\xcd\xbd\x5a\x95\xf9\xcf\xa7\x4a\xa4\xac\x28\xad\xcf\xa7\x8e\xd9\xff\x5d\x64\xff\xb7\x20\x1f\x4b\x00\x6c\x54\x02\x60\x15\xcc\x62\x1d\x80\x58\x07\xa0\x63\x27\x74\xac\x03\x10\xeb\x00\xc4\x3a\x00\xa1\xc5\xec\x24\x16\xb3\x93\x36\x6a\x31\x3b\x69\x75\x8b\xd9\x49\x8f\xd6\xfa\xca\x62\x76\xd2\xe3\xb6\xc4\xb2\x98\x9d\x14\xad\xb3\x1b\x6e\xd4\x13\xcc\x4e\x8a\x75\x00\x1e\x6b\x8c\x02\x8b\x92\x76\x94\xb4\xa3\xa4\x1d\x25\xed\xf5\x2d\x4a\xda\x5b\xb4\x28\x69\x47\x49\x7b\xdd\xc0\x51\xd2\x8e\x92\xf6\xc3\x83\xc7\x3a\x00\x4f\x28\x36\x82\xc5\x3a\x00\x31\x5e\x22\xd6\x01\xf8\xf9\xd6\x01\x68\xf9\xee\x3f\x5e\x31\x80\xed\xa7\x11\x2b\x02\xc4\x8a\x00\xb1\x22\x40\xac\x08\x10\x5a\xac\x08\x40\xed\x31\xd9\x1a\x63\x7e\xd4\x4a\xa0\xc4\xfc\x28\x16\xf3\xa3\x1e\x5a\xde\x13\xb0\x1b\xc6\xfc\xa8\x47\x68\x2b\x8c\xf9\x51\xd1\x2e\x38\xbf\x39\x4f\x24\x3f\x2a\x56\x04\x78\x8c\xde\xf6\x28\xf1\x6e\xd8\xa2\xc4\xbb\x12\x28\x51\xe2\x65\x51\xe2\x7d\x68\x79\x51\xe2\x5d\x0b\x9e\x28\xf1\xae\xdd\x94\x28\xf1\x46\x89\x97\x3d\x35\x89\x37\x56\x04\x88\x15\x01\x62\x45\x80\xa7\xe8\xe1\x7e\x70\xa7\xe1\xde\x6a\x9e\xd8\x73\x25\x2d\xc8\x95\x7e\xed\xd6\x86\xbe\x68\x7d\xe2\x88\xe4\x48\x8c\x4b\xed\x65\xf0\xf1\xdb\xab\x73\x96\x70\xcb\x33\x35\x66\x57\x0a\x0f\xa9\x1f\xa4\xfa\x39\x07\xcb\x53\x6e\x39\xb9\x24\x71\x43\xb5\x9a\x8a\x14\x0f\x6b\x0a\xf7\x4c\xe4\x7c\x0c\x78\xc0\x4a\x4c\x56\xbf\x83\x2c\xeb\xdf\x4a\x75\x27\xd9\x14\xb4\x69\x1c\xf7\x1f\x55\x91\xff\xc8\x0c\xe8\x29\x65\xd1\xc3\x7d\xe1\x36\x4b\x58\xa2\x18\x61\xc4\x66\xb7\xb5\x2f\xee\x9c\x9e\x5e\x53\x1a\xb9\x30\xf5\x5a\x70\xda\x6e\xec\x2f\x9c\xa8\xf0\x85\x43\xda\xd2\x04\x5c\x1b\x89\x0c\xfa\x43\x6e\x20\x0d\xfd\x1b\x87\x71\x4a\xa7\x34\x87\xd2\x8a\x4c\xfc\x0b\x3c\xd5\x01\x6e\x4b\x0d\xab\xb6\x6b\x03\x3e\xf0\xb0\x92\xd1\x67\x09\x4f\x26\x70\x21\x56\xab\x07\xfd\x30\xd5\xd5\x2f\x6d\xa2\x2f\x84\x71\x36\xae\x1a\x71\xee\x3f\x08\x1a\x41\x2a\x34\x1e\xd1\x19\x33\x56\xe9\x00\xd1\x42\x43\x3f\xe1\x59\x52\x66\x78\x20\xcf\xae\x2e\x69\xa4\x87\xeb\x3e\x3c\x40\xc4\xea\x45\x6f\x31\xe3\xf0\xc9\xfa\x39\x2f\x62\x01\xca\x0b\xa8\xa8\xef\x33\xed\x1c\x72\xa5\x67\x37\x5c\x8f\x61\xb3\xf3\x78\xf0\xaa\xf1\xc5\xfc\x71\xfc\xfc\xeb\x37\xaf\x5e\xbc\x7a\x79\xf9\xea\xf2\xc6\x53\xb0\x91\xd2\x4b\x0f\xaa\x17\x83\x49\x1f\x57\x23\xeb\x27\xc2\x32\x91\x0b\x5b\x7d\x45\x27\xad\xe7\x29\x19\x86\xa3\x94\xd2\x8a\x1c\x28\x98\x82\x5b\xeb\x98\xa5\x3b\x05\x39\x80\xc5\xca\x13\x39\xbf\x05\x47\xba\xd8\xb8\xe4\x9a\x4b\x0b\x81\x38\x0a\x4b\x1f\xa5\x8a\x19\xe5\x05\x7a\xe1\xb5\x7e\x37\x0f\x03\x5e\x76\xbf\x0a\xb1\x1a\x13\x3e\xa5\x12\x07\x23\xe5\xa8\xa0\xdb\x8a\x5c\xa5\x62\x24\x12\x52\xbb\x58\xce\xd3\xca\x0f\xef\xa5\x37\xd0\x15\x49\xaf\x17\x70\xca\xfa\x0b\xe0\x01\x39\x15\x5a\x49\x94\x29\xa7\x5c\x0b\x3e\xcc\xfc\xaa\x86\x64\xa2\xc3\x7e\xeb\x09\x4a\x36\x9c\x59\x30\xbe\x27\x0f\x2d\x5f\x8b\x62\xcd\x77\xef\x24\x01\x9a\xc4\x91\x9a\x29\xba\x37\xc5\x88\x09\x7b\xe8\xd8\x91\x11\x9e\x08\x69\x48\xcb\x24\x2c\x5a\xd9\x42\x0b\x12\x79\x79\xb5\x77\x9e\xf8\x71\xc3\xf2\xd2\x71\x17\xc7\x6d\x8d\x11\xc3\x0c\x7a\x8e\xa7\x8a\xe6\xbb\x43\x70\x70\xc0\x2f\x90\xef\x4d\xc1\xed\xb0\xc3\x1c\x12\x67\x00\x1c\x63\x55\x58\x48\x82\x13\x13\x4d\x61\xc4\xcb\x8c\xf8\x0e\x81\x19\xb7\x6a\xa6\x4a\xdd\x22\xab\x13\xee\x30\x07\x4f\x45\x08\x50\xc1\x33\xdc\x63\x29\x38\xc1\x4d\x48\x47\xc9\xc7\x4a\xa5\x4e\x7e\xd3\xea\x5e\xe4\xd8\x9b\x47\xad\x0a\x3e\xc3\x19\x4b\x55\x39\xcc\xaa\x0d\x73\xa4\xd4\x53\xfb\x82\x27\xb7\x6e\x2c\xec\x98\x71\xcb\x4e\x6c\x5e\x9c\xe0\x5f\xfe\xff\xfd\x1b\x66\xf0\x0f\xa3\x64\x90\x03\x1a\xd3\x1c\xcc\xc1\x5f\x18\x36\x04\x63\xfb\x30\x1a\x29\x6d\xff\xdb\x41\xab\x94\x88\x78\x52\x55\x4b\x0f\x9b\x59\xba\xc3\x8e\x70\x52\x88\x93\xad\x13\xa2\xf4\x92\xc3\xd6\x40\x83\xc1\xc1\x2a\xba\xeb\x0e\x8d\x96\xa7\xec\x7f\x8f\xde\xfd\xf2\xa7\xfe\xf1\x97\x47\x47\xdf\x3f\xeb\xff\xe1\x87\x5f\x1e\xbd\x1b\xe0\x3f\xbe\x38\xfe\xf2\xf8\xa7\xf0\xc7\x2f\x8f\x8f\x8f\x8e\xbe\xff\xe6\xd5\xd7\x37\x57\x2f\x7e\x10\xc7\x3f\x7d\x2f\xcb\xfc\x96\xfe\xfa\xe9\xe8\x7b\x78\xf1\xc3\x86\x9d\x1c\x1f\x7f\xf9\xf9\x8a\x09\x71\x39\x7b\x33\x5a\xc7\x6d\x36\x0b\x28\xeb\x6f\x42\xa2\xef\xfb\xb7\xe5\x10\xb4\x04\x0b\xa6\x2f\xa4\xed\x2b\xdd\xa7\x0f\x4e\x99\xd5\x25\x2c\xfd\xcc\x89\x53\x0f\x59\xe1\x5b\x24\xf2\x75\xe3\x83\x39\x8b\xa3\x2f\xc3\xe2\x0d\x02\x6e\xc8\x8a\xd6\x15\x24\xbd\x8c\xdc\xe6\x06\x61\x70\xc0\xae\x97\x7c\x89\x32\x9f\x7f\xe3\xd0\x90\x74\x68\xe6\xfb\x99\x0b\x32\x23\x1a\x88\x7d\xee\x2e\x1b\x6c\xa7\x11\x3e\xb8\x1f\x85\x16\x4a\x0b\x3b\x3b\xcf\xb8\x31\xaf\x79\x0e\x1b\x41\xf7\x72\x54\x4b\xda\x3d\x77\xd8\x1c\x39\xf6\xfc\x87\xb4\x9f\xd0\x2f\x52\x0e\x27\xc4\x36\xde\x0f\x10\x0a\xef\x54\x67\x26\x9c\x3e\xa5\xd9\xbf\x40\x2b\x5f\x45\x47\x03\x09\xc2\xe1\xf1\x7a\xe0\xad\x59\xab\x81\xa4\xc4\xb5\x3a\xa6\x7d\xef\xc4\xd9\x91\x18\x6f\xc6\x70\xaf\x97\x7d\xca\x12\x2e\xdd\xb4\xb1\x8a\xd2\x88\xfd\x98\xc1\x98\x27\xb3\x1f\xdd\xf4\x7f\xd4\xe0\x26\xe2\x04\xfd\x1f\x49\x2e\x6d\x49\x9e\x87\xbe\x2c\x96\x61\x20\xb0\xea\x95\x90\xff\x20\xad\xa0\x52\x78\x34\x06\x8f\x16\x2a\x1d\x38\xc8\x0d\xe6\xe6\x8e\x34\xa9\x7a\x58\xf1\xbd\xef\xbf\xf8\x61\xe1\x4d\x6f\xdf\xb0\x8a\xf4\x88\x26\x7e\xea\x12\x09\xa6\x23\x6c\x61\x81\xec\x2c\xcd\x05\x9a\x54\xd8\xd1\xd5\xf5\xd9\x71\x6b\x25\x8e\xf5\x12\x8b\x49\x15\x18\x79\x68\x89\xd9\x4d\xc0\xd4\x66\x14\x64\x1b\x18\xc5\x44\xa7\x05\xc3\x98\xc2\x98\x0e\x60\x68\x59\x19\x42\x35\xf8\xf5\x19\xfb\xd1\x09\x55\x99\x90\x40\xb0\x2b\xb4\x98\x8a\x0c\xc6\x6e\xc4\x86\x53\x88\x9d\x97\x5a\x83\xb4\xd9\x2c\x94\x57\x5a\xbe\x2b\xc2\x38\x82\xde\x46\xb7\x80\x59\x95\x4a\x57\x6d\x96\x7b\xdb\x40\x3a\x60\xd7\xf8\xc5\x8c\xec\x7f\xfe\x3d\xdc\x1b\xe4\x8b\xab\x36\x97\x69\x30\xae\x63\x21\xe9\x2b\x91\x12\x8b\x03\xad\x95\xf6\x21\x97\xa4\x47\xa8\xcc\x29\x0b\x95\x7a\xe2\x58\x93\x09\x52\x55\x82\x22\x81\x8f\x4b\xf5\x80\x59\x02\xf8\xd5\x6b\x6e\x0b\x15\x56\x55\xf3\x45\xee\x77\xe9\x26\x37\x2a\x9d\x56\x52\x69\x53\x78\xe6\x9a\xa0\x99\x93\x5f\x9a\xc3\xf7\x6a\x3d\x8e\x0b\x8f\x6a\x26\x8c\xa9\x61\x58\x8a\x0c\x4d\x2c\x42\xd7\xea\x11\x22\x32\x6f\x2a\x6f\xaa\xc8\x7d\x6d\xb3\xb2\x28\x94\xb6\xb5\xe2\x9d\xb4\xb4\x32\x52\x8c\x97\x00\xc0\x4d\xab\xd0\x50\x70\x5d\x51\x6c\x03\x2c\x99\x70\xe9\xd8\xbf\x5b\xe8\x2b\x85\x71\xa8\x14\xcc\xec\x86\xe5\x43\x55\x5a\xc4\x31\x7f\x56\x47\xaa\x94\x29\x73\x44\xe5\x94\x4d\xac\x2d\xcc\xe9\xc9\x49\xcd\x8f\x06\x42\x9d\xa4\x2a\x31\x27\x89\x92\x09\x14\xd6\x9c\x84\xd3\x74\x52\xa8\xb4\x1f\xfe\xe8\xf3\x70\x48\x4e\x0e\x57\xf1\xf8\x0d\x38\xa1\x87\xfc\x29\xa3\xbd\x5a\xf1\x16\xc8\x72\x4d\x25\xa7\xfe\xfa\x8f\xdd\x0b\x35\x18\x97\xbe\x64\x55\x86\x75\xcf\xd6\xb8\x37\xdb\xd6\x9d\xfa\xfd\xaa\xfe\x58\x25\x98\x36\xa8\xdb\xa1\x69\x76\xbd\x9e\x68\xaf\xb3\x7a\x3d\x60\xe7\x5a\xa8\x3d\x86\xb4\xcd\x89\x7b\xf5\x44\x51\x00\xb0\x96\x63\xf5\x31\x27\x9b\xd3\x13\x47\xae\xe4\x8c\x39\x7c\xb6\xbe\x14\x5d\xa3\x36\x9b\xd5\x18\x1c\xfd\xc7\xca\x54\xdd\x83\xd1\x08\x12\xfb\xe7\x86\x5d\xa0\x32\x48\x55\xe6\xe5\x3f\x86\x7f\xfd\x79\xb5\x4a\xb8\x91\x25\x78\x33\x5f\x1e\x4d\x69\xbd\x8d\xae\x6d\xca\xc1\x0f\xe6\x58\x36\x41\x80\xfa\x42\x45\x0e\xbd\x1d\xde\x20\x45\x96\x4d\x2f\xef\x38\x9a\xd1\x78\xd9\x78\x0a\xd7\xa0\xb6\xde\x58\x55\x9b\xd5\x81\xbd\x56\x3e\x4b\x00\x7a\xec\x0a\x0b\xb7\xd5\xbf\x20\x23\x7b\xad\x28\x5f\x60\xad\xf6\xbf\xb1\x11\xf3\x41\x6f\x66\x0b\x20\xdf\xd4\xbe\x4b\x5a\x59\xcb\x77\x59\x63\x70\xcb\x34\xbd\x0e\x32\xb7\x30\xab\xfd\x5d\xde\x33\x8a\xe6\xe4\x5e\x8d\x25\x41\xf8\x24\xf7\xd5\x7f\xfb\x80\x5f\x95\x0f\x85\xa4\xc1\xa8\xeb\xb0\x15\xd8\x7b\x00\xa8\x4c\xf1\x4f\x1c\xa6\x0b\x70\x6d\xe6\x22\x6d\xc1\xec\xcd\x16\x0e\xd1\xca\xc5\xb2\xdc\x15\xda\xf0\x7f\xbe\xf8\x67\xc9\xb3\x01\xbb\x20\xaa\x88\xab\xf7\x3f\xf9\x97\x16\x5c\x42\x77\x22\x4b\x13\xae\x53\xe4\x06\x74\x46\x99\x51\xb4\x7b\xbc\x12\x38\xc2\x69\xaf\xf7\x88\x0a\x13\xb2\x82\x6b\x2b\x92\x32\xe3\xc8\xb6\x60\xac\xf4\xac\x13\x88\xd6\x48\x73\x0d\x89\x92\xe9\x03\x56\xfa\x15\xd4\xd5\x7f\xdb\x84\x31\x8a\x51\xa0\x85\x8f\xbf\x17\x39\xcc\x23\xe9\x51\x5b\xb9\x51\xa3\x70\xaa\xab\x23\xd6\x23\xa9\xe6\x4e\x18\x68\x3a\x49\x84\x61\x82\x12\x78\x8e\x1b\xe4\xb1\x3a\x15\x03\xf6\x3f\xb3\xc0\xaf\x7a\x4c\xd8\x60\x9a\x46\xbd\xd9\x8f\xe9\x51\xd6\x03\xbb\x3e\x50\x23\xa5\x61\x0a\x9a\x1d\xa5\x0a\xbf\xc1\x1c\x95\xe3\x01\xfb\xbf\x4e\xc4\x27\x1b\xc4\x98\xd2\x29\x3c\x8a\x07\x49\xc4\x62\x25\x51\x34\xd1\x3f\x63\x47\x94\xda\x22\xf2\x1c\x52\xc1\x2d\x64\xb3\x63\x8a\x6e\x0a\xc9\x31\x9b\x6c\xdd\x26\x19\x51\x8d\x4c\xa8\xdf\xfd\x66\xcd\x9b\x38\xd9\x2d\x76\xf6\xbb\x60\xe4\xaa\x21\x43\x52\xe6\xdc\x16\x56\x3c\x48\xad\xf1\x78\x37\x3c\xdc\x0d\xd9\x2f\x90\x99\x6a\x83\xff\xe1\xf0\x80\x33\x0d\x63\xc4\x72\xc2\xdc\x3d\x70\x5c\x24\xcb\x33\xba\x1e\xe0\x68\xeb\xed\xd9\x7d\xe6\xc4\xff\xdf\xfd\x26\xe5\x96\xaf\x78\x81\xf6\x7c\x56\x2c\x33\x0e\x3c\xc4\x28\xeb\xce\x57\x6d\xd6\x06\x06\x5a\x3f\xfc\x4e\x3d\xa0\xa8\xbf\xec\xcb\xb6\x4a\x8d\x26\x35\x0a\xa2\x08\xfb\xdd\xd7\x30\x16\xc6\xea\x59\xc3\xb2\xe9\x3d\x1a\x8a\x09\x69\x2c\x97\x56\x20\x65\x63\xe1\xcd\xbe\xb7\x0d\x3a\xf1\x7b\xc0\xde\x38\x5d\x0b\x6d\x58\x77\x8e\x4d\x93\x80\x7d\x33\x2b\x80\xfd\xa9\xf1\xc7\xd7\xba\x48\x10\xd7\x3c\xa1\x21\xe4\xe2\x69\xaa\xc1\x2c\xd2\x87\x65\xe8\xb3\x76\xfd\x41\xcd\x7f\x10\x04\x87\x57\xc1\x20\xe0\x1d\xb7\xc6\x88\xb1\x93\x32\x43\x2a\x65\x30\xf3\xb6\xa4\x4d\xd2\x0a\xf0\x43\x72\xc1\x40\x5e\x31\x01\x61\x83\xdc\x9f\x28\x69\xca\x3c\x44\x44\x3a\xad\xa7\x00\x99\x82\x4c\x66\x98\x7b\x93\x4d\x41\x0f\xd8\xb7\xc6\xed\x14\xfb\x8b\x18\x3b\xbd\xcf\x0f\xda\x14\x95\x82\x1b\x69\x6e\x06\xc2\x34\x0a\xd2\x62\x8c\xa7\x93\x81\x42\x0f\x0d\x77\x81\x4f\xf2\x09\x71\x26\xf3\x93\x28\xc9\xd6\x7a\x53\xa5\x7c\x06\x23\x68\x80\x0b\x1d\x78\xb7\xa4\xb1\x22\x57\x5a\xa1\x8c\x08\xa9\x68\x15\x1d\x6d\xa5\x8d\xaa\x11\x25\x75\x52\xbf\x6d\x45\x18\x03\x96\xe6\x16\x83\x8a\x5b\x29\x09\xf8\xd0\xb4\xd2\x04\x32\xf3\xac\xed\x69\x6b\x7e\x67\x43\x95\xef\xf6\x94\x6b\x9a\xae\xb9\xbc\x85\x94\x65\x70\x2f\x12\x35\xd6\xbc\x98\x88\x04\x33\x17\xc9\xaf\xe2\x64\x75\x4b\xbe\xf3\xc1\xe1\x4a\x44\x5b\x45\xc6\x8b\x72\x98\x09\x33\x81\xa5\xb2\xcc\x5a\x1c\x35\x90\x68\xb0\x4b\x29\x48\x0b\x45\xaf\xe9\xbd\x9a\x29\x87\x70\x2f\xdf\x81\x0f\x67\x24\x9c\xc3\x83\xe7\x40\x9c\x24\xee\x20\x05\x0f\x45\x5d\x4d\xba\x82\xe1\x80\x5d\xda\x60\x98\x76\x5f\xdc\x02\x14\x84\x69\x18\x77\x60\x72\xb4\xa9\x18\x21\x13\xa0\xfc\x4b\xca\x63\x05\x08\x66\x46\xab\x05\x90\x18\x04\x68\xe0\x0f\x7b\x03\xd2\x2e\x17\x6a\xd6\xeb\x5d\x6b\x74\xae\xf5\x60\xac\x68\xca\xc3\x90\xac\x69\x51\xe0\x89\xee\xdf\x0e\x94\xf8\x64\xdb\x1d\xa4\x74\xd9\x6b\x8a\xdb\x7a\x98\xd6\x7c\xdb\x7a\xdd\x47\x03\x18\x36\x51\x77\xbe\xa7\xf9\x43\xeb\x2d\x36\x61\x6f\x53\x61\x12\x77\xd2\x21\x65\xe7\x4a\x9a\x90\x33\xcb\x25\xa5\xc1\x4e\x79\x46\xa8\x10\x3a\x2e\x54\x86\xfe\x8d\xb4\x0c\xea\x04\x85\xb6\x42\x3e\x04\xac\x75\x6d\xc2\x54\x56\xb0\xb9\x07\x58\xec\x43\x5c\x30\xf0\x87\x2b\x95\x65\xeb\xb9\xd8\x5a\xbd\x74\x13\xad\x34\x00\x60\x63\xff\xeb\x65\x80\x98\xb7\xc5\x39\x9c\xae\x3d\x48\x88\x1a\x4e\xd4\xad\x00\x3b\x04\x7b\x07\x20\x59\x32\x81\xe4\xd6\xd4\x01\x1a\x58\x75\x7e\x6e\xd7\xbc\xfd\xa9\x4d\xb1\x2a\x79\xca\xed\x0a\x2a\x1a\x06\x80\xdc\x66\x12\xee\xe6\x03\x0e\x16\x89\x3d\x9f\x72\x91\xf1\x61\x46\xb9\xe2\xd5\x5f\xbd\xe6\x3c\x44\xe0\xe7\x45\x99\x65\xde\x89\x84\x0e\x58\xab\xf9\x68\x24\x12\x8c\x41\x41\x37\x73\x1d\xd6\xb4\x74\x09\x3b\xb9\x96\x8d\xe5\xb6\x5c\xd8\xa3\x35\x1b\xbc\x6e\x63\x9d\x1e\x22\x56\x1a\x88\xe6\xea\x87\xb7\x94\x15\x37\x0d\x20\x65\xab\x65\xff\x1e\xb0\xd7\xca\xfa\xb8\x8c\x57\x60\x4c\x88\xfd\x78\x0b\xdc\x28\xd9\xa0\xae\x28\xfd\x6a\x31\x16\x92\x67\x7e\x51\x4d\xfb\x5e\xa5\x7b\x70\x34\x29\xe7\x62\xac\xb9\xad\x88\x62\x3d\x6f\xcf\x5d\x3c\x5f\x24\x4b\xe8\x80\x9d\xc9\x19\xee\xb7\x0f\xd8\x70\x3d\x5b\xad\xd2\x32\x01\xef\x7c\x2e\x4d\xb3\x93\x4e\xc9\x68\xdb\xbd\x70\x1e\x06\xa9\x03\x10\x53\xb0\x5c\x78\x97\x92\x92\xc0\xb8\x29\x9c\x1e\x17\x70\x92\x4c\xe1\x35\x80\x91\x59\x9c\x5d\x5d\xb2\xb7\x3e\x93\x78\xc0\xfa\xfd\x3e\xf9\x3d\x8d\xd5\x65\x82\xfc\xc5\x1d\x21\x99\x7a\x4e\x41\xd8\x47\xf1\x36\x8d\xd8\x5d\x6f\xf9\x20\x11\xac\xe0\x76\xc2\x06\x04\xf8\x41\x03\x14\x8c\x7d\xe5\x78\xcd\x3d\xcf\x0b\x87\xf7\xef\x24\x51\xef\xaf\x94\xba\xa6\x4d\xa2\x31\xff\xcd\x4e\x4e\xe6\x71\x42\x0d\x9d\x88\xea\x0d\x88\x88\x1a\x23\xa5\x0e\x4d\x7b\x49\x03\xf7\xe1\x37\x18\xfe\xb3\x64\x74\x1c\x8b\x6b\x38\x65\xef\x0e\xce\xc2\xe9\x7b\x77\xd0\x63\xef\x0e\xae\xb4\x1a\x63\x4c\xa8\x1c\xbf\xf3\x41\x9e\xef\x0e\x2e\x60\xac\x79\x0a\xe9\xbb\x03\xd7\xed\x2f\x31\x98\xf7\x15\xe8\x31\x7c\x03\xb3\x3f\x61\x67\xd5\xcf\x81\x23\xfc\x89\xe2\x7e\xdd\xef\x8e\x05\x3b\x3e\xf5\xa7\x9c\x17\xd5\x0f\xaf\x78\x51\x7d\x7c\x5e\xe3\xd9\xf7\x3f\xe4\x60\xf9\xf4\xf9\xa0\xde\xd1\x1f\xff\x61\x94\x3c\x7d\x77\x50\xcf\xbf\xa7\x72\x81\x41\x13\xb3\x77\x07\xac\x35\xea\xe9\xbb\x03\x1c\x37\xfc\x1e\x26\x79\xfa\xee\xc0\x8d\xe4\x7e\xd6\xca\xaa\x61\x39\x3a\x7d\x77\x80\xb1\x08\xbd\xe7\x3d\x0d\x45\xcf\x09\x4c\x7f\xaa\x47\x78\x77\xf0\xa3\xdb\x93\x93\x13\xef\xc2\xf0\x37\x2b\xfc\x67\xb9\xb1\xfa\x41\xba\xff\x50\x3c\x52\x9f\x65\xdc\xd8\x1b\xcd\xa5\xc1\xf1\x6f\x44\xbe\xdc\x8d\x4b\xba\x1c\x9e\xf7\x95\xcf\x35\xd2\x80\x95\x8f\x09\x1b\x56\x3e\x5e\xc1\x3d\x37\xe1\x5c\x8b\x6b\xd8\xd0\xea\xbc\xf8\x61\x9d\x0d\xe1\xe4\xb9\x60\xa7\xa9\xf6\xc7\xf1\x00\xff\x36\xf8\x2a\x1d\xee\x88\x7b\xfa\x86\xb1\xce\xb8\x6f\x3e\x40\xa7\x56\xf0\xef\x7c\x05\x0f\x56\xca\x14\x74\x86\xce\xaa\xba\x57\xf2\x84\xa4\x03\x46\x76\x03\x5e\x59\x69\x30\x8e\x0e\xb9\x93\x6c\x18\xaf\x29\x86\x27\xf4\xe8\x68\x87\x2f\x62\x42\xdd\x20\xa3\x4b\x12\x28\x2c\x72\xba\xdd\x5d\xcc\xac\x61\x54\x71\x92\x55\xdf\xae\x46\x0f\x8f\x1c\x1b\x02\xde\xbf\x4d\xfe\xfd\x49\x99\x73\xc7\x3a\x78\x8a\x61\x3c\xd5\x33\x52\xdf\x48\xdd\x22\x92\x4a\x4e\x21\xb2\xf1\x87\x7d\xf0\xa0\xf6\x8c\x84\x57\xd9\x6a\x0f\x58\x4c\x36\x5a\x7c\xce\xef\x5f\x82\x1c\xdb\xc9\x29\xfb\xf5\xaf\xfe\xcf\xef\x7e\xbf\xe2\x45\x22\x8c\x90\x7e\x0d\xd2\xdb\x82\x36\x04\xc3\xe2\x87\xf3\x46\xc3\x41\x88\xbf\x1c\x8c\xeb\x77\x2a\x23\x77\x8d\x41\x77\x1c\x63\xb0\x3c\xbb\x2c\x0b\x07\x97\xaf\x30\xba\xd6\x58\x2e\x13\xe8\x39\x21\x69\x69\x67\xa2\x22\xe0\xd9\x8c\x3d\xff\x15\xdd\x40\x84\x43\x2f\x90\xef\xef\xef\x7f\x18\x2c\x99\xb2\x30\xec\x0f\xbd\xb9\xf9\x08\xc3\xdc\x56\xa9\x11\x22\x0e\xa9\x98\x1a\x88\x13\x06\x63\xc0\x22\x27\x84\x6a\xbe\x0f\x6d\xdc\x43\xf6\xc0\xcd\x6c\x81\xb9\x90\x22\x2f\xf3\x53\xf6\x6c\x65\x3c\xa7\x23\x69\x1b\xee\x26\xbd\x5c\x0b\x02\xdc\x91\xae\xb1\xe6\x79\x8e\x71\xf4\x22\x05\x69\xc5\x48\x60\xd0\x40\x85\xda\xa8\xee\xd3\x87\x21\x06\xa5\x82\x22\x86\xa7\x38\x3a\xd4\x40\xf6\x2b\x92\x73\x34\x72\x60\xef\xbd\x49\x9a\x04\x6a\x56\x00\x9d\x06\x52\x60\x18\xdc\x17\x24\xaa\x36\xdc\x10\x39\x70\x29\xe4\xd8\xd4\xf1\x5c\xfe\xf6\x29\xf7\xf0\x6e\x02\xde\x7b\x0e\x4d\x5f\x50\xe2\x94\xa5\x14\xf5\x26\x5e\x87\x07\x62\x00\x28\xc9\xe8\xf3\x36\x4d\x27\x39\xe6\x90\x9d\x73\x03\xe1\x34\x36\xa3\xb9\x42\x29\xa4\x2a\xb5\xa7\xb3\xa3\xfa\xfc\xd9\xaf\xd6\x6e\x79\xf5\xde\x6a\x17\x5e\x15\xe6\xf5\xfd\x59\xff\xff\xf2\xfe\xbf\x7e\x38\xf2\xff\x78\xd6\xff\xc3\xdf\x7b\xa7\x3f\x7c\xd1\xf8\xf3\x87\xd5\xd1\x59\xcb\x85\xf9\x15\xe8\xe3\x99\x48\x90\x13\xc3\x8e\xf6\x42\x94\xca\x8d\x2e\xa1\xc7\xbe\xe2\x99\x81\x1e\xfb\x56\x22\x6b\xd8\x13\x68\xeb\x3d\xd4\x8e\x2b\x1f\xb8\x51\x57\x79\xca\xfd\x2b\x38\xa5\xf5\xef\xf8\xe9\xae\x53\x5f\x37\x03\x52\x30\x35\x34\x28\x8d\x6c\xe0\x19\xe5\x13\x8c\x94\x1a\x78\x09\x77\x90\xa8\xfc\xa4\x7a\x4e\xa2\xf5\x2b\x2e\x67\xac\x26\x6b\x24\x94\xce\x63\xba\xc1\x80\x79\x9e\x68\x65\x4c\x5d\xe4\x87\x65\xe2\x16\xd8\x59\xad\x37\x3a\x62\x39\x84\x84\xa3\x2c\xae\x87\xc2\x6a\x4e\x46\xdf\x20\x57\xd6\x16\xa5\x51\x99\xb1\x23\xa7\xae\x0e\x30\x90\x6c\x81\xba\xfa\x82\x61\x7c\x28\x32\xbc\xb7\xc9\xa9\xd2\x89\x92\xa3\x4c\x78\x15\x20\x2f\x94\xb6\x5c\xda\x90\xd5\x34\x86\x7b\xba\x2a\x8e\xdc\x0e\xc2\xb0\xa3\x54\x9a\xe7\xcf\x7f\xf5\xeb\xeb\x72\x98\xaa\x9c\x0b\xf9\x55\x6e\x4f\x8e\xbf\x3c\xfa\x67\xc9\x33\xf4\xf2\xbe\xe6\x39\x7c\x95\xdb\xd5\x97\x6e\x6d\xcd\x16\x9f\xff\x6e\x83\x53\x74\xf4\x3d\x9d\x95\x1f\x8e\xbe\xef\xfb\x7f\x7d\x11\x7e\x3a\xfe\xf2\xe8\xdd\x60\xed\xf3\xe3\x2f\x4e\x30\x46\xb2\x3a\x72\x3f\x7c\xdf\xaf\x8f\xdf\xe0\x87\x2f\x8e\xbf\x6c\x3c\x3b\x5e\x76\x18\x5b\xa1\x8b\x4e\x0b\xe8\xe7\xbc\xe8\xdf\xc2\x6c\xc5\xe1\x5c\x29\x8e\x2e\x76\x44\x10\xcb\x79\xb1\x4c\xfb\x1e\x89\xf1\x2b\x5e\xbc\x85\x11\x68\x90\xc9\x52\x24\xdf\xd3\x03\xe3\xf4\x87\x35\x8f\x30\x02\x6b\x07\xab\x93\xe3\x3b\x64\x69\x5b\x27\x4e\x6f\x80\x2d\x9b\xc9\x8f\x72\x4d\xfc\xe2\x83\x83\x54\xeb\xdc\xb9\x87\x70\xbe\xbf\x23\xfb\xd1\xce\xfd\x94\x62\xa5\xa6\xd5\xb6\x61\x5e\x5e\x90\xe8\x8b\xa4\x07\xc5\xb9\x89\x72\x7a\x5e\x29\xc5\x3f\x4b\x60\x97\x17\x55\x3e\xbd\x90\x49\x56\x62\x05\xbf\x6f\xbf\xbd\xbc\x70\xfa\xfb\xff\x78\x72\x73\x07\x2c\x55\xf2\xd0\xb2\x37\xaf\x5f\xfe\x0d\x8d\x01\xf8\x46\x8f\x18\xba\x4f\xea\xcd\x04\x27\x33\x99\x67\xc0\xec\x7f\x80\xe2\xe4\x70\xe4\x84\x17\x95\xfd\x04\xc9\x1d\x46\x58\x65\x85\xc1\x44\x00\x66\x4a\xed\x67\xe7\x3a\x26\x8f\x2f\xa6\xfe\x79\x7f\x70\xc8\x61\xc0\x4c\x90\x9d\x82\x3b\x13\x25\x25\x24\xe8\x34\x77\x52\xe0\x7b\x38\x1f\x0e\x91\xdf\x78\x99\x15\xc7\xd8\xe1\x30\x78\x87\xda\xce\x68\xe1\xe6\x70\x4e\x2b\x7d\xef\x27\x69\x61\xbd\x3b\x8d\x48\xf6\x4c\xf4\x6c\xbe\x7d\xc0\xfe\xbc\x10\xc6\xd5\x56\x9d\xe7\xf2\xb6\xd0\xb6\x5a\x39\x47\x27\xdc\xb0\x21\x80\x44\x73\x2e\x59\xff\x40\x7a\xac\x83\xda\x10\x5b\x16\x7d\xab\xfa\xe9\xf2\xcd\x7b\x00\x72\x0f\x43\x6d\x8d\xe6\x3a\x57\x1a\x63\x5b\x45\xf5\x6e\x32\x5b\x06\x03\x53\x57\x0a\xac\x64\x90\x6d\x17\xb6\x5a\x31\x99\xb3\xea\xa2\x66\xe1\x8d\x1a\x5e\xcf\x58\x9c\x92\xd3\x1e\x5b\x96\x0d\xab\xd0\x9b\xd7\xb6\xec\x6d\x3f\x47\xda\xe6\x6b\xd0\x53\xb1\x13\xf3\x7b\xe8\x60\x26\x14\x67\x72\xf6\xfe\x8f\x95\x13\xbd\x76\x1e\x04\x4d\x7f\x89\x7a\xc0\x7d\xb3\x36\xfe\x1d\x21\xb8\x2e\xca\x7f\x9b\x3e\xb6\x65\x96\x44\x4d\x5a\x49\x1e\xc6\x2a\x8d\x2e\xf7\xe6\x6f\xe5\xb0\x12\x94\xeb\xde\xbd\x0e\xc4\xfe\xfd\x9f\xcf\x3e\xeb\xf7\xfb\x9f\xf1\x42\x04\x36\xcb\x78\x21\xe0\xde\x82\xa4\x4b\x8b\x6f\x7f\x8f\x61\xbc\xd3\xe7\x9f\xdd\x0a\x99\x9e\xb2\xf3\xd2\x58\x95\x07\xb3\x38\x56\x7e\x45\xfc\xfc\x2c\x98\x31\xdc\x20\x5c\x4a\x65\x9b\x41\xb0\x4e\xfd\xd6\x8e\x9c\xe8\xfe\x18\xe4\xc0\x89\x6b\x18\xe6\x0c\x1a\x3b\x0f\x43\x4f\x9f\x0d\xfe\x30\x70\x6a\x3f\xe2\x90\xb7\xfe\x19\xcb\xf3\xe2\x14\x33\xc5\x3f\xf3\x42\x09\x4b\xb2\xd2\x60\x79\x5c\x04\x9f\xff\xde\x0c\xaa\x60\xb8\x41\xa2\x34\x28\xf7\x9f\xfc\x33\xa7\x8f\xbb\x59\x8c\xb5\x2a\x8b\xba\xfc\x48\xeb\x1d\x2f\xaf\xf8\xc9\x52\xf4\x5a\x03\xc1\xfb\x4c\x65\x74\x11\xad\x07\x02\x0d\xef\xcf\x90\x87\x1c\x3e\x77\xd2\xe7\x37\xab\xdf\x79\x29\x0c\x1d\xa9\x22\x2b\x35\xcf\x56\x2d\x04\x5f\x31\x13\xa5\xed\xeb\x7a\x5a\x98\x83\x6a\xa6\xcd\x7f\xfb\x17\x85\xc4\x80\xa4\x15\xbd\x7d\xc6\x98\x49\x94\xc3\x9f\x0a\xcd\xd2\xcf\x58\x70\xcb\xf9\xce\xfb\xad\x4c\x18\xf4\x0d\x9e\xab\xac\xcc\x9b\x4e\xaa\xfe\x22\x5b\x71\x50\x0b\xca\xf1\xf9\xf5\x77\x0d\xec\xfd\x87\x51\xf2\x8a\x3b\x6d\x84\x92\x2a\x52\x61\x8a\x8c\xcf\x5e\xb7\x25\x63\xda\xcd\x0b\x7a\xf6\xd9\x03\x07\x67\xc9\xf8\x73\xbe\xc5\xf5\x53\x98\x36\xf6\xa9\x39\xfc\x77\x0b\xbf\x6f\x3a\x7c\x58\x3e\x77\x23\x37\x02\x5a\x94\x84\x50\x05\xc5\xac\x99\xd0\x92\x57\x68\x46\x6f\x17\x1f\xac\x98\x52\xb3\x4b\xd2\x5d\x8b\x09\x37\x8b\x20\xbe\x9a\xfb\x75\x49\x77\xf4\xe2\xf4\x39\xcf\x8a\x09\x0f\x66\x18\x93\x4c\x20\x6f\x84\x7a\xa9\x02\xe4\xd9\xd5\xe5\x77\xbf\xbe\x9e\x7b\x30\x9f\x04\xbc\x0c\xfb\x49\xbc\x26\x0a\x52\x79\xd6\x70\xef\x9c\xdc\xfb\xe3\xd2\x6f\xae\x0b\x48\x7e\x1c\x2c\xcc\x7c\x81\x3b\x2d\x17\x39\xfb\x55\xaa\xfc\xdc\xcf\x0e\xfe\x8d\x9f\x56\xf1\xb4\x06\x5d\x9c\xa3\xcc\xed\x50\x2b\x07\x12\xbf\xc6\x10\xa2\x60\x6b\xf4\x84\xd4\xc3\xb1\x72\x2d\x56\x06\x65\x32\xd6\x52\xa8\x03\xad\x69\xc0\xae\x31\xe6\xac\x72\x54\x24\x4a\x4e\x41\x5b\xa6\x21\x51\x63\x29\xfe\x55\xf5\x66\xe6\x1c\xdd\x78\x6a\x25\xcf\x42\xec\x2e\x1a\x15\xf9\x8c\x69\xf8\x07\x7a\x26\x65\xa3\x87\x50\x48\xa8\x4a\xf1\xa8\xf3\x37\xc6\xc2\x06\xaa\x9f\xa8\x3c\x2f\xa5\xb0\xb3\x13\x24\xe0\x62\x58\x3a\xc2\x79\x92\xc2\x14\xb2\x13\x23\xc6\x7d\xae\x93\x89\xb0\x90\x38\x85\xe5\x84\x17\xa2\x8f\x93\x95\xe4\x57\xcc\xd3\x5f\x54\xac\x67\x3e\xfa\x68\x25\x67\x44\x02\xbb\x16\xd6\x8e\xbc\xfa\x1c\xc4\x46\x51\xa4\x1a\xa4\xc1\x80\xfb\xf6\xc5\xf5\x4d\xa5\x44\xfa\x73\x89\x10\x6e\x98\xf3\x6b\x60\x3b\x40\x09\x39\x82\x60\x7a\x0d\x85\x15\x40\xa6\x54\x6e\x1e\xed\x7f\x99\x40\xc9\xab\x1c\xe6\x02\xc3\x96\x30\x57\x99\x82\x4b\xcf\x91\xe9\xa1\x59\x89\x22\x5e\x06\xec\xb2\x61\x05\x7b\xef\xa0\x46\x1b\x73\xdf\x81\x6f\x73\x60\x37\x79\xf6\xe2\x07\x4b\x24\xc0\xc0\x4b\x57\xee\xce\xca\x33\xcc\x52\x48\x32\x1e\x32\x5d\x2c\x64\x19\x7b\xf3\xf2\x15\x46\x08\x85\xe8\xcb\x2c\x5b\xac\x4e\x97\x70\xc9\x72\x2e\x31\xa2\xa1\x28\xc8\x36\xce\x7d\x85\xf8\x10\x8c\xb2\xe9\xe4\xd7\xe9\xa5\x7d\xb6\x9c\x41\x85\xa7\x7e\x82\x73\x4f\xd6\x89\xc2\x0b\x32\xd0\x1a\xa8\x9d\xd5\xef\x7a\x1b\x41\x29\xc9\xe5\x8f\xa5\x34\x6e\x21\xc4\x2a\xe6\xbc\x40\x29\x2f\xa4\x36\xf2\x26\x82\x63\xc6\xcd\x2c\x24\x9d\x0d\x67\xcc\x89\x71\x48\x10\xac\x52\x3e\x30\xc7\x7d\x8b\x84\x41\x83\xd5\x02\xa6\x4d\x03\x69\xe5\x88\xda\x5e\x27\xd8\x3c\x8d\x76\xad\x48\xcc\x0b\xe1\x65\x97\xb4\x12\x2c\x37\x80\xde\xd5\xa5\xc7\xb7\x5a\x1c\x35\x1e\xdf\x7c\x31\x4c\x2f\x1f\x54\x72\x2d\x8e\xe4\x11\x2b\x65\x75\x45\x45\x0c\x68\x6d\x22\x21\xe5\xfb\x6b\x2e\xdd\x83\xa5\xc8\xbd\x03\xb4\x1e\xd2\xa0\xd4\x9d\x5c\x1d\x1d\xd0\x6d\x8a\x57\x13\x76\xd5\xcf\xa1\x9a\x4c\x1d\x36\x63\x15\x9e\x56\xd2\xa0\x11\x76\x55\xc1\x99\xa9\xe0\x8c\x8f\xc7\x1a\xa3\x65\x57\x46\x1a\x6c\x98\xa6\xb5\x49\x3d\xc8\x3e\x49\xf2\x6b\xdf\x70\x64\x70\xed\x0b\x2b\x2d\xb4\xe1\x85\x45\x61\xb1\xdd\x36\x4b\x28\xe3\x68\x46\x0b\xa0\x55\xfa\x81\xdc\x95\x4d\x8b\x56\x6d\x54\xac\xaa\xbd\xcf\x73\x13\xf1\x4f\x87\x58\x53\xac\x22\xcd\x8e\x1c\x24\xb5\x37\xdb\xbb\x49\x0a\xd0\x4e\x1f\xa7\x78\x62\xce\x12\x92\xdf\x2a\xc2\x13\xbc\xc3\x0f\x4c\x67\x8b\x82\x6d\x9b\x57\x05\xed\x63\x48\xd5\x03\xaf\x6d\x53\xc7\xb3\x09\xb4\x07\x5f\xde\xb2\x10\x58\x83\xc3\x74\xde\xb7\x03\x43\xe7\x9d\x6e\x90\x93\x43\xad\x6d\xde\xe2\x77\xaf\x9a\x91\x24\x9a\xdf\x31\x90\x89\x72\xc4\xe2\xff\xbd\x7e\xf3\x3a\xe4\xaf\x5d\x5a\x26\xf2\xc2\x5f\x96\xc3\x5e\x71\x6d\x26\x3c\x03\xaa\x8d\xfc\xad\xcc\x5b\x7f\xcf\x85\x80\xa7\x90\xf1\x19\x75\x96\x42\xa2\xd0\x12\xaf\x34\x2b\x9c\x80\x9b\x17\x25\xa6\x70\xe0\x53\x1c\xf7\xc1\x24\x9d\x1d\x40\x53\x9b\xa8\x86\xb3\xa5\x16\xd0\x76\xbb\xef\xa7\x9b\xd2\x80\xe6\x64\x36\x2d\x5f\xb7\x45\xf1\xba\x0d\x57\x59\x65\xc8\x5c\xad\xb1\xb1\x35\x7b\xdc\x32\x17\x6c\xed\xad\x58\x29\x14\x99\x9a\x39\xbc\x78\xf8\xac\x6c\xb8\x9e\x8d\xcf\xf5\xa6\xfd\x6d\x7a\x96\x37\xec\x8f\x8c\x53\x5d\xf4\xb4\x4c\x81\xda\xa9\xa3\x75\xee\xbf\xad\x3a\x5a\x62\x7f\x5c\xdd\xdb\x7b\x61\x7e\x57\x97\xc1\xda\x50\x79\x7d\x3d\x6d\xaa\xfe\xc4\xdc\x9d\x6f\x2a\x37\x72\x43\xae\xae\xbc\x81\x64\xad\xc7\xbc\x24\x1d\x6a\xd4\x3d\x58\x24\xfb\x3d\xb1\xbd\x07\x04\x9c\xf0\xda\x03\x62\x4e\x78\xed\x21\x61\x87\xda\x36\x7c\xf4\x61\x2c\xa4\xd6\x4e\x1e\x77\x9a\xbd\x17\xd5\xab\x9d\x49\xdb\x5b\xd1\x39\x25\x7f\x18\xcd\x97\xcc\xf4\x0a\xcd\xb7\x2d\xf3\xe7\xaa\x09\xb3\xa3\x55\x26\xf3\x81\xd3\x8b\x07\x68\x94\xfd\xfe\x87\x01\x75\x79\x1c\xb2\xe1\xbd\x6d\x43\x3c\xd0\x79\xa8\x69\x39\x2f\x95\x75\x0e\xa6\xe9\x7a\x2f\xfc\x4a\x48\x9d\x5d\x5d\x06\x03\xeb\x07\xdc\x5a\x53\x40\xf2\x08\xa4\xee\xeb\xd6\x34\x5a\x32\xb7\xcf\x03\x75\x02\xb5\x9b\x2c\x1b\x66\x2a\xb9\xf5\xb6\xe4\xb7\x17\x55\xca\xa5\xd3\xba\x9c\xf0\xe3\x13\x2e\x99\x78\x88\x88\x44\x31\x3b\x8a\xd9\x51\xcc\x7e\x2a\x62\x36\xf9\x6c\x1e\x03\xa5\x9a\x9b\xc8\x4a\x5a\x45\xf1\xb0\x91\x5a\xad\x69\x91\x5a\x61\x8b\xd4\xea\x81\xf6\xe4\xa8\xd5\x46\x32\xe0\x06\x71\x9d\xeb\x0f\x72\x34\x70\x47\x03\x77\x34\x70\xfb\x16\x79\x99\x6f\x91\x97\x45\x5e\x16\x0d\xdc\xeb\xba\x8c\x06\xee\x2d\x3b\x8a\x06\xee\x68\xe0\x6e\xb5\x68\xe0\x8e\x06\xee\x68\xe0\x8e\x06\xee\x15\x2d\x8a\xd9\x3b\x76\x1a\xc5\xec\x35\xed\xd3\x16\xb3\xa3\x81\x3b\x52\xab\x48\xad\x22\xb5\x7a\x1a\xd4\x6a\x7f\x03\x77\x92\x01\x97\xcb\x15\xdd\xb9\x3c\x09\x7c\xaf\x71\xb5\x2f\xe5\x97\xd0\xaf\x43\x98\xf0\xa9\x50\xa5\xae\x0b\x8a\x9d\x5f\x7f\xc7\xc6\x60\x8d\xc3\x02\x58\x7e\xf9\xc8\x9e\x49\xf9\x20\xf9\x30\x5b\xda\xf1\x43\xa4\xc4\x7f\xb9\xde\xa0\x3f\x54\xca\xad\x6e\x11\x62\x28\xd7\x07\x39\x79\x9b\xb8\xff\x83\x55\x7a\xc7\xf2\xe0\xff\xf3\xb7\x17\x5d\x85\xfc\xe3\x2d\x40\x55\xaf\xbe\x60\x35\x56\xd8\xf4\x35\x31\xdf\xdc\x49\x48\x31\x19\x34\x94\xf7\x77\x87\x5e\x24\xc2\x66\xb3\x6a\xe0\xa5\x17\xda\x3d\x9d\xd4\x81\xf3\xb7\x17\x9b\xbb\x54\xc2\x06\x7c\x08\xef\x49\xf4\x8d\x44\xdf\x48\xd5\xa2\x18\xb4\x63\xa7\x51\x0c\x5a\xd3\x3e\x6d\x31\xe8\xb1\xfb\x12\xa2\x07\x80\x45\x0f\x40\x78\x2d\x7a\x00\xa2\x07\xa0\x1b\x30\x45\x0f\x40\xf4\x00\xac\x7f\x29\x0a\x93\x3b\x76\x1a\x85\xc9\x35\xed\xd3\x16\x26\xa3\x07\x20\x52\xab\x48\xad\x22\xb5\x7a\x1a\xd4\xea\x29\x86\xb8\x47\x43\x6c\x34\xc4\x46\x43\x6c\xe4\x46\x91\x1b\x3d\xd0\x9e\x1c\x37\x8a\x86\xd8\x6d\x3b\x8a\x86\xd8\x68\x88\x5d\xd5\xa2\x21\x36\x1a\x62\xa3\x21\x36\x1a\x62\xd7\xb7\x28\x4c\x62\x8b\xc2\xe4\x03\xed\xc9\x09\x93\xd1\x10\x1b\xa9\x55\xa4\x56\x91\x5a\x3d\x0d\x6a\xb5\xbf\x21\xf6\x81\x93\xd4\x42\x99\xa6\xfd\xd4\x4b\x8e\x21\x1e\x18\x2b\xfb\xfb\x1b\xdf\xe8\x0a\xac\x70\xc1\x7d\x8f\x65\x22\x17\xa1\x6e\xbb\xd2\x0e\x3b\xfa\x09\x37\x60\x16\xfa\x58\x32\xfe\xfa\xb9\xaf\x3f\xa9\x6b\xef\x61\xa9\x02\x99\x85\x0c\xfd\x78\x5c\xd9\x7a\x1a\x22\xd9\x00\x76\x6e\x7c\xf7\x62\x7d\x6f\xed\xc3\xcb\xde\xe1\x8a\xff\x07\xc9\xf7\xc3\xd7\xaa\x0f\xb9\x81\xdf\xfd\x66\xe1\x36\x90\xe6\x2b\x39\xa4\x82\xdb\xdd\x6f\x3d\xaf\x87\x58\x8d\xb9\x1b\x9c\x80\x6a\x1a\x3b\xf6\xe2\xaf\x2b\x78\x70\xef\x1c\x82\xa5\x97\xf4\x72\xb8\x35\x7f\xfe\xb6\xeb\x9a\xff\xca\x15\xd7\xba\x54\x9a\xd5\xdd\x04\xc2\x35\x71\xfe\x42\x07\x13\x3a\x15\xa6\xca\x75\x58\x7a\x2b\xe1\x9e\xc9\x0b\x61\x9c\x25\x8f\x1f\xda\xb4\x65\x77\x5a\x2c\x05\x56\x00\xd0\x05\xf9\x55\x2e\xaa\x22\x0e\xf3\x10\x2b\xb8\x76\x7c\x22\xf8\x5f\x50\x74\x69\xbc\x3d\x07\xef\xf5\x77\x34\xae\x95\x57\x1e\x96\x53\xfa\x8d\x5a\x13\xab\x7c\x3e\x9b\x88\x27\xfe\x66\xa9\x2b\xd0\xb9\x30\x66\x55\x7a\x46\x7b\xea\x0f\x31\x8f\x0d\x98\xc6\x0a\xf8\x87\x15\x35\xa6\x53\x09\x91\xa4\xf6\x0f\x79\xc2\x74\x99\xf9\xab\xb5\xfd\xa5\x12\x8c\x27\x89\x2a\xa5\x65\x12\x20\xa5\xc4\x8f\x65\xb8\xba\x01\xcb\xd9\x40\x8a\xdc\x54\x86\xec\xd3\x3c\x1f\x7c\xcb\xaf\xe1\x8c\x96\xb0\xf4\x9a\x92\x66\xdb\x5c\xe6\xc4\xe1\x1f\xe6\xdd\xdb\x08\x04\x1b\x8b\x03\x6d\x43\x97\xca\x44\x32\x7b\x5b\x66\xe0\x2f\x5e\x15\x92\xf8\x56\xe5\x0a\x6b\x2a\x0a\x05\xbe\x8d\xb3\xa7\x1b\x9f\x53\x05\x64\xa0\xf2\xa5\x5d\x5a\x9f\x87\xbb\x1f\xe9\xc2\x24\xf7\x11\xe3\x45\x91\x61\xe2\x95\x72\xbc\xfb\x6e\x22\x92\x49\x7d\x6b\xed\xb2\xd7\x36\x97\xe1\x36\x52\x32\xd8\x56\x8a\x06\x0b\xc6\xd3\xe1\x43\xa8\xc2\xb6\xd4\x38\x18\x5d\xbc\xf2\xb5\x56\x65\xb1\xe1\xeb\x8b\x76\x37\xfa\x3a\xdc\x69\xd9\x14\x47\xc2\x43\xef\xcc\x0c\xf7\xf0\x93\x71\xce\x1b\xeb\x07\x8c\x5d\x8e\x58\x5e\x66\x56\x14\x19\x7e\x42\xf5\x62\xe8\xea\xef\x8a\x6f\xf4\x18\x97\xb3\xe0\x1b\xf5\x97\x2f\x41\xca\xf8\xd8\xf5\x68\xc3\x95\xec\x74\x6b\x53\x99\x3b\x19\xa4\x61\xf6\xc3\x0b\x3e\xdd\xf7\x55\xef\xec\x4e\x64\x19\x5e\x8a\x9f\x65\xea\x0e\xd2\x01\x3b\x38\x98\x27\xe5\x89\xd2\x8d\xf9\x20\x31\x39\xf8\xa2\xf5\x96\xa3\x1c\xf5\x84\x37\xc1\x11\xb6\xb5\x78\xcd\xb6\x13\xb1\xd9\xf6\xca\x04\x63\x52\xc9\x60\x36\xfe\xf6\xed\xcb\xdd\x10\xe1\x75\xbb\x0f\x7f\x4b\x17\x58\xb7\x2d\x05\xd7\x56\xf0\x8c\x95\x3a\x33\x84\x0b\xdc\x09\xcc\x3a\x5c\x73\x36\xe1\xe8\xf7\x4e\xc0\xd0\x7d\x5a\xec\x0b\xda\x7d\xbf\x39\x74\xc6\x95\xcc\x66\x8c\xd3\xd6\x8c\xca\x2c\xeb\xb1\x91\x90\xdc\x91\x6e\x28\x42\xee\x9d\xd3\x44\xd9\xb5\x90\x09\xb8\x35\xf5\x2b\xe1\x04\x67\xe4\x7a\x74\x34\xa2\x3a\xe8\xa9\xbf\x9a\xd9\xdb\x1d\x8c\x1f\xc2\x1d\xfa\x04\x2f\x94\x75\x52\xad\x17\x7b\xde\xaa\x0c\xbd\x35\x95\x49\x19\x6f\x09\xe3\xcd\xc7\xff\x23\x24\xaa\x7b\xec\x2d\x32\x1f\xa7\x36\x82\xb0\x13\xa7\x45\x16\x45\x86\x17\xc8\x3b\x64\xa9\x91\xf2\xc8\x94\xc9\xc4\x2d\xe9\xa0\x50\xa9\x39\x70\xa4\xe8\xc0\x40\xa2\xc1\x9a\x83\x63\xf7\xd7\xfc\x1a\x70\x7d\xcd\xef\x4e\x78\x21\x0e\x8e\x7b\x0c\x01\x84\x57\x90\x29\x3b\x79\xba\x78\x18\xd6\xda\xba\xf9\xf2\xa1\x36\x77\xbf\x6e\xa3\x07\x7f\x9f\x96\x2a\xe8\x7a\x2a\x47\xe7\x2d\x60\x66\xa6\x43\x4a\xba\x39\xbb\xf6\xb8\xcd\x11\x7c\xc6\xce\x24\x03\xf2\x91\x80\x65\x39\x70\xe9\xdf\x86\x29\xe8\x99\x9d\xa0\xdb\xc4\x54\x04\xe4\xc9\x03\x7d\x3f\x80\xfb\x03\x1f\x80\x5b\x23\x39\xdd\x79\x38\x0f\xdc\xc3\x2f\x0e\xe7\x09\x69\xcd\x11\x9e\x2c\x28\x91\x45\xef\x04\xc6\xef\xdc\x97\x6d\x10\xd2\x4f\x44\x2d\x2b\xfa\xf1\xf2\x25\xdd\x6f\xe8\x61\xf5\x8d\x90\xa9\xa9\xea\xd9\xa5\xd5\x3d\xd6\x0e\xde\x4b\x81\x8c\x33\x7c\x8a\x00\x5e\x14\x81\x37\x15\x5b\x1f\xe8\xbe\xa1\x23\x3d\x06\xb5\x06\xef\x4b\x6c\x49\x4a\x8e\x4e\xf5\xc8\x79\xe7\x44\x90\x8c\x0f\x21\x33\xde\xe0\x02\x8d\xe9\xb3\xb3\x97\xaf\xaa\x7b\x43\xf1\x1e\xee\x0f\xad\xcc\x6c\x10\x05\xb0\x70\xfb\xea\x62\xdb\x5c\x7e\x45\x50\x6c\x67\x56\x67\xd7\x60\xe9\x98\xe5\xbc\x70\xa7\x8c\xfa\x58\x6a\x15\x7e\x89\x90\x7e\xf8\xb0\x6c\x25\xf7\x6f\x7e\x5b\xe2\xb2\x41\x36\x3a\x2a\x9b\x45\x1a\x6c\x73\xf6\xd6\x58\x49\xea\x36\x67\x54\x6d\x21\xb4\xd7\x0d\xbc\x34\x9f\xf0\xa6\xb1\x35\x05\x43\xa5\x18\xa8\xf0\x85\x0e\xbf\xd7\x5d\x74\xbc\x05\xdb\x28\x5e\x4e\xf7\xce\x20\xb1\x6a\x7d\xf1\xcf\xf0\xb2\x85\xbc\xc8\x1e\x3a\x79\x6c\x6b\x25\x2d\x17\xf2\x2d\xf0\x74\x76\x0d\x89\x92\xe9\x86\x04\xb6\xb5\x1f\xaf\x84\x14\x79\x99\x33\x59\xe6\x43\x40\x10\x1b\xea\x0b\x09\x09\x29\xc0\x9c\x49\xb8\xcb\x66\xe1\x12\x7f\x56\xa8\x34\xd0\x93\xa1\x53\xd8\x78\x3a\xc3\x9b\x47\xb1\x4c\xb6\x9c\xb9\x4e\x84\xad\xb9\x8f\x66\x89\xe6\xc6\x89\x45\x3d\xec\x54\x58\xc7\xb1\x86\x80\x5e\x3a\x91\x82\xdb\x63\x3e\xe5\x22\x73\xa2\xf5\x80\x5d\xc0\x88\x97\x19\x5e\xa0\xcb\x9e\xb1\x23\x37\x58\xd0\xc9\x96\x7d\xe0\xc4\x5d\xa3\x9c\x36\x6f\x7c\x55\x0d\x9c\xd0\xf1\x16\x7e\x87\x4d\xaa\xb8\x86\xb6\x69\x35\xd7\xd0\x0a\x5e\x9a\x4d\x55\xf9\xd6\xc6\x5c\xca\xd4\x9d\x87\xa6\x24\xda\x20\xe9\xc2\xf8\x9e\x37\x63\xd9\xeb\xab\xad\x2c\x99\xb5\x56\x63\x0d\xc6\x5c\x00\x4f\x33\x21\x61\x77\xfc\xba\x99\x00\xcb\xf9\x3d\xe2\x98\x15\x39\x38\x49\xa4\x89\x61\xbc\xb9\x2a\xab\x58\xce\x6f\xa1\x1a\x9e\x0d\x61\x84\x17\x24\xe3\x82\x1b\xbb\x4f\xf8\x33\xe2\x22\x73\x1a\xfa\x4d\x1b\x36\x78\x57\xb2\xca\x32\xd0\x84\x38\xee\x6f\x21\x4b\x0c\xb1\x2b\xb4\x42\x65\x92\x3e\x6d\xf2\x78\xe4\xa1\xdc\xbd\x4c\x74\x38\xdc\xa5\x7b\x35\x07\x8a\x17\xf7\x09\x19\x0a\x35\x70\x83\xaf\x11\x6e\x9a\x52\x8f\x9c\xea\x18\x34\xce\xc6\x84\xfc\x25\xec\xec\xb5\xb2\x3e\x92\xaf\x5a\x20\x7e\xed\xaf\x88\x06\x63\x45\x8e\x07\x2c\x2d\x75\xb8\xb0\x1a\x61\xc6\x97\x6f\x7d\xeb\xa8\xfc\xee\xd9\xb3\x0d\xe5\xb7\xf7\x8f\xf4\x1a\x50\x53\xde\x05\x5f\x5e\x57\x74\x28\x90\x7f\xa7\x02\xbb\x3d\x16\x5e\x0c\xc6\x9b\xb7\x41\xa3\xc7\x55\x18\x2b\xe4\xb8\x14\x66\xc2\x86\x60\xef\x00\x24\x83\x7b\xaa\xa9\xc3\xfe\x05\x5a\xe1\xa6\x3a\xf0\xd6\x6e\x86\x16\xd0\x9e\x3f\x1e\x88\x4d\x85\x11\x4a\xfe\x45\x18\xab\xf4\xec\xa5\xc8\xc5\x03\x05\xa8\x43\x5b\x74\xfb\x55\x10\x54\x59\xca\xde\xd2\x56\x5c\x03\x2d\x58\x03\x5a\x41\xad\x22\xf5\x94\xb9\x73\x32\xe4\xc9\xed\x7b\x03\xf0\xb3\xc7\x02\xe1\xc0\xae\x77\x80\x2a\xca\x7b\x55\x07\x48\xb6\x08\x29\x5f\xdc\x13\x7c\x5a\x50\xbe\x9b\x28\x03\xf8\x02\x19\x2a\xf1\xb3\xe0\x58\x10\xa6\x22\x18\xe8\x96\x95\x60\x18\x1f\x8d\xda\x6f\xd4\x87\x1d\x25\xcf\xbc\x34\x96\xe5\xdc\x26\x13\x32\x65\xa9\xb4\x12\x27\x0e\x8d\x17\xfb\xb7\x81\xf2\xc6\x86\xe8\xed\x4d\xc6\x8c\xe6\xf9\xe2\xde\xe9\x96\x0f\x7a\x84\xda\xad\x05\xf2\xf9\x6e\xda\x1a\x70\xd6\xde\x10\x2f\xb7\xe5\x74\x79\xff\x0d\x1a\x91\xeb\x5f\x70\x17\xce\x5e\x5f\x6c\x6e\x8a\xd9\x45\xc1\xdd\x5a\xc5\x9d\x37\x97\xaf\x59\x54\x30\x99\xfa\x27\x6d\x9b\x39\x6a\x28\xa6\xc7\x38\xbb\x85\x59\x8f\xb8\xd8\xfc\x85\xf9\x1a\x32\x2f\x49\x00\xde\x1b\xef\x5e\xa2\xef\x36\x07\xc9\x0e\xd8\x43\x6d\x3b\x77\x46\x68\x7d\x37\xd1\x2d\xbf\x08\x8b\xde\xe2\xb3\xed\x11\x9c\xda\x2d\xcc\xb6\xfb\x60\x6e\xbb\xdd\x2e\x78\xdd\x87\xf6\xdd\xfd\x50\x09\x7a\xd5\x56\x6f\xe7\x67\x6a\xb6\xad\x4d\x54\xa1\x05\x20\xee\xb5\xbc\x0a\xfd\x9a\x56\x26\xb7\xc6\x43\x43\xc8\xe8\xce\xf4\x44\x14\x94\xf5\xe0\x9d\x01\x1e\x23\xd9\x77\x3c\x13\x69\xd5\x05\x9d\xdf\x4b\xd9\x73\xe2\x93\xfb\x0f\x12\x5d\x12\xd7\x2e\x14\x98\xd7\xca\xe2\x2f\x1f\x0c\x40\x34\xcd\xbd\xc0\x43\x5d\x78\x2b\x34\x52\x19\x54\xbc\x28\xe2\x3e\x80\xe1\x72\x3e\x72\xc7\xb0\x4b\xc9\x94\x0e\x70\x70\x0f\x7d\x47\xd4\x05\xf2\x89\x21\x39\x38\xd0\x3e\xbd\xb4\x0f\x0f\x3e\xa5\x5b\xd0\x5b\xd3\x9d\xef\x0a\xe5\x03\x7a\x82\x3a\x56\x91\xa1\xb4\xeb\x45\x55\x1e\x1c\xe5\x22\x61\x39\xe8\x31\x7a\x5c\x92\x8d\x3d\x0e\xed\x4d\xd9\x8e\xee\x52\xdb\x9a\xfa\x36\x07\xdc\x0a\x0b\x90\x35\x91\x09\x68\x1f\xe6\x46\x3d\xb4\x4c\x4e\xff\x76\x14\x1c\xf7\xe0\x3f\xac\xe0\x42\x9b\x01\x3b\x63\x46\xc8\x71\x06\xad\x67\x5e\xc3\x68\x76\xe3\x7a\x10\x86\x39\x52\x3b\xe5\x99\xd7\xa5\xb8\x64\x40\x36\x2b\xd7\xfb\x3c\x4b\xed\x79\x49\xc5\x51\x9e\xca\xd1\x75\x70\x0b\xb3\x83\xde\x02\xd2\x1c\x5c\xca\x03\xe2\x2d\x0b\x68\x52\x31\x22\xf4\x91\x1d\xe0\xb3\x83\x2e\xb9\xf0\x96\x0c\x67\x57\x3b\x5a\x7b\xd0\x8d\x31\x22\xc4\x87\xec\x28\xac\xb7\xb4\x44\x1f\x15\x65\x15\x2b\x0d\x90\xb4\x8e\xa7\x8c\x41\x90\x33\x51\xaa\x44\xc5\x54\xc2\x1d\x4a\x8f\x8f\x46\xf0\x73\x9a\x84\x90\xe3\x6f\x8b\x94\xdb\x8d\xc2\x73\xa9\xb5\x20\x72\xf8\x96\x3a\x61\x25\xf6\xe2\x70\x6b\x24\xc6\xac\xe0\x9a\xe7\x66\xc0\xae\x7c\x3d\x55\xc4\x34\x31\x6a\xda\x12\x3d\xec\x6e\x66\x05\xb0\x3f\xb1\xb7\xcd\xb9\x0c\x58\xbf\xdf\x67\x37\x6f\x2e\xde\x9c\x32\xfa\x85\xa4\x6c\xab\xd8\x48\xa1\x12\xa4\x4a\xed\x86\x9a\x82\x44\xc5\xdf\xc9\xf7\x4a\xc2\x9b\x91\x3b\x21\xdc\xc2\x14\x34\xbb\x73\x5b\x95\x88\x14\x2a\xeb\xd5\xe0\xf0\xfd\xe2\xf1\x6e\x92\x49\xce\xef\xaf\x4b\x3d\xde\x62\x03\xd8\xc2\x26\x34\x4d\x36\xb5\x32\x89\xa8\xd7\xcc\x3d\x37\xc9\x04\xd2\x32\x83\x94\xf1\xa1\x9a\x42\xcb\x64\xdb\xfe\x0c\x59\x7a\x09\xe1\x43\xc7\xf3\x86\x46\x65\xa5\xad\x94\xd5\x23\xb8\x3f\x65\xbf\x45\xd7\x36\x67\x05\xe8\x04\xa4\xe5\x63\x98\x37\x03\xd0\x7b\xcf\x9f\xfd\xd7\xb1\xe7\x47\xae\x47\x6f\x3d\x79\xe6\x30\xe2\x15\xbf\xff\x56\xd6\xa6\x41\x61\xd8\xb3\x01\x3b\x9b\x1b\x0c\xbf\xcb\x92\x32\x43\x5b\x0b\xba\xeb\x1b\x43\x0e\x67\x4c\xab\x12\x1d\xf6\xac\x2c\xda\xda\xec\xaf\x7e\xfb\x5f\x4e\xe9\xe3\x79\x91\xc1\x69\x28\xc3\x4c\x6a\xb3\x93\x61\xac\x62\xbf\x7e\xf6\x5f\x44\x3d\xdd\xf9\xac\xb5\xc2\x1a\x66\xdc\x01\xac\x2c\x98\xc8\x29\x9c\x13\xb2\x59\x5d\xcf\x59\xb7\xd1\xdf\x58\xae\xad\xe9\x31\xf4\xea\x57\xc2\xa1\x55\x96\x67\x73\x5a\x3e\x6a\xe1\x70\x47\x40\x4a\x15\xc2\x04\xd0\x50\xc5\x9e\xff\xfa\xd9\x7f\x2d\x9a\x53\xde\xc8\x04\xf0\x4b\xfc\x02\xc3\x2c\x86\x4e\xb9\xbf\x15\x59\x06\x69\xef\xc1\xe9\x8f\x4a\x6d\x27\xa0\x7b\x0c\xa4\x09\xc6\x2a\x37\xbf\xb9\xb9\x61\xef\xba\x94\x12\x65\x04\xb2\x0e\xa3\x45\xab\x61\xe1\xf2\x8b\x75\x8c\xd0\xb2\x5c\x19\xbb\x7c\xca\x9b\x1f\x37\xd7\xb8\x9c\xbd\x19\x6d\x2b\x0e\xf4\x77\x30\x43\x2c\x7e\xbd\x83\x48\x79\xdf\xbf\xad\x12\x7f\xfb\x42\xda\xbe\xd2\x7d\xea\xe6\x94\x59\x5d\x3e\xec\x35\xa8\x5b\xde\x3a\x01\x1f\x80\x0c\x94\x8d\xf3\xb6\xb0\xab\xef\xe5\xe4\xef\x7e\x9e\x53\x75\x27\x57\x53\x0e\x24\x9c\x9e\x66\xec\x78\xea\xdb\x16\xb7\xb9\x63\xe3\x46\x77\x6f\xff\x9f\x45\xec\xde\x82\x1c\xf8\xb3\x5b\x9d\x76\x27\x57\xa1\xc7\xa3\xb7\xc1\xe8\xd5\xb1\x25\xce\x47\x36\x27\xf7\x02\x0d\xb3\x84\x72\x2d\x9c\xf0\x25\x14\x88\xe6\x51\x3b\x64\x2c\x46\x14\xb8\x73\x6e\x56\x1e\xf4\x0c\xb8\xb1\xcb\x40\x11\x0f\xfa\xc3\x6d\x7d\x12\xc0\x7c\x6b\x0b\x9d\x4e\x42\x42\x90\xd7\x36\xc6\x73\x42\x94\x83\xb7\x40\x1e\x3e\x0a\x38\x6b\x09\x51\x07\xd5\x91\x70\xfb\xd7\x96\xaf\xde\x57\xd8\x4c\x30\x72\xee\x22\x5a\xfb\x4f\x1b\xc1\xc1\xde\x74\xea\x89\x57\xe5\x51\x24\x97\x26\xe9\x2b\x14\xe5\xe7\x0f\x46\x18\x7d\x60\x0a\x48\x06\x1a\xf0\xf4\x51\x34\x32\x29\x40\xa8\x17\x9d\x65\x77\x7c\x66\x0e\x1e\x8d\x14\x9e\x83\xe5\xeb\x13\x4d\xe6\x5b\x9b\xe8\x5f\x5b\x2e\x53\xae\x53\x3f\xcb\xc3\x43\x53\x75\x39\x60\xaf\xd0\x17\x27\x47\xea\x94\x4d\xac\x2d\xcc\xe9\xc9\xc9\x58\xd8\xc1\xed\xef\xcd\x40\xa8\x93\x44\xe5\x79\x29\x85\x9d\x9d\xa0\x03\x4e\x0c\x4b\xab\xb4\x39\x49\x61\x0a\xd9\x89\x11\xe3\x3e\xd7\xc9\x44\x58\x48\x6c\xa9\xe1\x84\x17\xa2\x5f\xcb\xdc\x66\x90\xa7\xbf\x08\x03\xbd\x67\xc1\xba\x75\x06\xd1\x3a\xa5\xa7\xd0\x2f\xe5\xad\x54\x77\xb2\x8f\x9a\xb0\xd9\xea\x34\x6e\x16\x05\x11\xda\x1c\xbc\xb7\x09\x7c\x28\x54\xfa\xde\x37\xc1\x2d\xa6\xcf\x65\xda\x27\xa7\xe5\x7b\xde\x8b\x5d\x6c\xc3\xfd\x3a\xb0\x60\x93\xa8\x77\x6a\xbb\x69\x53\x3c\xb1\x62\x0a\x3b\x39\xc1\x43\x6b\x6d\xf7\x9b\x10\x70\x9a\x96\x9a\x76\xbc\xe1\x0d\x0f\xbe\x9d\x9c\xcf\x50\x56\xc2\xb1\x99\x22\x51\x40\xaa\x14\xbc\xe5\x74\x8a\xa6\x81\x6b\x47\x8e\x6e\x9c\x28\xed\x7d\xe4\x68\x37\x9e\x19\x0b\x39\x11\x37\xfa\x3e\x9b\x31\xab\x67\xe4\x58\xd7\xb7\x4e\x79\xf5\x9e\x6f\xa7\x31\xdc\xe2\x7b\xc6\xa8\x44\xa0\xe8\x54\xc3\x35\xc8\x6d\xc1\x06\xc8\x59\xa1\x8c\xc0\xb1\x3d\xcf\xdc\xce\xb2\xb7\x3b\xbb\x6d\xb8\xf9\x7e\xf7\x9b\x6d\xb6\x6e\x84\x55\x4e\xb6\xb4\xd2\xb7\x23\x30\x46\xcd\x2c\x03\xbf\x3d\x87\x26\x28\xbe\x4e\xac\x49\x94\x34\x56\x73\xb1\x3a\x8f\x6a\x79\xdb\xd1\x95\xb2\xbb\xbf\x82\x21\x06\x9d\xed\x04\x14\xb6\x3c\x31\x76\x88\x99\x35\x29\x54\xa0\x6e\x02\x86\xd2\xac\x42\x2c\xa2\x23\x5c\x3b\x9a\x66\x77\x80\x11\xdb\x0b\x4e\xf4\x35\x55\x59\x4a\x2f\x50\x7a\xbd\xae\xd6\x75\x39\x96\xaa\xfa\xf9\xc5\x3d\x24\xe5\xa6\x39\xf9\x8b\x6d\xc1\x16\x18\x0c\x2a\x3e\x6c\x85\x26\xe1\x8e\x6e\x78\xe0\xe5\x17\x85\x60\xf7\x82\x8c\xe1\x56\x98\x11\xe5\xac\x55\x1b\x01\x0d\xc7\x69\x85\xc2\x95\x7b\x19\x59\x1c\xa5\x4e\x08\x8b\xe4\x26\x99\x28\x65\xdc\x29\xc7\xfd\xc4\x7e\xa7\x42\x91\xcf\x10\x13\x68\x34\xcb\x1d\x8d\x09\x89\x34\x75\xf7\x24\x38\xd5\x9f\x09\x43\x2a\x7c\x05\xc1\xe0\xe5\x72\xdd\xa0\xe1\xd2\xfd\x31\x46\xa9\xcb\x58\x66\xca\xdc\x75\x7a\x07\x62\x3c\xb1\xa6\xc7\xc4\x00\x06\x88\x35\xc0\x93\x49\xa3\xdb\x1c\xc0\xb6\xee\x6d\x6a\xa2\x5a\xd3\xca\x7c\x54\x65\x45\xf8\x54\xa0\x5e\xc5\x63\xe6\xf7\x72\x29\xb8\x7a\x0c\x6c\x32\x38\xee\xb1\x3a\x65\xdf\xcd\x71\x38\x63\xc2\x82\xa3\xd9\xa8\xcb\x68\x55\x8e\x69\x25\x10\x62\x42\x71\x5e\x55\xca\x08\x7a\x61\x53\xd4\x39\x0f\x68\x71\x07\x6e\xdf\x70\xe6\x65\x1e\x8a\x2a\xe1\xfa\xd0\x2c\x0f\x55\x62\x91\x06\x53\x28\xd2\x56\xe7\x0d\xf6\xff\x5d\x7d\x74\x64\x8e\x6b\x60\x4e\xc4\x78\x12\x60\xc9\x3d\x23\x68\xef\xc1\xf6\x67\x8f\xed\xe5\x8b\xa1\xb6\xa3\x47\x86\x5a\xdb\x37\x1e\xf2\x2d\x6a\xac\x6a\xec\xbf\x05\x9d\x57\x50\x44\x14\x41\x92\xe1\xed\xe4\xe1\x8a\x2d\x8f\x63\xec\x19\x3b\x42\x24\x13\xf6\xd0\x20\xc2\xf7\x55\x71\x3c\x60\x67\x4c\x96\xd5\x99\x5b\x37\x80\x54\x55\xff\xbe\x23\x37\xa8\x51\x75\x5f\x3b\xae\x78\x2f\x72\x47\x6d\x37\x4f\x7b\xb3\xf5\x3d\x04\xe0\xe1\xa2\xa1\xeb\x3a\x21\x58\xef\xd8\xc1\x7e\xa4\x3b\xf4\x11\x56\xb1\x7b\x1f\x0b\x01\x1a\x78\x5c\xeb\x28\x0c\xd0\x79\xaf\x29\x3d\x55\x07\xb2\x7d\x8a\x09\x16\xbb\x62\x05\xeb\x06\x33\x58\x47\x70\x65\x7b\x45\xf8\x2c\x6f\xf3\x61\x30\x21\x0b\xab\x05\xed\x16\x91\x1f\xce\xf0\xe9\x96\xc1\x4f\xab\xdb\xbe\x94\xae\x6e\x7b\xd1\xbc\xba\xad\x45\xbc\xc7\x17\x18\xb4\xbc\x75\x84\xb6\xd4\xf6\x27\x6d\x75\xdb\x3e\xb4\x68\x55\x3f\x3b\x04\x1c\x2d\x6f\x5d\x9d\x4d\x6a\x3b\x04\x27\x2d\x6f\x0b\x22\xea\xfb\x89\x55\x5a\xde\x76\x36\xb2\x2e\x6f\xbb\xc6\x35\x2d\x6f\x73\xa9\x8e\xef\x29\xc8\xa9\xd7\x8e\x70\x62\x5f\x5b\x3a\xc7\x2f\xf7\xe2\x27\x75\xeb\x18\xc4\xbb\x45\x46\x2d\x6f\xf3\x02\xe0\x13\x89\x92\x5a\xd2\xd5\xd7\xd6\x75\xf3\x72\xe5\xc7\x94\xe3\x1e\xe2\x7c\xbc\x42\xd1\xf3\xa9\x37\xc1\x4e\x8d\x11\xd9\x85\x06\x2c\x6d\x80\x61\x63\xc1\x0e\xf3\x61\x02\xb3\x96\xb7\xee\x18\x27\xb5\x8e\xd8\x27\xb5\xce\x90\x1b\x05\x9e\xaf\xc8\x2e\xfc\x11\x65\x1d\xb2\x4c\x47\x59\x27\xca\x3a\x5b\xb4\x28\xeb\x6c\xda\xa2\xac\xb3\xaa\x45\x59\x67\x49\x8b\xb2\x4e\x94\x75\xf6\x6a\x8f\x4f\xd6\x21\x4b\x55\x67\x06\xb3\xbf\x92\xc1\x75\xde\x42\x86\xd2\x54\x08\x09\x6a\x9b\xca\x1c\xef\xbf\xf6\x24\xf6\x06\xcd\x6b\x3e\xd2\x5d\x73\x39\x06\xf6\xbc\xff\xfc\xd9\x86\xe9\x84\xcb\xdb\x3e\x41\x3f\xcd\xb6\x6d\xea\xe1\x7c\x5b\xe5\x91\x78\x6f\xde\x25\x7f\x52\x2b\x87\x47\x4b\xc2\x5c\xe1\x20\xaa\xaa\x62\xe5\x60\x19\xb7\x2d\x83\xb8\xc8\xa1\x72\x88\xb6\x52\x98\xeb\x98\x60\x25\xbd\xbf\xc3\x6d\xea\x60\xb7\x19\x24\xc0\x29\x0e\x7e\x08\xd5\x2c\x54\x0e\x94\xa0\x1a\x0e\xbd\x9b\x02\x04\x58\xb1\x23\x18\x8c\x07\x2c\xa5\x64\x6f\x2e\x7d\xcc\xd9\x71\xaf\xe9\x1e\xcf\x1d\x71\xd5\xf8\x1f\x37\x6d\xef\x1f\x87\x29\x48\x5b\xf2\x2c\x9b\x31\x98\x8a\xc4\x56\xeb\xc3\x80\x42\x61\xc9\xd9\xb9\x8f\x2b\x65\x0f\xf1\x70\x5f\x91\xb0\xbf\x70\xb6\xb6\xf3\x57\x87\xb6\xbf\xec\xb6\x30\x8f\xdd\xe9\xcd\x9c\x5c\x42\x10\x1a\xac\x54\xab\xac\x1b\x8d\xfc\x95\xf8\x4f\x44\xf0\x37\x6f\x77\x75\x8f\xb1\x8e\x78\xc2\xde\x7c\x60\x5e\x81\x2a\xb3\xcc\xa1\x37\x79\xcc\x16\x41\xb0\xc4\x93\xb5\x24\x5b\x87\xdc\xac\x79\x23\x6b\x07\xdf\xb9\x51\x85\xca\xd4\x78\xd6\xdc\x41\x7f\x0f\x4c\x5d\x1e\x87\x33\x53\x0e\xbd\x08\xe8\x0e\xd1\xeb\xb9\x2d\x8f\xbe\x90\x95\x2d\xfa\x42\x16\x5a\xb4\x0f\xcc\xb7\x68\x1f\xd8\xa2\x45\xfb\xc0\x92\x16\xed\x03\x8b\x2d\xda\x07\xa2\x7d\x60\x9f\xf6\xe9\xdb\x07\x58\xf4\x85\xac\x6a\x51\xd6\xa9\x5b\x94\x75\x36\x6f\x51\xd6\x59\x6c\x51\xd6\x89\xb2\x4e\x94\x75\xa2\xac\xb3\x6b\xdb\x03\xb9\x0b\x95\x76\x9e\x22\x53\xa8\x74\x4d\x86\x0c\xd9\xab\x13\xd5\xcf\x54\x52\x55\x26\x71\x9f\x78\xcf\x87\xe1\x39\x99\xd0\x7b\xec\x5f\x4a\x02\xa5\x27\x50\xc9\xdb\x1c\x98\xc2\x4b\x24\x0a\x95\x1e\x99\xe3\x1d\x02\xcf\x63\x86\x4d\xcc\xb0\xf9\x19\x64\xd8\x4c\xb8\xf1\x85\x93\x90\xb4\xae\x4e\xb8\x69\x1c\xff\x1b\xd0\xf9\xcf\x36\xdf\xc6\x21\x9c\x47\x18\xbc\xa7\xae\x46\x0a\x82\x5d\xea\x7d\xbb\x90\x5e\xb5\x21\xe6\xf5\x32\xba\xa2\x27\x4d\x21\x65\x05\xe8\x3e\x21\x99\x62\x23\xe1\xeb\x87\xcd\xe1\xaf\x87\xf0\x13\xcf\x9b\x69\x43\xe2\x49\x27\xcf\xb4\x97\xd2\x99\x6f\xaa\xe9\xa2\x6b\x71\xc5\x27\x97\x4a\xd3\x8d\x56\xda\x67\xd6\xbb\xd3\xbe\xd9\x4b\x2f\xed\x4a\x89\x44\x25\xef\x7a\xab\x32\xc9\xab\xdb\xd2\xe2\xb6\xff\x2c\x41\xcf\x98\x9a\x82\xae\x15\xa3\xea\x76\x9f\x5e\x75\x49\x4d\xc2\x7d\x01\xe5\x6e\x0c\x3c\x9d\x98\x22\xba\xd4\xd4\xbb\xf6\x1a\xb2\x47\x56\x3d\x79\x75\xeb\x56\x71\xe8\x50\x6d\x78\x6a\xb5\x98\x57\xb7\x4e\xcd\x6f\xac\x63\x13\x1c\xeb\xd0\x0c\xc7\xba\x35\xc5\xb1\xce\xcd\x71\xac\x4b\x93\x1c\xfb\xe0\x15\xa4\x57\xb7\x8e\xcd\x47\xac\x73\x2b\x1d\x7b\x82\xf5\xa8\x57\xb7\xf7\x00\xee\x2e\x2d\x76\x2c\x56\xb7\xde\xbb\x75\x6d\x50\x63\x5d\x1b\xd5\x58\xd7\x78\xb8\x53\x15\xed\xd5\x2d\xd6\xd7\x7e\x0f\x72\x5a\x67\x42\xc4\xbe\x35\xb9\x1f\x9a\x68\x07\x38\x59\xdd\xfd\xfb\xa1\x14\x20\xe2\xd2\xf5\x85\xb3\x6e\xec\xc6\x5d\x5f\x18\xaa\xd9\xbc\x18\x35\xc4\xad\x22\x46\xe3\xef\x69\x30\x78\x95\xb2\x51\x3c\xae\xd1\xd9\xc2\xd5\x33\xb5\xe9\xac\xba\x7c\xc6\x29\x05\xf5\xa5\x55\x8d\x8f\xf1\xdd\x01\x85\x93\xd6\xd2\x84\x4c\xe7\x03\x4c\xeb\x2f\x50\xbf\xa0\xeb\x70\x0f\x82\x1d\xfb\xd0\xd4\x6f\x1c\x0c\x9a\x37\xe7\xfa\x1e\x8f\xfe\xfd\x9f\xe3\x56\xf5\x96\xba\xc3\xa8\xfd\x6d\xdc\xa2\xf6\xb7\x57\x8b\xda\xdf\xca\x16\xb5\xbf\x3d\x5a\xd4\xfe\x36\x6b\x51\xfb\x5b\xdd\xa2\xf6\x17\xb5\xbf\x1d\x5a\xd4\xfe\xa2\xf6\xb7\x6b\xfb\x19\x6b\x7f\xdd\x46\x35\x37\x75\x31\x1f\x24\x82\xf2\xa3\xe5\x56\x24\x75\xc4\x73\x78\x8b\xfe\xd5\xad\x0e\xd8\xd4\xef\x96\x6b\x80\x4d\x2d\x71\x41\x0b\x1e\x3c\xa0\xee\x55\x0a\xe1\xc2\x97\xeb\x35\xc1\x4f\x2d\x72\xbb\x33\x4c\x6c\xb8\x84\x3b\x45\xc5\x9b\x10\x58\x56\x5f\xdc\x5e\x45\x9d\xa5\xec\x28\xf8\xe2\xf1\x22\x16\xa9\x6c\xfb\xa1\xb4\xa2\x5f\xbf\x51\x79\xe7\x31\xa8\xa6\x95\xcf\xdf\x72\x21\x57\x31\x6c\x55\x7c\x54\x8d\x3d\x8e\x3c\x82\x6e\xcd\x01\x2f\xbe\x1d\x09\x49\x91\x8e\xe1\xd2\x20\x25\x43\xd0\x14\xd1\x53\xba\x7a\xc1\xe3\x39\x89\xbe\x38\x1f\x94\x7f\x6b\xd8\x35\xa2\x7c\x38\x1e\x32\x2e\x7d\x32\xac\x92\xe1\x56\x7b\xba\xa9\xbe\x96\x97\xab\xbb\x58\xaa\xd1\x07\xec\x05\x62\x7d\xb3\x63\x61\x10\x3e\xfe\x9a\x88\x6e\x10\xf9\x71\x15\x6e\xb8\xdb\xba\x70\xc3\x5c\xc4\x48\xac\xdb\x10\xeb\x36\xec\x55\xb7\x01\x1f\xd2\xe1\xee\xbc\x80\x03\xfb\xab\xbf\x5e\x49\x03\x82\x2a\x2f\x33\x2b\x8a\x3a\x02\xdb\xd0\x50\x19\x69\x12\x23\x1f\x09\xda\xc6\x77\x37\x1a\x4f\x26\xf3\x78\x8f\xfd\x61\xc4\xb6\x41\x72\xe2\xa3\x2d\xf1\x32\x24\xac\x38\x10\xd4\x0e\x0a\x29\x15\x4f\x3f\x52\xf0\x02\x09\xb6\xa9\xb5\x66\xba\xab\xcb\xd1\xf9\xcc\xa1\x84\xa3\xd8\x6b\x18\x44\xf3\x42\x0b\x8c\x5a\x15\x53\x90\x35\x97\x38\x32\xc7\xc7\x41\x1a\xea\x94\x7b\xbd\x17\xee\xf3\xc7\x06\x97\xf8\xf3\x26\xfc\x07\x17\x54\x71\xa0\x1a\x7c\x35\xff\x79\xda\x21\x91\xfb\x47\xb7\x75\x61\x91\xeb\x2c\xaa\xed\xa3\x47\xb4\xfd\x9c\x6a\x5f\x3c\x4a\x1f\xc6\xa3\xd3\x3a\x3e\x0d\xbf\x45\x4c\x18\xdd\xbc\x3d\x85\x84\xd1\x8f\xe4\x9b\x78\x3a\x79\xa3\x4f\xd6\x1f\xf1\x54\xf2\x46\xa3\x0f\x62\xab\xf6\xa9\xa6\x73\xb6\x5b\x87\x3e\x87\xe8\x6f\xe8\x58\xa6\xea\x84\xf9\xbf\x1f\x3f\x43\x27\xf8\xd7\x69\x74\x59\x8c\x2c\xfb\x98\x91\x65\x51\x0b\x8b\x5a\x58\xbb\x45\x2d\x6c\xa1\x45\x2d\x6c\x8b\x16\xb5\xb0\xd5\x2d\x6a\x61\x8b\x2d\x6a\x61\x51\x0b\xdb\xa0\x45\x2d\x2c\x6a\x61\x9b\xb6\x9f\x99\x16\xd6\x5d\xbd\xf5\x18\xe1\xf5\x1e\x22\xbc\xba\xa1\x84\x1d\xd0\xbf\x4e\xb0\xae\xa3\x88\xae\x18\xcd\xf5\xb8\xa3\xb9\xf6\x2c\x3b\x27\xad\x78\x3f\xa5\xe7\x9a\xbb\xbd\xaa\xfe\x1c\x9f\x2a\x91\xb2\xa2\xb4\xbe\xfa\x56\xac\x41\xf7\x98\x6b\xd0\xb5\x76\x34\x16\xa2\xdb\xa8\x10\xdd\x2a\x98\xc5\x6a\x74\x2b\xda\xe3\x89\x31\x8b\xd5\xe8\xb6\x6d\xb1\x1a\xdd\xf2\x16\xab\xd1\xad\x69\xb1\x1a\x5d\xac\x46\x17\xeb\x11\xec\xd1\x62\x3d\x82\x25\x2d\xd6\x23\xd8\xbd\xc5\x7a\x04\x1b\xb5\x58\x8f\x20\xd6\x23\x68\xb7\xe8\x85\xda\xaf\xc5\x7a\x04\x7b\xb6\xe8\x99\x8a\xf5\x08\xf6\xea\x30\x56\xa3\xfb\xa4\x62\x06\x59\xd4\xfe\xa2\xf6\xb7\x71\x8b\xda\xdf\xca\x16\xb5\xbf\x3d\x5a\xd4\xfe\x36\x6b\x51\xfb\x5b\xdd\xa2\xf6\x17\xb5\xbf\x1d\x5a\xd4\xfe\xa2\xf6\xb7\x6b\xfb\x19\x6b\x7f\xb1\x1a\xdd\xa3\x8f\x55\x64\x8f\x31\x23\x29\x56\xa3\x8b\xf1\x8b\x3b\x6d\x77\xac\x46\xf7\x70\xfb\xd9\x57\xa3\x6b\xc5\xd2\x7d\xbc\x92\x74\xdb\x4f\x23\xd6\xa5\x8b\x75\xe9\x62\x5d\xba\x58\x97\x2e\xd6\xa5\x8b\x75\xe9\x36\x6f\x8f\xdf\x9b\xf1\xe8\xf4\x8f\x4f\xc3\x83\x11\x2b\x22\x6c\xde\x62\x45\x84\x95\x2d\x56\x44\x88\x15\x11\xa2\x37\x62\x97\x16\x2b\x22\x6c\xd9\xa2\xe7\x21\x56\x44\xd8\xaa\xc5\xba\x74\x9f\x4c\x8c\x59\xd4\xc2\xa2\x16\xd6\x6e\x51\x0b\x5b\x68\x51\x0b\xdb\xa2\x45\x2d\x6c\x75\x8b\x5a\xd8\x62\x8b\x5a\x58\xd4\xc2\x36\x68\x51\x0b\x8b\x5a\xd8\xa6\xed\x67\xa6\x85\xc5\xba\x74\x8f\x3a\xd6\x2b\xd6\xa5\x5b\xd2\x62\x5c\xd7\xe3\x8e\xeb\xda\x11\x57\x78\x69\x55\xae\x4a\x69\xaf\x41\x4f\x45\x02\x67\x49\xe2\xfe\xba\x51\xb7\xb0\x65\x2c\x51\x5b\x0d\x5d\xd3\x2d\x13\x32\x15\x09\x2a\x92\x77\x13\xc0\xb2\x72\x4e\xbe\xc5\xf7\x18\xa7\x17\x99\xc5\x37\x6b\xf4\xc2\x79\x3a\xa2\x86\x01\x36\xd8\xf5\xb6\xf0\x22\x08\x0d\x95\xca\x80\xcb\x2d\xbe\xf4\xdc\x10\xf4\x96\xa7\xb9\x05\x90\x97\x9e\x14\xd7\x9d\xb1\x21\x64\x4a\x8e\x7d\x3c\x8f\x3f\x01\x03\x76\x5e\xbf\x90\x70\x89\x87\xa7\xd4\x1a\xa4\xcd\x66\x08\x07\x2c\x70\x85\x5a\x43\xae\xa6\x90\x22\xc9\xc6\x30\x22\x92\x23\xb9\x65\x19\x70\x37\x96\x84\x7a\x30\x77\x78\x38\xbb\xc2\xfe\xa9\xd3\x21\xf8\xd0\xa6\x9d\x80\xb8\x3d\x6d\xdc\x89\x1a\xce\x59\x36\xbc\xd8\x84\x7c\x29\x41\xfd\xa8\xb1\x42\x3c\x9a\x33\x55\xb2\x3b\x4e\x92\x92\x2e\x25\x1e\x66\x5c\xba\x03\xed\x96\x83\xef\x21\x93\xec\x6e\x7e\xe8\x23\x55\xdb\xf2\xb3\x7d\xcc\x01\x5c\x8f\x77\x62\x52\xad\xad\x39\x3c\xd3\xe3\x92\x44\x42\x8f\xca\x20\xad\x9e\x61\xbc\x1d\xc9\x14\x0d\x4c\xcc\xf9\x18\x0e\x0f\x0d\x3b\x7f\x75\xe1\xc8\x5f\x69\x1c\xb5\xf6\x55\xf6\x3c\x39\x2c\xb4\x9a\x8a\xd4\x21\xf7\x77\x5c\x0b\x3e\xcc\x9c\xdc\x39\x02\x0d\xd2\x89\x05\x9f\x1f\x7d\x77\xf6\xf6\xef\xaf\xcf\x5e\xbd\x38\x46\x09\x14\xee\x0b\x2e\xdd\xa9\x28\x4d\x1d\x28\xea\x87\x73\x03\x81\x9c\x0a\xad\xa4\x9b\x1f\xea\x6a\x9c\x4d\x43\xaf\x49\x75\x18\x34\x18\x95\x4d\x21\x25\x39\xb9\x1a\x2d\x70\x1d\x21\x8b\xd2\x06\xdd\x11\xc3\x17\xdd\x01\x92\xc9\x84\xcb\xb1\x9b\xe7\x85\x2a\x5d\x7f\x9f\x7f\x8e\x33\xd2\x90\x96\x09\x49\x4e\x3c\x60\xed\xe7\xbd\xc0\x29\x1c\xad\x37\x54\x12\xd1\x24\xbc\x08\x73\x6e\x2e\xcb\xcc\xa4\xe5\xf7\xa7\x14\xbf\x77\xf0\x79\xe3\xd1\x41\x28\x27\xa9\xdc\x10\xc4\x6f\x68\x56\x19\x56\x32\xcc\xd8\x41\xf3\xed\x01\x7b\xe1\xc6\x80\xb4\x09\x40\x0a\xbf\x84\x29\x68\xd4\x3c\x3d\xf8\x7a\x4c\xc3\x98\xeb\x34\x03\x83\x81\x87\x81\x36\x93\x76\xe0\x01\x06\x95\x5e\x2b\x95\x5d\x46\x4c\xd8\x2b\x85\x41\x88\x23\x75\xca\x26\xd6\x16\xe6\xf4\xe4\xe4\xb6\x1c\x82\x96\x60\xc1\x0c\x84\x3a\x49\x55\x62\x4e\x2c\x37\xb7\xe6\x44\x48\x77\xb8\xfa\x29\xb7\xbc\xdf\x38\xd5\x27\xc4\xb9\xfb\x89\xca\x73\x2e\xd3\x3e\xf7\xd8\xd5\xaf\xb6\xf5\xe4\x17\x9e\xa7\xf6\x79\xf5\x96\x90\x7d\xde\x37\x13\xc8\xb2\xc3\x1d\xf0\x79\x3f\x99\x6f\x0f\x59\x6f\x2f\x19\xcf\xaf\x7d\xff\x03\xfc\xa2\x3a\xaf\x04\x83\x01\x7b\xad\xac\x8f\x8f\xf5\xa1\xd8\x48\x47\x11\xbe\x2b\x8f\xf4\x8b\xd7\x37\x6f\xff\x76\xf5\xe6\xf2\xf5\x4d\x3c\xd9\xf1\x64\xc7\x93\xbd\xc7\xc9\x06\x39\xdd\xfb\x54\x07\x99\xb3\x71\x4c\xaa\xfd\x46\x4e\x6d\xc0\x86\x63\x50\x6d\xc0\xde\x12\x22\xb5\x8f\x06\xf5\x16\x04\x5e\xc8\xe9\x77\xbc\x6d\x61\x97\x4b\xc1\xc1\xfc\x0b\x24\x28\x57\x32\xf8\x3e\xf1\xf1\x7b\x58\xb3\xf6\x75\x5f\xed\x24\x45\x52\xdb\xdf\xb5\xe4\x86\xde\xdd\xd0\xd0\xda\xbe\xd7\x3c\xaf\x2b\x54\x2f\xd9\xb5\x01\x7b\x15\xd4\x1e\x76\xfe\xf7\xcb\x8b\x17\xaf\x6f\x2e\xbf\xba\x7c\xf1\x76\x77\x3d\xba\x03\x8b\x0b\xda\x14\x3a\x02\xc0\xe1\x8e\x5c\xb2\xd0\x30\x15\xaa\x34\xd9\xac\xb2\x82\x2c\x27\x02\xf3\xa7\xdf\xfb\x7d\x67\x95\x3e\xbe\xf4\xb3\xc8\x6c\xbb\x65\xb6\x17\x30\xe2\x65\x46\xda\xd3\xc1\xc1\x60\x17\x2e\x47\xad\x2b\xf4\xfd\x4a\xab\x3d\x2a\x30\xb7\x50\xf8\x9a\x6a\xb7\x8f\x94\x5e\x79\x8c\x0f\x7d\xf4\x41\x8b\xf5\x78\xe1\x91\x2c\x74\x5e\x7a\x24\x27\xd9\x9e\xd0\xd9\xd3\xcb\xd0\x8d\xef\x3d\x51\x72\x24\xc6\xaf\x78\xf1\x0d\xcc\xde\xc2\x68\x3f\x33\x71\x1b\xde\x68\x7d\xf4\xae\x64\xb4\x55\x3a\x76\x46\x83\xed\xe7\xa6\xe9\xcc\x49\xd3\x55\x74\xc6\xfe\x91\x19\xdd\x05\x52\x74\x12\x44\xb1\x50\x0f\x9f\xec\xd0\xde\xa2\xdc\x55\x8c\x4d\x27\x9e\xfb\xfd\xb8\x7c\x68\x6d\x66\xd7\x64\xf7\x9e\xce\xda\x4d\xd5\x8e\x44\xc9\x04\x0a\x6b\x4e\xd4\xd4\x71\x2e\xb8\x3b\xb9\x53\xfa\xd6\xe9\x11\x4e\x77\xed\x13\xd6\x9a\x13\xf4\x19\x9c\xfc\x82\xdc\x60\x37\x6f\x2e\xde\x9c\xb2\xb3\x34\xf5\x97\x9b\x94\x06\x46\x65\xe6\xaf\x13\x18\x30\x5e\x88\xef\x40\x1b\xa1\x64\x8f\xdd\x0a\x99\xf6\x58\x29\xd2\x2f\x77\x27\xce\xa1\x75\xb8\x0b\xaa\x20\x57\x67\xc7\x3b\x71\x8d\x3e\x96\x59\x8b\x77\x55\x44\xc4\x71\x2d\x61\x0d\xe2\x66\xb0\x3a\x7b\x21\xa3\x23\xd0\x6c\x6f\xa2\x9f\x6f\xb8\x85\xdd\xd2\xd5\xc3\x9a\xb0\x92\x8b\xd3\x23\x6a\xa1\xd2\x53\x66\xca\xa2\x50\xda\x1a\x96\x83\xe5\x4e\xe9\x1d\x38\x0c\xeb\xb5\xff\x44\x5f\x55\x8f\xfd\x58\xfd\x88\x0e\x27\xf3\xfd\xe1\xe1\x1f\xbf\x79\xf1\xb7\x3f\x1f\x1e\xfe\xf0\x63\xf3\x29\xb2\x42\x8a\x02\x6a\xbf\x62\x0a\x48\x06\x52\xa5\xf0\x1a\xc7\xc0\x3f\x4d\xcb\xcd\xe2\x1f\x58\x6e\x4b\x33\x98\x28\x63\x2f\xaf\xaa\x3f\x0b\x95\xce\xff\x65\xf6\x90\x38\xd8\xe3\x64\x0c\xb8\x45\x57\xdc\x4e\x1e\x09\x7b\xa8\x69\x49\xc7\x47\xd5\xf7\xda\xbc\x44\x27\xe7\xf8\xcf\xaf\x02\x08\x9c\xf4\x74\xa7\x85\xb5\xe8\x7a\xf3\xa9\xe0\x6a\xd4\x73\xa7\xb6\x16\x3b\xa7\xcf\xf7\xae\x8f\xd2\x29\x69\xab\x76\xb0\x63\x80\x21\x44\x3c\xb4\xe8\x20\x57\x0c\x76\xd1\xc5\x7c\x76\x75\xc9\xa6\x04\xe1\x47\x03\x9c\x90\xde\xfb\xd5\x7b\xa5\x71\xd5\xa5\x4b\x1e\x54\x95\x86\x78\x4a\x41\x41\x55\x92\x31\xcb\x44\x2e\x7c\xac\xa1\xbf\xa0\xc9\xb0\x23\xfa\x71\x90\x14\x65\xcf\xbf\x30\xc8\x21\x57\x7a\x56\xfd\x09\xc5\x04\x72\xa7\x69\xf5\x8d\x55\x9a\x8f\xa1\x57\x7d\x4e\x9f\x55\x7f\xd1\x87\xad\x01\x16\xbf\x26\x55\xb8\x76\x95\x7a\x8a\x0c\xe9\xa7\x47\xdb\x02\xe8\x1f\x09\x69\xab\x30\xe3\xf5\x7b\x10\x09\x2b\x4b\x1c\x09\x9c\x15\x14\x51\x9f\x9c\xaa\xac\xcc\xc1\xf4\x2a\x31\x88\xac\x01\x72\xea\x34\x4b\xf3\xa8\x04\xb5\x54\x4c\x85\xe9\x22\x8c\x78\x89\x9c\x26\x7c\x44\xbe\x2a\x6d\x51\x5a\x5f\x6f\xa6\x71\xb1\x9b\x32\x68\xb7\xa8\x8a\x02\xb4\xc8\xfe\xf3\x83\xfd\xa3\xd1\xb9\xb5\xa0\xe5\x29\xfb\xdf\xa3\x77\xbf\xfc\xa9\x7f\xfc\xe5\xd1\xd1\xf7\xcf\xfa\x7f\xf8\xe1\x97\x47\xef\x06\xf8\x8f\x2f\x8e\xbf\x3c\xfe\x29\xfc\xf1\xcb\xe3\xe3\xa3\xa3\xef\xbf\x79\xf5\xf5\xcd\xd5\x8b\x1f\xc4\xf1\x4f\xdf\xcb\x32\xbf\xa5\xbf\x7e\x3a\xfa\x1e\x5e\xfc\xb0\x61\x27\xc7\xc7\x5f\x7e\xbe\xf7\xd4\xb9\x9c\xbd\xd9\x93\x80\x52\xeb\x77\x56\x2e\x68\xbe\xc7\x8e\xe2\xac\xef\xfb\xb5\xd2\xd4\x17\xd2\xf6\x95\xee\x53\xd7\xa7\xcc\xea\x72\x3f\x62\x52\x33\xa5\xae\xcf\x7f\xb8\xbd\xeb\xb4\x66\x48\x15\xbb\x7e\x34\x07\xdc\x40\xa2\xc1\x7e\x08\x4b\x0e\x8d\x14\xe4\x94\xb9\x98\xc7\x4f\x8d\xcf\xfd\x1c\x8c\x3b\x55\xc8\x20\xee\x6b\x2d\x89\x8e\xb4\xca\x07\xac\xe1\xde\x98\x62\xc2\x87\x7f\xef\x16\xf6\xb0\x82\x86\x16\x8d\x41\xd1\x18\xb4\xa2\x3d\x68\x0c\xba\x26\x3c\x7c\xb4\x96\x20\x90\xd3\x5d\x5d\x18\x4b\x3d\xe8\x41\xd7\xb1\x8a\x15\xaa\x28\x33\x6e\x57\x78\xc6\x96\xb8\xd3\xfd\x51\xaf\xe3\x91\xeb\x60\x1a\x62\x68\xf9\x72\x1f\x26\x3b\xcb\x32\x26\x24\x1d\x7c\xec\x20\x38\xcc\x34\x90\x6a\xc3\x38\xf9\xb3\xa7\x6e\x0a\x77\xbe\xac\x5c\x33\x2e\xc7\x30\x63\xb9\xb6\x18\x7b\x8c\x65\xe7\x88\x95\x78\xef\x93\x90\x75\xf1\xb9\x4a\x38\xac\x72\x41\x96\xde\x8c\x99\x71\x63\xc3\xb4\x71\x36\x96\xdf\xa2\xb7\x31\x81\x14\x64\x02\x98\x98\x56\x42\xbd\xd6\xa1\xd3\xdb\xd8\x0b\x39\xa5\x3e\x38\x4b\x4b\x0a\x06\x21\xf2\xb7\xbc\x8f\x4f\x2b\x00\xc1\x21\xe2\x75\xb8\xc0\xb8\x8a\x43\x40\xaa\x5f\x69\xd8\x55\x7e\x5f\x65\x65\x35\x1f\x27\xf2\x60\x7f\x9e\x59\x79\xb6\xf6\x12\x86\x16\x98\x65\x6d\x7e\x6e\x33\xc9\x4f\xc1\x19\xb8\x3f\xfb\xfc\xd9\xb1\xce\x8e\xd8\x66\x37\x2c\x73\x0b\xdf\x49\x97\x6c\xb2\x0b\x67\x49\xa1\x61\x24\xee\x3b\x3a\xa7\x67\xb2\xb6\xc4\x88\x14\xa4\x15\x23\x41\x77\xde\x17\x1a\x0a\x90\x69\x55\xb8\x14\x93\xc3\x65\x1b\x36\x8f\x32\x98\x87\x04\xee\x6e\x49\xd9\xf5\x32\x61\x3f\xd2\x31\x16\xe9\xd8\xce\xed\x03\xd1\x31\x8f\xb9\x8f\x87\x88\x61\xe4\xf9\xfe\xd1\xef\xe7\xed\x50\x76\x44\xe4\xad\x11\xad\xce\xec\x3a\xc1\x5e\x0c\x65\x49\x56\x69\xd8\x15\x69\xb4\x8a\x82\xd7\xd8\x44\x8c\x1d\x64\x33\x98\x42\xe6\xe5\x26\x96\x73\xc9\xc7\x94\xdf\x6d\x55\x30\xd5\x3a\x45\xcb\xe1\xb1\x16\xe9\x42\xdc\x3d\xca\xf1\x0e\xb7\x33\xc5\x53\x7c\xa8\x55\x96\x81\x36\x2c\x13\xb7\xc0\x2e\xa0\xc8\xd4\xcc\xa7\x6b\xcb\x94\x5d\x5b\x6e\x1d\x56\x5f\x83\xdd\xcd\xed\xbb\x17\xc6\xe2\x8c\xaf\xca\x2c\xbb\x52\x99\x48\x76\x32\xaa\xb4\x77\xee\x12\xf7\xab\x28\xb3\x8c\x15\xd8\xe5\x80\xbd\x91\x48\x34\xce\xb2\x3b\x3e\x33\x3d\xf6\x1a\xa6\xa0\x7b\xec\x72\xf4\x5a\xd9\x2b\x92\xbe\xdb\x01\x77\xf4\x22\x13\x23\x76\x8a\xd5\x6d\x2c\xb3\x7c\x8c\xba\x53\x70\x03\xf6\x1c\xfc\x9b\x1d\x10\x7d\xb8\x13\x66\xa9\xb2\xb2\x37\xe2\xfc\x02\x7b\x72\xb4\x8a\xfe\xfe\xe0\xdb\x94\x89\x11\x24\xb3\x24\xdb\xff\x68\x9d\x25\x18\xc0\x50\x67\x9c\x37\xf0\xdb\x57\x53\xf7\x39\x9e\xa8\x05\x0a\xc9\xa8\xcc\x39\xd5\x6f\xaf\x51\xbd\x9a\x11\x69\xbb\xa6\x53\x25\x71\x67\xe6\xb9\x2f\xdb\x2c\x94\xb1\xd7\x4e\x43\xef\xa4\x18\xfa\xe1\x55\xe8\x8e\x61\xc9\xe7\x2c\x83\x94\x89\x3c\x87\xd4\x69\xf1\xd9\x8c\xf1\x91\xc5\x5c\xdb\x96\x85\x20\xd1\x40\x58\xeb\xab\x98\x4c\xb8\x4c\x33\xd0\x6c\xc4\x45\xe6\xed\x01\xad\xf7\x2d\xe8\x5c\x48\x34\x0b\x90\x47\x16\x4d\x0c\xee\xaf\x24\x51\x3a\x94\xa7\x17\xd6\x84\x47\xf5\xc1\x44\x3e\xd2\x40\x80\x79\xd7\x32\x1b\x66\x2a\xb9\x35\xac\x94\x56\x64\x34\x19\xa5\x6e\x59\xa2\xf2\x22\xc3\xa3\xb3\xc7\xc9\xaa\xfe\xd9\xaf\x50\xa9\xef\x7a\x37\x27\xbf\xa8\x1f\xe1\x0f\xbb\x32\xf4\x0e\x04\xb1\x2e\xc4\x30\xb8\x87\xa4\xb3\x3c\xff\x17\xf7\x90\x34\x0a\x4b\xe0\x7d\x0c\x78\xa2\x31\xcf\x93\xdf\xc2\x27\x54\xc9\x6e\x8f\x5c\xba\x66\x6b\xc1\xef\x9c\xfa\x0c\x85\xb0\xfc\x10\x2c\x13\x12\xe9\x9b\xcf\xaf\x63\x42\x1a\xc7\xd9\x5b\x87\x81\x8e\x9e\x17\x5a\x59\x2a\x34\x56\x41\x98\x55\x81\xd4\xa1\x2f\x2c\x30\xa0\x94\x65\x47\x87\x27\x87\xc7\x0b\xf6\xc7\x43\x27\x81\x64\x40\xb4\x36\x24\xee\x55\x93\x32\x22\x2f\xb2\x19\xce\xe3\x30\xed\x31\x61\x43\xa4\xb5\x2e\x65\x98\x95\x4f\xfa\xeb\x31\xa3\x98\xd5\x3c\x54\x57\xa1\x5f\xdd\x4b\x56\x97\x9e\xca\x1f\x1d\xfe\x74\xd8\x63\x60\x93\x63\x76\xa7\xe4\xa1\xc5\xe9\x0f\xd8\x8d\x72\xa2\x74\xdd\xd1\x4c\x95\x4c\x02\x05\xf6\xc3\x7d\x91\x89\x44\xd8\x6c\x86\x14\x8b\xa9\xd2\x52\x0e\x31\xb7\x21\xd9\xf0\xc5\xbd\xb0\x3e\x5e\xcd\x91\x8c\x67\x08\x4d\xa2\x5a\x8c\x3b\x31\x67\x0a\x27\x13\xe0\x99\x9d\x50\x90\x88\x54\xb2\xff\x2f\xd0\x0a\x73\x10\xa5\x7f\xf2\xc9\x55\xfd\xeb\x44\x73\x70\x44\xf4\x6b\xe8\xee\x12\x9f\xbf\xdc\xdc\x5c\x7d\x0d\x76\x8e\x64\xb8\x51\x42\xe8\x0e\x5a\x03\x40\x8f\x94\xce\x1f\x01\xed\xe8\xc6\x59\xd9\x67\x85\xd2\x8f\x81\x84\x4d\x94\xd9\x6b\x2f\xd9\xc2\x7e\x2a\x63\x51\x1b\xf2\xd2\x98\x84\xc4\xed\x60\x3b\x86\x24\xdc\x73\x73\x79\x35\x60\x7f\x53\xa5\x5b\xcd\x90\x0f\xb3\x59\x55\x89\xc1\x80\x65\x07\xae\xab\x03\x47\x9e\x1c\x36\xfc\x05\x78\xea\x54\x14\x47\x3d\x80\x3f\x8e\xfb\xac\x98\x3f\x0f\x7e\x6e\xdd\xf2\x81\xd2\x58\x95\xb3\x89\x5f\x76\x3b\xf5\xd2\x9f\x8c\x01\x9e\x9e\x90\xd7\xa4\xa1\x20\x0a\xe7\xbf\xf9\xe4\xe8\xd7\x02\xdd\x20\xb8\xfb\xdf\x87\x58\xc6\x2a\x69\x82\xcd\x5f\xe8\x44\x89\x41\x92\x80\xe5\x50\x0d\x76\x73\x95\x34\xdb\x23\xae\x3d\xba\x73\x22\xe7\x7c\x47\xe8\xd4\xdb\x3f\xd6\xab\xd3\xca\xa3\xdd\xc4\x0d\xb0\x65\x46\x56\x8f\x33\x64\x7d\x21\x7b\x0e\x9a\x63\x82\x0f\x35\xe1\x52\x49\x91\xf0\x4c\xfc\x0b\x52\x56\x16\x4a\xfa\xf8\x39\x94\x73\x12\x6e\xa0\x8f\x4e\x5d\x69\x7d\xcd\xb4\x3a\x5b\xd1\x1d\x47\xab\x14\x0a\x1f\xe8\xc6\x73\xf4\x91\xc6\x7b\xbc\x05\x36\x3f\x04\x98\xbb\x41\x31\xd6\x25\x04\x8a\x0e\x02\xc8\x17\xc3\xc7\xad\x72\xda\x2e\x26\x78\x12\x09\x47\x62\x64\x40\x4f\xf7\x47\x81\xee\x96\xae\x76\xb7\x2b\x84\xb6\x24\x1b\x5b\x33\x59\xe6\x43\xd0\x75\xfe\x8b\xb6\x8b\x00\x69\xc4\x3f\xbc\xa6\xd7\x83\xd1\xb8\x7d\x49\xa3\xfb\xf2\x77\xbf\xfd\xed\xaf\x7f\x3b\xa0\xee\xab\x58\x08\xc9\x2e\xcf\x5e\x9f\xfd\xfd\xfa\xbb\x73\x4c\xc1\xdd\x17\xaa\x1d\x05\x7a\x76\x1d\xe6\xd9\x69\x90\xe7\x7b\x0d\xf1\xc4\xc4\x92\xbd\xa9\x48\xdb\xc3\x80\x5d\x3a\x0c\x70\xda\xa1\xd3\x6b\xbd\x84\xd9\x28\x89\xe6\x24\xda\xb6\xb9\xd6\x1d\xb5\x47\x71\xc6\x6c\x52\x5c\xab\xe4\xb6\x43\xed\xe9\x02\x0a\x0d\x09\x59\xe3\x6e\xce\xaf\xa8\x77\xa7\xc5\xbe\x7e\x73\x53\x27\x34\x60\xd4\x0f\x7b\x19\xac\x58\x7f\xf1\xf6\x3a\xa7\xf9\xde\x42\x61\x2b\x03\xc1\x90\x27\xb7\x77\x5c\xa7\x68\x3f\xe3\x56\x0c\x45\x26\xa8\xc4\x70\xb8\x7a\x52\x2a\x0a\x2b\xa4\x52\x6a\x6a\x34\x5f\xc0\xb3\x36\xba\xa2\x61\x8c\x58\xe0\x88\x8b\x0c\xed\xb4\xa5\xb4\x22\x07\x1f\x77\x94\x14\x95\xe1\xb0\x69\x39\x8f\x2a\x5e\x68\x8f\x56\xc5\x3b\x7c\x13\x7c\x87\x5b\x6b\x7b\xfb\x46\x3f\x3e\x62\x56\xe7\x59\x1c\xa5\x9d\x44\x56\xf7\xb3\x60\x75\x85\x86\x6b\xab\x8a\x8e\x7c\x31\xd4\xd9\x0a\x4f\xcc\x10\x46\xca\x11\xe1\x95\xae\x95\x70\x13\xb1\xc4\x14\xc4\x60\x3b\x53\x2d\xf7\x09\xc5\x7d\x9a\x32\x99\x04\x33\xa8\x04\x63\x4e\xd0\xe9\x52\x16\xa4\x1b\x23\xb9\x2e\x35\xf4\xdc\xea\x20\xc7\xd9\xf5\xea\x5c\x0a\x37\x3c\x48\xfa\x11\x6c\x42\xf6\xe1\x06\x21\xc7\xf2\xa3\x7e\xfa\xf3\xce\x9a\x44\x73\x33\x01\x2c\x62\x02\xf7\x22\xdc\xb9\x72\xa5\xd2\xc3\xc3\x7a\x29\x8e\xb1\x8c\x35\x4f\x80\x15\xa0\x85\x72\xcc\xa8\x94\x36\x55\x77\x92\x0d\x61\x2c\xa4\x09\xa0\x70\x7d\x07\x98\xa1\xd7\x47\x98\xaa\xfc\xdc\x80\xbd\x6d\x95\x54\xf1\xc9\x4e\x89\xaa\x8f\xa6\x9f\xf3\xbc\xbf\x0a\x39\x56\xe3\x62\xe6\x0a\xc2\x21\x08\xd7\x6e\x30\xe5\xa3\x52\xe2\xc8\x29\x64\x7c\x46\x31\xad\x23\x21\x51\x73\xd4\xe6\xb8\x03\xbf\x96\x03\x61\xfd\x6c\xe5\x3c\xf0\x42\x00\x9e\x4c\xf6\x73\x31\x47\x47\xd8\x86\x2d\x3a\xc2\xf6\xe9\x24\x3a\xc2\xa2\x23\xec\x81\x16\x1d\x61\xd1\x11\x36\xd7\x1e\xad\x96\x14\x1d\x61\x3b\xb7\xe8\x08\x5b\xdf\xa2\x23\x6c\x83\x16\x1d\x61\x1b\xb6\xe8\x08\x5b\xdd\xa2\x23\x6c\xbf\xc9\x44\x47\x58\x74\x84\xf9\xf6\xf3\xb3\x0e\x86\x16\x1d\x61\x0b\x9d\x44\x47\x58\x74\x84\x6d\xdc\x1e\xad\x8a\x17\x1d\x61\xd4\xa2\x23\xac\xdd\x7e\x5e\xac\x2e\xb8\x91\xae\x9c\x42\xb9\x7f\x7e\xde\x15\xba\x2e\x44\xe2\xbd\x51\xcd\x0b\xf0\xaa\xa1\x1a\x77\xde\x35\x4a\x9c\x84\xb4\x22\xef\x77\xaa\xbd\x59\x4b\x73\xbf\xb6\x75\x88\x84\x84\x49\x73\x52\x28\xfa\xbf\xda\x1d\xd2\xf0\x83\x90\x5a\xbd\x7b\xfe\xdd\x47\xcb\x2c\xdb\xc7\xf9\xf1\x61\x1c\x1f\x8f\xc4\x4b\xd4\x81\xb3\x23\x3a\x3a\x3e\x39\x47\xc7\xa7\x73\x03\xb0\xf7\xff\xdf\x4c\x34\x98\x89\xca\x76\x46\xf4\x16\x92\xbf\x12\x52\xe4\x65\xee\x70\xce\x38\x7c\x16\xd3\x2a\xd0\xc0\x54\xe8\x4a\x14\x9b\x6c\x95\xee\x45\x91\x02\x16\x6e\xe5\x22\x73\xdb\x88\xb9\xa8\x13\x3e\x75\xb8\x6e\xca\x24\x01\xc0\x6b\xe1\x9a\x1a\xce\xaf\x07\xd5\x48\xd5\x35\x20\xcf\xf7\xa3\x37\xfb\x31\x71\x2a\xad\x8a\xbd\xfc\xfa\x57\x3b\xf5\x31\xd6\x45\x37\x74\xf9\xeb\xb7\x57\xe7\xcd\x2b\xbf\x65\x20\xcb\x42\x4e\x55\x86\x50\xe5\xf4\x92\x13\xd6\x3e\x22\x91\xde\x5f\xed\xd8\x4b\xe5\xe8\x82\x47\xec\x2b\x55\xb7\xed\x66\x4e\x76\x6e\x5b\x8e\xc6\xb8\x97\x54\xc1\x7f\x63\xd9\x79\x6f\xea\xb6\xbf\x3c\xbb\xff\x71\x60\x58\x62\x07\x17\xde\x19\x80\x0f\xfc\x95\xd3\x81\x05\x37\x15\x97\x70\xab\x95\x55\xac\xc8\x78\x7d\x2f\x15\xee\xc0\x5f\x90\x6f\x9c\x4f\x20\xb9\x7d\xeb\x7d\xb4\x47\x06\xa0\x92\x27\xc7\xc2\x4e\xca\xe1\x20\x51\xf9\x89\x3b\xc6\xf4\x7f\xc3\x4c\x0d\x4f\x72\x6e\x2c\x68\x27\x62\x7a\xb6\xd4\x4f\x5c\x2f\x42\x8e\x07\x79\x7a\x3c\x60\xef\x24\x65\xd7\xd7\xf7\x60\x36\x6a\x4b\xb8\xf1\x43\x9d\x8f\x21\x38\x8a\xa8\x74\xf3\xfa\xf2\xe1\x0c\xa7\x37\xd8\xa7\x50\xf3\xde\x6c\x64\x4f\xff\xf8\x87\xf7\x8d\x47\xca\xc5\x3a\x30\x92\x3c\x35\x1f\x78\x67\xb1\x20\x1d\xf8\xbe\x1f\x91\xdf\xfb\xd1\x88\xb3\x8f\xc5\xd7\xfd\x08\xab\x5d\x77\xe0\xdf\xee\xc2\xb7\xdd\x9d\x5f\xfb\x3d\x14\x85\x7e\xca\xfe\xec\x0e\x8d\x7e\x1d\xf9\xb1\x3f\x84\x0f\xbb\x93\x55\xef\xeb\xbb\xfe\x70\x7e\xeb\x6e\x96\xdb\xa5\xba\xf1\x54\x7d\xd5\x1d\x18\xef\xbb\x34\xdc\x77\x66\xb4\x7f\x6f\xbe\xe9\xfd\xfd\xd2\x8f\xc0\x27\xbd\x37\x90\x85\x14\x56\xf0\xec\x02\x32\x3e\xbb\x86\x44\xc9\x74\x67\x3e\x36\x57\x8b\xb4\x3a\x3f\x86\xba\xf5\x16\xac\x76\xa2\xc7\x84\xfb\x92\xeb\x4e\x6f\xa3\xc4\x96\xe0\xe5\xf0\x62\x0b\xfa\x9b\x69\x96\x8f\xd2\x6f\xc1\x1e\x8d\xa9\x8c\xb2\x5e\xba\xdc\xc4\xbf\xa8\x3b\xa6\x46\x16\x24\x3b\x12\x32\xec\xe3\x71\x43\xd9\xac\xed\x96\x15\x5a\xbb\xa7\xcf\x9f\x85\x97\x3f\x3d\x83\x24\x9a\x5e\x8d\x79\xff\xf6\x61\x3f\xd0\xc3\x06\x62\xff\xe2\xa8\xcc\xda\x46\x62\x32\x1c\xb7\xe9\xcd\xf3\xba\x68\xf4\x73\xec\xb7\x3a\x6d\x5c\xa6\xcc\x67\xc2\x7d\x7a\x9b\xb6\x77\xc4\x4d\x5b\xf4\xab\x22\x6c\x1e\xb2\x27\xdf\x9c\x5f\x45\x73\xf2\xe3\x32\xca\x7c\xa4\xa8\x95\x47\x28\xe8\x3e\xd1\x48\x95\x28\xe8\x6e\xd1\x1a\xb9\xb1\x5f\x6b\x9e\xc0\x55\xe7\x32\x42\x38\x4e\x2c\x2d\x35\xf7\x04\xb0\x12\xf9\xc2\xe1\x91\x00\x29\x9d\xa6\x2a\x9f\x18\x33\x75\x47\x65\x96\xcd\xc8\xe6\xd0\xca\xbe\x26\x2f\xfc\x7c\x32\x2f\x1a\xfe\x97\x8c\x52\x0b\x96\x85\x56\x9e\x67\xea\x52\x4a\x47\x83\xeb\x9b\xdf\x50\x90\xc4\x62\xd4\xbc\x95\x32\x6c\xc4\xd8\x4d\xdf\xf1\x3f\xcc\x26\xae\x43\x13\x5b\x1d\xba\xaf\x47\x4a\x27\x62\x98\xcd\xd8\x84\x67\xd5\x35\x3f\x9c\xdd\x8a\x2c\xf3\xdd\x0c\xd8\x35\x58\x72\x5c\x10\xef\xcc\x94\x1c\xe3\xe4\xb8\x0c\xd7\x4b\x42\xe2\xbe\x4d\x32\xe0\xb2\x2c\x68\x3c\xc7\x89\x67\xaa\xd4\x61\xbc\x41\xe5\xfe\xa8\x38\xb0\x14\x59\xaf\x71\x89\xdd\xda\x8d\xad\x4d\x34\xc6\x09\x00\x6f\x42\xf1\xed\x5e\xb3\xcf\x50\x1f\xdd\x34\xae\x30\x2a\xb4\x9a\x8a\x94\x7c\x28\x01\x6c\x78\x5d\x36\x5d\x53\x54\x9d\x67\xa9\x64\x5f\xc2\x98\xa3\xa0\xe2\x4f\x11\xed\x19\xf5\x43\xb1\x05\x32\xc5\x8b\x8b\x9c\x84\xaf\x8a\x56\x3a\xff\x54\xd0\x95\xcb\x0d\xc8\xb1\x23\xa9\x98\xc2\x48\xd5\x52\x0a\x4b\xd7\xf8\x4f\x4a\xcb\x52\x75\x27\x8f\xbd\xcd\x4a\x18\xc6\xd9\x10\x2c\x6f\xc4\x9a\x7a\x06\x67\x18\x48\x3e\xcc\xdc\x9e\x63\x28\xd6\xcd\x52\x00\xb1\x11\x70\x5b\x6a\x60\x63\x6e\x61\xa9\x9c\x43\xeb\x5d\x0f\x5e\x61\xbc\x81\x75\xc4\x4a\x69\x60\x4f\xf6\xde\x99\x70\xf4\xbb\xdf\xec\x46\x23\x44\x0e\xaa\xb4\x1f\x44\xfb\xbb\x9b\x88\x64\xd2\x14\x66\x45\x0e\x86\xa9\x72\x4e\x2d\x7e\xee\x3f\x5b\xbe\x43\x51\x05\x5c\xd6\x76\x35\x1f\x2f\xb1\x7e\xcd\x97\x63\xa8\xef\xf7\xc6\x08\xf2\x8b\xd7\xd7\x7f\x7f\x79\xf6\x3f\x2f\x5e\x0e\xd8\x0b\x9e\x4c\x9a\x35\x39\x24\xe3\x48\x34\x90\x50\x4c\xf8\x14\x18\x67\xa5\x14\xff\x2c\xbd\x5b\xf9\xa8\xfa\xf6\xb8\xd3\x8a\xf4\x3b\x72\x5f\x47\x6d\x76\xc2\xf8\xa5\x97\xde\x61\x6f\x3e\x62\x4b\x19\xc0\x6b\x6a\x16\xc4\xa7\xca\x97\x3d\x23\x15\x01\x05\x2e\x0c\xac\xbf\x78\xf3\xe2\x1a\x03\xf6\x0b\x4d\x95\x4a\x30\xc2\x0b\x9f\x63\x4f\x43\x70\x5f\xf8\xfb\x89\x07\xec\x4c\xce\xe8\x21\x9d\x29\x61\x58\x26\x8c\x05\xe4\x7a\x5e\x6c\x0b\x5e\xf2\x83\x67\x03\xfc\xdf\x01\xe3\x69\xaa\x9d\x5c\x57\x05\xae\x25\x0b\x91\xa4\x24\xf9\x89\x61\xd6\x58\x80\x04\x4b\x71\x6a\xaf\x54\xea\x67\x8e\x9c\x04\x3d\x64\xc4\x06\x8d\xd5\xdc\xc2\x58\x24\x2c\x07\x3d\x06\x56\x70\x9b\x4c\x58\xce\x67\x2c\x51\x5a\x97\x05\xdd\x66\x90\x72\xcb\x07\xec\x2b\xa5\x59\x1e\x0e\xb1\xc3\x79\xc7\x87\xaf\x97\x47\x0e\xd4\x27\xbb\xf9\x4f\x61\x4c\x09\xe6\xe4\xf9\xb3\xdf\xff\xea\xb7\xbf\xfd\xa4\x2e\xc0\xab\x42\x7b\x31\xee\xa5\x71\x01\x1e\x0f\xbb\x40\xbb\x4e\x17\x22\x0a\x39\xce\x9a\xf8\xb5\x1b\x03\xd8\x57\xcb\xdc\x57\xc7\xec\xd7\x2b\xb8\xda\x55\xd5\xec\xe4\x22\xbe\x7a\x0e\x1d\x5d\x5f\x55\xf3\xc1\xa0\x58\x79\xda\xa0\x9a\x37\x12\x5f\x5e\x85\x83\xe9\xe5\x9c\x7c\xee\x1a\xdb\xa2\x8e\x81\xea\xb1\x67\xec\x8f\xec\x9e\xfd\x11\x15\xad\xdf\xed\x7b\xd9\xd7\xbe\x2a\x50\x17\x21\x4d\x4e\xbf\xbf\xbc\xea\x08\xe2\x7f\x75\x44\xd3\xf5\xe8\xa0\x6a\x15\x1b\x0a\x2f\xd8\xc3\xbd\x05\xed\x04\x4d\xbf\x13\x1f\xf5\x9a\x34\x37\xc1\x0f\x88\x66\xe4\x78\xb8\x1c\xb5\xc3\xa8\xb6\x43\x34\xf7\xf9\x5f\x94\xb1\xaf\x3d\x15\x6a\x5f\xf8\x53\xf7\x96\x23\xe1\x6f\x91\x31\xc7\x37\x8c\xad\x0f\x98\x61\xa9\xc2\xa8\x2e\x0a\x71\x9e\x88\x3d\x82\x35\x1e\x0f\x1a\xef\xe7\xbf\x6f\xed\xe7\xba\x9d\x9a\x33\xa5\xa0\x0e\xe4\x45\xac\x46\x8d\xae\x42\xa5\x5e\x3a\x73\xd3\x4a\x1b\x3c\x63\x8d\x78\xe6\xad\x36\x95\xbd\x19\x71\xc9\x9d\xa7\x84\x4b\x4a\x32\x19\x81\xd6\x14\x95\x3e\x9c\x85\xe0\xc0\xbd\x37\x6f\xaf\x93\x54\x68\x65\x55\xa2\xf6\xb8\xc9\xad\xed\xed\xf6\xdd\x21\x10\x0a\xc2\x5d\x0f\xf9\x6f\x2f\xae\x7a\xec\xe6\xfc\x0a\x6f\xb7\xba\x3e\xbf\xb9\x6a\xeb\x2c\x07\x37\xe7\x57\x07\x1f\x15\x14\x2c\x08\x7c\x68\xa2\xde\xa1\x93\x96\x09\xca\x49\x93\xfd\x9c\x17\xfd\x5b\x98\xed\xc8\x53\xbb\xe0\xeb\xfd\x6a\x87\x3b\x59\x10\x81\x39\xe7\xc5\xd6\xbd\x69\xe0\xa9\xf8\x40\x99\x5e\x21\xec\xb6\x1a\x73\x79\xca\x57\xae\xa6\x90\x92\x94\x1e\xbe\x00\x99\x16\x4a\x38\x79\x31\xe6\x81\x6d\xff\x75\xcc\x03\xdb\xb8\xc5\x3c\xb0\x98\x07\xb6\xd8\x1e\x4d\xe0\x6c\xcc\x03\xfb\xb4\x3c\xf8\x31\x0f\x6c\xfb\xf6\xd1\x1d\xf7\x31\x0f\x6c\x79\x8b\x79\x60\x31\x0f\x6c\xb3\x16\xf3\xc0\xb6\x6f\x8f\x2e\xe4\x28\xe6\x81\x6d\xd5\x62\x1e\xd8\x62\x8b\x79\x60\x2b\x5a\xcc\x03\x5b\xd1\x62\x1e\xd8\x62\x8b\x79\x60\xdb\xb5\x98\x07\x16\xf3\xc0\x3e\xe9\xf0\x58\x16\xf3\xc0\x7c\x8b\x79\x60\x9f\x44\x10\x20\x8b\x79\x60\x1b\xb5\x98\x07\x16\xf3\xc0\x76\x69\x31\x0f\xec\x53\x31\xca\xc4\x3c\xb0\x98\x07\xf6\xf3\x11\x74\x63\x1e\x58\xcc\x03\x8b\x79\x60\x31\x0f\x6c\xed\x2c\x62\x1e\xd8\xa7\xa0\x02\x6a\x30\xe2\x5f\x70\xa5\x32\x91\xcc\xf6\x8e\x52\x7c\xeb\x2f\x3e\x36\xbe\x5b\x56\x60\xbf\x8d\xd0\xaa\x3d\x32\x4f\x1e\x59\xc2\xcd\xdb\x06\xe0\x9a\x89\x37\xd5\xe5\xcf\xef\x01\x04\x8f\x22\xf9\x26\x2c\xf0\xf5\xee\x9e\x94\x7e\xb8\x80\x80\xc0\xb7\x9b\xdd\x62\x6f\x15\xa1\xb9\x90\x8e\xe2\xc1\x0f\x9b\x19\x91\x15\x26\x58\x55\x51\x30\xb1\x12\x41\x78\x51\x64\x02\xcc\x80\x5d\x57\x17\xf0\x20\xf5\x32\xa7\x2c\x29\xca\x1e\xcb\x21\x57\x7a\xb6\x87\x36\xd1\x81\xc0\xd9\xda\xb5\x8e\x40\xf6\x96\xfa\x0c\x60\x70\x4a\x44\x51\x64\x33\x12\xa6\xea\x54\xd2\x0a\x6a\x22\x10\x97\x14\xc5\x9d\xb9\x28\x0f\x61\x5b\x6a\xd8\x6b\x65\xdf\x7a\x84\xff\x68\xb1\xf6\xab\xa2\xca\xb9\x55\xb9\x48\x76\x21\xd8\x44\x63\xf7\x8f\x29\x3f\x57\x79\x51\x5a\x68\x91\x6d\x02\x16\x49\x72\xc2\x34\x55\xb8\xfd\xa3\xc1\x13\x25\x47\x62\xec\x45\xf1\x13\xba\xd1\xbd\x5f\xad\xa7\xdf\xb8\x45\xfd\x09\x86\x82\x27\x19\x17\xbb\xfb\xed\xdb\xa1\x55\xe7\xd8\x17\x66\xe8\xd6\xc1\x55\x18\xa3\x5b\x41\xab\x57\x05\x2e\x09\x3a\x26\x83\xf0\x88\x3e\xee\x51\xa4\xaf\xd3\x3f\x50\xe8\x5c\xb2\xa1\xef\x64\x2d\x1e\x4b\xc6\xb3\x62\xb2\x5e\x40\x76\x13\xb9\x98\x49\x9e\x8b\x24\x60\xcc\x59\x96\xa9\x84\x14\xa2\xb6\x88\x1c\xfa\xa6\xfe\xdc\x20\x79\x5e\x5a\x3e\xcc\x60\xc0\x2e\x29\x43\x48\xc9\x6c\xe6\xb0\xc9\x80\x0d\x8e\x0f\xbf\xfd\x3b\xc7\x60\xed\x1f\x80\xb1\x67\xf0\xc5\x52\x69\x08\x37\x84\xb2\xa1\x40\xba\x53\xa6\x24\x30\x90\x56\xcf\xdc\xde\x5d\xa9\xf4\xda\x6d\x5f\xeb\xed\xbd\x93\xa4\xf6\x8c\xb9\xe8\x22\xde\x62\xcf\x58\x8b\x6e\x22\x24\xf6\x8f\x8e\x58\x74\xf3\x36\xf2\x16\x9b\x81\x8f\xad\x5d\x2d\x54\x3a\x58\x72\x2a\x83\x68\x70\xa5\x52\xc7\xe0\x34\x34\xaf\xc2\xf3\xfa\x21\x1e\x90\x9c\xdf\xa2\x8a\xcd\x6d\xcd\xf9\xf8\x94\x8b\xcc\x1d\xa1\x25\xf9\xf8\xfb\x05\x4e\x74\x20\x1a\x74\x9d\x0c\xc6\xf6\xc5\xa0\x2e\x93\xb9\x18\xde\xdc\x95\x8b\xdd\xaa\x3f\xb0\x05\xc6\xfb\x12\xfb\x6a\x84\x63\x39\x9c\xc8\xf9\x3d\xea\xac\x3c\x57\xa5\xb4\x94\xe1\x45\xfc\xb9\x22\xfa\x14\xb4\xf6\xe8\x38\x2f\xeb\x86\xec\xf0\x34\xa4\xc0\x5c\x75\x11\x4d\xce\xad\x05\x2d\x4f\xd9\xff\x1e\xbd\xfb\xe5\x4f\xfd\xe3\x2f\x8f\x8e\xbe\x7f\xd6\xff\xc3\x0f\xbf\x3c\x7a\x37\xc0\x7f\x7c\x71\xfc\xe5\xf1\x4f\xe1\x8f\x5f\x1e\x1f\x1f\x1d\x7d\xff\xcd\xab\xaf\x6f\xae\x5e\xfc\x20\x8e\x7f\xfa\x5e\x96\xf9\x2d\xfd\xf5\xd3\xd1\xf7\xf0\xe2\x87\x0d\x3b\x39\x3e\xfe\xf2\xf3\x9d\xa7\xbc\xb7\x8d\xba\x3b\x0b\x75\x47\xf6\xe9\xf7\x62\x9d\xf6\x71\x9c\x1d\x9d\x45\x1f\x83\xbe\x70\x1a\xbd\x05\x69\xdd\x69\x0c\x5c\x12\x15\x91\xaa\x1f\x61\x98\xca\x85\x75\x0a\x9c\x13\x6b\x78\x33\xf3\x6c\x4e\x3d\xf1\x74\x00\x73\x2f\x39\xa6\x88\x35\xb2\xb6\x1a\x5a\x8d\x0a\xa6\x58\x54\x8f\x24\x13\x79\x91\x41\x0e\xd2\xe2\x79\xee\x07\x49\x10\xf5\xc5\x41\x3d\x93\x84\x24\x76\xb8\x4f\x00\x52\x3f\x58\x24\x1d\x0f\xb7\x48\x3a\x3e\x45\xd2\x61\x20\x29\xb5\xb0\xb3\x73\x25\x2d\xdc\xef\xe4\x11\x6d\x53\x8e\xeb\x76\x87\x5e\x21\xf3\x31\xad\xfe\x19\x53\x05\x65\x70\xce\x95\xc8\x9a\xa8\x32\x4b\x31\x2d\xbb\x94\xe8\x10\xa2\x7a\x1b\x60\xc9\x5b\x83\x02\x21\x4a\x8b\xf3\x83\x04\xff\x0b\xb9\x85\xfe\x59\x8a\x29\xcf\x40\xda\xc6\x17\x57\xe8\x71\x68\x7e\xb4\xe9\x99\xb7\xdc\xdc\xd6\x07\x1e\xfa\x85\x4a\xeb\xf3\x7d\x12\x96\x84\x3f\xc1\xbd\x7d\x8a\x4a\x3a\xca\x4f\x57\x5a\x4c\x45\x06\x63\x78\x61\x12\x9e\x21\x5d\xeb\x86\x95\x9c\xad\xe8\x1d\x37\x5e\xab\xcc\x38\x99\xdf\x91\x72\xc6\x83\xcb\x0e\x35\xe1\x31\x17\x92\x2a\x5c\x15\xe1\x63\x43\xbe\x3f\xc7\x1d\x0a\xae\xdd\x06\x57\x3e\x3e\xd4\xab\x87\x4a\x65\x3e\x77\x39\x9b\xd5\xfd\xfb\x2c\x7e\xa9\xfe\x2e\xe1\xee\xef\xae\x37\xc3\x46\x19\x1f\x57\xae\x3d\xa7\x6c\xcf\x7b\xe7\xeb\xae\x57\x2e\x00\x13\x83\x4b\x60\x3c\xbb\xe3\x33\x53\x3b\x3a\x1b\xb5\xdc\xcc\x29\x7b\x7e\x8c\xe8\xcc\x0d\xab\xfa\x48\xd9\xaf\x8e\x31\x5c\xef\xfc\xec\xea\xef\xd7\x7f\xbb\xfe\xfb\xd9\xc5\xab\xcb\xd7\xec\xb5\xb2\x40\x3c\xaf\xa1\xff\x24\x95\x81\xc9\xcd\xb2\xb2\xff\x0d\x94\x19\xa0\x8e\x85\xd1\xe7\x32\x55\x77\x66\x67\x2b\x28\xa1\x9f\x03\x1e\x70\xb9\x9b\x99\x87\x17\x1c\x6f\x38\xdf\x83\xc3\x2c\x44\x84\x37\x3b\x45\x16\x9f\xa6\x27\xa9\x56\x05\x01\x21\x38\xa5\x1b\x06\x92\x96\xdb\xab\x99\xd9\x86\xfb\x3b\x6a\x77\x38\xd6\x5c\xda\xda\x3b\x5b\xef\x99\xbf\x5a\x7d\xb0\xf7\x76\x7c\x3c\xc6\xdf\x85\x95\x80\xa7\xdd\xd5\x25\x38\x4b\x53\x48\x5b\xe0\xff\xe4\xf2\x89\xce\xc3\xe2\x1a\x6e\x2f\x76\xf5\xe6\xfa\xf2\xff\x9b\xc3\xe3\x59\xb1\x5f\x62\x43\x37\x35\x6e\xb4\x2a\x3a\xdb\xdd\xb7\xbe\x86\x4a\xdc\xdf\x47\xb1\xbf\x15\xb7\xec\x26\x9c\xf6\x6d\x29\xdb\xc5\x49\xeb\xfe\x59\xae\x52\x18\xb0\xab\x2a\xae\xa7\xfd\xb4\x51\xaa\x8c\x6b\x60\xee\x15\x69\x05\xcf\xb2\x59\x53\x44\xb3\x8a\xea\x89\xb4\xaa\xac\x35\x09\xf9\x88\x67\xe6\x63\x53\xe3\x7d\x78\xa3\x93\x23\x5e\x39\x75\xb9\x93\xed\xa8\x7a\x63\x29\x48\x65\xbd\x60\xed\x66\x89\x95\xeb\xb4\x4a\x18\xe9\xe6\x8d\xe4\x89\x16\x7f\x33\x14\x5b\x14\x58\xa3\x30\x01\xd8\x57\x55\xcf\xe4\x96\x2d\x0d\xcc\x0b\xe8\x9e\x35\xd6\xda\xba\xeb\x5d\x03\x4f\xd1\x6b\x51\x70\x3b\xa1\xd8\xe7\x9c\x9b\x5b\x48\xe9\x07\x2f\x9a\x55\x8e\x13\x34\xf4\x86\xa1\x6e\xdc\xbc\x83\x8f\x04\x45\x32\x8a\xc8\x46\xef\x0a\xa4\x1f\x79\xd7\xf7\x38\x84\x0e\x28\x6f\x64\x36\x7b\xab\x94\xfd\xaa\x2a\x88\xd3\x09\x06\xfc\xd5\x4b\xcb\x6d\xc7\x15\x8a\x93\x1c\xc7\xed\xe3\x6e\xe0\xa1\x6a\xd6\xe2\xb9\xa8\x77\xfc\xa9\x1f\x29\x5d\xca\x33\xf3\xb5\x56\xe5\xce\x4c\x6c\x41\xd8\xfc\xfa\xf2\x02\x49\x51\xe9\x43\x0b\xa5\xd5\x33\x2c\x02\xb6\x58\xc9\xb9\x52\x0c\xbe\xf5\xc1\x91\xcd\x33\x51\xc7\xb1\xb1\x57\x7c\xc6\x78\x66\x54\x80\xa5\x77\x6b\xcd\x6b\xa1\x5e\xc5\x75\x8f\x87\xca\x4e\x16\x74\x5b\x77\xa0\x16\xbf\xeb\x35\x22\x0d\xeb\x78\x00\x21\x17\x3e\xb7\xe8\x33\x29\x34\x24\x90\x82\x4c\x3e\xf6\xb6\x7f\xec\x00\x3d\x44\x9d\xd7\x4a\xba\x83\xd9\x09\xf2\x5c\x56\x91\x99\x1e\xa4\x4d\x54\x41\xa7\x98\xd7\xfe\x38\x46\x7a\xe2\xb1\x2c\x0d\x68\x0a\x4b\xd5\x25\xd0\x4e\x7e\x53\x0e\x21\x73\x90\x77\x2a\x29\xd6\x11\xe5\x96\xcc\x19\x22\xe7\x63\x60\xdc\x56\x98\x66\x15\x03\x69\x4a\xed\x37\x51\x58\x96\x2a\xa8\xeb\x68\x71\xc3\xbe\xbd\xbc\x60\xcf\xd8\x91\x1b\xeb\x18\xf1\x67\xc4\x45\x86\x41\xa0\x18\x54\x32\xa7\xa3\x8e\x42\x17\x38\x25\x44\x5e\xa6\x34\x11\x89\x1e\x93\x8a\x99\x32\x99\x84\x39\x39\xbd\x37\xa8\xcd\x3e\x71\x09\x3d\x2f\x8f\x13\xd7\x3f\x2e\x85\xfa\xd6\x80\xee\x8c\x40\x7d\xbb\x03\x81\x6a\x8a\x51\x0e\xe7\xda\xd0\x23\xc4\xca\xc1\xf2\x94\x5b\xee\x09\x57\x78\xe1\xd1\x6e\xe9\xcf\x9b\x7c\x19\x78\x29\x64\x79\x4f\x89\x02\xdd\x99\x5a\xae\x5f\x60\xb7\x2c\x09\x50\xc7\x5d\xa7\xe0\xbb\x34\x58\x53\x1a\x41\x32\x97\x2d\x5c\xe9\xad\x10\x13\x91\x4e\x70\x0a\x86\x01\x27\x9c\x70\x99\xaa\x7c\x61\x30\x27\x44\x42\xeb\x0e\x84\x01\x8b\xd8\xd7\x6e\x8f\xc4\x28\x94\xc1\x14\xf6\xa8\x12\x3c\x7f\xe7\x83\xeb\xcd\x01\x27\x60\x04\x76\xcf\x32\x3e\x84\xcc\x07\x6a\x51\xf8\xe7\x22\x06\x7e\xec\xec\x31\xad\xb2\xee\xd2\xdd\xdf\xaa\x0c\x28\x1d\x23\x00\xc2\x75\xff\x24\xe0\x80\x9d\x74\x05\x07\xd4\x06\x5b\x70\x40\xbd\xf6\x29\xc0\xa1\xdc\x83\xd5\xb3\x79\x38\x38\xb9\xa1\x0d\x07\x64\xde\x8f\x1d\x0e\x06\x92\x44\xe5\xc5\x95\x56\x4e\xed\xec\x8c\x37\xf9\x6e\x6b\x9f\x21\x19\x36\x96\x84\x6e\x22\x2f\x68\xbf\xcc\x75\x23\x11\x8b\x5b\x62\x12\x21\x1b\xeb\xff\x69\xf0\x2c\x24\x3d\xf3\x8c\x2c\xf4\xd2\x72\x2f\xba\x2f\xfd\x83\xa7\xcc\x0e\xba\xc8\x65\xde\xc3\xd8\xd9\x09\x37\x52\x09\xcf\xf0\x16\x88\xfd\x50\x8e\xcd\xa3\xdd\x7c\xc7\x8d\xf4\x3b\xf4\x51\xe2\x6f\x8d\x48\x63\x8e\x86\x96\x60\xc2\x94\x2a\x85\x86\x2f\x9b\xa2\x17\x6f\x28\x4d\x0b\xdf\x0b\x99\x7f\x4e\xae\x08\x6e\xe5\xb4\xf5\xb5\x55\xbe\x96\xf1\xab\xea\x6e\x09\x37\x41\x90\xa9\x90\x63\xb4\xab\xf5\x98\x86\x8c\x72\x06\x3d\x11\xb8\x25\x0d\xf2\x10\x8f\x44\xe8\x34\x9c\x87\x30\x74\x08\x4c\xf6\x3d\x37\xa3\x8d\xc5\x88\xc8\xad\x30\xec\xe0\x65\x00\xc0\x1e\xc5\xf8\x1f\x23\x87\x39\xa0\x15\x56\xbb\x49\x96\xce\x5b\x21\x53\x9f\x5e\xd7\x02\x56\x75\x9b\x13\xc9\xc1\x98\xb8\x29\xd2\x26\x6d\x39\x65\xef\x24\xab\x80\xc5\xfa\x3b\xa3\xc7\x5b\x12\x99\x83\x8d\xae\xbf\xde\xf0\x5a\x0d\x32\xdf\xcd\xb7\x12\xf7\xde\x8d\xdb\x77\x9a\xfb\xe2\x7b\x61\x2d\x1f\xb5\xa0\xa7\xa7\x7e\x5d\x6b\x31\x7f\xa5\x6e\x83\x48\x9f\x38\xb4\xb6\x42\x8e\x4d\x53\x93\xe1\x59\xd6\x32\x86\x2f\x53\x65\xc2\x0e\x57\x77\x77\x2d\xaa\x10\x73\x69\xc1\x4f\x45\x0d\xc9\x9c\x38\xf1\xc4\x95\x90\x71\x6e\xf8\xb9\x76\x90\xb0\x82\x67\xd7\xc5\xee\x97\x0d\xb0\x85\xc2\xd6\xaf\xae\xcf\xda\x5d\x23\xb3\xf6\x31\xe9\x80\xcf\x19\x4f\x73\x61\x0c\x1a\xc2\x60\x38\x51\xea\x96\x1d\xad\xbd\x73\xad\x6f\xc4\xd8\x9c\x78\x9c\xef\xbb\xd9\x1f\x33\x21\xb3\x2a\x2a\x0a\xf5\x60\x69\xab\x30\x78\x1c\x24\xa9\x66\x81\x7b\xe8\x6f\xa0\xf1\xc1\x0a\x8b\xd3\xa4\x3b\x67\x1c\x16\x7c\x74\x82\xbd\xb8\x3d\xfb\xa5\x12\x3e\xb8\x45\xaf\x3d\x6e\xcf\xd7\x5b\x5e\x0a\x47\x92\x1e\x3f\x3a\x90\xbc\x70\x91\x80\xe9\xae\xcc\xeb\x5f\xea\x3e\x59\x0a\x94\x75\x0f\x18\xfd\xc4\x57\x06\xd9\xa1\x5d\xfa\x10\x8b\xb7\xf8\x4f\x0f\x9b\x12\x75\x3b\x5b\x09\x93\xa1\xfa\xa4\xa4\x3b\x8a\x86\x24\x30\x88\x10\x13\x25\x95\xcf\x91\x73\x4c\x54\x49\x44\x69\x24\x51\xe4\xcd\xc3\x3d\xf1\x24\xba\x31\xd5\xf3\xda\x4b\xdc\x74\x04\x62\xf1\x07\x5b\x5d\x92\x48\x73\xb8\x13\x76\x82\x37\x36\x4c\xe6\xbc\x86\x38\x13\x0d\x06\x1d\x30\x92\x81\xd6\x4a\xfb\x80\xac\x60\xb7\xf6\xa9\x5a\x57\x2a\xc5\x88\x2e\x87\x24\xdc\xfd\x75\x68\x9a\x8e\xea\xfa\x52\xa7\xaa\x06\x27\x8c\x46\x90\xa0\xa0\xd5\x04\x30\x51\xed\xa3\xfa\x0a\x0b\x9f\x84\xe0\x10\xcc\x5f\x0a\x95\x8b\x7b\x37\x4a\xf3\xab\xa6\x4b\xdc\x5f\x1d\xb1\xfc\xf1\xf1\x80\xb1\x4b\x59\x45\xf0\xf6\xdc\x2e\x36\xdf\x0c\xa1\x67\xd6\x2d\xb1\x79\xa3\x18\x2e\xa0\x69\x38\x73\xd2\xa1\x2e\x3b\xc0\xf8\x7d\xcc\xe1\xac\x69\x12\xef\x94\x1c\xa0\x69\xdc\x77\xea\xb6\x3e\xc8\x00\xfb\x98\xca\xdd\x2b\xef\xcb\x5c\xfe\x34\x1c\x20\x6c\x5f\x3a\xe7\xab\x9f\x75\x74\xcd\xd3\x75\xa3\xb7\x86\xf4\x5e\x39\xdc\xae\x54\x4a\xd5\x0f\xab\xea\x6d\xd9\x2c\x54\x63\xac\x72\xa2\x1b\x32\x9e\x54\x94\x3c\xd0\x2c\x8b\xe8\x2f\xc7\x49\x99\x13\xb5\xb3\x60\x5b\xc8\x8b\x0c\xb0\xea\x4a\xa3\xe7\xba\xa0\x4c\xe3\x5e\xa8\x5e\x9d\xc1\x56\x5d\x2d\xe5\x8b\x31\xf6\xd8\x3f\xf0\x50\x56\x81\xa8\xa1\x4e\xdc\x55\xf5\x39\x69\x88\xc2\x84\x4b\xe2\x30\x39\xd5\xaa\x60\xba\x60\xa9\x18\x61\x9e\xa4\xf5\x43\x16\x5c\xf3\xdc\x91\x78\xc3\x3c\x08\x86\x30\x16\x14\x10\x59\x11\xb6\x43\x27\xee\xf9\xda\x1c\x3d\x22\x86\xc2\xb2\x5c\x8c\x27\x84\x28\x8c\x63\x45\x1d\x16\x9c\x8a\x99\xe2\x29\x5e\x2e\xcb\x94\x66\x77\x5c\xe7\x8e\x6f\xf0\x64\x82\x1e\x4a\x2e\x59\x5a\x6a\xbc\x2f\xc5\x02\x4f\x67\x7d\x63\xb9\x75\x92\x32\x68\xaf\x50\x86\xf9\xc7\xcb\xb1\xd6\xb6\x78\x39\xd6\x86\x2d\x5e\x8e\x15\x2f\xc7\x5a\x6c\x8f\x26\x3a\x34\x5e\x8e\xf5\x69\x95\x35\x8d\x97\x63\x6d\xdf\x3e\x7a\x35\xd3\x78\x39\xd6\xf2\x16\x2f\xc7\x8a\x97\x63\x6d\xd6\xe2\xe5\x58\xdb\xb7\x47\x57\x87\x39\x5e\x8e\xb5\x55\x8b\x97\x63\x2d\xb6\x78\x39\xd6\x8a\x16\x2f\xc7\x5a\xd1\xe2\xe5\x58\x8b\x2d\x5e\x8e\xb5\x5d\x8b\x97\x63\xc5\xcb\xb1\x3e\xe9\x3b\x03\x58\xbc\x1c\xcb\xb7\x78\x39\xd6\x27\x51\x19\x9d\xc5\xcb\xb1\x36\x6a\xf1\x72\xac\x78\x39\xd6\x2e\x2d\x5e\x8e\xf5\xa9\x18\x65\xe2\xe5\x58\xf1\x72\xac\x9f\x8f\xa0\x1b\x2f\xc7\x8a\x97\x63\xc5\xcb\xb1\xe2\xe5\x58\x6b\x67\x11\x2f\xc7\xfa\x14\x54\x40\x63\x53\xb1\x53\x6d\xd0\x4d\xca\x18\xf9\xf0\xf4\x46\xd5\x80\x61\x39\x1a\x81\x46\xca\x85\x23\x2f\x84\x55\xd5\x15\x1b\xe7\x5d\xb9\x60\x7b\x58\x11\xc9\x67\xf2\xac\xf8\xdc\x97\x29\xc0\x1a\x9e\x75\x0c\xf9\x8b\x37\x5f\x2d\xa9\x99\xb4\x73\xbc\xe1\xae\xd1\xd3\x38\xe7\x37\x72\x37\x2f\xfc\x0a\x80\x2f\xcb\x2c\xf3\x70\x4f\x32\x65\x7c\xec\x3b\x02\x2b\x99\x70\x29\x21\xe8\x7b\xc2\xa2\x1d\x65\x08\x20\x99\x2a\xc0\xfb\xc0\x39\x33\x42\x8e\x33\x60\xdc\x5a\x9e\x4c\x06\x6e\x24\x19\x80\x5d\xc7\xa9\xfb\x5f\x8c\xd5\xc0\xf3\x10\xb1\x9f\x73\x41\x5d\x31\x9e\x68\x65\x0c\xcb\xcb\xcc\x8a\xa2\xea\x8c\x19\xc0\x54\x1b\x62\x54\x15\x30\x30\x5e\xae\x0e\x6e\xef\xd5\xa3\xf9\x69\xa9\x66\xd1\x3a\xd4\x36\x7b\x58\x48\x3c\x2f\xec\xac\x8a\xf0\x05\x36\x12\xda\x58\x96\x64\x02\xb9\x35\x8e\x48\x59\xd5\xd8\x5f\x2f\xf0\x6a\xe9\x67\x6a\xfc\x54\x65\x8a\x62\x6b\x61\x0d\xc5\xcb\xd6\x1d\xfa\xae\x52\x61\xbc\x98\x6f\x7a\x8c\x87\x8a\x6a\x04\xe8\x30\x53\x04\x75\xe0\x2c\xd4\xbb\xff\xa9\xd1\x5d\xa3\x92\x6c\x1d\x50\x5c\x23\x3a\x26\x3f\x04\xe4\xec\xb5\xf2\x3c\x6a\x81\xc2\xdf\x97\x31\x77\x0c\x70\x03\x24\x4c\x1d\x0e\x40\x02\x8e\xbf\xf2\x15\x58\xff\xc1\x91\xbe\xc1\x14\x5f\x81\x31\x7c\x0c\x57\x3b\x3a\x1a\x56\x69\x64\xe8\x6b\xa8\x37\x06\x51\x21\x6b\xdd\x49\xd6\x8c\xdb\x6c\x8b\x41\x2c\xa7\x39\x55\xc2\xcf\x9d\x16\xd6\x02\x6e\x2a\xd6\xde\x43\x8f\xe8\x7c\x6a\xfe\xe1\x5c\xf4\xe7\xab\xd0\x49\xfd\xb1\x23\xea\x32\xa5\x58\xcc\x21\xb0\xa1\x16\x30\x62\x23\x81\x01\x9e\x18\x72\xd9\xa3\x52\x4c\x9c\xac\x00\xc6\x38\x7d\x57\xc9\x20\xcb\x86\x79\x0d\xd8\x5f\xfd\xc4\xac\x2e\x65\xc2\x1b\x55\x6e\x31\xf7\x54\x8c\xd8\x18\x43\x36\xbd\xb4\xf8\x9b\x67\x7f\xf8\x1d\x1b\xce\x1c\x4b\x43\xc9\xca\x2a\xcb\xb3\x6a\x91\x19\xc8\xb1\x83\x15\x1d\xcf\x76\xf6\x64\x05\x01\xbc\x06\x84\x26\xfe\xfc\x57\xb7\xc3\x36\x8f\x3d\x49\x61\x7a\xd2\x80\x5f\x3f\x53\xe3\x65\x17\x67\xed\x1e\xcc\xbd\xa3\x4a\xb4\x04\xcd\xba\xb9\xf1\x31\xd4\x04\x63\x13\x75\x47\xb2\xfe\x12\xec\xa9\x13\xb1\x0a\x55\x94\x19\x19\x9d\xbf\xaa\xf2\x8e\x4b\x03\x8b\xd9\x81\x4b\xcf\x05\x9a\x49\x7d\x17\xf3\x15\xd5\x29\x52\x37\x0c\xa9\x7c\xd6\x89\x37\xe4\x55\xa5\xc1\x50\x11\xfa\x8a\x67\xd9\x90\x27\xb7\x37\xea\xa5\x1a\x9b\x37\xf2\x85\xd6\x4a\xb7\xe7\x92\x71\x47\x2d\x27\xa5\xbc\xa5\xab\x1f\xaa\xe2\x09\x6a\xec\x5d\xb9\x21\xc5\x61\xd9\x82\x29\x93\x3e\x10\xe1\xa0\x06\xd5\xbd\xc0\xbd\xa8\x75\x1d\x9f\xc4\x45\x18\xd9\xec\xdf\x34\x91\xed\x57\xcf\x7e\xf3\x7b\x42\x5d\xa6\x34\xfb\xfd\x33\x8c\xe6\x36\x3d\x3a\xc4\x48\xdb\x1c\xa3\xc8\x79\x96\x39\xb5\xa1\x89\x94\x0e\xd0\xcb\x90\xf0\x83\xe3\xa0\xdd\x1f\xdd\x36\x16\xa5\x6e\x6e\xfe\x86\x72\x94\xb0\x06\xb2\x51\x8f\xf2\x95\x2a\xb5\xe6\x10\x19\xc3\xa1\xa7\x3e\x98\x34\xf6\x08\x04\xa0\xa9\xca\xca\x1c\x2e\x60\x2a\xba\xb8\xdd\xaf\xd5\x5b\x50\xf5\x33\x61\x30\x35\x6c\x98\xa9\xe4\x96\xa5\xfe\x61\x23\xbe\x65\xbe\x46\xf8\xd3\xbd\xa8\xb5\xb9\xfe\x56\x6c\x4f\xce\x8b\xa2\xca\x1e\xd2\xfc\xae\x05\x0c\x3c\x93\x58\xc8\xe0\xe9\x5f\xd4\x4a\x2b\x72\x74\x73\xe7\x2e\x76\x0e\x08\xda\xdf\x46\x5d\xcf\xbe\xa3\xeb\xf8\xea\x0e\xc3\x69\x28\xf0\xdf\x94\x6f\xb2\x90\x2f\x59\xa5\xdc\x55\x88\x41\x02\x80\x43\x1f\x24\xc9\x1f\xed\x42\x51\xb6\x77\x60\x53\x0b\x2e\x72\xcd\x9d\x76\x9c\x15\xa0\x8d\x30\x8e\x2f\x7f\x87\x07\x8a\x2e\x33\xac\x4d\x80\x1f\x07\x08\x74\xb8\xb1\xb0\xf2\xfe\x94\xf2\x4a\xa5\xbe\x43\x24\x85\x54\x54\x7a\x89\x58\xdb\x96\x6a\x3b\x64\xa8\x1f\x9b\x54\x7e\x57\x43\xb3\x4d\x29\xdd\x2f\x15\xa9\xa4\xb7\x3e\x25\x02\x89\xeb\x7b\xaa\xf4\xb1\x9a\x7c\x47\x64\x00\x09\xa3\xdf\xdc\x36\x25\x6c\x29\x8f\x74\x50\x1a\x22\xbd\xd7\x03\x07\x8c\xbc\xe0\xee\x4c\xf8\x4f\xd9\xe1\xe9\xe1\x47\x25\x92\x04\x22\xad\x0a\x3e\xde\xeb\x96\x9f\x39\x48\xcd\x77\xdb\x2c\x41\xe1\xd4\x20\x7c\x5e\x15\x64\xc3\xb7\x20\xad\x2b\xec\x60\xfd\x24\xf2\x8e\x06\x00\x7b\x05\x81\x32\xb5\xef\xf8\x8c\x71\xad\x4a\x99\x7a\xfb\x52\x65\xe0\x7b\x35\x37\xf0\x6b\x25\xa1\xbe\x35\xb4\x5d\xc1\x02\x2d\xfa\x42\xb2\xe7\x83\xe7\xcf\x3e\x15\x4e\x85\x2b\x9c\xe3\x54\xaf\x2b\x4e\x45\xf4\xe9\xa3\xae\x35\xd4\xc2\xef\x68\xbd\xaf\xbc\x89\xa5\x2e\x75\x2f\x42\x21\x6d\xfc\xe9\x4e\x0b\x0b\x8d\xcb\x01\x8f\x50\x71\x71\xfa\x61\xa3\x5e\xc3\xf1\xb2\x3b\x26\xf6\x04\xd2\x7e\x05\x32\x4c\x39\x7c\x8f\x74\xcb\x13\x28\x3c\x6e\xcb\x2c\x5c\x66\x0d\x09\x6b\x02\xea\xe0\x80\x1d\xd1\x9b\x87\x94\xea\x7c\xfc\x51\x51\xcb\x03\xed\xc5\x7d\xb1\x47\xf5\xcd\xb9\xac\xfa\x82\xa3\x0d\xae\xe8\x10\x82\xff\x03\x13\x3e\x05\x4c\xf1\x16\x19\xd7\x19\xfa\x1c\xaf\x69\xee\x6c\x58\x5a\x06\x72\x2a\xb4\x92\x39\x48\xcb\x30\x06\x7e\x98\x41\xf3\x6e\xec\xcf\x8f\xbe\x3b\x7b\x8b\x01\x0d\xc7\xbe\x58\x85\x9f\x65\x69\x42\x61\x9b\xe6\x4c\x1a\xdd\x3d\xb8\x7d\x61\x1e\x0e\x86\x48\x73\xc3\xbc\xdc\x38\x79\x69\x4b\xba\xb0\xe5\x3e\xc9\x4a\x23\xa6\x1f\x8b\x92\xf8\xdc\xfb\x0b\xb1\xd3\x3e\xcf\xd5\x01\xa8\x01\xb5\x90\xd2\x8f\xa6\xf5\x25\x69\x80\x0b\x0e\x93\x43\x53\xa5\x06\x36\x7d\xe0\xde\xf4\xe4\xab\x6c\x50\xf8\x5c\xa8\xc5\xb8\x20\x42\x60\x45\x99\x8f\x6b\x84\x4a\xa5\x39\xc7\x19\x6e\x07\xd6\x76\x40\x72\x2b\x5b\xf0\xe2\xf5\x75\xb3\x3c\x09\xa9\x4b\x2a\x1d\xb0\xab\xfa\xc7\xba\x86\x0d\x56\x56\xab\x94\x48\xd0\xe3\xba\xdc\xf8\x18\x24\x68\x14\x12\x5c\x97\xad\x0b\x57\xd9\x90\x1b\x72\xf2\x5c\xbc\xbe\x26\x9b\xed\x76\x30\xdb\x59\xcc\xde\x5d\x42\xc5\x94\x16\x4c\x63\xd8\x41\xb8\x6d\xdf\xa6\x56\x19\xac\x1c\x60\x50\x29\xa5\x8e\xd9\xe5\x15\xe3\x69\xaa\xd1\xed\x33\x97\x7c\xe3\xf4\xf3\xe0\x5b\xc0\x7a\x31\xdc\x40\x73\x4e\x0d\x70\x23\x89\xab\x01\xcb\x2e\xca\x22\x13\xe4\x46\x68\x7e\x50\xd7\xb9\xc1\xeb\xbf\xb6\x47\xda\x7d\xd4\xbc\x9d\x95\xbc\x3d\xa8\x90\xda\xb5\x5c\xe5\x9a\xdd\xd3\x60\x54\x36\xad\x4b\x0d\xcf\xed\x9a\x3f\x11\x68\x12\xaf\x76\x2d\x54\xa7\xdc\x68\xc7\x40\x5a\x2d\x60\x71\xb7\xd8\x5b\x37\x72\x89\xa7\xa9\xea\x50\x4c\x01\xfd\xe3\xbe\x30\xa7\x2f\xf0\x56\x17\x3f\x26\xdf\x30\xd5\x9f\x06\xae\x03\x45\xc3\x59\xed\x78\x12\xd9\xc7\x42\x84\x79\x63\xc7\xc5\xeb\x6b\xa2\x84\xb4\xf8\xea\xde\xda\x65\xbb\x54\x53\xb5\x9d\x31\xf0\xa3\xd5\x1f\xda\x47\xf3\x98\xbb\xf6\xcf\xdf\xf3\xbd\x57\x20\xcb\x1e\xe2\xdf\x5e\xc9\x76\x7b\x8c\x6e\x80\xeb\x64\xb2\x0b\xfc\xd7\x10\x02\xea\x94\xa5\x8a\x22\x01\x46\x4a\xa3\x4a\xdc\x47\xf2\x9e\x29\x75\x5b\x16\x9b\x50\x74\xdf\x0d\x5d\xc5\xb6\x11\x81\x68\x7d\xf1\xb3\xa2\xe9\xa9\x34\xbb\xf8\x7b\xdb\xb2\x0f\x58\x92\x78\xb0\xa3\x3a\x81\x42\xcd\xeb\x4d\xe7\x59\x69\x2c\xe8\xaf\x84\x36\xf6\x20\x54\x92\x46\x0c\x26\x9b\xc8\x61\xf3\x85\xbf\x0a\x3b\xf1\x45\x1d\x0f\x7b\xed\x47\xee\x6f\xdf\xf1\xa1\xd3\x69\x0f\x5f\x2b\x09\x87\x83\x79\xb1\xab\x22\xe5\x15\x59\x5b\xc9\x53\xfc\xd4\x0d\x64\x14\x2f\x8a\x0f\x1a\xb8\x72\xe3\x0b\x5a\xba\x11\x02\xfd\x33\x60\x19\xc7\xe2\x71\xf8\xf6\xa4\x2e\x40\x49\x15\xa5\xa8\x82\xa6\xf2\x82\xde\xac\x09\xa2\x46\x91\x29\xab\x56\x2f\x7b\x17\x79\x6e\x6b\x0c\xa0\xc2\xa4\xbe\x2a\xc9\x4b\x21\x6f\xb7\x44\xbf\x76\x74\xc9\x8b\x85\xde\x5a\x95\xc6\xc9\x47\x2b\x24\x05\xdf\x39\x16\xc3\x87\xaa\xb4\xa1\xf2\x89\x69\x28\x8e\x42\xfe\x83\xf6\x02\xed\xed\x05\xd5\xf2\x5b\xa6\x23\x9a\x1e\x19\x7d\x82\x12\x68\x66\xd2\x72\xac\x3a\x7a\xa1\x92\x5b\xd0\x2c\x73\xd3\x18\xb0\x3a\xf0\xa5\x55\xe7\x52\x97\xb0\x65\xd4\xc5\xae\x96\x0e\x28\x26\x90\x83\xe6\x59\x5d\xee\x75\x0f\x50\xbf\xf4\x84\xb3\xea\xb5\x19\x93\x42\xe5\xd2\x7c\x81\x46\x77\x0e\x5f\x2c\x7b\x2b\xe7\xb3\x50\x03\x57\x48\x0c\x37\xb8\x17\x06\xcd\xfa\x85\x4a\x9b\x89\x67\xa5\x01\xdd\xaf\xd2\x02\x7d\xee\x8d\xa9\x02\x71\x52\x18\x96\xe3\xb1\x90\x63\x4f\x9d\x91\xa6\x37\x0a\x71\x57\x9a\x0e\x46\x7a\x27\x1a\xa8\x14\x2d\x4a\x0f\x14\x5f\x26\x9a\xef\xe7\x2a\xa5\xd7\x87\x33\xd2\x06\xc3\xce\xd6\x01\xd2\x97\x92\x29\xed\x0b\x30\xf0\x34\xc5\xb9\x2f\xae\x10\x9f\xb6\x57\xd5\xab\xe2\x38\x28\xb2\xbb\xfa\xaa\x01\x16\x53\x0e\x9d\xb0\x53\xea\x6d\x6b\x87\xee\x4a\xf8\x77\x22\xfa\xed\xaa\x42\x67\xb2\xde\xe2\xf3\x66\xc0\x1c\x67\x16\xf2\x42\x69\xae\x67\xf3\x2e\x4c\x47\xa4\x1c\x0a\x38\x00\xce\x41\xea\x4a\xa5\x48\xc7\x97\x6c\xfc\x94\xee\xf8\x5d\xb2\xf7\x4b\x71\x0c\xa9\xa0\x54\x2c\x40\xd4\xd1\x6b\x93\x4c\x20\x2d\x31\x7a\x7c\x5c\x72\xbc\x83\xdc\x9d\x62\x6f\xec\x9e\xf9\xb0\x3c\x42\x86\x2a\xe0\xaf\x4a\x13\x98\x61\x90\x0c\xd6\xe7\x74\xbf\x60\x9d\x4f\x0a\x0d\xa4\x2b\x98\xf1\x3a\xd6\x2a\x4a\xf0\xa6\xbe\x15\x02\x17\x0b\x53\x91\xd8\xf0\xd1\x68\x15\xe2\x24\xbc\xba\xf9\xf5\x4a\xf9\xba\x80\x09\x38\x62\x64\x4d\xbd\x14\x1f\x55\x82\x95\x3f\xdf\x49\xc7\x24\x56\xe3\x62\x8d\x78\x0f\xa0\x1c\xca\xd5\xed\xad\x58\x73\x7c\x2b\x28\x2d\x59\xfb\xb6\x25\x99\xf6\x10\xca\x77\xf7\xb8\xed\xe4\x29\xdb\x47\xfe\xe7\x7a\xbc\xbf\xae\x74\x78\xa6\xc7\x65\x4e\xd5\xbd\xd5\x5c\x81\x65\xc2\x39\xb4\x6b\x39\x96\x75\xfe\xea\xa2\x99\xc2\xd0\x8c\xcd\x0e\x09\x20\x4e\x14\xda\xd3\xde\x39\x6f\xf0\xbc\x74\xca\x59\x65\x45\xad\x69\xab\xd7\xe2\xbc\x45\xaf\x1a\x2d\x68\xb1\x42\x16\x8e\x1b\xa3\x0c\xd1\x28\x3d\x92\x4c\xb8\x1c\xa3\x19\x5c\x95\xae\xbf\xcf\x3f\xc7\x19\x69\x48\xcb\xc4\xdf\x28\x11\xe2\x9f\x3f\x0f\xd6\x3f\x5f\x28\x08\x2f\xb6\x33\x09\x2f\xc2\x9c\x9b\xcb\x22\x56\x7d\xca\xc4\x00\x06\xec\xe0\xf3\xc6\xa3\x03\x1a\xbd\xd0\xca\x0d\xe1\x43\xa7\x71\x56\x99\xb0\x78\x10\x0e\x9a\x6f\x0f\xd8\x0b\x37\x06\x7a\x44\x2a\x00\x36\xa2\x7b\x87\x35\xf8\x7a\x4c\xc3\x98\xeb\x34\xc3\x8c\xbb\x51\x25\x94\x50\x5e\x8e\x07\x18\x9e\x3e\x8c\xa7\x93\xca\x2e\xb3\x4e\x6e\x98\x16\x61\xb9\xb9\x35\x27\x24\xca\xf4\x53\x6e\x79\x1f\x6f\xe1\x20\xa2\x71\x42\xea\x75\xdf\xd7\x3f\xed\x73\x8f\x53\xfd\x6a\x5b\x4f\x7e\xe1\x33\xab\xfa\xbc\x7a\x4b\xc8\x3e\xef\x63\x25\xd2\xff\x9f\xbd\xff\x71\x6e\xdb\xc6\xfa\x85\xf1\x7f\x05\xe3\xdd\xb9\xb6\xb6\x92\x9c\xb4\xbb\x3b\xdd\xdc\x7e\xb7\xe3\xb5\x9d\xd6\xd3\xc4\xd1\xb5\x9d\xf6\xf6\x9b\xf4\xe9\x03\x91\x90\x84\xc7\x24\xc0\x25\x40\xd9\xda\x37\xef\xff\xfe\x0e\xce\x01\x40\x90\x92\x1d\x9b\x64\x6c\xd9\x25\x77\x66\x1b\x4b\x14\x08\x1e\x00\xe7\xf7\xf9\x9c\xe6\xb9\xa2\x8f\x90\x56\xd0\xca\xd2\x6d\x01\x83\x5b\x57\x4f\x3d\x0c\x3a\xd0\x00\x9a\x88\x94\xb0\xd7\x3e\x83\xc1\x22\xbd\x56\x0e\xf2\xf1\xe9\xc5\xd9\xaf\x93\x77\x27\xa7\x17\xfd\x79\xee\xcf\x73\x7f\x9e\x5b\x9c\x67\x26\x96\xad\xcf\xb2\xb7\x7f\x36\x99\x84\x35\x08\xbb\xa0\xa2\xfa\x19\x25\x67\x1d\x8b\xe5\xcf\xd4\x28\x7c\x59\xce\x14\xe8\x22\x46\x6f\xdc\x14\x45\xb5\x37\x60\x1f\xae\xc3\x27\x9f\x9d\xf5\x88\xb9\x55\x1d\xe6\xac\x9c\x06\x40\x00\x9b\x56\x2d\x6c\x7c\x77\xf8\xfb\xc9\xd1\xf1\xe9\xc5\xc9\xeb\x93\xe3\xb3\x47\x4d\x36\x68\x09\xee\x56\x95\xc6\x0d\xa5\x64\x96\xb3\x25\x97\x85\x4a\x56\x1e\x85\x76\x33\x13\x58\xcf\x57\x13\xc6\x3c\x5b\x79\xa0\xdd\x8d\x3f\xeb\x85\x6d\xb7\xc2\xb6\x9a\x7b\xd1\x02\xd7\xa3\xab\xed\xfb\x3a\x97\x69\x47\x5b\xf8\x1c\x4d\x76\xe7\xf2\xde\xb4\x9f\x76\x2d\x04\x40\x45\xf4\x58\xe5\xb1\xc4\x1b\x30\x5a\x68\x9a\xe9\x16\x6d\x01\x3a\x01\x0d\xed\x06\x5f\x13\xf3\x14\xde\xd2\xec\x27\xb6\x3a\x63\x2d\xe1\x43\x6a\xa1\x86\x84\x45\x46\xd0\x91\x4b\xb6\xc2\x08\xe4\xa1\x7b\x58\x3b\x10\xcc\x2d\xc4\x5c\xbd\x64\x6d\xf0\x70\xbb\x04\x4b\xbd\x64\x2d\x12\x17\xdd\xb5\x06\xe8\x69\x96\x10\xf4\x34\xb3\xa6\x5b\x05\x61\xfa\x05\xc0\x61\x77\x43\x71\x6f\xf9\xac\xbe\x37\xba\x82\x5c\x1a\xc9\xc5\xae\xf6\x6d\xd2\xd6\xc8\x58\xac\x23\xdc\xb5\x6a\x1f\x32\x53\xf6\xff\x84\xc0\xb1\x17\xef\x8e\xde\xbd\x22\x07\x71\x6c\x93\x87\x0b\xc5\x66\x45\x82\x69\xc0\x6a\x4c\x68\xc6\x7f\x66\xb9\x82\xbe\x6a\x97\x5c\xc4\x43\x52\xf0\xf8\xfb\x36\xa0\x4b\x78\x75\xb8\x0a\xd2\x05\x6c\xba\x5d\x89\x73\x1b\x8f\x0b\x65\x97\x67\x22\x04\x2b\x03\x61\x6f\x3a\xfc\x15\xab\x64\x74\x44\x9a\xb6\x2d\xe4\x08\x2e\x61\xb7\x7c\x75\xb7\x64\xac\x98\x27\xee\x01\xaa\xe2\x57\x44\x15\x00\x14\xa3\x7c\xdf\x37\xe8\xa4\x3a\xac\xfe\xa9\x32\x1a\xb1\x21\xf9\x6f\xff\x21\x74\x6a\x57\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\xc1\x6a\xae\xdd\x02\xf1\x1d\x21\x63\x76\x0a\xcf\x80\x3f\xad\xba\x76\x10\x45\xb2\x10\xda\x7e\x01\x55\xbd\xe3\x85\x54\xfa\x64\xe2\xff\xcc\x64\x5c\xff\x4b\xb5\x42\x12\xdb\x4a\xc1\x00\x4b\xd4\xa2\x3a\x05\xaf\xee\xc4\x43\xc9\x4b\x3a\x3e\xaa\x76\x54\xdf\x1f\x23\x5a\xb0\x14\xb1\x8c\x5e\x3b\x12\x40\x6f\x5a\x07\x1f\x20\xa0\xe6\xda\x68\xa6\x55\x58\xb9\x9d\xe5\xcb\x56\x4d\xbc\xf1\xea\x90\xb5\xf9\x15\xec\x98\x60\x40\x11\x4b\x2d\x3c\xc8\x5e\xc0\x3a\x2b\xa5\x8c\xc6\x1e\x4c\x4e\xc8\x12\x29\xbc\x35\xc4\x71\x51\xb0\xd7\x5f\x94\xc7\x85\xb1\xb6\x8a\x85\xf8\x0a\x5b\xb9\xba\xef\x6d\x9d\xbd\xf2\xd0\x57\xcc\x18\x36\x7b\xf8\xe1\x38\xca\x8a\xa1\xbd\x61\x9c\xb2\x54\xe6\x2b\xff\xa7\x8f\xf1\x8d\x94\x96\x39\x9d\x43\x5d\x06\xfe\x1c\x7f\xe6\xff\xc2\x1f\x56\x1e\xb0\xfe\x6b\x34\x85\xa3\x22\x37\x4a\x43\xb2\x72\x1c\xb9\x21\x5e\x44\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\xe6\x77\x46\xdb\x86\xad\x78\x55\x37\x64\x19\xa8\x07\x85\xd3\x53\x11\xec\x49\x5b\x77\x3a\xf4\x6a\x10\x7a\x03\xc4\xd2\x58\x96\x8d\x91\xb3\xca\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf5\x89\x1f\xe8\xe6\x94\x7a\x0b\x7d\x81\x89\x43\xde\x6d\x76\x9d\x01\x58\x90\x3f\xaf\x35\xb6\xff\xb2\x4d\x57\x22\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3d\xf5\x0e\xb0\x3b\xf1\xea\x12\xc1\xb3\x3a\x62\x27\xdb\xef\x0b\xc2\xd6\xe3\xe5\xb6\x57\xd7\xe7\xdf\x65\x0f\xbf\x2a\x05\x92\x17\xd7\x5b\x73\xc0\x15\x8b\x72\xa6\x1f\xc2\x93\x83\x4f\x0a\x10\x04\x76\x15\xf1\xa6\xc5\x73\x93\x73\x7f\x04\xe7\x8e\x6f\x6b\x07\xeb\x5a\x6a\xa2\xb3\x5c\xa6\xae\x2a\x1c\xc2\x1b\xd0\x9f\xde\xdd\x77\xc9\x5a\x35\x47\xc5\xab\x77\x06\xf5\xce\xa0\x1b\xae\xcf\x3a\x83\xce\x71\x1f\x6e\xad\x27\x88\x89\x65\xd3\x10\xc6\xc6\x08\xba\xb3\x75\x42\x08\xb5\xbb\x05\xd4\xc6\xee\xa8\x97\xfd\x20\xcb\x14\x1a\x14\x68\xe9\xe6\x18\x26\x39\x80\x5e\xcd\x78\xf0\x61\x80\xb2\xec\x02\x4d\x1b\x8b\xf0\xc7\x96\x66\x0a\x1e\x22\xba\x02\x06\x09\x89\x8e\x90\x7a\xfa\x0b\x66\x82\x5e\x62\x72\xa8\x31\xd2\xb8\x28\x61\x34\xbd\x72\x58\x62\x2f\x53\xa5\x64\x84\x49\xad\xbe\x08\x00\x90\xdd\xec\xb4\x61\x36\xd0\x20\x3e\xcb\x59\xc4\x62\x26\x22\x66\x71\x99\x2b\xbd\x2f\xa9\x20\xc7\x62\xe9\xb0\xa9\x63\x57\x52\x02\x33\xd9\x3c\xc6\xf3\x4a\x40\x30\x1b\xd1\x06\xc1\x82\x3c\x04\xe0\xfa\x65\x36\x2b\xa4\x62\xc8\x59\xe9\x65\x6d\xd6\x1e\xaf\xb5\x14\x6f\x2f\x33\x7d\x64\xab\x95\x32\xb4\x26\x2c\x4b\xf7\x73\x55\x48\x3e\x87\x60\x60\x7b\xf1\xf9\x87\x13\x9d\x1d\x89\xcd\x6e\x44\xe6\x3d\x62\x27\x5d\x8a\xc9\x2e\x82\x25\x59\xce\x66\xfc\xba\xa3\x73\x7a\x20\x4a\x4f\x0c\x8f\x99\xd0\x7c\xc6\xb1\xc4\x24\xcb\x59\xc6\x04\x56\x09\xd0\x68\x01\xbc\xdf\x4a\xca\x32\x38\xbd\x8d\xc9\x3c\xa8\x70\x77\xcb\xca\xce\x37\x29\xfb\x3d\x1f\x23\x3d\x1f\x6b\x7c\x3d\x10\x1f\xb3\x3b\x77\x7b\x98\x18\x64\x9e\xb7\xcf\x79\x3f\xac\x62\xad\xd8\xae\xb4\xf7\xdc\x68\x65\xd9\xd1\x3e\x8c\xd2\xc8\x01\xdd\x6a\x3f\xc0\x63\x27\x45\x92\x74\x84\x4f\xbd\x7b\x02\xd4\xc8\x8a\x24\xb1\x65\xb9\x63\xf2\x4e\xc0\x91\x3c\x80\x3e\x08\x43\x72\xca\x96\x2c\x1f\x92\x93\xd9\xa9\xd4\x13\xd4\x6d\xab\xe9\x6c\x78\x23\xe1\x33\xf2\xca\x58\x4d\x4a\x13\x8d\x58\xf4\x01\x72\x8e\xcc\x2b\x03\x94\xa0\x5c\x2d\xd2\xd0\x6f\x5e\x96\x3f\xb9\x82\xc9\xd1\x23\x2d\x93\x6f\xf6\xd1\x81\x79\x6a\x47\x72\x09\x72\x90\x14\x69\xa3\x23\x9b\xaa\x5e\x9f\x20\x10\x45\x26\x95\x3e\x37\x56\x6c\x37\x8d\x60\x26\x6e\x38\xe8\xad\x40\x93\x84\xc5\x95\x4e\x40\xd8\xc1\x82\x56\xad\x68\xa8\xc7\xf5\x0d\x15\x18\x59\x50\x11\x27\x2c\x07\x50\x74\x55\x47\x7e\xe2\x65\x17\x00\xdf\xb7\xc1\x15\x68\xd2\x28\x92\x79\x6c\x3b\xb0\xda\x42\x49\x98\x8c\x3f\x5e\xc0\x6b\x53\x2a\xe8\x9c\x81\x67\x61\x0d\x5a\x17\x00\x97\x55\xd0\xfc\x61\x21\xe5\x25\x89\x64\x9a\x25\x70\x00\x5a\x9c\x8f\xb2\xf7\x8c\xdf\xa2\x23\x33\xba\xda\x0f\xda\xd2\xc0\x07\xed\xba\xd2\xb4\x52\x56\xba\x50\x55\xd8\x35\x8b\x3a\xeb\x5b\x77\x7c\xcd\xa2\xa0\xf1\xa2\x59\x12\xdb\x79\x51\x4b\xf0\x6d\xb4\xef\xa7\xdb\xda\x2d\xdf\x95\x2b\xbc\x45\x95\x59\x78\xd5\x80\xd6\x60\x4c\x87\x2b\x6d\x1f\x01\x10\xfd\x58\x55\x0c\x95\x67\x0e\x6a\xba\x72\x18\xf0\xe8\xad\xa1\xb3\xf9\x64\x63\x37\x16\xd4\x3e\x4b\xa9\xc9\xde\xee\xfe\xee\x60\xcd\x47\x57\x03\x27\xbe\x08\x7e\xc9\x01\x8d\x2f\x03\x68\x3b\x16\xed\xc6\x43\xc2\xb5\x63\xb6\x08\x0a\x00\xb3\xb2\xe5\x70\xd0\xa1\x5e\xe7\x34\xe6\xd6\x0a\x82\x4f\xcd\x4d\x3a\x2f\x2c\x22\xc0\xde\xee\xa7\xdd\x21\x61\x3a\x1a\x90\x2b\x29\x76\x35\x4c\x1f\xe0\x33\x0a\x15\x0c\xb4\x92\x05\x74\xa9\x43\x12\x78\x2c\x0c\xc3\xb1\x88\x2c\xb0\xa5\xcd\x82\x6a\x57\x86\x77\x7c\xcd\xb5\x6b\xe3\x20\x67\xe4\x05\x76\xd4\x61\xd4\x7a\x09\x13\xbe\x64\xfb\x0b\x46\x13\xbd\xc0\x44\x0a\x21\xc5\x08\x9b\xa2\x19\x56\x62\xbf\x69\x1b\x53\x68\xe7\x72\x0b\xaf\x16\xee\xb7\xf5\x09\xb5\xd4\xae\x0d\x13\xfd\xa1\x79\xa7\x56\xb2\xd6\xc4\xf8\xe2\x62\xf2\x43\xa5\x57\x2b\x70\x71\xad\x33\x97\xde\x12\xe0\x4a\x6c\x01\xef\xe8\x26\xa0\xd7\xaa\x69\x2b\xe9\x90\x85\xb5\x6d\xde\x4a\xd6\x9b\x52\xdf\xaf\x6b\x2b\xf9\x55\x16\xd0\x6d\x8e\x4e\x93\x15\xb9\xa2\x42\xbb\x52\xbc\x1d\x33\xd4\x8e\x61\x4f\x66\x37\xfc\xc8\x68\xcc\x72\x05\xdc\x83\xd1\xc6\xf8\x59\xee\xea\x2c\xd0\x14\xcc\xad\x5b\x39\x50\x28\x2d\x53\xb2\xb0\xaf\x5d\x2d\x4f\xb4\x27\x63\x0c\xa7\xc7\xd5\xfe\xe4\x2c\x43\x0e\x67\x7f\xf3\xec\xf8\xd7\x1a\xdf\x40\xba\x57\x70\xe6\xa3\x90\x6c\x61\x37\x12\x2e\x90\x58\xd8\x47\xb0\x23\x5e\xda\x41\x82\x00\xe9\x30\x49\x80\xb4\x2b\x76\xac\x0f\x04\x81\xaf\xf6\xf9\x50\x9d\xe5\x1d\x90\xce\x62\xeb\x64\x93\x23\xd2\xee\x19\xcc\x82\x45\x9f\x47\x05\x3a\x2e\xa2\x42\x0a\x1e\xd1\x84\xff\x87\xc5\xd8\x15\x17\x73\xcc\x40\xcf\x89\xa8\x62\x23\x08\x7c\x0a\xe4\x7f\x41\x9b\x57\x61\x8e\xa3\x96\x12\x94\x0f\x08\x75\x19\xfe\x88\xcf\x6b\x9f\xb9\x40\xba\x8d\x9b\x93\xf6\x45\x9b\xe1\x75\x3b\x99\xbb\xd9\x62\xa4\x4b\x0a\x64\x1d\x24\x59\xaf\xa7\x58\xaf\xf5\xec\x06\x66\x84\xa8\xb0\x5b\x23\xcb\xda\x36\x30\x27\x9b\x2b\x96\x73\x22\x7c\xbf\xd9\xa7\xd1\xc4\x9c\x74\x97\x0c\xd9\x75\x2a\x64\xa7\x89\x90\x5f\x34\x0d\x12\x8a\x2f\x5a\x73\x91\xaa\x17\x1e\x86\x34\x3b\xc0\x58\x87\xc6\xae\xb5\x1a\xa6\xf5\x21\xb9\x9e\x18\x55\xa7\xab\x39\x6a\x5b\x71\xc6\x74\x94\x9d\xcb\xe8\xb2\x43\xeb\xe9\x88\x65\x39\x8b\xd0\x1b\x77\x71\x38\xc1\xd1\x8d\x15\x7b\xfa\xee\xa2\x4c\xfa\x87\xcc\x98\xd2\x3d\xfa\xa3\xf5\xd7\x19\xcb\xf7\x92\x65\xda\x3b\x08\xa6\x34\xba\xbc\xa2\x79\x0c\xfe\x33\xaa\xf9\x94\x27\x5c\xaf\xc0\x05\x90\x33\xa8\x28\x10\x12\x53\xef\x10\x8a\x51\xba\x86\xaa\xbe\xdb\xb7\xf7\x94\x81\x1f\xce\x8a\xc0\x19\xe5\xc6\xea\xf7\x5d\x73\x31\x37\x27\xca\xbc\xe3\x30\xf4\x7f\xf7\x26\x9e\xbb\xb6\xd6\xc4\x0b\x3a\xc2\xde\xd7\xda\x6b\x9b\x21\xb8\xc5\xa2\xce\x8a\xb8\xdc\x37\x3c\xeb\x45\x5d\x47\xe3\x6d\xaf\xa8\xcb\x72\x76\xae\x65\xd6\x51\x2c\x06\x07\xbb\x21\x12\x33\x65\x33\x69\x98\xf0\x8d\xa1\x95\xb8\x60\x16\x94\xf3\x60\x72\xe2\x7d\x67\xb2\x12\x3e\xc1\xdc\x48\x87\xc4\x99\xf0\x25\x13\x4c\xa9\x7d\x08\xba\x14\x99\x6d\xfa\x6f\x7b\xdb\x0e\xcd\xdb\xb1\x14\x66\x37\x2c\xeb\x0d\x6c\x67\x5d\xf8\x90\xe9\x08\xfd\xc3\x01\x23\x87\xa6\x5d\x76\xfa\xf5\x60\x4d\x94\x53\xb5\xc0\xae\xb3\xec\x9a\x6b\xdb\x39\x79\x82\x48\xbd\x61\xf3\xdb\x79\x4e\x23\x46\x32\x96\x73\x69\x84\x51\x21\x74\x2c\xaf\x04\x99\xb2\x39\x17\xca\x91\x02\xb0\x36\x2d\xcd\x20\xea\xc3\x95\x07\x66\x1b\x93\xb3\x0a\xec\x88\x2d\x08\x8a\x64\x79\x34\xed\x9c\xeb\xf1\x2a\x90\x58\x40\x27\xec\xe1\xe2\x29\x1c\xb6\xb5\xf9\xdc\x94\xf7\x0a\x01\x4f\x8e\x59\x42\x57\x98\xf7\x09\x1d\xa9\xf9\x7f\x58\xae\x06\x1d\xc4\xb5\xb0\x31\x93\xfb\xee\xc6\x79\x00\xc8\x29\x8d\x16\xed\x02\xc5\x7d\x20\xec\x8e\x57\x1f\x08\x6b\x33\x48\x1f\x08\xeb\x03\x61\x9f\xb9\xfa\x40\x58\x1f\x08\xab\x5d\x5b\x6b\x25\xf5\x81\xb0\xc6\x57\x1f\x08\xbb\xfd\xea\x03\x61\x77\xb8\xfa\x40\xd8\x1d\xaf\x3e\x10\x76\xf3\xd5\x07\xc2\xda\x4d\xa6\x0f\x84\xf5\x81\x30\x7b\xfd\xf1\xbc\x83\xee\xea\x03\x61\x6b\x83\xf4\x81\xb0\x3e\x10\x76\xe7\x6b\x6b\x4d\xbc\x3e\x10\x86\x57\x1f\x08\xab\x5e\x7f\x2c\x51\xe7\xc2\x48\x13\x63\x50\xb6\x6f\x2a\x0c\x66\xa9\xe5\xb1\xcf\xb2\x84\xab\x4d\x94\xe1\x61\x22\x0c\x5b\x12\x8e\xe9\x20\xaa\xd0\x47\x14\x9e\x5d\x44\xa1\x1b\x6f\x5c\x07\x9e\xb8\xd6\x3c\xd9\x06\xda\x2f\x16\x39\x53\x0b\x99\x34\xde\xe8\x95\x4d\xfe\x96\x0b\x9e\x16\xa9\xd9\x73\xca\xec\x67\xbe\xf4\x11\x7d\x55\x76\x5a\x86\x40\x3f\x3a\x05\xcd\x8d\x3c\x66\x80\x22\x4a\x79\x62\x96\x11\x8a\x3e\x17\x74\x69\xf6\xba\x2a\xa2\x88\x31\xe8\x51\x16\x9a\x12\xdf\x8c\xfd\x93\x7c\x4f\x8a\x97\xed\xf8\x4d\x3b\x69\x89\x38\x9f\x30\xca\x37\x5f\x37\x1a\x63\x9e\x67\xdd\xf0\xe5\x1f\xce\x26\x87\x01\x5f\xa6\xc2\xb1\x65\x2e\x96\x32\x59\x62\x27\x5b\xb8\xc9\x68\x45\x8f\xc8\xa4\xdb\xeb\xf7\xad\x74\xfb\x2e\x64\x44\x5b\xf5\xb5\xaa\x7b\x18\x25\xb5\xea\xa2\x99\xc3\x5a\x22\x9c\xfc\x9d\x95\xd4\xd6\xdc\xad\xbd\xe2\xd8\xfe\x38\x10\xc0\x7b\x81\x17\xef\x8c\xc0\x3b\xb6\xcf\xb7\x13\xc1\xa1\x85\xe0\x5a\x2c\x69\x49\xb2\x84\x96\x4d\x92\x60\x05\x7e\x04\xb9\x71\xb8\x60\xd1\xe5\x99\x0d\x86\xee\x29\xc6\x7c\x26\xcb\x9c\xeb\x45\x31\x1d\x47\x32\xdd\x37\xc7\x18\xff\x6f\x9a\xc8\xe9\x7e\x4a\x95\x66\xf9\x7e\x2c\x23\x2b\x96\x46\x91\x19\x85\x8b\xf9\x38\x8d\x07\xd0\x86\xf7\xa4\xda\x94\x31\x80\x62\x30\xcf\xb7\x06\x1c\x99\x32\xc3\x11\x25\x18\xe9\x01\x9e\x9b\x99\xde\xbd\x1b\xe7\x86\x57\x6b\x31\xd2\x32\x10\xfd\xf0\x41\xe8\x9e\x73\x91\x0e\xbc\x11\x4f\x2d\xd8\xdc\x59\xd2\x45\x07\x41\xe6\x2d\x0a\x30\x6f\x8d\x3a\xbb\x2d\x41\xe5\x2d\x84\x5e\xee\x20\x90\xdc\x45\x10\xb9\xbb\x00\xf2\x17\x40\x28\x7e\xca\x81\xe3\x0e\xbd\x6b\x1d\x05\x8c\x1f\x22\x58\xdc\xc9\x5b\xb7\x0d\x12\x3f\x5c\x80\xb8\x9b\xd7\xed\xd2\xdc\x78\xaa\x41\xe1\x0e\xbc\xe4\x5d\x7a\xc8\x3b\xf3\x8e\x7f\xb1\x20\x70\xfb\x00\xf0\x16\x04\x7f\x5b\x13\x99\x0b\xae\x39\x4d\x8e\x58\x42\x57\xe7\x2c\x92\x22\x6e\x2c\xc7\x6a\xc0\x98\xfe\xfc\x28\x1c\xd6\x7a\xb0\xaa\x15\x15\x0b\x6a\xf1\xbf\x8d\xdd\x86\x15\x24\x2e\x72\x61\xd5\x16\x08\x3a\xe0\x2c\x9b\x40\xeb\x5d\xc9\xfc\x32\x91\x34\x56\xfb\x99\xc4\xff\x2b\xeb\x25\x82\x42\x09\x7c\x56\xbb\x4a\x89\xc7\x76\x95\x61\x79\x49\x97\x8b\xf8\xa3\xbc\x22\x72\xa6\x99\x20\x7b\x5c\xb8\x75\x1c\x04\xc6\x66\xe9\xb7\xf4\xdb\xda\x7c\xfb\xf2\x85\xbb\xf9\xf9\x39\x24\xc1\xf5\xaa\xd4\x97\xf7\x0f\xdb\x07\x7d\xde\x41\x6c\x6f\x9c\x15\x49\xd5\x49\x8c\x8e\xe3\x2a\xbf\x79\x59\x22\x18\xbf\x84\x71\xfd\x69\xa3\x22\x26\xb6\xe4\xec\xf9\x2d\x5a\xeb\xd4\x96\xaa\xea\xe7\x53\x59\x3e\xe7\x4f\xbe\x38\x9c\xf4\xee\xe4\xed\x72\xca\x3c\x52\x7a\xc8\x16\x2a\xba\x4f\x34\x25\xa4\x57\x74\xef\x71\x05\x45\xa8\x3f\xe4\x34\x62\x93\xce\x75\x04\x77\x9c\x48\x5c\xe4\xd4\x32\x40\xaf\xf2\xb9\xc3\x23\x18\x8b\xf1\x34\xf9\xc2\x5d\x28\x89\x9d\x15\x49\xb2\x42\x9f\x43\xa5\xcc\x19\xa3\xf0\xf5\xaa\x59\x70\xfc\x6f\x78\x4a\xa9\x58\x66\xb9\xb4\x32\x33\x2f\x84\x30\x3c\xb8\x6c\x43\x06\x8a\x24\x60\x37\xd3\x4a\x6d\xae\xe2\x73\x33\x7d\x23\xff\xa0\x6c\xb7\xcc\x01\xac\x0c\x68\x7e\x3d\x93\x79\xc4\xa7\xc9\x8a\x2c\x68\xe2\x7b\xce\x50\x72\xc9\x93\xc4\x0e\x33\x26\xe7\x4c\x63\xe0\x02\x65\x67\x22\xc5\x1c\x26\x47\x85\xeb\x75\xc8\x22\xf3\xdb\x28\x61\x54\x14\x19\x3e\xcf\x48\xe2\x95\x2c\x72\xf7\xbc\xb1\x0f\x7f\x78\x09\x2c\x78\x32\x0c\x3a\xaa\xdd\xba\xb0\xa5\x8b\x46\x19\x05\xe0\x9d\xc3\xaa\x1e\x86\x63\xca\x25\xcb\x73\x1e\xdb\x68\x02\x7e\x96\xe5\x72\xc9\x63\x8c\xa1\x38\xb2\x41\xef\x66\xec\x99\xe3\xcf\xb3\x90\x62\x24\xd8\x9c\x82\xa2\x62\x4f\x11\xae\x19\x8e\x83\xb9\x05\x22\x86\x2e\x3a\x46\xc3\x97\x59\xa5\x6e\x7e\xc9\xb1\xff\x6f\x40\x39\xb2\x27\x24\x91\x90\x12\x5a\x08\xae\xb1\xa7\xfc\xa2\xd0\x24\x96\x57\x62\x60\x7d\x56\x5c\x11\x4a\xa6\x4c\xd3\x20\xa9\xd3\x0a\x38\x45\x98\xa0\xd3\xc4\xac\x39\x64\x2b\x5d\x6c\x24\x10\x99\x31\xaa\x8b\x9c\x91\x39\xd5\x6c\xa3\x9e\x83\xef\x7b\x3b\x79\xb9\xb2\x0e\xd6\x19\x29\x84\x62\x2d\xc5\x7b\x67\xca\xd1\xdf\xff\xda\x8c\x47\xf0\x94\xc9\x42\x3f\x88\xf5\x77\xb5\xe0\xd1\x22\x54\x66\x79\xca\x14\x91\x45\xcd\x2c\x7e\x69\x7f\xb6\x79\x85\x7a\x13\x70\xd3\xd5\xd4\x7d\xbc\xc1\xfb\x65\xdb\xb2\xae\x67\xf6\x05\x6d\xa7\x21\x69\xfb\xe8\xf4\xfc\xf7\x37\x07\xff\x3a\x7e\x63\xcf\xa7\x08\x85\x7e\x21\xf8\xbf\x0b\x46\x68\x2a\x8d\x2e\x9c\x84\x09\x82\x43\xb0\xe8\x83\x0f\xe0\x24\x77\x9b\x4a\xd8\x50\x20\x43\x8f\xfc\xf6\x09\x93\xd0\x69\xff\xcb\xe7\x4b\x3e\x76\xef\x30\xdf\x95\x02\xb2\x34\x82\xde\x61\x94\x08\xa6\xcd\xc9\x43\x8d\x12\x7b\xc9\x71\x31\x4f\x42\x65\xb2\x19\xbb\x6a\x6b\x13\xb5\xb5\x88\x46\xe5\x1b\x4c\x9a\x1a\x46\x9d\xf4\x30\x2b\xe7\xd0\x51\xe7\x9f\x92\x6b\x3b\x33\x00\x5b\x33\x3b\x33\x00\x55\x8f\x93\x09\xa1\x71\x9c\x83\x9a\x02\xa7\x3e\xad\x75\x00\xcd\xca\x8c\x9d\x21\x79\x41\xbe\x23\xd7\xe4\x3b\x30\x0b\xfe\xde\xb6\x4f\x52\x5b\x85\xbd\x8b\x04\x1c\x63\x8d\x9e\x4c\x3a\xa2\xf8\x2f\x0b\xaa\x61\x44\x43\x55\x2d\xc9\x94\x5b\x35\x94\x5d\x6b\x96\x1b\xb5\xc8\xae\xc4\xa3\x76\x98\x32\x13\x7c\xc0\x6d\x86\x6e\xf2\x93\x59\x35\xe9\xe7\x7e\x1b\xcd\xfc\xdc\xd8\xf7\xa7\x96\x0b\x55\xbb\xb9\x94\xa3\xa5\x54\x47\x8b\x2a\x1b\x33\x0a\x86\xaa\x08\xa7\x58\x02\x1b\xc7\x84\xdc\x05\x6f\x91\x5a\xb0\x3d\xdb\xb8\x5d\xb4\xb9\xb2\x9e\xb7\xad\x54\xcd\xf0\x07\x39\x6f\x15\x83\x00\xba\x29\x93\xf1\x98\x1c\xd3\x68\x01\xd3\x8a\x03\x99\x61\x2c\x10\x18\x6c\x41\x97\x66\xe1\xed\x6f\x31\x8e\x0d\xda\x8a\xf7\x8e\xc2\x5e\x32\xe7\x29\xa2\x02\x5b\x90\xce\x58\x9e\x63\x0e\xf5\x74\xe5\x52\xd9\x5a\x2f\x5e\xab\x93\x94\xe5\x52\xcb\x48\xb6\x68\x82\x55\xaf\xcb\x80\xe1\x80\x08\x19\xee\x5d\x4b\xf9\xf7\x47\x93\x21\xb9\x38\x9c\x40\xeb\xa2\xf3\xc3\x8b\x49\x55\xc3\xde\xb9\x38\x9c\xec\x3c\x2a\x29\x88\x73\xb3\x81\x43\xb5\xc1\x20\x15\x87\x49\xc2\x95\x1e\xa5\x34\x1b\x5d\xb2\x55\x43\x99\xda\x85\x5c\x1f\xf9\x15\xee\xe4\x85\x90\xcc\x29\xcd\xee\x3d\x5a\xce\x68\xcc\xfb\x02\xa0\xbb\x5f\x7d\x01\xd0\x1d\xaf\xbe\x00\xa8\x2f\x00\x5a\xbf\xb6\x26\x63\xb2\x2f\x00\x7a\x5e\xa1\xdb\xbe\x00\xe8\xfe\xd7\xa3\x47\x6c\xfb\x02\xa0\xcd\x57\x5f\x00\xd4\x17\x00\xdd\xed\xea\x0b\x80\xee\x7f\x6d\x5d\xae\x49\x5f\x00\x74\xaf\xab\x2f\x00\x5a\xbf\xfa\x02\xa0\x1b\xae\xbe\x00\xe8\x86\xab\x2f\x00\x5a\xbf\xfa\x02\xa0\xfb\x5d\x7d\x01\x50\x5f\x00\xf4\xac\xf3\x22\x49\x5f\x00\x64\xaf\xbe\x00\xe8\x59\x64\x7f\x91\xbe\x00\xe8\x4e\x57\x5f\x00\xd4\x17\x00\x35\xb9\xfa\x02\xa0\xe7\xe2\x94\xe9\x0b\x80\xfa\x02\xa0\x3f\x8e\xa2\xdb\x17\x00\xf5\x05\x40\x7d\x01\x50\x5f\x00\x74\xeb\x2c\xfa\x02\xa0\xe7\x60\x02\xe6\x4c\xf1\xff\xb0\x89\x4c\x78\xb4\x6a\x9d\xf0\x77\x66\x5b\xcb\x2a\x3b\x2c\xc9\x60\xdc\x20\xb5\xaa\x45\x11\xc7\x96\xd5\xae\x9c\x05\x84\x0b\x6b\x58\x7c\x7b\xdd\x2f\x40\x82\xad\xa8\x63\x71\x2f\x78\xda\x3c\x92\x02\x83\x18\xab\x11\xc9\xd7\xcc\x6f\xd1\xda\x44\x08\x5f\xa4\xa3\xd4\xea\xdd\xb0\x14\xce\xef\x04\x2d\x3d\x07\xe3\x37\x6e\x10\x9a\x65\x09\x67\x6a\x4c\xce\x7d\x8b\x13\xe0\x5e\xea\x15\x89\xb2\x62\x48\x52\x96\xca\x7c\xd5\xc2\x9a\xe8\x40\xe1\xac\xac\x5a\x47\x24\x3b\xc3\x31\x1d\x19\x8c\x11\x91\x65\xc9\x0a\x95\xa9\xb2\x72\xd0\x53\x8d\x3b\xe6\x12\x83\xba\x53\xcb\xf2\xe0\xba\x62\x86\x9d\x4a\x7d\x66\x37\xfc\xa3\xa5\xad\xdf\x94\xa0\x4d\xb5\x4c\x79\xd4\x84\x61\x23\x8f\xed\x90\x5b\xdf\x39\x43\x9b\x1c\x6f\xf8\x14\x5c\xd7\x2a\x33\x83\xe4\xe5\x90\x49\xce\x68\xbc\x82\x21\xa1\x99\x4f\x60\x15\x3f\xc1\x44\xef\x28\xa1\xbc\x79\x54\xbe\x9a\x38\x75\x08\x63\x11\xb3\x15\xca\xd4\x29\xc8\xc0\xf5\xe4\x1b\xfa\xb4\x24\x8e\x87\x60\xec\xbe\xc2\x1f\x0f\x31\x8f\xd7\x90\x1c\x54\x4a\x50\xbc\xb9\x0a\x2d\xee\x8f\xa2\x54\x7e\x05\xa1\x49\xb6\xb8\x5d\xfd\x35\x13\x39\x5a\x09\x9a\xf2\xc8\x6d\x8c\x03\x5c\x3b\x63\xee\x54\x15\x60\x37\x36\x8e\x67\x1e\x92\xa6\x85\xa6\xd3\x84\x8d\xc9\x09\x96\xd2\x48\x01\x9d\xee\x21\xff\xc2\x86\x35\xdc\x26\x6a\x9a\x61\xd5\x3e\xbd\xa2\x65\x6a\xc5\xc6\xd3\x03\x0b\x82\x65\x43\x4c\x98\x9d\x2f\x05\x23\x4c\xe8\x7c\x65\xd6\x6e\x22\xe3\x73\xb3\x7c\x95\xbb\x5b\x57\x13\xb5\xcc\xa8\xe8\x22\x9b\xa2\x65\x26\x45\x37\xf9\x0f\xed\x73\x1f\xd6\x83\xb8\x41\x81\x5f\x98\xd6\x58\x59\x55\xc3\xc3\x36\x9c\x4a\x27\xf8\x27\x32\x36\xe2\x2b\x67\x61\x2b\x31\x6b\xfd\xc1\x01\x49\xe9\x25\x18\xd0\x54\x97\x72\x8d\x2e\x29\x4f\xcc\x11\x2a\xcb\x03\x5a\xea\x8a\xee\xea\x40\xf0\x77\x5d\x35\x45\xda\xee\xa0\x2e\xab\x9e\x08\x74\x3e\x4a\x79\xb3\x0a\x7e\xb2\xa6\x03\xbe\x81\xb1\x82\x64\x2b\xb3\x27\x52\x7a\x0d\x16\x29\x4d\x65\x21\xb4\xd9\x29\x91\x4c\xb3\x42\x57\x65\x26\x88\xdf\x7b\x9b\xaa\x91\x14\x33\x3e\xb7\x2e\xae\xfd\x94\x0a\x3a\x67\x23\x3f\xec\xa8\x64\xbd\xfb\xed\xec\xd4\x56\x6c\x87\xc6\xae\xc0\x65\xd2\x45\xae\x38\xd5\x9a\xe5\xe2\x15\xf9\xaf\xbd\x8f\x5f\x7d\x1a\x0d\xbe\xdf\xdb\xfb\xf0\x62\xf4\x8f\xdf\xbe\xda\xfb\x38\x86\x7f\xfc\x65\xf0\xfd\xe0\x93\xfb\xe3\xab\xc1\x60\x6f\xef\xc3\x4f\x6f\x7f\xb8\x98\x1c\xff\xc6\x07\x9f\x3e\x88\x22\xbd\xc4\xbf\x3e\xed\x7d\x60\xc7\xbf\xdd\x71\x90\xc1\xe0\xfb\x3f\x37\x9e\x72\x6b\x0f\x74\x77\xfe\xe7\x8e\xbc\xcf\x5f\xc4\xf7\x6c\xb3\x34\x3b\x3a\x8b\x36\xc3\x7c\xed\x34\x5a\xff\xd0\x6d\xa7\xd1\x49\x49\x30\x33\xfc\x38\x5c\x11\x99\x72\xad\xad\x96\x4c\xc3\xba\xb2\x9a\xf1\x61\xf9\x00\x9f\x21\xa7\xe7\x2a\xac\xc9\x0a\x6c\x16\xe9\x1c\xad\x60\xfc\x08\xc2\xd3\x2c\x61\x29\x13\x1a\xce\xf3\xc8\x69\x82\x60\x0d\x8e\xcb\x99\x44\x54\x18\x9d\x9d\x5d\x47\x8c\xc5\xf6\x61\x3d\xeb\xf8\xfc\xd5\xb3\x8e\xe7\xc8\x3a\x14\x8b\x8a\x9c\xeb\xd5\xa1\x14\x9a\x5d\x37\x8a\x77\xde\x14\xf0\x3d\xaf\x0e\x6d\x4d\x33\x9b\xbb\x6a\xbf\x23\x32\xc3\x4a\xcd\x1b\x31\x90\x16\xb2\x48\x62\x40\x18\x28\x04\x84\x80\x10\xac\x82\x69\x8c\xcf\x80\x92\x08\x1a\x64\xfd\x71\x2e\xe2\x82\x43\xff\xbb\xe0\x4b\x9a\x30\xa1\x83\x5f\x4c\x20\xc6\x10\xfe\xa8\x91\x9b\xe8\x91\x4d\x6c\xd0\x7e\x26\x39\x5f\xf2\x84\xcd\xd9\xb1\x8a\x68\x02\x5c\xa9\x1b\x41\x70\x70\xc3\xe8\xb0\x44\xb9\x4c\x94\xd1\xd8\x0d\x23\x26\xd4\x85\xd3\xc0\x8e\x9d\x53\x2e\x48\x6a\x98\x6a\xe6\x7e\xac\x30\x2e\x67\x78\x7b\x46\x73\xb3\x14\x3e\xfe\x06\x56\xf1\x54\xca\xc4\xd6\x15\x27\xab\x72\x7c\x8e\xc6\x81\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xec\x66\x4c\xe5\x7a\xe4\xbc\x1c\xfa\xc6\x17\x80\xa2\xdd\x82\x11\x9a\x5c\xd1\x95\x2a\x83\x90\xe5\x18\x5c\xbd\x22\x2f\x07\xb0\xf1\xa8\x22\x7e\x8c\x98\x7c\x3d\x80\x54\xba\xc3\x83\xc9\xef\xe7\xbf\x9e\xff\x7e\x70\xf4\xf6\xe4\x94\x9c\x4a\xcd\x50\x62\x05\xd6\x8b\x15\x36\x76\x96\xde\x37\x37\x96\x6a\x0c\x16\x12\x64\x86\x8b\x58\x5e\xa9\xc6\x1e\x4a\xdc\x7e\x86\x78\x8c\x8a\x66\x4e\x1a\x9a\x51\xe8\xef\xdc\x42\x3e\xac\x65\x6b\x87\x83\x82\x80\x8e\xe3\xfd\x38\x97\x19\x12\xc1\x05\x8c\x43\x1f\xd9\x51\x2d\x0f\xc4\x55\x9d\xc1\xfa\xce\xaa\x03\xce\x73\x2a\x74\x19\x39\x2d\xd7\xcc\x36\x96\x1e\xb7\x5e\x8e\xc7\x13\xdb\x5d\xd8\xf8\x34\xee\x0e\x33\xe0\x20\x8e\x59\x5c\x21\xff\xb3\xab\xf5\x39\x74\x2f\x17\x84\xa4\xc8\xe4\xdd\xf9\xc9\xff\xad\xed\xe3\x55\xd6\xae\xe8\xa0\x1b\x28\x97\x5c\x66\x9d\xad\xee\x19\x4b\xe5\xb2\x5f\xdf\x6d\x59\x5f\x2f\x2d\xbb\x49\x75\x3d\x2b\x44\x28\xd0\x44\x30\x3e\x49\x65\xcc\xc6\x64\xe2\x73\x6e\xaa\xdf\x86\x70\x91\x39\x23\xe6\x16\xa1\x39\x4d\x92\x55\xa8\x4c\x69\x89\x58\x1f\x15\x30\xb1\x90\x91\xcf\x68\xa2\x1e\x9b\x1b\xb7\x91\x8d\x46\x8f\x78\x6b\x8c\xdd\x4e\x96\xc3\x8f\x46\x62\x26\xa4\xb6\xca\xb0\x99\x25\x00\xb4\xe5\x32\x22\x68\x59\x07\x85\x0d\x15\xf9\xa6\x30\xef\xc7\x89\x46\xae\x1c\xb1\x27\x7e\x64\x0c\x99\x16\x8a\xa9\xcd\xa2\xb1\xb4\xb5\xcd\xe8\x39\xa3\x31\xc4\x1c\x32\xaa\x17\x98\x97\x9c\x52\x75\xc9\x62\xfc\xc0\xaa\x66\x3e\xec\x01\x6e\x5a\xf7\xa8\x0b\x33\x6f\x17\xe1\x00\x95\x0c\xb3\xa5\x21\x36\xc2\xe2\x47\x5e\xf5\x16\x87\xd0\x10\xe5\x9d\x48\x56\x67\x52\xea\xd7\x1e\xac\xa6\x93\x1d\xf0\x8b\xd5\x96\xab\x61\x27\x50\x27\x29\x3c\x77\x04\xab\x01\x87\x2a\xc4\xc9\x39\x2a\x57\xfc\xa9\x1f\xa9\xbc\x10\x07\xea\x87\x5c\x16\x8d\x85\xd8\x9a\xb2\xf9\xc3\xc9\x11\xb0\xa2\xc2\xa6\xfd\x09\x9d\xaf\x32\xc9\xd1\x45\x75\x83\x61\xf0\xde\x26\x2e\x86\x67\xa2\xcc\x31\x23\x6f\xe9\x8a\xd0\x44\x49\x47\x4b\x1b\x94\xaa\xd9\x8b\xc4\x1a\xa3\xe6\xeb\xa9\xd4\x8b\x35\x2b\xd4\x1c\xa8\xf5\xdf\x0d\x83\x2c\xc0\x32\x56\xcf\xc5\xda\xcf\x35\x44\x3c\xb2\x9c\x45\x2c\x66\x22\x7a\xec\x65\x7f\xec\xe4\x39\xd8\x3a\xa7\x52\x98\x83\xd9\xc9\xe6\x39\xf1\x59\x93\x96\xa4\xe1\x56\x81\x90\x96\xb5\xfe\x28\x64\x61\xc2\xb1\x2c\x14\xcb\x31\x65\x34\x2f\x18\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\xb8\x4c\xaa\xd1\xf1\xc0\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\xc8\x35\x89\x25\x2b\x31\xae\xa8\x22\xef\x4f\x8e\xc8\x0b\xb2\x67\x9e\x35\x80\xfd\x33\xa3\x3c\x81\x04\x4d\x48\xf8\xa8\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\xa8\x08\xe2\x26\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x2e\xd2\xee\x5c\x2d\xe7\xc7\x30\x2c\xec\x21\xa0\x3a\xac\x3a\x26\xc6\xf9\xfc\xa1\x20\xc5\xe5\xa4\xb2\x57\x86\x37\xa8\x89\xc0\x27\x5c\x1a\x92\x51\x4e\xa8\x88\x65\xba\xf6\x30\xc8\x79\xa2\xd1\x22\x7c\x40\xbf\xfb\xaa\xd7\x96\x38\x85\x12\xb6\x64\x2d\xc0\x70\x6b\x3b\xef\x8d\x19\xcd\x10\xc7\xed\x08\x18\x9e\x24\x74\xca\x12\x9b\x66\x85\xa9\x99\xeb\x3b\xf0\xb1\x2b\xbb\x72\x99\x74\x57\x8a\x7e\x26\x13\x86\xa5\x12\x8e\x10\x66\xf8\x27\x41\x07\x18\xa4\x2b\x3a\x80\x35\x58\xa1\x03\xd8\xb5\x4f\x81\x0e\x45\x0b\x51\x4f\xea\x74\x30\x7a\x43\x95\x0e\x20\xbc\xb7\x9d\x0e\x8a\x45\x91\x4c\xb3\x49\x2e\x8d\xd9\xd9\x99\x6c\xb2\xc3\x96\x71\x3e\x74\x6c\x6c\x48\xbc\x04\x59\x50\xbd\x99\xe6\x41\x91\x14\xd5\x28\x24\x5c\xa5\xd4\xff\x0a\x64\x16\xb0\x9e\xba\x20\x73\xa3\x54\x02\x81\xe6\x97\xf6\x8b\xa7\x2c\x0e\xba\xa8\x33\x6e\xe1\xec\xec\x44\x1a\xc9\x88\x26\xd0\xec\xa0\xdd\x96\x23\xf5\x6d\x57\x1f\x38\x28\x8d\x83\x18\x25\x7c\x16\xe4\x09\x53\x70\xb4\x38\x17\xa6\x90\x31\x0b\xa2\xce\x98\x7b\x78\x81\x25\x54\x70\x9f\xab\xca\x33\x7a\x85\xcd\x02\x61\x71\xe5\xd7\x5a\x5a\x9c\xe1\xb7\xbe\x85\x82\x99\x20\x13\x31\x17\x73\xf0\xab\x0d\x49\xce\x12\xac\xe7\xb3\x4c\xe0\x12\x2d\xc8\x5d\x38\x12\x6e\x50\x77\x1e\xdc\xa3\x5d\x5a\xb1\x1d\x39\xcc\x15\xe6\x33\x64\xb7\x5c\x91\x9d\x37\x8e\x00\x2d\x30\xe7\xb7\x51\xc2\xec\xe0\x1b\xfa\xd5\x44\x4f\xe7\x25\x17\xb1\x2d\x7d\xab\x10\xcb\xd9\xb9\x56\x0f\x86\xa2\x4a\x1e\x87\xbc\xe5\x15\xf9\x28\x88\x27\x16\x19\x35\xde\x1e\x67\xa8\x32\x3b\x1f\xdd\xe8\x76\xc7\xab\x7f\x48\x7d\x98\xf7\x02\xd6\xde\x3c\x77\x64\x2c\xf7\xf5\xfb\xdc\xbb\x3c\x2a\xd8\xa6\xe5\x7e\x5d\x5b\x31\xbf\xe0\xb0\x4e\xa5\x8f\xcc\xb6\xd6\x5c\xcc\x55\x68\xc9\x54\x3b\x5b\x6d\x36\x65\xdc\x0a\xcf\x72\x99\xba\xbc\xe2\xba\x69\x50\x2d\xd9\x7d\x2a\x66\x48\x62\xd4\x89\x27\x6e\x84\xcc\x53\x45\x0f\x73\x43\x09\xcd\x69\x72\x9e\x35\x6f\x04\x40\xd6\x40\xa7\xdf\x9e\x1f\x54\x87\x06\x61\x6d\x33\xca\x19\x7c\x4f\x68\x9c\x72\xa5\xc0\x11\xc6\xa6\x0b\x29\x2f\xc9\xde\x06\x04\xdd\x20\xcb\x4a\xf1\xb9\xda\xb7\x7b\x7e\x64\x66\x3f\x20\x5c\x24\x3e\x93\x09\xec\x60\xa1\x7d\x12\x3b\x3c\x24\xf2\xb3\x80\x35\xb4\x8d\x56\x6c\xb2\xc2\xfa\x34\xb1\xb5\x8a\xd9\x05\x8f\xce\xb0\xd7\x97\xa7\x5d\x99\xdf\x67\x97\xe8\xd4\xee\xed\x3a\x16\xf2\x46\x3a\xa2\xf6\xf8\xe8\x44\xb2\xca\x45\xc4\x54\x77\x10\xac\x3f\x96\x63\x92\x98\x61\x45\x3c\x83\xec\x27\x7a\x63\x3a\x1c\xf8\xa5\x77\x01\x58\xc5\xfe\x74\x37\xd4\xa8\xab\xb5\x46\x50\xca\x34\x42\x23\xdd\x70\x34\x60\x81\x4e\x85\x58\x48\x21\x73\xdc\xa2\x46\x88\x4a\x01\x5b\x1a\x58\x14\x46\xf3\x60\x4d\x2c\x8b\x0e\xa6\x7a\x58\x46\x89\xc3\x40\x20\x00\x33\x20\x16\x5b\x39\x87\x2b\xae\x17\xd0\x4d\x61\x51\x8b\x1a\xc2\x4c\x72\xa6\x20\x00\x23\x08\xcb\x73\x99\xdb\x84\x2c\xe7\xb7\xb6\x85\x56\x13\x19\x43\x46\x97\xd9\x24\xd4\xfc\xb5\xab\xc2\x40\x75\xd9\xbb\xc8\xe3\x63\xb2\xd9\x8c\x45\xa0\x68\x85\x04\x46\xae\xbd\x57\xb6\x97\x70\x15\x7c\x5a\xba\xde\x47\x29\xbf\x36\x4f\x09\x7f\x55\xeb\xa0\x28\xa4\x18\x6d\xfe\x7a\x30\x26\xe4\x44\xf8\xfc\xdb\xa1\x59\xc5\xf0\x4e\x97\x7a\xa6\xcd\x2b\x86\x8d\xb3\xe0\x05\x42\xc7\x99\xd1\x0e\xf3\xa2\x83\x1d\xdf\xc6\x1d\x4e\x42\x97\x78\xa7\xec\x00\x5c\xe3\x76\x50\xb3\xf4\x4e\x07\x68\xe3\x2a\x37\xb7\x7c\x29\x77\xf9\xd3\x08\x80\x90\xb6\x7c\xce\x22\x93\xf5\xdd\x8c\xee\x76\xf5\xdd\x8c\xee\x78\xf5\xdd\x8c\xfa\x6e\x46\xeb\xd7\xd6\xa4\x0c\xf6\xdd\x8c\x9e\x17\x0e\x65\xdf\xcd\xe8\xfe\xd7\xa3\xc3\x4f\xf6\xdd\x8c\x36\x5f\x7d\x37\xa3\xbe\x9b\xd1\xdd\xae\xbe\x9b\xd1\xfd\xaf\xad\x03\xce\xed\xbb\x19\xdd\xeb\xea\xbb\x19\xad\x5f\x7d\x37\xa3\x1b\xae\xbe\x9b\xd1\x0d\x57\xdf\xcd\x68\xfd\xea\xbb\x19\xdd\xef\xea\xbb\x19\xf5\xdd\x8c\x9e\x35\xc8\x3b\xe9\xbb\x19\xd9\xab\xef\x66\xf4\x2c\xa0\xac\x49\xdf\xcd\xe8\x4e\x57\xdf\xcd\xa8\xef\x66\xd4\xe4\xea\xbb\x19\x3d\x17\xa7\x4c\xdf\xcd\xa8\xef\x66\xf4\xc7\x51\x74\xfb\x6e\x46\x7d\x37\xa3\xbe\x9b\x51\xdf\xcd\xe8\xd6\x59\xf4\xdd\x8c\x9e\x83\x09\xa8\x74\xcc\x1b\x01\x46\xde\x05\xdb\xc6\xe6\x2c\x07\xa5\xe4\xd3\x62\x36\x63\x39\x70\x2e\x78\xf2\x5a\x5a\x55\x09\xe3\x57\x0f\xe5\x32\x3d\x04\x98\x1c\x5b\xde\x71\xc3\xcf\x6d\xed\x3a\x00\x3b\x96\x89\xc5\xc7\xef\x5e\x6f\x00\xd2\x69\x9c\x6f\xd8\x34\xa5\x16\xe6\xfc\x4e\x34\x8b\xc2\xdf\x40\xf0\x4d\xe5\x46\x96\xee\x51\x22\x95\x4d\x88\x06\x62\x45\x0b\x2a\x04\x73\xf6\x1e\xd7\xe0\x47\x99\x32\x26\x88\xcc\x98\x8d\x81\x53\xa2\xb8\x98\x27\x8c\x50\xad\x69\xb4\x18\x9b\x27\x09\x47\xec\x32\x79\xd9\x7e\xa2\x74\xce\x68\xea\xd2\xb8\x53\xca\x71\x28\x42\xa3\x5c\x2a\x45\xd2\x22\xd1\x3c\xf3\x83\x11\xc5\xa0\xfe\x02\x05\x95\x27\x06\xe4\xcb\x95\x19\xcf\xc3\xf2\x69\x76\x5a\x32\x44\x32\x03\x6b\x73\x08\xd8\xd0\x69\xa6\x57\xc4\xbc\x72\x62\x01\x61\x73\xa5\x49\x94\x70\x90\xd6\xf0\x44\x2c\xb5\x85\xf1\x86\x4e\x56\x0b\x3b\x53\x65\xa7\x2a\x62\x50\x5b\x33\xad\x08\x24\x08\x97\x03\xda\xa1\x62\xae\xac\x9a\xaf\x86\x84\x3a\x98\x2d\x24\xb4\x9b\x29\x90\xda\x49\x16\x1c\xdd\x7e\x14\x0c\x17\xc0\x8b\xba\xc6\x40\xb6\x06\x09\x73\xe5\x13\x3a\xf7\x9b\x73\x58\x49\xfe\x2f\x15\x0a\xdb\x02\xa1\x76\x0c\x60\x01\x04\x5b\x9a\x3d\xc0\x22\x66\xe4\x2b\xbd\x61\xd7\x3f\xf8\xa6\xd7\x34\x9f\x33\xed\xcb\x05\x9a\x66\x91\x57\x93\x4f\x42\x20\xe0\xd0\x10\x29\x49\x06\xd4\xb1\xcd\x44\x82\x8a\xab\x4d\x48\xc3\x38\x43\x0b\xb0\xb6\xe9\x06\xa7\x18\x61\xf2\x66\xd9\x81\x26\xa3\x11\x53\x64\xef\x64\x72\x38\x24\x93\x93\x23\x9b\xa1\x29\x67\x9b\x2a\x9c\x2d\x0f\xc3\x1d\x78\x13\xe6\xb1\xc7\x6e\x0b\x86\x0f\xaa\x42\xed\xb3\x27\x5e\xbf\x82\xb6\x32\x9b\x38\x00\xa8\x5c\x1e\x16\x9d\x28\xec\x90\x65\x7d\x42\xdc\x97\x6c\xd8\xcd\xc7\xca\x42\x45\x87\x48\xe4\x7e\xe1\x27\x62\xa9\x64\xeb\x31\x5c\x44\x1d\x18\x2c\xc8\xeb\xb5\xa2\x0f\x48\x12\xb5\xd9\x35\x8d\xb2\x6a\x5a\x59\x48\x81\x2a\xf6\x96\x29\x45\xe7\x6c\xd2\x30\xbc\x75\x93\x1f\x00\x22\x5c\x25\x3b\x00\x06\x94\x54\x5a\x97\x85\xd9\xc2\x55\xe5\x9b\xa4\x38\x27\xbf\xb3\xae\x72\xae\x35\x03\x56\x02\x30\x80\xb0\xd8\x75\x94\x80\xdd\x5a\xce\xf1\x5b\x37\x48\xf9\x63\xa3\x4a\x88\x18\x33\x80\xa7\x8c\x4c\x73\xce\x66\x64\xc6\x21\xad\x18\x12\x7d\x87\x88\x0a\x45\xd1\xf7\xa4\x14\xcb\xb1\x5b\x11\x5a\x50\x6e\x5e\x63\xf2\x8b\x9d\x98\xce\x0b\x81\xdd\xa8\xac\x72\x0f\x65\xb0\x7c\x46\xe6\x90\x28\x6c\x6d\x94\xbf\xbe\xf8\xc7\xdf\xc9\x74\x65\x14\x29\xd8\x90\x5a\x6a\x9a\xf8\x97\x4c\x98\x98\x1b\x5a\xa1\x50\xa8\x16\x72\x7a\x0a\x40\x3f\x11\x9c\xf8\xcb\xaf\x2f\xa7\x55\xcd\x6e\x3f\x66\xcb\xfd\x80\x7e\xa3\x44\xce\xc7\xe4\xd0\xd7\x4d\x16\x59\x0c\x7e\xfe\xe6\x20\xde\xdd\x6d\xb3\x6e\x1a\x43\x3a\x78\x32\xb2\x90\x57\x68\x61\x6e\xd8\x3d\x65\x4d\x58\x26\xb3\x22\xc1\x50\xc7\x6b\x5f\x02\x5d\x28\xb6\x5e\xa8\xb8\xf1\x5c\x80\x73\xde\x0e\x51\xe3\xa3\x36\x3f\xdc\x3d\x52\xda\x02\x18\xeb\x3e\xf6\x28\x65\xc0\x4c\x5e\xd3\x24\x99\xd2\xe8\xf2\x42\xbe\x91\x73\xf5\x4e\x1c\xe7\xb9\xcc\xab\x73\x49\xa8\x91\xd1\x8b\x42\x5c\x62\x0f\x09\x8f\xe3\x20\xe7\x36\x81\xc0\xc1\x7e\x6f\x7a\x61\x2c\xea\x77\xa2\xdf\x19\xdf\xe5\x28\xec\x9a\x97\x16\xb6\xad\x27\xc3\x1d\x19\x8e\xaf\xc2\xcd\xf6\xf5\x8b\xbf\x7e\x8b\x5b\x97\xc8\x9c\x7c\xfb\x02\x6a\x08\xd4\x10\x0f\x31\x48\x54\xa3\x9e\xa4\x34\x49\x0c\x23\x0f\x37\xa5\x21\xf4\xa6\x4d\xf8\xe0\x7b\x50\xb7\xdf\x6e\x77\x56\xe0\x2f\x2e\x7e\x05\x29\xc2\xb5\x62\xc9\x6c\x88\xa5\x53\xde\x98\xde\x05\x75\x64\xd7\x72\x1f\xa8\x5f\xdb\x02\xb5\x7b\x29\x93\x22\x65\x47\x6c\xc9\xbb\x68\x02\x58\x19\xcd\x39\x98\x12\xae\x40\x0e\x4e\x13\x19\x5d\x92\xd8\x7e\x19\x64\x55\xd5\xe1\xca\x9f\x6e\x3f\xd7\xf0\xfd\x2b\x19\x65\x29\xcd\x32\xa3\x03\x40\x85\x66\x4e\xaf\x2a\xc4\x80\x33\x09\x98\x0a\x4f\xbf\x9f\x2b\xbe\x91\xe1\x9b\x8d\x87\x68\x9c\x86\xd6\x3e\x32\x52\xce\xbe\xa3\xbe\x7e\xe5\x80\xee\x34\x64\xf0\x6f\xac\x72\x5a\x53\xcc\x3d\xdc\xa6\xdf\x18\xa8\x00\x98\xed\x03\x2c\xf9\xd1\xfa\x8e\x92\xd6\xe9\x74\x15\xba\x88\x5b\x9a\xe3\x51\x92\xb1\x5c\x71\x65\xe4\xf2\xcf\x70\xa0\xb0\x2b\x62\xe9\x78\x7e\x1c\x22\xe0\xe1\x06\x8c\xe7\xf6\x9c\xd2\xd8\x29\x38\x20\xb0\x42\xc4\xb7\xde\xa0\xd6\x56\xb5\xda\xf3\x62\x0a\xfb\x07\x6e\xbf\x4f\xa7\xd5\x0e\x25\xf1\x63\xf3\xd8\x9f\xcb\x65\xa8\xb2\x58\xf3\x89\xe7\xb1\x78\xd7\x73\xe2\xac\xf0\x7e\x4f\x95\xb1\xfa\xc9\x77\xc4\x3f\x80\xa3\xda\xc5\xad\xb2\xd0\x8a\xd5\x89\x27\x2c\xb0\x05\xac\x01\x39\x26\x98\xb4\x61\xce\x84\xfd\x29\xd9\x7d\xb5\xfb\xa8\xdc\x15\x49\x94\xcb\x8c\xce\x5b\x75\x2a\xaa\x51\xaa\x3e\x6c\x08\xa3\x61\xec\xa7\x80\x95\x64\xf6\x2e\xc3\x49\x1c\x4a\x10\x60\x40\x61\x30\xdf\x11\xd8\x5a\x16\xd0\x68\x8e\x5c\xd1\x15\xa1\xb9\x2c\x44\x6c\xdd\xa1\xde\x1f\xfd\xb6\xf6\xe0\x53\x29\x58\xd9\xb7\xb4\x8a\xc2\x01\x01\x28\x2e\xc8\xcb\xf1\xcb\x17\xcf\x45\xc4\xc1\x1b\xd6\x44\xdc\xa9\x17\x71\xc8\x9f\x1e\xf5\x5d\x1d\x9e\x7f\x47\xef\xfb\xd6\xfa\x66\x4a\xb8\x7e\xee\xc0\xc0\xe1\xa3\xab\x9c\x6b\x16\xb4\x27\xdc\x03\x8b\xc7\x18\x96\x01\xe6\xc4\x60\x53\x9f\x8c\x96\x44\x6a\x07\xf2\xa1\x8a\xe9\x17\xe4\x5b\x96\x41\xc1\x71\xdb\xe4\x1a\x53\xb7\xb0\xb0\x90\x50\x3b\x3b\x64\x0f\xef\xdc\xc5\xca\xfc\xc1\xa3\x6e\x2d\x4b\xb4\xe3\xeb\xac\x05\x82\x68\x0d\x04\x22\xa3\xe0\xbc\xcb\x3a\xa4\xe0\xbf\xd8\x82\x2e\x19\x20\x12\xf0\x84\xe6\x09\x84\xc8\xcf\x71\xee\x64\x5a\x68\xc2\xc4\x92\xe7\x52\x80\x9f\x18\x4a\x36\xa6\x09\x0b\xbb\x73\xff\x79\xef\xe7\x83\x33\xc8\xbf\x19\x60\x3f\x18\x37\xcb\x42\x39\x70\x9e\x70\x26\xc1\x70\x9f\x5d\x3e\x37\x0f\x43\x43\xe0\xb9\x6e\x5e\xe6\x39\x69\xa1\x0b\x6c\x3a\x73\x1d\x25\x85\xe2\xcb\xc7\xe2\x24\x16\x2a\xe2\x88\x37\x5a\xe7\x1a\x6c\x45\x49\xa8\x35\x04\x8a\x32\x4c\xf0\x19\x80\xee\x5d\xe5\x2b\x59\xc3\x94\x0d\xeb\xb3\x22\x29\x9f\x2f\xb4\xcd\xf6\xac\x45\x0e\x82\x10\x54\x0a\x6e\xde\xc7\xf4\x5e\x19\xb1\x7b\x90\x70\xaa\xee\xab\x72\xad\x95\x4b\xda\x51\x6c\xe7\x7e\xe9\x72\x8b\x9c\x53\xc6\x3c\x08\x3d\x95\x27\x13\x1b\x41\x73\x74\xe3\xe2\x7f\x30\xb1\xc6\x9b\x25\x98\x28\x83\x3f\x41\x77\xe3\x8c\x04\x70\x41\x2e\xa1\x04\x98\x3f\x60\x54\x81\x45\x22\xa4\x18\x2d\x02\x38\xa7\x4c\xc6\xf7\x2c\x25\x6c\x6a\x78\x34\x32\x39\x36\x53\x90\x2c\x64\x12\xbb\xe6\xdb\xe8\xcb\x99\x32\x7d\xc5\x98\x20\x27\x13\xa0\x9f\x79\x45\x2c\xe7\xda\x4c\x45\x0c\x2b\xf8\xae\xef\x9b\xe8\x79\xdf\x0d\xd6\xc2\x2a\x69\xa3\xd2\xfb\x37\x6d\x7d\xe6\x7f\xf4\x34\x73\x19\xd9\x74\x2a\x97\x0c\x48\x1a\xc7\x39\x53\x2d\x80\x8f\x1e\xc1\x4e\x6d\xc5\x4a\x79\xa3\xc6\x3f\xd5\xc0\x88\x27\x9b\x73\x2d\x81\xfa\x0e\x47\x15\x36\xde\x03\x73\xb0\x93\xc9\x61\x0b\xee\xb5\xfb\xde\xc6\x45\xcc\x50\xbb\xbb\x8a\xf0\x2c\x2a\x63\xae\x63\x52\x86\x1b\x83\x42\x09\xd4\x18\xef\x17\xeb\x6a\xaa\x26\x06\x4c\xad\x25\x93\x26\x02\x87\x31\x6c\xc5\x96\x62\x5b\x77\x0e\x04\x1d\x32\x19\x43\x67\xa6\x92\x1a\xca\xfd\x22\x24\x88\x4b\x96\x40\x26\x6f\x53\x47\x86\x3e\x09\xb9\xc6\x98\xc0\xf5\xee\xd2\x0f\x03\x2e\xbe\x46\xcc\x07\xa3\xe5\xe4\xe4\xa8\xcb\xed\x92\xf1\x78\xeb\xb6\xcb\x7b\x75\xef\x92\xfe\xdb\x5f\x12\x30\xfd\x3e\xf7\x96\x18\x6c\xb2\x30\x7d\xf6\x6f\x48\x53\x97\x9a\xd8\xbe\x8f\x3e\x13\x76\x53\x42\x07\x70\x91\xea\x93\x86\xe6\xef\x59\x91\xc0\x26\x2d\x93\x7b\x7d\x66\x32\xf5\x79\xa1\xa0\x0d\xd0\x25\xe5\x09\x22\x66\xca\x9b\x87\x74\xe1\xf7\x44\xd2\x18\xcb\x3d\x2e\x59\x2e\x58\x42\x52\x19\x17\x09\x7a\xf3\x7c\x7f\xe1\xb7\xef\x8e\xde\xbf\x39\x76\x49\x58\xac\x5c\xce\x21\xa1\x44\xb0\x2b\x18\x5d\x80\x42\x12\x59\xe0\x2e\x5f\xf6\x63\xce\x93\xc3\xe2\x44\x33\x14\x1d\x13\xee\x85\x52\xae\xf9\x1c\x01\x36\x4b\xb5\x70\x9a\x33\x7a\x29\x0b\x4d\x96\x45\x22\x58\x5e\xf6\xc7\x64\x4b\x26\xd0\x07\x6b\x7e\x60\x1e\x1b\x62\x35\xf2\xbc\x02\x91\x69\x81\xd3\x1c\xec\x27\x8d\xac\x26\x6f\x4b\x8c\xe0\xcb\xa0\x39\x74\xa5\x85\xe4\xed\xd0\xa5\x4e\xf3\x0a\x50\x4b\xb1\x9c\x78\x1d\xb2\xd4\xa1\x4b\x62\x1a\xcd\xb9\xcb\x80\xb1\x89\x2f\x0f\x77\x1c\xee\xef\x6e\xa9\x56\x88\x56\xe1\x5b\xec\x80\x4e\xf6\x4d\x64\x7c\x83\xd5\x50\xea\x5d\x70\x7f\xd8\x32\x5b\x4b\x42\x09\xba\xdb\x47\x0e\xfe\x06\x32\x65\x9b\xb0\xc1\x7b\x0b\x4d\xb0\x3c\x26\x45\x92\x9c\xb3\x28\x67\xf7\x0d\x33\x54\x39\xc5\x49\x6d\xac\x9b\x2c\x80\xc0\x9c\x05\x4c\x10\x7b\xb3\x28\xf1\x07\x82\x3c\xa7\xb2\x16\x37\x2b\x12\x48\x0d\xa7\x62\xe5\x08\x0e\xb3\x57\x41\x4c\x97\x2b\x97\x65\x86\xdc\xa7\xb2\x0a\x8a\xf9\x87\xf9\xe6\x6b\x54\x29\xcc\x3c\xe0\x22\xe6\x4b\x1e\x17\x34\x81\x07\x81\x51\x66\x13\xb6\xa8\xc5\x31\xc7\xb3\x9c\x3a\xf4\xe3\xfb\xe6\x30\x97\x67\x72\x1f\xe7\xfd\x27\x9c\xde\x8a\x8b\xf9\x08\x3e\x31\x0f\xb6\x33\x1c\x49\x31\xa2\x23\xb3\x6d\x9e\x88\xdd\x02\xf8\xfd\xef\xc0\x30\x38\x73\xeb\xeb\xd8\x90\x22\x4c\xc8\x62\xbe\x00\x62\xe5\x29\x75\x50\x9a\x09\xd3\x80\x92\x68\xf3\x19\x30\x89\xcd\xfe\x36\xb6\x56\x46\x88\x1a\x59\xdd\x1b\x4f\xc4\x76\x69\xea\xe0\xad\x25\xe3\x07\x6c\xc6\xd2\x48\xdf\x7b\x07\xca\x25\xcb\x97\x9c\x5d\xed\x5b\xcd\x6f\x64\x64\xc2\x08\x29\xa2\xf6\x81\xb0\xfb\x7f\x42\xeb\xe8\xe2\xdd\xd1\x3b\x68\x39\x6e\xbd\xee\x4e\x54\x19\x51\xa0\xc6\x84\x66\xfc\x67\x96\x2b\x00\x55\xbe\xe4\x22\x1e\x92\x82\xc7\xdf\x3f\x60\xc2\x17\x17\xbc\xcc\x62\x6d\xc5\xb5\xde\x58\xae\x64\xab\xe8\xf9\x7f\x70\x7b\x06\x12\x74\xca\x12\x29\xe6\x01\x06\x00\x48\xf3\x13\xc1\xf5\x5a\x77\x66\x44\x3a\x05\x0f\x8f\xcc\x63\xc8\x15\xe6\x32\xaf\x84\x33\xcc\x78\x80\xff\x18\x64\x1c\x1b\x96\xc6\x2b\xe3\x41\x1a\x97\x2a\x75\x24\x4c\x04\x72\xe5\xc2\x0e\x1e\xdb\xe1\x4a\xa2\x2c\x5e\x50\x11\xc3\x9f\x51\x24\xf3\xd8\xce\x97\x6b\x9f\xde\x8c\xc9\x70\x98\x81\x05\x62\xc8\x70\x34\x2a\xea\x4f\x06\x35\x2d\x4f\x2b\xa9\xb0\x4e\x6b\x2f\x04\xff\x77\xc1\x08\x4d\xa5\x61\xc4\xf5\x26\x10\x35\x8a\xa4\x74\x05\xb2\x10\xa6\xfa\xc6\x95\x6b\xd8\x1a\x5b\x35\x24\x67\xcc\x28\x5d\x25\x4c\xc0\x90\xbc\xa9\xe2\x06\x0c\xcd\x5c\xce\xb1\xa0\xd9\x7e\x84\xb3\xcf\x99\x92\x45\x1e\xb1\x33\x8c\x71\xa6\x2e\x9f\x6e\xfd\x65\xcc\xaa\x68\x7a\xc9\x04\xfa\x94\x0c\x69\x20\x8c\x5b\xe4\xb0\x06\xd1\x82\xc5\x05\x48\x95\xe9\x8a\xcc\x38\x76\x86\x01\xd1\xce\xe7\x0b\xa6\xb4\xb3\x8d\xf6\x21\x47\xad\x6c\xb2\xe7\x26\x00\xdb\x37\x48\x66\x2f\xbd\xb0\x29\x05\xdc\x72\x38\xb2\x54\xbb\x7a\x2d\xd4\x06\x55\x91\xba\xb3\x5c\xa7\xb4\x1a\x93\x37\xe6\x51\xb8\x9f\x82\x8e\x1b\xbc\x46\x5c\x88\x31\x5b\x37\x32\x99\x51\xb5\x80\x7e\x34\xf5\x25\xb0\xcd\x2c\xa2\x22\x37\x0c\x03\x31\xe6\x69\x1c\x1b\xee\x9a\x93\x1c\x5b\xce\x6f\xf2\x3b\xb6\xac\xcf\x31\x93\x1d\x05\xf2\xee\xa9\x08\xb1\x03\x5f\x6f\x61\x08\x1f\xd5\x38\x01\xae\xa4\x11\x58\x0e\xd7\xcd\x28\xdc\x3e\xe0\x6f\xb8\xc2\xc3\x89\xa4\xe6\xe1\xfd\x46\x61\xf9\x36\x12\x90\xe6\xf3\xf6\x8e\xbb\xdd\x83\x7c\x5e\xe0\x41\xb7\x5c\xb8\x44\xa4\x1f\xd7\xf2\xee\x41\x99\x32\xb6\xea\xe1\xdb\xa3\xb0\xd0\x2f\xac\x60\x72\x65\x92\x63\xf2\x73\xdb\x30\x4b\x3d\xce\x62\x18\x7a\x19\xbc\x29\xfb\xc9\x18\xa6\x91\x2c\x9d\x49\xe0\x9f\xe6\x34\x5f\x2e\xb2\x42\x5b\x49\x18\x00\x74\x45\x0b\x2a\xe6\xe0\x26\x91\x85\x19\xef\xcf\x7f\x86\x19\xe5\x2c\x2e\x22\xdb\x8c\xc7\xed\xda\x3f\xbb\xa0\x83\x85\xd3\x03\x76\xa5\x22\x9a\xb9\x39\x87\xaf\xa5\x56\x42\xd3\xeb\x57\x84\x8f\xd9\x98\xec\xfc\x39\xf8\x6a\x07\x9f\x9e\xe5\xd2\x3c\xc2\x16\x18\xc1\xac\x12\xae\x21\xd1\x67\x27\xbc\x7b\x4c\x8e\xcd\x33\x20\x10\xeb\x09\x18\xd4\xc0\x4c\x4b\xf2\x0d\x49\xce\xe6\x34\x8f\x13\xeb\x30\xbc\x0a\x0a\xa7\x3c\xc1\xd8\x35\x57\x5a\x59\x6f\x41\x0b\xe6\xa4\xa9\xba\x34\xac\xc8\x1c\xae\x51\x4c\x35\x1d\x05\xa7\x7a\x1f\x4d\xad\x91\x45\x09\x1f\x51\xbb\xbb\x4a\xae\xb5\xff\x27\x5b\x7f\x3c\xa2\xfe\x2e\x6e\x94\x72\xc0\xeb\x6e\xae\xea\x3c\x35\x2f\x71\x0b\xb0\xf8\xea\x01\x3e\x2e\x3b\x48\x00\x0d\xa0\xff\x52\xa9\x32\x79\x3e\x6a\xf1\xd0\x6f\x38\xd2\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\x27\xbb\x3f\xd9\xfd\xc9\x6e\x71\xb2\x99\x58\xb6\x3e\xd5\xce\x7a\xda\x94\xb7\x50\x87\x7c\x0d\x4a\xf0\x9e\x51\x76\xe8\xb1\x58\xfe\x4c\x8d\x32\x6d\xfd\xda\x36\xe8\xba\x21\x8d\xc3\xde\x80\xaa\xfb\xe1\x93\x4f\x0f\x7d\xc4\xe4\xce\x0e\x93\xe6\x42\xc7\xca\xa6\x55\x0b\xbb\x87\x1e\xfe\x7e\x72\x74\x7c\x7a\x71\xf2\xfa\xe4\xf8\xec\x51\xb3\x9d\x5a\x82\xa1\x56\xe5\x72\x43\x29\x99\xe5\x6c\xc9\x65\xa1\x92\x95\x47\x6d\xdf\xcc\x04\xd6\x13\x66\x45\x0c\x1e\x0f\x07\x4c\xbf\xf1\x67\xbd\xb0\xed\x56\xd8\x56\x93\xbf\x5a\xe0\x60\x75\xb5\x7d\x5f\xe7\x32\xed\x68\x0b\x9f\xa3\x2f\xc6\x05\xdb\x36\xed\xa7\x5d\x0b\x99\x53\x11\x3d\x56\x79\x2c\xf1\x79\x8c\x3e\x9a\x66\xba\x45\x1b\x9d\x4e\x40\xb6\xbb\xc1\xa3\xc6\x84\xb3\xb7\x34\xfb\x89\xad\xce\x58\x4b\xb8\xad\x2a\xbd\x59\xc2\x22\x23\xe8\xc8\x25\x5b\x61\x76\xf1\xa1\x7b\x58\x3b\xd0\xe8\x2d\xc4\x28\xbf\x64\x6d\xf0\xe3\xbb\x04\x17\xbf\x64\x2d\x32\xa7\xdd\xb5\x06\x80\x6d\x96\x10\xf4\x34\xb3\xa6\x5b\x05\xf9\xfd\x05\xc0\xd4\x9f\x6f\x1c\xa5\x7a\x75\xb8\x0a\x2e\x7c\xdb\xf1\x4a\x60\x24\x7d\x55\x91\x5d\x9e\x89\x10\xac\x69\x86\xbd\xe9\x42\x0f\x56\xc9\xe8\x88\x34\x6d\xfb\x70\x12\x5c\xc2\x6e\xf9\xea\x6e\xc9\x58\x31\xe7\xc2\x03\x3a\xc6\xaf\x1c\x06\x88\xf2\xcd\x33\xa1\x1d\xf5\xb0\xfa\xa7\x4d\x6b\xf9\x6f\xff\x61\x42\xa7\x2c\x51\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\x31\xbc\x5d\xbd\x05\x00\x4d\x84\x8c\xd9\x29\x3c\x03\xfe\xb4\xea\xda\x01\x86\x50\xec\x17\x80\x47\x30\xc6\xd4\x3b\xff\x67\x26\xe3\xfa\x5f\xaa\x15\xf2\xe6\x56\x0a\x06\x58\xa2\x16\xe5\x71\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\x7e\x52\xd1\x82\xa5\x88\xfd\xf7\xda\x91\x00\x1a\x7c\x3b\xe0\x13\x01\x68\x11\x46\x33\xad\xc2\xb0\xee\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\xf5\x69\x2e\xbe\x01\xed\xc1\xe4\x84\x2c\x91\xc2\x5b\x43\x1c\x17\xde\x7c\xfd\x45\x79\x9c\x0f\xa2\xd6\xab\xd2\x5f\x61\x5a\x99\xfb\xde\x22\x84\x28\x0f\x15\xc9\x8c\x61\xb3\x87\x1f\x8e\xa3\xac\x18\xda\x1b\xc6\x29\x4b\x65\xbe\xf2\x7f\xfa\xca\xe4\x91\xd2\x32\xa7\x73\x28\x0c\xc3\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x19\x4b\xb5\x1c\xb9\x21\xd2\x4d\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\x16\xb5\xc5\x2b\xab\x5e\xd5\x0d\xe9\x3d\x71\xa8\x70\x7a\x2a\x82\x3d\x69\x2b\xe6\x87\x65\x16\x1b\x78\x03\xc4\xd2\x58\x96\x8d\x91\x26\xcb\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf9\x9b\x1f\xe8\xe6\x8c\x47\x0b\xda\x83\x59\x5c\xde\x6d\x76\x9d\x01\xb8\x9e\x3f\xaf\x35\xb6\xff\xb2\x4d\x17\x3f\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3d\xf5\x0e\xb0\xae\xf1\xea\x12\xf1\xba\x3a\x62\x27\xdb\xef\x0b\xb6\x79\xc1\xcb\x6d\xaf\xae\xcf\xff\x99\xe3\x9a\x41\x56\x8f\x13\xd7\x5b\x73\xc0\x31\x2d\xf4\x21\x3c\x39\xf8\xa4\x6a\xc1\x98\x37\x2d\x9e\x9b\x9c\xfb\x23\x38\x77\x7c\x1b\x58\x58\xd7\x52\x13\x9d\xe5\x32\x75\xb0\x14\x10\xde\xc0\x02\x4a\x7b\xdf\x25\x6b\xd5\x4c\x1c\xaf\xde\x19\xd4\x3b\x83\x6e\xb8\x3e\xeb\x0c\xc2\x22\x82\xed\xf5\x04\x31\xb1\x6c\x1a\xc2\xd8\x18\x41\x77\xb6\x4e\x08\xfe\x78\xb7\x80\xda\xd8\x1d\xf5\xb2\x7f\x72\x99\x4c\x83\x02\x2d\xdd\x1c\xc3\x24\x07\x49\x42\xb8\xc0\x83\x0f\x03\xf8\x5a\x2c\x86\xa6\x8d\x2b\x22\x5e\x9a\x29\xf8\xaa\xab\x0a\x78\x32\xe4\x16\x73\x31\xb7\x85\x51\x28\x4a\x6c\xf4\x89\x8b\x12\x76\xda\x2b\x87\x65\xaf\x02\xaa\x94\x8c\xa0\x29\x18\x56\x5a\x79\x4c\x4a\x3b\x6d\x98\x8d\xa6\x97\x10\x6d\x8c\x58\xcc\x44\xc4\x6c\x1f\x83\x4a\xaf\x68\x2a\xc8\xb1\x58\xba\x5e\x0e\x71\x81\xc9\x20\xc8\xfe\x36\x8f\xf1\xbc\x12\x10\xcc\x46\xb4\x41\xb0\x20\x0f\x01\xb8\xbe\xb7\xb0\x29\xa4\x62\xc8\x59\xe9\x65\x6d\xd6\x4e\xb6\xb5\x14\x6f\x2f\x33\x7d\x64\xab\x95\x32\xb4\x26\x2c\x4b\xf7\x73\x55\x48\x3e\x87\x60\x60\x7b\xf1\xf9\x87\x13\x9d\x1d\x89\xcd\x6e\x44\xe6\x3d\x62\x27\x5d\x8a\xc9\x2e\x82\x25\x59\xce\x66\xfc\xba\xa3\x73\x7a\x10\xd4\x13\xf2\x98\x09\xcd\x67\x1c\x3b\x66\x67\x39\xcb\x98\x00\x57\x2b\x94\x68\x18\xde\x6f\x25\x65\x19\x9c\xde\xc6\x64\x1e\x54\xb8\xbb\x65\x65\xe7\x9b\x94\xfd\x9e\x8f\x91\x9e\x8f\x35\xbe\x1e\x88\x8f\xd9\x9d\xbb\x3d\x4c\x0c\x32\xcf\xdb\x67\xbf\x1f\x56\x53\xd9\x6d\x17\xf7\xb6\x25\xc4\xb5\x02\x7d\xcf\x1a\xb5\xc4\xe4\x35\xac\x63\xcb\x09\xd6\xec\xa3\xde\x44\x52\x2a\xe8\x1c\x5b\x51\x68\xe9\xc1\xab\x64\xee\xdb\x89\xd5\xf3\xee\x41\x8f\x77\x25\x5e\xf0\x65\x2e\x93\x84\xe5\x8a\x24\xfc\x92\x91\x23\x96\x25\x72\x95\xda\xdc\xd7\x98\x9c\x6b\xaa\xcd\xae\x3e\x67\xba\x59\xd8\xb7\x1d\xaa\x8d\xab\x42\xef\x08\xfb\x1f\xcb\xda\xa1\x28\x9c\x64\xb6\x82\xf2\x9d\x00\xa6\x71\x00\x9d\x8d\x86\xe4\x94\x2d\x59\x3e\x24\x27\xb3\x53\xa9\x27\xa8\x7d\x57\x13\xee\xf0\x46\xc2\x67\xe4\x95\xb1\xeb\x94\x26\x1a\xbb\xcb\x04\x05\xea\x32\xaf\x0c\x50\xe2\x16\x76\x51\x9f\xb7\x5e\x7b\x0e\x23\xf9\xca\xf3\x46\x91\x8c\x56\xcb\xe4\xdb\x77\xb5\x5e\xa0\x03\xac\x27\x2d\xa1\xac\x83\xfd\x8d\xb8\x0a\x0e\x89\x0f\xac\x40\x2e\x48\xce\x54\x26\x85\x62\x55\x98\x51\x3f\x23\xb4\x76\xbb\xc5\x30\x6e\x2c\x3c\xdb\x8a\xcd\x4c\x2a\x0d\x25\xb4\xdd\x34\x85\x9b\xb8\xe1\xa0\x22\x99\x26\x09\x8b\x2b\x5d\x01\xb1\x9b\x15\xad\x7a\x08\x2c\x1a\x8a\xef\x6f\x83\x85\xca\x95\x1a\xe7\xca\xfd\xbe\xc3\xa4\xeb\xe1\xe4\xda\x8b\xdf\x54\xd9\x5c\x1e\x4c\x90\x23\xc1\x06\x58\x03\x3c\x07\x18\x7c\x15\x34\x82\x5a\x48\x79\x49\x22\x99\x66\x09\x1c\x9d\x16\x27\xab\xec\x43\xe7\xb7\xd2\xc8\x8c\xae\xf6\x83\x16\x75\xf0\x41\xbb\x0e\x75\xad\x14\xb1\x2e\xd4\x30\x76\xcd\xa2\xce\x7a\xd8\x1e\x5f\xb3\x28\x68\xc2\x0c\x90\x6c\x91\x43\x88\x30\x27\xb6\x7d\x6f\xfd\xd6\x21\x87\xae\xdc\xfc\x2d\x6a\xe9\xc2\xab\x86\x62\x09\x63\x3a\xb4\x7f\xfb\x08\x68\x9c\x02\xb6\x10\xd6\xd7\x85\x30\x1a\x7e\x33\xe2\xd1\x5b\x83\xbe\xf4\x89\xd4\x6e\x2c\x68\x91\x26\xa5\x26\x7b\xbb\xfb\xbb\x83\x35\xff\x63\x0d\x32\xfe\x22\xf8\x25\x07\xa8\xd3\x0c\x70\x43\x59\xb4\x1b\x0f\x09\xd7\x2e\xd3\x1a\xe1\x9e\x60\x56\xb6\xe8\x6f\x48\x94\x24\x3a\xa7\x31\xb7\x6a\x0c\x7c\x6a\x6e\xd2\x79\x61\xb9\xfc\xde\xee\xa7\x5d\xdb\xda\xeb\x4a\x8a\x5d\x0d\xd3\x1f\x93\x0b\xc4\x89\xf1\x03\xad\x64\x01\xb8\x50\x48\x82\x2c\xe1\x11\xd7\xc9\x0a\x38\x16\x91\x05\x62\x52\x19\x79\x61\x8b\x0d\x8f\xaf\xb9\x76\xcd\x75\xe4\x8c\xbc\xc0\xee\x7a\x88\xe1\x44\x15\x74\x58\xdf\x5f\x30\x9a\xe8\x05\x26\x89\x08\x29\x46\xd8\x20\xd5\xb0\x12\xfb\x4d\xdb\x78\x49\x3b\x77\x62\x78\xb5\x70\x2d\xae\x4f\xa8\xa5\xe5\x60\x98\xe8\x0f\xcd\xbb\xb6\x93\x35\xf4\xba\x8b\x8b\xc9\x0f\x95\xbe\xed\xc0\xc5\xb5\xce\x5c\xea\x0e\x78\x03\x58\x3e\x93\x79\xba\x05\xbc\xa3\x9b\x60\x65\xab\x06\xee\xa4\x43\x16\xd6\xb6\x91\x3b\xd9\x8c\x46\x78\xf7\x0e\xee\xe4\x57\x59\x00\x18\x08\x9d\x26\x2b\x8f\xc4\xa0\x98\x26\x3b\x66\xa8\x1d\xc3\x9e\xcc\x6e\xf8\x91\xd1\x18\x81\x32\x94\x66\xb4\x91\xea\x16\x5e\x9d\x05\xd1\x82\xb9\x75\x2b\x07\x0a\xa5\x65\x4a\x16\xf6\xb5\xab\xa5\x97\xf6\x64\x8c\xe1\xf4\xb8\xba\xa6\x9c\x65\xc8\xe1\xec\x6f\x9e\x1d\xff\x5a\xe3\x1b\x48\xf7\x4a\x13\x8f\x28\x24\x5b\xd8\x23\x8a\x0b\x24\x16\xe2\xce\x74\xc4\x4b\x3b\x48\x7e\x20\x1d\x26\x40\x90\x76\x85\x9c\xf5\x81\x20\xa8\xd7\x3e\xd7\xab\xb3\x9c\x0a\xd2\x59\xde\x00\xd9\xe4\x64\xb5\x7b\x06\xbd\x2f\xe8\xcf\x01\x77\x8c\x8b\xa1\x46\x54\x48\xc1\x23\x9a\xf0\xff\xb0\x18\x3b\xe4\x63\xfe\x1c\xe8\x39\x11\x55\x6c\x04\x41\x5d\x61\x1b\x7b\x06\xd5\x8a\xe6\x38\x6a\x29\x41\xf9\xf0\xc8\x67\xf8\xbc\xf6\x59\x19\xa4\xdb\x9c\x00\xd2\xbe\x20\x35\xbc\x6e\x27\x73\x37\x5b\x8c\x74\x49\x81\xac\x83\x04\xf2\xf5\xf4\x71\x04\xab\x82\x02\x4f\x64\xe1\xc0\x8c\x10\x5e\x73\x6b\x64\x99\xd1\x49\x3a\x7d\x75\x74\xc7\xe7\x44\xf8\xde\xf3\x0e\x4b\x78\x9d\x20\x41\xfe\x83\x6d\x55\xef\x9c\xc6\x4e\xe8\x51\x31\x67\xe4\xa5\xf9\xe5\xdf\xff\xf6\xb7\x6f\xfe\x36\xc6\xe1\x7d\x2e\x84\x20\x27\x07\xa7\x07\xbf\x9f\xff\x7c\x08\x25\xb8\x6d\xa9\xda\x51\xa2\x67\xd7\x69\x9e\x9d\x26\x79\x7e\xd1\x14\x4f\x28\x2c\x69\xcd\x45\xaa\x11\x06\x18\x32\x44\x11\xb5\x1a\x66\x80\xe6\x87\x48\xb7\xa1\xbb\xd6\x1c\xb5\xad\x38\x63\x3a\xca\xce\x65\x74\xd9\xa1\xf5\x74\xc4\xb2\x9c\x45\xe8\x8d\xbb\x38\x9c\xe0\xe8\xc6\x8a\x3d\x7d\x77\x51\x16\x34\x40\xd6\x4f\x09\xd9\xf7\xa3\xf5\xd7\x19\xcb\xf7\x92\x65\xda\x3b\x08\xa6\x34\xba\xbc\xa2\x79\x0c\xfe\x33\xaa\x39\x00\x14\x23\xc2\x60\xce\x6c\xb3\x38\x4c\x2b\x44\x28\x35\xd7\x8c\x1b\x79\x39\xba\x29\x9c\xd3\x15\x1c\x63\x28\x02\x67\x94\x27\xe0\xa7\xb5\x7d\xb0\x31\xef\x28\xca\xbc\xe3\x30\xf4\x9c\xf7\x26\x9e\xbb\xb6\xd6\xc4\x0b\xfa\x74\xdf\xd7\xda\x6b\x9b\xfd\xb8\xc5\xa2\xce\x8a\xb8\xbc\xd2\x32\xbf\x17\x75\x1d\x8c\xb7\xbd\xa2\x2e\xcb\xd9\xb9\x96\x8d\xfa\x6e\x90\xf5\x58\x0c\x0e\x76\x43\x24\x66\xca\x66\xd2\x30\xe1\x1b\x43\x2b\x71\x01\x87\x90\x0a\x28\x41\x74\xbe\x33\x59\x09\x9f\x60\xde\xa7\x47\xc9\xb7\xf0\xac\xfb\x2a\xc4\x64\x75\x1d\xc7\x87\xe6\xed\x58\x0a\xb3\x1b\x96\xb5\x14\xb6\xdf\x39\x7c\xc8\x74\x84\xfe\xe1\x80\x91\x03\x3e\xa9\x9d\x7e\x3d\x58\x13\xe5\x54\x2d\xb0\x17\x38\xbb\xe6\xda\xa2\xbf\x4e\x64\x5c\xef\xe0\x3f\xcf\x69\xc4\x48\xc6\x72\x2e\x8d\x30\x2a\x84\x8e\xe5\x95\x20\x53\x36\xe7\x42\x39\x52\x00\x44\xbb\xa5\x19\x44\x7d\xb8\xf2\xf0\x73\x63\x72\x56\x81\x54\xb1\xc5\x4e\x91\x2c\x8f\xa6\x9d\x73\x3d\x5e\x05\x12\x0b\xe8\x84\xb0\xfa\x9e\xc2\x61\xcf\xb0\xcf\x4d\x79\xaf\x10\xf0\xe4\x98\x25\x74\x85\x39\xad\x33\x2e\xc0\x72\xcc\xd5\xa0\x83\xb8\x16\x76\xbd\x73\xdf\xdd\x38\x0f\xae\x48\xce\x68\xb4\x68\x17\x62\xee\x03\x61\x77\xbc\xfa\x40\x58\x9b\x41\xfa\x40\x58\x1f\x08\xfb\xcc\xd5\x07\xc2\xfa\x40\x58\xed\xda\x5a\x2b\xa9\x0f\x84\x35\xbe\xfa\x40\xd8\xed\x57\x1f\x08\xbb\xc3\xd5\x07\xc2\xee\x78\xf5\x81\xb0\x9b\xaf\x3e\x10\xd6\x6e\x32\x7d\x20\xac\x0f\x84\xd9\xeb\x8f\xe7\x1d\x74\x57\x1f\x08\x5b\x1b\xa4\x0f\x84\xf5\x81\xb0\x3b\x5f\x5b\x6b\xe2\xf5\x81\x30\xbc\xfa\x40\x58\xf5\xfa\x63\x89\x3a\x17\x46\x9a\x18\x83\xb2\x7d\x7d\xde\x04\x42\x17\x3c\xb2\xd1\x28\x39\xab\xd4\x74\xe1\xa3\xc6\x65\xbf\x8d\x00\xe2\xc4\x95\x15\xd9\xb8\x53\x19\xcd\xda\x58\xfb\xd5\xb2\x27\x5e\x26\xe3\x32\x1c\x12\xc4\x41\xd0\xac\x6e\x5e\x7f\xf7\x68\x95\x65\x6d\x82\x1f\x0f\x13\xf8\xd8\x92\x28\x51\x07\xc1\x8e\x3e\xd0\xf1\xec\x02\x1d\xdd\x38\x09\x3b\x70\x10\xb6\x16\x15\x36\xfe\x7f\xb1\xc8\x99\x5a\xc8\xa4\xf1\x46\xaf\x6c\xf2\xb7\x5c\xf0\xb4\x48\xa1\xeb\xad\xd9\xcf\x7c\xe9\x13\x0d\x54\xd9\x56\x1f\x38\x36\xfa\x2a\x83\xf6\xb8\xae\x2d\x2e\xd4\xa2\xda\x36\xf7\xaa\x88\x22\xc6\xa0\x2d\x5c\x68\xe1\x7c\x33\xf6\x4f\xf2\x6d\x40\x5e\xb6\xe3\x37\xed\x84\x38\x42\xab\xc2\x28\xdf\x7c\xdd\x68\x8c\x79\x9e\x75\xc3\x97\x7f\x38\x9b\x1c\x06\x7c\x99\x0a\xc7\x96\xb9\x58\xca\x04\xa8\x4a\xf1\x26\xa3\xac\x3d\x22\x93\x6e\x6f\x76\xb4\x32\x39\xba\x90\x11\x6d\xb5\xea\xaa\xdf\xcc\xe8\xce\x55\xcf\xd1\x1c\xd6\x12\x11\xfc\xef\xac\x3b\xb7\xe6\x6e\xed\xf5\xd9\xf6\xc7\x81\x00\xc4\x0e\xbc\x78\x67\x04\xde\x39\xb7\xad\xab\xac\x08\x0e\x0d\x17\xd7\xd5\x4a\x4b\x92\x25\xb4\xec\x4b\x05\x2b\xf0\x23\xc8\x8d\xc3\x05\x8b\x2e\xcf\x6c\x8c\x76\x4f\x31\xe6\xf5\xc9\x39\xd7\x8b\x62\x3a\x8e\x64\xba\x6f\x8e\x31\xfe\xdf\x34\x91\xd3\xfd\x94\x2a\xcd\x72\xa3\x62\x5a\xb1\x34\x8a\xcc\x28\x5c\xcc\xc7\x69\x3c\x18\x93\x8f\x02\xab\xeb\xcb\x3e\x98\x01\xb6\x84\x79\xbe\xc3\xf9\x98\x32\xc3\x11\x25\xf8\x0e\x02\x08\x3d\x33\xbd\x71\x1b\xa0\xe6\xd6\x62\xa4\x65\x7c\xfc\xe1\x63\xe3\x3d\xe7\x22\x1d\x38\x49\x9e\x5a\x0c\xbc\xb3\x5c\x90\x0e\x62\xdf\x5b\x14\xf7\xde\x1a\x75\x76\x5b\x62\xdd\x5b\x88\x76\xdd\x41\x7c\xbb\x8b\xd8\x76\x77\x71\xed\x2f\x00\x0a\xfd\x94\xe3\xd9\x1d\x3a\xfd\x3a\x8a\x63\x3f\x44\x0c\xbb\x93\xb7\x6e\x1b\xbb\x7e\xb8\xb8\x75\x37\xaf\xdb\xa5\xb9\xf1\x54\x63\xd5\x1d\x38\xef\xbb\x74\xdc\x77\xe6\xb4\xff\x62\xb1\xe9\xf6\x71\xe9\x2d\x88\x49\xb7\x26\x32\x17\x5c\x73\x9a\x1c\xb1\x84\xae\xce\x59\x24\x45\xdc\x58\x8e\xd5\xb0\x48\xfd\xf9\x51\x38\xac\xf5\x60\x55\x0b\x3d\x16\xd4\x42\xae\x1b\xbb\x0d\x0b\x5b\x5c\x94\xc3\xaa\x2d\x10\x6f\xc6\x59\x6e\x65\xdc\x82\x6c\x8d\xab\x0c\xab\x5e\xba\x5c\xc4\x1f\xe5\x15\x91\x33\xcd\x04\xd9\xe3\xc2\xad\xe3\x20\x30\x36\x4b\xbf\xa5\xdf\xd6\xe6\xdb\x97\x2f\xdc\xcd\xcf\xcf\x21\x09\xae\x57\xa5\xbe\xbc\x7f\xd8\x3e\xe8\xf3\x0e\x62\x7b\xe3\xac\x48\xaa\x4e\x62\x74\x1c\x57\xf9\xcd\xcb\x12\x34\xfa\x25\x8c\xeb\x4f\x1b\x15\x31\xb1\x95\x70\xcf\x6f\xd1\x5a\x67\xdc\x54\x55\x3f\x9f\x61\xf3\x39\x7f\xf2\xc5\xe1\xa4\x77\x27\x6f\x97\x53\xe6\x91\xb2\x56\xb6\x50\xd1\x7d\xa2\x99\x2a\xbd\xa2\x7b\x8f\x2b\xa8\x8d\xfd\x21\xa7\x11\x9b\x74\xae\x23\xb8\xe3\x44\xe2\x22\xa7\x96\x01\x7a\x95\xcf\x1d\x1e\xc1\x58\x8c\xa7\xc9\xd7\x13\x43\xa5\xee\xac\x48\x92\x15\xfa\x1c\x2a\xd5\xd7\x18\x85\xaf\x17\xf3\x82\xe3\x7f\xc3\x53\x4a\xc5\x32\xcb\xa5\x95\x99\x79\x21\x84\xe1\xc1\x65\xe7\x37\x50\x24\x01\x8c\x9a\x56\x4a\x86\x15\x9f\x9b\xe9\x1b\xf9\x07\xd5\xc4\x65\x6a\x62\x65\x40\xf3\xeb\x99\xcc\x23\x3e\x4d\x56\x64\x41\x13\xdf\xe6\x87\x92\x4b\x9e\x24\x76\x98\x31\x39\x67\x1a\x03\x17\x28\x3b\x13\x29\xe6\x30\x39\x2a\x5c\x7b\x49\x16\x99\xdf\x46\x09\xa3\xa2\xc8\xf0\x79\x46\x12\xaf\x64\x91\xbb\xe7\x8d\x7d\xf8\xc3\x4b\x60\xc1\x93\x61\xd0\xc4\xee\xd6\x85\x2d\x5d\x34\xca\x28\x00\xef\x1c\xf8\xf6\x30\x1c\xd3\xe1\xa3\xab\xa0\x85\x51\x96\xcb\x25\x8f\x31\x86\xe2\xc8\x06\xed\xb2\xb1\x4d\x91\x3f\xcf\x42\x8a\x91\x60\x73\x0a\x8a\x8a\x3d\x45\xb8\x66\x38\x0e\xe6\x16\x88\x18\x1a\x17\x19\x0d\x5f\x66\x95\x72\xfe\x25\xc7\x96\xcb\x01\xe5\xc8\x9e\x90\x44\x42\xa6\x6a\x21\xb8\xc6\x36\xfe\x8b\x42\x93\x58\x5e\x89\x81\xf5\x59\x71\x45\x28\x99\x32\x4d\x83\x5c\x53\x2b\xe0\x14\x61\x82\x4e\x13\xb3\xe6\x90\x8a\x75\xb1\x91\x40\x64\xc6\xa8\x2e\x72\x46\xe6\x54\xb3\x8d\x7a\x0e\xbe\xef\xed\xe4\xe5\xca\x3a\x58\x67\xa4\x10\x8a\xb5\x14\xef\x9d\x29\x47\x7f\xff\x6b\x33\x1e\xc1\x53\x26\x0b\xfd\x20\xd6\xdf\xd5\x82\x47\x8b\x50\x99\xe5\x29\x53\x44\x16\x35\xb3\xf8\xa5\xfd\xd9\xe6\x15\xea\x4d\xc0\x4d\x57\x53\xf7\xf1\x06\xef\x57\x1d\x8e\xa1\xec\xef\x0d\x19\xe4\x47\xa7\xe7\xbf\xbf\x39\xf8\xd7\xf1\x9b\x31\x39\xa6\xd1\x22\xc4\xe4\x10\x84\x02\xd3\x00\x46\xb1\xa0\x4b\x46\x28\x29\x04\xff\x77\x61\xc3\xca\x7b\xfe\xb7\x83\x4e\x11\xe9\x1b\x4a\x5f\xc3\x6d\x1a\xed\xf8\x8d\x4d\xef\x60\x34\x9b\xb1\x25\x15\x83\x36\x35\x6b\xea\x93\x8f\x65\xaf\xd0\x44\x00\x85\x0b\x12\xeb\x8f\xde\x1d\x9f\x43\xc2\x7e\x96\x23\x52\x09\x64\x78\xc1\xf7\x30\xd2\x94\x99\x5f\xd8\xfe\xc4\x63\x72\x20\x56\xf8\x25\x9e\x29\xae\x48\xc2\x95\x66\x20\xf5\xac\xda\xe6\xa2\xe4\x3b\x2f\xc6\xf0\xbf\x1d\x42\xe3\x38\x37\x7a\x9d\x4f\x5c\x8b\xd6\x32\x49\x51\xf3\xe3\xd3\x24\x78\x01\xc1\x34\xe6\xa9\xbd\x95\xb1\x9d\x39\x48\x12\x88\x90\xa1\x18\x54\x3a\xa7\x9a\xcd\x79\x44\x52\x96\xcf\x19\xc9\xa8\x8e\x16\x24\xa5\x2b\x12\xc9\x3c\x2f\x32\xec\x66\x10\x53\x4d\xc7\xe4\xb5\xcc\x49\xea\x0e\xb1\xd9\xf3\x46\x0e\x9f\x6f\xce\x1c\x28\x4f\x76\xf8\x4f\xae\x54\xc1\xd4\xfe\xcb\x17\xdf\x7e\xfd\xb7\xbf\x3d\xab\x06\x78\x3e\xb5\x17\xf2\x5e\x82\x06\x78\xd4\xad\x02\xae\x3a\x36\x44\xe4\x62\x9e\x84\xfb\xab\x99\x00\x68\x6b\x65\xb6\xb5\x31\x47\xe5\x1b\x4c\x9a\x9a\x9a\x9d\x34\xe2\x2b\xe7\xd0\x51\xfb\xaa\x52\x0e\x3a\xc3\xca\xf2\x06\x19\x76\x24\x3e\x99\xb8\x83\x69\xf5\x9c\xb4\xd6\xc6\x36\x2b\x73\xa0\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\xd0\xfa\x7b\xdb\x66\x5f\x6d\x4d\xa0\x2e\x52\x9a\x8c\x7d\x7f\x32\xe9\x88\xe2\xbf\x18\xa6\x69\x46\x34\x54\xd5\x92\x4c\xb9\x55\xec\xd9\xb5\x66\xb9\x51\x34\xed\x4a\x3c\x6a\x9b\x34\x33\xc1\x07\xdc\x66\x18\x78\x38\x99\x55\xd3\xa8\xee\xb7\xd1\xcc\xcf\x7f\x94\x4a\x9f\x5a\x2e\x54\x6d\xf8\x53\x8e\x96\x02\xe3\xaf\xb0\x31\x23\x37\x94\x2e\x0f\x98\x22\xb1\x84\xac\x2e\x4c\x71\x5e\xf0\x16\xc9\x1a\xdb\xb3\x8d\xdb\xc5\xef\x2b\xeb\x79\xdb\x4a\xd5\x5c\x29\x60\x03\x59\x15\x2b\xc0\xe8\xca\x64\x6c\xb5\x33\x33\xad\x38\x90\x19\xb7\xa8\x67\xd6\x6b\xe3\xfd\xcd\xb0\x97\xcc\x79\x8a\xa8\xc0\x22\x93\x19\xcb\x73\xcc\x4a\x9f\xae\x5c\x72\x60\xeb\xc5\x6b\x75\x92\xb2\x5c\x6a\x19\xc9\x16\x9d\xdc\xaa\xd1\x6e\x3b\x1c\x10\x21\xc3\xbd\x6b\x29\xff\xfe\x68\x32\x24\x17\x87\x13\xe8\x6e\x75\x7e\x78\x31\xa9\xda\x2c\x3b\x17\x87\x93\x9d\x47\x25\x05\x71\x0a\x1f\xb8\xa8\x1b\x0c\x52\x71\x41\x19\x6d\x72\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\x7f\xa0\x4a\x2f\x97\x76\xeb\x9f\xb9\xb9\xe4\x2b\x95\x4b\x16\xa3\x96\xee\x7e\xc1\x44\x9c\x49\x6e\xf4\xc5\xbe\x0e\xec\xfe\xbf\xee\xeb\xc0\xee\x7c\xf5\x75\x60\x7d\x1d\xd8\xfa\xb5\x35\x89\xb3\x7d\x1d\xd8\xf3\x8a\xe0\xf7\x75\x60\xf7\xbf\x1e\x3d\x70\xdf\xd7\x81\x6d\xbe\xfa\x3a\xb0\xbe\x0e\xec\x6e\x57\x5f\x07\x76\xff\x6b\xeb\x52\x8e\xfa\x3a\xb0\x7b\x5d\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\x70\xf5\x75\x60\x37\x5c\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\xef\xea\xeb\xc0\xfa\x3a\xb0\x67\x9d\x1e\x4b\xfa\x3a\x30\x7b\xf5\x75\x60\xcf\x22\x09\x90\xf4\x75\x60\x77\xba\xfa\x3a\xb0\xbe\x0e\xac\xc9\xd5\xd7\x81\x3d\x17\xa7\x4c\x5f\x07\xd6\xd7\x81\xfd\x71\x14\xdd\xbe\x0e\xac\xaf\x03\xeb\xeb\xc0\xfa\x3a\xb0\x5b\x67\xd1\xd7\x81\x3d\x07\x13\x30\x67\x8a\xff\x87\x4d\x64\xc2\xa3\x55\xeb\x2c\xc5\x33\xdb\xf8\x58\xd9\x61\x49\x06\xe3\x06\xa9\x55\x2d\x2a\x4f\xb6\xac\xe0\xe6\x2c\x20\x5c\x58\x78\xe3\x9b\x3f\x7f\x01\x12\x6c\x45\xf1\x8d\x7b\xc1\xd3\xe6\x91\x94\x91\x6b\x40\x80\xe4\x6b\xe6\xb7\x68\x6d\x22\x84\x2f\xd2\x51\x3e\xf8\x6e\x58\x11\xe9\x77\x82\x96\x9e\x83\xf1\x1b\x37\x08\xcd\xb2\x84\x33\x35\x26\xe7\xbe\x01\x0f\x70\x2f\xf5\x8a\x44\x59\x31\x24\x29\x4b\x65\xbe\x6a\x61\x4d\x74\xa0\x70\x56\x56\xad\x23\x92\x9d\xe1\x98\x8e\x0c\xc6\x88\xc8\xb2\x64\x85\xca\x54\x59\x4a\xea\xa9\xc6\x1d\x73\x89\x41\xdd\xa9\x65\x79\x70\x5d\x31\xc3\x4e\xa5\x3e\xb3\x1b\xfe\xd1\x72\xed\x6f\xca\x2a\xa7\x5a\xa6\x3c\x6a\xc2\xb0\x91\xc7\xb6\xcf\x29\x3f\x94\x69\x56\x68\x56\x61\xdb\x48\x2c\xd4\xe4\xb8\x0a\x4d\xb8\xf6\xd9\xe0\x91\x14\x33\x3e\xb7\xaa\xf8\x3e\x76\x74\x1f\xf9\xf7\x19\x05\x5d\xd4\x9f\x60\x2a\x78\x94\x50\xde\x3c\x6e\x5f\x4d\xad\x3a\x84\xb1\xa0\x42\xb7\x4c\xae\x82\x1c\x5d\x4f\xad\xa1\x4f\x5c\xe2\x78\x4c\xc6\xee\x2b\xfc\xf1\x10\x33\x7d\x8d\xfd\x01\x4a\xe7\x86\x05\xfd\x28\x4a\xf5\x58\x10\x9a\x64\x8b\xdb\x15\x64\x33\x91\xa3\x95\xa0\x29\x8f\xdc\x8e\x39\x48\x12\x19\xa1\x41\x54\x55\x91\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x21\x24\x45\xb2\x32\xbb\x49\x31\xed\x02\x1f\x76\xf9\x1b\xe7\x60\xb5\x4f\xc0\x68\x99\x7c\xb1\x51\x1b\x82\x05\xc1\x6a\x28\x26\xcc\x29\x93\x82\x11\x26\x74\xbe\x32\x6b\x37\x91\xf1\xb9\x59\xbe\xca\xdd\xad\x8b\xa4\x5a\xe6\x5c\x74\x91\x6f\xd1\x32\xd7\xa2\x9b\x0c\x89\xf6\xd9\x11\xeb\x61\xde\xa0\x6e\x31\x4c\x7c\xac\xac\x6a\x26\xe3\xf1\x86\x53\xe9\x54\x83\x89\x8c\x8d\x80\xcb\x59\xd8\x0a\xcf\xda\x87\x70\x40\x52\x7a\x09\x26\x36\xd5\xa5\xe4\xa3\x4b\xca\x13\x73\x84\x36\xd4\xe3\xb7\x4b\x9c\xe8\x40\x35\xe8\xba\x18\x8c\xb4\xdd\x41\x5d\x16\x73\x11\xe8\xdc\x95\xf2\x66\xe8\x0f\x64\x4d\xf0\xbe\x81\xb1\x82\x74\x2c\xb3\x27\x52\x7a\x0d\x36\x2b\x4d\x65\x21\x34\x56\x78\xa1\x7c\xf6\x4c\x1f\x93\xd6\xb6\x4e\xf2\x92\x6e\xd8\x0e\x8d\x5d\x09\xcc\xa4\x8b\x6c\x72\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3c\xe5\xd6\x3e\xea\xee\x3c\xd4\x1d\xf9\xa7\xbf\x88\x77\xda\xe6\x71\x76\x74\x16\x6d\x0e\xfa\xda\x69\xb4\x1e\xa4\xdb\x4e\xa3\x93\x92\x60\x88\xf8\x71\xb8\x22\x32\xe5\xda\x18\x70\x46\xad\xa1\x61\xe5\x59\xcd\x3c\xb1\x7c\x00\x6a\x2f\x29\x94\x88\x05\x55\x5b\x81\x55\x23\x9d\x2b\x16\xcc\x23\x41\x78\x9a\x25\x2c\x65\x42\xc3\x79\x1e\x39\x4d\x10\xec\xc5\x71\x39\x93\x08\x35\x76\x76\x1d\x31\x16\xdb\x87\xf5\xac\xe3\xf3\x57\xcf\x3a\x9e\x23\xeb\x50\x2c\x2a\x72\xae\x57\x87\x52\x68\x76\xdd\x28\x22\x5a\xe5\x1c\xe7\xd5\x01\xad\x41\x66\x73\x5a\xed\x77\x44\x66\x58\xc1\x59\x83\xc8\x5a\xc8\x22\x89\xa1\x2c\xbb\x10\x10\x10\x42\xbc\x0d\xa6\x31\x5a\x03\x0a\x21\x68\x8b\xf5\x87\xb8\xf8\x0b\x86\x85\xfe\x5d\xf0\x25\x4d\x98\xd0\xc1\x2f\x26\x10\x71\x08\x7f\x74\xd7\x33\xaf\xa9\xba\x2c\x0f\x3c\x1b\x65\x32\x2e\xcf\xf7\xbe\x7b\x25\xf8\x88\x5d\xeb\xa7\x68\xa4\x83\xfe\x34\xc9\xf9\x92\x27\x6c\xce\x8e\x55\x44\x13\xe0\x6b\xdd\x88\x92\x83\x1b\x46\x87\x85\xcf\x65\xa2\x8c\xce\x6f\x58\x39\xa1\x2e\x64\x07\x96\xf0\x9c\x72\x81\x08\x57\x99\xfb\xb1\xc2\xd8\x9f\x91\x0e\x19\xcd\xcd\x02\xfb\x18\x1f\xd8\xd5\x53\x29\x13\x5b\xbb\x9c\xac\xca\xf1\x6d\x15\xbf\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xb4\x67\x8c\xed\x7a\x74\xbe\x1c\xfa\xc6\x17\x80\xc2\xe0\x82\x11\x9a\x5c\xd1\x95\x2a\x03\x9d\x01\x96\x9b\x7a\x45\x5e\x0e\x60\x3b\x53\x45\xfc\x18\x31\xf9\x7a\x00\xe9\x7a\x87\x07\x93\xdf\xcf\x7f\x3d\xff\xfd\xe0\xe8\xed\xc9\x29\x39\x95\x9a\xa1\xcc\x0b\xec\x9f\xc8\x3b\x98\xcc\x2c\xbd\xff\x6f\x2c\xd5\x18\x6c\x2c\xc8\x3e\x17\xb1\xbc\x52\x8d\xbd\xa0\xb8\xfd\x0c\xf1\x18\x15\xcd\xdc\x3c\x34\xa3\xd0\xe1\xbc\x85\x84\x59\xcb\x08\x0f\x07\x05\x11\x1f\xc7\xfb\x71\x2e\x33\x24\x82\x0b\x4a\x07\x0e\x92\x4a\xd8\x2b\xac\x6c\x83\xf5\x9d\x55\x07\x9c\xe7\x54\xe8\x32\x3a\x5b\xae\x99\x6d\xad\x3e\x6e\xbd\x1c\x8f\x27\xf8\xbb\xf0\x12\xd0\xb8\x3b\x5c\x82\x83\x38\x66\x71\x85\xfc\xcf\xae\x9e\xe8\xd0\xbd\x5c\x10\xf6\x22\x93\x77\xe7\x27\xff\xb7\xb6\x8f\x57\x59\xbb\xc2\x86\x6e\x30\x6e\x72\x99\x75\xb6\xba\x67\x16\x43\xa5\x5f\xdf\xad\x58\x5f\x2f\x2d\xbb\x49\xa7\x3d\x2b\x44\x15\x9c\xb4\x1c\x9f\xa4\x32\x66\x63\x32\xf1\x79\x3d\xd5\x6f\x03\xa8\x32\x9a\x33\x62\x6e\x11\x9a\xd3\x24\x59\x85\x2a\x9a\x96\x88\x27\x52\x41\x59\x0b\x19\xf9\x8c\x26\xea\xb1\xb9\x71\x1b\xd9\x68\xf4\x88\xb7\xc6\x5c\xee\x64\x39\xfc\x68\x24\x66\x42\x6a\xab\x58\x9b\x59\x02\x72\x5d\x2e\x23\x82\xb6\x79\x50\x3c\x51\x91\x6f\x0a\x73\x8b\x9c\x68\xe4\xca\x11\x7b\xe2\x47\xc6\xb0\x6c\xa1\x58\x5d\x41\xb7\xa2\xb1\xb4\xd6\xcd\xe8\x39\xa3\x31\x44\x2d\x32\xaa\x17\x98\xfb\x9c\x52\x75\xc9\x62\xfc\xc0\xaa\x66\x3e\x70\x02\x8e\x5e\xf7\xa8\x0b\x33\x6f\x17\x23\x01\x95\x0c\x33\xb2\x21\xba\xc2\xe2\x47\x5e\xf5\x16\x87\xd0\x10\xe5\x9d\x48\x56\x67\x52\xea\xd7\x1e\x10\xa7\x93\x1d\xf0\x8b\xd5\x96\xab\x81\x2b\x50\x27\x29\x3c\x77\x04\xab\x01\x87\x2a\xc4\xe2\x39\x2a\x57\xfc\xa9\x1f\xa9\xbc\x10\x07\xea\x87\x5c\x16\x8d\x85\xd8\x9a\xb2\xf9\xc3\xc9\x11\xb0\xa2\xc2\xa6\x16\x0a\x9d\xaf\x00\x04\x6c\x1d\xc9\xd9\x1b\x06\xef\x6d\x72\x64\x78\x26\xca\x3c\x36\xf2\x96\xae\x08\x4d\x94\x74\xb4\xb4\x61\xad\xba\x15\x6a\x4d\x5c\xf3\xf5\x54\xea\xc5\x9a\x6d\x6b\x0e\xd4\xfa\xef\x86\x41\xa6\x61\x99\x0f\xc0\xc5\xda\xcf\x35\xc4\x4c\xb2\x9c\x45\x2c\x66\x22\x7a\xec\x65\x7f\xec\x04\x3d\xd8\x3a\xa7\x52\x98\x83\xd9\xc9\xe6\x39\xf1\x99\x99\x96\xa4\xe1\x56\x81\xa0\x98\xb5\xfe\x28\x64\x7a\xc2\xb1\x2c\x14\xcb\x31\x2d\x35\x2f\x18\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\x1c\x51\xaa\xd1\x9d\xc1\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\xc8\x35\x89\x25\x2b\x71\xb4\xa8\x22\xef\x4f\x8e\xc8\x0b\xb2\x67\x9e\x35\x80\xfd\x33\xa3\x3c\x81\x24\x50\x48\x2a\xa9\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\x70\x09\x22\x2f\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x85\x02\xdd\xb9\x5a\xce\x8f\x61\x58\x12\x39\xaa\xc3\xaa\x63\xf2\x5d\xec\xbc\x29\x41\x92\xcc\x49\x65\xaf\x0c\x6f\x50\x13\x81\x4f\x50\x4c\x86\x61\x46\x39\xa1\x22\x96\xe9\xda\xc3\x8c\x12\xc9\x2a\x3d\x10\xc6\xa4\xdf\x7d\xd5\x6b\x4b\x9c\x42\x09\x5b\xb2\x16\x28\xc1\xf5\x9e\x0f\x66\x34\x43\x1c\xb7\x23\x60\x78\x92\xd0\x29\x4b\x6c\xa2\x16\xa6\x7f\xae\xef\xc0\xc7\xae\x1e\xcb\x65\xd2\x5d\xb9\xfb\x99\x4c\x18\x96\x63\x38\x42\x98\xe1\x9f\x04\x1d\x60\x90\xae\xe8\x00\xd6\x60\x85\x0e\x60\xd7\x3e\x05\x3a\x14\x2d\x44\x3d\xa9\xd3\xc1\xe8\x0d\x55\x3a\x80\xf0\xde\x76\x3a\x28\x16\x45\x32\xcd\x26\xb9\x34\x66\x67\x67\xb2\xc9\x0e\x5b\xc6\x0c\xd1\xb1\xb1\x21\x75\x13\x64\x41\xf5\x66\x9a\x07\x85\x58\x54\xa3\x90\x70\xd5\x58\xff\x2b\x90\x59\xc0\x7a\xea\x82\xcc\x8d\x52\x09\x2f\x9a\x5f\xda\x2f\x9e\xb2\x38\xe8\xa2\x96\xb9\x85\xb3\xb3\x13\x69\x24\x23\x9a\x40\x17\x88\x76\x5b\x8e\xd4\xb7\x5d\x7d\xe0\xa0\xfc\x0e\x62\x94\xf0\x59\x90\x69\x4c\xc1\xd1\xe2\x5c\x98\x42\xc6\x2c\x88\x65\x63\xf6\xe2\x05\x96\x69\xc1\x7d\xae\xf2\xcf\xe8\x15\x2e\xac\x1c\x57\x7e\xad\xa5\xc5\x32\x7e\xeb\x7b\x4b\x98\x09\x32\x11\x73\x31\x07\xbf\xda\x90\xe4\x2c\xc1\x9a\x41\xcb\x04\x2e\xd1\x82\xdc\x85\x23\xe1\x06\x75\xe7\xc1\x3d\xda\x25\x26\xdb\x91\xc3\x6c\x63\x3e\x43\x76\xcb\x15\xd9\x79\xe3\x08\xd0\x02\x8c\x7f\x1b\x25\xcc\x0e\xbe\xa1\x5f\x4d\xf4\x74\x5e\x72\x11\xdb\xf2\xba\x0a\xb1\x7c\x37\x27\xd4\x83\xa1\x70\x93\xc7\x21\x6f\x79\x45\x3e\x0a\xe2\x89\x45\x46\x8d\xb7\xc7\x19\xaa\xcc\xce\x47\x37\xba\xdd\xf1\xea\x1f\x52\x1f\xe6\xbd\x80\xb5\x37\xcf\x1d\x19\xcb\x7d\xfd\x3e\xf7\x2e\x8f\x0a\xe8\x69\xb9\x5f\xd7\x56\xcc\x2f\x38\xac\x53\xe9\x23\xb3\xad\x35\x17\x73\x15\x5a\x32\x34\x49\x2a\xce\xf0\x4d\xa6\x8c\x5b\x61\xdf\xbb\x6b\xdd\x84\xa8\x95\x05\x3f\x15\x33\x24\x31\xea\xc4\x13\x37\x42\xe6\xa9\xa2\x87\xb9\xa1\x84\xe6\x34\x39\xcf\x9a\x37\x1b\x20\x6b\xc0\xd6\x6f\xcf\x0f\xaa\x43\x83\xb0\xb6\x39\xe9\x0c\xbe\x27\x34\x4e\xb9\x52\xe0\x08\x63\xd3\x85\x94\x97\x64\xef\xd6\x9e\x6b\x23\xc5\xe7\x6a\xdf\xee\xf9\x91\x99\xfd\x80\x70\x91\xf8\xac\x28\xb0\x83\x85\xf6\x69\xf0\xf0\x90\xc8\xcf\x02\xd6\xd0\x76\xa0\xb1\xc9\x0a\xeb\xd3\xc4\x9e\x33\x66\x17\x3c\x3a\xc3\x5e\x5f\x9e\x76\xa5\x84\x9f\x5d\xa2\x53\xbb\xb7\xeb\x78\xcb\x1b\xe9\x88\xda\xe3\xa3\x13\xc9\x2a\x17\x11\x53\xdd\xc1\xbc\xfe\x58\x8e\x49\x62\x86\x55\xf7\x0c\xb2\x9f\xe8\x8d\x49\x76\xe0\x97\xde\x05\xf0\x16\xfb\xd3\xdd\x50\xa3\xae\x56\x2b\x41\x31\xd4\x08\x8d\x74\xc3\xd1\x80\x05\x3a\x15\x62\x21\x85\xb4\x35\x72\x46\x88\x4a\x01\x5b\x1a\x58\x14\x46\xf3\x60\x4d\x2c\x8b\x0e\xa6\x7a\x58\x46\x89\xc3\x40\x20\x80\x3f\x68\xdf\x24\x11\xe7\x70\xc5\xf5\x02\x3a\x36\x2c\x6a\x51\x43\x98\x49\xce\x14\x04\x60\x04\x61\x79\x2e\x73\x9b\x90\xe5\xfc\xd6\xb6\x54\x6b\x22\x63\xc8\xe8\x32\x9b\x84\x9a\xbf\x76\x55\x18\xa8\x2e\x9b\x3a\x79\x0c\x4e\x36\x9b\xb1\x08\x14\xad\x90\xc0\xc8\xb5\xf7\xca\x16\x16\xb6\x08\xc1\x6c\x30\xdb\x14\x2a\xe5\xd7\xe6\x29\xe1\xaf\xc2\x90\xb8\x6d\x1d\xb1\xf9\xeb\xc1\x98\x90\x13\xe1\x33\x78\x87\x66\x15\xc3\x3b\x5d\xea\x99\x36\xaf\x18\x76\x14\x83\x17\x08\x1d\x67\x46\x3b\xcc\x8b\x0e\x76\x7c\x1b\x77\x38\x09\x5d\xe2\x9d\xb2\x03\x70\x8d\xdb\x41\xcd\xd2\x3b\x1d\xa0\x8d\xab\xdc\xdc\xf2\xa5\xdc\xe5\x4f\x23\x00\x42\xda\xf2\x39\x8b\x7e\xd6\x51\x9b\xa7\xf3\x60\xb4\x40\x7b\xf7\x01\xb7\x89\x8c\x11\xfd\xd0\xa3\xb7\x25\x2b\x87\xc6\xe8\x6b\xa2\x03\x1d\x4f\x48\x2c\x1e\x08\x61\x11\x6d\x73\x9c\x98\x18\x55\x3b\x71\xbe\x85\x34\x4b\x18\xa0\xae\x04\x23\x97\x80\x32\x41\x5f\xa8\x61\x59\xc1\xe6\x5b\x4b\x59\x30\xc6\x21\xf9\x1f\x38\x94\x3e\x11\xd5\xe1\xc4\x4d\xfc\xcf\xd1\x42\xe4\xca\x35\x89\x83\xe2\x54\x2d\x9d\xeb\x82\xc4\x7c\x06\x75\x92\xda\x3e\x32\xa3\x39\x4d\x0d\x8b\x57\xc4\x92\x60\xca\xe6\x1c\x13\x22\x3d\x63\xdb\x35\xea\x9e\xc5\xe6\x18\x22\x33\xe4\x9a\xa4\x7c\xbe\xc0\x8d\x42\x28\x20\xea\x10\x17\x54\x4c\x24\x8d\xa1\xb9\x2c\x91\x39\xb9\xa2\x79\x6a\xe4\x06\x8d\x16\x10\xa1\xa4\x82\xc4\x45\x0e\xfd\x52\x34\xa3\xf1\x6a\xa4\x34\xd5\x46\x53\x66\xb9\x35\x28\xdd\xfc\xfb\xe6\x58\xb7\x5e\x7d\x73\xac\x3b\x5e\x7d\x73\xac\xbe\x39\xd6\xfa\xb5\x35\xd9\xa1\x7d\x73\xac\xe7\x05\x6b\xda\x37\xc7\xba\xff\xf5\xe8\x68\xa6\x7d\x73\xac\xcd\x57\xdf\x1c\xab\x6f\x8e\x75\xb7\xab\x6f\x8e\x75\xff\x6b\xeb\x70\x98\xfb\xe6\x58\xf7\xba\xfa\xe6\x58\xeb\x57\xdf\x1c\xeb\x86\xab\x6f\x8e\x75\xc3\xd5\x37\xc7\x5a\xbf\xfa\xe6\x58\xf7\xbb\xfa\xe6\x58\x7d\x73\xac\x67\xdd\x33\x80\xf4\xcd\xb1\xec\xd5\x37\xc7\x7a\x16\xc8\xe8\xa4\x6f\x8e\x75\xa7\xab\x6f\x8e\xd5\x37\xc7\x6a\x72\xf5\xcd\xb1\x9e\x8b\x53\xa6\x6f\x8e\xd5\x37\xc7\xfa\xe3\x28\xba\x7d\x73\xac\xbe\x39\x56\xdf\x1c\xab\x6f\x8e\x75\xeb\x2c\xfa\xe6\x58\xcf\xc1\x04\x54\x3a\xe6\x8d\xb0\x41\xef\x02\x63\x64\xd3\xd3\x03\xd4\x80\x69\x31\x9b\xb1\x1c\x38\x17\x3c\x79\x2d\xad\xaa\x44\x6c\xac\x87\x72\x99\x1e\x02\x22\x92\xad\xe4\xb9\xe1\xe7\x16\xa6\x00\x30\x3c\xcb\x1c\xf2\xe3\x77\xaf\x37\x60\x26\x35\xce\x37\x6c\x9a\x3d\x0d\x73\x7e\x27\x9a\x45\xe1\x6f\x20\xf8\xa6\xca\x32\x4b\xf7\x28\x91\xca\xe6\xbe\x03\xb1\xa2\x05\x15\x82\x39\x7b\x8f\x6b\xf0\xa3\x4c\x19\x13\x44\x66\xcc\xc6\xc0\x29\x51\x5c\xcc\x13\x46\xa8\xd6\x34\x5a\x8c\xcd\x93\x84\x23\x76\x99\xa7\x6e\x3f\x51\x3a\x67\x34\x75\x19\xfb\x29\xe5\x38\x14\xa1\x51\x2e\x95\x22\x69\x91\x68\x9e\xf9\xc1\x88\x62\x50\x6a\x83\x82\xca\x13\x03\xf2\xe5\xca\xe4\xf6\x61\xf9\x34\x3b\x2d\x19\x82\xd6\x81\xb5\x39\x04\x20\xf1\x34\xd3\x2b\x9f\xe1\xcb\xc8\x8c\xe7\x4a\x93\x28\xe1\x20\xad\xe1\x89\x58\x55\x0d\xe3\x0d\x9d\xac\x16\x76\xa6\xca\x4e\x55\xc4\xa0\xb6\x66\x5a\x61\xbe\x6c\x39\xa0\x1d\x2a\xe6\xca\xaa\xf9\x6a\x48\xa8\x43\x54\x43\x42\xbb\x99\x02\xa9\x9d\x64\xc1\xd1\xed\x47\xc1\x70\x01\x92\x6c\x99\x50\x5c\x6e\x74\x28\x7e\x70\x9b\x73\x58\xa9\xf3\x28\x15\x0a\xdb\x2f\xa3\x76\x0c\x60\x01\x04\x5b\x9a\x3d\xc0\x22\x66\xe4\x2b\xbd\x61\xd7\x3f\xf8\xa6\x0f\x84\xe2\x5b\xa6\x14\x9d\xb3\x49\xc3\x40\xc3\x4d\x16\x19\xc4\x1a\xca\x85\x81\xad\x90\x54\x7a\x92\x85\x79\x9b\x55\x35\x88\xa4\x38\x27\xaf\xfc\x5c\xe5\x5c\x6b\x06\x8b\x0a\xd8\x7b\x10\x11\xad\x97\xe6\xef\xd6\xb2\x3f\xdf\xba\x41\xca\x1f\x1b\xa6\x2e\x62\xcc\xc5\x9c\x32\x32\xcd\x39\x9b\x91\x19\x87\x04\x4f\x48\xb9\x1c\x22\x14\x13\x45\x2f\x80\x52\xc6\xde\x95\xc2\xe9\xb2\x6e\x5e\x63\xf2\x8b\x9d\x98\xce\x0b\x11\xd1\x00\xe5\x16\x6a\x4f\xf9\x8c\xcc\x21\x65\xd3\x6a\x8b\x7f\x7d\xf1\x8f\xbf\x93\xe9\xca\x88\x34\xd0\xac\xb4\xd4\x34\xf1\x2f\x99\x30\x31\x37\xb4\xc2\xe3\x59\xad\x9e\xf4\x14\x80\x36\x20\x38\xf1\x97\x5f\x5f\x4e\xab\x32\x76\x3f\x66\xcb\xfd\x80\x7e\xa3\x44\xce\x37\x35\xce\x6a\x9e\xcc\xdd\xd0\x24\xda\xb0\xcd\xba\xe9\xf8\xe8\x30\xc1\xc8\x42\x5e\xa1\xae\xbf\x61\xf7\x94\x85\x58\x99\xcc\x8a\x04\x9d\xce\xaf\x7d\xdd\x71\xa1\xd8\x7a\x75\xe0\xc6\x73\x01\x6e\x52\x3b\x44\x1d\x51\x1d\x33\x75\xdd\x23\xa5\xad\x3a\xb1\x8e\x3c\x0f\x0d\x06\x86\xd0\x6b\x9a\x24\x53\x1a\x5d\x5e\xc8\x37\x72\xae\xde\x89\xe3\x3c\x97\x79\x75\x2e\x09\x35\xdc\x72\x51\x88\x4b\x6c\xfd\xe0\xc1\x13\xe4\xdc\x86\x72\x5d\x89\xc3\xa6\x17\xc6\x4a\x7a\xc7\x84\x9d\x19\x54\x8e\xc2\xae\x79\x69\xeb\xd8\x22\x2e\xdc\x91\xe1\xf8\x2a\xdc\x6c\x5f\xbf\xf8\xeb\xb7\xb8\x75\x89\xcc\xc9\xb7\x2f\x20\x9b\x5b\x0d\xf1\x10\x03\x6f\x33\x82\x22\xa5\x49\x62\xcc\x86\x70\x53\x1a\x42\x6f\xda\x84\x0f\xbe\x07\x75\xfb\xed\x76\x67\x55\xea\xe2\xe2\x57\xd0\xa3\xb8\x56\x2c\x99\x0d\xb1\x5e\xc9\x9b\x35\xbb\x20\x18\x76\x2d\xf7\x81\xa2\xb1\x2d\x50\x80\x96\x32\x29\x52\x76\xc4\x96\xbc\x8b\xee\x7e\x95\xd1\x9c\xa9\x9f\x70\x05\xa5\x61\xd3\x44\x46\x97\x24\xb6\x5f\x06\xf9\x2d\x75\x8c\xf0\xa7\xdb\xa8\x35\x7c\xff\x4a\x6e\x4f\x4a\xb3\xcc\x57\x0f\xe5\xf4\xaa\x42\x0c\x38\x93\x00\x64\xf0\xf4\x1b\xb5\xe2\x1b\x19\xbe\xd9\x78\x88\xc6\x09\x41\xed\x7d\xd4\xe5\xec\x3b\x6a\xc7\x57\x0e\xe8\x4e\x43\x06\xff\xc6\x7a\x93\xb5\x7a\x49\x5f\x72\xe7\x37\x06\x2a\x00\x66\xfb\x00\x4b\x7e\xb4\x86\xa2\xa4\x75\x62\x53\x85\x2e\xe2\x96\x9e\x76\x94\x64\x2c\x57\x5c\x19\xb9\xfc\x33\x1c\x28\x6c\x66\x58\xba\x00\x1f\x87\x08\x78\xb8\x01\x58\xb9\x3d\xa7\x9c\xc8\xd8\x0e\x08\xac\x10\x41\xa5\x37\xa8\xb5\x55\xad\xb6\x43\x81\xfa\xd8\xac\xf2\xe7\x92\x9a\x55\x4e\x69\x3e\xf1\xac\x12\xef\x7a\x4e\x0c\x12\xde\xef\xa9\xf2\x47\x3f\xf9\x8e\xd8\x00\x30\x46\xbb\xb8\x55\x4e\x58\x31\x1e\xf1\xa0\x04\x2a\xbd\xb5\x03\xc7\x04\xa3\xe0\xe6\x4c\xd8\x9f\x92\xdd\x57\xbb\x8f\xca\x24\x91\x44\xb9\xcc\xe8\xbc\x55\x97\x9f\x1a\xa5\xea\xc3\x86\x10\x14\xc6\x0c\x82\xef\x3d\x20\x1b\xdc\xc5\xe2\x12\x61\x07\xf0\x93\x30\x3a\xea\x08\x6c\x0d\x04\xac\xd4\xbe\xa2\x2b\x42\x73\x59\x88\xd8\xfa\x97\xbc\x83\xef\x6d\xed\xc1\xa7\x52\xb0\xb2\x6b\x68\x15\xc1\x02\x3c\xfa\x5c\x90\x97\xe3\x97\x2f\x9e\x8b\xa4\x82\x37\xac\x49\xaa\x53\x2f\xa9\x90\x3f\x3d\xea\xbb\x3a\x2c\xfc\x8e\xde\xf7\xad\x75\xb1\x94\x50\xf7\xdc\x01\x69\xc3\x47\x57\x39\xd7\x2c\x68\x0e\xb8\x07\x86\x8b\xb1\x0f\x03\xbc\x86\xc1\xa6\x1e\x13\x2d\x89\xd4\x0e\x20\x43\x15\xd3\x2f\xc8\xb7\x2c\x83\x82\xe3\xb6\xc9\xc3\xa5\x6e\x61\x61\x21\xa1\x76\x76\xc8\x1e\xde\xb9\x8b\xa5\xce\x83\x47\xdd\x5a\x96\x68\xc7\xd7\x59\x0b\xf4\xcd\x5a\x55\x7d\x46\xc1\x07\x97\x75\x48\xc1\x7f\xb1\x05\x5d\x32\x28\xf1\xe6\x09\xcd\x13\x88\x39\x9e\xe3\xdc\xc9\xb4\xd0\x84\x89\x25\xcf\xa5\x48\x99\xd0\x04\x72\xe0\xa7\x09\x0b\x7b\x63\xff\x79\xef\xe7\x83\x33\x48\x68\x18\x58\xb0\x0a\x3b\xcb\x42\x39\x60\x9b\x70\x26\xc1\x70\x9f\x5d\x3e\x37\x0f\x43\x43\xe0\xb9\x6e\x5e\xe6\x39\x69\xa1\x0b\x6c\xd8\x72\x1d\x25\x85\xe2\xcb\xc7\xe2\x24\xb6\xf6\xfe\x88\x37\x5a\xe7\x1a\x0e\x40\x49\xa8\xb5\x92\x7e\x70\xad\x6f\x28\x03\x5c\x0b\x98\xec\x2a\x5f\x1a\x18\xc6\xc0\xad\xeb\xc9\xa2\x6c\x60\xfa\x9c\xc3\x62\x5c\x53\x21\x00\x51\xe6\x71\x9d\x50\x42\xc6\xec\xfe\x78\x3c\xd5\xf4\x1e\x3b\x04\xc6\xcc\x83\x3a\x41\x15\x2d\x58\x5c\x24\xb6\x9b\x37\xc0\xa6\x1a\xf3\x81\x96\xf8\x7c\x02\xfa\x07\x9d\xcc\x3c\xd8\x81\x18\x81\x73\x10\x69\xee\x7e\x9f\x3b\x68\x04\xf7\x81\xaa\x8d\x08\x46\xa9\x19\x6b\x48\xa8\x52\x45\x8a\x47\x02\x5b\x23\xcc\xb8\x56\x65\xb3\x70\xab\x1d\x9b\x83\x71\xcf\xb2\xad\x16\xf4\x3d\x67\x09\x6c\xae\x16\x34\xde\x3d\x0d\xc6\x41\x42\x2b\xf7\x97\xdd\x70\x36\x61\x02\xa2\x6d\x3e\x8f\x53\x82\x97\x74\xc6\xa1\xbd\x12\xb5\xf4\x3e\xdf\xf0\x4b\x54\x1d\xf0\x0e\x00\x8e\xa1\x53\x96\xa8\xfa\x40\xd3\x72\x51\x2c\x5e\xa9\x25\x7c\xcb\xfe\xb9\x54\x29\x3e\x17\xd0\x59\xd3\x8c\x76\xcf\x1e\x9a\x8d\x6d\xa6\x2e\xfa\xe3\x36\xe6\x6a\x95\x2c\xac\x94\x66\xb6\x11\x3b\xd5\x32\xe5\xd1\x3d\x46\x92\xf7\x9c\x72\xad\x22\xbb\x52\xe9\xfb\xee\x7c\xcd\xe3\xa3\x02\xaf\xc6\x98\x9c\xcb\xd4\xa6\x38\x89\xa0\xbf\x97\x6b\xb3\x6a\x24\x46\xce\x0c\x2d\x20\xf1\x88\x97\xd1\x78\xe8\x87\xe3\x6a\xad\xe1\x39\x5e\x25\xb7\x61\x5c\x00\xa6\xb4\x6d\x5e\x65\x92\xc8\x2b\x48\x2c\xc6\x71\xdd\xde\x86\x14\x98\x57\x64\x54\xeb\x59\x3b\xae\xc2\x89\xde\xfe\x1c\x7b\xef\xf0\xf3\x4f\xc1\xfc\x1c\x00\xea\x3b\x39\x0a\xff\x3c\x99\x1c\x86\x7f\xbe\x57\x86\x4a\xf6\x83\xfa\xd4\xaa\xfd\x1a\x6e\xbe\x2b\x44\xce\xbe\xe9\xae\x19\xb6\x3c\xfa\xcc\xd7\x87\x0b\x2a\x5c\x20\xeb\xc6\xe7\xad\x54\xa4\x93\x72\x3a\x0b\x9a\x33\x8b\x2c\x67\x38\xb9\xca\x68\x74\xe3\x2c\x3c\x8c\xdb\xad\x37\xdc\x3a\x53\x55\x64\xae\x53\x77\x02\x37\xfa\x99\x94\xdb\xee\xc3\x5f\x7e\xbb\x23\x31\x3f\xf7\x9b\x4d\xa4\xbd\xfd\x37\x95\x86\x7e\x77\xfa\xc5\xe6\x76\x5f\x77\xfb\x6d\xd0\x31\xef\x4e\xf7\xdf\xd4\xad\xf7\xae\x4f\x73\x5d\xde\xee\xf6\x62\xf5\xd5\xbe\xc3\xed\xb0\xa4\xf7\xc3\x44\x68\xcc\xc2\x9b\xba\xbb\x1a\x38\xa9\x9a\x3b\xa7\x9a\x19\xfb\x35\x05\xe0\x06\x90\x53\x0b\xc0\x26\xe6\xa4\x02\x2b\x55\xe4\x39\x13\xd0\x2f\xbf\x80\x4c\x47\xd7\x07\x1f\x99\x34\x30\x5b\x0b\xe1\x89\x38\xf4\xe4\xc0\xcb\x42\x9b\x01\x97\x52\x80\xf5\x0c\x60\xac\x67\x05\x24\x34\x02\xeb\x47\x98\x3a\x29\xcc\x3c\x5e\x6d\xc2\xe1\x90\x19\x13\x41\x17\x7c\xab\x35\x8f\xcc\x1e\xaa\x20\x73\xa0\x22\x30\x4e\xe3\x3f\x65\x09\xd5\x33\x99\xa7\x23\xa7\x1e\x8e\x2a\x4a\x02\x39\x84\xd4\x1a\xe5\xec\x2b\xcc\x6f\x45\xb8\x4d\x11\x27\x2c\x90\xe6\xfe\x55\x45\x8c\xe0\x54\xa4\x10\x39\x8b\xe4\x5c\x40\xe5\xb1\xfd\x16\xe4\x9a\x77\x0e\x51\x65\x24\x29\x11\x45\x92\xdc\x3f\x0f\xa1\xa1\x12\x20\x97\x2c\x5f\x30\x7a\xcf\xcd\x5b\x4b\x69\xb1\x63\x94\x5d\x49\x95\x45\x2e\xb0\x2a\xaf\x7b\x88\x51\x8d\x65\x04\xb5\x6d\x18\x62\x77\x89\xcb\x14\x04\xba\xd1\xf4\x28\x99\xf3\x25\x13\x0e\x8c\xfc\x30\xa1\xbe\xb3\xb6\xc3\x5f\xb5\x80\xe8\x85\x96\x3e\x69\x81\x50\x1d\x40\x22\x43\x8e\x93\x8d\x97\x86\xe3\x04\xb7\xd8\xbe\xdc\x89\xeb\x81\x76\x97\x3b\x21\x6f\x00\x9b\x42\x0e\xcb\x57\x4a\x9d\x6f\xb5\x82\xb9\x49\x22\xc8\x6e\x71\xa6\x88\xcd\x6a\xf9\xfc\x23\x6c\x4a\x9a\xe1\x41\x9b\x86\xb1\xea\xb2\x07\x87\x2d\x09\x9b\x18\xf6\xbf\x42\x25\xe7\x64\x56\x7d\x12\xaf\xc0\xf1\x43\xed\x13\xa8\xdf\xa5\x3d\x38\x91\xb1\xd1\xc2\x86\xc4\x2f\x65\xd8\x96\xdc\xc6\x5b\xf0\x4c\x06\x87\x11\x95\xb4\x3c\x67\x2a\x93\xd8\x15\x20\x7c\xec\x30\xf0\x7f\x71\x5d\x49\xb6\xc3\xfe\x6e\xfe\x68\x20\x6e\xdb\x7f\x58\x2e\x37\xea\xf0\x73\xae\xc7\x97\xdf\x82\x02\xcf\xc4\x82\x8a\x08\x6d\xa7\xfd\x4b\x96\xa9\x7d\xc5\xe7\xa8\xaf\xff\xfd\xdb\x6f\x41\x79\x77\x24\xd9\x3f\x3b\x3e\x38\x7a\x7b\x3c\x4e\xe3\x27\xa4\xc9\x67\x54\x6b\x96\x8b\x57\xe4\xbf\xf6\x3e\x7e\xf5\x69\x34\xf8\x7e\x6f\xef\xc3\x8b\xd1\x3f\x7e\xfb\x6a\xef\xe3\x18\xfe\xf1\x97\xc1\xf7\x83\x4f\xee\x8f\xaf\x06\x83\xbd\xbd\x0f\x3f\xbd\xfd\xe1\x62\x72\xfc\x1b\x1f\x7c\xfa\x20\x8a\xf4\x12\xff\xfa\xb4\xf7\x81\x1d\xff\x76\xc7\x41\x06\x83\xef\xff\x7c\xcf\x89\x36\xac\x4b\x69\x5b\x8b\xd2\xaa\xfe\xa4\xc3\x9a\x93\x2c\x67\x2c\x05\xf6\xd7\x24\x5b\xab\xea\x25\xad\x0d\xe5\x04\xac\xfd\xcb\xf0\x44\xf7\x34\x31\x37\x6c\x52\x21\xeb\x4c\xe4\x15\x64\x58\x72\x69\x94\x9f\x31\x79\x07\x72\x90\x9c\xb2\x25\xcb\x87\x6e\xd4\x37\xe6\xa6\x89\xbf\x27\x74\xc3\x6d\xba\xa3\x61\x8e\x7f\xc3\x35\x71\x73\x6f\x41\x3c\xec\x68\x62\x27\x0f\xfc\x69\x4c\x7e\xa6\x39\x97\x85\xb2\xba\x48\x08\x04\x8e\x29\x64\x5e\x92\x80\x57\xc2\x06\x78\xfc\x20\xbe\x32\xcc\xc5\x78\x3c\x6d\x0e\x3c\xbf\x3e\xdc\x2c\x12\xb8\x36\x2b\xb5\x74\x8f\xca\x5d\xaa\xeb\x1a\x86\x38\x0a\x83\x8d\xfc\xdf\x49\x34\x15\x4e\x14\x86\x71\xf3\x00\xde\x7a\x6a\x91\x4d\x18\x59\xf0\xb9\x4b\xa8\x86\xf7\x47\xf3\x35\xf8\xd4\xef\x90\x06\x4b\xda\xe4\x98\x36\xcd\xeb\xcf\xea\xef\xd7\x62\x5b\x54\x91\x96\x43\xb0\x66\x57\x51\x54\x9e\x9b\x1d\xdc\x27\x20\x44\x46\x51\xce\x35\x8f\x68\xb2\x03\xc2\xc9\x7d\x15\x25\x85\xd1\x13\xc3\x6f\x73\x46\xf4\x95\xc4\xa7\xd0\x84\x5c\xb2\xd5\x95\xcc\x63\x27\x9f\xdd\x13\xcb\xb5\x50\xda\x3d\x92\x33\x7b\x80\xd1\xcd\x90\xa7\x2c\x27\x53\xe6\x3c\xe8\xb5\x9b\x57\x63\x72\x20\x56\x36\xfc\x28\xc2\x22\xc3\x00\xff\x0d\x74\x04\xd4\xa2\x2a\x9b\xc4\x0a\x31\xf7\x34\xaa\x2d\x20\xce\x66\xef\xb2\x51\xc0\xfc\x29\x70\xd2\xdf\xb9\x97\x65\x6e\xab\x9c\xe0\x74\xe4\x58\xa3\x25\xdd\xd7\x0f\xc2\x2d\x8c\x7e\xc3\x05\x53\xea\x07\xb3\x94\x6d\xd4\xd5\xea\xee\xa0\xa0\x96\xd8\xb1\xa1\x52\xaa\x4c\x29\x66\xe6\x48\x61\x8c\xd8\xb0\x61\x19\x97\x77\x8e\xc9\x01\x7c\x00\x39\xf1\x46\xf3\x82\x2a\x3a\x33\x18\xd7\xaa\xde\x76\x1e\xef\x38\x38\x3d\x72\xb9\xcb\xa8\x29\xa8\x2a\x90\x3a\xaa\xcc\xd5\x99\x80\xa6\x67\x33\x68\xd9\xbf\x0b\x0a\x1d\x74\x77\x2e\xf2\x82\xed\x34\x53\x95\x10\xa2\x7f\xff\x6f\xdf\xbe\x00\x6d\xc9\x3f\x6f\x04\xcf\x6b\xa2\x2a\xdd\x3f\x47\xa6\x51\x76\x4c\x3d\x31\xe8\x2c\xdc\x0f\x8e\xe0\xce\xee\xb0\x41\x2b\xa8\xed\x85\x65\xf2\x34\x6f\xe4\x5a\x6d\x94\x0b\xd3\x3c\x0b\x66\x54\x4e\xf7\xe2\xfe\xdd\xcd\xda\x24\xb0\x54\x9e\xdb\x45\x94\xab\x1c\x0d\x57\x45\xe1\x92\xf8\xe7\x04\x9e\x5d\x6c\x82\x61\x3f\x86\x74\x58\x60\x5c\x10\x15\x00\xf6\xb8\xca\x5a\xa4\xfe\x36\xe0\x37\x68\xbc\x42\x5a\x5d\x2b\xff\xf6\x59\x65\x24\xcb\xb9\x9d\xa8\xa8\x7d\xe9\x6b\xc8\x6d\xc2\xb4\xab\xcd\x01\xf0\x29\x8f\x1a\xe3\x60\xfe\xa1\x1f\x8a\x6f\xf9\x01\x95\x39\xa8\x15\xb8\xc9\xab\x20\x39\x32\x66\x84\x2e\x29\x4f\xb0\x0f\x8a\x31\xe9\xa4\xaa\x38\xd9\x71\x42\x91\x14\xaa\x48\xe1\x19\xa9\x91\x2e\x28\x33\x3e\x8a\xb2\x26\x55\x60\x13\x96\x5b\xab\x52\xcd\x0c\x8f\x56\x82\xa6\x3c\x72\x6f\x78\x90\xb8\xc6\x6f\xb5\xba\x54\x37\xb6\x77\x93\xf3\x34\x2d\xb4\x99\xe6\x3d\x51\x4d\x1f\x99\x1f\x05\x0b\x19\xc6\xcd\xd9\x35\x8d\x74\xb2\x02\x47\x55\xf5\x26\xbd\xc8\x65\x31\x5f\x10\x4a\xe0\xef\x73\xf8\x6a\x4c\x4e\xb4\xb1\x25\xa1\x59\xbb\x85\x6b\xe0\x1a\xe5\x77\x21\xf8\xbf\x0b\x96\xac\x08\x87\x7e\x42\x3e\x66\x52\x1d\x36\x40\x8f\x87\x4e\x33\x41\x77\x1b\xd4\x02\x18\x8b\x1d\xe4\x81\x35\xed\x6f\x98\x3c\xda\xed\xa0\x3d\x18\x81\x4f\xef\x9f\xc4\xf3\x48\xfc\xb3\x41\xf6\x5f\x1b\xb6\xd9\x34\x93\x6a\x1d\x8b\x6d\xf3\x0a\xf3\x20\x7c\x1c\xd5\xd7\x18\x4c\x95\x32\x01\x0b\x1a\x35\x1e\x9d\x9e\xff\xfe\xe6\xe0\x5f\xc7\x6f\x1e\xbc\x96\x04\x67\xd9\x9a\x18\x78\x16\x82\x9c\x57\xdb\xff\x2c\x30\xd9\x2a\x7b\xb6\xf9\x7b\x3e\x5a\x13\x8e\x8a\x80\x69\xd3\x8f\xa8\xda\xc7\xb9\x3e\x6a\xdd\x61\x4f\x6b\x87\xdd\x1a\x09\x56\x0e\x03\xa8\xa5\xf0\xf1\x37\x5a\xa6\x39\xb4\x2b\xfb\x6f\x91\x61\x55\xa1\xd3\x05\x4b\x33\x63\x1f\x77\x46\xaf\xaa\x74\x0e\x87\xff\x0c\xe1\xdc\xad\x77\x27\x20\x0a\x3a\x46\xb4\xfb\x65\x98\xb4\x03\x79\xa7\xe8\xec\xa5\x44\xb0\xab\xea\xc3\x5c\x4a\x8f\xfb\xc5\x54\x16\xc2\xf6\xc4\x77\x83\xff\x82\x28\x1e\x36\x27\x05\x10\xc2\x13\xa6\x9d\x75\x57\x5d\x73\x5b\x6d\x8e\x8d\xa2\xec\x7d\xa8\x38\x84\x61\x9d\x0d\xbf\x99\x32\xf2\x1d\x40\x9c\xd0\x94\xfd\x73\xf4\x9d\x67\x4a\xf0\xf7\xd0\x1e\xd2\xda\xc7\xa5\x43\xab\x2a\x23\xc7\xe8\xc4\x80\x1c\x7f\xdb\x1f\x4d\x8a\x8a\x03\xdc\x99\xa5\xdc\xe7\x03\x18\x95\x48\x80\x5a\xe4\x9a\x49\x1a\x4b\x16\x7e\x6e\xa3\x07\xd5\x49\xef\xb1\xf1\x7c\x4c\xb4\x94\x00\x4d\x82\x58\xeb\x07\x82\xb0\x6b\xae\xc0\x62\xae\xbf\x62\x68\x28\xdb\xf4\x1d\x7c\x84\xbc\x12\x55\xa0\x10\x2c\x5d\xb6\x29\x53\xca\x5a\x88\x41\x9a\x0a\x5d\x4a\xee\x52\xe3\xa8\x80\xe0\x0f\x46\x2a\x3c\x71\xa6\x2b\x92\x72\x05\x4d\x72\x00\x4f\x31\x2e\x12\xbc\x39\x46\x24\x12\x84\x27\x43\x57\x83\x59\x5b\x28\x86\xaa\x54\x66\x97\x83\xd6\x14\x00\x23\x2e\x52\xb9\x64\xf1\x6d\xca\x95\xed\x8d\x02\xe5\xf5\xf3\xba\xa6\xe8\x4b\x2c\x2a\xde\xfd\xca\x53\x82\x82\xb4\x5c\x26\x24\x4b\xa8\x60\xb6\x46\xdf\x7b\x24\xd6\xf9\x74\x53\x9c\xfa\x6e\x72\x5c\x8c\x59\x01\x89\x2e\x97\x6c\x75\x6f\xb6\xdd\x40\xad\x58\x7f\x38\xbe\x47\x4a\xb3\xfb\x99\x22\x66\x33\xb4\x76\x35\xef\x9e\xe1\x40\x24\x2b\x7d\xcb\x6b\xc5\xd4\x3e\xd9\x14\xb8\x8a\xf5\x2a\x1f\x00\x32\xc5\x90\xbc\x13\xaf\xb1\x54\x77\x88\x8e\xe6\x31\x39\x11\x44\xc9\xd4\x96\x08\x5f\x6b\x35\xc4\x66\x8c\x94\xa8\x62\xaa\x98\xed\x76\x67\x0c\x0d\x1b\xf1\xb4\x21\xdd\x8c\xe5\x29\xd7\x61\x6a\xaf\xd9\x72\xf8\x98\x4e\x31\x4f\xf6\xff\x64\xa9\x37\xc2\x97\x6e\xe2\xe1\xb8\xbf\xed\x18\x84\xc1\x5a\xba\x32\x77\xcf\x6a\x63\x55\xec\xe8\x4a\x98\xaf\x2a\x88\x20\x25\x0e\x7d\x41\x64\x9e\xcb\x22\x73\x32\xa4\xda\xaf\xb9\x6c\x52\xe8\x04\x09\xfa\x07\xab\x43\x7b\xa6\x05\xd6\x38\x2b\x05\x63\x6c\xf4\x51\xa5\x86\x1b\xf9\x62\x5e\x08\xd7\xdb\x98\x81\x0f\x31\x48\xac\xdc\x49\xd8\x9c\x46\xab\x9d\xea\x73\x36\xa5\xb1\xa2\xc9\xc9\x53\xec\x0b\x85\xcf\x2b\x0b\xb4\xa1\x8e\x1b\x4c\x6a\x74\x1c\xa0\x9d\xa4\xec\x14\x9d\xff\xd2\x21\x8c\x60\x98\x3e\x6f\x11\x66\xfc\xdb\xb7\x7f\x1b\xb9\x44\x02\x98\xca\x83\x6c\x28\x9f\x86\xda\xa9\x63\xbc\xb2\x66\x46\x13\xe0\x2a\x83\xf5\x05\x49\x57\xfa\x26\xfd\xd3\x6f\xf3\x1d\x6f\x1e\xc4\x2d\x40\x39\xc4\x03\x92\x8b\x8b\x79\x5b\x67\xf1\xce\x79\x75\x28\xbb\x1b\x65\x46\xff\x5d\x94\x45\xdb\x96\xb7\xa1\xc2\x10\x90\xd8\x12\x05\xaa\x98\xcb\x39\x95\xdc\xd5\x2c\xc7\xfa\xf8\x86\xc0\xc1\x49\xf1\xc4\x55\x9a\xae\xdc\xe9\xae\x4e\x0b\xb4\x05\xcd\x7c\xb9\x52\x99\xb5\xec\x8f\x23\xd5\x46\xed\xac\xe7\x44\x33\xaf\x98\xd6\xdf\x33\x32\x6f\x19\x74\xe6\xa7\x1a\xfd\xa8\x20\xd9\x6d\x8e\x05\x62\xd3\x40\x9b\x49\xd0\x36\x2c\xeb\x37\x2a\xc0\x15\xcd\x63\x55\x75\x1b\x59\x28\x33\xeb\xfa\xb1\x51\x33\xa7\x45\x4c\x64\x5c\xce\xc0\xbb\x76\xab\x8e\xa2\x27\xe4\x0c\xaa\x52\x13\x5e\xbf\xcc\x7c\x01\xce\x3d\x41\x35\x71\x5e\xd0\x3c\x86\x90\x41\xb9\x11\x7a\x1f\xcb\xa6\xab\x3b\x1f\x8b\xeb\xf6\x54\x1e\x48\xf4\x43\x1e\x03\xd6\x53\xf5\xd3\xa0\x19\x33\xb5\xce\x19\x34\x0e\x1a\xf7\x39\xff\x23\x2b\xb2\xb5\x54\xcd\x36\x6a\x51\xbd\xeb\xf0\x42\x26\x31\x28\x30\xb6\x37\xb8\x7b\x94\x61\x7c\x39\x9f\x16\xda\xe6\xe2\x45\x32\x4d\xab\xc0\x5c\x18\x9e\x57\x63\x52\x22\x33\x85\x79\x12\xc0\x89\xc7\x84\x9c\x33\x06\x6b\x17\xce\x03\x34\x68\x27\xe2\xac\x10\x90\x33\xc2\xcc\x46\xc2\x0d\xf2\x40\xb9\x47\xcd\x0f\x96\xcd\xd8\x6e\x99\x1a\xba\x73\xe0\x43\xe1\x61\x62\x35\x2a\x9e\x28\x17\x69\x96\x25\x1c\xeb\xf8\x6b\x36\x07\xd4\xac\x97\xa9\xfd\xb6\x84\xcd\xd0\xc2\x86\x37\xe0\xb8\xfe\x54\x4c\x59\x82\xc9\x68\x68\xb1\x62\x02\xdc\x95\x19\x62\xc1\x33\x3c\xd5\x54\xfb\x9f\x83\x6f\xa3\x6e\xb6\xbf\x32\x12\xe9\x25\xba\x3a\xe4\x15\xa4\x1e\xfe\x70\x72\xe4\x75\x17\x73\xd7\xeb\x73\xcc\x1b\xff\x1a\xef\x52\x4c\xcf\x79\x4c\xa6\x58\x1d\x64\x24\xe1\x9e\x60\x57\x88\x37\x60\x1d\x36\x3e\x78\xbb\x74\x75\xf8\x38\x9a\x7f\xb8\x1d\x72\x40\xbe\xc1\x31\xc1\xf8\xc1\xd4\x8f\x29\xb7\xf5\xc8\xef\xce\x76\x5d\x4e\xe4\xd5\x28\xbf\x1a\x8d\x46\x23\x5b\x44\x00\xda\xf3\xb0\x42\x03\x2f\xd5\x53\x19\xf3\xd9\xaa\x46\x09\xf0\x20\xf8\x47\xc0\x8e\xa4\x62\x65\x67\x37\x26\xa7\x52\x33\x87\xa1\xe1\x1d\x03\x65\xcf\x64\xf3\x8a\x10\xcb\x86\x54\x6b\xa9\xc6\xce\xd3\xe2\xd2\x74\xef\x6f\xc1\xb7\xcb\xf9\x6a\x83\xf9\xb9\xa1\x1e\xa1\x6d\x12\xf4\xa6\x12\x07\x17\xd2\xf3\x0d\xfa\xe4\x0c\x37\x29\x40\x34\xdc\xb0\x30\x4e\x0e\xd9\x5d\x63\x43\x7b\x98\x0a\xc2\xae\x33\x89\x4d\xad\xc0\xcd\x3f\x91\xf1\x7a\x0e\x2c\x2a\x5b\x59\x86\x95\x9c\x95\x53\x63\x0d\x3d\x4c\xbb\x76\x44\x20\x53\x6a\x86\xf4\xd3\xd9\xab\xed\x93\x01\x44\x9e\x60\x68\x90\x77\x42\x12\x36\x9b\x19\x8b\x52\x0a\xc2\xb2\x05\x4b\x59\x4e\x93\xea\x83\x2c\x14\xdc\x2b\xc3\x6e\x73\xb3\x4b\x31\xcf\x34\xa5\x19\x72\x5b\x60\x9e\x31\xcf\x01\x52\x97\x57\xf2\xbf\x77\xde\x89\x33\x29\xf5\x5b\xae\xc0\xa6\xb4\x19\x37\xe8\x01\xd8\xd9\x64\x68\xb8\xef\xca\xba\xfa\xb6\x3b\xf9\xc1\x92\xac\x09\xfa\x04\x0e\x3a\xe1\xb5\x86\x83\x18\xa6\xe5\x0d\x77\xa3\x4c\xeb\x7c\x95\x49\x2e\xf4\x3a\x5a\x8e\x07\x59\x7e\x6f\x91\xa2\xc1\x10\x76\x42\xcb\x27\xfc\x91\xb7\x74\xe5\x5d\xc2\x36\x8f\xb9\x26\x63\xd1\x35\x60\xbf\x03\x0c\xb7\xba\x10\x36\x4b\x38\x01\xe4\xe0\xf0\xe3\x61\x90\x3d\x5c\x49\x78\xa9\xff\x5c\xd3\x4b\xa6\x48\x96\xb3\x88\xc5\x10\x7e\x44\x9f\x2a\xd5\x15\x48\xf6\x96\x8b\xfe\x84\xb8\x17\x6c\x99\x53\x09\xe7\xa4\xe5\xa6\x39\x09\x72\xe0\x2c\x7a\x52\xb9\x45\x40\xc7\x35\x7b\x89\x42\xd0\x59\x8a\x11\x34\x10\x2f\x94\xcb\x8e\xcf\x5d\x5e\x61\x45\x00\x59\xaf\x3d\x8a\x4d\xa8\x23\x36\x56\xa2\xdb\x61\x46\x75\x12\xaa\xc8\x99\x2f\x83\x8d\x25\x2b\x9b\x89\x53\x45\xde\x9f\x1c\x91\x17\x64\x0f\x4a\xc0\x3d\x0c\xa0\x4f\x64\xa8\xd7\x29\xcf\xdc\x10\x55\x97\x92\x45\x1d\x15\x12\x79\x51\x3d\x92\x80\xae\x46\x48\xb3\x8b\xb7\x72\x8f\x37\xdd\x8f\xcd\x80\x1e\x7c\x29\x55\x07\x3c\xe8\x7d\x03\x1e\x14\x2a\xd6\x66\x7b\x55\x69\x85\x7b\x28\x65\x9a\x02\xa2\x2d\xf2\x26\x77\xc3\x56\xae\xde\x1f\x9d\x43\x55\xab\x21\x3b\xd8\x54\xe7\xc7\x30\xa0\x0b\x27\x58\x35\x1e\x6d\x87\x78\xdd\x76\x70\xbc\xe0\x33\x40\x09\x2e\xe0\xe9\x41\x28\x73\x2a\x62\x99\xae\x3d\xcd\xac\x26\x18\x6f\xc1\x6a\xf6\xdb\xee\xa6\xab\x55\xfe\x44\xbb\xec\x09\xb0\xf1\x3b\xc0\x57\x7b\x03\xbe\x02\xae\xfc\x4e\x40\xe7\x01\x20\x0f\xac\x99\xad\xad\xe1\x37\x5b\x27\x43\xe4\x32\x69\x98\xf5\x50\xcd\x11\x91\x89\x45\xca\x70\xaf\x6d\x06\xde\xda\xb7\xd6\x0d\x73\x51\xeb\xec\x65\x95\xd5\xde\x1a\xdc\x39\xdb\xfa\xd6\x45\x23\x29\x4d\xea\x6f\x0d\x75\xd3\x95\xb7\x06\xb9\xbb\x8d\x6f\x5d\x2d\x93\xef\x40\x98\xd8\x01\x89\xb4\xc5\xfa\xb6\x5d\x65\x1d\x49\xb7\x2c\xc3\x05\x27\xd4\xd3\xe2\xa3\x6d\xb0\x16\xb1\x9a\xee\xa1\x59\xb7\x8c\x68\x02\x88\x16\x4d\xd7\x99\xd4\xd7\xba\x3e\x64\x50\xf1\x43\xcd\x6c\xe1\xb3\xa0\x6e\x95\x22\x0c\xb8\x2c\x03\xe5\xb5\xa0\xb8\x75\xd3\xd9\x5f\xba\xb4\x4a\x23\x7f\xcb\x32\xda\xf0\xd7\x5a\x02\x8a\x53\xd9\x6e\x90\xc2\x04\x19\xa6\xcd\x64\x54\x2f\x86\x04\x52\x75\xf8\xd2\xa7\xd6\x5c\xa2\x29\xb5\x5b\xa9\xcd\x75\x3b\xd6\x3d\xda\x65\x4c\xdb\x91\xc3\x80\x1c\x9f\x21\xff\xe2\x8a\xec\xbc\x71\x04\xd8\x79\xca\x0c\x7a\x07\xdf\xc7\xaf\x1d\x7a\xb1\x2e\xb9\x88\x6d\x6b\x9d\x0a\x69\x7c\x1d\x38\xea\x86\xce\xc3\xe4\xce\x3a\xcd\x19\x38\x7b\x3d\x69\xc8\xa8\xf1\x66\xb0\x29\x0a\x2e\x51\x65\x74\x83\x92\xe9\x7c\x2a\xee\x21\xf5\x61\xde\x0b\x58\x69\x01\x20\x1b\x42\x6e\xb8\xcf\xbd\x4b\xb3\x24\xa9\x36\xac\x77\x0d\x0d\xa5\x25\xfb\x3d\xf0\xb1\xf1\x39\x82\xab\x04\x2a\xbc\xf6\x4d\x4f\xac\x5d\x08\x36\x24\x17\x35\xd5\x7b\x08\xab\x63\x8b\xaa\xd7\xa4\x13\xd6\xf0\xa5\x34\x5f\x91\x1f\x4e\x8e\x2c\x68\x8f\x75\x74\xee\x85\x31\xf8\x01\x46\xa9\x31\x12\x91\xb2\x74\x8a\xde\x4f\xb5\x5e\xc8\x5e\x81\x44\xf3\xf9\x7c\x05\x8f\x6f\x31\x68\xeb\xe6\x87\x90\x21\x06\x84\x7b\xf7\x1c\x90\x21\xac\x01\x23\x56\x9b\xb5\xf6\x2f\x32\x43\xec\x03\xa7\xcd\x59\x41\x67\x2e\x5f\xb2\x21\x61\x4b\x26\x6c\x56\xe5\x0a\xee\x30\xb2\x8d\x8b\x28\x29\x62\xf7\x38\xe8\x71\xa0\xf4\xa3\x89\xc3\x66\xc8\xcb\x8d\x71\x97\xdb\x76\xb4\x6a\x65\x44\x23\x12\x52\xcb\x13\x77\x6e\xf1\x94\x16\x32\x89\x09\xf5\xc7\xcf\xa7\x22\xc7\xee\x39\x6b\xe9\xaa\x90\x83\x6b\x53\xaa\x0a\x51\x82\xb5\xb8\xfb\xf7\xea\x0a\x93\xe3\x78\x03\x0b\x31\xe8\xfc\x76\x09\x2d\x44\xb4\xf8\xa3\x6c\x99\x0d\xd4\xf7\x81\x20\x4a\x2e\x59\x2e\x58\x42\x32\x9a\xd3\x94\x41\x9b\x1b\xe7\x40\x78\xf8\x4a\x85\x76\x78\xdc\x2d\xb0\xb4\x47\xe8\xdc\x78\x84\xe2\x8a\x36\xd8\xc6\x1b\x33\x46\xa8\x9b\x12\xf6\x6a\x6c\xb4\x8c\xa4\x8b\x72\x08\xa0\x68\x27\xaf\x86\x5d\x2e\xb7\xe3\xdd\xaa\xf0\x79\x1d\xd8\x7e\xbf\xe0\x80\x25\xce\xa7\xcb\xf3\xb8\xaf\x33\xd1\x29\x94\xeb\xe8\xfa\xbb\x6a\xcd\x51\x57\x6d\x45\xfa\xc0\x91\x84\xc6\x7c\x17\xa0\xb8\x9e\x94\xff\x6f\x9e\x2a\x7a\x98\x33\xa8\x91\xa3\xc9\x79\xc6\xa2\x0e\xec\x8f\x1f\xde\x9e\x1f\x54\x07\x05\xa1\x84\x85\x67\x0b\x06\xdf\x07\xa8\x1d\x57\x6c\xba\x90\xf2\x92\xec\x6d\x40\x1e\x0b\x92\xa5\x14\x9f\xab\x7d\xbb\xbd\x47\x66\xde\x03\xc2\x05\xb4\x88\xf2\x42\xd5\xb7\xd6\x72\x0f\x89\xfc\x2c\x60\xad\x6c\xa6\xb5\x15\xc3\xeb\xd3\x3c\x6d\x95\x90\xd6\x9a\x27\xad\x2f\x46\xf3\xea\xac\xcf\x2c\xc8\x4d\x08\x74\x1b\xa9\x86\xee\x9e\x47\x21\x89\x75\x46\x18\x0d\xbc\x03\x3a\xfc\x58\x8e\x16\x76\x34\xe0\xb3\x4a\xb3\xc5\xd2\x8c\xf4\xa1\xdc\x5d\x68\xfa\x6e\x7f\xba\x1b\x9a\x1d\xd5\x9a\x20\xa8\xe7\xb6\x89\x73\x88\xc8\xe7\xf2\x4b\xa6\x8c\x2c\xa4\x90\xb9\x45\x1a\x29\xb1\x74\x80\xcd\x60\x12\x2f\xac\x80\xe5\xb7\xc1\x54\x83\xb2\x63\x97\xc6\x3b\x4b\xe8\x1c\x9a\x46\xd7\x00\x71\x80\xb9\xca\x02\x63\xbe\xe1\xcd\xae\x1c\xcc\x35\x44\x85\x7e\x6c\x0a\xb9\x98\x0b\xf5\xda\x84\x6a\xc8\x91\x39\x30\xf3\x9e\x61\x7a\xed\x6e\x05\x86\xa3\xcc\xe3\xf4\x55\x7a\xde\x20\xaa\x10\x18\x39\xef\x1e\xf7\xa5\x5f\x41\x85\xbd\xcd\x03\x4d\xf9\xb5\x79\x4a\xf8\xab\x10\xf0\x03\xca\xaa\xc4\x68\xf3\xd7\x83\x31\x21\x27\xa5\x5d\x3b\x34\xab\x18\xde\x19\x34\x2b\x15\xf0\xc5\x29\x22\x76\xe0\x0b\x84\x71\x28\xdb\x77\xb4\xcd\xfe\x6e\xde\x2d\xc0\x07\x92\x3b\x3a\xea\x10\x50\xb6\xc3\x99\x85\x76\xe2\xbb\x4d\x80\x19\x6c\xe3\x0e\x82\xcc\xeb\x32\xfa\xc1\x45\xfb\x43\xf2\x30\xc5\xf2\x25\x8f\xd8\x41\x14\xc9\x42\xb4\xca\xd1\x3d\x62\xe6\x15\xa8\x66\xf1\x79\x65\x4c\x8c\x47\xc4\xf0\x2d\xa6\xc4\xd3\x84\x53\x44\xfa\xae\xde\x89\x25\xa2\xe5\x38\x10\xcf\xa8\xcd\xd0\x6e\x19\xa5\x19\x6d\x96\x6f\xdb\x92\x42\x6d\x0b\xbc\xd6\xdf\x78\x93\x84\xab\x51\xd0\x86\x32\xd6\x8a\xb7\xee\x56\x39\xa7\xa9\xba\x2c\xf1\xcf\x19\x20\x01\xf9\xc3\x14\x7c\x6e\x5f\x74\x44\xf1\xa9\x8d\x30\xd1\x1b\x50\x57\x1b\xbe\x67\x5e\xfe\x40\xbd\xfe\x3f\x47\xa7\xed\xea\x9d\x7c\xeb\x67\x84\x98\x59\xd8\xa1\xbd\xaa\x1e\x22\x63\x86\x08\x61\xe6\xc9\x43\x92\x53\xdb\xd5\x92\x22\x13\x4a\x18\x45\x9f\x0a\xd9\x0b\xea\xcb\x06\x50\x07\x59\xe6\x12\x20\xab\x1f\xe2\xba\xa4\x8c\x0a\x15\xa0\xc0\x31\x18\xda\x39\xf5\xfc\x7c\x50\x10\xda\xd5\xb6\xde\x83\x3d\xe7\x92\xae\xde\xa1\x74\x5e\x44\x9a\x14\x5a\x99\xcf\xf1\xe1\x8e\x61\xde\xe1\xf1\x39\x9b\x73\xa5\x73\x0b\x98\x67\x06\x2c\x27\x61\xbd\x42\xfe\x96\x4b\xb6\x22\x3f\xfe\x74\xfc\xeb\xef\x6f\xde\x1d\x1e\xbc\xf9\xfd\xed\xc1\xe1\x8f\x27\xa7\xc7\x1f\x3f\x9e\xff\x7a\x7e\x71\xfc\xf6\xe3\xc7\x43\x04\xf9\xb5\x88\x78\xe7\x4c\x7f\xfc\x68\x77\xaa\xfa\xf8\xf1\x22\xca\x78\xf6\xf1\xe3\xc4\xf9\x40\xb0\xe9\xe9\xff\x39\x3a\x05\xfe\x89\xc0\x4c\x3e\x29\x0c\x64\x2b\x12\x1d\xe6\xbd\xa0\xaa\x4c\x41\xad\x54\x89\x36\x68\x94\xd3\x54\xdc\x6d\x44\x25\x6f\x75\xd8\x17\xe0\x0c\x76\xdd\xca\x9d\x97\xb6\x04\x0c\x98\x32\x7d\xc5\x2c\x92\xd8\x46\x1c\x7c\x5a\x2f\xf7\xb7\x69\xe9\x1b\x3a\x22\x3b\xa4\x9f\x25\x67\x57\x08\xfb\xca\xe7\x82\x26\x41\x5b\x6e\x40\x16\x44\x74\xb9\x75\xb4\x7d\x50\x92\x32\x19\xfb\x16\xe4\x35\xaf\xfd\x9a\xc7\xbe\x52\xfc\x89\xfd\x14\x58\x4c\x26\x27\x47\xe4\xe5\x18\x95\x9c\x93\x23\x6c\xef\xb2\x11\xec\xdd\x59\xaa\x46\xa0\xa2\xf4\xdd\x50\x93\x51\x6e\x80\x26\xcc\xa8\xc1\x0e\x28\xa6\xb1\x4c\x29\xbf\x67\x8b\xb2\xcf\x54\x5d\xce\x8a\x24\x59\x91\x7f\x17\x34\x41\x1d\x60\x22\xe3\x75\xce\xb4\xf3\x9d\xfb\xe8\x9f\xe3\xef\xfc\x3c\xfe\x39\xf6\x08\x0c\x40\xb6\x7f\x8e\xd5\x32\x1a\x7f\x67\x31\x0a\x89\xbd\x69\x63\x06\xf5\x5a\x8d\xae\xd5\x67\xf1\x37\xf0\x6c\x0a\xfa\xee\x83\x14\x69\x06\xed\x99\x7f\xc8\x69\xc4\x26\x2c\xe7\xa0\x32\x49\x11\xb7\x29\xd9\x74\x5b\x86\xc4\x0e\xb5\x9b\x0b\xa2\x70\x58\x4f\x02\xc1\x58\x8c\x4a\xa2\x9d\x05\x23\x73\x33\x09\x58\x18\xd4\x02\x01\x1a\x23\xca\x19\xc5\x44\x7c\x8b\x93\xe1\xa0\x98\xc7\xd6\x7d\xe6\x82\xc3\x46\xe3\x17\x6c\x8e\x21\x5e\x1b\x47\xc0\x30\x32\x72\x59\x84\x4f\xf4\xb1\x4d\xa5\x65\x46\x78\x9a\xb2\xd8\x28\x40\xc9\x8a\x2c\x39\x45\xce\x0f\x95\x9e\x78\x4e\xf7\x84\x24\x12\xbc\xf1\x85\xe0\xd6\x39\xb7\x28\x34\x89\xe5\x95\x18\x94\x0d\xf8\xf1\x01\xc6\x5a\xe1\xc9\xb0\x52\xf6\x0c\xaf\x44\x32\x20\x6c\x15\x6d\xc4\xe9\x4b\x30\xc3\xca\x6d\x56\xf7\xd8\x44\x3c\x04\x77\x40\x50\x51\xc7\x41\x1c\x82\x77\x09\x1a\x80\x21\x27\x26\x34\xa1\x95\x16\xdc\xf6\xa5\x1c\x2f\xc1\xbc\x3c\xe4\x62\xe1\x80\xe6\xd7\x33\x99\x47\x7c\x9a\xac\xc8\x82\x26\x65\x3b\xee\x90\x36\x60\x45\x86\xaf\x9f\x48\x31\x0f\x05\x35\x42\xb3\x43\x7d\x3a\xa3\xa2\xc8\xf0\x79\x46\xbe\xad\x64\x71\x83\xc1\xf0\xcd\x0b\xf7\xaa\x8f\x00\x96\x7a\xaf\xb0\x91\x96\x09\xc3\xf5\x69\x73\x52\x36\x56\x83\xef\xaa\x70\xf4\x26\x84\x78\x8c\x9a\xdb\x0b\x87\xbc\x62\x76\xc4\x85\x9f\x3f\x58\x1a\x5a\x53\x28\x47\x37\xa7\x1d\xbf\x81\x5a\xc0\x15\x31\x52\xcb\x22\xab\x85\xb8\x06\x3a\xe7\x59\xc2\xc8\x77\x97\x6c\x35\x44\x4c\x5d\x54\x42\xfe\x19\x74\x3a\xf3\xa8\x84\xd8\xfb\x40\xe6\xe4\x3b\xf7\xaf\x7f\x3e\x60\xfd\x6e\x1b\x2f\x2a\xbe\x54\xeb\xc8\xd7\x31\xd6\x08\x55\x41\x76\x91\xb2\xb6\x7c\x48\x4b\x24\xd7\x98\x1c\x03\x5a\x03\x6a\xa4\xb6\xdb\x53\x92\x54\x6e\x56\x56\xb3\xa9\x02\xb4\x82\xff\x25\xa8\x1d\x3a\x95\xb6\xc0\x9a\x01\xd2\xf5\x8c\xe5\xe5\x27\xc0\x60\x4e\xe5\xf1\x35\x8b\x0a\xfd\x90\x80\x91\x78\x5d\xb2\xf6\xbd\xf4\x7f\x62\x1e\x05\x1c\x69\x63\xb4\x70\x5f\xb7\x51\x9e\xce\x20\x75\xef\x76\xda\x5e\xb2\x95\xf2\x7d\x0e\x2e\x71\x74\x8b\x30\xe0\xf7\xaf\x13\x64\xc7\xd7\x5c\x69\xf5\xbf\x5d\x23\xff\x74\xea\xf8\x37\x0e\xed\x16\x13\x46\x0f\x7a\x5c\x98\x3f\xe1\x31\x0f\x4d\x70\xf7\x02\xad\xa9\xfe\xce\x51\x22\xe8\x62\x41\xcd\x3b\xed\x2a\x9b\xbc\x25\x05\x94\xf1\x85\xed\x10\xca\xb4\x23\xfc\x31\xee\x4f\xa4\x21\xd0\xe5\xd8\x28\x79\x55\x31\x63\x3f\xb2\x37\x71\x00\xf6\xe5\x4b\x9a\x30\x61\xbb\x43\x25\x71\x44\x73\x0c\xd1\x5b\x4c\x6f\x65\x1b\xcc\x59\x30\x5b\x23\xe3\x2c\x27\x2b\x57\x59\xd9\x50\x1e\xcd\x35\x8f\x8a\x84\xe6\xc4\x9c\xc7\xb9\xcc\xef\x09\xfd\x8d\x57\xab\x35\x29\xb7\x68\x23\x75\x0e\xaf\x2a\x7f\xaf\x8f\x58\xef\x35\x62\xb5\x17\x63\x32\x71\x44\x2f\x0d\x0f\xca\x5e\xb5\x41\x9d\x9c\x39\xde\xe4\x19\x45\xd8\xad\x42\x57\x01\xb3\xe6\xe0\xff\x1e\x04\xc2\xc3\x9f\xcc\x31\xf9\x97\xc7\x38\x19\x92\xd2\x67\x0c\x15\xbb\xf6\x99\xf6\xd8\xd8\xe5\x2a\x0f\xf5\x4c\xe6\x6c\xc9\x72\xb2\x17\x4b\x84\xfc\x58\xf2\x48\x0f\xc6\xe4\xff\x6f\x34\x45\x70\x22\x3b\x75\xd2\x1e\x33\x5f\xa5\x5c\xf6\xcc\x78\x41\xf6\xe0\x67\xa1\x2a\x39\x70\x81\x22\xdb\x8c\xe7\x89\x65\xc3\xb4\x88\x70\x6f\x88\x6e\x57\xd8\x28\x6a\x8a\xb5\xad\xe1\x25\xbf\xf4\x1c\xd2\xf3\x44\xae\xec\x29\xad\x78\x6e\x7d\x9c\xc5\xb1\x50\xbf\x71\xfe\x07\x7c\xf4\x24\x67\x73\x38\x7f\x78\x7a\x1e\xf0\xf4\x69\x99\xc9\x44\xce\x57\xe7\x59\xce\x68\x7c\x28\x85\xd2\x39\xb0\x86\x36\x2d\x16\x6e\x1a\x33\x00\xe7\x5c\xc8\x2b\x42\x6d\x02\x9b\x9c\x61\x93\x0a\x59\xcc\x17\x08\x37\x03\x3f\x24\x34\xca\x25\x00\xce\xe2\x70\xd6\xe8\x54\x1e\xfb\xce\xb9\x0f\x3c\x3a\x0d\x8c\x02\x0e\x8f\x2b\xba\xb2\x87\x89\x4e\x79\xcc\x54\x90\xc1\xed\x26\x83\xa1\x9f\x1b\xdf\x1f\xb8\xf2\xc1\xe9\xd1\x7d\xfb\x9a\x3e\xa2\x42\x7b\xc3\xab\x78\xcd\x08\xa9\x5e\xd2\xd7\x6b\xa4\x40\x37\x9a\x4a\xab\xa9\x62\x3b\x25\x47\x99\x27\x82\x2d\x93\xd2\xeb\xf3\x4b\x76\xd5\xe0\x97\xee\x45\x7f\x62\xf7\x4f\x05\x1b\x81\x3d\xfa\x5e\x28\xaa\xb9\x9a\x41\x03\xe4\x07\xd4\xc7\xa1\x24\xa3\x59\x9f\x56\xbc\xaa\x95\x4d\xe1\x68\xae\x64\xde\xe3\xe7\x56\x36\x8b\xcd\xff\x2b\xed\x20\x9b\xfe\x09\x25\x22\xbe\xc5\xab\x39\x41\x91\x6d\x7b\xae\x65\x19\x87\xc6\x48\x45\x91\x4e\x59\xee\xcf\x3e\x3a\x03\x78\x5e\xc3\x8f\xac\x9d\xfd\x27\x88\xd9\x0b\xe4\x39\xbe\x36\x9a\x87\x6a\x96\xa8\x84\x57\x65\xa9\xea\x83\x62\x78\xcc\x25\x70\xd6\x96\xa1\xd2\x3d\xd8\x62\xbd\x97\x9f\x34\xe5\x73\xe5\xd5\x26\x95\x12\xaf\xc6\x09\x95\x78\xd5\xd3\xc8\x6f\x7c\xfd\x5a\x0b\xe2\xb0\x1c\xd2\x3a\x85\xd4\x10\x15\x78\x74\x60\x03\x6c\x9b\x15\xec\x70\x33\x82\xa7\x2a\x6f\x14\x99\x9b\xf0\x77\x6d\x1b\x8c\x37\xde\x9f\x78\xb5\xcb\xd7\xc4\x6b\x64\x5e\xa9\xd5\xef\x1d\xb1\x1a\x0f\xd2\xf6\xb0\xe1\xd5\xd0\xa0\x2e\xaf\xca\x86\xba\x2c\x4d\x6b\xdc\x59\x15\xd3\xba\x64\x76\xa5\x61\xdd\xea\xd9\xad\xb3\x3d\xf1\x6a\x63\xe3\x96\x57\x85\x10\xf2\x1e\xd6\x2e\x25\x16\xc9\xd5\x9e\x8e\x8d\x36\xef\x89\x18\x92\x53\xa9\xcd\x7f\x02\xf3\xf7\x48\x32\x75\x2a\x35\x7c\xb2\x15\xa4\xc4\x57\xe8\x90\x90\xae\x93\x27\x36\xc6\x30\x7c\xd3\x86\x68\x8d\xc4\x73\x04\xdb\x60\x58\x9c\x08\x22\x73\x47\x31\x6f\x5d\x28\x3b\x44\x18\x56\xb0\x08\x64\x37\x1a\x27\x66\x9c\x90\xce\xb7\x0c\x67\x87\x82\xec\x2f\xfc\x06\xb0\xa2\xb3\x04\x0a\x04\xe2\x22\xc7\x36\x52\x46\xd7\xd4\x6c\xce\x23\x92\xb2\x7c\xce\x08\x00\x7a\x76\xb1\x7c\x6d\xe4\x0a\x5e\x2d\xa5\x4b\x38\x99\x16\x7b\x09\x44\x36\xa8\x58\x1d\xaa\x00\x38\x1e\x8a\xb5\x94\x82\x25\xf5\xff\x78\x1f\xf4\xff\x4b\x32\xca\x73\x68\x3b\x65\x63\xc7\xe1\x77\x36\xfa\x12\x0e\x63\x46\x58\xf3\x2d\x51\x41\x18\xd6\x79\x99\xd1\xeb\x8a\xc7\x90\x5c\x01\x54\xb3\xe1\x89\xde\xfd\xb1\x73\xc9\x56\x3b\xc3\xb5\xad\xb7\x73\x22\x76\xca\xc0\x70\x65\xb3\x79\x21\x0c\x19\x84\x3b\xf0\xdd\xce\x97\xd3\x55\x5a\x09\xdb\x2e\x9a\x76\xd6\x27\xd4\x70\x5f\x95\x8b\xf7\x53\x03\x4c\x47\xb2\x56\x4d\xf9\xb6\x32\x9e\xd3\x96\xb4\x55\xd2\x4b\xf1\xa7\x30\xe9\x3f\x09\x10\xf7\x15\x34\x96\x75\x30\x62\x19\x36\x09\x9b\x97\x29\x33\x34\x89\xb0\xef\x2e\xae\x2a\x0c\x62\x56\xd3\xd9\x18\x89\x94\x97\x45\xe6\x76\x05\x24\x19\x00\x46\x90\x88\x64\x6a\xad\x0e\x7c\x3e\x38\x56\xec\x96\x1b\xd9\x40\x1e\x6e\x5f\xbf\x39\x6c\xb7\xcb\x8a\x39\x53\x9d\xb0\xf7\x3b\x78\x58\xff\xfb\xbc\x82\xcf\x79\x09\x67\x67\xb1\xff\x68\xea\xdd\xe5\x33\x99\x4f\x79\x1c\x83\x29\x8d\x0f\xf2\xc9\x7f\x35\x42\x9b\x33\x51\xb1\xbe\xc6\xf5\x3b\x36\xa4\xe4\xd7\xcd\x35\xb1\xab\x31\x01\x02\x7e\x00\x0a\x4a\x2c\xcd\x87\xfe\xd1\x37\x10\xd4\xbf\xa1\x75\x5b\x1a\x86\x21\x8a\x24\xf1\xf0\xdb\x68\x58\xa0\x57\x12\x0e\xa8\x75\xe7\xcf\xcd\x91\xd5\x55\x42\x6f\x04\xf0\x5d\xef\xfa\x64\xa6\x52\x7d\xc5\x13\x31\x91\x71\xd5\x85\x51\xc1\xf2\xb5\xd5\x50\x0e\x04\x78\x2f\x40\x03\xf6\x29\x55\x4d\x8a\x60\xdb\x49\x99\x16\xb2\xa5\xa5\x44\xb9\x09\x5e\x95\x6a\x99\xf2\xa8\x01\x2b\x01\xf7\x49\x6b\x1e\xb2\xfb\x16\x07\x0a\x5c\x7d\x98\x5e\x30\xcf\x19\x56\xbd\xc3\xf1\x82\xe3\x66\x81\xfd\x0b\xc1\x96\xcc\x6c\xab\x98\x2b\x0b\xbc\xea\xb2\x95\xfe\x7b\xcd\xbb\xf2\xff\x3b\x92\xa7\x52\x3b\x07\xe0\x7f\x3b\x0f\x3a\x8a\xb2\x6b\x9e\x16\x69\xd9\x28\x80\xc4\x7c\xe6\xda\x52\xb9\x24\xa9\xaa\xeb\xa1\xea\x01\xb3\x47\x44\xd3\x7c\x0e\xc9\xd2\xd6\xf5\xe0\x24\xd6\x3c\x91\x53\x9a\x90\x94\x0b\xf3\x18\x9b\x07\x51\xf9\xcc\xcf\xc4\xfe\x79\xcb\x83\x40\xac\xf2\x39\x9f\x26\xcc\xfa\x36\x6a\x1d\x33\x83\x1f\xd7\x6e\x84\xa3\x95\x40\x2b\xae\x05\x15\xe4\x2d\x17\x47\xce\x31\xfa\xda\x1c\xd9\x6b\x9a\x66\x09\xc3\x5a\x68\xf2\xcd\xe8\x3f\x52\x30\x62\x73\x7d\x86\xc4\x2d\x8f\x4d\x01\xd3\x92\xbc\x1c\xba\x06\x22\x41\x97\x51\xe0\x63\x55\x0e\xea\x9c\xb2\x8a\x7c\xbd\xff\xf5\xfe\xcb\x57\x46\x1d\xc5\x88\x1f\x55\x16\xeb\x6d\x9d\x1a\x2f\xc7\xe4\x13\x31\x33\x78\x69\xff\xfb\xb5\xfd\xef\x37\xe4\x13\xf9\x44\xc8\x84\x4c\x48\xf8\x5f\xf3\x1f\xf2\x89\x8c\x0c\x11\x82\xa9\xbe\x1c\x56\x19\x57\x05\x6a\xdc\xee\x05\x10\x23\x38\x34\xb0\x8a\x48\xa6\x0c\xa6\xfa\xf5\xff\x0e\x21\x9a\xb9\x26\x52\xd8\x3b\x5f\xee\xc1\x94\x06\xe4\x0a\xfc\xf3\x29\xbd\x44\xdf\xd4\x41\xa4\x0b\x9a\x98\x87\xef\x7d\x33\x7a\x39\x20\x52\x54\x6f\x5f\x72\x09\xdd\x78\xec\x0c\xf7\x5e\x0e\xc6\x6b\x53\xfe\x7a\xc3\x94\x2b\xb3\x85\x59\x50\xb1\x82\xa1\x6f\xde\xef\x6e\xab\x1f\x88\xd5\x15\x5d\xf9\x0d\xef\xe4\xe6\x9c\x2f\x7d\xef\xde\x00\xed\x09\x12\x17\x60\xff\x72\x07\xe0\x87\x83\xae\x08\xd7\x63\x72\xa2\x77\x77\x15\x84\x1d\xd0\x6d\xe0\x9a\x0c\x1f\x85\xc0\xc4\x40\x78\xd8\x1b\x2f\x6a\x85\x0d\x0d\x60\x30\x3b\x8d\x10\xdd\xab\x4b\x30\x5e\xa9\x3f\x25\x1d\xa8\x49\x7e\xac\x0a\x6c\xc8\xfa\xa9\xaf\x1f\x5c\x9f\x83\x79\xeb\xe9\xae\xf5\xb0\x74\x6c\xe8\xd2\xaa\x64\xe5\xc9\x2f\xdf\x69\x08\xe9\x80\x4e\x7a\x12\x2b\x3e\x21\xea\xa7\xc8\xc7\x9d\xea\xb9\xfc\xb8\x03\x71\x40\xaf\x8a\x5b\xa8\x00\xab\xde\x58\x98\x59\xb7\x8d\x03\x28\xc4\x03\x11\x97\xd9\x57\x0d\xe7\x0f\x0d\x69\xc1\xfc\x9c\x43\x48\x32\x5f\x7f\x93\x20\x43\xab\x92\xd0\x6b\x4e\x61\x80\x78\x4f\x0e\x70\x03\x2b\x88\xa3\xde\x65\x5e\x37\xd2\x2e\xe8\x7d\x00\x0a\x93\x8f\x27\xa5\xd8\x39\xd3\xdc\x6e\x0f\x36\xba\xbd\x5d\x27\x4c\xbf\xac\x27\xb3\x0d\x29\x75\x65\xac\x09\x51\x7e\xcd\x26\x81\x12\xac\x70\xff\x04\x3d\x7a\x5f\x6e\x80\xbc\xb5\xc7\x45\x55\xc9\xf5\xc2\x6e\xa4\xf2\x99\x52\xe3\x73\x7f\xa9\xf3\x0f\x6f\xc7\x57\xe4\x26\x68\x69\x4d\x84\xc5\xd7\xc3\xda\xec\xed\xe7\x7f\x6b\x22\x43\xbe\x7e\x75\x3f\xe1\x60\xff\x7b\x51\x59\xe6\x8d\xab\xfb\xb7\xbd\x72\x96\x03\xc8\x85\xd8\x70\x08\xa0\x6e\xaa\x8c\x8b\x8f\xbd\x40\x53\x5c\x17\x14\x4b\xad\x04\xbb\xb2\xf9\xaf\x37\xbf\x54\xa0\x9b\x3b\xe6\x3e\x34\xf2\x87\x16\xd0\x2c\x35\xcd\x0a\x80\x46\x30\x84\x74\x9a\xf6\x37\x7b\xdf\x90\x11\x79\x31\x30\xbb\x41\xe0\xb6\x02\x62\x86\xa2\xcc\x88\x06\x9b\xce\xad\x17\x46\x79\x32\x94\x51\x43\x6c\xb0\x99\x24\x75\x21\x74\x1f\xc5\xdb\xd3\xe6\x71\x95\xee\xc7\x92\x05\x42\xc6\xec\x60\x06\xfd\x7f\x56\x4d\x11\xbe\xeb\x32\xe1\x74\x6d\xcc\x40\x36\x2c\xe4\x15\xb9\xb2\x59\xda\xb0\xe5\x6c\xb1\x61\x38\x91\x7d\xf3\x87\xdf\x53\xc0\xcf\x3c\x4b\xb6\x2a\x84\x67\xa5\xf6\x18\x29\x58\xf6\x77\x21\x7c\xd1\x88\xfc\x28\x85\xcc\x5f\xa1\x76\x64\x86\x54\x25\x2b\xbe\xf9\x71\xc8\x6a\x42\x30\x97\x8a\x40\x50\x46\xbd\x39\x01\xeb\xf0\xd5\xe7\x46\xf1\x36\x24\x24\x8c\xc7\x9e\x8f\xdd\x36\x38\xa2\xd6\xdf\x90\x99\xec\x11\xd2\xd7\x5c\x53\xe6\x5b\x78\x5d\xdb\x9d\x6c\x5c\xdb\xff\xb6\x3c\xd5\x6d\x68\x97\xe2\x5c\xeb\x23\x63\x56\xee\xc4\x4c\x4f\x71\x29\x70\xe9\x6e\x3b\x16\x50\x90\xda\x7c\xcf\x37\xb4\xf7\x0c\x25\x2f\x20\x2f\xa1\xcb\x0d\x1b\x8e\x78\xeb\x76\x45\xc8\x32\xcc\x8b\x68\xbd\x35\x71\x57\xf8\xfa\x5d\x18\x75\x48\x68\x22\xc1\xd9\x62\xf8\xac\xf9\x88\xc5\xf6\xc6\x99\x74\x3e\x99\x35\xff\xc5\x02\x4a\x96\xcb\xcc\x9c\x61\x65\xaf\xd5\x37\xad\x7b\x81\x3b\x6c\xd3\x56\x5b\x12\x9f\xf9\xfc\xf7\x64\x90\x37\xd1\x41\xb2\x9e\x1f\xcb\x19\xd1\x97\x0c\xe4\x1f\xac\x1c\x3a\xaa\xc6\x40\x17\x6b\xce\xd8\x42\x14\xf4\x49\x96\x1d\xa7\x5d\x54\x16\x9b\x21\x47\x34\x09\xb5\x29\xa3\x91\xf1\x98\xe5\x28\x60\xa7\xac\x52\xb6\xe4\xf3\x5d\xc8\x2f\xe5\x9d\x58\xae\x04\x79\xdd\x38\xd0\x3f\xb1\x4c\x7e\x67\x5a\x44\x97\x4c\x3b\x7f\x76\x0e\x95\x16\x59\xa1\xc9\x94\x26\x54\x44\x66\xf3\xd6\xf3\x1b\xb4\xc4\xc1\xf0\x97\xf0\x14\xc4\xfe\xf1\xe5\x34\x38\x74\x90\x8d\xc9\x85\xd2\x66\x34\x4c\xd3\x2c\x27\x78\x90\x28\x39\x34\x47\xd4\x0d\xb0\xee\x4c\x80\xa1\xec\xbf\xd1\x45\x6f\x85\x01\x63\xda\xd6\xeb\x05\x7e\x75\x4b\xe7\x9a\x00\xc3\xb2\xf4\x2a\x9b\x18\x13\xe8\x8f\x7a\x32\xab\x2f\xd9\x4e\xb5\x68\xd4\xd5\x21\xed\x0c\xf1\xad\xcd\xca\xd9\x22\x5e\xeb\xed\xb0\xcd\x57\x82\xb7\x12\x31\xd4\xb6\xd7\x07\xf6\x77\x54\x9f\x60\xd4\x21\x37\x3a\xa8\xad\xb7\x8f\x7e\xa2\x37\x59\xbc\x0f\x7d\x66\xd6\xec\xfb\xf6\x0e\xb7\x75\x95\xbf\xca\xc9\x21\xf3\x86\x26\xae\x22\xc6\x76\xc7\xb5\xc8\xf8\x62\x77\xb7\xf4\x0c\xc0\x51\x40\xce\x52\xda\x2e\x86\x8b\x56\x6c\x07\xb2\xe7\x54\x3f\xa2\x59\x92\xe0\x61\x2d\x4d\x28\xa3\x0a\x87\x1d\xe3\x38\x8c\x50\xf5\x62\x6c\xfc\xe1\x86\x36\x73\xe8\x28\x5b\x79\x4c\xcb\x21\x99\x16\x9a\xcc\xf9\xd2\x08\x80\x3b\x39\x3d\xd0\xb1\xb3\x60\x49\x46\x72\x16\x17\x91\xc5\x72\x00\xe9\x74\x10\x5a\x68\x90\xb9\xee\xb9\xc3\x4e\x85\xa0\x3b\xd8\xf6\x54\x54\x85\x0f\x9f\xc1\x01\x01\x45\x8b\xcf\x08\x5b\xb2\x7c\x45\x32\xa9\x14\x1c\x43\x60\x5b\x58\xd0\x08\xb1\x33\x0f\xbf\x0d\xd6\x04\xcc\xca\x29\xf0\x3b\x56\x83\xdf\x01\x0b\x57\x56\x58\xd1\xc3\x38\xf4\xbe\xd9\x7f\xb9\xff\xf2\x76\x63\x6c\x02\xff\x2b\x3d\x74\xee\xbf\x27\xb3\x0d\x36\x67\x39\x97\xca\xce\xb9\x8f\x13\xef\x6b\xf0\xb5\x7d\x33\x08\x7c\x79\xdf\xec\x7f\xbd\xff\x72\xcf\xcc\xf5\xeb\x81\x99\x75\xe0\xa5\xfb\x3a\xf0\xd2\xf9\x5f\xda\x19\x31\x55\xf1\xd3\x9d\x08\x5b\xbd\x7a\x25\xf3\xd8\x66\xe9\xba\x4a\x48\x33\x23\x44\x3e\x34\xb2\x21\x75\xbc\x1c\xb7\x5d\xd5\x4b\xb0\xab\xd1\x5d\xc8\x35\xf9\x4b\x2a\x73\xf6\x97\xe0\xfe\x1b\xfd\x6b\xcd\xdd\x66\x8f\xdc\xfc\xad\x79\x8a\x64\xdb\x04\xc9\x6e\xba\xc8\x61\x07\xa2\x36\x39\xcd\xbb\x6f\x5c\xe3\x4e\x1c\xca\x26\x8f\xa1\x53\x37\xb5\x49\x8e\xd3\x55\x58\x13\x3d\x65\x46\xa5\x45\x1f\x58\x09\x9c\x78\xcf\x46\xc5\x4a\xcb\x9c\xce\xd9\xbe\x7d\x6c\x93\x0a\xe6\xc7\xc8\x45\xfe\x19\x5b\x3e\x55\x32\x85\x10\x92\xca\x36\x83\x72\x65\xe9\x2e\x87\x14\xb8\x00\x8d\xa0\xa2\x13\x08\x59\x01\x3d\x0d\x6a\x45\x9f\x48\x3a\xf2\x03\xb7\xba\xa4\x57\xea\x38\xa1\x4a\xf3\xe8\x5f\x89\x8c\x2e\xcf\xb5\xb1\x7a\x5a\xab\x16\x9b\x46\xad\xac\xa9\x20\x07\xbf\x9c\x93\x23\xae\x2e\xcb\x7e\xcf\xae\x07\x7e\x58\x44\x49\x3d\x76\xb5\xc5\xd3\x20\x29\x8d\x16\xa8\xba\x5a\x1f\xb4\xeb\x5f\xd6\xdd\x59\xf9\x13\xbd\x52\x0c\xa7\x0f\xfd\x74\xcd\xd7\xac\x39\x0b\x7e\x34\x2c\x4d\x7c\x9d\x93\xa3\x47\x48\x5e\x9e\xa9\x8b\xc6\x40\xdd\xeb\x5d\xf0\x5c\x3b\x05\xc4\x85\x48\x18\x56\x1b\x21\x26\x79\xb5\xb3\x1d\xec\xa1\x95\x2c\xc8\x15\x45\xbb\x1a\x38\xec\x98\x5c\xf0\xec\x15\x39\x0e\x7a\x44\x6d\x1a\xca\x68\x1f\x1e\x91\xd6\x1a\xd4\xb0\xe7\x30\x19\xc9\x30\x64\x5b\xe7\x44\x8e\x51\xb5\x52\xaf\xc8\x0e\xbb\xd6\x7f\xdd\x19\x92\x9d\xeb\x99\x32\xff\x11\x7a\x06\x3d\xe5\x6c\x0f\x71\xa3\xe3\x89\x19\xcb\x4b\xd3\x11\x7f\xb0\x0e\x06\xd5\xfd\x96\x25\x17\xef\x8e\xde\xbd\x02\x5d\x3e\x96\xc6\xea\xcb\x72\xb6\x34\x3a\xa5\x85\x36\xb3\xbc\x31\x20\x03\xa4\xcf\x44\x32\xcd\x72\x99\xf2\xa0\x00\x19\x8e\x5c\x93\x13\x40\xba\xc8\x80\x03\xc3\x16\x36\x43\x27\xfb\xc9\x0f\xe7\xb6\x54\xf0\x81\xb8\xcb\x66\x3a\x99\x11\x89\x89\x02\x55\x08\x04\xae\xfc\x4d\x66\xfb\xd8\x51\x04\xe0\x4a\x95\x1b\xc6\x68\xe6\xf6\xab\xfd\x98\x2d\xf7\x55\x4c\x5f\x0e\xe1\x31\xb8\x1b\x56\xb5\x39\x51\x45\x76\x5e\xee\x8c\xc9\x39\x4f\x79\x42\xf3\xc4\xb6\xea\xb6\x43\x94\xf7\x19\x43\xc1\x0d\x08\xe6\xef\x8b\x1d\xb2\x87\x18\x04\xa0\x6e\x24\xcc\x21\xd2\x79\x04\x56\x48\xd2\x19\x34\xd2\x2e\x49\x07\xce\x78\xd2\xda\x21\x4f\x80\x4b\xd2\xf8\x9d\x48\x1a\x67\x6e\x57\x37\x87\x1b\xcd\x15\xf0\xe5\x85\xf5\x67\xce\x64\x6e\x8d\x40\x7f\x8b\x03\x3a\xe2\xc2\xaa\x2d\x6f\xcd\xd2\xab\xad\x11\x3f\xa4\x03\xf0\x3d\xe2\xa5\x48\x37\xf4\x75\xa3\x41\x2a\x02\xf6\xb8\x3e\x39\x72\x4c\x3c\x63\xb9\xe2\x4a\x1b\x16\x15\x57\x54\x03\x8e\xfa\xc2\xde\x41\x4a\xff\x23\x05\x39\xfe\xd7\xb9\x9d\xd6\x60\x0b\x89\xdd\x90\xd3\xd1\xff\x14\x39\x33\x1a\x51\x6b\xf5\xcb\x8f\x54\x57\xb9\xcc\xe7\xe4\x88\x6a\x8a\x9a\x17\x72\x2a\x59\x82\x83\x61\x8f\x7d\x28\xda\x72\xc8\x6f\x0d\x95\x67\xf2\xf8\xda\x8f\xd9\x41\xa7\xcd\xd1\xc4\xcd\xcf\xdf\x9f\x9d\x3c\x82\xee\x14\x81\xb8\x9d\xbf\x95\x71\x47\x0a\x54\x30\xa0\x13\x79\x00\xd6\x7a\x88\x9f\x93\xd4\x3c\x89\x9c\x4a\xc1\x86\xe4\x8c\xd1\x98\x18\xee\x66\xff\xf9\x4b\xce\xf5\x7d\xf1\xaf\xca\xab\xb5\xe8\x77\x8b\xd8\x09\x21\xdc\x60\x8e\x08\x61\x87\x7e\x00\xe8\x04\xa6\x63\x75\x80\x69\x22\xa7\xc4\x32\x8b\xc7\x7c\xfb\xf7\x67\x27\x9d\xbd\xfc\xfb\xb3\x13\xf7\xee\xe6\x9f\x72\xb6\x9d\xaf\xdd\xa1\xf1\x50\xda\x0e\xaf\x6b\xca\x7e\xa9\xce\x95\x8d\x94\xea\x06\xc1\xdd\xad\x81\x71\x57\x76\xc0\x63\xd1\xfc\x92\x8b\xc6\x35\x80\x55\x6e\x03\x4d\x94\x3c\x24\x56\x10\x44\x03\x24\xbe\xf8\x15\x49\x8b\x44\x03\xea\x11\xec\x35\xb3\xf9\x20\x5b\xcc\xed\x3a\x62\x11\x40\x09\x39\x62\x18\x8e\x88\x5f\xb9\x3a\x14\xff\x8b\xcd\x3f\x78\x4b\x05\x9d\x9b\xdb\x41\x02\x92\x14\xff\x0c\x36\xf9\x1e\x3a\xdd\x85\xff\x8a\x2e\x29\x4f\xe8\x94\x27\x5c\x83\x3e\x37\x18\x3b\x6d\x1e\x4b\x15\x60\xca\x8f\xc6\xfd\x3a\x55\x6d\xbd\xda\x1a\xe2\xc3\x00\xbc\x21\xd9\x33\xdf\xed\x5f\x19\x56\x3f\x18\x03\xdf\x87\x1b\x01\x8d\xbe\xa6\xfc\x9e\x7d\x4e\xf9\x7d\x14\x3d\x15\xd6\xfb\x75\xc3\x0e\x6f\xeb\xba\x93\x19\x69\xa3\xee\x04\x5f\x58\xd0\xd1\x67\xae\x3e\x61\x97\xfd\x16\x0a\x14\x9c\x9d\x86\xbf\x6f\xab\x42\x7d\x99\x83\x13\x3f\xbf\x83\x43\xb0\x17\xa6\x5d\xe9\x4e\xc8\x55\x0e\xe7\x74\x0d\x0f\x2e\x8d\x5f\xd5\xca\xe7\xf1\x64\x9d\x5b\x5e\xee\x40\xa7\xe1\xf7\xe6\x3c\x35\x01\xd7\xc0\xab\x35\xfb\xf5\x3b\xb8\x1b\xba\xb8\xd1\x1c\x59\x50\x48\xc1\xc7\xa4\xf1\x39\x6b\xf9\x9a\x11\xcb\x16\xb3\xf6\x99\xed\x66\x98\xd7\xe7\xd5\xa8\xcd\x21\xcb\x16\xe4\xf5\xf9\x06\x36\x89\x55\x05\xe6\xbd\x15\xc6\x72\x76\x15\x49\xf8\x8c\x69\xde\x88\x08\x8f\xcc\x28\x53\x29\xb8\x96\xb9\x7a\x04\x36\xe7\x1e\xdd\x8d\xe2\xe6\x46\x33\xfb\xf3\xcc\x11\x85\xbc\x0d\x3e\xa5\x24\x92\x49\xc2\x22\x97\xeb\x0f\x4b\xec\x7f\xb6\xc1\x11\x63\x33\x10\xd4\xf8\xf2\x5b\x70\xc5\x58\xa7\xcb\x3e\x6e\xbb\xfd\xb3\xe3\x83\xa3\xb7\xc7\xe3\x34\xfe\xd3\x42\x5e\x8d\xb4\x1c\x15\x8a\x8d\xb8\x6e\xa7\x6f\x3d\x22\x9e\x48\x07\x9e\x6e\xbd\xe8\xca\xc9\xad\x17\x66\xc9\x4a\x50\xeb\xf7\xaa\x84\x9d\x77\x71\xe7\x5c\x4a\xbd\x0e\x3c\x3f\x2b\x92\x04\xd7\x56\xe7\x8c\x0d\x43\xff\xf6\x3d\x61\xf9\xcb\x6b\xbb\x74\xe1\xd2\xcd\x5b\x21\xd1\x97\xd5\x8c\xb7\xe5\x80\xb4\xd7\x15\x9a\x6a\xda\x64\x6d\x1d\xca\xf1\xaa\x2b\x71\x5e\xf9\x1c\x03\x22\x7a\x61\xd6\xe5\x92\xad\x08\x40\x47\xcc\x64\x0e\x6d\x5c\xaa\xfb\x93\xe9\x08\x88\xb7\x5f\x28\x96\x8f\xad\xc2\xb1\x25\x84\x6f\xa3\x8a\xc0\x8b\x9c\xb1\x59\x97\x64\x3f\x63\xb3\x4d\x54\xb7\x1f\x03\xd6\xad\x4f\x8f\x33\xfa\x4a\xa1\x17\x98\x1b\x8b\x18\xdb\x48\xdb\x8d\xcb\x60\xb1\x3f\xb6\x84\xee\xad\x50\x1b\xba\x40\x16\x6a\xd3\x21\x92\xac\x2d\x5e\xe8\xb6\xb4\x8b\xa4\xef\x1d\x06\x91\x4b\x63\xc5\xb2\xab\xfd\x2b\x99\x5f\x72\x31\x1f\x5d\x71\xbd\x18\x21\xa5\xd4\x3e\x20\xfe\xef\xff\x09\xfe\x63\xa3\xc8\x07\x71\x6c\xf3\xdf\x0a\xc5\x66\x45\x82\x99\x69\x6a\x4c\x68\xc6\x7f\x66\xb9\x82\x2c\xcb\x4b\x2e\xe2\x21\x29\x78\xfc\x7d\xd3\x15\x23\x5d\x9c\x16\x73\xf6\xbb\x39\x28\xd0\xd3\x89\x2b\xdb\x99\xd1\x8a\xd1\xdc\xf1\xa4\x9c\xc6\x52\x61\xdf\x27\x43\xaa\xca\x11\xf8\xff\xd8\x7b\xd7\xe6\xb8\x71\x2b\x61\xf8\x7b\x7e\x05\x4a\x9b\x2a\x49\x93\xee\xb6\x3d\xc9\x26\x1b\x3f\xd9\x4c\x29\x96\x3d\x8f\x76\x7c\xd1\x2b\x79\x66\x6a\x1f\xdb\xbb\x83\x26\xd1\xdd\x88\x48\x80\x43\x80\x92\x3b\x99\xfc\xf7\xb7\x70\x0e\x00\x02\xec\x1b\xbb\x9b\xba\x79\xc8\x2f\xb6\xd8\x24\x08\x1c\x1c\x9c\xfb\x85\xa6\x39\x17\x0f\xe5\x04\xec\xaa\x1d\x70\x91\xee\x06\xc9\x86\x03\x02\xc6\x89\xd5\x03\x7b\xcf\xba\xb1\x7d\xcc\x0f\x75\xd6\x13\x6c\x7b\x6f\xa3\x7f\xe2\xd8\x9f\x56\x84\x25\x9f\xab\x9f\xb3\x21\x7e\x65\x58\xa4\x35\x5c\xfb\x40\x9e\x6d\xae\xbb\x0b\xe4\xe9\xd6\x20\x7f\x07\xe1\x39\xb7\x8a\x71\xe4\x01\xcb\xcc\xb7\x6b\x07\xbb\x47\x50\xef\x2f\x19\xdf\x8e\x84\x56\x73\x1f\xe8\x49\xa8\x5c\xa1\x3c\x10\xc0\x90\x2a\x39\x7b\x1a\xc4\xc8\xd7\x4d\xb0\x5c\xb5\x87\x44\x0a\x61\xfb\x23\xbc\x2b\x98\xb8\xd4\x34\xb9\xda\xd3\xab\xdb\x4b\x55\xbf\x32\xa9\xea\x96\x02\x81\x1c\x8a\x62\xe2\x9d\x0d\x7f\xab\x83\xbd\xf1\x90\x3f\x42\x02\x8c\xcd\xfe\xde\xd0\x62\x7f\xeb\xaa\x1b\xa9\x21\x41\xf9\xdb\xd6\xa0\x0a\xc9\x41\x85\x2c\xa0\xd8\x98\x4d\x41\x05\x38\xde\xbd\xc4\xb3\xef\xf9\xb6\x2c\xa6\xbb\x18\x98\x60\xc0\x98\xa2\xe6\xe6\xce\x98\xeb\x9a\x56\x2a\xa6\xb1\x14\x94\x2d\x91\x2c\x05\x49\x6c\xb9\x07\x90\x47\x82\x22\x06\x81\xac\x22\x88\x4c\xb4\xcb\x1a\xf5\x55\xa3\x9e\x3e\x7d\xfa\x14\x2b\xe1\xfc\xe9\x4f\x7f\x22\xb2\x84\x5e\xa4\x09\xcf\x17\x1f\x84\xa7\xfe\xfd\xd9\xb3\x11\xf9\xef\x93\x37\xaf\x21\xa3\xa1\xd0\x0a\xab\xbe\xe1\xc8\xe6\x81\xe8\x65\x35\x20\xff\x75\xf9\xee\x6d\x5d\xa3\x21\xfe\x15\x54\x73\xbf\xbc\xb8\x2f\xc8\xd3\x3f\xfe\xe1\x0f\x23\x72\xca\x4b\xc8\xe8\xe2\xcc\xf7\x9c\xf7\xa6\x16\x5a\x32\xac\xdc\x03\x35\x54\x9c\xc4\xc5\x7d\x7b\x47\x9b\x9f\x9c\xf3\xe9\x4c\xdb\x8c\x58\x83\x90\x19\x4f\x34\x26\x8f\x21\x59\x73\x2d\xed\xb1\xa5\x88\x6d\xd2\x63\xa5\x3f\x98\xdc\x80\x64\xfc\x8a\x91\x89\xfa\xb6\x94\x55\x51\x97\x79\xb4\x8d\x98\x6d\xa2\x0c\x0e\x56\xef\x95\x62\xfa\x91\x87\xad\xee\x65\x6a\x8e\x70\x1b\x46\x6a\x08\xac\x36\xbd\xb5\x2e\x75\x58\x50\xee\x93\x61\x20\x02\x30\xea\x01\xea\x6d\x3d\x29\x79\xe1\xa9\x8a\xab\x39\x52\x94\xf2\xef\x88\x02\x90\x8b\x1c\x90\x67\xc8\x15\x86\x9d\xb4\x99\xc2\x81\x77\xcb\xe5\x53\xdb\xa6\xf3\xee\xb6\xed\x64\xb3\xd8\x0e\x2c\xe3\xca\x7c\x02\x8a\xfd\xac\xf9\x72\xdd\xcb\xd8\x60\xa9\x42\x7c\xa9\xc4\xc2\xdb\xb6\xb0\x8a\x25\x97\xb6\x09\xa8\xad\xaf\x58\x8f\x81\xe5\x01\x6c\x1d\x1c\xfb\xac\x83\x92\x07\x44\x14\x6f\xad\x98\xae\x2c\x68\x20\x8a\xde\x7c\x1b\x1a\x54\xc2\x0a\x73\x5a\x5e\x19\xc5\xd5\x52\x97\x11\x39\x37\x93\xf4\xa5\x74\xb0\xd8\xf1\x35\x3a\x36\x73\x3a\x87\xcf\x5a\xc1\x0d\x3e\x72\x38\x1a\x1d\xe2\xf1\x93\x25\x51\x9a\x96\xf6\x2c\x99\xfb\x5f\x46\x95\xf5\x37\xb4\x50\x58\xf5\xd7\x48\xaa\x50\x11\x5b\x42\xee\xba\x9e\x39\x12\x44\x2d\xac\xfb\xca\xe8\x64\x08\x80\xd9\x79\x80\x07\x5e\x15\xdd\xee\xbe\x3d\xe5\x0f\xa2\x64\x77\xbe\x87\xc0\x81\x57\xd3\xa7\x9a\x36\x3c\x1b\xad\xe4\x0d\xdb\x15\x2a\x63\x8f\x4a\xc0\x58\xde\x05\xd6\x12\xce\x50\x00\x0b\xdb\x83\x3e\x5e\x39\x02\xaf\x2e\xa4\x09\xbc\xf6\x97\x29\xf0\xda\xc7\x89\x8c\x57\x84\xc3\xce\x93\x8c\xc0\xb4\x0c\x0c\x79\xd4\xa4\xde\x02\xe8\xd5\x57\x04\xc7\x1a\x1b\xdb\xba\x06\xcd\x82\xd0\xb1\x92\x59\xa5\xf1\xd5\xfa\xc7\x90\xfb\xc1\xa0\xae\x66\x38\xb0\x3c\xff\x58\xc0\x0b\x41\x0a\x40\xf6\xb1\x0f\x5b\xc4\x6b\x6f\xb2\xb1\x8f\x11\xe2\x57\x64\x80\xd8\x1b\xce\x5e\x61\xeb\x02\xd6\x6e\x30\x9f\x71\x77\x33\x63\x36\x04\x22\x90\xfb\x0c\x35\x35\x34\x02\x84\x4a\x27\xc2\x61\xe1\x9c\xf4\x5e\xcc\x8c\x89\xe2\xfb\xdb\x12\x14\x27\x47\x2f\x7c\x7a\xbc\x0b\xbb\x3b\x13\x9a\x95\x13\x9a\xb0\xe3\xd0\xc6\xc0\x8a\x19\xcb\x59\x69\x00\x65\x9f\x73\x39\xda\x33\x2a\x52\x5b\x76\x2a\x61\x25\x9c\x60\xf6\x59\xb3\xd2\x00\xf5\xc5\xe5\x19\x49\x4b\x7e\xcd\x4a\x45\x8e\xfe\x06\xe5\x04\xb1\xdc\xd4\xf1\x23\x0c\x83\xc5\x85\xdc\x87\x05\x04\x3e\xdc\x4d\xea\x07\x0c\xe5\x68\xb8\x08\xe8\x4c\xbd\x55\xae\x36\x96\xd9\x56\x15\xda\x8e\x46\xe6\x40\x00\x0b\x05\xea\x0b\x1d\xad\xd1\xb7\xe9\x8a\xd9\x43\xe3\xad\x44\xe3\xc0\x54\x91\x92\x4d\x8d\x36\x56\x06\x45\xfb\xb0\x4c\xca\xbd\x25\x37\x74\x9f\x50\x52\x3b\xab\xd6\xe5\x7e\x4c\xac\x5e\x29\xaf\x79\xea\xc4\x21\x2c\x8c\xef\x4b\xc3\x15\x54\x05\xc5\x0b\xa8\x52\x32\xe1\x60\x6a\x0a\xb6\x06\xb5\x54\x10\x9a\xe2\x56\x68\xce\xdd\x1c\xba\xc9\x24\x34\x14\xda\xa9\x0f\x2b\xe9\x84\x21\xca\x94\x9d\x57\xe3\x8c\xab\xd9\x65\xa7\x2e\x91\x65\x03\x63\x50\xe2\x42\xa4\xca\x4a\xcf\x88\x62\x42\x71\xdb\x36\x1f\xc5\x2d\x2e\xa1\xcb\x82\xd9\x06\xf7\x76\x78\x28\x24\x64\xc3\x43\x33\x7e\xf7\xd3\xdb\x7a\x1e\xb6\x58\x09\x76\x81\x4e\xd9\xf7\xa2\x88\xee\x27\x34\xcb\x94\x95\x6f\x7d\x8f\x13\xc7\x7b\x50\x42\x75\x05\x4c\x10\x2b\xb8\x41\x18\x37\x7b\x08\xc1\x41\xe2\xe5\x1b\xf2\x2c\x5d\x98\x0a\xca\x0d\x4b\xe1\x1e\x82\x66\xd6\xee\x05\x0f\x21\xcc\xc4\x41\xa4\xbb\xc7\x56\x28\xbd\xfb\xe7\xf1\xb9\x7f\x6e\x27\xa7\xa2\x6e\x31\x4a\xe1\xe6\x10\x32\xb4\xd0\xb5\x51\xd9\xb6\xb9\x8e\xd1\x38\x86\xb4\x21\x4c\xf3\xde\x5c\xc0\x38\xbf\x13\x6d\x7b\x51\x74\x63\xdd\x6d\x0e\x0a\xa2\x98\x51\xc5\x81\x42\x0d\x2d\xfc\x92\xe0\x48\x59\x1d\xd9\x9f\xf3\x45\xba\x56\xf3\x74\x60\xe7\x78\xf3\x50\x91\x54\x26\x95\x51\xbe\x6a\xb0\xd7\x01\x17\xfb\x75\x2b\xfc\xb2\xda\x27\xa5\xf2\x46\xdc\xd0\x32\x3d\x39\xdf\x29\x37\x37\x16\xce\xea\xb1\x42\xd1\xdb\xdd\x26\xe6\x3e\x1d\x43\xc1\x5b\x5b\xdb\xb0\xf7\xf6\x2d\x1d\x22\xa4\xe6\xcb\xcc\x6d\x5a\x1a\x22\xdb\xd2\x9b\xb7\xad\xc1\xae\x77\x10\xf6\x0e\xc2\xe8\x7a\x48\x0e\xc2\x33\x74\x10\x86\x9d\x7e\x23\xf2\x62\x2d\xb4\x06\xe2\x5f\x84\x8f\xe9\xb4\x26\xa9\x28\x89\x37\xf3\x79\x1b\xc2\x3f\x1e\xde\x1a\xeb\x02\x85\xc1\xd1\x5c\x90\xcb\xbe\x04\x7f\xd4\x03\xf0\x27\x01\x2c\xf7\xd0\x0a\xf1\x8a\x09\x7e\x9d\xaf\x86\x55\x6a\xd1\x31\x1d\x78\xb8\x0b\x99\xda\xde\x06\xd0\x74\x03\x1b\x08\x0c\x7c\x67\x40\xe1\xd2\x4d\x41\x3a\x2f\x68\xc2\x80\xbe\x79\xf1\xa7\x13\x27\xc1\x9e\x08\x40\x3a\x42\x02\x02\x88\x00\xd0\x39\xdf\x07\x1b\x48\x67\x18\x61\xae\x5a\xe3\xd9\x77\xa4\x66\x45\x51\x1c\xd5\x21\x82\x4a\x66\x2c\xa7\xf0\xdf\x57\x0e\x04\x86\x36\x1a\xe5\x41\x33\x2c\x01\xc7\xca\x5c\x11\x39\x19\x44\x91\xae\x07\xd7\xcf\x0e\xf6\x73\x36\x90\xee\xfc\x94\xc4\x9d\xa3\xf3\xbd\x9d\x3d\xa4\x09\xb0\xf3\xc8\xb7\x63\xce\x50\xdd\x03\xd3\xd5\xbd\xf7\x11\x14\xc0\x3f\x10\xc2\x0f\x06\x38\x5d\x3b\x71\x77\x75\xde\x0e\xbc\xd7\xe0\x11\x08\x7f\xbd\xf3\xf6\x4b\x74\xde\x06\x8c\xd1\x11\xba\x25\x8e\xdc\xd0\x25\xe0\xbc\xb9\x63\xe6\x94\x1a\xab\xc3\x38\x57\xae\xf3\xe3\xca\x32\x0e\x5d\x3a\x1c\x8d\x0e\x0f\x9d\x77\xd7\xe2\x7d\xa5\x27\xc3\xff\x20\x4c\x24\x32\x75\x0d\x7c\x27\xbc\x54\x1a\xc4\xbd\xda\xdc\x16\xce\x25\x77\xdf\x0a\xc3\x9f\x60\xec\x2e\xb6\x7a\x6f\xda\xe2\x4a\x12\xbe\xba\x05\x21\xa6\x16\x5d\x7c\xe1\x43\x0b\x22\x5f\xcf\xda\xca\x30\xee\x77\x45\x32\x9e\x73\xdb\xff\xde\x1c\x74\xa6\xb4\x22\x47\x78\x73\x94\x14\xd5\xc0\x3e\x30\xca\x59\x2e\xcb\xf9\xc0\x3f\x64\x7e\x8c\xde\xb2\x4f\x1c\x63\xbf\x93\xaa\x2c\x99\xd0\xd9\xfc\x4b\x96\x80\x1c\x10\x1f\x88\x00\xe4\xf7\x78\x9f\x8a\x23\xf5\x15\xa3\x56\xed\xf1\x05\xb3\x79\xd0\x5f\xc0\x57\xa3\x55\x83\xda\x2f\x6e\xee\x32\x71\x4d\xae\x69\xb9\x65\xe5\xf8\x65\x57\x87\x32\x4f\xca\xaf\xb9\x92\x3b\xbb\x45\x83\x81\x42\xf0\x5c\x7a\x23\xb4\x39\x6c\xb2\xd2\x45\xa5\x2d\x45\x77\x27\xd0\x55\x19\xf7\x27\xaf\x21\x1c\x3e\xdb\xa5\x8b\x52\x7c\x15\x54\x6b\x56\x8a\xe7\xe4\x7f\x8e\x3e\xfe\xee\x97\xe1\xf1\x37\x47\x47\x1f\x9e\x0e\xff\xfc\xe9\x77\x47\x1f\x47\xf0\x9f\xaf\x8e\xbf\x39\xfe\xc5\xfd\xf1\xbb\xe3\xe3\xa3\xa3\x0f\xdf\xbd\xf9\xf6\xfd\xf9\xcb\x4f\xfc\xf8\x97\x0f\xa2\xca\xaf\xf0\xaf\x5f\x8e\x3e\xb0\x97\x9f\x5a\x0e\x72\x7c\xfc\xcd\x6f\xf7\x9e\x3a\x15\xf3\x77\x7b\x92\x42\xbc\x86\x1d\xb2\xe4\x78\xc4\x4e\xd0\xaf\xd1\x56\x82\x0b\x3d\x94\xe5\x10\x87\x7e\x0e\xc5\x82\xf7\xfc\x80\x43\xaf\xae\xcf\x7f\x2d\x06\xd4\xe5\xf6\x9d\x50\x7f\xcf\x07\x1c\x5c\x9f\xa7\xbc\x83\x34\x63\x37\x52\x9c\x26\xa3\x59\x5e\xc8\x92\x96\x73\x92\x5a\x6b\xe6\x7c\x49\x05\xa2\xa0\x04\xd1\xde\x25\x85\x61\x1e\x29\x2f\xef\x21\xd3\x78\xef\x8a\x42\x2c\xe5\x55\xde\x51\x3d\x21\x18\x2b\xdc\x8c\x1b\xa8\xbc\x6f\xab\xf6\xbb\x90\x22\xfb\x98\x75\x68\x8c\x69\x72\x85\x1a\x94\xdf\x2d\x94\x1b\x83\xd4\xfa\x83\x03\x1b\x12\x91\x33\x2a\xbc\x61\x1f\x62\x5b\x64\xca\xcc\x56\xba\x87\x71\xec\xc8\x08\x8f\x9e\x76\x1b\x40\x58\x77\xa4\x92\x25\x79\x03\x02\xd0\xbd\xee\x3e\xe9\xa4\x56\x08\xff\x07\x7b\x6d\xa4\xbe\x8e\x32\x51\xdd\x70\x2e\x80\x48\x4b\xd0\x37\x6d\x5d\xaf\x09\x34\xd9\xaa\x23\xc4\x22\xc9\x02\x36\xf2\xa5\x3b\x96\xce\x7f\x6b\xb6\xd3\x8c\x8a\xb2\x29\x18\xa6\x33\x85\x71\x2b\x3c\x81\x3e\x50\xa0\x9b\xc2\x76\xf8\x2d\x7c\x1f\x34\xea\xaf\x94\xf9\x92\x14\xf1\x33\xf5\x87\xb0\x4d\xd6\x18\x71\xc2\x75\xd7\x8e\x35\x6a\xf3\xcb\xa5\x5f\x59\x6d\xcf\x80\x94\x65\xa7\x7e\xaa\x0a\x94\x14\xfb\x15\x2b\x6a\xcb\x09\x44\x56\x04\xfd\x7a\x5c\x4b\x9a\x05\x44\x15\x3c\x8b\x31\xd5\x75\x9e\xf0\x0b\xaf\x84\x0d\x28\xbc\x77\xb4\x7b\x74\xd2\xc7\x9e\x32\x47\x57\x92\x46\x27\xf2\x45\xe7\x52\x85\x8f\xdc\xdc\xbf\xdf\x6b\x1d\x04\x1a\xb1\xd5\xb0\x47\x46\x1c\x10\x4a\x7d\x5b\x34\x47\x13\x5c\xd4\xc1\x7b\x6f\x51\xb2\xec\x36\x99\x27\xb6\xc2\x13\x8f\x3a\xf8\xe0\xb0\x78\x34\x20\xb7\x6a\xe8\xbb\x57\xd7\x76\x09\x32\x66\x13\x0c\x7c\xc2\x77\xc0\x60\x60\x33\xc2\x52\x96\x31\xcd\x82\xb6\xf3\x05\x36\xca\x2e\x59\x2e\xaf\x6d\x9b\xd6\xef\x95\x75\x9b\xf3\xc9\x73\x42\x8f\xa3\xbc\x63\x65\xfb\x20\x33\x96\x62\x9a\x58\xd0\x5b\xb0\xac\x84\x1a\x90\xf1\xb1\x0b\x6b\xb5\x5d\x30\x4b\xb0\xad\xd9\x26\x5f\x60\xce\x2a\x99\x01\x00\xd4\xaa\x2a\x65\x4e\x94\xa0\x85\x9a\x49\x0d\x96\x13\x5a\xd0\x84\xeb\x39\xd1\x25\x4d\xae\xcc\x23\xe0\x4e\x85\xcf\x0d\x48\x72\x6c\xa3\xdc\x43\xf0\xc5\x99\x6b\x7a\x56\xca\x6a\x3a\x83\x54\x2a\x7c\x2a\xc9\xa8\x72\xab\x5f\xfa\xbe\x55\xe5\x15\x49\xe7\x82\xe6\x3c\xf1\x2d\x44\x4a\x79\xcd\x15\x97\xd6\xe1\xe5\xc6\x3d\xf7\xcd\x18\xd0\x89\xf6\x22\xa3\x3c\x27\x47\x8a\x31\xf2\xd2\xa1\x04\xfe\x72\x89\x02\x25\x1a\x14\xcb\x38\xb6\xce\xd6\x7d\xb4\xf5\x07\xcc\x9d\x9a\x02\xfb\x88\x05\x94\x09\xcc\xcc\x97\x7e\xf4\xd8\x6f\xd7\xf2\x39\xc9\x12\xe2\xde\x5c\x27\x20\x26\x52\x19\x04\xc6\x9c\x9c\x9f\xa9\x50\xcd\xb5\xdd\x14\x71\x24\xf8\x21\x93\x62\x1a\xd6\xbf\xab\x31\xd3\xd0\x7a\x01\x6d\x31\xaf\x79\x5a\xd1\x0c\xa9\xbc\x9d\xcc\x8b\xcb\x33\x7c\x9d\x4f\x67\x7a\x78\xc3\xc0\x08\x8a\xcc\xb0\x3e\x33\xee\xa3\x7c\x21\xe0\x96\x2b\xe0\x0a\xda\x1a\xdb\xd0\xa0\x0c\xad\x27\xe9\x1c\xea\xef\xda\x18\xcf\x28\x26\xc7\x55\xab\xc7\x21\x96\x41\x1c\xa6\x77\xe2\xfb\x24\x1a\xc9\x08\xac\xc4\x06\xc4\x80\xa9\x8b\x73\x83\xa6\x8f\x75\xeb\x0d\x7f\x5b\xd7\x0d\x20\x41\x2e\xde\xbd\x51\xf0\xbd\xc9\xb3\xd7\x35\x9a\xbc\x67\x79\x91\x51\xdd\x4d\x84\xc9\xc1\x8f\x81\x15\x3c\xf0\x21\x9b\xe3\x48\x45\x3a\xa4\x99\xc1\xc8\xf3\x1f\x5e\xd8\x04\x37\x3c\x60\x51\x14\xdb\xfb\xba\x55\xa9\xeb\x52\x6d\x84\xa5\xa5\x47\x0b\x4a\xaa\x8d\x59\x0a\xc4\xc8\x7e\x19\x4c\x15\x37\x02\x5b\x05\x9b\x3f\xce\x7f\x78\x31\x20\x7c\xc4\x46\xee\x2f\xff\xa8\xa3\x86\x5a\x4e\x31\xcf\xc1\x27\xd2\x00\x3e\xc3\x54\x42\x1b\x70\xf8\xee\x4f\x7f\x31\x93\x34\xbf\xfe\x75\xf8\x97\xa0\xa5\xd1\x5f\x7f\x32\xc4\xb5\x34\x0f\xc4\x77\xc3\x30\x73\xa0\x7b\xe6\xaf\x9f\xce\x65\x7a\x59\xb0\x64\x84\xcb\x52\x3f\x61\xb0\x00\x61\x42\x1b\x91\xfb\x5c\x42\x80\x19\x4f\x11\xcb\xe1\xdb\x25\xfb\xbb\xf3\x13\xd8\xae\xa9\x96\x90\x24\x54\x33\x01\x0c\xc0\xe5\x1b\x0b\xa9\xf1\x75\xec\xb7\x0a\xf3\x3f\x9a\x84\x1d\x50\xb5\x94\x70\xcc\x91\x94\x9c\x08\xc2\x3e\x73\x05\xe5\x67\x70\xad\x00\x0e\x6a\x63\xd8\x1d\x4f\x33\xc3\x1a\x08\xfb\x6a\x43\xd0\x82\xd5\xcc\xed\x2b\x21\xf5\x57\x7e\xfb\x5d\x7c\x22\xf6\x33\x27\xf4\x5a\xf2\x94\x54\xd0\x3e\xcb\x9c\x40\x01\x06\xee\xba\x83\xe1\x78\x4e\x72\xae\x34\xbd\x62\x23\x72\x69\x78\x56\x18\x68\x80\xd0\x13\x04\x9a\xd1\xb0\x94\x54\x42\xf3\x0c\x7e\xad\xc7\x31\x53\x0e\x79\xd9\xd9\x84\xa8\x2a\x81\x1e\xbd\x25\x1b\x3a\xee\x68\x9f\x5a\xa0\x31\xf5\x5a\x06\x7e\xb3\x67\x14\xd5\xa8\x22\x85\x57\xb1\xe3\xaf\xb0\xe8\xb5\x10\x5e\x6d\xe6\x29\x45\x52\x73\x44\x00\x26\x74\xd9\x36\x4c\x30\x73\x71\x40\xa8\xd1\x59\xbf\x81\x60\x09\x53\x8a\x96\x73\x6c\x8a\xca\x7d\xef\x46\x1b\xf9\x0a\x9c\x3a\xa7\xa2\x82\x01\x4a\x86\x2d\x76\xab\x04\xa0\x43\xc9\xb8\x94\x57\x4c\xf8\x4c\x02\xb3\x8b\x71\x5c\x75\x1d\x3c\x8a\xdd\xa7\x49\x32\xa3\x62\xca\xea\x64\xf2\x9c\xa6\x00\xfb\xef\xbc\xa4\xe5\xd6\x63\x20\x40\x27\x46\x60\xe1\x1a\x40\x31\x36\xfc\xc9\x7b\x3f\x3e\x0a\x5f\x0e\x77\x50\xbb\x27\xcc\x92\x78\xb6\x13\x4d\x24\xdd\xd8\xc3\xf7\xb7\x84\x0f\x41\xa0\xb8\xc7\x18\xee\x9c\x69\x9a\x52\x4d\x3b\x8b\xe3\x7e\x43\x7d\xf3\x4f\x1b\xdb\x01\xe8\x10\xc4\x7c\x58\x1e\xeb\x44\x49\x59\xf0\xb0\xbc\x00\x50\x83\x99\xdb\x7d\x28\x4f\xa5\x0d\x5e\x5b\xdf\x23\x86\x67\x83\xac\x46\xb3\x4c\xde\xd8\x82\x75\x6e\x34\x24\x59\x2c\x25\x69\x05\x62\x5f\x4d\xd2\xf6\xf1\x8d\x77\xe2\x3a\x31\x1b\xdd\x19\x94\xdf\xd7\x21\x00\x49\x1c\xa2\xbd\x54\x40\x43\x5e\xc7\x84\xe6\xd8\x4a\xdf\xd5\x83\xb0\xc0\xaf\x04\x1e\xd5\xc6\x36\xc0\x3e\x4d\x99\x56\x75\x70\x25\x72\x13\x43\x22\x2d\x2f\xb7\xb6\x04\x60\x35\x76\x6b\xac\x3a\xbe\x5c\x52\xc4\x8d\x53\xd2\x72\x0b\xc3\xbf\xee\x7d\x67\xba\xf3\x21\x61\x17\xdc\x37\x32\xdd\xdf\x19\xd5\x68\xe7\x5a\x0f\x5c\x27\x9d\x60\x02\x92\x02\x5b\x0f\x3e\x00\xae\x79\x15\x55\xcb\x40\x16\x30\xa3\xd7\xbb\x5b\x55\x6b\xc9\x74\xe8\x7b\xb6\xc1\xe7\x86\xf0\xb9\xe1\xb3\x7d\xed\xd7\xfb\x07\x2f\xba\x6b\xcf\x20\xc6\x78\x42\x1d\x38\x2c\x0c\x69\xbd\xec\xc4\x9f\xd0\x28\xa6\xe4\xc7\xb5\xfc\xd7\x06\x68\xf8\xa0\x18\x9b\x56\xcb\xb8\xa1\x9a\xcf\xc9\x57\x91\xc4\x65\x25\x5b\xaf\x0d\x63\x32\xd3\x91\x53\x8f\x47\x76\xe3\x5d\x55\xaf\xf8\xf1\xe3\xc6\x60\x20\xea\x2d\xd7\x1a\x5d\xd2\x94\x17\xbf\x8d\xa8\x0c\xed\xf8\x7d\xaa\xaa\x41\xe6\x52\x66\x99\x6b\xe1\x8e\x1a\x72\x23\xc4\x09\xda\x07\xa1\xd3\x64\xe0\xcd\x10\x5e\xde\x17\xec\xc6\x0b\x76\x54\x61\xd5\x52\xe7\xb2\x07\x53\x89\x8b\x3b\x5b\x36\xde\x08\x7a\xe0\xc3\xef\x27\x62\x8e\x93\x3f\x0d\x80\x8b\x06\x06\x32\x35\x9f\x32\x3a\x80\xa0\xe3\xcc\x48\x21\xc1\x06\xf8\xef\x34\x58\x9a\x96\xc1\x53\x17\x6c\x62\x2d\x03\xe1\xad\x76\xef\x22\x3f\x8c\x5e\x1c\xd5\x51\x92\x56\x4c\x0e\x2a\x65\x5a\xa8\x47\x8f\xc4\x51\x45\x8d\xd1\xa2\x82\x3d\xcb\x66\xb0\x67\xe8\x41\x87\xc1\x07\xdd\x85\x1f\x40\x6d\x18\x2e\x76\x8f\x29\xae\x87\xd9\xa1\x63\x78\xf3\xea\x2e\x8a\x01\x02\x39\x21\x8a\xab\x0b\x77\x70\x44\x76\x4e\xce\xcf\x60\x60\xa7\x61\x4e\xe1\x0f\x27\x79\x78\xbf\xe6\x98\x19\xba\x50\x57\xb4\x02\x8c\x0c\xdf\x5d\x12\xe6\x56\x1f\xce\xef\xa0\x7d\x93\x75\x17\xb9\xf4\x65\xc3\xb8\x4e\xce\xcf\xf0\x8b\x23\xe8\xe0\x4b\xc5\xdc\xca\x84\x7a\xc6\xcb\x74\x58\xd0\x52\xcf\xd1\xc8\x32\x88\xbe\xe6\x73\x38\x3b\x00\x47\xa7\x9e\xec\x7d\x3a\xbe\x85\x57\xb4\x47\x00\x3e\xe7\x27\xb2\x8e\xbe\x95\x3b\xf3\xd0\x20\xb2\x6f\x46\xa9\xbb\x22\x88\x84\x1d\x7f\x9c\x8d\xe5\x51\x40\x24\xa2\xd1\xb7\x25\x3f\x18\xf2\xaf\xe2\xe8\x1b\x14\x07\x40\xd6\xb7\x76\x31\x19\xa6\xb9\x79\xd9\x12\x8c\x14\x66\xa4\x01\xe1\x13\xc3\x88\xa5\x18\xda\xe4\x7a\x6f\xc4\xb7\xf2\xa9\x0b\x53\x45\x83\x03\x1c\xdd\xe0\x2b\xe1\xab\xfe\x94\x93\x23\x21\x05\x9e\x7c\x7c\xf6\x18\xe3\x73\x57\x58\xa0\xe1\x11\xcf\xcd\x43\xbb\x44\x40\x69\x9c\x98\xc0\x45\x6a\xb6\x1d\xd8\x1e\x58\x2c\x54\x95\x24\x8c\x79\x1b\x57\xd8\xd7\xbe\xa6\x4c\x76\xca\x39\xd5\xc9\x8c\x29\xa2\x24\xd4\x47\x55\x9a\x66\x59\x6d\x5b\xb2\x80\x92\x20\xe9\x38\x3b\x7f\x20\x00\x45\xd9\xe8\xd6\xcc\x56\x64\xd4\xda\x72\x26\x95\x48\x30\x02\x8c\xeb\x79\xd8\x19\x35\x12\xf6\x40\xa1\x56\x68\x72\xe2\x13\xb4\x2e\x07\x8a\xb1\x07\x26\x90\xd6\x39\x12\xd3\x99\xeb\x3d\x0e\xba\x9a\x2d\x02\x68\xe8\xe8\x98\x26\x57\x37\xb4\x4c\x15\x24\xda\x53\xcd\xb1\x17\xe3\x00\xa5\x8e\x50\x88\x10\x87\x87\xa1\xa3\x96\x8b\xa6\x7c\x13\x4e\xe4\x28\x98\xf5\x82\xdc\x73\xec\xe5\x1d\xc5\x7c\x97\xbe\x7a\x62\x84\x56\x5a\xe6\x54\xf3\x04\x4c\x51\x7c\x12\x78\x17\x72\xdf\xdd\xc2\x3b\x89\x91\x0b\x00\x5f\xb1\x0b\xb7\x78\xb0\x5c\x02\x5a\x32\xf1\x60\xae\x6e\x99\xcb\xe7\x15\xb0\x26\xfb\xa1\xf7\xe8\xaf\x06\x2f\x58\xc9\x18\xe1\xb9\x11\x60\x29\x34\xd0\x9e\xf8\x9c\x7f\xe7\x72\x59\x07\x14\x23\xa5\xff\x08\x7e\xae\xe0\x29\xb4\xa7\x65\x99\xbc\x51\x44\xdf\x48\xaf\xf4\xd7\xde\x04\x9b\xdc\x3e\x68\x88\x74\xf6\x1d\x73\xd4\x0c\x58\x82\x73\x34\x30\xb8\x73\xc3\xb2\xcc\xfc\xbb\xee\x34\xa9\xd1\xb2\x19\xf1\xa9\xc0\xf4\x67\xae\x9c\x05\xc6\xc6\xb3\x1f\xa5\xa5\x2c\x0a\x6b\x4b\xcd\x8f\x9b\x33\x02\xd7\x65\x79\xcd\x14\x78\xef\x5d\x84\xbc\x01\xc3\x94\x09\x56\x52\x0d\x8e\x10\x5b\xd4\x11\x08\x4a\xf3\x13\xd1\x36\x2e\x9d\x5c\x08\x2e\x74\x04\xad\x07\x8f\xfd\x15\x2c\x16\x06\x52\x0e\x61\xd4\x08\x0b\xe7\x1c\x93\xef\x15\x2e\xc8\x9f\x59\x1f\xcd\xdf\x4a\x67\x40\xb3\xaf\x55\x1b\x46\xe4\xe8\x24\x2b\x66\xc1\xa8\xa1\x94\xee\xb3\xa5\xe2\x99\x46\xdf\x7b\x51\x4a\xa5\xde\xba\x57\xb6\xf9\x74\x2f\xc1\xaf\x1b\xa6\x97\xe0\x7b\x09\x7e\x87\xab\x97\xe0\x9b\x57\x2f\xc1\x37\x2f\x4f\xe0\x6f\x05\x2c\x5e\xbc\x89\x79\xc9\x3a\x00\x91\xb7\x52\x5b\x17\x2b\x88\x78\x74\xa5\xa5\x88\x02\x23\xb9\xa1\xf3\x91\x60\xda\x56\xd4\x71\x46\xc1\x0b\x37\xde\xb7\xa5\x11\x76\xac\x6c\x1c\x1c\x56\x77\xf2\x5d\x2d\x9f\xe0\x2b\x5a\x22\xff\xad\x3d\xbe\x70\xff\x50\x59\x7f\xa7\xf9\x1d\xf2\xeb\xc2\x01\x12\x36\x22\x97\xcc\xb5\x30\x89\x3e\xbe\x58\x35\x25\x65\x9a\xf2\x4c\xd5\x0c\xf7\xfd\x0a\x06\xbe\x3b\x43\x7d\x48\x78\xe6\x73\x22\xba\xd5\x12\xeb\x24\xa7\x20\xf0\x2c\x8c\xe8\xac\x1f\x58\xe5\x72\x38\x9b\x90\x0b\x96\xc8\x6b\x56\x22\x6c\x5f\x7e\x2e\xa8\x30\x9a\xd0\x2b\xca\x33\x03\x59\x07\xe1\xda\xb8\x0a\xed\xbc\x62\x17\x5f\x60\xd1\xf6\x68\x6d\xb7\x31\xb7\x93\xb2\x05\x77\xcc\xf3\x36\x90\xa8\x28\xd9\x35\x97\x95\x72\x71\xa7\x95\x46\xa6\xa4\xb4\xd5\x3d\x66\x7c\xea\xbb\x6e\xfa\x70\xb0\x92\x25\xb2\x4c\x6b\xf4\x55\x9a\xea\x4a\xc5\xa9\xec\x09\xfa\xd4\xba\x73\xa7\x78\x38\x3e\x20\x29\xad\x4b\x79\x06\x00\xd6\xc1\x38\xcd\x18\x20\xd0\x56\x14\xd4\xd4\x08\x28\x60\x48\xfd\x30\x4b\x88\x0b\xdc\x50\x83\x44\x23\xf7\x13\xbe\x3c\xa8\x71\xa7\x0e\xce\xe0\xaa\x8e\x2e\xae\x23\x1d\x38\xe8\x27\xd4\x10\x94\x40\x11\xf7\xe4\x04\xd0\xd7\x89\xf5\xa7\xa8\xf9\x5f\xd8\x6f\x9d\x64\x46\x1b\x41\xf2\x14\x90\x94\x25\x51\x14\x3c\xcf\x2b\x6d\xce\xc1\x88\x9c\x61\xde\x2d\xe8\x34\x56\x55\x9e\xd4\x39\x9f\xac\x54\x3b\xc7\x3e\x84\x57\x77\xce\x37\xd2\x9d\x03\x8e\x34\xb7\xfa\x22\xdc\xb4\xb0\x9a\x9e\x14\x0c\x63\x98\xcc\xfe\xba\x18\xa7\xe8\xe9\x9d\x4b\x66\xc5\x57\x87\x47\x0b\xaf\xee\xd4\x20\xbc\x3a\xd1\x62\xf0\xea\xf2\xec\xe3\xd5\x95\x5c\x88\xd7\xa2\x74\x08\x94\x1d\x2c\x73\x91\x94\x18\x61\x47\x21\xd3\xd1\x12\x0a\xe0\x63\xee\x64\x6a\x03\xea\x62\xfb\x21\xa6\xd9\x9f\x99\xe1\xaf\x5c\xf0\xaa\xe7\x42\xf4\x9a\xf2\x0c\x32\x26\xb8\x50\x3c\x65\xd8\x15\xc8\x52\x8e\xce\xd6\xdb\xa9\x40\xda\x08\x76\x37\xc4\x73\x98\xd3\x62\x78\xc5\xe6\x1d\x6d\x77\x67\x98\xb8\x38\x51\x84\x44\x4e\x8b\xbd\x47\xc7\x64\x92\xce\x79\xd2\xe1\x6b\x4c\x52\xc1\x9b\x63\x2b\x1a\xb9\xbc\x99\x3a\x67\x27\x91\x79\x51\x69\x16\x88\x50\x56\xd8\xd9\x5a\xae\x88\x4a\x35\x3e\xc9\xa9\xa0\x53\x36\xf4\xc3\x0e\x6b\x76\xb1\x73\xeb\xf0\xf0\xea\x98\x0c\x76\x5b\x53\x30\xbc\x1e\x5d\x3a\x4d\x7c\x75\x96\xd0\x4b\x6e\x25\xa9\x97\x74\x9f\xd8\x4b\x6e\x3f\xb9\x97\xf8\x62\x0b\xdd\x9f\xfb\x0b\x57\xfc\xa1\x71\xf2\xad\xaa\xb4\xee\xe4\x47\x55\x86\xfd\x38\x5c\x11\x99\x73\xad\x99\x0b\xaa\xf6\x27\x19\x82\x60\xc2\xe4\x77\x4b\x73\xc0\x7b\x85\x91\xd3\xec\xb3\x6f\xaf\x1a\x28\xf4\x60\x6d\xbb\xe1\x0a\x55\x70\x41\x78\x5e\x60\xb3\x07\xa0\x1d\x43\x27\x29\x5b\xef\x90\x9f\x49\x02\xd1\x9b\x84\x7d\x06\x1f\x19\x7e\xac\x27\x53\x3d\x99\xea\xc9\xd4\x6d\x90\x29\xac\x09\xb0\x7f\x89\x8d\x88\x3c\xb9\x41\x6d\x11\x4a\x3a\x66\x19\xf9\xb9\x62\xe5\x9c\xc8\x6b\x16\x64\x66\x41\xa3\x5a\x23\xc8\x62\x6e\x93\xf5\x94\xef\x2b\xc9\x3e\x50\xb3\x04\xe8\x0b\x2f\x3f\x17\x25\xc3\xda\x61\x9d\x33\x85\xe6\x07\xe2\x12\xa0\xb8\x0b\x7e\x67\x42\x83\x16\x86\x55\x47\x26\x2e\x5a\x32\x72\xf2\xf6\xb4\x4b\xcb\xe3\x43\x57\xfa\x4f\xd6\x80\x08\x41\xe9\x7f\x01\xbe\xe7\x23\xa3\xbd\x73\x99\x5c\xb1\xf9\xc0\x26\x20\xd8\x2e\xe5\xee\x61\xcc\xe5\x89\x5b\x25\xee\x57\x62\x3b\xbe\x1e\x81\xbd\x60\xbf\xd6\x78\xf1\x58\x0e\xb8\x0f\xd4\xfe\xb0\x77\x0b\xbd\xf0\x5a\xd5\x4e\x0f\xb1\x15\xba\x6f\xb9\x3a\x03\x1e\x41\xa1\xb6\x02\x50\xd8\x07\x6b\x16\x20\xd0\xe5\x09\xb7\xf1\x96\x80\xe5\x8f\x60\x94\xc9\x7e\xc5\xe6\x87\xca\x56\xa1\x93\x42\xcd\x78\xe1\xfa\xab\x03\x9d\xb4\xa7\x92\xfc\x00\x29\x23\x6e\x08\xa4\x88\x67\x62\x40\xde\x4a\x6d\xfe\x79\x09\x39\x70\x70\x8e\x4f\x25\x53\x6f\xa5\x86\x3b\x0f\x1a\xdc\xb8\xb4\x5b\x02\xb6\x0d\xcb\xb1\x66\x6b\xc8\xf6\x84\xaa\x2f\x2e\x33\x0a\x80\x6a\x83\xc5\xfd\xc6\x70\x45\xce\x04\x91\xa5\x83\xaa\x76\x2d\x63\x95\x1d\xc2\x39\xf6\x83\x60\xab\x25\x63\xd8\xcd\x90\x65\xb4\x17\x6b\x86\xf3\xe1\x54\xdc\xfd\x02\xbe\x44\x08\x8d\xf3\xe9\x5c\xd0\xb6\x94\x6a\x36\xe5\x09\xc9\x59\x39\x85\x8a\x85\xc9\xac\xeb\x2d\xee\x8a\x2f\xe2\xd5\x21\x77\xc4\xab\x53\x3c\x04\x11\xe5\x35\x24\xea\xdd\x8e\xf8\x83\x63\x23\xbb\xce\x69\x61\x50\xf0\x9f\x86\x2b\x03\x16\xfc\x0b\xda\x22\xab\x11\x39\x21\x8a\x8b\x69\xc6\xa2\xdf\xac\x0b\x2e\x1c\xc6\x8c\x60\xd4\xdb\x9f\x2b\x7e\x4d\x33\x86\x89\xb5\x54\xf8\xa6\x85\x72\xb2\x20\x74\x0d\x6c\x6f\x64\x43\x97\xbd\x51\xf7\xe0\x8a\xcd\x0f\x06\x0b\x68\x7b\x70\x26\x0e\xea\xe2\xa7\x11\xa2\x7a\xe1\x02\xfc\x31\x07\xf0\xdb\xc1\xdd\xc8\x69\x8f\x40\x8d\xed\x0c\x27\xad\x97\xf4\x45\x46\xd1\x2f\xdf\xad\x47\xbb\x39\xfa\xb2\x96\x6c\x97\xc1\x33\x75\x34\x83\x4d\xda\xee\xdc\xf5\x0b\x45\x43\xba\x4a\xa1\xeb\x00\xfe\x38\xaf\x7d\x1a\x81\xb8\x6b\x49\x13\x1d\x28\x5f\xec\x8a\xca\x44\xb5\xc8\xea\x88\xf1\x15\x10\xff\x01\x9c\xf8\x72\x42\x5e\xd5\xad\xd6\xc0\x5d\x6a\xc4\x2a\x5b\x66\x46\x48\x4d\xb8\x48\xb2\xca\xfa\xef\xe1\x55\x74\xfa\x3e\x2c\xf0\x76\x8e\xd8\xf5\xb0\x0e\xa3\x5d\x8c\xfb\x42\xed\x80\x66\xc4\x2f\x04\x80\xfb\x18\x57\x84\xf6\x7d\x42\x6b\xb2\x53\x96\x74\xdc\x22\x30\x89\xe5\xcb\x57\x7c\x5c\x32\xf2\x62\x46\x85\x60\x59\x50\x7f\xd1\xda\x4a\xa9\xd6\x34\x99\x61\x98\x09\x25\xe6\x1c\x67\x4c\x1f\x2a\x32\x93\xe0\x53\x4c\x66\x5c\xf8\x8a\x64\xc2\xd7\x21\xad\x4b\x31\xdc\x43\x53\xcd\x7d\x15\xa4\x0e\xfb\x31\x1e\xda\x86\x8c\x16\xef\xc2\x4e\x88\x71\x9f\xc6\xba\xb5\x4f\xf3\x99\xba\xc7\x95\x3d\xf3\x00\x79\xe4\xcb\xd0\x34\x10\x9e\x5d\xdf\xe9\x31\xf7\xf6\x6e\x2e\x26\xac\x2c\x71\x87\xc6\xcc\xbe\x40\xf8\x84\x54\x22\x08\x1e\xc7\xf6\x6f\x33\x79\x43\x52\x49\x6e\x18\x44\x0b\x19\x01\x02\xc2\xcf\x95\x13\x3d\x82\x99\x42\xa6\x4a\x22\xf3\xa2\x94\x39\xf7\xe1\xdb\x16\x3d\xee\xad\xd4\x60\x56\xed\xdc\xad\x21\xde\xc5\xac\x12\x71\x9b\xf4\x57\x2f\x88\xa6\xe5\x94\x69\xf3\x0d\x22\xaa\x7c\xcc\xf6\xac\xa8\x78\xdf\xfd\x7c\x3a\xed\x9f\x77\xe8\x1b\xe8\x45\x50\xdb\xd0\x19\x8f\x5c\xb8\xb7\x20\xd0\x00\xb2\x60\x26\xb2\x4c\x5c\x58\xa3\xeb\xc9\x87\x0d\x9c\x0c\x16\xfe\x60\x19\x67\x25\xb4\xda\xb3\x9f\xd2\x3e\x9d\xf5\x10\x15\x7e\xfc\xf1\x6d\x37\x0d\x91\x0e\xeb\xf1\x56\x61\xdd\x8d\x2c\xb3\xf4\x86\xa7\x2e\xa8\xeb\xc8\x3c\x7c\xbc\x1f\x04\xee\xb1\x3f\xd2\xde\x27\xfd\xe6\x86\xa7\x1d\x01\x1f\x86\x8a\x81\xee\x52\xfa\x0c\xd0\x09\x40\x9d\xa7\x4c\x68\x43\x2c\x4b\x45\x8e\xe0\x8d\x63\xf2\x92\x63\xf1\x2a\x78\x1f\x42\xd1\xf2\x31\x17\x75\x61\xb4\x7a\x53\x0d\xbb\x34\x74\xc3\xa9\xf7\x8a\x69\x2c\x3b\x04\x59\xe6\x52\xcf\x88\xe2\x79\x95\x69\x2a\x98\xac\x54\x36\xdf\x13\xb5\x1f\xeb\xc6\x4e\x32\xf6\x19\x4f\xf8\xfe\x42\x8f\x1f\x2a\x16\x7e\x20\xb9\xaa\xae\x35\xb8\x20\xfd\xd4\xb9\x89\xe9\x13\x2f\x09\xf9\xda\x59\xec\x33\x4b\x6c\x59\x85\x22\xab\xa6\x7c\xa7\x3a\x3a\x7d\x07\xf1\x9d\xde\x6e\xd7\x41\xbc\x6e\x94\x5c\x29\x56\xd7\xfc\xb5\x45\xee\xee\x4b\x2e\xe9\xbe\xe1\xf7\xfd\xca\x97\xef\x97\x37\xfb\x4e\x59\xc1\x44\x0a\x4d\x87\x5e\xd5\xe7\x0f\x27\x7f\x6f\xb0\xb7\xcd\x7e\xba\xe1\x15\xae\x73\x50\xc4\xa5\x83\x00\xc9\x99\xcc\x52\x45\xd8\x67\x5d\x52\xc3\x0e\x72\x43\xf8\xfd\x3b\x13\x42\xc5\xbe\xa4\xfd\x4b\x69\x59\x4b\xee\x48\x02\x4d\xbf\x50\x09\x54\x75\xda\xcb\xfe\x50\x85\x1d\xec\x6b\xe8\x45\xb7\x3b\x6e\x6b\x8f\x0c\xd4\x52\x07\x15\x97\x44\x58\xd2\x7e\xbe\x4e\xa9\x5a\xac\xed\xb3\x63\x1b\x7a\xb5\xa4\x29\x75\x63\x56\xf7\x78\x58\xfb\x9e\xf4\x8f\xab\x27\xfd\x04\x2a\xa4\xee\xdf\x36\xc4\x8e\xd3\xb0\xd9\xd9\x9b\x56\x6c\x6d\x63\xa3\xb3\x27\x2a\xe0\xc9\x66\xdf\xdc\x40\xb6\xd2\x18\x51\x66\x37\xea\xb4\xc8\x4a\x88\xdd\xa8\xf9\x7d\x77\xec\xa6\x9a\x2a\xa6\xf7\xb1\x24\xc7\x02\x66\x3d\x9e\x21\x39\x21\xe6\xdb\x9f\xb0\xef\x3d\x54\x1e\x71\x55\x43\xc9\xf0\xaf\x56\x16\x15\xd1\x93\x46\x0a\x75\x70\x77\x6d\x45\x98\x8f\x2c\xc3\x31\x52\xb3\xdb\x09\xd5\x3b\x67\xec\xee\xcd\x8d\xed\x6c\xbf\xff\xfe\xec\xb4\x4b\x10\x9a\xf1\x9c\xb4\x0a\xff\x8f\xc1\x38\xf2\xc9\x64\x95\xe0\x3f\x57\xa1\xa2\x0d\xd5\xce\x3d\xe0\xec\xf3\xf7\x01\x9d\x69\xc2\x6a\x37\xc1\x29\x57\x57\xfb\xb7\x06\x5a\x18\x32\x3e\xee\xdf\xbe\x78\x49\xec\xdd\x56\xd6\xf9\x6d\xcc\xf3\xfb\x36\xf6\x98\x26\xac\x76\xdc\xa5\x5c\x5d\xdd\x43\x5b\xa1\x7d\x75\xe0\x22\x7d\xbb\x5b\x4a\xce\xc3\xf4\x34\x34\x35\x3c\xd7\x79\x20\x68\x89\x31\x97\x15\xb9\xb1\x95\xb7\xad\x86\xf8\x9e\x17\xcf\xc9\x4b\xa1\xaa\x92\xd5\x11\x5a\xcd\xa1\x8c\xbc\xd5\x5a\x5f\x84\xe2\xe6\xea\x79\x67\x5e\x89\xae\x31\xf5\x4b\x71\x73\x14\xb4\xd4\xa0\xc8\x75\x83\x48\x7e\x38\x47\xa7\x83\x1b\xa2\x0d\x26\x9d\x4d\x5c\x6e\xc6\xc0\x96\xe1\xf5\x2d\x87\xdc\x43\x06\x77\x82\xba\xfc\x21\xb6\xbc\xf2\xbd\x30\xc8\x93\x94\x5d\x3f\x51\x29\x7d\x36\x80\xcf\xb8\x2c\xf7\x78\x4e\x54\x91\x83\x67\x07\x23\x72\xc9\x73\x9e\xd1\x32\x9b\x47\xad\x81\xeb\xe7\x0c\xdb\x75\x03\x42\x34\xcb\xd3\x03\x72\x24\x4b\x18\x39\xa1\x82\x64\xcc\x15\x01\xb3\xa7\x7a\x8e\x7a\xc7\xf1\xc3\x20\x91\xe4\xc1\x78\x8a\x90\x5a\x76\x84\x6b\xa9\x93\xa9\x2c\xbf\x8f\xfa\x3c\x9c\xd6\x0c\x8f\x0b\xc3\x05\x47\xe4\x7b\xcb\xbe\xac\x5c\x80\xc8\x00\x87\xd9\x3d\xf1\xb0\x36\xeb\xe1\xd9\x43\x76\xb2\x6c\x2c\xba\xee\x1e\x1a\xa0\x77\xb5\x9e\x4c\xb9\xbe\x60\x85\xec\x40\x86\xc3\x81\x1a\xfe\x05\xae\xcd\x0d\xa9\x38\x34\x76\xa4\x9a\x50\x24\x49\x49\x95\x51\xa3\xd4\xa1\x77\x61\x44\x4e\x5f\x9e\x5f\xbc\x7c\x71\xf2\xfe\xe5\xe9\x73\xf2\xad\x1d\x89\x87\x7a\xc0\x88\xbc\x0f\x5b\xb5\x04\x09\x6f\xb6\x1f\x86\xff\xd6\xc0\x92\x58\x2a\xea\x96\x73\x50\xba\x9e\x0a\x72\x26\xb8\xae\x9b\xed\x62\x5e\x40\x26\x85\x8d\xf4\x37\x6f\x5b\xef\xc6\x94\x6b\x5b\x0c\x19\x07\x33\x3f\xc7\xa3\xd9\xac\x70\x23\x6c\xd6\x49\xdd\x8f\x50\xf8\xab\xb7\xe7\x3e\x14\x55\xd7\x45\xb2\x1b\x1d\xcb\x77\x10\x75\x15\xb2\xd0\x5b\x5c\xdf\x47\x66\xeb\x1b\xa6\xbb\x5e\x14\xb2\x8c\xfa\x99\x8f\x46\x87\x23\x62\xd8\xf8\xe1\xe8\xd0\x89\x7c\xd9\x42\xd3\x7d\x3f\x68\xd8\xf2\x27\x46\xf8\x11\x21\xef\x5c\x56\x25\xd4\x41\x5d\xde\xbf\x1f\x4b\x96\x07\xdd\xda\x1b\xc7\xc6\x55\x9b\xa9\xc6\xe1\x47\x6d\x8f\xa0\x29\xbf\xb6\xd5\x2c\xef\xcd\xa7\x50\x4f\xb5\x93\x6d\x0c\x57\x6e\x35\xe5\x8b\xd7\xf7\xb7\x36\xa4\x38\x1d\xad\xcc\x92\x2f\xbb\xae\x44\xe6\x39\x36\xb5\x99\xf9\x3a\x7b\x75\xa9\x3c\x4f\x1d\xef\x45\xcb\xc7\x56\x3e\x93\x9d\x0e\x76\x83\x33\xb8\xa1\x1a\x5a\xbd\xbf\x6d\xb3\x9f\x45\xad\x4e\x6d\xdf\x01\xd8\xf6\x92\x52\xae\x04\x99\x65\xb3\x4f\xfc\xc7\x9f\x5c\xbc\x3c\x39\x7d\xf3\x72\x94\xa7\x8f\x90\x48\x33\x91\x16\x92\x0b\xad\x76\xd5\xf0\xa9\x9e\xdd\x03\x79\xf7\xd3\xee\x46\x86\xf3\xc3\xb9\xf3\xe3\x6e\x04\x8d\xc1\x6c\x71\xb7\x00\xbb\xb4\x2c\x64\x26\xa7\xcb\x5b\x07\x6f\x81\x36\xff\x86\x4d\x25\x86\x74\x68\xf0\xf1\xfe\x94\x5d\x3d\xeb\x4a\xcf\xd5\x33\x07\xc8\x1a\x5a\x5e\x6f\xd4\xb3\x2f\x03\x60\x77\xa8\x46\x2c\x40\x11\xcd\x39\x40\xde\x5c\xdf\xb6\xba\x11\x5a\xc1\xca\x9c\x63\x16\x4a\x5b\xfd\xe2\x7e\x80\xbf\xab\x6a\x61\x28\xf9\xf9\x8e\xe8\x1a\x43\xdd\x8d\x14\x33\x90\xa2\x64\x43\xdf\x69\x66\xc2\x33\x06\x55\xd5\xbd\x84\x14\xf2\x13\x67\x09\x76\x76\x63\x7c\x2a\x9b\x37\x2d\xc2\x41\x61\x37\x67\x88\xc7\xfa\xd3\x59\x36\xaf\xbb\x09\x5a\x6b\x18\x9d\x62\x07\x99\xd2\x3a\xe4\x8a\x92\x5f\xf3\x8c\x4d\xa1\x53\x28\x17\xd3\xa0\xf2\x60\x58\xab\xd0\x96\xa9\x8c\x9d\x53\x6f\xcc\x5f\x41\xd3\x6a\xc0\xac\xb7\xef\xde\x43\xd3\x59\x08\xa9\xd8\x5b\xe1\x34\x1f\x84\x33\x3f\x1c\x0e\xc1\xf4\x77\xf4\x77\xa3\xf9\xa4\xd9\x31\xf9\x91\xd9\xef\x48\xe8\x8a\x5b\xf2\x44\x93\x9b\x99\xf4\x2d\x4a\x61\xae\x35\x64\x01\xa1\x31\x8c\xcf\x3e\xf5\xc4\x3c\x69\x24\x6a\x64\xe5\xd1\xf3\x9c\x41\xdf\xaf\x3a\xce\xe0\x31\x6a\x49\xf7\xc4\x40\x3b\xa6\xf6\xce\xd9\xb4\xec\x8c\xf8\xf0\x01\xc7\x17\x28\x51\xf3\x3c\xe3\xe2\xaa\x6e\xab\x34\x91\xb6\x32\x2b\x23\xe6\x07\x77\x6a\x4a\x46\xb3\xd5\x1c\x63\x17\x1c\xbd\x37\x6e\xa1\x3b\xf3\x47\x80\xbf\xc0\x50\x8b\xff\xeb\x88\x97\x0d\x00\x0b\x49\xfd\xc1\xc1\xa3\x86\x18\x57\x89\xe2\xfb\x93\x77\x18\x26\xa2\xed\x82\x9c\x5d\xbe\xb8\x3c\xbb\x53\xaf\xdf\x2a\xe6\x0a\xb3\x7b\xd4\xda\x03\xff\x79\xb7\xa8\xaa\x21\xc9\xaa\x5d\xdf\x44\xd3\xcb\xb9\x2c\x35\xcd\xee\x81\x70\x26\x33\x5a\x9c\x54\x7a\x76\xca\x15\x14\x18\xee\x46\xfc\x5b\x18\x35\xc8\x57\xc4\xd6\xcd\xae\x47\x1d\x77\xe8\x6b\x9f\x7b\xf1\x7f\x4f\xce\x09\xad\x0c\x3e\x6a\xdb\x95\xf3\xde\x82\xe5\xdc\x2a\x2e\x31\x07\xba\x53\xc8\xd8\x31\x37\xc0\xc5\x3d\xf5\x90\xa0\x72\x77\x59\x6f\xbd\x3f\x1a\x38\x17\x52\xfd\x2f\xc4\x07\xcd\x05\xd7\x9c\x6a\x59\x76\xe6\x1b\x8c\x46\xf4\x06\xc3\x4a\x69\x99\xdb\x53\x74\xe6\x9e\x80\x80\x2c\x90\xdf\x16\x5e\xaa\xad\x89\xa0\x7d\x02\xcc\xcf\x84\xd1\x15\x69\xc2\x1a\x69\x36\x03\xe8\x96\x89\x63\x73\xff\xcc\x5f\xac\x11\x1d\x3a\x17\x65\x7f\x7d\x1e\xf5\x93\xaf\x5b\x53\xba\x26\xc0\xd6\x8a\x99\x48\x21\x58\xb2\x4f\x6f\xe5\xfd\xb7\xe4\xe7\x6e\x48\x1b\xff\x59\x34\xfc\x09\x08\xa2\xff\xaf\xa2\x19\x82\xf6\xed\x7d\x1a\xdf\xe3\x2d\xed\x66\xc5\x31\x96\xd8\xc5\xd7\x28\xf1\xd6\x5b\xdb\x2a\x85\x7d\x99\x10\x22\xba\xa4\x42\x19\x3c\x89\xed\x19\x87\x36\x00\xe2\x90\x1c\xe9\xa4\x38\xbe\x37\x48\x75\x95\x0e\x9b\x55\x22\x14\x56\x71\xed\xef\x11\x35\x5e\xfb\x74\xd8\xfd\x96\x79\xef\x41\x0e\x70\xda\xbb\xb1\xdb\xda\xb1\x3c\x1e\x85\xf0\x42\x01\x91\xbc\xe6\x4a\x63\x1e\x0d\x3e\x0c\x65\x5c\x30\x9f\xd0\xe8\x02\xe7\x44\x96\x84\x17\xff\x4b\xd3\xb4\x7c\x8e\x72\x84\xd5\x55\xe1\xff\xca\x77\x0a\xa2\xc2\x47\xdb\x1c\xe9\x79\x61\x7b\xc4\xbd\x7f\x71\x0e\x4f\x2a\xf2\x1f\x7f\x7c\x0a\x7a\xc1\xef\xbf\xfe\xe3\xd3\x3d\x11\xf1\xb1\x66\x15\x92\xae\x6d\xa2\x9d\x47\x56\x7c\x21\x59\x24\x51\xb6\x08\xb4\x93\x31\xd2\xee\x25\x26\x67\x18\x3e\x69\x89\x26\x1e\x04\x83\x95\x9e\x7b\x77\x29\x13\xf7\x59\x17\xbf\xa2\xac\x0b\xe2\xb3\xf1\x91\xb0\x76\x82\xc8\xe1\x80\x50\x56\x67\x91\x80\x23\xed\x3e\x7f\x2c\xb4\x7b\x47\xe8\xee\x8a\xc9\x31\x06\x87\x21\x7e\x36\x11\x37\x48\x4f\x3d\x7d\x7b\xf9\xbf\xaf\x4f\xfe\xf6\xf2\x35\xac\xd5\x46\x05\x1a\xf4\xb4\x9a\xd0\x2e\x31\xeb\xed\xd1\x7d\x77\xe3\xd6\xae\x20\xed\x22\xc0\x40\x34\x42\x0b\x04\x79\xfb\xea\x72\xdb\xa8\x82\x7d\xd5\x59\x31\xd9\x03\x7a\x8f\xcd\xaf\x61\x5e\x85\x7e\xad\xf7\x91\x39\xdf\xb1\x53\x24\xa8\x8a\x1f\xd9\x51\x0c\x0e\xe1\x1a\xf7\x36\x75\xec\x88\x1b\xe4\xc1\xc9\x7a\xeb\xfd\xdf\x06\x62\x08\xc5\xce\x3d\xdf\x77\x0a\xed\xfd\x64\xc8\xb2\xab\xb2\x0e\x87\x38\x96\x13\x1f\x0d\x09\x43\xde\x51\x1a\xae\x6a\xf8\x29\x53\xbe\x41\xd1\x17\x80\xad\xc5\xb2\x76\xd3\xfb\x73\x87\xa5\xc3\xe2\x7f\x2f\x5d\xb7\xc0\x20\xaa\x20\xca\xeb\x5e\xd5\x51\xde\x45\x64\xd2\x3c\x68\xac\xd9\x65\xe5\xc7\xfa\x16\xde\xc1\x26\x79\x8f\x90\xc1\xc0\xc4\xef\x29\xbd\xcc\x7f\xbb\x9b\xe3\xe8\x87\x6b\x56\x5a\xd9\x0a\x4b\x08\x55\x4e\x90\xb3\xb1\xe6\x61\x49\x96\x07\x89\x42\xe4\xc1\xf1\x21\xcf\x86\x7e\xdc\xd1\xdc\x70\x9f\xa6\x86\x62\x26\xb5\x14\x1d\xe7\xd0\x2e\x1b\x34\x26\x6c\xe7\xf0\xc4\x0b\xcc\x74\xcf\x58\x19\xd0\x5b\xcc\x20\xf2\x6e\x75\xa3\x79\x38\xd6\x2d\x85\x73\xb0\xc7\xee\xf5\xc7\x47\x89\x8a\xf4\xec\xf4\x1e\x88\xd0\x97\x56\xec\x68\x5b\x37\xe1\xbd\x05\xca\xa6\x1d\x65\xee\x9b\x81\x1c\xcc\xcf\x4e\xad\xba\xe0\xd2\xf2\x95\x3d\x56\x64\xf5\xb9\xba\x17\x51\x4a\x96\xfa\x46\x96\x5d\x95\x8f\x8b\x87\x6b\x44\x61\xda\xdf\x16\x8a\x71\x7c\x99\x54\x04\x57\xf9\xe8\x29\xc9\x25\x50\x92\x46\xe7\xee\x55\x14\xe5\x36\x08\xca\xe3\x21\x24\xb7\x23\xb8\xdc\x6e\x25\xae\x7b\x53\x7f\xdd\xf1\xe8\x04\x58\x6e\x30\x6b\x06\x35\x88\x52\xd3\x5d\x0a\xe6\xe6\x80\xf2\xdc\x0b\x9d\x2d\xa5\xa1\x43\xbb\x91\x93\x98\xc4\xba\x91\xd0\x39\x88\x5d\x1d\xb3\xcc\xec\xac\x14\x61\x3f\x48\x5b\xac\x6b\x40\xb0\x67\x62\x4e\x0b\x85\x4d\x29\x52\x79\x23\x6e\x68\x99\x92\x93\xf3\xb3\xbb\xa7\xab\x7b\x67\x82\xe2\x79\xd8\xa7\xb7\x40\x9c\x0b\x5a\x8f\x07\x11\xf8\x10\x24\x64\xfe\x18\x73\x8d\x6d\x9b\x31\x18\x5f\x87\xd6\x28\xc3\xa7\x7c\x24\x8b\xa1\x74\x86\xaa\xd9\x91\x02\xb1\x4a\x10\x99\x68\x9a\x61\x0b\x10\x32\x66\xfa\x86\x31\x41\x9e\x3e\x7d\x8a\x0e\x8a\xa7\x7f\xfa\xd3\x9f\x08\x34\xe5\x4c\x59\xc2\xf3\xc5\x07\xe1\xa9\x7f\x7f\xf6\x6c\x44\xfe\xfb\xe4\xcd\x6b\x42\x13\xd0\xe5\xb0\xf2\x2d\x8e\x0c\xfb\x19\xbe\xac\x06\xe4\xbf\x2e\xdf\xbd\xad\x1b\xca\xc7\xbf\x02\xba\xf8\xe5\x8d\xc8\x69\x10\x7b\x1f\x3a\x0f\xa8\x9e\x01\x34\x84\xd4\x84\x4e\x26\x88\x70\xae\xab\xbd\x25\x26\xae\xf6\x1c\x9f\xce\x60\xb9\x5c\x00\xaa\x65\x90\x14\xc0\xcd\x14\xc1\x61\xe3\xea\x38\x62\x8e\x03\x8c\xe5\x99\x08\x4c\x65\x40\x32\x7e\xc5\xc8\x44\x7d\x5b\xca\xaa\xa8\x1b\xa7\x94\x4c\x19\x05\x2c\xa1\xc2\x8c\x8e\x83\xd5\x3b\xa3\xd8\x9e\xb5\x31\xef\x3b\x72\xc2\x9e\xd3\x6e\x5c\xc8\xf6\xcc\xbb\x16\x62\xb6\x37\xa0\xcb\xd1\x42\x92\x61\x76\xe1\xb1\x46\x32\x44\xab\x3d\xf7\xeb\x41\xa4\xb2\xd5\x0f\x6b\xca\x48\x33\x29\xa6\x21\x0e\xd6\xd2\x87\x0b\xa6\x9c\x17\x6c\x57\x60\x74\xd4\x50\xa7\x9b\xf6\x74\x48\xdc\xdf\xd0\x62\xbf\x4e\x20\x71\x8c\xae\x1b\x33\xaa\x43\x49\xc7\xb2\xd2\x2e\x66\xcf\xfe\x0e\xe5\xdb\xb4\x74\xa0\xdf\x6b\x0a\x9d\x75\x29\xea\xae\xef\x5f\x47\x4d\xb7\xe2\x98\x39\xe0\xda\xb1\xc8\x3a\x20\x8c\x26\x33\x72\xc5\xe6\x43\xe4\x00\x05\x85\xea\x11\x00\xed\x53\x03\x63\x2c\x93\x1b\x87\x33\x24\x2c\x35\xda\xa4\xdd\x0a\x17\x60\x19\xc8\x07\xae\xfa\x84\x53\xb8\x94\x95\xcb\x6d\x2b\x2b\x11\x58\x28\x5d\xef\xca\x44\x0a\x6d\xfb\x62\xfa\xde\x55\x10\x30\xda\x28\x48\x60\x28\x0c\x4b\xcd\x6b\x6a\xdd\x97\xeb\xa8\x52\xc3\x51\xac\xfc\x51\x89\x85\xb7\xa1\x9e\x3b\xc4\xf4\x2a\x66\x2b\x23\x51\xd7\x13\x31\x88\x4c\x9d\xf1\x04\x32\x8e\xcc\xe3\xf6\x59\x07\x25\x0f\x88\xa8\x60\x82\x62\xba\xb2\xa0\x81\x38\x61\xf3\x6d\xa6\x14\xe1\xb0\xc2\x9c\x96\x57\xcc\x15\x1a\xa6\xd9\x88\x9c\x9b\x49\xfa\x6a\xf3\xd8\x4a\xf0\x1a\x13\x44\x0c\x8d\x09\x2b\x41\x98\x8f\x1c\x8e\x46\x87\xc8\x2a\x97\xd4\x85\xd8\x1b\x6b\xba\xec\x22\xd7\x59\xf7\xb8\x08\x95\xdf\xd0\x42\x61\x37\x3d\xa3\x5a\x40\xc7\x4a\x09\x75\x5b\xf4\xcc\x09\x13\x74\xcf\x12\xe2\xe1\xd5\x71\x1b\xb3\x6e\x3b\xa1\x76\xd7\x07\x75\x0f\x5f\x7b\x7c\x75\xdd\xff\xb4\xc3\xee\xa7\xab\x7a\x9f\x5a\x1c\xb2\x94\xa4\xab\x8e\x8c\x9d\xb7\xdc\xcc\x3b\x68\x6c\xe6\xae\xd8\x75\x04\xf2\x6d\x54\x4b\xba\x95\x2e\x62\x4b\xa9\x67\xec\x51\x29\x1f\x67\x13\x20\xa9\xcb\x6b\xdd\x84\x7a\x99\xe3\x30\x06\x02\xf7\xaf\x75\xec\xdb\x65\xcf\x5d\xb7\xd1\xa6\x7e\x7f\xb5\xa4\x79\xed\x13\x44\xd3\xbc\x62\x43\x46\x50\x56\xc2\xb3\xda\x30\xfb\x18\xb6\x4a\x4b\xe8\xd6\x59\x13\x87\x11\x79\x63\x59\x31\x22\x39\x1d\x2b\x99\x55\xda\x57\xa2\x58\xc2\xa7\x61\x50\xd7\xdb\x13\x8b\x36\xb9\xc7\x02\xae\x0d\xf2\x0a\xb2\xb2\x6e\x18\x38\x5e\x1d\x12\x9f\x7d\x03\x64\xf1\xfa\x95\x85\xc9\xe2\xd5\xe1\x2e\x38\x71\xb1\xe3\x9d\x70\xc3\xfa\xea\x9d\x2e\x23\x32\x92\x6e\x21\x46\x56\x2b\x14\x9d\x9d\xa0\x8a\x39\x94\xbb\x56\xc0\xae\xaf\xfd\xad\xba\x76\x5d\xd6\xc0\x78\x72\x7e\xd6\xa1\x56\x1a\x8c\xba\x42\x2f\x0d\x9f\xe8\x35\xd3\x36\x57\x04\xe0\x33\xd4\x4c\x8d\x48\xef\x0c\x48\xa7\x35\x44\xad\x4b\xcf\x10\xe5\x5f\x81\x6a\xb3\xb0\xf0\x57\x86\x19\x85\xc9\x5c\x71\x87\x0e\x34\x06\xd7\x6c\x2b\xe8\xea\xe1\x62\x78\x80\xc4\x7d\xf9\x6a\xd0\x03\x55\x5e\x00\xfa\x7b\x64\xec\x34\xaf\x98\x8b\x5e\x38\x20\x92\x4b\x96\x19\xa6\x47\x1a\x26\x9b\x42\xa6\xcf\xb1\xe7\x37\x15\x42\x6a\xc0\x1b\x35\x20\x19\xf4\x23\x1f\xa0\x29\xc6\x48\xa0\x41\xf4\x57\x19\x38\x4d\x3b\x96\x39\x3b\x43\x1e\xd2\x39\x02\x11\x40\x22\x80\xdd\x79\x37\x98\x44\x6e\x01\x9b\xcc\x55\x8b\x2a\x5d\xb6\xe5\x8f\xf0\xca\x8e\xef\x90\x48\x25\x33\x96\x53\xec\x47\xe2\x00\x64\xe8\xf5\x4d\xc9\xb5\x66\x58\x75\x9c\x95\xb9\x22\x72\x32\x88\xfc\xc6\x07\xd7\xcf\x0e\xba\x92\x67\xc9\x6d\x28\xd4\xc4\x9d\xd0\x5d\xcb\x80\xad\xba\x62\xbf\x41\xa4\x5c\x98\xd3\x09\xda\x74\x06\x0d\x92\x44\xc3\x60\x69\x84\x88\x6b\x84\xff\x83\x06\xdd\xed\xd9\x22\x76\xb5\x41\x0c\xbc\x60\xda\xdb\x20\x7a\x1b\x44\x17\x23\xde\x9a\x0d\x22\x60\xdc\x8e\x98\x2e\xb1\x47\x84\x89\x78\xce\x28\x51\x97\xb2\x08\xca\x44\x1b\x94\x77\xe6\x08\x59\xc6\xbe\x82\xc3\xd1\xe8\xf0\xd0\x19\x29\xec\xf9\xa8\xf4\x64\xf8\x1f\x84\x89\x44\xa6\x88\x54\x66\xfc\x52\x69\x10\x6a\x6b\xad\x3c\x9c\x4b\xee\xbe\x15\xfa\x1b\x60\xec\x6e\x51\xa2\x43\x0a\xe5\x42\x52\x5e\xdd\xaa\x08\x56\x0b\x5e\xbe\x0c\x98\x05\xa0\xaf\x96\x68\x25\xb0\x3a\x44\x26\xe3\x39\xb7\xf5\x09\x0d\xb9\x60\x4a\x2b\x72\x84\x37\x47\x49\x51\x0d\xec\x03\xa3\x9c\xe5\xb2\x9c\x0f\xfc\x43\xe6\xc7\xe8\x2d\xfb\xc4\x31\x48\x6d\x49\x55\x96\x4c\xe8\x6c\xfe\xeb\x95\xdf\x1c\x88\x1f\xb0\xf8\xe6\xb1\x62\x9f\xbc\x8f\x65\x57\x8c\x96\x75\x13\x01\xb0\xde\x79\x68\x03\x1f\xb2\x19\x18\x83\xda\xf8\x63\xee\x32\x71\x4d\xae\x69\xb9\x73\x06\xc6\xb2\xeb\x56\x24\xb6\x94\x5f\x73\x25\x77\xce\x61\x5b\x3a\x64\x08\xbc\x4b\xcb\x94\xd1\x46\x2c\x2b\x5d\x54\xda\x72\x17\x77\xb6\x5d\xc9\x3e\x7f\xa6\x1b\x82\xef\xb3\x83\x0e\x27\x57\x50\xad\x59\x29\x9e\x93\xff\x39\xfa\xf8\xbb\x5f\x86\xc7\xdf\x1c\x1d\x7d\x78\x3a\xfc\xf3\xa7\xdf\x1d\x7d\x1c\xc1\x7f\xbe\x3a\xfe\xe6\xf8\x17\xf7\xc7\xef\x8e\x8f\x8f\x8e\x3e\x7c\xf7\xe6\xdb\xf7\xe7\x2f\x3f\xf1\xe3\x5f\x3e\x88\x2a\xbf\xc2\xbf\x7e\x39\xfa\xc0\x5e\x7e\x6a\x39\xc8\xf1\xf1\x37\xbf\xed\x70\x11\x54\xcc\xdf\x75\x46\x82\xf1\x1a\xde\x8a\x18\x11\x8f\xdd\x31\xea\x12\xf2\x79\x58\x5b\xb4\x87\x5c\xe8\xa1\x2c\x87\xf8\x91\xe7\x44\x97\x55\x57\xa4\xab\x66\x7f\xb7\x47\x63\x6a\x21\xa6\xae\x80\xe9\x14\x9b\x07\x48\x44\x30\x30\xb5\x43\xcb\xb0\xed\x63\xbb\xdc\x28\x6c\x7f\xec\xed\xc1\x6d\xae\x5b\x8c\x54\xb2\xf5\x6c\x7e\xe5\x61\x4a\x97\xb6\x9b\x72\x1f\xa3\xb4\x70\xf5\x31\x4a\x8b\x57\x1f\xa3\xb4\xe5\xd5\xc7\x28\xb9\xab\x8f\x51\xea\xed\x83\xfb\x5f\xbf\x72\xfb\x60\x1f\xa3\xb4\xed\xd5\xc7\x28\xed\x7c\x3d\xa2\x18\x25\x14\xf2\x97\x45\x2a\x59\x31\xbf\x0e\x53\x7a\xb0\x51\x4a\xca\xe0\x43\xc2\x4e\x92\x44\x56\x42\xbf\x97\x57\x6c\x4f\x47\x6e\x43\x27\x5d\x18\x1d\x4a\x22\xae\xd0\x51\x17\x1f\x7e\x90\x0a\x6b\x57\xf2\x68\x07\xf2\x63\x77\x92\x23\xad\x52\x6e\x74\xd4\x8e\x0f\x8b\x1b\x36\x2c\x8b\x2d\x52\x96\xd6\x3f\x58\x92\xa6\xcd\x7e\x8f\xc8\x09\x29\x59\xc2\x0b\x6e\x18\x00\xd4\x0a\x82\xfb\x78\x7c\x7c\x17\x67\xae\x15\xcb\x26\xb6\x93\xad\xa8\xd3\x9c\xcb\x40\xff\xb4\x1c\x65\xe9\x67\x50\x86\x90\xae\xd7\x28\x51\x33\x59\x65\x29\x29\xd9\xdf\x9d\xf0\x61\x67\xf3\x3e\x1c\x21\x34\xa9\xc2\x52\xea\xcf\xda\xc1\x69\xc1\x6d\x51\xb1\x87\x44\x06\xd9\xe7\x82\x97\x70\xd8\x2e\x59\x22\x45\xda\xb5\x85\x64\x61\xfc\x5a\x56\x00\xbf\x10\x4b\x49\x5a\xe1\x03\x90\x8e\x49\x33\x9e\x72\x3d\xf7\xf1\x1c\x78\xec\x8d\xd8\x8a\xbd\x83\x2d\x22\xa8\x7a\x23\x08\x2d\x8a\x52\xd2\x64\xc6\x54\xf0\x35\x14\x42\x6d\xa1\x0c\x9f\xe5\x99\x55\x53\x2e\x50\x0e\x85\x77\x8c\xb0\x92\xcd\x49\x29\xb5\x0b\x4d\x5b\xf1\xc1\xf7\xc1\x60\xf0\x3a\x4a\x1c\xba\x9c\x43\xfc\x9a\x0c\x87\xc0\x59\xf1\x49\xf8\x87\x22\x32\x4b\x5d\x69\xd6\xff\x78\x6a\x04\xff\xc4\x62\xb1\x61\x02\x50\x34\x53\x4b\x92\x19\xe1\xc9\x30\x86\xd5\x2f\x7f\xfd\x07\x32\x93\x55\xa9\x46\x61\xb1\xbf\x67\x70\x0f\x2d\x1c\x4e\x71\xd0\x24\x63\x54\x69\xf2\xec\x29\xc9\xb9\xa8\x0c\xc7\xef\x08\xf1\xba\x92\x75\x03\x29\xf7\x8f\x7f\xd8\x73\xb4\x6e\xe4\xdb\x95\x92\x6d\x81\x1d\xf3\xac\x78\x6b\xcf\x38\x16\xf4\xc0\xae\x99\x0d\x61\xd7\xb2\xa4\x70\x17\x85\x96\xf7\x7c\xf2\x7f\xae\xe4\x78\xae\xf7\x2f\x61\x63\xc7\x89\x6b\xd7\xfc\x7f\xf6\x66\x9b\x52\xb1\x75\xa5\xd8\x1d\xa6\x72\xef\x3d\xbe\xa7\x5c\xe9\x9d\x3a\x7c\xd7\x35\x6f\x76\x78\x79\x5f\x66\x3e\x35\xfa\x71\x27\x99\xf4\x30\x92\xd3\xe8\x9c\x45\x3a\x49\x98\x02\x52\xe4\x8a\xc2\x81\x71\x17\x9f\xdd\xf1\xa3\x0f\xb4\xda\xcc\xb2\x22\x32\x0e\xf9\x3b\xe8\x55\xba\x17\xb0\xf6\x11\xf9\x1d\x62\x77\x04\x2d\x1c\x2c\xa6\x11\x8a\x8b\x29\xb6\x16\xcd\xab\x4c\xf3\x22\xab\x21\x77\xe1\x5e\xb0\x0c\x38\xf4\x16\xd0\xc0\x3c\x4d\xb1\xe8\x15\x56\x3f\x07\xcf\xca\x91\x1f\x8b\x09\x8d\x1d\x32\x4b\xc3\xc7\x0b\x5a\x52\x0f\xfe\x44\xe6\x39\x55\xc7\xd6\xf1\x40\x21\x0a\xc6\xb6\x01\x32\x6f\xd1\xac\x9e\x71\x10\x75\x70\x5f\x88\xab\x99\xa0\x62\x67\xf7\x5f\x5c\x70\x1e\x86\x22\xf2\xc6\x07\xda\x63\x93\xfb\x06\xc6\x5a\x81\xf8\x6f\x34\xb9\x62\x22\x25\xdf\x2b\x07\xb8\x74\x2e\x68\x6e\xeb\xc7\x17\xa5\xc4\x2e\xea\x2c\x6d\xbc\xaf\x06\xd6\xec\x88\xa5\x4f\x5c\x01\x2b\x94\xb7\xee\x0b\x8a\x95\xea\xa8\x78\xb0\x19\x68\x13\xbd\x53\x68\xd2\x2d\xf9\x75\xc2\x9c\xec\x68\xde\xbb\xaf\xc5\x5f\xef\x5c\xad\x8e\x2c\x2f\x1d\x65\xdb\x98\xe2\x29\x04\x96\xee\x3d\x97\x50\x26\x9e\x66\x86\xc4\xcd\x7d\xcd\x9f\x06\x82\x8d\xe7\x60\xf7\xba\x97\xca\x63\xe5\x78\xff\x9a\x52\x87\xe5\x38\x8d\x89\xd9\x05\x4d\xa5\x22\x7f\xcb\x64\x72\x45\x4e\x19\x28\x0d\xb7\xd9\x7c\xbf\x1c\xa7\x8f\xbb\x71\x66\x4e\xa7\xbb\x45\x8c\x0c\x49\x2e\x05\xd7\xb2\xdc\x85\x1e\x3f\xa0\x42\x81\x7d\x2b\xc3\x36\x15\xd3\xcd\x39\xfb\x52\x1a\x19\x1a\x94\xef\x06\x75\x60\x28\x6f\x3a\x01\xca\x83\xb7\x80\xa8\xee\x4c\x47\xfe\x6d\x26\x6f\x86\x5a\x0e\x2b\xc5\x86\x7c\xe7\x40\xa8\xbd\x01\x75\xc5\xe6\x10\x55\xd6\x09\xa8\xec\x60\x91\xe6\xae\x25\xd8\xd9\xe1\xbe\x91\xef\x2e\xfe\x76\xfa\xbd\x62\xe5\x28\xd4\x56\x9e\x30\x9d\x3c\x49\x58\x31\x7b\x62\x47\x78\xf4\x60\x75\x64\xb3\x1b\xb8\xba\xd1\x50\x10\x48\x64\x96\xd9\x02\x63\x72\x42\x5e\xb0\x62\xe6\x3f\xf7\x30\xe0\xf6\x98\x7b\xca\x15\x52\x76\xd3\x6e\xea\xd0\x8c\x14\x93\x0d\xb8\x83\x54\x23\x40\xfe\x72\xbc\x5d\x23\xef\x87\x88\xee\x77\xd8\x9d\x65\x97\x56\x7c\x0f\x02\xbc\x0f\xa7\xa5\xdf\x61\xd4\xd3\x2f\xcc\x1f\x8a\x1b\xf6\xb9\xe8\xd4\x88\x6c\x9f\x4d\x50\x19\x4d\x59\x4a\xe4\x35\x2b\x4b\x9e\x32\x45\x3c\xdd\x0e\x6d\x50\x3c\x7b\x18\x90\xef\x7b\x07\x3e\xae\x80\x83\x87\x63\x7e\x38\x04\xfb\x43\x44\xc4\xe1\xce\x02\x11\xa7\x69\xce\xc5\xc3\xc0\xf6\x1d\xe1\xa6\x12\x9a\xb1\xb3\x77\x7b\x6b\xeb\x76\x9c\x58\x61\xbf\xb4\x37\x83\x9e\x02\x1b\xea\xec\x7f\xe7\x71\x97\x08\x99\xee\xe6\x40\xbb\x67\xb5\x7b\x4a\x35\xbb\xd9\x51\x10\x1a\xd6\x24\x7f\xd7\xf7\x41\x3d\x7b\xdc\x6a\xfb\x83\xe8\x14\x12\x9c\x72\x2c\xf9\x7f\x5f\x42\x96\xc5\xa7\x6e\x1c\x49\x38\x56\xd8\x94\xad\xd9\x8a\xcd\x9d\xd9\x93\xf3\x33\xf2\x2d\x3e\x7e\x7f\x5d\x50\x4a\xa9\x51\xe5\x39\x95\x39\xe5\xdd\x34\x40\x6f\x0e\xda\xec\x87\x15\x02\xe1\xdc\x3f\x4b\xec\xc3\x46\x28\xaa\xcb\x0d\x57\x25\x4b\x89\xb5\xa7\x7c\x61\x2d\x1e\x16\xc4\xe9\x2f\xa3\xc5\xc3\x6d\x75\xc9\x0e\x4c\xf3\x2e\x7f\xa7\x96\xa2\x1d\x3a\x81\x10\xe1\x63\x9d\x88\x62\x42\x71\x08\x6f\x08\x22\xf0\x40\xd4\x86\xb0\x74\x9f\xac\x83\x62\xf7\x80\xbc\x96\x53\x2e\x1c\x15\x93\x36\xaa\x66\x42\x79\xb6\x1f\x38\x7b\x39\xf9\x57\x26\x27\x2b\x95\xbd\x14\x74\x9c\xed\x1e\x32\x19\x1f\x02\x3f\x1c\x79\x95\xd1\x29\x61\xf0\xc7\x93\x94\x2b\xf3\x2f\xb9\xbc\x7c\x0d\xce\xe0\x4a\x38\xfd\x12\xdc\x9c\x96\xb7\xf8\xd4\x68\x24\x32\xf7\x47\x17\x90\x88\x77\xd6\xc1\x23\x18\x8f\x70\x91\x9a\xa5\x33\x15\x05\x25\xdb\x27\xb0\x57\x8a\xcf\xbb\xc3\xd0\xc7\x31\x23\xef\x67\x3c\xb9\x3a\x0f\xfc\xbf\xb2\x34\xf7\x44\x70\x2b\x12\x52\x9a\xbf\xdd\x17\x37\xb2\xcb\x3a\xef\xca\xa0\x16\x8c\xe7\x38\xb5\x23\xa7\x97\x16\x82\xf0\x1b\x55\x4a\x26\xbc\x8e\x3f\x00\x4b\x74\xcd\xbe\x53\x60\xdf\xf7\x07\x15\x10\x38\xbb\x01\x08\xca\xb9\x4b\xa4\x16\x87\x51\xf6\x09\xaa\x42\x29\x85\x0b\x07\xb7\x7b\x03\x02\xe2\x78\x67\x2d\x4d\xeb\xe1\x16\x5b\x9a\x3a\x35\xb3\xe1\x22\x77\x09\xaf\x16\x81\x9c\xca\x60\x7b\x68\x2f\xa2\x90\x6f\x6d\x6a\x9b\x99\xdc\x0b\xe8\x76\x4f\x4d\x5f\x66\xfe\x6b\xc4\x07\xe1\x3d\xeb\x34\x07\xda\x53\xc8\xa2\xca\x30\xb2\x76\xff\xce\xae\xce\xc7\x88\xdf\xb9\x07\x27\xfa\x43\xeb\xec\x74\x18\xa6\xe7\x6d\x9f\xaf\xf8\x65\xf4\x77\x0a\x54\x8b\xa7\x7f\xfc\xc3\x1f\x1e\x7b\xc7\xa7\xfd\x0c\x77\xf7\xdd\xf2\x69\x2f\xd7\xdb\x92\xda\x0c\x67\x7d\x6d\x86\xbe\x36\x43\x7c\xdd\xbb\x7f\xf8\xee\xab\x2f\x74\x92\xdd\xd6\x45\x66\xdb\xbe\xf5\x15\xf6\xcc\x8a\xeb\x26\x23\x6e\xef\x0a\x0a\x77\x51\x37\xa1\xa3\x1c\xb1\xfd\x6b\x24\xf4\x95\x11\x7e\x5d\x95\x11\xba\xcb\x11\xeb\xaa\x0a\xc2\xfe\xb9\x61\xbf\x9e\x8a\x07\x7b\x93\x8d\x7d\xf3\xea\xf7\xce\xa6\xef\xaa\xe9\x47\x57\xd6\xfd\xce\x2c\x0c\x87\xf5\x78\x4b\xed\x2d\xae\xc4\x9b\xab\xa6\x7f\x78\xa8\x82\x62\xf9\x5a\x1a\xea\x72\x8f\xaa\x33\xd9\xdb\xf2\x80\x53\x91\x3b\xf1\xee\x65\x56\xbc\x77\x97\x8d\x00\x01\x7f\xfb\xe1\xc7\x05\xf4\x0e\xf2\xfd\xc2\xd4\xbf\x2c\xf7\xe8\x17\xda\x01\xff\xb6\xdc\xa3\x2a\xaa\x9a\xeb\xac\x8e\x40\x20\x41\x84\x93\xe3\xb0\x33\x4d\x4d\x16\x4e\xce\xcf\x48\x52\x32\x28\xed\x40\x33\x35\x22\x4b\x24\x3c\xe7\x40\xb2\x12\xa1\x93\xec\xa8\xd6\x2c\x2f\xf4\xbe\x98\xd7\x7b\x47\x7f\x65\xde\xd1\x5b\xf7\x52\xcc\xaa\x9c\x8a\xa1\xa1\x16\xe0\x1f\x8d\xe2\x4e\x1a\xfc\x70\x44\x2c\x5d\x40\xb1\x02\x6c\xa1\x90\xd2\x5c\x09\xfe\x73\xc5\x6a\x73\x85\x97\x3a\x1e\x80\x73\x07\xe6\xd1\x31\xec\x50\xa2\x6a\x50\x91\x44\x2e\x24\x71\x59\x80\x78\x38\x3a\x82\x11\x88\x65\x91\xe9\x4d\xcf\x18\x4a\x6f\xe7\x50\x24\xa1\x7e\x2a\xd6\x0f\x51\x41\xa4\x59\x26\x6f\xf0\xdb\xa1\x3c\x62\xf6\xcf\xcc\xc5\xd6\x25\x19\x33\x92\xf3\xb2\x94\xa5\x75\x23\x85\xd3\xc1\xf0\x21\xa3\x67\xb2\x12\x15\xb6\xd2\x06\x7d\x5c\x32\x6d\xb7\x1a\x50\x45\x4b\x42\x05\x26\x70\x9a\xff\xbb\x88\x6b\xf8\xb6\xa3\x77\x63\x36\xa3\xd7\x5c\x56\x25\xbe\xad\x25\x39\xb0\x3f\x01\xef\x9d\xcb\xca\xdb\xce\x2b\xc8\xd0\xf2\xab\x53\x4b\xe0\xf4\xb6\xfe\x11\x14\xdc\x54\x3a\x73\xe4\x90\x7d\xe6\x4a\x2f\xae\xc5\x81\xc8\xb5\x9c\xb8\x0f\xcc\xbb\x56\x85\x61\xb0\x3f\xec\x9c\x7b\x1b\xe3\x5b\x38\x5a\x2c\xa9\x5e\x5f\xc2\x4f\x9b\xe4\x54\x5b\xb1\x06\x53\xe6\x5d\x3a\xdc\xe3\x8b\x61\xc5\x55\xee\xd8\xeb\xea\x41\x0a\xca\xbd\x90\xbc\xf6\xf2\x51\x16\x19\x4f\xe6\x67\xa7\xdd\x46\x6e\xe0\x98\x8e\xfd\x29\x1f\xb5\x61\xee\x93\xbf\x51\xc5\x52\xf2\x86\x0a\x3a\x45\xab\xcb\xd1\xe5\xf9\xdf\xde\x1c\x1b\x2c\x02\xab\xce\xd9\xe9\xd2\xd0\x8e\xcb\x70\xf0\xb7\xf7\x95\xe7\x4e\x9a\xa0\xeb\x4c\x6c\x58\x18\x75\x47\xf0\xdd\x5b\x09\x00\xe2\x65\x82\x7d\xda\xa7\x2d\x11\x07\xce\x9b\x45\xa2\x30\x7c\xc3\x55\x7f\x53\x4d\x52\x7d\x9d\xa7\x57\xb7\x09\x80\xc0\x6e\xbe\x6e\x95\xed\x7c\x60\x2d\xfc\x5c\x71\x37\x12\x5d\x52\xcd\xa6\xf3\x53\x56\x64\x72\x6e\x10\xe0\x3c\x30\xe3\xe3\xa3\x63\x14\x1b\xca\x31\x4d\x48\x59\x65\x0c\x7b\x0b\x35\xcb\xae\x09\xc6\xd2\x9a\xd2\x71\xa1\x34\x85\xa2\x6b\x38\xfe\xda\x19\xb5\x66\x56\x6d\xd9\xd2\x10\xe7\xb9\xf1\xa9\xb8\x44\xa5\x39\x25\x6b\x5f\x69\xcf\x98\xe0\xf3\x9b\x71\x76\x1b\xbf\x66\x6b\x0f\x66\xdc\x1d\x10\x4e\xf9\x45\x95\x19\xe6\x93\xa5\x8d\x16\xaf\x20\xa7\xd9\x3d\xc6\x6a\x17\x40\x13\xcc\xec\x07\x64\x5c\x19\x21\x8e\xa9\xc8\xc6\xbd\x58\xea\xf3\x66\x86\x2e\x6d\xf3\x12\xa1\x45\x91\x71\x0c\x61\x96\xa5\xf5\x4b\x07\x06\xcd\xc5\xc7\xda\x90\x96\x2d\x65\x99\xed\x64\x97\x21\xb9\x66\xe5\xb8\x4d\x9d\x8a\x6d\xc5\x12\x5a\x70\xf0\xe3\xb4\x96\x62\xa2\x8d\x3b\x39\x3f\xc3\xb7\x97\x19\x8e\xdd\x8f\xb8\x83\x76\x6f\x9c\x7b\xc3\xf6\x0c\x42\xcd\xc5\x57\x5a\x3a\x39\x3f\xc3\xd2\x5e\xb6\xd8\x52\x6d\xfe\x30\x7a\x02\xc5\x20\xc7\xba\xc2\x23\x9d\x9a\x11\x35\x91\xc2\x7f\x94\x89\x2a\x67\x58\xa0\xa9\x6e\x36\x66\x94\x47\x31\xaf\x47\xaf\xad\x27\x46\xd7\x31\xaa\xcf\xc1\x41\x28\x08\x63\xea\x43\x19\xcc\x07\x88\xc9\xc1\x57\xd1\x53\x86\x72\xd4\x13\x6e\xcb\x7e\xb6\x8f\x12\xd8\x32\x2a\x60\x6b\x7e\x26\xa4\xb8\xb0\xa0\xfa\xfe\xe2\xf5\x6e\x88\xf0\x36\x1e\xc3\x16\xf5\x61\x50\xbf\xb0\xa0\xa5\xe6\x34\x23\x55\x99\x39\xb7\x22\xe6\x08\xd8\x50\xbc\x19\xbd\x0e\x0a\x1f\x8d\x08\xf9\x0a\x77\xdf\x6e\x0e\x9e\x71\x6c\xe0\x6b\x4d\xc1\x55\x96\x0d\xc8\x84\x43\xcb\x76\xcd\x0a\x12\xba\xb5\x2e\xb9\x48\x8c\x3a\x28\x86\xbe\x23\x0f\xcc\xc8\x29\x89\xfe\xa0\x83\xd7\x14\x64\x66\x96\xa5\x50\x0c\x13\x3e\x61\x0e\x7d\x02\x26\x0b\xa3\xc5\xbe\xc8\x2a\xa5\x59\x79\x21\x0d\x43\x09\xc2\x76\xa0\x30\x08\x0d\x7f\xfe\x1b\x17\x29\xc4\x69\x5d\x00\xf3\x49\xa8\x20\x8c\x83\x31\xc8\x0c\x09\xfe\x77\x83\x2c\x35\x52\x1e\xa9\x2a\x99\x99\x25\x1d\x14\x32\x55\x07\x86\x14\x1d\xa0\xc9\x50\x1d\x1c\x9b\xbf\x9a\x6b\xc0\x28\x9c\xe0\xbd\x27\xb4\xe0\x07\xc7\x03\x02\x00\x02\x07\xa0\xd4\xb3\xc7\x8b\x87\x6e\xad\xa0\xa3\xef\x84\x85\x17\xe1\x08\x80\x83\xa2\x76\xf5\xdd\xcc\xb8\x66\xbe\xbd\x3a\x5a\x9a\x7c\xa5\x9b\x26\xc1\x27\xe4\x44\x10\x96\x17\x1a\xac\xd7\x24\x67\xd4\xb9\xc4\xd9\x35\x2b\xe7\x7a\x66\x2b\x81\x38\x02\xf2\xe8\x81\xbe\x1f\xc0\x1b\xbd\xeb\x6b\x24\x87\x13\xb6\x00\xdc\xc3\xaf\x0e\x9b\x84\xb4\xe6\x08\x8f\x16\x94\xc0\xa2\x77\x02\xe3\x0f\xe6\xcd\x18\x84\x78\x0b\xa9\xa5\xa7\x1f\xaf\x5f\x5b\xc7\x0a\xc2\xea\x3b\x2e\x52\xe5\xbb\x29\xda\xb8\x6f\x0b\xef\xa5\x40\x86\x19\x3e\x46\x00\x2f\x8a\xc0\x6d\xc5\xd6\x35\xc3\x3b\xa9\x7f\xd5\x50\x6b\x07\xb0\xaa\xc3\x1b\x99\x2e\x3f\x3a\xd1\xfe\x9e\x05\x0f\xfb\x60\x83\xda\xee\x62\xc7\xb2\xe2\xee\xbc\x58\xaa\x13\xac\xdf\x8e\x35\xa0\x5f\x35\x93\xda\xe0\x00\x74\x32\xf8\x05\xac\x49\x58\xe7\x9c\x4c\x32\x3a\xad\xd1\x08\xa8\x1e\x0a\x5a\x2f\x2e\x7f\x70\x4b\x50\x84\x2f\x17\x79\x37\xca\xc4\x9b\xa4\xe0\x61\x0d\xa5\x95\x4f\x98\x8f\x2c\xfd\x71\xb3\x28\xec\x07\x5f\x8d\x4d\x6d\x9c\x8d\x7a\xad\x21\x6f\x15\xfc\x9d\xcd\x8e\x06\x98\xe0\x0a\xb6\x39\xc5\x14\xe2\xa7\x40\x0e\xb9\xfc\x21\x42\x93\x0d\xf3\x5d\x81\xb4\x57\x6c\x7e\x23\xcb\xe5\xb5\xd8\x63\xb9\xde\xd3\x21\xf7\x8a\xd3\xc0\x9c\xf3\x12\xed\x83\x72\x69\xd1\xf9\x9d\x51\x75\xed\xe4\x33\x3a\x66\xd9\xe6\xa9\xbf\xa1\x85\x99\x77\x1d\xf7\x8a\x86\x00\xeb\x36\x45\x55\x04\x43\xd4\x5c\x58\xa0\x2c\xa7\x54\xf0\x7f\x60\xb0\x70\x62\x48\x82\x2c\xcd\x9f\x47\xe8\x7a\x41\x33\x42\xc6\x12\x7d\x6c\x51\x79\x29\x09\xdd\x80\xeb\x34\x4d\x39\x0a\x22\xe7\x1b\xd0\x72\x3d\x10\xb8\xb8\xda\x66\xfb\xe0\x79\x8c\x26\xc3\xc5\xde\xf2\xde\xad\x39\xeb\x9b\x8f\xe3\x7a\x1f\x70\x0b\x76\x51\x95\x6b\xc2\xc3\xd6\xbe\x9f\x53\x6e\x9b\x05\x6f\x03\x5d\x8b\x39\xd4\x4a\x98\x86\x40\x9a\xf5\xf9\xd1\xee\xe0\xb0\xec\x05\x70\x96\x53\xbe\x2b\xc4\xf0\xda\x63\xcb\x72\xaa\xab\x92\xeb\xa5\xec\x77\xfd\x8b\x5c\x7c\x57\x8d\x99\xf5\xa8\x6f\xfd\xba\x80\xc0\xca\x93\xf3\xb3\xa5\x60\xe9\x86\xcd\x82\xdd\xc3\x4e\xd0\x48\x69\xa4\x12\x34\x1f\xf3\x69\x25\x2b\x95\xcd\x43\x33\x2e\x85\x80\x80\x11\x21\x67\x68\xc7\x12\x87\x9a\x50\x21\xc5\x3c\xb7\x8f\x8a\x24\xab\x52\x16\x8d\x08\x7e\xd3\x6b\xc9\x53\x42\x2b\x2d\x73\xaa\x79\x42\x12\xc9\xca\x04\x7c\xac\xe1\x48\x95\x62\x84\xae\x78\x37\xa9\x94\x96\x39\xc9\x69\xa9\x66\x34\xcb\x56\xed\x71\x07\x3c\x7c\x5d\xb1\xf6\x21\xac\x7f\xe5\x8f\xd7\x38\xeb\x1d\xf1\x7b\x43\x6d\xfa\x16\xf8\x6d\x26\xb7\xd7\x00\xd7\xab\xb1\xb4\xc5\x18\xb6\x2a\xc2\xd2\x7a\x4f\x11\xc2\xbd\x9f\x31\x52\x54\xe3\x8c\x2b\xd0\x4c\x81\x12\xcd\xc9\x98\xcd\xb8\x8d\xce\xde\x4c\x82\x56\x6e\xf1\x26\x38\xaf\xa3\x01\x1b\x21\xb4\x86\x64\xaf\x7d\xd7\xb2\xb4\xb3\x9c\x4e\x5b\x08\xe0\xaf\x0d\xc1\xa6\x62\xee\x39\x21\x14\x39\x55\x03\x22\x4b\x1b\xb1\xe3\x7b\xd2\xdb\x9f\x7c\xa1\xdc\x92\xbc\xb3\xa0\xb3\xa1\xf3\x16\xdf\x21\xa1\x82\x95\x13\x59\xe6\x06\xc0\xbc\x24\x93\x4a\x80\x81\x52\xd9\x48\x7b\xe0\x12\xd6\xc6\x45\x33\x25\xfd\x59\x86\xbd\x10\x6e\x12\x84\x2a\x72\xc3\xb2\x6c\x44\x4e\xb2\xcc\x56\x5f\x0d\xea\x6c\xd4\xb9\xf2\x75\x3c\xc7\x78\x4e\x52\x3e\x65\x4a\x93\xa3\xcb\xff\x7b\x72\x0c\x22\x0a\xd8\x7f\xe6\x44\x53\x97\x2a\x18\xdb\xb5\x40\xd8\x49\x2b\x10\x8a\x12\xaa\x69\x26\xa7\x18\xd2\x00\x36\x72\x91\x92\x22\xa3\x73\x68\xad\x50\xd0\x12\xa2\x7d\x13\xb4\x6d\x91\xb2\x12\x50\x54\xfa\x4e\x79\xd7\x66\xa2\xb2\xae\xee\xf3\x10\x70\x72\x47\xa2\xb1\xa1\xba\xee\xed\x32\xc5\x92\x15\x19\x5d\x61\x8d\x59\x38\xf0\x75\x22\xb8\x51\x0f\x40\xf5\x97\x82\xf9\x31\x46\xe4\x12\x71\x27\xa7\x3a\x41\x7f\xf2\x4f\x39\xd3\x34\xa5\x9a\x8e\x8c\x0e\xfd\x53\x9c\x95\x28\xb3\xd4\x0c\xb4\x7a\xa3\x57\xcc\x19\x85\x63\xb9\x99\x48\xbd\x36\x12\xbc\x7f\x1c\xf4\x1a\x77\x1e\xd7\x9a\x7f\xf6\xa4\x4f\xb0\xfc\x97\x9f\x8d\x0a\xbb\xd6\x7f\x19\xcd\xb5\xf9\x52\x6c\x9d\xc9\xe2\x95\x58\x6c\xcd\x19\x94\xe8\x7c\x6f\xbb\x50\xb9\x3b\x60\x7a\x3e\x79\x7b\xba\xda\x4c\xb8\xd9\xd4\xb2\xc1\xb4\xd2\x94\x4f\x57\x4e\xcf\x19\xe6\xed\x2f\xb1\x67\xc6\xa5\x22\x41\xf2\x26\x26\xf6\x50\xe1\x39\x87\x2b\xce\x9f\x81\xc5\x20\x4c\x3b\xc5\xf7\x56\xdb\x95\x5a\xb9\xc6\xda\x38\xc4\x36\x65\xf9\x0d\xfd\x64\x57\x3e\xd4\xce\x3f\xb6\x31\x13\x6f\x55\xa6\x1d\x42\x1e\x12\x73\x9c\x69\xd9\x03\xbb\xad\x3f\xb1\xa5\x5d\xcc\x2d\x75\x8b\x89\xfa\xad\x8c\x82\xbe\xae\xd8\xfc\xd0\xea\x88\x06\xd3\x67\xbc\xc0\x54\x51\xeb\xbe\xb1\xbb\x4b\x7e\xa0\x19\x4f\xfd\x10\x88\xd5\x67\x62\x40\xde\x4a\x6d\xfe\x79\xf9\x99\x2b\x8d\xba\xf6\xa9\x64\xea\xad\xd4\x70\xa7\x93\xa5\xe2\x14\xb6\x58\xa8\xd5\xf6\xd1\x03\x00\xe7\x2a\xb0\x09\xb8\x05\x9d\x4d\x22\xc9\xc8\x3c\x7d\x26\x8c\x44\x60\x57\xe4\x53\xa8\x95\x1d\xc2\xe5\xff\x08\x29\x86\xe0\x1b\x58\x3a\x86\x05\x84\x2c\x23\x38\xac\x19\xce\x0e\x85\xc1\x97\xf0\x0b\x57\x8e\x88\x7b\x9e\x4d\x9d\xb9\x92\x27\x24\x67\xe5\x14\xbc\x5d\xc9\x06\x6f\x4f\x5b\x13\x6e\x2b\xc3\xed\xc6\xbd\x02\x92\xf9\x7a\xa5\x95\x66\x61\x93\x82\xe7\x91\x2c\xe5\x68\xba\xf9\xa7\xa1\x3e\x00\xa9\x7f\x41\x1e\xbd\x1a\x91\x13\xd7\xe2\x27\xfc\xcd\x7a\xfd\xc2\x61\xcc\x08\x5c\x11\x43\x4a\xae\x69\xc6\xb0\xc3\x01\x15\x3e\xd7\x4d\x4e\x16\x08\xfb\xc0\xe6\xd3\x9b\x33\xeb\x45\xa6\x83\x2b\x36\x3f\x18\x2c\x6c\xed\xc1\x99\x38\xa8\x13\x1e\xa3\xcd\xf4\x44\x14\xa4\xad\x03\xf8\xed\x60\x77\x5e\xb0\x96\x58\xb6\xb7\x25\x6d\xdc\x37\x75\xc5\x97\xbb\xfe\x97\x0a\x1b\x47\xea\x18\xcc\x1e\x02\x7b\x2d\xc9\x12\xcc\xc0\xe6\x6e\x58\x5a\xc5\x88\xaa\x57\xbc\x28\xea\x4a\x34\x55\x31\x2d\x69\xca\xc8\xb4\xa4\xc5\x6c\x5b\xb1\x04\x65\x9b\x65\xc3\x3f\x1a\x41\x77\x05\xf0\xd7\xe8\x86\x6b\xdf\xbb\x61\xe3\x99\x94\x57\x90\x86\x08\x88\x70\x8b\x96\x8c\x1f\xf1\x5b\xa7\xf5\x3d\xa7\x94\x2a\x92\x32\x4d\x79\x06\x71\x34\xef\x5e\xbf\xb1\x91\x36\x8e\x8f\xbb\x59\x2e\x0f\x5a\xe9\x40\x01\xa0\xa9\x8d\x00\xbb\x60\xd7\x9c\xdd\x58\xfb\xc6\xaa\x18\x99\x21\x99\x32\x01\x81\x21\x6b\x02\xa8\x86\x44\xf1\x94\xbd\x84\xa4\xe7\xd5\x03\xed\xe1\x70\x58\x31\xe7\x4d\x87\x77\x3d\x05\xdf\x48\xbd\x5b\x70\x59\xaf\xfe\x9e\xcb\x72\x4d\x11\xa6\x76\x39\xd8\xed\xf2\xab\x6d\x14\xff\x73\xf2\x87\x3f\xfc\x7e\xe5\x43\x39\xfd\xcc\xf3\x2a\x7f\x4e\xfe\xf8\xef\xff\xfe\xfb\x7f\x5f\xfd\x18\x17\xf8\xd8\xb3\xd5\xeb\xb3\xa7\xed\xc5\xc5\xe9\x03\x80\x77\xea\x23\x19\xd7\x3b\x33\x5b\x0c\x35\xa1\x3c\xab\x4a\x1b\x43\xdb\x52\x45\x78\x15\xbe\x03\x8e\xa8\x3a\xe9\x84\xba\x11\x5d\xa0\x9d\x0d\xc0\x9b\x70\xc1\x14\x34\xcf\xa9\x44\xc9\x12\x39\x15\xfc\x1f\x2c\x75\xbd\x73\x20\x20\x06\xaa\xec\x3b\x14\x27\x4c\xa4\xd8\xc3\xd4\xf0\xbc\x19\x15\x69\xb6\x2e\x50\xa2\xc5\x4a\xc3\x13\xbc\x17\xc8\x80\xf3\x6c\x05\xb0\x37\xf5\x1b\x0d\x70\x41\x27\x56\xeb\xb6\x43\x8e\x86\x60\xdb\x6b\xa5\x48\x18\x2f\xd7\x28\xd6\x4b\xe6\xb8\xa0\xf7\xa1\xca\x0a\xf7\x7e\xae\x58\x39\x87\x04\x9b\x5a\xb0\x0f\x82\xf0\xde\xd7\xf5\x1b\xdc\x32\xac\x44\x85\x05\x74\x1a\xba\x70\x2d\xc4\xd4\x61\x32\x8d\x6f\xc3\x3b\x0c\xc3\x0e\x9c\xd7\x8c\x9c\x10\x51\x65\xd9\xaa\x47\x85\x5c\xe7\x5f\x0b\x61\xb7\x41\x95\x6c\xa7\xe3\xb5\x35\x0b\x2c\x81\xf4\x9d\x1a\x07\xc2\x85\x77\x24\xca\x3f\x6c\x73\x41\xb8\xe0\x56\xf1\xb4\xed\x63\x69\xdb\x95\x09\x6a\x61\x46\xc0\x6b\x9b\x60\xdb\x96\xc5\x7d\x6e\xd3\xb0\x80\xd7\x56\x71\x4d\xed\x8c\x0c\x4b\xa6\xfe\xe0\x4c\x0d\x3b\x2c\xbe\x8d\xd9\x61\xc9\xd2\x7b\xe3\xc3\x02\xc0\xdb\x46\x91\x6d\x11\x41\xd6\x72\x27\x5b\x18\x25\xf0\xea\x4d\x13\x5b\x71\xa2\x16\x84\x79\x3b\x33\x45\xeb\x5d\x2d\x19\x17\xd7\x12\x8b\x6c\x6f\x25\xc3\x5d\x2c\xbc\xd8\x10\xe5\x6e\x80\xb2\x5a\x59\xce\x0b\xbf\xa1\x48\x6b\x14\x5a\x52\xa9\xcd\xc6\xee\xf5\x2b\x58\x9f\x77\xd3\x89\x0e\x12\xaf\xbc\xca\xd8\x8f\x5c\xcf\xde\xb9\xa2\xfa\x16\xab\x75\x55\x64\xb0\xd8\xe0\x07\x83\x42\x17\xb5\x64\x78\x86\x6d\xdc\x58\x22\xf3\x9c\x89\x14\x83\x88\x72\x7a\xc5\x48\xdd\x2a\xd4\xc8\x78\x20\x06\xc3\x70\xec\x73\x41\x45\x2d\x27\x5e\x1b\x5a\xbe\x0e\xa3\x5a\xe2\x53\x5b\x5e\xdb\x3a\xa1\x65\x7d\x22\x4b\x90\x89\x12\x25\xac\x90\x31\xcb\x24\xa4\xc0\x63\x84\x2d\xc6\x80\xbb\x1c\x10\x43\x92\xed\x5d\xcb\xf5\x6c\xc1\x4d\x26\xa6\x75\x1d\x2f\x95\x41\x53\x5f\x4b\x81\xa5\x60\x23\x72\x61\x45\x98\x76\x52\x51\x1b\x72\xda\x92\x94\x6e\xc1\x10\x3f\x0f\xeb\x6a\x19\x43\x23\xec\x0e\xed\x6c\xb4\xcc\x79\xb2\x69\x53\x36\xdb\x3a\xf0\x6a\x6e\x8b\x7b\x2f\xdc\x98\x6b\x77\xaf\xcd\xd6\xb8\x87\xfb\xcd\x59\x71\xf9\x56\x1b\xdb\xed\x4d\x4c\x4c\x6a\x7e\xe4\x37\xa6\x41\x36\x13\x6c\x56\x0d\x46\xc2\x21\x79\x71\xf1\xf2\xe4\xfd\xcb\x01\xf9\xfe\xfc\x14\xfe\x3d\x7d\xf9\xfa\xa5\xf9\xf7\xc5\xbb\xb7\x6f\x5f\xbe\x78\x6f\x24\x98\xaf\xb0\x69\x80\x51\x20\xcd\xd6\x18\x4e\x28\x63\x3a\x45\xc5\x9c\x4c\x2a\x6d\x08\x51\xfd\xb1\x68\x16\x14\xad\x0f\x34\x4d\x8d\xb2\xfa\xe8\x10\x60\x39\xc0\x9b\x06\x9b\xb0\x5b\x0a\xf6\x59\xb0\x29\x72\x9b\x05\xb4\xbb\xc1\xb0\xd6\x49\x26\xd1\x7a\x0f\x76\xcc\x2e\xf9\x28\xc8\x2b\x59\x12\xdb\x9b\x0e\x9a\x95\xa6\xea\xd0\xe6\xf0\x98\xff\x8f\xf0\xd6\x93\x4c\x4e\x0f\x7d\x6a\x0f\x23\x99\x9c\x12\x55\x8d\x7d\xca\x15\x08\x01\xf0\xf4\x57\xee\xb1\x28\x53\x65\xe0\xf3\xae\x82\xb7\xfc\xe0\xd1\x3b\xe1\x03\xe1\xb8\x4f\xa0\xa1\x5c\xf4\xa4\xb9\xd1\x1c\xf0\xab\x27\xcb\x67\xe0\xe4\x3d\x5e\x36\xde\xf8\x28\x0c\xae\xdf\xf0\x2c\x4d\x68\x99\x2e\x20\x3c\xf0\x64\xc4\x17\x80\x1e\x56\x59\xc6\xe6\xdf\xf5\xe0\xb6\x36\x8a\xbc\x66\x65\x46\x0b\x4c\x08\x80\x32\xd7\x10\x31\x05\x1f\x39\x65\x05\x83\xb4\x37\xd7\x9c\x9e\x89\x24\x93\x50\x86\x05\x19\xfa\x20\x5e\x3a\x46\x50\xb9\x5a\x95\x2e\xf9\xd2\x1f\xaf\x83\x2f\x93\xc0\x42\x1c\xf9\x56\xa8\x8f\x91\xe7\x2b\x0b\x01\xf9\x1c\x1f\x54\x94\xbd\xb4\xcf\xc8\x81\xcd\x48\x3c\x18\x90\x03\x5f\xeb\x26\xb5\x9a\xc1\xc1\x57\x07\xf5\x03\x61\x4e\x1b\x28\x06\xd6\x0d\x36\x84\xef\x84\xd9\xb3\x80\x1d\xce\x59\xe7\x3f\x5d\xd7\x2b\x32\x1c\xd9\x1a\xee\x60\x0e\xf1\x40\xa3\x68\x22\x0b\x5f\xad\xd3\x31\x37\x7e\xd1\x4c\x3f\x78\x5d\x43\xf9\x03\x4c\xeb\xb4\xc0\x29\x99\xd9\x4a\x17\x84\x77\x19\x61\x9e\x77\x36\x86\x05\x95\x78\x49\x0a\x5a\x1a\xf5\xcb\x3d\x19\xb7\xc4\xfb\x6a\x63\x43\xbc\x16\x18\x14\xf8\x94\x5a\x6a\x2a\x97\xfe\x8d\x17\x19\x55\x6a\x89\xb5\x19\xa8\x88\x19\x98\x30\x1c\x99\x50\xe7\x70\x83\x7a\xe7\x33\x7a\xbd\xa6\x20\x46\x8b\x49\x6b\x5a\x4e\x99\x5e\xef\x0d\xa2\x62\xfe\x6e\x6d\x09\xbd\x61\xeb\xa2\xbd\xc3\x76\x47\x31\x3a\x84\x5c\xe8\xa1\x2c\x87\xf8\xca\x73\xa2\xcb\x6a\x95\x5f\x4f\xf3\x9c\xc9\x4a\x5f\xb2\x44\x8a\xe5\xd9\x2f\xf6\xb9\xce\xdc\x5b\x5b\xa4\x04\x59\x0f\xeb\x89\x13\x60\xc2\xa2\x97\x4e\x19\xad\xa5\x1b\xe7\x55\x8d\xcb\xf6\xbc\x7b\xfd\x66\x9f\xcd\x26\x90\x36\xbf\x7e\x27\x7f\xb0\x3c\x43\x4c\xfd\x4c\xed\xcc\xd7\xbe\xf6\xa6\xd2\xdb\xbf\xf4\xc2\x7b\xeb\xd6\x3f\x6d\x81\xb1\xbe\xf4\xca\xca\xf5\x2b\x4d\x75\xb5\x80\x0d\xd1\xde\x58\x62\x79\x89\xe9\x87\x56\x15\xb9\x84\xf7\x42\xc3\xe6\x62\xbd\x09\xac\x61\x03\xcf\xb9\x00\xcd\x11\xb1\x2f\x9a\xf3\xa9\x4b\xca\x51\x69\xa6\x89\xae\x20\x8f\x9d\x6a\x1b\xcc\x69\x0b\x2e\xfd\x66\xd9\x32\x96\xaa\xc9\xeb\x54\xe3\x84\x95\x5a\xbd\xa6\x4a\x7f\x5f\xa4\x74\x45\xa6\x5b\x23\x48\x53\x69\x38\x30\x28\xd2\xdf\x08\x96\x1a\x0a\x6f\x41\x80\xe3\x91\x1b\x43\x7a\x2b\x1c\x71\x65\xe8\xc1\x4a\x94\x73\x07\xc8\xbc\x3e\x34\x9f\x5a\x3e\xeb\x0b\x69\x60\x72\xb2\x94\x00\xc5\xe1\x29\x9b\x66\x6b\xd8\x49\x09\xa3\x11\xc1\x3e\x2f\xb3\x32\xec\x3f\xe3\x8c\x51\xb1\x3c\xd9\xa0\x81\x51\xf0\xdc\xf6\x38\x64\x3f\x40\x6e\x66\xdc\xc8\xbb\x98\x11\xa8\x88\x93\xbf\x52\x96\xb1\x15\x89\x81\x7b\x86\xcf\xda\x2f\x9c\xda\x0f\xb4\x0a\xed\x3a\x8f\xdf\xf1\x4e\x0c\x2b\xc1\xdb\xd4\x93\x5a\xd2\xb6\xd2\x83\xd7\xd7\x9a\xab\x02\xf1\x65\x9c\xc9\xe4\x0a\x0b\xd0\x41\xed\x07\xfe\x0f\x56\xba\x58\xfb\xba\xf9\x9c\xed\x88\x36\x75\xdd\x5e\x1d\xdc\x5c\xfb\x2b\x18\xc5\x8c\x6d\x00\xe8\xc7\x97\x65\x6d\x4d\xad\x84\xcd\xb4\xbc\x9b\x70\x5d\xa7\xe5\x40\x8e\x42\xe4\x2d\x59\x54\x78\xb0\x56\x0d\xd4\xc7\xb4\xca\x2a\xcd\x6d\x6e\xd0\x93\xef\x56\xe7\xd1\x74\x1a\x82\xbb\x2e\x9b\x07\x9f\x00\xf0\x89\x64\x6d\x69\xa3\xb5\x79\x3f\x6d\xad\x7d\x1b\xf2\x7b\x48\x7b\x09\xdf\x4f\xb9\xcd\x68\x9d\x06\x54\x76\xee\xe1\x5c\x99\xfa\x50\x5f\xdb\xf8\x2d\xdb\x16\xe6\xdd\xca\xb3\x26\xb6\x29\xa0\x1a\x17\x9a\xf1\x6a\x87\xcd\xe2\xc5\xe8\x83\x89\x2c\x57\x2a\x30\xdd\x4d\x7e\x7d\x36\xd8\xc6\x81\x8c\xf4\xb9\x3a\x5e\x6f\x31\x61\xc9\x50\x2f\xff\xca\x80\x50\x32\xe3\x4a\xcb\xd2\xba\x13\xa1\x79\x5d\x49\xa1\xb9\xee\xf2\xb8\xb7\x6e\x22\x00\x5f\xf8\x29\x10\x5a\x14\x8c\xfa\xbe\x56\x96\x37\x41\x63\xaa\x92\x25\xb2\x4c\x97\x4e\xcc\x99\x06\x96\xca\x52\x4b\x3f\xdf\x41\x66\x6b\x46\x95\x7e\xef\xe7\x60\x04\x84\x96\xd4\x38\x16\x7f\xec\x12\xeb\xd5\xb8\xd2\x3f\x52\xd4\x3f\x4a\x42\x05\x9a\x44\xf6\x93\xc1\x37\x0b\x19\xf5\xda\x50\x9a\xdb\x69\x5d\x37\x5e\x72\x0b\x96\x78\x37\x33\xcf\x99\x52\x6b\x93\xab\x1a\x81\x29\x50\x43\x9a\xf8\x1a\xd2\xf6\x75\xc7\xec\x51\x40\xc0\x10\x54\x57\xe5\x6d\xbe\x1a\xd5\x08\x88\x09\x68\x50\xf0\xc7\x6a\xaf\x2d\x2b\x66\x54\xb5\x5d\x8c\x3f\x45\x3e\xac\xb9\xf5\x71\x68\x39\x9b\x92\x51\xb5\x2e\xd1\xb4\x01\xdb\x71\xc9\xd9\x84\xbc\xa0\x39\xcb\x5e\x50\xd5\x25\x70\x81\x02\x8c\x08\x1b\x4d\x47\xe4\xf0\x22\xf0\x30\xbf\x95\xfa\xcd\xba\x1e\x1f\x1b\xca\x3f\xb4\x39\xd1\xb7\x7a\x96\xf7\x56\x12\x36\x9f\xdc\x3d\xcf\xec\xde\x33\x5c\x73\x42\x1f\xc4\xd9\x5c\x9f\x2d\xbd\xea\x3c\xc6\x27\xb1\x2a\xc1\xe2\x97\xec\x7a\x22\x37\x24\x70\xae\x3a\x85\x0f\xf9\xfc\x6d\x58\x92\x1f\xe2\x72\xa9\xc9\x64\x61\x75\xef\x23\xcd\x15\x7c\x06\x61\x50\x21\x94\x87\x37\x33\x7d\x71\xf9\x43\x97\x62\xcb\xfd\x96\x2a\xb0\x1b\xb8\xf2\xf7\x35\x72\xf9\x70\x3d\x17\xde\xb7\x0c\x42\x0a\x5e\x1a\x83\x01\x77\x19\x74\x72\xea\xbe\x6a\x6d\x1d\xbe\xb2\x33\xfc\x35\xb1\x1d\xf4\xec\x33\x11\x7e\x1c\x41\xaf\x42\x76\x8d\x0d\x42\x21\xc9\x85\x11\xc1\x94\x39\x14\xc7\x6b\x3e\xdf\x52\xa1\x6a\xa7\x4c\x6d\x56\x74\x37\x2a\xb1\x64\xf3\xd6\xba\x87\xd6\x6d\x30\x5e\x6d\x75\xb6\x16\x3a\xf1\x16\xca\xda\x66\x8d\x67\x8b\xc1\x36\x8a\x7f\x5b\x8e\xb7\xdc\x80\xdb\xbc\x1a\x95\xa4\xcd\x2b\x17\x40\xa4\xd1\xab\x9c\x18\x0a\x9c\x40\x7d\x71\xa4\xdd\x96\x3c\xc5\xf6\xdb\x8b\x26\x0d\x84\x10\xcb\x18\xc3\xbb\x5a\x56\x55\xf1\xee\x60\xbe\xb1\xfe\x48\xeb\xf1\x1e\x40\x31\x95\x8d\x08\x74\xbb\xc5\x19\xf0\xda\x84\x75\xf7\x8f\x6f\x6d\x2a\x65\xad\xc5\xb1\x5b\xaa\x6b\xa3\x58\x79\xcd\xd2\xc8\x53\x67\xeb\xfc\xc7\xf7\x02\xbf\x6d\x3d\xbe\x05\x3b\xf9\xe7\xbf\x7e\xf3\x9b\xe1\x70\xf8\x9b\x3a\xa4\xec\x39\xa1\x05\x67\x9f\x35\xc3\xa8\xc3\xd1\xd5\x7f\x40\x33\xa7\xeb\x67\xbf\x01\x84\x23\x2f\xc0\xda\xec\xcc\xac\xa7\x3e\x6b\xf2\x37\x2e\xeb\xd4\x7c\x84\x0a\x21\x75\x18\x05\x95\x48\xa1\x4b\x99\x65\xac\x1c\x4e\x99\x18\x5d\x55\x63\x36\xae\x78\x96\xb2\x12\x06\x77\x9f\xbe\x7e\x3a\xfa\xf3\xe8\xe9\x6f\x88\xcf\x31\x35\x92\xbd\xd2\x34\x2f\x9e\x43\xb2\xcb\x6f\x2c\xc6\xb9\xea\x7d\x45\x46\x85\x1a\xf9\xd0\xf6\x51\x22\x4b\x26\xcd\x3f\xf9\x6f\x54\xc1\x12\xf3\x6d\x3c\x68\x64\xe9\x33\xd6\x74\x66\xa7\x68\x6b\xd5\xd5\x60\x1a\x12\x99\xe5\xf0\x7f\x5c\xba\x2d\x37\x78\x9e\xd9\xda\x85\x19\x57\xfa\xbb\xe6\x2f\xaf\xb9\x42\x76\x59\x64\x55\x49\xb3\x78\xaa\xf0\x83\x9a\xc9\x52\x47\x65\x79\x87\x84\x23\x6b\x54\x5c\x4c\xab\x8c\x96\xd1\x5b\xbf\x71\x31\x0f\xb5\xb9\xce\x70\xc9\xeb\x28\x04\x70\x18\x05\x08\x73\xa1\x59\xf9\x42\x66\x55\x1e\x5a\xc7\x86\x8b\x72\xe5\x84\x97\x4a\xdb\x7a\x88\xb1\x53\x61\x99\x5c\x0c\xdf\x0f\x70\xf4\xef\x4a\x0a\x70\x17\x92\x91\x01\xf7\x68\xf5\x4b\x1f\x9e\x7e\x0a\xde\xc3\x3d\x8c\xe5\xd5\xa5\xa7\x64\xc9\x8c\x69\x51\x94\xf2\x9a\x62\x35\xc7\x35\x73\x71\xcf\x2d\x7c\xf6\x64\xf1\x87\x15\xdf\x5e\x3e\x64\xe4\xa3\x0b\x87\x8c\x7e\xd0\x4b\x2a\x5d\xe2\xc3\xd7\xcf\x68\x56\xcc\xa8\xcb\xad\x54\xc9\x8c\xe5\xb4\xde\x24\x59\x30\x71\x72\x7e\xf6\xc3\xef\x2f\x1b\x3f\x2c\xaf\x7d\x69\x50\xce\xa7\x13\x06\x5d\x18\xa8\xd3\xc5\x7c\x3a\x48\x7d\x02\x16\xa6\xb9\x20\xe4\x2d\x17\xea\x8c\x54\x8e\x67\xbc\x71\xdb\x40\x27\xb8\xb5\x4a\xb8\x0a\x88\x4c\x83\xd0\xc5\xfd\xe6\xea\x38\xd5\x68\x65\x16\xe1\x59\x6a\x61\x56\x47\xef\x38\x37\x4f\xbd\x68\x61\xd7\x34\x22\x06\x19\x59\xe9\x2b\x3f\x61\xea\xaa\x26\x41\xce\x25\x8e\xa6\x5c\x3d\x47\x48\xb1\xd2\x10\xb7\x50\x0a\xd7\x34\x7a\xe0\x7b\xdf\x97\xcc\x8c\x1b\x67\x6d\xba\x34\x94\x25\x2d\xf1\xa6\x5c\x3b\x12\x9a\xc8\x3c\xaf\x04\xd7\xf3\x27\x40\x0d\xf9\xb8\x32\xbb\xf1\x24\x65\xd7\x2c\x7b\xa2\xf8\x74\x48\xcb\x64\xc6\x35\x4b\x74\x55\xb2\x27\xb4\xe0\x43\x98\xac\xc0\x00\x9c\x3c\xfd\x37\x4f\xc7\x9b\x4a\xe7\x4a\x0e\xb3\x4c\x46\x88\x61\x0d\xf5\xf4\x78\xd0\xdb\x1e\xdb\x6f\x47\x35\x6a\xa1\x4a\xf2\xcb\xcb\xf7\xb5\x8b\x11\xab\x23\x01\x84\x03\x27\x5b\x0d\x6c\x03\x28\xe8\x5d\x64\x8b\xc2\xbb\x74\x56\x9f\xc4\x0a\x3d\x01\x32\x6e\x74\x12\x55\x8d\x73\xae\x95\x8b\xb2\xc4\xa8\xc3\x17\xc0\x41\xa0\xae\x28\x5a\x6a\x46\xe4\x4c\xd4\xfa\xfd\xad\x83\x1a\xa2\x82\x86\x06\x7c\xed\x81\x1d\x32\xc0\xc5\x17\x96\x28\x52\x8e\x45\xad\xdc\x9d\xe0\x8c\x5f\x16\x2c\xf1\xa7\xc1\x9f\xe9\x13\xac\xaf\x6f\x1b\x39\xf8\x40\x4e\x89\x1d\xc9\xe1\xe5\x85\x90\x82\x35\x7a\xdd\x6a\x5d\x6e\x48\x96\xd0\xd3\xf8\xa7\x25\xb1\x0b\xc3\x76\x6c\x84\x6c\x50\xc8\xdc\xa7\x37\xdb\x81\x1c\x6f\xb0\xda\x31\xf4\x45\xf0\x0c\xc3\xe6\xa0\x80\xae\x2c\x42\xd8\x42\x5e\x46\x10\xa2\x6c\x20\x7b\x70\xe2\x8a\x41\x62\x2f\x81\x37\x54\x54\x34\x5b\x1a\xc0\xb6\x56\xbe\x73\xb0\x59\x5d\x53\x62\x55\x35\xe4\xd5\xa0\xeb\xb4\x3e\xc5\xda\xd9\xdb\x1c\xf1\xb5\x65\x35\x56\x05\x78\x21\x36\x6e\x5d\x8e\x23\xe8\x39\xb0\xca\xa5\xb9\x4f\x0c\xd2\x41\x78\xa6\x16\xc2\x46\x90\x81\xae\x0f\x1d\x51\x9a\x15\xaa\x2e\xcc\xa1\x25\x49\x64\x5e\x64\x4c\xc7\xbc\x17\x22\x7a\xb7\x8b\x51\x6a\x06\xec\xee\x78\x52\x6d\x9d\x96\xcb\x15\xfe\xda\x21\x5a\x76\xb7\x39\x7f\x5a\x33\x51\x19\x2a\x7c\x19\x55\x8e\x5f\xd1\xf2\x37\x3e\x92\xab\xdf\x0d\xeb\x32\x62\x06\x6e\xdc\x5d\xca\xc5\x98\xb8\xca\xd2\xa9\x0d\x4c\x4d\x83\x54\xbd\xd5\xa1\x25\x7b\xc6\xe9\xac\x96\x55\x96\x2f\xb3\xce\xa3\x59\xe8\x94\xbb\xe2\xfd\x8d\x6a\x21\x24\x29\xae\x8b\xc6\x8b\x39\xf9\x99\x05\x68\x69\x7b\x8a\x52\x52\x70\x86\x81\xf7\x5e\x1c\x02\x80\x31\x9a\xda\x9b\x86\xe1\x95\xcc\x07\x97\x5b\x7b\x37\x0c\x50\x8b\x4b\xd0\x03\x8a\x62\x94\x3b\xf9\xaf\xcb\x77\x6f\x9f\x7c\x2b\x6d\x02\xa5\x6d\x33\x03\x98\x9c\x43\x3c\xbc\xeb\xa6\x92\x32\x65\xd0\xf3\x12\x8c\xe7\x39\x15\x7c\xc2\x94\x1e\xf9\xba\x28\xea\xc3\xd7\x9f\x46\x61\x5e\xc1\xc0\x15\xc2\xf7\x42\x85\x45\x0d\x20\xe5\x66\x31\x75\x49\x51\xdf\xc0\xb6\x90\xae\xeb\xcc\x0d\x4c\x56\xd3\x2b\x43\xbf\x71\xb2\x95\xd1\x65\xae\xd8\x73\x72\x80\xaa\x89\xff\xf4\x3f\x8d\x18\xfe\xaf\x03\x72\x74\x03\x21\xcf\x07\xe6\xcf\x03\xfc\xa0\x97\x01\xc3\xc6\x4b\xf5\x87\x31\x50\xba\xe4\xd3\x29\x2b\xad\xef\x08\xcc\xaa\xd0\x5f\x86\x43\xcb\xd8\xfa\x61\x61\xfb\xef\xd5\x75\x46\x9b\x13\xf9\xf0\xf5\xa7\x03\x72\x14\xaf\x8b\x70\x91\xb2\xcf\xe4\x6b\xef\x7e\x28\x64\x7a\x6c\xa3\xb2\xd4\x5c\x68\xfa\xd9\x8c\x99\xcc\xa4\x62\x02\x43\xbe\xb5\xc4\x96\x3f\x4a\x82\x67\x2b\xcb\x86\x28\x25\xa4\xe4\x06\x53\xa5\x1d\x28\x31\xf5\x18\xca\x34\xc5\x12\x32\xb6\x5b\x86\xaf\x99\x6d\x9b\x82\x69\xc5\x48\x5f\xd8\x13\x08\xb3\x22\xc2\xca\x50\xaa\xc2\x4d\x32\xa4\x6f\x46\x05\xb8\x59\x6c\x2b\x21\x23\x4f\x8d\x56\xf9\x24\x37\x62\xfc\x3a\x93\xd6\x12\xb1\xb5\x4d\x4b\xea\x3b\x12\x0a\x5b\x2f\x71\x9d\xc1\xec\x5e\xbb\x6e\xef\xb5\xa2\xb5\xd1\x47\x8b\xcb\xc2\x90\xa3\x3b\x58\x1b\xf4\x26\x7e\xb2\xf3\xd2\x9c\x48\xbd\x0d\x27\x38\xbc\xc4\x03\x9f\x34\xdf\x36\xc7\x05\x23\x0e\xad\xd2\x1a\x50\xb8\x9c\xa6\x48\x02\xa9\x98\xdf\x3a\x1a\x1b\x00\x82\xd7\x36\x99\x0f\xad\x5d\x6e\x48\x45\x6a\xfe\xaf\xb8\xd2\xe6\xfe\xce\x10\x5b\x63\x08\x8d\xa1\xf4\xfd\xd9\xe9\xdd\x20\x77\xc5\x77\x3c\xad\xe3\x4a\xa4\x19\x7b\x2d\xe5\xd5\x8a\xf4\xe7\x68\x41\x7f\x0b\x9f\xf6\xde\x39\xd4\xd2\xb8\x18\xfa\x18\xda\x40\xcb\x25\x45\x95\x21\x79\xad\x44\x41\x93\x2b\x3a\x65\xf6\xa3\xc0\x46\x6c\x51\x03\xd4\x94\x41\x15\xe8\xb4\x96\xde\xca\xd9\xa3\x35\xc0\xce\x73\xc5\x34\x1d\x5f\xb4\xa5\x16\xa8\x9b\xf7\xe6\xf9\x76\xe2\x57\x8e\x24\xdc\x0b\x36\x59\xf9\xa0\x6f\x0d\xb0\x2a\xff\x64\x08\x6d\xe0\x56\xfe\xe8\x8a\x3f\x2f\x7d\x60\xb3\x0f\xb1\x39\xcf\xb6\xd1\x4d\x8d\xd7\xdc\x8e\x38\x82\x61\xa1\x1c\x3d\x06\x77\xec\x2e\x40\xe7\xbe\x1b\xaa\x80\x02\x65\xd7\x36\x32\xe7\x4e\xca\x40\x6d\x16\x9b\x97\xac\x77\x07\xe1\x39\x9c\xf8\x46\xbf\xdd\x46\x41\x7a\xc9\x9c\x7a\x71\xba\x17\xa7\x1f\xb8\x38\xbd\xd5\x19\xd8\x1c\x7a\xf0\x38\x04\xec\xad\x16\xbd\x39\xda\xfe\x41\x8a\xdc\x5b\xaf\xb1\x45\xf0\xff\x83\x15\xc2\xb7\x5a\x6c\x4b\x81\x7c\xd9\x92\xbf\x64\xb1\x7c\x2b\x18\x6e\x8c\x87\x79\x80\x82\x7a\xeb\x05\xae\x4f\x0a\x59\xb2\xbe\x20\x1f\xa3\x61\x07\x36\x93\xc6\x76\xf6\xde\x4e\x1b\x8a\xc9\x9b\xc4\xa9\x4e\xaa\xde\x76\x16\x7d\xd7\x2a\x6c\x6e\x65\x29\x66\xbc\xda\xc6\xcc\x6d\x93\x2d\x82\xd7\x9a\x38\xf3\x3a\xae\x78\xef\xb4\x11\xbc\xb6\xc8\xac\x6a\x9b\x88\x51\x2f\xbb\x4d\x22\xc9\x16\x4b\x36\x32\x7c\x51\xca\x71\xdb\x5a\x39\xb7\xb0\xaa\x96\x51\x86\x7b\x86\xb3\x43\x76\xbe\xdf\xdf\xce\x16\xbb\x29\x89\x63\xc9\xdc\xb1\x8e\x5f\x14\x49\xe6\xf7\xe3\x50\xc1\x26\xdf\xc6\x4c\x77\x0e\xbe\x0c\xc4\x6a\x9c\xe4\xc0\x79\x30\xdf\x97\x15\x1b\x90\x57\x34\x53\x6c\x40\xbe\x17\x57\x42\xde\x74\x37\xdf\xf5\x15\x19\x96\xcc\xf6\xbd\xad\xbd\xd0\x22\x57\xa8\xf5\x54\x6a\xed\xbe\x25\xb1\x3f\xf3\x2f\x38\x0b\x8d\xd5\xd0\x87\x95\xe0\x3f\x57\xb1\xa2\xe2\x9d\x4c\x47\x4d\x15\xe6\xc5\xe5\x0f\x80\x1c\xa8\x6e\xab\xa8\x90\xaf\xf9\x51\xad\x0e\xab\x6e\x93\x07\xb5\x56\x51\x8d\x13\xc3\x8d\xa2\x1f\xab\x5a\x99\x2d\xc9\xd8\x34\xcb\x14\x55\x96\x8d\xc8\x99\x3e\x54\x66\x0e\x3c\xa1\x59\x36\x37\x5a\x4b\xa3\x43\xda\x7e\x19\x5c\x2d\x18\xc4\xc2\x61\xc3\x8a\x2b\xfc\x9a\x05\xaf\x3b\x40\xa3\xc1\x89\xa5\x76\x1d\xfb\x95\x89\x5c\xd3\x0b\x6c\xc9\xd4\x2e\xec\xe3\x0e\x51\xc2\xfd\xaf\xa1\x6a\x07\x45\x5d\x13\x90\x46\x30\x32\x91\x95\x48\x09\xd5\xb0\x3d\x3b\xce\x39\xf6\xe1\xde\x9d\xc3\x7f\xbd\xfc\xd4\x8d\xb1\x31\xf0\xc0\xd7\x79\x7c\x6b\x84\xaf\x9a\xc8\xb1\xcf\x2c\xa9\x82\x18\xaf\x30\x86\x63\x37\x5b\x63\xb7\xb9\xaf\xf7\x92\x98\x7a\xb7\x39\xa5\x5d\xa7\x4e\x7a\x0c\x68\x1f\xd5\xdd\x4e\x54\xe8\x20\xf6\xbc\x4d\x61\xa7\xf6\x95\x89\x96\xa1\x3d\x70\x45\xdb\x0b\x9c\xa9\x60\x85\x0b\xf8\x6d\xe8\x09\x85\x0a\x2c\x86\xc9\xd8\x4e\x10\x50\xa7\x6a\x26\x77\xa6\x8c\x6d\xf3\x13\xdf\x38\xf9\xcd\x7c\x10\x64\xbb\xe1\x82\x6c\x67\xf9\x5f\x2d\xdb\x41\xc3\xa2\x3a\x94\x06\x98\x64\x4e\xe7\x10\x9a\x96\x17\xb2\xd4\x14\x1d\x1c\x95\x48\x59\xa9\x34\xc5\x1a\x25\x2e\x2f\xaf\x30\x6b\x9e\x51\x45\xb8\x56\x24\xb1\x49\x86\xb8\x61\xb7\x94\xc9\x18\x00\xfb\xdc\xbc\xe0\x45\x84\xe8\xe3\xc8\x57\xa3\x8d\x59\xbb\x0b\xeb\x27\x96\xd1\x35\x81\x55\xfb\xd2\xd9\x4b\xcd\x8a\x26\x5d\x0d\x16\x21\x40\x1c\xbf\xe6\x29\x06\x23\xb1\x82\x70\xd1\x0d\x51\xdd\xec\xc0\x41\xc7\xc4\xea\x63\x35\xf4\x56\x9a\x95\x0f\xac\xd1\x68\x37\x13\x75\x59\x60\xa4\xfc\xa6\xb3\xbf\x2a\x36\x0f\x2f\xbf\x8a\x3d\xc9\xe5\xea\x48\x39\xbc\x16\x76\xd5\x65\x5f\xac\xd9\xdd\x20\x56\x17\xa2\x41\x75\x69\x25\xa9\x79\xab\x3d\x26\x77\x5d\xe5\x66\x43\xea\xdf\xc6\x42\x2c\xc3\x20\x70\xb0\xe5\x63\x60\x98\x5c\xfb\xec\xa6\x3c\xc2\xbb\xae\xab\xb3\x67\xc5\x94\xfa\x72\x2e\xa4\x4e\x06\xdb\x6c\x65\x6f\x39\x50\xbd\x35\x1d\x0f\xd7\xc2\x3e\xde\x72\xcc\x56\x09\x80\xdd\xa7\xbd\xb1\x22\x4e\xfb\x5d\xc6\x93\x0a\x5a\x6a\x9e\x54\x19\x2d\xeb\xb3\x0f\x44\x7e\x21\x6f\x69\xeb\x39\x2b\x4d\x4b\xdd\xaa\xc8\xc2\xa5\x7b\xd2\xd7\x5c\x84\x82\x0b\x33\x26\xbc\xf3\x0f\xd3\xc0\xc8\x98\x4d\x0d\xf3\x2c\x8a\x6c\xee\x72\x0c\xea\x08\xf6\x8c\x2b\x5d\x37\x3c\x04\x59\xa0\x6d\x28\xc4\xd6\xe5\x1a\x7e\xd5\x79\x74\x32\xcb\x13\x29\x26\x7c\x7a\x77\x59\x74\xef\x5e\xbf\x79\x01\x9f\x84\x7b\x75\x0e\x9d\xbf\xbf\x90\x41\x57\x4f\x12\x6e\xd7\x49\x72\xfe\x87\x3a\x45\xce\xd6\x73\x58\x92\x1f\xe7\xb2\xaf\xdc\x7e\xee\x98\x77\xe5\xa7\xe9\xa2\x32\x3c\x2b\x56\x85\x14\x8a\x1b\x99\x18\xea\x67\xc1\x43\xd8\xf1\xe5\xdd\xeb\x37\xdd\x26\x5d\xf5\x19\x56\x7d\x86\x55\x9f\x61\xb5\xe9\x40\xb5\xc8\xb0\xf2\xa7\x19\xf2\xab\x5c\xd8\x9e\xf9\xbf\x4d\x13\xaa\x8f\xbb\xaf\x69\xdd\xf6\xe3\xeb\xe5\xc3\x09\xa3\x06\x34\x9b\x23\x0b\x5f\xd9\x07\xeb\xce\x43\x51\x9e\xae\x25\x33\xa0\x8b\xbf\x7b\xfd\xc6\x8f\x7b\x0b\x39\x11\x29\x57\xe6\x33\x2f\x64\xc1\x59\xfa\xe2\xf2\x87\x76\x8d\xa9\x4f\x9b\x6f\x45\x39\x1d\xf8\xa3\x99\xf9\xa1\x22\x07\xf8\x10\x79\x71\xf9\xc3\x81\x5b\x08\x6c\x44\xdd\xbc\xcc\x67\xb5\x11\xaa\x43\x81\x00\xe9\xff\x80\x60\x14\x12\x8d\x6f\xa7\x51\x73\x27\x29\x6c\xa7\x9d\x19\x55\x64\xcc\x98\x08\x06\x45\x15\xf8\x9d\x7d\x1a\x4a\x81\xda\x38\x25\xa8\xe0\x8d\x1d\x03\xea\xa8\x86\x11\xf9\xd1\x88\x36\x25\x63\xc2\x2c\x23\x1d\xc0\x16\x60\x85\x5c\x06\xbc\x17\x5d\x7a\xc1\xc2\xd4\x01\xac\x08\xca\xf8\xac\x98\xe4\xfa\x8c\x91\x75\x3a\xa9\x8d\xcf\x44\x22\x71\x39\x17\xc9\x99\xa1\xb1\x2b\x52\xe7\x16\x76\xea\x7c\xd5\xdb\xd1\x8e\x01\xbf\xc0\x73\x32\x17\x09\x52\x71\xf3\x8c\x59\x95\xfd\x7e\x09\x32\x55\x69\x1b\x33\xd8\x61\x83\x7b\xa4\x60\x25\x97\xa9\xf5\x42\x24\x33\x96\x5c\x35\xf4\xd7\x28\xb6\x51\xfd\x1f\x1b\x4b\x17\x15\x6e\xc7\x31\x48\x05\xfd\x11\xd2\xaa\xee\xd8\x91\x53\x4d\x8e\xa0\x5e\xd3\xc1\x1f\x9f\xe6\x07\xc7\x18\x19\x87\xe1\x5f\xb4\xa4\x39\xd3\xac\x1c\x60\xb4\xd7\x4c\x56\xa5\x22\x47\x07\xb3\x83\xe3\x01\xc9\xb9\xa8\x34\x33\x7f\xe6\xe6\x4f\xc3\x8e\x14\xd6\x38\x27\x47\x07\xea\xe0\xd8\x59\xaf\x7c\x08\x9a\xdd\x7d\xe8\x59\xe1\xee\x0d\xc2\xb9\xd9\xa6\xbc\x9e\xf1\x21\xe5\xaf\x43\xd8\x6c\xe8\x1d\xbc\x11\x02\x69\xe7\x94\x21\xf0\x1e\x19\xae\xfa\x9c\xfc\xcf\xd1\x87\xa7\xc3\x3f\x7f\xfa\xdd\xd1\xc7\x11\xfe\xe7\xf8\x9b\x23\xf5\x4b\xfe\xcb\xec\xf8\xf8\x77\xbf\x8d\x89\xe4\xe6\xac\xb9\x9a\x4c\xae\xac\x3e\x74\x8b\xa4\xf2\x2e\x9c\x12\x07\xb5\x2b\xc2\xd3\x59\xe7\xa3\x06\x0a\x24\x18\xa1\x66\xe7\xb4\xf7\xb8\x06\x3a\x58\xdd\x49\xe2\xe4\xfc\xcc\xd7\x20\x1e\x91\xe1\x70\x68\x83\x0d\x75\x59\x25\x1a\xeb\x8a\x69\xec\xfc\x65\x46\x4d\x79\x09\xa2\x8e\x62\x60\x46\x74\x0d\x0e\x2d\x69\xc3\x08\x41\x88\xe6\x1d\x59\xd3\x67\x0d\x8a\x11\x89\x03\x3e\x3f\x0a\x80\x04\x79\x25\xa5\xdd\x24\xfc\xe6\x3f\xc9\x93\x27\xe4\xa2\xe1\x5d\x19\x1b\x3c\xb3\x6d\x7d\x40\x79\x9c\x48\x79\x18\xdb\x59\xd9\xc8\xbc\xf8\x9d\x90\x37\x62\xd9\xd7\xe1\x5b\xb4\x64\xcf\xc9\xc7\x83\x93\x6b\xca\x33\x43\xff\x3e\x1e\x0c\xc8\xc7\x83\x73\x1b\xeb\xce\xc5\xf4\xa3\xed\x95\xf1\xf1\xe0\x94\x41\xd3\xfa\xf4\xe3\x81\x19\xf6\x77\xd0\xf1\xf0\x0d\x2b\xa7\xec\x3b\x36\xff\x4f\x18\xcc\xdf\xbe\xc4\xee\x88\xf3\xff\xc4\xe6\x88\xe6\xbe\xe1\x76\xef\xe7\x05\xfb\xcf\x9c\x16\xfe\xc6\x1b\x5a\xf8\x97\x83\x30\x9e\x0f\x9f\x8c\x98\x70\xfd\x6c\x54\xef\xe8\x4f\x7f\x57\x52\x3c\xff\x78\x10\xd4\x7f\x95\xb9\xc1\x8c\x42\xcf\x3f\x1e\x90\xe8\xab\xcf\x3f\x1e\xc0\x77\xdd\x7d\x37\xc9\xe7\x1f\x0f\xcc\x97\xcc\xed\x52\x6a\x39\xae\x26\xcf\x3f\x1e\x8c\xe7\x9a\xa9\xc1\xb3\x41\xc9\x8a\x81\xe1\x0a\xff\x59\x7f\xe1\xe3\xc1\x4f\x66\x4f\x9e\x3c\xc1\x06\x2f\xb8\x99\x8a\xfc\x6b\x79\x57\x96\x0e\x6c\xaa\x8b\x8e\xaa\x95\x8f\x6e\x2a\xae\x86\x4e\x97\x5d\x4c\xaf\x7b\x76\x74\xdf\xb9\xd0\xec\xe2\x8b\x75\xab\xd7\xfd\xc2\x89\xec\xf9\x45\xdd\x66\x1c\xd8\x32\xc0\x6f\x81\xc6\x8b\x7a\x54\x0c\xe0\x4d\x47\x04\xdb\x89\x62\x02\xab\x61\x10\x10\x7e\x01\xcc\x41\x58\x96\xb5\x68\x1d\x31\xb4\x03\xcf\xbc\x1d\x06\xd4\x86\x24\x61\x85\x36\xa7\xeb\x8e\x0a\xe2\x6e\x57\x56\x36\x5f\x70\x0d\xed\x1e\xf6\x83\xa0\xb6\x5c\x96\xba\x56\xd8\xb8\xac\x3d\x17\x9f\xd3\xcf\xaf\xa1\x2f\xd9\x73\xf2\xfb\xaf\xff\xf4\xc7\xff\x58\xe5\x17\x18\xa3\x35\xe8\xdb\xb5\x79\xef\x4b\xc0\xb0\xf8\x62\xd3\x36\x3f\x72\xca\xcb\xa8\x4e\xaa\xaf\xbb\x0f\xc7\x31\x5f\x8a\x69\x32\x06\xf7\x67\x55\x18\xb8\xbc\x72\xa9\xce\x22\xc1\x78\xd4\xa5\x83\x71\x4f\xc0\xb3\x39\x79\xf6\x35\x36\xd4\x82\x4f\x2f\x90\xef\x0f\x9f\x3f\x8d\x96\x4c\x99\x2b\xf2\xe7\x41\x63\x3e\x46\x60\xae\x80\xe9\x19\xc4\xc1\x48\x87\x92\x21\x27\x74\x36\xb9\x45\x4e\xc8\xfc\x7c\x37\x6d\xdc\x16\xfd\x61\xfe\xf8\x87\xd5\xfb\xcb\x05\xcf\xab\xfc\x39\x79\xba\xd2\xcb\xb2\x85\x53\xda\x3a\x9d\xbd\x20\x40\xb1\x07\x02\xcd\xa1\x20\x44\x10\x77\x14\xa2\xb6\xde\x2e\x72\x8c\x9c\x97\x32\xad\x12\xa3\xcb\xcb\x89\x93\x09\x93\x90\x40\x41\x63\x22\x73\x1a\xac\xc8\xcd\x3e\x1b\xa0\xb3\xba\x43\x95\x48\xa1\x83\x13\x17\x53\x55\x57\x01\x05\x02\x82\x5c\xf7\x66\xc6\x80\xf5\xe8\xb0\x87\x2d\xcc\x4a\xf1\x14\x72\x2e\x28\x99\x56\xb4\xa4\x42\x33\xec\xf4\x81\x7d\x6c\xad\x98\xea\x49\x1e\x0d\x0a\xab\xda\xd3\x88\x47\x15\x89\x95\x99\xa2\x35\x25\x60\xff\xe3\xce\x8e\xea\xb3\xa7\x5f\xaf\xdd\x72\xff\xdc\x6a\x0f\x8d\x17\x87\x3f\x9c\x0c\xff\x1f\x1d\xfe\xe3\xd3\x91\xfd\xcf\xd3\xe1\x9f\xff\x77\xf0\xfc\xd3\x57\xc1\x9f\x9f\x8e\xbf\xf9\x6d\x17\xf6\x7a\xd5\x69\x64\x5e\x2b\xa0\x6d\xee\x38\x74\x60\xbe\xba\xae\x25\xdc\x90\x1c\xc0\x94\xd6\x3f\x63\xa7\xbb\x4e\x41\x69\x07\x24\xdd\x0c\x08\x34\xba\x77\x8d\x67\x40\xf1\x8c\x58\x3a\xb2\x12\xee\x28\x91\xf9\x93\xc0\x3c\x65\x44\xeb\x37\x54\xcc\x49\x4d\xd6\x50\x28\x6d\x62\xba\x82\x2c\x45\x9a\x94\x52\xa9\xc8\xc5\x70\xc5\x88\x97\x5c\x91\x58\x8e\x59\x42\x41\x16\x2f\xc7\x5c\x97\xb4\x9c\x07\xaa\x87\xeb\x90\x50\x29\x36\xa9\x32\x72\xa4\x18\x23\x23\x21\x53\xb6\x48\x5d\x8f\x91\x86\xd2\x31\xcf\xb8\x9e\xa3\xd2\x9c\x48\x31\xc9\xb8\x55\x01\x5c\xf8\x83\x6b\x1b\x3d\x65\x9f\x09\xd7\xd8\x55\x0d\x43\xce\x8e\x52\xa1\x9e\x3d\xfb\xfa\xf7\x97\xd5\x38\x95\x39\xe5\xe2\x55\xae\x9f\x1c\x7f\x73\xf4\x73\x45\x33\xd0\x1d\xdf\xd2\x9c\xbd\xca\xf5\x5e\x91\x86\x31\x5b\x7c\xf6\xc7\x16\xa7\xe8\xe8\x03\x9e\x95\x4f\x47\x1f\x86\xf6\x7f\x5f\xb9\x5b\xc7\xdf\x18\x5d\x73\xdd\xef\xc7\x5f\x99\x35\x04\x27\xf0\xd3\x87\x61\x7d\xfc\x46\x9f\xbe\x3a\xfe\x26\xf8\xed\xf8\xb7\xbd\x87\xa6\x76\xb9\x04\xba\xd7\x9d\x79\x6a\xec\x18\x5e\x91\x6a\x7a\x6c\x9a\xbf\x2f\x7a\x6e\x16\x26\x8f\x1e\x9c\x25\x15\x10\x93\xe8\x23\x81\x8f\xa7\x39\x44\xcb\x72\x88\x5d\xb9\x7b\x9a\x6b\x44\x49\x17\x71\xc3\x6b\xfa\x40\xeb\x0d\xf1\xf9\x69\xe1\xf9\x9f\x6c\x76\x51\x60\x42\x03\x4b\xf8\x3c\x8e\x8e\x92\x60\x39\x8c\xeb\x0d\xf9\x64\xd3\x25\x76\xc1\xde\x87\xd4\xfb\x90\x7a\x1f\xd2\xc3\xf0\x21\x35\x8f\x3c\xf8\x92\xa0\x1f\xaf\x0a\x3c\x11\x34\xcd\xb9\x58\x71\xfc\xd7\x9f\x7b\x4b\x1d\x06\xa4\x90\x46\x96\xe1\x60\x35\x97\xd7\xac\x2c\x39\xc4\x4c\xe2\x3b\x25\xab\x3b\x58\x86\xf9\x0b\x1d\x19\x61\x53\x56\x64\x72\x9e\xaf\xaa\x7b\x7f\x3b\xe1\xe8\x76\x91\x1d\x47\xc0\xf7\x86\xdf\xde\xf0\xfb\x05\x19\x7e\x7b\x6b\x6e\x6f\xcd\xed\xad\xb9\x4b\xae\xde\x9a\xdb\x5b\x73\x7b\x6b\x6e\x6f\xcd\x5d\xb8\x7a\x6b\xae\x7d\xa6\xb7\xe6\xf6\xd6\xdc\xbb\xb6\xe6\xd6\x97\x8a\x2a\x42\xdf\x91\x5a\xd9\x26\xda\x69\x41\xa1\xb7\xbd\x79\xad\x4a\x1f\x6b\xe6\x4b\xd4\x79\xae\x95\xcb\x54\x05\xcd\x7d\x14\xf6\xf0\x6b\x59\x0c\xbc\x1b\xad\xbd\x0f\x9d\xea\x35\xe8\x5e\x83\xee\x43\xa7\xe2\xab\x57\xb6\xfd\xd5\x2b\xdb\xbd\xb2\xdd\x2b\xdb\xbd\xb2\xdd\x2b\xdb\xcd\xab\x57\xb6\xf1\xea\x95\xed\x5e\xd9\x5e\x72\x3d\x0e\x65\x7b\x5d\xe8\xd4\xc4\xa0\xac\xbb\xb9\x29\x76\x8a\x84\x41\x35\x5f\xf7\x41\x35\x7d\x50\x4d\x1f\x54\xd3\x07\xd5\xb8\xeb\xae\x83\x6a\x62\x0b\x1c\x46\xbe\x44\x16\x37\xc0\xd9\xa2\x94\xd7\x3c\x65\xaa\x11\x82\xe3\x8b\x35\x06\x5c\x26\x87\xf6\x8e\x75\x58\x0d\xbb\x9b\xa0\x9a\xde\x3c\xd7\x9b\xe7\x7a\xf3\x5c\x6f\x9e\x8b\xaf\xde\x3c\xe7\xaf\xde\x3c\xd7\x9b\xe7\x7a\xf3\x5c\x6f\x9e\xeb\xcd\x73\xcd\xab\x37\xcf\xe1\xd5\x9b\xe7\x7a\xf3\xdc\x92\xeb\x71\x98\xe7\x42\x0c\xea\xd3\x2b\x7a\xed\xb3\xd7\x3e\x1f\x9e\xf6\xd9\xab\x94\xbd\x4a\xd9\xab\x94\x4b\xae\x5e\xa5\xec\x55\xca\x5e\xa5\xec\x55\xca\x85\xab\x57\x29\xed\x33\xbd\x4a\xd9\xab\x94\x7d\x7a\xc5\x96\xe9\x15\xef\x5e\xbf\x09\xe2\x39\x30\xce\x23\xc0\x2c\xe8\xce\x0e\x55\x9b\x1d\x4f\xee\x7d\xb1\xbd\x36\xdc\x6b\xc3\xbd\x2f\xd6\x5e\xbd\xe2\xdc\x2b\xce\xbd\xe2\xdc\x2b\xce\xd1\xc6\xf5\x8a\x73\xaf\x38\xc7\x5b\xd9\x2b\xce\xdb\x03\xad\x57\x9c\x7b\xc5\x79\xc9\x56\x7c\x19\x8a\x73\x5f\x65\x56\xcb\x12\xaa\xc7\xde\x7d\x85\xd9\x6f\x7d\x7f\xd8\xc5\xea\xb2\xf0\xdb\xca\xca\xb2\x38\x61\xf8\x69\x59\x55\x59\x89\x58\xb9\x58\x4e\xd6\x75\xa4\xbd\x87\x52\xb2\xd8\x55\xca\x2a\x0e\x95\xe0\x20\xf6\xe4\x55\xa6\xb9\x66\x82\x8a\x64\x0e\x6c\xf6\xdd\xeb\x37\x24\xa7\x82\x4e\x83\xc6\x50\x6a\x44\xce\x34\xd0\x1b\x5d\xfa\x4e\x60\xb6\x79\x95\x4f\x00\x09\x7b\x65\x41\x25\x0a\xdf\xae\x0a\x14\x8e\xa0\xfd\x90\x11\x00\x0d\xfb\x80\xd6\x56\x61\x57\xab\xdf\x34\x0f\x78\x9f\x12\xd3\xa7\xc4\xf4\x29\x31\x0f\x24\x25\x06\xe8\xc7\xca\x7e\x85\x11\x91\xd9\xa1\x11\x97\xed\x59\xb6\x28\x5f\x55\x05\xd8\xd6\xbc\x05\x8b\x9c\xe2\x93\x5b\x98\x58\x15\xcb\x58\xa2\x65\xb9\x4c\x78\x8b\xdb\x08\xdb\x07\xed\x1b\xb8\xcc\x68\x69\x87\x6a\x3d\xdd\x6a\xb1\xd2\x4d\xb3\x25\x20\xba\xe8\x64\xf6\xf2\x73\x01\x96\xc6\x15\xa6\xe1\x85\xd9\x37\x5f\xc2\x13\xe5\x3a\x36\x66\x74\xcc\x32\x0f\x0a\x47\x49\x73\x3c\x32\x28\xa9\xd5\x77\x40\xc0\x3c\x79\x7b\xba\x68\xe5\x8e\x17\xb8\xca\x30\x4d\xd6\x1b\xa7\x17\xa6\x7e\xb2\x66\x7a\x96\x30\xb8\x5f\xc0\xaa\xe0\x95\x57\x24\x7a\x03\x42\xc9\x15\x9b\x23\x7d\x8c\xb2\xb4\xcc\xc3\x25\x03\x6a\x0a\x9b\x79\xc5\xe6\xf0\x90\x25\x96\x1b\x04\xcc\x4e\x9a\xd0\x5f\xb1\x55\x10\xc2\xdf\xdd\x64\x57\x0b\xa8\xad\xda\xbd\x5f\xb1\xf9\xba\x9f\x1b\x00\x37\x70\xf0\x36\x44\x03\x79\x73\xc3\x1b\x6c\x3c\xb0\x69\x51\x64\xd0\xf8\x50\xae\x06\x15\x69\xdf\xc6\xdc\x2d\x75\x8b\x89\xfa\xad\x0c\x2c\x4e\xb0\xd9\x87\x0a\x37\xd6\x60\xfa\x8c\x17\x56\xc8\x40\xd1\xc2\xb1\xc2\x1f\x68\xc6\x03\x31\x06\xb0\xfa\x4c\x0c\xc8\x5b\xa9\xcd\x3f\x2f\x3f\x73\x43\xea\x0d\x3e\x9c\x4a\xa6\xde\x4a\x0d\x77\x3a\x59\x2a\x4e\x61\x8b\x85\x5a\xcd\x8e\x07\x9e\x12\x39\x89\xf8\xa1\x11\xc3\x26\x51\x3a\xa0\x79\xfa\x4c\x18\x75\xd2\xae\x28\x32\x86\x98\x21\xf2\x4a\x01\x03\x13\x52\x0c\xd1\x7e\xb1\x6c\x0c\x0b\x08\x59\x46\x70\x58\x33\x9c\x1d\x0a\xec\x24\xf8\x0b\x4a\x40\x99\x11\x65\x49\x8a\xed\xa7\x81\x9b\x1b\xa2\xcd\x13\x82\xde\x0e\xf0\x39\xb4\x01\xef\x3a\xba\x82\xd7\x06\xea\xd2\x72\xaf\x80\x64\xbe\x36\x07\x60\x0b\x12\x8b\xcf\x23\x59\xca\x69\x61\xb6\xe9\x9f\x86\xfa\x00\xa4\xfe\x45\x0a\xca\x8d\xc4\x7c\x02\xd2\x7f\xc6\xa2\xdf\x6c\xd7\xcd\x70\x18\x33\x02\x57\xc4\x90\x92\x6b\x9a\x19\x7a\x07\xf6\x79\xc2\x32\xa4\x7e\x46\x48\x6f\x10\xf6\x01\xb9\x99\x49\x85\xc4\x0c\xad\x54\x5c\x91\x83\x2b\x36\x3f\x18\x2c\x6c\xed\xc1\x99\xb0\x6e\xaa\x85\xcd\xf4\x44\x14\x7a\x92\x1e\xc0\x6f\x07\xbb\xf3\x82\xb5\xc4\x92\xa6\x68\x3e\xa0\xd9\x79\x0b\x6a\xb6\x76\xdf\x62\xff\xb2\xd1\xa0\x5a\xf0\xf5\xe6\x2b\x8e\xf8\x61\x6a\x6e\xa8\x9b\xc0\x93\x84\xe2\xa3\xd6\x0f\x0c\x9d\x75\xd1\x3c\x62\x9b\xd1\x16\x99\x9c\x7b\x38\x1f\xa9\x63\xdc\x59\x23\x8f\x3a\xd8\x83\xa6\xb7\x5a\x34\x58\xb5\x38\xa3\x3e\x24\xe7\x98\x41\x9c\x9e\x9c\x9f\x6d\x6e\xd4\x7c\x09\xaf\x10\xcd\xb2\x0c\xbd\xd8\x46\x66\xd5\xd2\xca\xac\x4b\x45\x98\x22\x18\x3f\x50\xf2\x57\x4e\x76\x55\xef\x5f\x14\x85\xbc\x12\xbb\x79\xae\xef\x1b\x2f\x58\x72\xc7\x3e\x17\x19\x4f\xb8\x76\xf4\xbb\x96\xad\x40\x1f\x82\x97\x80\x70\x71\x90\x06\x14\xd3\x83\x5a\x56\xe3\x8a\xf0\xa9\x90\xe5\x72\xfc\xbc\x9d\x08\x76\x42\x3e\x0f\xaf\xaa\x31\x2b\x05\xd3\x4c\x0d\x8d\x8c\x35\xb4\x2f\xb0\xc5\x23\xd0\x14\x61\x37\x41\xe9\xe0\xfb\xf8\x85\x48\x01\xb5\x83\x39\xda\x3a\x5f\x68\x54\x0d\x4f\x79\x08\xc2\x79\x2e\x19\x5a\x0c\xbd\x03\x45\xdf\x48\xa2\xaa\xc2\x26\x99\x37\x86\x34\x47\x93\x7c\x14\x4e\xd0\x7e\x5e\x37\x97\x06\x42\x01\xf1\x12\x2e\xb7\xdd\x9e\x2c\xab\x29\xc3\x76\xe5\xf2\x9a\x39\x35\x16\x59\x82\x61\x06\xc5\x8c\x2a\x56\xeb\x60\xaa\x4a\x12\xc6\x52\x96\xe2\x0f\x96\x95\xb0\xc9\x84\x25\x9a\x5f\xb3\x6c\x0e\xc6\x7f\x85\x22\x89\xff\xbe\xc1\x6c\xfc\x7c\xbd\xe0\xc6\x17\x05\xfb\xac\x9d\x92\x4e\x38\x28\xe1\xb1\xa5\xa2\xf4\xcb\x9d\x51\x45\x26\x94\x67\x46\xaf\xfb\x28\xc8\x7b\x96\xcc\xce\x4b\x76\xcd\xd9\xcd\xf7\x42\xd1\x09\x7b\x45\x79\xf6\x4a\x96\x37\xb4\x4c\x03\x18\xdc\xc6\xf2\xcd\xac\xfc\x6f\x38\x25\x07\x97\x13\x4f\x38\xb3\x79\xd0\xe6\xdb\x7a\xc6\xcc\x7a\x6f\xdc\x02\xcf\x33\x03\x31\x70\xb8\x52\xa3\xd0\x7a\x8c\x22\x25\x9b\xb0\x92\x09\x73\x9e\xa8\x1b\x3f\x78\xc9\xb3\x87\x04\xdb\x5f\xd7\x1d\xca\xad\xde\x8b\x8e\x31\x0a\x1f\x73\xd0\x73\x6e\x20\x66\x44\x05\x68\x07\x82\x67\x37\x30\x1a\x7d\x14\xe4\xc7\x93\x8b\xb7\x67\x6f\xbf\x7d\x0e\x5c\x65\x1d\x84\x17\xf1\x9a\x2b\x52\xc1\x53\x81\xd5\x43\x55\x99\x36\x28\x5e\x09\xef\x2f\x1a\xb3\x19\xbd\xe6\xe6\x0c\x94\xd6\x1e\x72\xcd\xb0\x2d\xbd\x51\x83\x49\x26\x95\x19\x27\x63\x4a\x91\xb9\xac\x30\x8e\x27\x65\xac\x40\x17\xb7\xd2\x54\x40\x33\x13\xeb\xcf\x68\x2e\x82\x8c\x99\xf9\xd5\x59\xc4\x16\x4e\xd7\x32\x7f\xc2\x06\xca\xe1\x34\xdd\x15\x8a\x2c\x59\xeb\xf0\x18\xae\x79\xcb\xfc\xba\x0e\xc4\xb1\xda\xdf\x3e\x60\x0a\x15\xff\x75\x1d\xb8\xc3\x07\x2f\xb6\xd7\xfd\x57\xeb\x51\x18\xf8\xf1\x3d\x62\xe1\x16\x1a\xff\xfa\xa0\xaa\x68\x95\x41\x70\x4d\x43\xf6\x5e\xc6\x39\x83\x20\xa1\x2e\x99\x4d\x1f\xad\xd5\x47\x6b\xf5\xd1\x5a\xcb\x7e\xef\xa3\xb5\xfa\x68\xad\x3e\x5a\xab\x8f\xd6\xea\xa3\xb5\xfa\x68\xad\x3e\x5a\x8b\xf4\xd1\x5a\xf5\x33\x7d\xb4\x56\x1f\xad\x75\x7f\x69\x4e\x81\x62\xba\x51\xc7\x7c\x5d\x3f\x8b\xd2\x89\x76\xf1\x50\xee\x64\xc6\xa2\x61\x53\xeb\xb4\xa7\xd8\xf0\x63\x3b\xcc\xd6\x86\xe5\x36\x42\x97\x68\x6f\xc8\x8d\x4d\xb8\x81\xe5\x64\xc1\x3b\xee\x39\x50\xb4\xa8\x87\x6a\xaa\x8d\x9d\x0b\x17\x6c\xb2\xa5\x6f\xe1\x82\x4d\x42\x6b\x1b\x02\x26\x76\x29\xd8\x88\x15\xef\x73\xb8\x85\xf0\x81\xd5\x31\x4e\x4b\x97\x60\x84\x7d\x67\x32\xb5\xf8\x68\xd7\xb0\xd2\x17\xba\xf1\x48\x03\x3f\x3e\xa7\x7a\xd6\x6a\x06\x87\x67\x16\x6c\xe0\x38\x04\x57\x6e\xc1\x59\xc2\xa2\x30\x2a\x90\xe3\x18\x4d\xed\x4d\x23\xf8\x94\xcc\xfe\x36\x40\x89\xc3\xba\x4b\xeb\x30\x2b\x23\x34\x11\x6a\x08\x31\x4f\xc9\x7f\x5d\xbe\x7b\xfb\xe4\x5b\x69\x65\x05\xa3\xcd\x28\xdb\x30\x29\x67\x42\x0f\x88\xaa\x92\x19\xa1\xca\x4c\xcd\xe8\xb7\x97\x60\x7a\xc8\xa9\xe0\x13\xa6\xf4\xc8\x8e\xc6\x4a\xf5\xe1\xeb\x4f\xa3\xd8\xe2\xc1\xad\x4f\xd5\x05\x23\x59\x04\x80\xb3\x61\x16\xe3\xdf\x05\xa1\x15\xa6\x54\xc8\xd4\x4e\xfa\x06\x26\xab\xe9\x15\x23\xd2\x4e\xb6\x62\xc0\x14\x9e\x93\x03\x83\x26\xc1\xa7\xff\x69\x0e\xd6\xbf\x0e\xc8\xd1\x0d\x58\xf5\x0f\xcc\x9f\x07\xf8\x41\x1f\x3b\x66\xee\x05\x1c\xdf\x7e\x18\xe5\xfb\x92\x4f\xa7\x20\x6e\x81\xe9\xf6\x9a\x09\x7d\x0c\xfc\x6d\x42\x84\x0c\x1e\x16\xd6\x45\x56\x3b\xc6\x9a\x13\xf9\xf0\xf5\xa7\x03\x72\x14\xaf\xcb\x88\xa0\xec\x33\xf9\xda\x3b\xc3\x0a\x99\x1e\x3b\xad\x75\x2e\x34\xfd\x0c\x8a\xc1\x4c\x2a\x26\xd0\x97\xa0\x25\x1a\x64\x95\x34\xca\x27\xcb\xb2\x21\x0a\x98\x29\xb9\x41\x1b\x9c\x03\x25\xfa\x93\x0b\x5a\xea\x46\x64\xdd\xfb\x77\xa7\xef\x9e\xe3\xd7\xcc\xb6\x4d\x85\xd3\x72\x27\x5c\xd0\xcc\x5a\xb6\xbd\x7c\x68\x26\x52\xe1\x26\x69\x69\x55\x5b\x67\xd4\x9d\x54\xba\x2a\xd9\xa8\x19\x69\xd5\x1a\xe3\x97\x85\xb9\x2d\x47\x76\x08\x77\x6b\x1e\xb4\x7b\x0c\x26\x6b\xbd\x44\xb1\xc2\xd9\xba\xb8\xc4\xb7\x01\x0e\xae\x5d\x62\x4d\x9a\xcd\x2a\x53\x99\x28\xb3\xc0\x84\x15\x5a\x3d\x91\xd7\x86\x74\xb2\x9b\x27\x37\xb2\xbc\xe2\x62\x3a\x34\x48\x36\xc4\x9d\x57\x4f\x80\xc5\x3c\xf9\x37\xf8\x67\xaf\x15\x01\x9f\x6a\xbf\x2c\x8c\x69\xbd\x83\xb5\x01\xfb\x7c\xb2\xf3\xd2\x9c\x7c\xb9\x0d\x27\x38\xbc\x74\xca\x5f\xe3\x6d\x73\x5c\xd0\x17\x6e\x83\x5d\x03\x0a\x97\xd3\x14\x49\x20\x15\xf3\x5b\x47\x63\x03\x40\xd0\xf1\x93\xf9\xd0\x46\xa3\x0f\xa9\x48\x87\x5e\xbe\x4e\xe6\x3b\x43\xac\xe2\x2d\x0f\xf0\xf7\x67\xa7\x77\x83\xdc\x15\xdf\xea\xb4\x76\x95\x4b\x40\xa2\xf8\x73\x9a\x15\x33\xda\x55\xef\x85\x3e\x0a\x1d\xae\x3e\x0a\xbd\x8f\x42\xef\xa3\xd0\xeb\xeb\x81\x44\xa1\xf7\x51\xe4\x7d\x14\x79\x1f\x45\xbe\xfa\xe7\x3e\x8a\xbc\x8f\x22\xef\xa3\xc8\x9b\x57\x1f\x45\xde\x47\x91\xf7\x51\xe4\x7d\x14\xf9\x92\xab\x8b\x82\x75\x8f\x30\xfe\xb2\x77\x8e\x3d\x0e\xe7\x58\xef\xee\xea\xdd\x5d\xbd\xbb\xab\x77\x77\xed\x80\xf1\xbd\xbb\xab\x77\x77\xf5\xee\xae\xde\xdd\xf5\x40\xdd\x5d\x5b\x75\x19\x7f\xd4\xb5\xb3\xee\xbe\x6c\x16\xdc\x5a\xac\x98\xb5\xb2\x58\x96\xad\x93\xb5\x50\x0c\xab\xae\x83\xf5\x02\xd3\x29\x6f\xbf\x08\x56\x6c\x00\x74\x0d\x9a\xb7\x68\xca\xde\x3b\xf4\x7a\x87\x5e\xef\xd0\xdb\x74\x4a\xb6\x70\xe8\x81\x2f\x2f\x3c\x0a\x56\x1d\xa9\x53\x38\xde\x2d\x77\x6d\xac\xfe\x74\x7b\xd3\x8a\xb5\xaa\x84\x9f\x77\xb9\x28\xf5\xf7\x03\x0b\x0b\x9c\x14\xb3\xa1\x89\xcc\x0b\x29\x0c\x62\x74\xe3\x5c\xac\xc7\x6b\x91\xb0\xea\x1e\xb5\xf7\xc7\x2c\x0c\x26\xb7\x9e\xad\xbc\x90\x8a\x45\x76\xdc\x1d\x14\xef\xf5\xae\xa9\x21\x3a\x7d\x9c\x09\x6d\x07\xc5\x3d\x7a\xbf\x95\x2c\xf2\x3a\x7c\xc3\xba\x26\xc1\xf3\xf4\x73\xc5\x4a\x6c\xa3\x5f\x3b\x70\x6a\xa0\x38\x93\x2b\xba\xa4\x22\xb0\x1c\xae\xd9\xcc\x96\x60\x6a\xb3\x54\xb2\x85\x3f\x76\x61\xd5\x77\xea\x93\x25\xad\xfd\x27\x2d\xbc\x27\x0f\xdb\x3f\x4b\xda\xfa\x68\x49\x4b\x3f\x2d\x69\xe1\xab\x25\xed\xfc\xb5\xa4\xb5\xcf\x96\xb4\xf1\xdb\x92\x5b\xf6\xdd\x92\xf6\x4e\x4d\xd2\xda\x87\xbb\x30\xe9\x07\xe7\xc7\xdd\x72\xd9\x6d\xfc\xb9\x0b\x8b\xee\x7d\xba\x0d\x50\x6f\xf6\xeb\x92\xb6\xbe\x5d\xd2\x3e\x3d\x69\xa3\x8f\x97\xf4\x7e\xde\xed\xf8\xcb\x46\xa2\xbb\x9d\xbf\xb7\xd5\x5e\x96\x6c\xd2\xce\x49\x7f\xc1\x26\xb8\x98\x40\x9c\xa8\x1d\x1d\x72\xa5\x0c\x51\x4b\x1d\x03\x4b\x45\x5d\xfd\x9c\x48\x76\xb9\x9b\x88\xa8\x0b\x9e\xcc\x2e\x42\xe3\x15\x0d\x6c\x59\x40\x23\xdd\x6c\x07\x84\x89\x92\x27\x33\x37\x59\x23\xe4\x5a\xcf\xda\xfa\x9a\x27\xe1\xb4\x37\x6c\x68\x3b\x76\xb6\xd9\x9b\xb3\x64\xa1\x3b\xf8\x74\xc2\x89\x6f\x24\xde\xeb\x0b\xca\xac\x98\x54\x50\x09\xa4\x91\x81\x6f\xf5\xf0\x28\x4b\xdd\x63\xd0\x1d\x86\xb6\x2c\x9f\x6e\x3d\xdb\x70\xb2\xd4\x25\xa8\x2e\xd6\x6c\x11\xf5\xe4\xad\x43\x76\x4d\xae\x7d\xb8\x8c\x16\x62\x57\x7b\xc1\x6b\x63\x3d\x90\xf0\xc1\x95\x95\x41\xea\xab\xbd\xf4\xb5\x5d\xb5\x90\xfa\x5a\xf0\x83\xef\x53\x1d\xa4\x2b\x4e\x57\x5f\x6d\xcb\x74\xc4\x60\x40\x27\x7c\xa7\x20\xb8\xa1\x10\x6d\x32\x5e\x88\x41\xb8\x97\x45\x6e\xac\x4a\xb2\x62\x75\x27\xfb\x16\x25\xe9\x7a\xf1\x9b\x0a\x51\xac\x58\xc7\xfb\xed\xaa\x4b\x74\x3d\xeb\x4d\xf5\x0f\x56\xcc\xfa\xb2\xd3\x4a\x08\x3b\xce\x7d\x7d\x51\x82\x15\x33\x7f\xdf\x2c\x4f\xd0\xe1\xb4\x36\xc6\x2d\x2c\x99\x4f\x1f\xbd\xd0\x47\x2f\x3c\xf0\xe8\x85\xad\xce\xc0\xba\x48\x86\x65\xe8\xff\x50\xe3\x19\xb6\x5a\xf4\xba\xd8\x86\x65\x8b\x7e\x20\x11\x0e\x5b\xaf\x71\x6d\xb4\xc3\xaa\x85\x3e\x90\x98\x87\xad\x16\xdb\x32\xfe\x61\xd9\x92\xbf\xe4\x28\x88\xad\x60\xb8\x26\x22\x62\x19\xdc\x1e\x44\x5c\xc4\xca\x05\xfe\xaa\x1b\x8b\x85\xe5\x8f\xef\x2e\x40\xe2\x32\xf8\x6a\x23\x48\x22\xfc\x69\x21\x50\x22\x9a\x2d\x06\x4b\x2c\x69\x2a\xa6\xaa\x71\xf8\xff\x66\x54\x85\x8a\x3f\xde\xa6\xc3\x58\x68\x5f\x83\x98\x80\x17\x32\xab\xf2\xd0\xc6\x31\x5c\x14\xfd\x0b\x9a\x5c\x19\xad\xc5\x7e\x6f\x0c\x9e\xb5\x00\x39\xff\xae\xa4\x00\x89\x92\x8c\x40\x0c\x31\x10\x0c\x7e\xc6\xfd\x39\xc7\x41\x7e\xb3\x16\x83\x97\x7e\xde\xd5\xa8\xb6\xde\x7a\xa7\x81\xd4\xc2\x4f\xb1\x30\x74\x73\x46\xf8\xea\xc2\x9c\x2e\x9b\xb7\x5b\x4f\x69\x46\x85\x60\x99\xa1\x05\xe8\xd1\x07\xe9\xce\xc3\x67\x3d\x78\xec\xcb\x0b\xb3\x79\xb1\x70\x7f\xc9\x74\xa2\x14\xfd\x7d\x63\x64\x42\x14\x25\x57\x8c\x15\x2a\x70\x96\x54\xe0\x53\x81\x5c\x90\xf1\xdc\xa8\x77\xc9\x15\x94\x1b\x05\xa9\x0c\xd6\xfb\x02\x37\xa6\xe3\x04\x7a\x40\xf6\x82\x25\xc1\xad\x3e\x04\xa7\x0f\xc1\xe9\x43\x70\x36\x9d\xb1\x16\x21\x38\xe1\x81\x8f\xc2\x70\xa8\x20\x27\x45\x91\x81\x51\xca\x95\x86\xb5\x35\x07\x6d\xc1\x8d\x05\x4b\xdc\x8e\xe9\x45\x0d\xe6\xe0\x6e\x2f\x50\xe8\xf8\x07\xcf\xd4\x1a\x4f\xac\x8d\xb0\x41\x7a\xba\x4c\xbe\x5b\x2b\x1d\x26\x52\x4c\xf8\x74\x73\x5e\x4c\x00\xcb\x17\xf0\x4a\xed\x31\xc3\x21\x2a\x5b\xd9\xb6\xe6\x54\x90\xbe\x15\xf1\xed\xdb\x48\x8e\x99\x80\x04\xb6\x32\x3c\x20\x5a\xc5\xd9\xa4\x9e\xde\x00\xa2\x69\x4a\x9e\x5a\xfa\x58\xc8\xf4\x50\x01\x35\x4b\xab\xcc\x96\x9a\xc6\x52\x2c\xe6\x68\x0a\x9e\x99\x95\x0c\xa9\xc6\xf3\xc0\x14\xe6\x3b\x7e\x25\xa4\xfe\xca\x8f\x84\x86\x97\x92\x4f\xb9\x27\x7d\xbe\x65\x49\x21\xd3\x91\x2f\xe6\xa0\xc1\x65\x19\x0f\x38\x22\xdf\x2b\xeb\x60\x76\xc4\xe1\xe8\x9f\xff\x3a\x36\x84\x95\x95\x58\xa8\xd3\x0e\x1c\xbd\xb7\x21\x0a\xa4\xa3\xd8\x1e\x21\x53\x76\xb2\x01\xd4\x0b\xe0\x3e\xf5\xf1\x5b\xe6\x75\xbf\x55\x21\x90\xcb\x2a\x0b\xd2\xc4\x0c\x8c\xf6\x77\xab\xb6\x75\x6c\x14\x68\xe5\x63\xe9\x29\xb8\xed\x2f\xfd\xac\xce\x30\x53\x12\x6f\xbf\xfc\xcc\x92\x4a\x6f\x54\x39\x97\x18\x91\xed\x32\xc1\x20\x95\x65\xf6\x73\x20\x3a\xd9\x1f\xcc\x7a\x81\x71\x1a\xf0\xd8\xd0\x36\x45\x35\x57\x93\x39\xe6\xdd\x3a\x80\xb1\x20\x36\xaa\x3e\x5f\x46\x50\x09\xea\x10\x8f\x2b\x8d\xa5\x4d\xe7\x24\x99\x49\x83\x5f\x14\xe1\x0e\xe3\x5e\x73\x89\x01\x44\x60\x0f\x2e\x49\x6e\x38\x80\xd5\xee\x82\xe1\xd1\xe3\x5d\xbf\x66\x54\x61\xa9\x74\x0d\x2b\x17\x54\x63\x86\x01\x3b\x9b\xf9\x63\x6a\xd4\x15\xf0\xf8\x55\xb9\x19\xf4\x86\xf1\xe9\x4c\xab\x01\xe1\x23\x36\x82\xdd\x65\x34\x99\x05\xc3\xe6\x8c\x69\x45\x68\x96\xf9\xc6\x24\x01\x4a\x84\xee\xf6\x23\xcf\x34\x2d\x83\x1b\x78\x7a\xdb\xdc\xb5\xa5\xe0\x1a\x10\xa6\x93\xd1\xf1\x00\x3c\x78\xe6\xb4\x50\x98\xe3\x78\x4e\xb8\x86\x5a\xdc\xc0\xa0\x4b\x59\x4d\x71\x25\x36\xd0\x40\x79\xe9\xc8\xda\x67\x45\x0a\xda\x84\x98\x92\x03\x5c\xdc\x81\x13\x78\xcc\x70\xd6\xe4\x0a\xeb\x73\xa5\x65\xd1\xe2\x59\x96\x4c\x15\x12\x7b\xb0\x34\x23\x17\xfe\x8f\x7f\xe9\x48\x1d\xd7\xc0\x9c\xf1\xe9\xcc\xc1\x92\x96\x48\x53\xe2\x3d\x68\xe7\x7c\x6c\x13\x46\xd2\x32\x88\x24\xf6\xf3\xb8\x72\xf1\x35\x4e\x04\xbb\xa7\x59\x99\x7b\x18\xc0\x06\xa3\xae\x6f\x8d\xb2\xb9\xcd\x61\x46\x20\x92\xa7\xe4\x08\x50\x84\xeb\x43\x05\xe8\x3a\x94\xc5\xf1\x88\x9c\x80\xb6\xdb\xe2\x03\x42\xfa\xf1\xed\x40\xe6\xa3\x4a\xd6\x63\xb5\xf3\x59\xb4\xf3\xd4\x6e\xe3\xab\x35\xdc\xbc\xf0\x26\xa5\x56\x8f\x23\x4c\x36\x3e\xba\x8d\xdf\x96\x04\x73\x68\xf3\xf4\x82\x4b\x0f\x50\xba\x0e\x5b\x64\x65\x3e\x20\x54\x29\x99\xf0\xba\x71\xd2\x22\xa6\xe3\x4a\xda\xf8\x71\xb6\x84\x3f\xd9\x7a\xfd\x64\xcb\xc0\xd4\xf8\x6a\xc6\x77\xda\x90\xd4\x18\x2a\x11\xc1\x1a\xcf\xe1\x57\x70\x14\x8e\x59\xb6\x21\x3a\x33\xbc\xb6\x09\xfe\x72\x57\xeb\x20\xb0\x15\x0b\x5a\xb9\x90\x7b\x8b\x57\x5d\x06\x93\x2d\x90\x03\xaf\x6d\x8e\x69\x7d\xb5\x89\x6c\x6d\xbe\xd1\x2a\xce\x35\xbe\xb6\xc7\x5f\xbc\x5a\xc5\xc0\xc6\xd7\x82\x48\xd2\x55\x28\x6c\x7c\x6d\x19\x92\x50\x5f\xed\xc3\x64\xd7\xac\xeb\xe2\xb6\x62\x65\x07\x71\xa0\x2c\xf9\x56\x23\xae\xbf\x6e\x49\xd9\x3a\x00\x50\xdb\x80\xda\x35\xe0\x39\x79\x34\x41\xb5\x4b\x86\xfa\x56\x9b\x61\x5e\xaf\x7c\x19\x1c\xb6\xd4\x05\x97\x5a\xe1\x6d\xd0\x28\x48\x03\xb6\xa8\xa2\x64\x86\x61\x61\xef\x2f\xdb\x09\xe5\xd6\xe2\x78\x97\xed\xfe\x76\x84\x1d\xaf\xad\xc9\x7b\xf8\xc1\xad\xd0\x0d\x58\xe4\x2b\x68\x9c\x75\x37\xdc\x11\x9b\x74\xf5\xdc\xb1\xe7\x8e\xf1\xd5\x73\x47\x7f\xf5\xdc\x71\xc3\xd5\x73\xc7\x9e\x3b\xde\x3a\x77\x44\x5d\x76\x07\xe5\xf9\x47\x34\x71\x34\xb5\x65\xe0\xb4\xce\x2f\x14\xab\xcd\x86\xdf\xb8\x04\x8a\xf7\xa0\x6a\x5b\xdb\x71\x09\xb1\x61\xcf\x86\xcf\x9e\x3e\xdd\x46\xa9\xde\xd4\xf0\x2d\xbc\x82\xe6\x6f\xbf\xff\x7a\xed\x1b\xab\xec\x6f\x1d\x58\x4d\x2d\x8e\x7b\x43\x5e\x24\x3b\xac\x30\x7c\x02\x75\x12\x52\x93\x9c\x69\x42\x75\x64\x2a\xe2\x39\x1b\x38\xc3\x72\xdd\x62\x7b\x5c\x9b\x66\x53\x22\x85\x8b\x54\x94\x29\x1b\xed\x36\x83\x84\x51\x05\xf9\x26\x63\xe6\x67\x21\x73\xf3\x55\x2e\xb4\x3b\x2e\x66\x0a\xcc\x41\x85\x1c\xb1\xd1\x74\x44\xd2\x8a\xd9\x04\x27\xf4\xd3\xd9\x76\x56\x6a\xae\x34\xcb\xc1\x92\x2b\x4b\xdf\xf4\x4d\x97\x10\xa3\x08\x81\x92\x15\xcd\xb2\x39\x61\xd7\xdc\x66\xfb\x9a\xc1\xc1\x4d\x08\x35\xe1\xcd\x4a\x5a\x99\x08\x3b\xcf\x4f\x68\x62\xf0\xa6\x54\x85\x6d\xb8\xfd\xc2\xd8\x5b\x47\x1a\x5f\xd8\x95\x8c\x56\x0a\xab\xda\x8c\x8b\x36\x70\xf8\x2f\x20\xd7\xbb\x8b\xcd\x26\x57\xb2\x35\x25\xdb\x82\x7a\x35\xc5\xd2\x2a\xcb\x0c\x62\xa0\x15\x76\x71\x01\x4b\xac\xa3\x4b\x12\xd9\xd0\xf0\x9e\x07\x09\x6d\xd8\xc4\x5c\x16\x32\x93\xd3\x79\x08\x69\xec\x20\xc7\xf3\xc2\x19\xc7\xd1\xab\xc7\x7c\x83\xe6\xb7\x8d\xad\xe9\x2d\x7f\xbd\xe5\xaf\xd7\x6d\x16\xae\x5e\xb7\xf1\x57\xaf\xdb\x6c\xb8\x7a\xdd\xa6\xd7\x6d\x7a\xcb\x1f\xe9\xb9\xe3\x1a\x98\xf4\xdc\x91\xf4\xdc\x71\xe5\xba\x7a\xee\xb8\x16\x3c\x3d\x77\xec\xb9\xe3\xb2\xab\x90\xe9\x1e\x81\x8e\x85\x4c\xd7\xc4\x39\xa2\xd5\x27\x91\xc3\x4c\x26\xd8\x76\x02\x13\x53\x9d\x9d\x4f\xd1\x1c\x0d\x51\x03\xf2\x0f\x29\x18\x06\xaf\x99\xbd\x01\x73\x12\xd4\x41\x30\x8f\x1f\xa9\xe3\xb5\x81\x4d\x7d\x9c\x64\x1f\x27\xf9\xe0\xe3\x24\x67\x54\xe1\xbe\x22\x51\x5a\x1d\x36\x19\x1c\xc8\xf7\xac\xcc\x1f\x69\xd4\xa4\x41\x17\xbb\xdd\x90\x62\x53\x6f\x29\xae\x3c\xb5\xfe\x02\x96\x9e\xc7\xeb\xb5\xf2\x32\xd6\x6a\x4a\x53\x96\x92\x82\x95\x43\x44\x11\x49\x26\xdc\x16\xb3\x6a\x60\x9f\x85\xcf\xbd\x46\x3f\xc6\xeb\xb8\xc7\x10\xc8\x78\x22\x3b\xd8\x5c\x43\xc3\x71\x44\xe1\x1f\x44\x40\xe4\xb6\x52\xfd\x90\x68\x6b\xe4\xfd\xae\xa5\x5c\xbf\xbd\x68\xde\xaa\xf4\xe9\xe2\xb5\xb4\x9e\xe6\xda\xda\xa7\x03\x5f\xe0\x21\xa1\x0a\x39\xc5\xb6\xaa\xe5\x96\x6a\xd4\x6e\x7a\xca\xee\x96\x68\x72\xef\xe5\x52\x17\xaf\x5d\x45\xb7\x9d\x04\xb7\x87\x5f\x64\x75\x15\x80\xb6\x56\xd0\xc9\xce\x4a\x3a\xd9\x49\x51\x27\xbb\x2a\xeb\x64\x0f\x85\x9d\xec\xa6\xb4\x93\x3b\x28\xf1\xba\x78\xed\xac\xa2\x92\x3d\xf4\x78\xf2\x28\x0a\xc3\x2e\x5e\x7b\x01\x6b\x37\x9d\x9e\xf4\xe5\x64\xb7\xb8\x76\x57\xb9\xc9\xee\x6a\x37\xd9\x1d\x33\x5a\x96\xa5\x5d\xbc\xfa\x42\xb5\x7b\x71\xf6\x1d\x18\xd7\xf6\xc5\x6c\x57\x7d\x7c\x2b\x2c\xf1\x75\x86\xba\x17\x36\x75\xdd\xd9\x30\xec\xb5\xe9\x18\x0c\x84\x5a\x04\xcc\xc5\x47\x8d\x00\x8e\xc1\xfd\xd4\x29\xbf\x95\x08\x2a\xb7\x06\x83\xf9\x0a\xba\x8d\x90\x26\xbb\xf1\x52\x30\x05\x82\x1d\xf3\x26\xa2\xb0\xb9\xa2\x79\x76\x84\xe1\x20\x35\xb7\x13\x69\x33\x40\xa4\x7e\x03\x64\xc4\x9c\x51\xa1\xc8\x81\xb3\x3d\x1d\xaa\xfa\x89\x83\x51\x9d\xdd\xe7\x47\x84\x24\xe4\x30\xa3\x6f\x7d\x53\xf7\x75\x3b\xdb\x4b\xda\xbd\xa4\xdd\x4b\xda\xbd\xa4\xbd\xf4\xea\x25\xed\x2d\xae\x5e\xd2\xee\x25\xed\x75\x1f\xee\x25\xed\x5e\xd2\xde\xfc\xf1\xdd\x24\xed\x5d\xe3\x84\x42\xb9\xd7\x3a\xe7\xb0\x72\x16\xb4\xe6\xf7\x31\x44\xbe\x40\x29\xfc\xaf\x5b\x79\x3b\x94\xa5\x97\x4b\xdb\xa1\x44\xbe\xa0\x5b\x8c\x36\x88\xd6\x5e\xf8\x5e\x78\x73\xbd\xd4\xfd\xb0\x62\xa1\x76\xc0\x8d\xc0\xa1\xb0\x23\x72\xbc\x77\xae\x70\x5b\x69\x6e\xcc\x6a\x3f\x79\x4a\x8e\x9c\xc7\x05\x2a\x44\x0b\xa9\xe3\x1f\x85\xe6\xc3\xfa\x09\xef\x83\x01\xf7\x62\x94\x6f\x93\xc5\xfd\xd5\x44\xa3\xb6\x62\xbd\x9f\x86\x84\xb0\x32\x9a\x03\x77\x8d\xf4\x20\x5a\xa2\xac\x84\x30\xa3\x42\x95\x6c\xf0\xc6\x21\xcd\xc1\x02\x70\xbe\xb3\xbf\x11\x96\x60\x3e\x20\x31\xd5\x50\x0a\xfc\x9d\xd4\x96\x91\xb6\xa1\xfc\x52\x58\x8f\xa8\xb9\xe3\xbc\xbe\x0e\x29\x61\x45\xdc\x7f\x7d\x44\x5e\x02\x1e\x86\x03\xdb\x92\xd3\x34\xcb\xe4\xcd\x36\x24\xe9\xae\xd2\xa2\x6e\xb6\x4e\x8b\x6a\xf8\xef\xfa\xac\xa8\x5f\x49\x56\x14\xfc\x88\x47\xa8\xf3\xf4\x28\xf2\xe3\x8c\x01\x16\x95\x0c\x40\x95\x57\x99\xe6\x45\x1d\x2b\xa5\xf0\x53\x19\x4a\x99\x13\x1b\x79\x12\xe3\xa5\xf9\x1a\x4d\x66\x4d\xfc\x84\xf1\x20\xb6\x4a\xc1\xa1\xb5\xd1\x1d\x34\xcb\x6c\x4e\x91\x13\x49\x31\x84\x85\xdf\x77\x64\xc2\xa9\xab\x8a\xe8\xb4\x19\x20\x32\x47\x86\x16\x66\x73\x5b\xa9\x6e\x0d\x11\x45\xa5\xe8\x9a\x39\xd6\x3b\xe5\xd7\x4c\xd4\x94\xf4\x48\x1d\x1f\x3b\x1e\xde\x29\x85\xbf\x15\x0a\xfd\x97\x80\x92\xfe\xb5\x0d\x8d\x86\x05\x79\x2a\x5d\x83\xaf\xa6\xd1\xf7\x19\x82\xb1\x8d\x9f\x7f\x3b\x1b\xc3\x0e\xfe\xfd\x3b\xf4\xed\x3f\x9e\xcc\xb2\x7b\xb6\x30\xde\x47\x6c\xfd\x83\xb7\x2a\xf6\xc1\xf5\xf5\xb5\x6f\x70\xfd\xad\x5b\x0e\xef\x37\xc6\xfe\x11\x58\x0b\xef\x33\xc6\xbe\xb7\x10\xae\xdd\x94\x87\x16\xfa\x1e\x5f\x3b\x59\x04\x7b\x6b\xe0\xce\x5c\x78\x4b\x86\xb3\xaf\x15\x70\x4b\x8c\xd8\xd1\xcf\xde\xfb\xd8\xef\xc6\xc7\xde\x4b\xbc\x2d\xaf\x5e\xe2\x5d\x09\x94\x5e\xe2\x25\xbd\xc4\xbb\x69\x79\xbd\xc4\xbb\x16\x3c\xbd\xc4\xbb\x76\x53\x7a\x89\xb7\x97\x78\xc9\x63\x93\x78\x77\xa9\xd2\xd5\xfb\xba\xf7\xf2\x75\x6f\x4b\x2d\xb6\xa2\x11\x5b\xe2\xc1\xd6\xbe\xed\xde\xaf\xfd\x50\xfc\xda\xad\x13\xfe\x85\xe6\xfb\x26\xfd\x87\x7b\xb5\x2a\xf3\x9f\x5e\x4b\x9e\x92\xa2\xd2\x36\x9f\xba\xcf\xfe\xef\x22\xfb\x3f\x82\x7c\x5f\x02\xa0\x55\x09\x80\x55\x30\xeb\xeb\x00\xf4\x75\x00\x3a\x76\x42\xf7\x75\x00\xfa\x3a\x00\x7d\x1d\x00\x77\xf5\xd9\x49\xa4\xcf\x4e\x6a\x75\xf5\xd9\x49\xab\xaf\x3e\x3b\xe9\xc1\x5a\x5f\x49\x9f\x9d\xf4\xb0\x2d\xb1\xa4\xcf\x4e\xea\xad\xb3\x2d\x37\xea\x11\x66\x27\xf5\x75\x00\x1e\x6a\x8c\x02\xe9\x25\xed\x5e\xd2\xee\x25\xed\x5e\xd2\x5e\x7f\xf5\x92\xf6\x16\x57\x2f\x69\xf7\x92\xf6\xba\x0f\xf7\x92\x76\x2f\x69\x6f\xfe\x78\x5f\x07\xe0\x11\xc5\x46\x90\xbe\x0e\x40\x1f\x2f\xd1\xd7\x01\xf8\xf5\xd6\x01\x88\x7c\xf7\xf7\x57\x0c\x60\xfb\x69\xf4\x15\x01\xfa\x8a\x00\x7d\x45\x80\xbe\x22\x80\xbb\xfa\x8a\x00\x78\x3d\x24\x5b\x63\x9f\x1f\xb5\x12\x28\x7d\x7e\x14\xe9\xf3\xa3\x36\x2d\xef\x11\xd8\x0d\xfb\xfc\xa8\x07\x68\x2b\xec\xf3\xa3\x7a\xbb\x60\x73\x73\x1e\x49\x7e\x54\x5f\x11\xe0\x21\x7a\xdb\x7b\x89\xb7\xe5\xd5\x4b\xbc\x2b\x81\xd2\x4b\xbc\xa4\x97\x78\x37\x2d\xaf\x97\x78\xd7\x82\xa7\x97\x78\xd7\x6e\x4a\x2f\xf1\xf6\x12\x2f\x79\x6c\x12\x6f\x5f\x11\xa0\xaf\x08\xd0\x57\x04\x78\x8c\x1e\xee\x8d\x3b\xcd\xc4\xf5\xaa\x3d\x8d\x76\xf1\xa5\xb8\x8e\xf5\x14\x26\xae\x79\x29\x05\x50\xe0\x6b\x5a\x72\x3a\xce\xe0\xa4\x82\xc4\x63\xe1\x6f\xe9\x27\x2b\x47\xe4\x05\x15\xd6\xd1\x8a\x9e\xcc\x95\xf3\xdf\x8c\xf8\x1b\x50\xbd\x39\xed\x1f\x68\x2c\xaa\x89\xa5\x53\x27\xf6\x01\x33\x75\x4a\x5e\xf8\x89\xaf\xfc\x4c\x2b\x02\xde\x46\x3f\x18\x02\x72\xae\x7c\xa0\x9d\x14\x6f\x86\x58\x7f\x36\x23\xb0\xbc\xa5\x79\x9d\xe2\xbf\x04\x1a\x23\xf2\xc6\x4a\x48\x94\xbc\xf8\xdf\xb3\xd3\x97\x6f\xdf\x9f\xbd\x3a\x7b\x79\xb1\x1e\xe9\x5a\x92\x15\x38\x48\x5b\x4c\xf6\xf0\x07\xb7\x47\x90\xe6\xcd\x84\xa1\xc0\xbf\x3d\xfa\xe1\xe4\xe2\x7f\xdf\x9e\xbc\x79\x79\x0c\xec\x97\x7d\x2e\xa8\x48\x59\x4a\x2a\xe5\x48\x42\x51\xb2\x6b\x2e\x2b\x95\xcd\xfd\xf1\x5e\x8e\xb4\x4d\x6c\xb5\x8a\xe6\x9c\x28\x56\x5e\xf3\x64\x39\x88\x50\x8a\xa5\x35\x02\x25\x1e\xc3\x4b\xa6\x64\x76\xcd\x52\x94\x35\xfc\xa4\xdd\x77\xb8\x28\x2a\xed\x24\x62\x08\x41\x30\xa7\x42\x24\x33\x2a\xa6\x2c\x1d\x91\x53\x59\x99\xf1\x7e\xfb\x5b\x58\x58\xc9\xd2\x2a\x41\x5e\x47\x9d\xc0\xf4\xdb\x81\xa3\x24\x86\x16\x28\x2c\xa3\xa0\x12\x5a\xb8\xa5\x87\xd0\x51\x73\xa1\xe9\xe7\xe7\xe8\x83\x3f\xf8\x6d\xf0\xd3\x81\x2b\x41\x21\xcd\x27\x90\x1e\xe1\xac\x32\xa8\x7e\x90\x91\x83\xf0\xe9\x11\x79\x69\xbe\xc1\xd2\x70\x1f\x30\x84\x82\x5d\xb3\x12\xe4\x69\xbb\x0b\x03\x52\xb2\x29\x2d\xd3\x8c\x29\x08\x1e\xb8\x99\x31\x28\xe7\x81\x12\x96\x05\x18\xf3\xd2\xba\x90\x7a\x44\x4e\xd9\x84\x56\x99\x06\x1a\x72\x70\x30\x3a\xec\x0c\xd5\x5e\x95\x72\x43\xf2\x7b\x84\x6e\x97\x58\x54\x62\x22\xcb\x95\xc7\xe3\xd0\x9a\x26\x22\xb2\xa6\x0c\x27\xb1\x9a\x9e\xa3\xd5\xa8\x5f\xb4\x58\x49\x0b\x41\xb0\xbd\x3a\x9f\x48\x31\xe1\xd3\x37\xb4\xf8\x8e\xcd\x2f\xd8\x64\xcb\x68\x08\x64\xa2\x56\xa7\x05\x06\x66\xc8\x21\x0e\xb8\x99\xe9\xdc\xa2\x2f\xbf\x8d\xd1\x64\x3b\x9b\x47\x6b\x4b\xc7\x42\x49\x0b\x64\xfa\x96\x7d\x77\x58\x9c\xa7\xbe\x36\x53\xf4\xa5\x93\x3b\x0c\x49\xbb\x3d\xa7\x7a\x44\xde\x48\x08\xc9\x99\xc8\xe7\x64\xa6\x75\xa1\x9e\x3f\x79\x72\x55\x8d\x59\x29\x98\x66\x6a\xc4\xe5\x93\x54\x26\xea\x49\x22\x45\xc2\x0a\xad\x9e\xc8\x6b\x43\xf9\xd8\xcd\x93\x1b\x59\x5e\x71\x31\x1d\x1a\x49\x67\x88\xbb\xaa\x9e\x80\x30\xf5\xe4\xdf\x50\x62\x7f\xff\xee\xf4\xdd\x73\x72\x92\xa6\xb6\x62\x4f\xa5\xd8\xa4\xca\x6c\xf5\x8e\x11\xa1\x05\xff\x81\x95\x46\x29\x1b\x90\x2b\x2e\xd2\x01\xa9\x78\xfa\xcd\xfa\xc3\xbd\x23\xc4\x64\x81\xba\xd1\x0e\x50\xbb\x04\x41\x71\x1e\xd1\x29\x8f\xf4\x86\x42\x71\xad\x60\xcf\x9d\xe1\xc0\x32\x94\x2d\x96\x31\x96\x32\x63\x54\x6c\x78\x03\xc0\xb6\xfd\x99\x3d\xac\x0f\x2d\x6a\x39\x16\x01\x0a\x99\x3e\x27\xaa\x2a\x0a\x59\x6a\x45\x72\xa6\x69\x4a\x35\x1d\x99\x9d\x1b\xc4\x7f\x82\x70\x3c\x20\x3f\xf9\x9b\x20\xe1\xaa\x0f\x87\x87\x7f\xf9\xee\xe5\x7f\xff\xf5\xf0\xf0\xd3\x4f\xe1\xaf\x40\xf6\xd0\xd4\x15\x3f\x62\x44\xee\x91\x11\x77\xdf\xc2\x37\xe0\x4f\xcb\x46\x4f\x92\x44\x56\x42\xdb\x1f\x34\xd5\x95\x1a\xcd\xa4\xd2\x67\xe7\xfe\xcf\x42\xa6\xcd\xbf\xd4\x06\x4e\x40\x6e\x97\xe8\x00\x38\xcf\xa9\x9e\x75\x4c\x7a\xea\x73\xb1\x03\xba\xda\x37\xc3\x0a\x49\x39\x85\xff\xbe\x72\xd3\x35\x1c\xe8\xa6\xe4\x5a\x33\x01\x72\x07\xc4\xdd\xc9\xc9\xc0\x60\x6e\xcd\x66\xaf\x9f\x6d\xa5\x8e\xb6\x3e\x8a\x1e\x6a\x3b\x2c\x0e\x66\x6f\x57\x86\xc8\xec\x09\xed\xa2\x5e\x77\x72\x7e\x46\xae\x11\x1a\x9d\x2f\xc4\x45\x61\xbd\xda\xfb\x4c\xfa\x4a\x55\x76\x59\x5e\xd2\x7c\x8e\x96\x25\x1f\xef\x45\x32\x9e\x73\x6b\x00\xb6\x55\xad\x14\x39\xc2\x9b\xa3\xa4\xa8\x06\xf6\x81\x51\xce\x72\x59\xce\xfd\x9f\xac\x98\xb1\xdc\x48\x6c\x43\xa5\x65\x49\xa7\x6c\xe0\x5f\xc7\xd7\xfc\x5f\xf8\x62\xf4\x81\xc5\xb7\x51\xa4\x4e\xaa\xd2\x30\x8f\x6c\xee\x28\x08\x4b\xef\xf7\x2c\x3a\x30\x75\x7c\x14\xfd\x6e\xbc\xdd\x91\xe5\x7a\x6d\x11\x99\xb6\x5f\x15\xc8\x90\xd7\x32\xab\x72\xa6\x06\x9e\x3d\xa1\xb4\x2e\xae\x8d\x34\xa9\x6e\x85\x11\xa6\xfc\x9a\xab\x9d\xfc\xd3\x97\xde\x52\x07\x26\xb2\x4a\x1b\x4d\x05\x83\xc1\x83\x8a\x70\x52\x81\x0e\xe0\x63\x14\x23\x92\xf2\xec\xa0\x9d\xf7\x95\x6a\xcd\x4a\xf1\x9c\xfc\xcf\xd1\xc7\xdf\xfd\x32\x3c\xfe\xe6\xe8\xe8\xc3\xd3\xe1\x9f\x3f\xfd\xee\xe8\xe3\x08\xfe\xf3\xd5\xf1\x37\xc7\xbf\xb8\x3f\x7e\x77\x7c\x7c\x74\xf4\xe1\xbb\x37\xdf\xbe\x3f\x7f\xf9\x89\x1f\xff\xf2\x41\x54\xf9\x15\xfe\xf5\xcb\xd1\x07\xf6\xf2\x53\xcb\x41\x8e\x8f\xbf\xf9\x6d\xab\xe9\x51\x31\x7f\xd7\xe2\xc0\xe3\x35\xdc\x21\xc2\xbe\x7e\x6b\x0b\x03\xfd\xe7\x61\x2d\xb4\x0d\xb9\xd0\x43\x59\x0e\xf1\xf5\xe7\x44\x97\xd5\xe6\x83\x51\x13\xb5\x5d\xf0\xdc\x95\x03\x7b\x5e\x13\x34\x4f\x9a\x3b\x47\x64\xc5\x92\x92\xe9\xae\x34\x18\x1c\xcd\xf1\x8f\x86\x49\xb6\x57\x6a\x6a\xa5\xc6\xdb\x25\x01\x5e\x35\xe7\x9d\x94\x32\x1f\x91\xc0\x2c\x74\x0d\x9e\x4c\xfb\xdc\x15\xdb\xa0\xe5\xba\xab\x57\x82\x1e\x97\x12\x74\x89\xfb\x7b\xeb\x1a\x10\x13\xd7\xeb\xcc\x34\x4d\x9b\xee\x2b\x48\x65\x09\xcd\xd1\x4e\x80\xd2\x92\x14\xb2\xa8\x32\xaa\x57\x98\xed\x96\xd8\xa6\x2d\xee\xd7\x5e\x00\xb3\xd1\x60\x07\xb6\x54\x2e\x5f\x6e\x0c\x25\x27\x59\x46\xb8\xc0\x93\x00\x03\x38\x6b\x5e\xc9\x50\x5e\x22\x14\x0d\xce\xd7\x66\x0a\x37\x36\xe1\x26\x30\x34\x72\x65\x74\x9d\x52\x83\xc5\x1f\x12\x72\x90\x66\x59\xd3\x18\x17\x75\x5a\x8e\xe7\xb6\xde\x4b\xb9\xb4\xfe\x62\x46\x95\x76\xd3\x86\xd9\x68\x7a\x05\xa6\xd0\x84\xa5\x4c\x24\x0c\x42\x10\x2a\x56\xaf\x75\x6c\x84\x41\x30\xef\xc3\x18\x94\xa4\x55\x91\xf1\xc4\xc0\xcf\xcc\x64\xf9\x18\x67\x79\x5e\x69\x30\x14\xdf\x95\x15\xdf\xec\xf8\xa5\x2b\xf7\xea\x8d\xf9\x40\xaa\xbc\x68\xed\xa3\x2d\xbc\xea\xae\xf6\x33\xdf\xb7\x23\xbc\xde\xdc\xb6\x91\x53\x2d\x50\xdc\xda\xc6\x10\x53\xda\xbb\xb6\x18\xb6\xa3\xb3\x5f\x24\x8d\xdd\x82\xbe\xb6\xa7\xad\x5b\x18\x97\xb6\xa5\xa7\x6d\xad\x49\x45\xc9\x26\xfc\xf3\x16\xf8\x78\x22\x6a\x15\x85\xa7\x4c\x68\xa3\x08\x40\x65\xea\xa2\x64\x05\x13\xa9\x4f\xf7\x83\x00\x2f\x11\xaf\xe3\x56\x3d\x46\x28\x65\x6c\x7f\xbc\x2e\x97\x49\x31\xfd\xd9\xfa\xc2\xcf\x96\xdd\xf5\xee\x0f\x96\x90\xe9\xc6\xe0\xef\xc6\x3e\x06\x6f\x34\x22\x5d\x6d\xf9\x6f\x3b\x49\xa3\xbd\x79\x97\x53\x21\x53\xac\x71\xad\xeb\x20\x84\x11\xb9\x5c\xf2\x26\xc4\x1a\xd8\x27\x0e\x0f\x15\x86\x25\xa8\xe6\x40\x8d\xec\x66\x8c\x4c\xc0\x41\xb7\x44\x29\x64\x75\x55\x09\x96\xdf\x27\x54\x29\x3e\x15\xc3\x42\xa6\x50\x97\xfb\xc9\x2a\x84\x68\x71\xa8\xb6\x8b\x6c\xda\x88\x57\xde\x38\xd1\x6e\x9b\x2e\xbc\xfd\x2d\x90\x2d\x5c\x45\xf8\x32\xf8\xd1\xda\x75\x5c\x1c\x7d\x20\x43\xd6\x12\xd1\x7e\x30\xcd\xa9\xa0\x53\x36\xb4\x1f\x1f\xfa\x8f\x0f\xfd\xb7\xf6\x01\x73\x1b\xaa\x95\x64\x94\xaf\x0f\x25\x8a\x80\x77\xf0\x02\x9e\xb7\x89\xe2\x3e\x02\xab\x91\xc6\xea\xa4\x4d\x2e\xd0\x25\xe0\x7e\xc2\x97\x07\x88\x92\xb4\xb4\x6e\xd4\x25\xf0\xfd\x28\x30\x90\xc8\xc6\x95\x66\xc5\x8c\x06\x01\x5d\x76\x67\x14\x61\x82\x8e\x33\xe7\x05\x3f\x9d\x0b\x9a\xf3\xc4\xed\xee\x49\x06\x01\x3f\x5c\x0a\x32\x61\x54\x57\x25\x23\x53\xaa\x59\x3d\xb6\x8f\x14\xe4\xf5\x66\x9e\x69\x92\x50\x81\x66\xda\x31\x66\x6a\x98\xd3\xe5\x67\xa6\x46\xeb\xec\x5d\xed\xa2\xb8\x5a\xc4\x6e\x35\xca\xb2\x07\xc0\x0b\x9d\xf1\x52\x18\xa5\x47\x97\xc0\x9e\xcf\x65\x6a\xa8\xe3\x28\x7a\x7a\x43\x50\x7c\x6b\xf6\xd7\xd6\xc8\xb1\x21\xb8\x85\xdc\x36\x27\x05\x46\x1a\x90\x4a\x87\x9f\x06\x3d\x23\x68\x15\x32\x1d\x2d\xc1\x4c\xc7\x84\xcf\x65\x6a\xe3\xc6\x74\x84\x29\x06\x5d\x01\x49\x72\x7a\xe5\x62\xbe\xbc\x71\x8c\x5e\x53\x9e\x41\xa8\x03\x17\x8a\xa7\x46\x34\x4a\x36\x07\x16\xb9\xab\x25\xf3\x8c\x6c\x82\xe6\x10\x0e\x73\x5a\x0c\x8d\x36\xba\x1e\x54\x1b\x77\x66\x71\x60\x9c\x51\x4e\x8b\x95\x6f\xa1\x3b\xa2\x35\xed\x38\x7c\x8d\xee\x8e\xd4\xb7\x96\xc1\xd8\xdf\xcf\x3c\xaf\x72\x42\x73\x59\x61\x78\xef\x22\x29\x76\x41\x70\x9d\x10\xdb\x25\x44\x56\xad\xa4\xb2\xa4\xfd\x31\xd9\x3e\x5c\xf7\x81\x5a\xc5\x5b\x59\xc3\xb7\xb3\x82\x6f\x61\xfd\xde\xd9\xea\xed\x1c\x5c\xed\xf1\xf1\xc2\xf9\xdc\x1a\x18\xc9\xc5\x46\x8c\x2c\x7d\xaf\x8c\xb3\x09\xf1\xe3\x70\x45\x64\xce\xb5\xb6\xce\xa0\x80\x00\x0c\x08\xd7\x91\xe7\xc4\x9e\x05\xe8\x15\x83\xed\x75\xd8\xe7\x22\xe3\x09\x07\x0f\x9c\xf3\x78\x0e\x50\x42\xbf\xe1\x58\x59\x86\x0a\xc2\xf3\x02\x03\xe1\x01\xa7\x87\x8e\xd3\xda\x00\x25\x3f\x13\x1b\x9e\xc6\x3e\x27\x8c\xa5\xf6\x63\xfd\xf1\xe9\x8f\xcf\xf2\xe3\xa3\xb6\x51\x73\x42\x0d\xa7\x0e\x8e\xf6\x9a\x8e\x41\x7c\xd7\xd3\x0a\x82\xbf\x11\x87\xcc\x51\x81\xfc\x1c\x23\xae\x5d\x30\x30\x3a\x5e\x32\xad\x6c\xb8\x35\xbc\x61\x24\xc2\x85\xec\x55\x67\x64\xf5\x51\xfc\x74\x32\x89\x9f\x48\x59\x91\xc9\x79\x0e\x4a\xf3\x99\x6e\xf2\x7f\xd0\x8a\x58\x5e\x64\x54\x33\xaf\x33\xad\x37\x64\xee\x2d\x54\x6f\x93\x3a\x7a\xbf\xc9\xa2\xb7\x23\xb2\x3e\xc8\x14\xd0\x5b\x90\x76\x37\xbb\xf3\x5a\xa6\x72\xb6\x97\x8a\x5b\xf9\xfb\x6e\x3b\x41\x73\x2b\x4b\x4f\xdb\x24\xcc\x87\x9f\x76\xb9\xc5\xb2\xdb\xa6\x56\xf6\xc9\x94\xeb\x40\xdd\x2e\x21\xaa\x75\x32\x54\xab\xfd\x6b\x99\x14\xd9\xa7\x41\x6e\xc1\x5f\x6e\x41\xf8\xdb\xb8\x97\x5a\x66\x0c\x25\xd7\x76\x66\xc1\xf7\xf5\xf3\xbe\xb5\x22\x46\x8e\x04\x23\xdd\x8d\x03\xf4\xbd\x13\x5b\xcc\xd9\xaa\xe7\x05\xa8\xa5\x35\x85\x3e\x8a\x5a\xba\x79\x99\x8d\x13\x73\x62\xf6\x4c\xdb\xa6\x9a\x41\x97\x49\x5d\x82\x3f\xf9\x2f\x1e\xdb\x06\x0c\xe4\xa7\xbf\x06\xa9\x33\x3e\xb5\xce\x63\xc8\x5f\xdc\xff\xfe\xba\x67\x4a\x54\x3b\xc6\x86\x53\xda\x42\xc0\x78\x09\x2f\x10\x2e\x52\xf0\x5d\xdb\xa5\x02\x04\x70\x2c\x03\x1f\x58\x96\x4b\xad\xc3\x1c\x4d\x6b\x41\x07\x27\x77\xfd\xb0\xb2\xde\xf8\x40\xed\xb2\x16\x87\xfa\x64\x30\xf2\x56\xda\x7a\xa7\x6c\x40\xce\xc1\x0c\x57\xdf\x81\x93\xf4\x56\x62\xe5\xd3\x95\x6e\xf2\x10\x6e\x1b\xb9\xc8\x46\x46\x1f\x01\xe4\xbb\x9a\xc9\xe3\xca\x22\x26\x5f\x63\x70\x94\x64\xbb\x0e\x32\x57\x6c\x5e\x33\x1b\x2b\x42\x00\xc9\x1f\xd4\x58\xe2\x58\x01\xf2\x8e\xff\xe3\xac\xb8\xf9\x98\x0b\xfc\x18\x0e\xed\xb6\x02\x46\x77\x00\x35\x92\x5d\x96\xe1\x67\xba\x00\x57\x3b\x39\x23\x82\xd9\xbb\x2d\x64\x0c\x4f\x25\x97\x4b\x17\x81\x48\xf1\xf2\xe7\x8a\x66\x71\x7e\x93\xbd\x65\x1f\x5a\xa0\xea\x37\x3c\x4b\x13\x5a\xda\x00\x52\x38\xa3\x44\x49\x6b\x24\x07\x42\x90\x50\xe1\x4f\x7b\xbd\x47\xd8\x62\x95\x14\xb4\xd4\x3c\xa9\x32\x5a\x12\x73\x16\xa6\xb2\x6c\x95\x83\xb4\x11\xa2\x35\xd2\x5c\xb2\x44\x8a\x74\x1b\x05\xe0\x7d\xf3\xdd\x66\x18\x47\xc1\x4a\x6e\x2b\x89\xf2\x9c\x35\x91\xf4\x28\x76\x97\xc9\x89\x3b\xd5\xfe\x88\x45\x86\x91\xd8\x9a\x8f\xa5\x88\x8f\x03\xf2\xe8\x4f\xc5\x88\xfc\x6d\xee\xac\x30\x60\x91\xb1\x89\x5b\x8a\x69\x97\x63\xe7\x50\xd6\x02\xbb\x3e\x50\x13\x59\x42\xde\xdb\x51\x2a\x31\xd9\xeb\x9a\x27\xfa\x78\x44\xfe\x1f\x2b\x25\x26\x87\xb3\x29\x16\x86\xb5\x28\xee\x15\x57\xe8\x89\x0c\xc1\x41\x4f\xc9\x11\x16\xe9\xe5\x79\xce\x52\x4e\x35\xcb\xe6\xc7\xa8\xc7\xba\x32\xbf\x6d\xb6\xae\x8d\xd1\x20\xa8\xe9\xfc\xc7\x3f\xac\x79\x72\xdb\xf4\xcc\x1f\x5c\xc2\x5b\x0d\x19\x0c\x4f\x6a\x6c\xa1\xe7\x41\x72\x8d\xb8\x19\x86\x37\xd5\xf9\xe2\x8e\xcc\xf8\x0d\xfe\xbb\xc1\x03\x4a\x4a\x36\x05\x2c\x47\xcc\xdd\x13\xc7\x31\x50\xfb\x8d\xac\xc4\x6a\x8b\x61\xb4\xf0\xd7\x56\x09\xff\x21\x78\x71\x65\x02\xf4\x9d\x88\x09\xc1\x4c\x02\x0b\x26\x25\x60\xb6\x04\x76\x6e\xc8\x03\x3e\x55\x07\xb9\xb5\xf0\x49\x74\x98\xec\x0c\x73\xd9\x90\x50\xd3\x49\x4a\xb4\xff\xd0\x16\xb8\x0c\xb9\x27\x16\x30\x8d\x94\x60\x6d\xc9\x01\xe0\x27\x42\xb0\x46\x50\xf8\x16\x4b\x5d\x80\x2c\x96\x31\x80\x57\xc9\xe1\xf3\xc3\x4e\x88\x2f\x2e\xa7\x94\x05\x9d\xd2\xcd\xa5\xd4\x63\x65\xa4\xf1\x2a\x49\x99\x66\x65\x0e\x35\xaf\x67\xf2\x06\x7f\x47\xb6\x55\xd8\xa7\x98\x2d\x17\x6e\x56\x3b\x93\x0a\xb8\x52\x9c\x1f\x0d\xe7\x17\x62\x2e\x6e\xe8\x9c\xd0\x52\x56\x22\xb5\x52\x93\x27\xa0\x6f\x1a\x1f\x7e\x2b\x05\xab\xbd\x66\xb1\xcf\x75\xcc\x34\x35\xc7\xe6\xd9\xe8\xd9\x86\xb2\xf6\x2d\x01\xb6\x65\x4a\x3c\xcc\xa6\x61\x29\x74\x61\x38\xee\xcc\x74\x32\xaf\x92\xd1\xf4\x9d\xc8\xb6\x91\xe5\xde\x20\x7a\xc1\xab\x43\x50\xc2\xf8\x04\x6c\xb7\x03\xbc\x75\x53\x72\xcd\x02\xf2\x78\x34\xa1\x99\x82\x5e\xfe\x95\xf0\x22\xec\x71\x2c\x82\xc0\x23\x6d\x16\xb4\x39\xd4\x4c\x55\xe3\x3d\xcf\x99\x3d\x50\x80\x72\xf5\x31\xf3\x08\xf7\xff\xb3\xf7\xae\xcd\x6d\xe4\xd8\xfd\xf0\xfb\x7c\x0a\x94\xf6\x85\xa4\x14\x49\xd9\xfb\x4c\x76\xb7\xe6\x49\x6d\x95\x2c\xd9\xb3\xcc\xda\x1e\xc5\xb2\x67\x2a\x95\xa4\xb2\x60\x37\x28\x62\xd5\x04\x38\x0d\xb4\x64\x26\xb5\xdf\xfd\x5f\x38\xe7\xe0\xd6\x24\xc5\x6e\x8a\xba\x78\x46\x7c\x31\x63\x91\x0d\x34\xae\xe7\x7e\x7e\xe7\xd0\xdc\x71\xe5\xf2\xbc\x71\x76\x84\x4f\x3a\x89\x4d\x6b\x7b\xbc\x9f\xf8\x33\x9c\xa0\xd3\xac\xfb\xa8\x24\x1e\x92\x60\xb1\xc7\xd9\xbe\x11\x33\x7e\x23\x0c\x33\x72\x2e\x2b\x5e\x57\x90\x86\x7c\x89\xe3\x63\x93\xc6\xae\x07\xb7\xe8\x07\x9c\x90\x8e\x24\xe9\x6e\xeb\x52\xfb\x71\xb8\x75\x02\x1a\xe1\xc7\x85\xf5\x05\x7c\x51\x82\xaf\x45\xd5\x18\x79\x73\xdf\xdb\x44\x89\x55\x3b\xb0\xea\x36\x97\x5e\x50\xa4\xc4\x23\xf2\xe8\x5c\xc3\x70\xa4\xaa\xf4\x9b\x0e\x3c\x19\x95\x7d\xd0\xdc\x21\xee\x84\x17\x85\x30\xc6\x87\x6b\x2f\xd3\x10\xf2\x30\x87\x6f\x05\xab\x84\xdf\x9a\xb7\x15\x37\x56\x16\x6f\x2a\x5d\x5c\x5f\x5a\x5d\xf7\x82\x03\x59\xd7\xbe\x85\xf0\x72\xfa\xf3\x25\x3b\x97\xe6\x3a\x49\x54\x22\x9f\x6a\x6a\x2e\xe1\xec\xba\x99\x88\x4a\xd8\xc3\x43\x83\x5c\x6e\xce\x8b\x99\x54\xc2\x33\x38\x15\xb2\xdd\x48\xe1\x73\xab\xdc\xd7\x67\x4a\x39\x95\x27\x74\x5e\x7f\xc7\x6f\x8d\xc0\xe1\x4f\xdc\xf0\xdd\xcf\xa2\x0b\xd8\xc5\x5e\xfd\x14\x38\x98\xf1\xf9\x9e\x7c\x10\x53\xf3\xd9\x8d\xb1\x9f\x71\xfb\x10\x5b\x79\xd5\x61\x2a\x2b\x41\x85\x4d\xdc\x84\x7d\xe4\x0d\xdd\x0a\xd8\xbf\xa5\x6e\xd8\x2d\x47\x1d\x19\x28\xe2\x88\x7d\x96\x8b\xef\xd9\x5b\x65\x9a\x5a\x44\xeb\x46\xbb\x2b\x69\x62\x0a\xab\x57\xae\x60\xbf\x51\x01\x71\x74\x8f\x74\x2d\xf6\xf6\x2b\x9f\x2f\x2a\x61\xbe\x67\x07\xe2\xab\xfd\xee\x60\xc0\x0e\xbe\x4e\x8d\xfb\x9f\xb2\x53\x73\x30\x62\xe3\x79\x70\xca\x4b\x35\x15\x75\x2d\x7c\x8c\x25\x36\x70\xac\x39\xe1\xba\x0f\x72\x5c\x28\x5e\xd7\xc9\x6e\xa5\x66\xb7\x08\x75\xe3\x08\xbe\xa8\x6b\x5d\x87\x14\x97\x64\x19\x80\xd7\x14\x7a\xbe\xa8\xf5\x5c\x26\x66\x3e\x38\xee\x7b\x0d\xe4\x05\xe3\x43\x97\x5a\x3f\xed\xd3\x10\x1a\xfa\x03\x91\x7c\xa1\xba\x1c\x85\xf1\xd4\xc7\x5a\xa0\x16\x49\x6a\x3d\x74\x47\x0f\xb9\xcd\xa7\x5e\x1c\x21\x4b\xb7\xfb\x5d\xc8\xd5\x65\x27\xa5\xb8\x39\x31\x25\x7f\x3d\x80\xd7\x18\x8a\x31\xce\xc7\xc4\x0d\x3b\x78\x7d\x30\x62\x97\x9e\x11\x0f\xd2\x31\xc6\xe7\xa6\xba\x0e\x1d\x82\x9d\xfd\xd5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xc1\x6f\xc8\xb6\x8c\xd7\x6d\x89\xea\xee\x71\xe7\x5c\xeb\xae\x69\xa7\xdd\x8b\x3a\x75\x15\x52\x57\x37\xd1\xb7\xf3\x26\x80\xba\xa1\x34\xa4\xa9\xae\x09\x62\x28\x3c\x62\x84\x85\xab\x27\x55\xa6\x42\x3f\x01\x81\x65\x3d\x51\x3a\x3c\xf5\xec\xbb\x3a\xbe\x1d\xe8\x40\x4a\xfe\xd2\x08\x36\x3e\x0f\x58\x1d\xa2\x36\xd2\x58\x77\x8d\xcb\x8c\x75\x49\xe4\x67\x47\xa7\x73\xfe\xbf\x5a\xb1\xb7\x6f\x2e\x69\x00\xc7\x4f\xba\x54\x5b\xa9\x01\xff\xdf\xa6\x16\x8e\x0b\xf7\x60\xee\xa1\x4d\x9b\xa1\xbb\xef\xd9\x39\xb7\x1c\xf9\x3a\x05\x62\xa9\x48\xca\x1d\xcb\x9e\x48\x55\xd2\x4f\x09\xc3\x7e\x6c\xde\xea\x76\xef\xe3\xb6\xa8\x57\xff\xe0\x97\x4f\xe3\x3d\xf1\xe0\x02\x88\xf9\xd5\x07\x5d\xf6\x66\xc4\x49\x53\x4f\x7c\xff\xe2\xd6\xf4\x0c\xbf\x67\x73\xd7\x27\x73\xda\xfb\x80\x7d\x12\xbc\x64\xee\xfe\xd2\x3f\x7f\x76\xba\x67\x67\x5a\xd5\x89\x85\xf8\x05\xec\x39\x0d\xdf\xcc\x4f\x21\x4d\xa2\x29\xdd\xc9\x81\x6b\x45\xbc\x64\x52\xe9\x09\xa3\xeb\xb0\xef\xb1\x7f\xf9\x34\xde\x61\xe8\x5f\x3e\x8d\xfd\xc8\xdd\x3f\xf5\xf4\xf1\x06\xbd\x93\xf8\x16\xa5\xb7\x77\x2d\x71\x2b\xb2\xe4\x98\x13\xd6\x16\xc9\xba\xcb\x63\xa3\x7d\x49\x62\xfb\x5c\xb1\x6b\xa9\x3a\x24\xf8\xe7\xb7\xcc\xb5\x71\x0a\x05\xc6\xaa\x25\x7e\xc4\xcb\x19\x07\x54\x85\x90\xeb\x0b\xfb\xec\x36\xde\x38\xae\xe0\x77\xdc\x29\x81\x40\xdb\xd8\xb9\x40\x2f\x67\xf9\xbd\x8f\x1d\x08\x2d\xd6\x37\xf8\x00\x91\x9a\x25\xd1\x57\x86\x81\x9b\x65\x72\xc0\x8e\xd0\xaa\xa4\xc2\x4f\x14\xbb\x2e\x2b\x09\x55\x1a\x9c\x76\x9f\x06\xab\x1a\x18\xf2\x5e\x6f\xfd\x8e\x22\x47\x10\x27\x56\x8c\x5b\xec\xc8\xfd\x76\x02\xc6\xb1\xe3\x11\x50\x2b\x78\x10\xc2\xf8\x5b\x42\xc9\xa7\x6d\x42\xc9\xde\xe4\x07\xd8\x01\x77\x63\xfa\x72\x45\xd7\x66\x2d\x57\x84\x1f\x2e\x09\xaa\xf2\x39\x33\x46\x4c\xe3\xec\xc4\x1a\xe1\x7c\x6d\x7d\xb2\x3b\x73\xbc\xef\xe1\x2a\xbf\x8d\xc3\xc5\x42\xb2\xec\x0e\xfc\x33\x36\xf4\x7c\x28\xa4\xca\x78\x38\x90\x2c\x34\x13\x4f\xdf\x25\xd1\x1a\x42\x77\x43\xae\xeb\xce\x5c\x97\x92\x8b\x7d\xf0\x60\xfc\x89\xe8\x3b\x2b\xdf\xce\x4f\x0a\x49\x20\x7c\xcd\x3a\x9c\xc5\xce\x83\x2c\xc4\x62\x36\xed\xe3\x12\x77\x0d\xde\x5d\xe6\x96\xc0\x33\xb1\x98\xb1\x77\x97\x6b\xae\x31\xac\x3d\x8c\xda\xa0\x7d\xf0\xd0\xb0\x4a\x4e\x85\x95\x5b\xa6\xf0\x00\x17\x79\xae\x95\xb4\xba\xde\x8c\xae\xc0\x7a\x5d\x4e\xdf\x5d\x5f\x86\xea\xdb\xb9\x9d\x8d\xd8\x44\x1f\x92\x6f\x39\x2b\x74\x55\x89\xc2\x12\x5a\x1e\x2c\x6f\x68\xb6\x46\x79\x12\x64\x0f\x18\x5d\xff\x09\xd4\x27\x52\x94\x4e\x70\x73\x4f\x3e\xbd\x3d\x3d\xff\xf0\x76\x34\x2f\x7f\x37\xd3\xb7\x43\xab\x87\x8d\x11\x43\xd9\x01\xfc\xe8\xe9\xa2\x17\xf1\xb3\xe8\x84\xc5\xd7\x36\xc8\x20\x8c\xe0\x8f\x3e\x35\x9b\x7d\x31\x18\xb5\x00\xb6\x23\xef\x93\xd2\xda\x0e\x58\xcd\x29\xfd\x9a\x93\xe9\xa9\xa9\x2a\x5c\x6d\x5b\x0b\x31\x48\x6d\x31\x77\xa6\x86\xf4\x9e\xd8\xbd\x0d\x15\xd9\x04\x1f\x56\x86\x78\xfc\x03\xd7\x87\x63\x6c\x97\x49\x56\x57\x31\xb6\xcc\xd7\xf1\x32\xfb\x1e\x0d\x67\x76\xe6\x56\xf5\x5a\x2c\x19\x04\x02\x4f\x75\xed\xce\x53\x9d\x9f\x0d\x61\x0b\x98\xfa\x49\x63\x44\x3d\x22\xb6\xf3\xe8\xcb\xd6\x03\xa0\x6c\x07\x5c\xc8\xd0\x70\xdd\x9a\xd1\xd7\x11\x34\x9c\xe4\x35\xde\xd8\x99\x50\x56\x52\x02\x33\xad\xcc\xda\x45\xa4\x38\xec\x47\x5f\xb5\x8e\xf8\x68\xfd\xd0\xcc\x5e\x10\xc0\xfa\x9c\x49\x77\x6b\xfa\x1e\x47\xd7\x06\xf2\x14\x53\x32\x1f\x72\xb9\x6a\x5e\x6a\x08\xd8\x40\x70\xcb\xec\xa0\xf1\x72\x2e\xd5\x33\xbc\x9d\x85\x54\xe5\xb6\x75\x68\x19\xc0\xa0\x45\x2e\x8a\xd1\x77\x64\xd0\x0f\x7e\x43\xee\x35\x29\xc4\xd2\x20\x0f\x62\xee\x3f\xec\x74\xf9\xe6\x4b\xf3\x4b\x35\xc4\xb7\x0c\x17\x65\x5c\x95\x17\x67\xe0\xaa\x07\x6f\xbf\x26\xa5\x47\x70\xf1\xed\x69\xb7\xd9\x23\x4b\x43\x0f\xab\xe7\x3e\xca\x42\xf5\x91\x79\xee\xcb\xbd\x23\xcd\x5c\x68\x49\xe1\x9f\x01\x6c\x14\xef\xa8\xd7\x97\xdd\x7a\x2c\x78\xcd\xe7\xc2\x8a\x1a\x43\xe0\x28\xa8\x4e\x51\x76\xc2\x8f\x0b\xa1\x2e\x2d\x2f\xae\xf7\x8d\xb2\xfc\xc2\x71\x1f\x8e\xe3\xde\xdb\x15\xe8\x0f\x02\x41\xae\x2d\x53\x2f\xb2\x54\xc4\x85\x9e\x09\x89\x09\x48\x87\x7d\xac\x1c\x01\xe9\x2e\xe7\xae\x11\xf9\x10\x0d\x1b\x10\xe9\x16\xa0\x3b\x21\x82\x1f\x57\x61\x3f\xdc\xb0\xfb\x1d\x20\x12\xb8\x8b\x1f\x2d\x69\x9a\x53\x87\xb9\xfb\x66\x22\x6d\xbc\xf7\x46\x58\xb6\x10\xf5\x5c\x52\x5a\xb7\x56\xac\xa0\xb4\x00\xe0\x6b\x8e\x87\x51\x77\x09\xcf\x53\x4c\x17\x96\x53\xce\x0c\x9b\x08\x7b\x2b\x84\x62\xaf\x5e\xbd\x7a\x05\x72\xc9\xab\x3f\xfe\xf1\x8f\x0c\x60\x26\x4a\x51\xc8\xf9\xea\x83\xf0\xd4\xbf\xbc\x7e\x3d\x62\xff\x71\xfa\xe1\x3d\x44\x95\x2d\xac\x61\x13\x6d\x67\xd4\xb3\x7b\x20\x6b\x6c\x06\xec\xdf\x2e\x7f\xfc\x18\x21\x96\xf2\x5f\x41\x05\x09\xd3\xcb\x43\x04\x5f\xfd\xe1\xbb\xef\x46\xec\x5c\xd6\x90\x4f\x2c\x21\x03\x22\x04\x41\x2e\x7c\x60\x20\xd4\x34\x6b\x67\xf0\x13\x07\xa1\x20\xe1\xb9\xbc\x9a\xc1\x02\xb8\x0b\xa1\xd5\xb4\x92\x85\x45\xb8\x52\xbc\xfa\xb8\xd0\x04\xbf\xc3\x29\xdd\x8b\xa4\x08\x18\xdc\x80\x55\xf2\x5a\xb0\xa9\xf9\xa1\xd6\xcd\x22\xa6\x39\xd6\xc2\x38\x59\xb6\xe0\x0a\xb2\x4a\xa0\xb3\xb8\x57\x46\xd8\x27\x0d\xc2\xe8\x68\x08\xca\xce\x20\xb4\x69\x09\x28\x83\x00\xdb\x38\xc4\xf3\xb0\xe0\x32\x04\x0e\x82\x4f\x3d\x2b\x1a\x12\x74\xcf\x32\x81\xa9\xf4\xb9\x2b\x8b\x5a\xff\x1d\xb7\x4a\x2a\x9f\x05\x45\x12\xb2\x21\x99\x8c\x92\x4e\x55\x62\x73\xf5\x59\xf9\x8e\x17\x52\xc6\x7f\x92\x3f\x35\x9e\xa6\x89\x76\x90\x96\x8e\x95\x1b\x33\x4c\xdd\x35\x6f\x8e\x75\x20\xdc\x69\x32\xb8\xaf\x8d\x5a\x69\x4d\x25\x9a\x88\xfc\x50\xe1\x2e\x4a\x61\x8b\x7d\x60\x28\x2e\x25\x00\x25\xe5\xe0\x32\x9c\xcb\x2c\xca\xc7\x08\xdb\xd0\xd2\x40\xe4\x95\x7b\xb7\x30\x86\xf2\x88\xe6\xbc\xbe\x76\x4a\x02\x51\x81\x11\x44\x3d\x9b\x90\xc3\x84\x09\x65\x37\x68\x2c\x9f\xf3\x65\x96\x35\xe0\x5e\x72\x38\x1a\x1d\xe2\x35\xd1\x35\xc2\x04\xe3\x99\x77\xdf\x3f\x51\xbe\x74\x1e\x95\xce\x17\x58\xd1\x13\xec\x39\x54\x11\x89\x67\xd1\xce\x9c\x56\xaa\x0b\x38\x78\xcf\x8a\xa8\xfd\x4a\x6f\x77\x2f\xb9\x3d\x84\x09\x74\x78\xb4\x6f\x79\xed\x1e\x65\xb5\x37\xa1\x35\xd0\x1a\xd3\x4d\xe8\x5a\x6c\xb6\x77\x99\x81\x79\x27\xd6\xb7\x66\xa8\x87\x73\xe2\x7c\x3f\xf6\xe3\x7c\x94\xaf\x97\xd5\x1d\x7c\xfe\xac\x6e\x3c\xc5\x4c\x97\x9c\x74\x11\x69\x48\x45\x81\x50\xe3\x2f\xa6\xbd\x3c\x6b\x8e\x96\x1e\x9b\x7e\x35\x2d\xfa\x70\x37\xfc\x74\x73\x4c\xe0\x27\x3b\x6b\xde\x3b\x81\x93\x26\x52\xba\xc8\x6a\x07\x55\x68\x37\x00\x19\xd3\x5f\x9e\x11\xfb\x40\xa4\x16\x0f\x19\x9f\x18\x5d\x35\x16\x9b\xc6\x1f\x53\x3a\x0c\x9d\x7a\x94\x05\x20\xbe\xe1\xb1\x84\x2a\xdb\x58\x3d\xb1\x1b\x81\xc6\x4f\x8f\xcb\xf9\x02\x24\xfc\x80\x40\xc2\x01\xfa\xda\x74\x2c\x05\x67\x1e\x0c\xb9\xbb\x30\xb2\x8f\x7e\x65\x24\x3b\x8a\x15\x88\xbc\x3b\x7e\xac\xac\xa8\xa7\xbc\x10\xc7\xa9\xde\x15\x2a\x3d\x85\x10\x21\x9f\x17\x31\xe3\xaa\xac\x50\x00\x2f\x44\x0d\x67\x5f\x7c\xb5\xa2\x76\x4b\x72\x76\x39\x66\x65\x2d\x6f\x44\x6d\xd8\xd1\x1b\xe1\xe4\x45\xc4\x4f\xed\x94\x5d\xb5\xdf\xd8\x4a\x18\xc6\xbe\x34\x3d\xe8\xac\x6f\xa8\x1e\x34\xf2\x94\x47\x25\xf7\x2b\x2e\x13\xae\x2a\x2e\xa9\x49\x75\xd9\x91\x3b\x4a\x40\xa0\x81\x66\x2c\x75\x53\x93\x15\xdd\x43\x36\x17\xba\x76\xea\x12\x76\xcc\x0d\xab\xc5\x95\x93\x66\x6b\x5f\xc7\x5c\xb0\xa2\x6a\xdc\x17\x7b\x0d\x67\xbb\x4f\x00\x60\x34\xcd\xde\x15\xab\x37\x25\xa9\x5a\xdf\xc8\xd2\xb3\x4a\x2c\xab\x1e\x0a\xa6\x2e\xb8\x49\x52\x6d\x92\xe2\x16\xc9\xc2\xa2\x8c\x0e\x0c\x35\x24\xb1\x66\xc1\xfe\xa9\x51\x58\x03\xb6\x45\x87\xca\x34\x7d\x88\xb0\x2e\xc5\x45\x33\xa9\xa4\x99\x5d\xee\x68\x42\x5c\xd7\x05\x06\x2b\xac\x78\xfd\x36\x5a\x12\x8d\x50\x46\x02\xcb\x73\x64\xdc\x31\x5d\xe9\xe4\x28\x0d\x8b\xe8\x5b\xa7\x07\x52\x43\xf6\x47\x25\x08\xc1\xc0\xfd\xf4\x31\x8e\x83\x92\xd2\x10\xb3\xa4\x14\x5f\xd4\x22\xfb\xbe\xe0\x55\x65\xda\x09\xbb\x9e\x62\xa2\xec\xe1\x13\xd5\x70\x4f\xa5\xdb\xee\x50\x74\xa9\x05\x8e\xb9\x71\x62\x86\xcd\x35\xa6\xf1\x28\x00\xe7\xc5\x87\x00\x7a\xc5\x37\x48\x12\x19\x21\x5d\x19\x8e\xcc\x9e\xab\xd2\xbe\x98\x4b\x1f\xce\x5c\x7a\xdf\x38\x3c\x13\x0a\xd4\xf1\x24\x1b\x3a\x83\x25\x0d\xa4\xd4\x93\xdc\x2d\x41\x1d\x7b\x75\x2b\xe0\x3b\x4f\xad\xad\xe5\xa4\xb1\xfd\xf1\xde\x5a\xcd\x81\x4d\x3b\x45\x04\x6e\xf1\x90\x66\x5f\x24\x47\x34\x22\xa7\xe7\xe4\x33\xde\xfd\xc8\x73\x80\xdd\xe0\x97\x87\x86\x95\xba\x68\x02\x6c\x2c\x2c\x5a\x74\xa0\x75\x41\x4f\x64\x7d\xef\x55\x7f\x48\xaf\xf4\x25\x5b\x8f\x57\xa9\x6f\xd5\x2d\xaf\xcb\xd3\x8b\x2d\xd1\xf7\x39\x3b\x8f\xad\x52\x41\xc9\x7f\x0d\x05\x46\xf9\x44\x37\x36\x42\x87\xfe\x7a\xec\xd5\xeb\xd4\x74\xab\x1d\x69\xe8\x68\x8f\xee\xab\xe8\xbf\x98\xb8\x5f\x4c\xdc\xd9\x67\x17\x13\xf7\x18\x4d\xdc\x29\x0e\x6e\x76\x5d\x3d\xbc\x82\xac\xba\xc6\xf6\x3e\xa4\x95\xf4\x3c\x12\x18\x94\xa6\xda\x71\xfc\x2d\x01\x0e\xaf\x48\xdc\xdb\x44\xe8\xf3\x14\x08\x78\xf6\xd3\x5b\x54\x1f\xc8\x4e\xda\xbd\x04\x3a\x7e\x36\xd5\x28\xbd\xab\x24\x3a\x48\x0d\x49\x0d\xf3\x01\xa1\x40\x0f\x48\xef\x52\x65\xac\x0e\x8a\x20\xd4\x3d\x2a\x20\xe3\xa7\xe7\xe2\xb3\xde\x1b\xc0\x7a\xd6\x27\xc7\x4f\xdf\xdd\x60\x3b\xd4\x2a\xc7\xcf\x13\x57\x2c\xc7\x4f\x6f\xdb\x37\xeb\x5f\xbd\x7c\xcd\x74\x1f\xb6\x86\xf9\x8e\x53\xdb\xdd\xac\xbf\xab\x39\x7f\x10\x2b\x67\x3e\x7f\xb6\xfe\x62\xce\x5f\xf9\x3c\xa2\x39\x3f\x21\xdc\x9e\x18\xac\x31\xed\xa7\xe6\x36\x6f\xdf\x9f\x08\x2f\x56\x8e\x22\xfa\x9a\x3b\x72\xde\xb2\x1f\xcb\x35\xa1\x5b\xf5\x70\x34\x3a\x3c\xf4\xf6\x7e\x3a\x9f\x8d\x9d\x0e\xff\xc4\x84\x2a\x74\x89\x9b\xea\xfa\xaf\x8d\x05\xa6\x1f\xd5\xf4\x74\x2c\x73\xff\xae\xd4\x35\x0b\x7d\xf7\xdb\x92\x1e\x37\xd8\x43\x02\xbc\xbb\x17\x8b\x8c\x8c\x31\x40\x0c\xd0\x04\x03\xaa\x10\x71\xc8\x58\xdd\x04\x0b\xfb\x84\x5a\x5b\x50\x51\xe4\x08\xbf\x1c\x15\x8b\x66\x40\x0f\x8c\xe6\x62\xae\xeb\xe5\x20\x3c\xe4\x7e\xcc\x5a\xd1\x13\x88\x3d\x55\x34\x75\x2d\x14\xd4\x37\x79\xae\xfc\xd5\x2f\xc1\x03\xb2\xd7\xb0\xea\xdd\xb2\xdb\xe2\x27\xdf\xd6\xe8\x03\x00\x93\x54\xac\x56\x37\x0d\xc8\x26\x66\x10\xfd\x1c\xee\x5b\xa1\x6e\xd8\x0d\xaf\x4d\xd7\x35\x67\xbb\x72\xd4\x52\xde\x48\xd3\x05\xf2\x7f\xc3\xe4\x2e\x83\xd9\x07\x60\x07\x1b\xbb\x68\x2c\x51\x27\x7f\x76\x3d\x52\x53\x5e\x74\x2e\x0a\x0e\xaf\xef\xaa\xd3\xd6\xfe\x3c\xd3\x42\x32\xf9\xa7\x53\x59\x99\xfc\xd3\xaf\xc8\xcc\xfa\xb6\x3d\xb7\xfe\x1e\xf5\x9b\xda\x1f\xbf\xb5\xbb\xdf\x91\xc8\x64\x22\x30\x98\x17\xcc\x1e\xe0\x12\x80\x31\xfc\x5c\xf6\x4a\x45\xf0\x6d\xf2\x70\x49\x2b\xe6\x0b\x5d\xf3\x7a\xc9\x4a\xb2\x35\x2c\xd7\x64\x84\x26\x29\xa1\xf7\x86\x86\x81\x71\x94\xb2\xde\x53\x36\x42\x8f\x6c\x50\x51\xca\x66\x63\x25\xf8\x4d\xcb\x86\xad\xd2\x45\xbb\x05\x34\x30\x42\x12\xf3\xee\x4e\x7a\xcc\x03\x2b\xf2\xe2\x9a\x2a\x06\xf9\x55\x45\xde\x9f\x24\xb9\x1c\x1c\xb4\x70\xa0\xc1\x3c\x06\xbe\x3f\x2a\xba\xea\x1f\xc6\xbe\x33\x53\x16\x7a\x43\x28\x2c\xe0\x88\x1e\x3c\x76\x12\xc9\x07\x60\x83\x8f\xb4\x4b\xac\x67\x66\x9b\xfc\x5f\x01\x05\xc2\x7a\xc7\xc6\xfb\x86\x01\x0e\x5a\x83\x64\x1e\xca\xa6\x55\xba\x48\x7c\xcf\x19\x87\x82\x6d\x78\xeb\x0f\xbf\xb7\xdd\xbb\xcd\x70\xbd\xa2\x7c\x01\x46\x9f\xca\xa0\x5f\x4f\x16\x00\x6d\x09\x52\x3c\x2c\x66\xd8\x80\xcf\x49\x11\xc1\xc6\xb8\x37\x01\xf2\x7c\xf2\x4c\x7c\xd1\xad\x47\xd8\xb4\x49\x9d\xb7\x5c\xf7\x70\xbf\x5c\x86\x99\x45\xbd\x0d\x52\x20\xbc\xa0\x6e\x1a\x10\x13\xe9\x2d\x24\x2e\xe9\x29\xf8\xae\x62\x59\xb4\x00\xee\xb8\x72\xcc\x94\xac\xf2\x73\xe6\xb1\xec\xc2\xc4\x1b\x45\x81\x06\x8f\x78\x68\x9e\x31\x1f\xec\xcc\xfd\xfa\xf3\xbc\x9e\x9c\xee\x1e\xfc\x2d\xc4\x63\xf4\xe0\x10\x07\x31\x88\x23\x63\x11\x29\x3a\x5e\x1e\xd0\xc1\x7d\xcc\x40\xb8\x79\xde\x33\xf4\x39\x68\xb8\xc4\x3a\x8a\x65\x41\x39\xbb\x32\x43\xbd\xc4\x6e\xf1\x00\x42\x7c\xeb\xd0\xfd\xc7\x6b\xc2\xde\xac\x3f\x11\x53\x1d\x0b\xa5\xa0\x62\x44\x51\xb9\xa5\xa8\x84\x85\x20\x5b\x11\x00\x4b\xd1\x33\x3c\xd7\x37\xee\x4c\xff\x97\x62\x5f\x3c\x74\xbf\x9c\x7e\xcf\xf8\x71\x96\x09\x41\xc5\x67\x94\x10\x25\x86\xea\x56\xf1\x3d\x75\xa3\xcc\x80\x4d\x8e\x7d\x58\x0a\x5c\x3c\xe5\xa4\xc3\xca\x0b\xbe\xa8\x5e\xd7\xc2\x2d\x00\x64\x1f\xd7\x7a\xce\x8c\xe2\x0b\x33\xd3\x16\x34\x44\xbe\xe0\x85\xb4\x4b\x66\x6b\x5e\x5c\x43\xa5\xa2\x5a\xd0\xeb\x06\xac\x38\xa6\xf8\xae\x74\xf9\xf2\xe8\x61\x3b\xab\x75\x73\x35\x83\x80\x58\x7c\xaa\xa8\xb8\xf1\xb3\x5f\xdb\x9e\x94\x1e\xc3\x4a\x2c\x54\x1c\xc0\x03\x6b\x7d\x23\x8d\xd4\x64\xf4\xf5\xfd\x5e\x04\x80\x38\x34\x24\x63\xf9\xdf\x23\x23\x04\x7b\xeb\x8f\x04\xfe\x72\x89\xa2\x0d\x1a\x38\xea\x3c\x46\x40\x07\x64\x73\x45\xb8\x08\x91\xce\x05\x1f\x16\xf2\x4d\x37\xf2\xb5\x2f\x3d\x0e\xdb\xb5\x7e\x4c\xba\x06\xff\xbd\x47\xf0\x14\xaa\xd4\x89\xf3\xf2\xf4\x62\x6c\x52\xa5\x04\xcf\x16\xc1\xdf\xc1\x0f\x95\x56\x57\x29\x9a\x40\x3c\x99\x8e\xa2\x2a\xa8\xf2\x72\x23\xcb\x86\x57\x48\x4b\x69\x30\x67\x97\x63\x6c\x2e\xaf\x66\x76\x78\x2b\xc0\x28\x83\x2c\x27\xde\x19\xff\x52\xb9\x12\xb4\x23\x0d\xd0\x5e\x4b\x46\x05\x34\x70\xb9\xa1\xdd\xf2\x25\xa0\xd7\x50\xa4\x49\xe6\x37\xf5\xf8\x62\xd8\xc5\xba\x15\x87\xe1\x9d\x86\xaa\x1d\x4e\x7a\x00\xab\x95\x5b\x62\x38\xa9\xab\x63\x73\x0b\x9f\xc0\x01\x86\xaf\xa9\x40\x1b\x77\x1b\xe4\x64\xbc\xbb\x55\x9a\x07\x90\xcd\x6e\xe2\x26\x7f\xa6\x0a\x8a\x3d\x65\x84\x83\x9f\x13\xeb\x59\xe2\xef\x70\xd7\x86\xab\x72\xc8\x2b\x77\x72\x2e\x7e\x3a\xa3\x40\x67\xbc\x08\x99\x3f\xdf\x17\x43\x92\x2a\xa0\x67\x3b\xd1\x61\xed\x15\x80\x74\xf8\x89\x28\x81\x68\xa4\x75\x23\x6f\x9d\xa2\xec\x8b\x3b\xff\x74\x36\x60\x72\x24\x46\xfe\xaf\xf0\xa8\xa7\x5a\x56\x5f\x61\x34\x60\x08\xf5\x84\x73\x07\x43\x49\x6d\x52\x69\xdb\xbf\xfd\xab\x1b\xa4\xfb\xf5\xcf\xc3\x7f\x4d\x40\x47\xff\xfc\x37\xaa\x24\xfd\xb7\xd6\xb7\x69\x48\x59\x00\xdf\xff\x9b\x2f\xe3\x4d\xd0\xd5\x7f\xa3\x9a\x5c\x50\xb8\x7a\x04\x75\xa9\x6f\x78\x25\x4b\x3c\x8d\xf0\xee\x5a\xfc\xdd\xdb\x17\x61\x99\x82\x6d\xa7\xe0\x56\x28\x20\xd4\x3e\x37\x43\x69\x8b\xcd\xa9\x3a\xad\x1b\xff\x11\x58\x06\x30\xb7\x6c\xc0\xac\xd6\x70\x1d\xf1\xca\x9f\x2a\x26\x7c\xc9\x4e\x9c\x2b\x2c\x07\xa7\x78\x35\xcf\x7b\x5c\xb7\x6e\x85\x43\x26\xae\x1b\x07\x8c\xed\x9f\x95\xb6\xff\x1c\xb6\xdf\x47\x6a\x00\x83\xd1\x8c\xdf\x68\xe9\x71\xc8\xdd\x4d\x51\x58\xd8\x31\x20\x63\x4f\x96\x6c\x2e\x8d\xe5\xd7\x62\xc4\x2e\x1d\x6f\x49\x9d\x62\xb8\x7a\x8a\x01\x90\xa5\x28\x59\xa3\xac\xac\xe0\xd7\xd8\x8f\x1b\x72\xca\x73\xc6\x53\x66\x9a\xc2\xd1\xd6\x45\x2d\x86\x9e\x8b\xd1\x53\x2b\xb4\x20\xce\x65\x10\x36\x7b\xc6\x51\x25\x58\x94\xd0\x14\xd6\x83\x2b\x3a\x5e\x2b\xe1\x5c\x6e\x9c\x5a\x15\x91\x73\xc1\x62\x9a\x11\xfb\x08\xcc\xaa\xf2\x9e\x61\xd4\x4e\xc8\x8e\xa9\x44\x21\x8c\xe1\xf5\x72\x00\xf8\xee\x32\x60\x82\x53\x04\x0f\x70\xd4\x39\x57\x88\xae\x5e\x8b\x42\x2b\x63\xeb\xa6\xb0\x58\x6e\x6f\x52\xeb\x6b\xa1\x42\xd4\xe0\x6a\xb1\xfb\x18\x46\x03\x6e\x2f\xcd\x8a\x19\x57\x57\x49\xb9\x9a\x39\x2f\x61\xed\xff\x1a\xa4\x1c\x3f\x1f\xb7\x02\x7c\xea\x04\x0b\x69\x61\x29\x26\x8e\x8f\x04\x6b\xec\x7f\xa9\x00\xcb\x33\x88\xe6\x52\x37\x25\x59\x6d\xa1\x5d\xbd\xe8\x17\xeb\x69\xdb\x1b\x02\xdb\xde\x73\x1c\xd8\x5c\x58\x5e\x72\xcb\x77\x88\x05\xfb\x10\x6b\xec\x91\x1f\x92\xea\x9c\x06\xff\x24\xf1\x21\x2f\x6e\xe9\x85\x4c\xd3\xa0\xe0\x26\xce\xfc\xca\x43\xe2\xb5\x75\x67\x8a\xfc\x05\x18\xe2\x05\xf2\x8c\x2f\x62\xe6\xba\xf7\xbd\x21\xb9\x88\x15\x1a\x23\x39\xe9\xe6\x8d\xea\x69\x88\x75\x4b\xbf\xc3\x1a\x7d\x8e\x2e\xb3\x22\x0f\xf3\x5a\x2b\x82\x20\x97\x10\xca\xca\x5a\xa4\x59\x67\xb4\x74\x8d\xc2\x43\xde\x5a\x44\x58\xe5\x2b\x61\x4d\x0c\x54\x41\x3a\xec\x88\x0b\xf1\x3b\xd2\x49\x81\x48\xd3\xc2\x92\x5a\xb7\x5e\x16\xc2\x65\x37\x9a\xe8\xac\xa3\xfc\x0f\xb2\xae\xbb\xd8\x9e\xb1\xaa\xc0\x07\x5d\xf6\x31\x57\xb7\xc0\xf8\x63\x17\x31\x8c\x13\x03\x72\x0d\xe8\xf6\xf8\x00\x38\xad\x4c\x96\x3b\x87\x44\x6e\xc6\x6f\x76\xb7\x55\x45\x19\x69\x18\x10\x8d\xe1\x75\x43\x78\xdd\xf0\x75\x77\x9b\x5e\x9f\x40\x10\xff\xe9\x1c\x10\x92\xbf\xa4\x97\x01\xd5\x91\x94\xcb\x9e\x56\xcf\x56\x52\x72\xe8\x81\x68\x3e\x39\x13\x83\x03\x97\x12\x1e\x84\x74\xd4\xe2\x7b\xf6\xcf\x19\x97\x27\x69\x2a\x68\x4a\x18\xb0\x7b\xe4\x55\xa7\x11\x6d\x85\xcf\x41\xcf\x1f\x3f\x6e\x75\x06\xe2\xc5\x7a\x8d\xc2\x07\x06\x07\x91\xcf\x89\x67\x35\xd8\xd0\x7c\x1a\x82\x3b\x5e\xb5\xae\x2a\x51\xc3\x14\x48\x7b\x6a\x39\xd3\x01\xd2\x14\x4d\xbb\x83\xa0\xa2\x06\x19\x53\x89\xdb\x20\x4c\x70\x83\x08\x2e\xde\xf1\x25\xa8\x7e\xde\xc6\xfe\xa8\xba\x91\xfb\xfd\x54\x2d\x71\xf0\xe7\xc9\xe2\xa2\xf2\xc9\xae\xdc\xab\x9c\xdc\xa9\xf8\xa4\x72\x9c\x2f\xd9\x80\xf0\x9e\x16\x29\xb7\x3a\x79\xea\x93\x98\x92\xd6\x98\x7e\xd5\xad\x2d\xf2\x81\xac\xe1\x28\x46\xb2\xf8\xe2\x76\x11\xb9\x84\x56\x3d\x7b\x24\xf7\x80\xb7\x7a\xcb\x12\x6a\xd7\x8d\xa0\xb3\x03\x6f\x27\x17\xde\x2e\x4e\x3c\xc8\xfe\x94\xaa\x4b\xc4\x54\x6c\x70\x67\x9d\x93\xf6\x67\x17\xaf\x1f\x84\xd5\x80\xb7\xbf\x9f\x0b\x27\x2f\xab\x7e\x31\x86\x2e\xbc\xee\x70\x05\x7f\x78\xce\x18\x7c\x1c\x13\xe1\x6e\x5f\xcc\xeb\x86\x7d\x4f\xdb\xae\x09\x7c\x88\x57\xe0\xaf\x00\x1e\x4b\x46\xed\x50\x18\xad\x16\x10\xb8\x02\x6f\x1c\x41\xf5\x04\xae\x96\x24\x71\xd8\x99\xac\xcb\xe1\x82\xd7\x76\x89\x6a\xee\x20\x7b\x5b\xc8\x06\xe8\x35\xf1\x1d\xbd\x4f\xdd\x90\x9a\x37\xae\x30\x4c\xde\x5b\xb3\xc9\x99\xb0\x71\x5d\x1f\x63\x3e\xdd\xf3\x0d\xd6\xce\x27\x45\x42\xf5\x9a\xeb\x93\xcd\x27\xa3\x2c\xf7\xe7\x6f\x8e\x3c\x99\xdc\x53\x8c\xec\x2a\xad\xb4\xa5\xd3\xa0\xed\x20\x8d\x80\xe2\xe6\x7a\x1a\x38\x7d\x99\xc7\xd2\xe8\x89\x01\x92\x24\x1a\x1f\xf2\x43\x85\x99\xdc\xa1\x4f\xde\x92\x36\x0d\xf7\x83\x1d\x29\xad\xf0\xce\xe0\xb3\xc7\x18\xeb\xb4\xc1\x7a\x06\x8f\x04\x6e\x93\xea\x6a\xc9\x1d\xf5\x6c\x4c\xaa\xd2\x6d\x1a\x90\x65\xd0\xe2\x4c\x53\x14\x42\x04\xbd\x3f\xad\xa5\x13\xef\x34\x0d\xd9\xd7\xe4\x34\x1a\xd0\x66\x8c\xe5\x55\x15\xf5\x6d\x5a\x28\x0d\x9c\xd8\xdb\x28\x13\x06\x9d\x65\x04\x91\xe9\x01\xaa\xbd\x63\x7c\x4e\xa3\x0a\x8c\x35\x90\x76\x99\xe2\xf0\x67\xc2\x08\x28\x3a\x06\xd5\x70\x39\x45\xcb\x58\xa2\xb0\x84\xc5\x04\xa2\x44\xb5\xe6\x67\xbe\x62\x0a\x48\xe1\x04\x22\xe1\x28\xd0\x84\x17\xd7\xb7\xbc\x2e\xa1\xe6\xf0\x82\x5b\x89\xf8\xe5\x03\xe4\x8a\x29\x93\x53\x87\x87\xa9\x2b\x47\xaa\x36\xff\x4d\x07\x72\x94\x8c\x7a\x85\x2f\x1f\x07\x7e\x6c\x44\x40\xd7\x8e\x03\x63\xbc\xb1\x7a\xce\xad\x2c\x40\x3d\x97\xd3\xc4\x32\x3a\x0f\x68\x8d\xad\x8a\x8a\x40\x91\x43\x6d\xfe\x9f\xdb\x83\xbf\x73\xe0\xc9\x58\xfd\x34\xd7\x8f\x2b\x21\xea\xa1\x72\x3f\x78\xb4\xc0\x82\x5f\x0b\xc1\xe4\xdc\x09\x58\x1c\x0a\x92\x4c\x43\xde\x95\x37\x17\xdf\xb5\x28\x4e\x8a\xfc\x19\x6c\xf4\xc9\x53\x68\x63\x70\x1a\xa8\x61\xf6\x56\x07\x75\x2e\x5a\x42\x29\x71\x69\xd0\x12\x39\xa8\x8d\xbb\x6a\x6e\x59\x92\x7b\x34\x70\x67\xe7\x56\x54\x95\xfb\xff\x5d\xb7\xc9\x8c\xd6\x8d\x08\x2b\x03\x1b\x56\x4a\xd3\x2a\xef\x7d\x54\xd6\x7a\xb1\x20\xfb\xd2\xfc\xb8\x3d\x22\x70\xbb\xd4\x37\xc2\x24\x15\xac\x51\x66\xbb\x12\x2a\x94\x60\x27\x50\x10\x20\x28\xed\x57\x64\xdb\xb8\x76\x70\xe9\x72\xa1\x11\xfb\xee\xe5\xa1\x5f\x41\x17\x75\x2b\xe5\x0f\x8c\x19\x61\xd2\xee\x31\xfb\x42\x85\x9f\xc2\x9d\x0d\x91\x91\x9d\x64\x5a\x34\x85\x91\x58\x3b\x62\x47\xa7\xd5\x62\x96\xf4\x9a\x4a\x91\x21\xe2\x3a\x1f\x69\xf6\xbe\xb3\x5a\x1b\xf3\xd1\x37\xe9\xf3\xea\x17\x09\xb3\xe3\xe7\x45\xc2\x7c\x91\x30\x7f\xdb\x12\xa6\x9f\x0f\xd0\x98\x7b\x4e\x2a\xb0\xdf\x9c\xd6\xdd\x35\x3d\xf6\x51\x5b\x72\x8b\x80\x08\xc2\x37\x6a\xda\x1c\x08\xdd\x2d\x5f\x8e\x94\xb0\x94\xcd\xeb\x8d\x2a\x9f\x7c\x7f\x3f\xd4\x8e\x19\x93\xec\x96\x1c\x73\x7f\x67\x7c\x1e\x71\xf2\x16\xab\x91\x3f\x44\x2f\x0d\x7c\x7f\x68\xc8\x47\xe1\x7e\x87\x58\xfa\xb4\x83\x42\x8c\xd8\xa5\xf0\xa0\x9e\xd9\xcb\x57\xb3\x46\x4b\x61\xb9\xac\x4c\x64\x08\x9f\x37\x30\x98\xdd\x09\xfe\x43\x9f\x92\x10\x33\xba\xab\x0e\x12\x03\xa5\x93\x90\x8c\x34\xa2\x28\x3e\xb0\xc9\x04\x3a\x9e\xb2\x4f\xa2\xd0\x37\xa2\xc6\x95\x81\xea\xc1\x4e\xce\x7e\xc7\x65\xe5\xd6\xc5\xaf\x4f\x34\x2d\x01\x2c\x73\x6e\xd8\x4f\xec\x79\xe1\x50\xd2\x26\xcc\x69\x50\x94\x2e\xec\x9e\x27\x17\xfb\xa2\x16\x37\x52\x37\xc6\xc7\x3d\x35\x16\x89\xb1\xb1\x24\xd9\xce\xe4\x55\x40\xf7\x0f\x81\x12\xb5\x28\x74\x5d\xc6\xc3\x67\x2c\xb7\x8d\xc9\x93\xad\x0a\xb4\xc5\xef\xcf\xbc\x1b\xd6\xf1\x81\x65\x80\xdd\xf8\x2d\x4c\xb7\x57\x8b\xb6\x77\x1c\x64\x56\x03\x79\x8d\x09\x9d\x49\x69\x0c\xc6\x35\x4b\x85\x0b\xef\x36\x7b\xe4\x7f\xc2\xc6\x83\xb8\xc7\xd1\x6d\x29\x4d\x52\xe6\x3f\xf8\x00\x25\x48\xa9\xdc\x5d\xdb\x44\x1d\x0b\x97\x16\x8e\x99\x17\xee\xce\x51\xff\xfb\x44\xef\x3a\xad\x9c\x4c\x8a\x44\x20\xb9\xb8\x6b\xfc\x8b\x72\x3e\x6f\xac\x3b\xaf\x23\x36\xc6\x4c\x16\x90\x6c\x49\x61\x9a\xc6\xec\x0c\x51\x9b\x0e\x5e\xc1\xf4\xb3\x8b\xd1\x9e\xed\x62\xb8\x5f\xd9\xa8\x4f\xe9\x92\xa7\xa8\x14\x4e\xbb\x03\xdf\xbc\xdb\x1d\xef\xbb\xcf\x9e\xee\x90\x56\xbf\x6e\x96\x3d\x0f\x30\x7e\x76\x11\x65\xf1\xd3\x53\x3e\xc5\xcf\x6e\xb7\x06\x3f\xfd\xa5\x0e\xfc\xac\xca\x1e\xad\x22\xfe\x5e\x06\xc9\x76\x66\xa1\xcb\xd1\x9a\xbb\x13\xe2\x38\x74\x49\x41\x1a\xb9\xfd\x05\x53\xbe\xc6\xae\xfb\x6b\x1f\xb8\x14\xe8\x2c\x95\x4c\xab\xc0\x92\x22\x4b\x81\x28\xb7\x74\xe7\x76\x98\xd9\x8e\xe2\x4e\x2b\x20\xd1\x91\x92\xe1\x9c\x2f\x86\xd7\x62\xd9\x7b\x5b\x76\x38\x05\xab\x2f\xc7\x79\xcc\xf9\xa2\x47\x3f\x18\x40\x7b\x0f\x4a\x7a\xf8\x1e\x43\x70\xf1\xcb\x09\x31\x5e\x1f\x15\x1c\x23\x92\x0b\x3d\x5f\x34\x56\x24\x0c\x9a\x58\x69\x6f\xae\x95\x81\x90\x9c\x60\x1d\xbd\x61\xe8\x76\x18\x89\x5c\x87\x02\x38\xe9\x67\xe7\xeb\xbf\x2b\xde\x46\xfa\x79\xc6\x01\xc0\xad\xc9\xf6\x4f\x86\x61\xf7\x4c\x88\x61\xf7\x49\x8a\x61\xfb\x4c\x8c\x61\x21\xbd\xee\x3e\x37\xe6\x93\x4f\xec\x6b\xdd\x19\x12\x61\xef\xba\x33\x19\xbe\x53\xe8\x47\x1a\x5f\x90\x9b\xc2\xcb\xc2\x1d\x00\xd7\x6c\x9a\x9e\x45\xb7\x15\x6c\xd6\x18\x43\x26\xbe\x86\x22\x0c\x89\x9a\x04\xda\xff\xad\x34\xa8\xd8\x28\x26\xe7\x0b\x04\x66\x84\x5b\x37\xf4\x92\x11\xd9\x84\xc3\x48\x0a\x88\xa5\x61\xe2\x2b\x58\xc6\xf1\x65\x2f\x17\x9c\xbd\x5c\xf0\xce\xed\x9f\xf2\x82\x63\x7e\x5a\x9f\xf4\xc9\x56\x5d\x47\x6c\x4e\x90\x29\x7c\x22\x2a\xf6\x4b\x23\xea\x25\x73\xda\x66\x8c\xc2\x86\x62\x14\x4e\x70\xc1\x38\x66\xf2\x2c\x75\x97\x5c\x1e\x51\xd1\x02\xe9\xee\xed\x57\xa7\x6a\x03\xea\xc0\x3d\xc8\x5e\xbb\xab\x1c\x58\x06\x57\x2b\xac\x60\xaa\x4a\x63\x20\x58\xa6\x5c\x3b\x9d\xeb\xf4\xe3\xf9\x6e\x16\x8b\xa7\x50\x63\x4e\xef\x98\x20\x2e\x44\xf8\x25\xaf\xfd\x19\x5c\x1e\xec\x5a\x2c\x07\x14\xae\x48\xb5\x76\xfc\xc3\x18\x75\x9b\x03\xc0\x77\x05\x16\x5b\xb7\x40\x8f\xae\x01\x75\x85\x0c\xcf\x5b\xf9\x45\x78\x44\xdd\xa9\x07\xb4\x78\xfa\xd9\x04\x33\x8e\x67\x02\xf0\x92\x7d\x16\x5a\x38\x06\x90\x79\x07\xd4\xe2\x51\x55\x1a\x06\xc8\xbe\xb8\xb0\xf7\x9e\x6a\x38\xa6\x59\xfe\xd4\xb5\x58\x1e\x1a\xc2\x78\xd0\xca\xcc\xe4\xc2\x57\xf3\x01\x4a\x40\x27\x97\xfd\x04\x61\x9c\xbe\x0b\xbc\xf3\x63\x35\x60\x1f\xb5\x75\xff\x7b\x0b\x11\xdd\x70\xd6\xcf\xb5\x30\x1f\xb5\x85\x6f\x1e\x7d\xb1\x70\xb8\xf7\x5e\x2a\x72\x87\x92\xa1\x08\x32\x0f\x20\x9b\xd6\x47\x0a\xc3\x92\x50\x10\x59\x58\x56\x69\xd8\x58\x31\x5d\xfb\x35\xb1\xbe\xd4\x83\xa1\x2e\xbc\xab\x27\x71\x72\xaf\xe9\x83\x96\x52\xd7\xd9\x4a\xde\xd1\x5d\x70\x63\x4b\xff\x0b\xd8\xc8\x21\x24\x21\x84\x37\x43\xc1\x02\x6e\xc5\x95\x2c\xd8\x5c\xd4\x57\x80\xe6\x51\xcc\x76\xdf\xa0\xfe\x74\x1b\x3f\x3b\x51\xef\xf4\xc5\xbd\x4f\x06\xb0\xba\xf7\x10\x60\x7e\x5f\x86\x89\xbd\x20\x8b\x98\xf3\x85\x3b\x14\xff\xe7\x38\x01\xec\xcb\x3f\xa0\xc0\x88\x19\xb1\x53\x5f\x9e\x3e\xfd\x8d\xcc\xc5\x69\x37\xae\x07\x27\xf2\xff\xd2\xc8\x1b\x5e\x09\x4c\xbb\xe0\x2a\x80\xae\xeb\xe9\x0a\x9b\x1e\x50\x95\x11\x47\xa5\x82\x79\xe6\xe0\x5a\x2c\x0f\x06\x2b\x07\xe9\x60\xac\x0e\x22\xa4\x4e\x76\x74\x02\x43\x03\x9b\xe4\x01\xfc\x76\xb0\x6f\xce\xfe\x44\xa2\xfd\x0e\xa7\x84\x2c\xef\x67\x15\x47\x4f\xcd\xae\xfe\x90\x76\x3f\xeb\xe0\xb2\x2f\x93\x67\xa2\x27\x8b\x92\x6c\xf6\xee\x38\x80\x64\xcc\xfe\x01\xe1\xbd\x56\xef\x86\x6a\xdd\x75\x87\xd9\x5a\x0b\xff\x0a\x20\x53\x3e\xd5\x36\x43\x31\x88\xb1\x68\x1b\xd6\xeb\x27\x70\xe0\xe8\x29\x7b\x17\x61\xb0\xc1\x04\xef\x98\x36\x25\xdf\x3a\x45\x58\xaa\xa2\x6a\xc8\x77\x03\x4d\xd1\x91\xf0\xf0\x8b\x73\x8f\x43\x15\x3b\xf0\xa7\xc9\xc7\xbe\xad\xe4\x59\xb5\x23\x81\x20\x30\x2c\xc4\xbe\xe0\x5a\xed\x7b\xae\xd3\x2d\x59\x2d\x39\x74\x7a\x91\xcb\x1e\xef\xe4\xa4\x16\xec\x6c\xc6\x95\x12\x55\x82\x4d\x42\xb6\x90\x50\x7c\x14\x04\x12\x2a\x39\x7a\x98\xd7\x1c\xf5\xf4\x4d\x05\x24\x9c\x98\x74\xb6\x27\x98\xfe\x5f\x53\x09\xd0\xcd\x48\xf5\x7d\x8b\x7f\x22\xb0\xf6\x4c\xdf\xb2\x52\xb3\x5b\xa8\x32\x75\xe3\x98\x16\x04\x7f\x19\xcf\xee\x92\x91\x42\x9c\x68\xa1\xe7\x8b\x5a\xcf\x65\x08\x9e\xa2\x6d\xdc\x2b\x90\x47\xd5\x74\x40\x6c\xcc\xf7\xa0\x6a\x54\x5e\xc0\xe7\xdd\x19\xb3\xbc\xbe\x12\xd6\xf5\xc6\x54\x33\x9f\x88\xce\x68\x23\x0f\x81\x18\xfb\x2d\x15\x7c\xdf\x6f\xc9\x52\xdc\x86\x9f\x7f\xfe\xd8\x17\x30\xf7\x30\xb6\xdc\xb4\xb7\xb7\xba\xae\xca\x5b\x59\x7a\x87\xf3\x91\x7b\xf8\xb8\xeb\xf8\xf7\x8c\x9f\xdb\xe3\x84\xdf\xde\xca\xb2\xf7\x72\x40\xa3\x7c\x19\x7c\x18\xb8\x5b\x06\x06\xeb\x40\xf5\x38\x25\x14\x3d\x81\x16\xc7\xec\xad\xc4\x24\x70\x68\x0f\x8e\xeb\xf9\x44\xaa\x08\x04\x10\x97\xd9\x11\x63\x77\x5f\xbc\x6a\x62\x84\xc5\xf4\x5d\xc8\x9c\xd1\x76\xc6\x8c\x9c\x37\x95\xe5\x4a\xe8\xc6\x54\xcb\xce\x47\xe5\x69\x96\x7a\x5a\x89\xaf\x78\xb2\xfb\x30\xb9\xd0\x28\x67\x76\x10\x22\x1b\xd1\x2e\x56\xb8\x5d\x8c\x30\x2f\x4f\x02\xe7\x0b\x59\xe1\xe2\xab\x28\x28\x79\x6b\x51\x35\x57\x72\x4b\x96\xea\x6f\xac\x06\x4d\x2c\xf7\xd1\x18\x11\x71\x95\xba\x56\xe1\x7b\xa4\x92\x31\x4f\xcb\xe1\x3f\xaf\x2f\x17\x53\x8a\x85\x50\x25\x00\xd8\xbe\x8b\x27\x17\x07\xbf\xd7\x95\x23\x30\xd8\xbe\x54\xcb\x63\xc8\x66\x14\x3c\x09\x4f\x98\xe9\xaa\x34\x4c\x7c\xb5\x35\x77\x84\x69\xee\x48\x50\x68\x33\x65\x5c\x75\x27\x32\xcf\xa3\xa0\x03\xdb\x3b\xb7\x7f\xd8\xea\xe6\xcf\xb1\x40\x79\x9c\x7b\xf6\xf5\x9e\x0b\x0d\x21\x21\xa6\xbb\x62\xf2\x04\xa9\x35\x05\x81\x62\x00\xeb\x6a\x26\xea\x8e\x85\x81\xcc\x9a\x12\x28\xad\x51\xbd\x14\x55\xff\x26\xaa\x04\x4d\x01\xbf\xa5\x0f\x64\x26\xb5\x68\x69\xd4\xf4\xa5\x2f\x4e\xdc\x41\x83\xa6\x73\x9b\xf0\x01\xb7\xea\xbe\x23\xca\x3e\x67\xc6\xad\x65\x0c\xf5\x6e\x94\xda\x46\xc5\x1e\xa2\xe6\x0b\xb7\xdc\x08\xdb\xcd\x9a\x92\x8b\x0e\xb1\xa5\xbb\x80\xe9\xf9\xa2\x9f\xb0\xe6\x10\x64\xe5\x79\x4c\x13\x36\xfc\x33\x49\x19\x2a\x7b\xd2\xc9\x17\x7e\x7d\x3c\xa4\xa6\x08\x5e\x64\xec\xa3\x74\xbb\x52\x70\xdb\xb9\x40\x62\x27\xbe\x40\x23\xf8\xf2\xa5\x77\xe5\xfd\xa4\xa5\x97\x43\xe0\xdf\xf9\x22\x8c\x42\x80\x6c\xa3\xe4\x2f\x4d\xaa\x0e\x00\x06\x59\x98\x36\x3d\xbf\xaf\xb9\x5d\x15\x22\x1a\xaf\xce\xa5\xb9\xee\x03\x1d\xbb\xd2\x38\xbf\x12\x3f\x9c\xbd\x65\xf4\x6d\x27\xfb\x52\x1f\x03\xd3\x7d\x21\x29\xaf\x0a\x11\x8d\xb6\xa5\x34\xd7\x7b\x82\x9d\xed\x2e\xd5\x2f\xca\x8f\xdb\x42\x1d\x1f\xcf\xfe\xd5\x96\x7a\x3d\x92\x5e\x02\xf1\xb8\xd4\x0d\xbb\x25\x84\x2a\x92\x9a\x3f\xcb\xc5\xf7\xec\xad\x32\x4d\x2d\xa2\xe7\xb6\xdd\x95\xe3\xba\x9d\x65\x68\x00\x01\x33\xdf\xef\xcd\x56\xb6\xef\x53\xf2\x9c\x8d\x6f\x0b\x5e\x5b\x10\x8f\xfb\x1e\x83\xd0\xd0\xd3\xa7\xe4\x0b\xd5\xe5\x1c\x8c\xa7\x3e\xee\x6e\x40\x50\x3c\x01\x66\xd6\x3f\xe4\x76\x3e\x41\x9f\x4b\xf7\xfa\x5d\x40\x66\x64\x27\xa5\xb8\x39\x31\x25\x7f\x3d\x80\xd7\xf8\xcc\x92\x7c\x4c\xdc\xb0\x83\xd7\x07\x23\x76\x29\xe7\xb2\xe2\x75\xb5\xcc\x0a\x67\xc4\xe7\x1c\xb3\xf0\x1d\x82\x57\xee\xd5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xe1\xd3\xba\xe9\x9e\x2d\x51\x76\x3c\x7e\x6c\xe2\xc2\x1e\xd4\x7e\x89\x74\xa6\xf7\x99\x28\x3d\xc7\x26\x7e\x94\xa1\x0e\x9e\x47\x92\x2e\x95\xa3\xf3\x23\xf6\x85\x08\x34\xf1\x2d\xdc\x34\xb8\x32\xfe\x89\xa7\x5a\xd4\xc7\xd1\xfb\x76\xd2\xe0\x56\xcd\xc1\x4f\xb7\x4c\xdb\xb5\xc4\x2b\x69\x3f\x89\x85\xee\x25\x21\x60\x93\x96\x3d\x4e\x5a\xf7\x85\x36\x12\x60\xe5\xb9\x65\x1c\xaf\x6d\xd1\x54\xdc\x89\xd5\x68\x8d\x1b\xb1\xf3\xb7\x17\x9f\xde\x9e\x9d\x7e\x7e\x7b\xfe\x3d\xfb\x81\x7a\x92\xa9\x84\x37\x62\x9f\x53\xd0\xce\x24\xe0\x97\x90\x11\xc3\xbb\x06\x44\x86\xb8\x8a\x50\xdc\x00\xc5\xc6\x15\x1b\x2b\x69\x63\x31\x0b\x8c\x3b\xab\xb4\x12\xbe\xd6\xfb\x42\x93\x35\xf0\x4a\x5a\x82\x28\xc2\xce\xdc\xcf\x79\x6f\x94\xcb\xe1\x44\x99\x98\x8a\xf1\xe8\xa2\x45\x5c\xdc\x7d\x89\xff\x1e\xad\xbe\xaf\xec\x1b\x6a\x07\xf8\x7c\x63\xb4\xfe\xc7\xef\x91\x19\x84\x32\x3a\x1e\x95\x50\xd7\x59\x95\x1b\xa8\x81\xef\xd8\xcc\xe1\xe8\xd0\x0b\x14\xd5\x4a\xc9\xa4\xd0\x69\x0a\xbc\x9a\x1f\xb6\x11\x63\x3f\xfa\x88\x6e\x40\x5e\x59\x5f\x7d\x09\x41\xbc\x92\x1a\x3e\xad\x23\xeb\x33\x10\x9b\x49\xfa\x52\x42\x6a\xbd\x92\x37\x84\x9f\xb1\x57\x2b\x5e\x7c\x7d\xef\x5a\xb6\x71\xdc\xa4\x7f\x7c\x7a\xbf\xdf\x91\xe1\xfd\xeb\x3d\x2e\xba\xb6\x34\xaa\x42\xcf\xe7\x08\xeb\x39\x0b\xf9\xfe\x31\x65\x3f\x50\x85\xbd\x69\x3e\x08\x50\x3a\xdd\x72\xf8\x5b\xf4\xcc\x37\x6a\x69\x3a\xe1\x6b\xca\x59\x50\x51\xcc\xed\x5f\x35\x83\xb0\x70\x8d\x4f\xc7\x26\xd2\x7e\x12\x5e\x7e\xf2\xe9\xed\xe9\xf9\x87\xb7\xa3\x79\xf9\xe8\xa4\x45\xa8\x72\xa1\xa5\xb2\x66\xbb\x7e\xb3\xad\x46\x60\x77\xf2\x13\x5e\xda\x97\x3b\x87\x86\xfe\x8c\xf9\x2f\x12\xf8\x60\x4a\x27\x4f\xf6\xd0\xea\x85\xae\xf4\xd5\xfa\x62\x19\x3d\x36\xe7\x77\x08\x03\x38\xe4\x43\xb7\xeb\xfb\x15\xf5\xbb\x54\x3d\x6b\x4b\xf9\x58\xe5\xcc\x2d\x43\x9c\x6b\x90\x9a\xa1\x38\xd9\x33\x9d\xee\x83\x08\x67\x2b\x6b\x80\x8a\x24\x5c\x60\x8f\xac\x1c\xa1\x8a\x93\x8a\x83\x5d\xa5\xb6\x87\x5e\xba\xed\x02\x9b\xa3\x3f\xdb\xcb\x4a\xe6\x6b\xe6\xdb\xe4\x04\x6e\x51\x8b\x61\x40\xd5\x84\x42\x78\xba\x4e\x18\x6e\x4a\xef\xbc\xf5\xc6\xdb\x7a\xf0\xa9\x6a\xd9\xb6\xe2\x24\xe9\xe1\xde\xf4\x85\x58\x46\x55\xb5\x8c\x68\xdd\xa4\x45\xf3\x2b\x44\xcb\xac\xc9\x4c\xbc\xa8\xe5\x8d\xac\xc4\x15\x20\xe6\x4b\x75\x95\xe0\x0c\xa4\xc8\x04\x04\x29\x91\x1b\x5d\x3f\xb8\xbf\x92\x12\x29\x70\x2e\x3e\xfe\xf8\x19\x8a\x2f\x80\x83\xeb\xde\x42\xb8\x7b\x21\xdc\xb7\xe1\x70\x08\x26\x83\xa3\xbf\x3b\x79\xb2\xac\x8e\xd9\xcf\x82\xde\xa3\xa1\x3a\x44\x0d\x85\x1b\x67\x3a\x40\xf5\xc3\x58\xe3\xca\xc2\x71\x44\xf7\x3e\x3d\x75\xe2\x9e\x74\xb2\x12\xb2\x9a\xec\x79\xa8\x53\x8f\x08\xdb\xe8\x63\x7a\x7c\xd9\x73\x8f\x64\x7f\x67\x2a\xe7\x4d\xab\xeb\xce\x67\x70\xfc\x78\x7a\xc8\x99\x59\xce\x2b\xa9\xae\x23\x7c\xeb\x54\x13\x82\x89\x60\xee\x07\x7f\x62\x6b\xc1\xab\xcd\x94\x72\x97\xf3\xb1\x57\x2a\x69\x77\xb0\x00\x82\x85\xce\xdd\xb3\xbf\xf8\x6b\x4f\x6e\xe8\x94\xc4\x1d\x1c\x3c\xbb\xf9\x4a\x53\x18\xd9\x87\xac\x41\x83\x8c\xa6\x29\x36\xbe\x3c\xbb\x1c\x3f\xaa\x85\x7a\x13\x4b\x80\xd1\x3d\xa1\x54\x27\x7f\xd9\xe6\x1d\x1e\xb2\xaa\xd9\xfe\x0c\xaa\x77\x17\xba\xb6\xbc\xda\x13\x11\x28\x66\x7c\x71\xda\xd8\xd9\xb9\x34\x00\x56\xd3\x57\x08\x58\x69\x9f\x44\x3a\x63\x89\x0d\x8f\xeb\x2c\xfd\x71\xa0\xe7\xce\xfe\x72\x7a\xc1\x78\xe3\xf6\xd7\x12\x06\xfc\x5e\x1d\xee\x7e\x64\x97\x98\x61\xb0\xe3\xbc\xa8\xf5\x96\x59\xf9\xa7\x1e\x7a\x4e\x0f\x11\x87\xfb\xe2\x8b\x00\x1a\x8a\x14\xec\x19\xfb\x1f\xa4\x92\x56\x72\xab\x3b\x96\x95\xcd\x8e\x40\xd6\x36\x18\x04\x1a\x63\xf5\x9c\x4e\xf0\xd8\x3f\x01\x2e\x64\xe0\xe2\x2b\x8d\xa2\xb5\x00\xa4\x77\x58\xb1\xb1\x72\xb2\x36\x2f\x44\x2b\x00\x72\x00\xd8\xec\xd8\xb7\x0c\xcf\xfc\x2b\x19\xa8\x00\x87\xb4\xfa\xf3\xf7\x59\xc5\x9c\x95\xf2\x63\xde\x4a\x11\x6b\x5b\xed\xd5\xe2\x23\x7f\xe9\x4b\x14\xe4\x2f\xaa\x65\x69\xc3\x09\xfe\x7b\xc3\x2b\x5c\x98\x8f\xfb\x36\x4b\xe5\x8b\xdc\x77\xbc\xf9\x0e\xd1\xd0\xe3\x76\x7c\x0c\x5a\x7a\x63\x10\xe1\x14\xe7\x63\x6b\xae\x8c\xdb\xa3\x5c\x17\x3b\x24\xc7\xd3\x21\x3b\xb2\xc5\xe2\x78\xaf\xf3\xec\x1f\xda\x5e\x35\x2a\x15\x38\x70\xe4\x9f\x71\x5b\xde\x87\xd0\xf6\xae\x83\x7c\x10\xd7\x10\x9c\xf2\xbe\x56\x15\x6a\x15\x76\x2b\x9d\x17\xb2\x7e\xf6\x5e\x1a\xeb\xeb\x66\xc1\x17\xd2\x50\xb9\x07\x90\xbb\x2e\x9c\x22\x27\x17\xff\xc3\xcb\xb2\xfe\x1e\xb9\x14\xc9\xe4\xf0\x6f\x13\x30\x37\xb9\x0a\xbe\xc4\x23\xbb\x5c\x10\xa6\xf1\xe7\xb3\x0b\x86\x75\xec\xfe\xf4\x07\xac\xd3\xff\xff\xfd\xfe\x0f\xaf\x3a\x6f\xf7\xd3\x05\x8f\xef\x68\xc7\xd8\xbb\x8f\xe9\x59\xc4\x0d\x66\xf1\x81\x00\xd7\xe8\x64\x93\x4b\x0c\xc7\x73\x94\x95\xae\x3a\x1e\x2c\xb7\xcb\x81\xde\xef\x26\xc1\xbc\xc4\xd9\x3d\x69\x9c\x1d\x0b\x19\x25\x48\x24\x7a\x1e\x97\xb4\x29\xa4\x18\xae\x92\x1d\xa4\x38\x17\xcf\x8f\xe2\x6c\x5d\x9b\xed\xa7\x28\x3f\x3d\xa9\x33\xde\x57\x29\x8c\x21\xec\xe7\x1f\x2f\xff\xe7\xfd\xe9\x9b\xb7\xef\x61\xa4\xe4\xbf\x77\x47\x43\xaa\x9d\xe3\xa7\xba\x1f\xb5\x2e\xca\xeb\xf6\x05\xe9\xe7\x96\x51\x2d\x87\x8c\x62\x1f\xdf\x5d\xf6\xf5\xc5\xdc\x57\x40\x57\xd3\x4e\x73\x7f\x5c\x6b\x1b\x14\x9f\x13\xf5\xfe\xf2\x47\x76\x36\xca\x25\x38\x5b\x99\xfe\xe5\x76\x0a\x47\x78\x6f\x15\x69\xeb\x0e\xb0\x67\xe0\x77\x70\xf3\xc5\x35\xd8\xbb\xc7\xe1\x81\xd6\xaa\xab\x1c\x50\xf7\x4f\x2c\x3a\xc4\x56\x5e\x04\x70\x97\x14\x69\x5b\xed\x68\xb6\xa3\xd6\xc2\x04\x90\xcc\x67\x7a\x52\x16\xeb\xca\x40\xf4\xa1\x5e\x6b\x3b\xc8\xaa\xca\x66\xbe\x98\x2c\x97\x62\x53\x4d\x17\x1f\xa1\xc0\xe7\x09\x74\xf8\x3e\xf1\x0d\xe2\x57\xf8\x0d\x42\x11\x3f\x3a\x01\x84\xd7\xee\x31\x90\x36\xf4\xd7\xf7\x20\x87\x86\xed\x2c\xb9\x5e\x3b\xc4\xb8\xf1\x2c\x9a\x62\x8e\xd2\x74\xba\x27\xde\x3e\xf6\xb8\xda\xce\xcf\x3b\x2a\x3a\xfb\x56\x72\x16\x33\x6d\xb5\xda\x39\x4a\x7e\x5d\xf3\xfc\x42\x5f\xc0\x13\x67\xb1\xda\x60\x52\x8a\x1b\x22\x28\x83\x33\x02\x6a\xe8\x10\xbb\xd0\xca\xbb\x25\x72\xa7\xc4\xa3\x8b\x20\xe5\xf8\x7c\x4f\x97\xef\xdb\x4d\xf1\xec\x6b\x0c\xde\x6b\x30\x48\xd9\x3b\x27\xc5\x35\xf1\x2b\x36\x3e\x27\xd1\xcc\x27\x9c\x18\x3a\x90\x6c\xf3\x89\xdc\x1b\xeb\xd4\xb5\xbd\xd5\x75\xff\x54\xef\xbc\x61\x2b\x56\x81\x7e\x5b\x49\xc5\x7a\x8e\xb7\x07\xc7\xf8\xc4\x37\xe8\x12\x6e\x50\xab\x92\xc4\xa6\x9b\xf4\x10\x17\xe9\x69\x2f\xd0\x7d\x19\xd5\xc3\x66\xf9\xee\x55\x48\xf7\xc7\xad\xe7\x54\x7d\x33\x32\x26\xb8\x4d\x8a\xd4\x82\x83\xc9\x25\xb9\x71\x7b\xa3\x0e\xb5\xc6\x4a\xe1\x7d\x08\x83\x6f\x83\x06\x5c\xc4\x81\xae\x2a\xb7\xaa\x5a\xa5\x08\xd2\x94\xc6\x3b\x60\x88\xb2\x3c\xe7\x0b\x2a\xa8\x56\xea\x5b\x75\xcb\xeb\x92\x9d\x5e\x8c\xf7\x43\x0d\x7a\xc4\x59\xe3\x49\xea\x86\xe8\x95\x47\x5a\xc7\x96\x54\x50\x4f\x40\x09\x6c\x36\x91\xd6\xc4\xd2\xcb\xc2\xa6\x7a\xa5\xa3\x82\xc1\x97\xe5\xee\xb2\xbb\xb7\xd4\x53\xc2\x30\x15\xd3\x85\xe5\x95\xaf\xd6\x42\xe5\xf8\x5e\xbd\x7a\x85\xa6\xb0\x57\x7f\xfc\xe3\x1f\xb1\xbc\x64\x29\x0a\x39\x5f\x7d\x10\x9e\xfa\x97\xd7\xaf\x47\xec\x3f\x4e\x3f\xbc\xa7\xf2\x3f\x06\x51\x49\xb0\x67\x58\xf7\xb4\xb1\x19\xb0\x7f\xbb\xfc\xf1\x63\x2c\x0d\x92\xff\x0a\xdb\x1a\xa6\x37\x62\xe7\x49\xfc\x53\x6a\xe8\xe2\x76\x46\x55\x1d\x2d\xe3\xd3\x29\x1e\x0c\x5f\x9f\x84\x2e\x9c\xcf\x1e\x97\x57\x33\x5f\x0e\xcc\x1d\x89\x0a\x02\xb3\x9c\x4a\x8e\xa6\x41\x8f\x6c\x80\x71\x66\xd0\x57\x20\x93\x30\x94\x01\xab\xe4\xb5\x60\x53\x03\x45\xc1\x22\xfc\x5f\x2d\x8c\x13\x4a\xa9\x08\x36\x76\x16\x77\xc6\x88\xce\x58\x0f\x0f\xe1\x01\xea\x5c\x86\x28\x37\xdd\xd3\x1d\xf2\xf0\xad\x84\x5d\xec\x63\x49\xf1\x0a\xba\xd5\x7a\x1a\x8f\x4c\x36\xd6\x8b\x30\x1a\xdc\x3a\x42\x09\x88\x74\x82\x57\x1a\xca\x99\x86\x9d\x8e\x5c\xcc\x87\x1c\x2c\x17\x62\xfb\x54\x7a\x83\x2f\xf6\x05\xe0\x45\x42\xf5\x81\x77\xae\xae\x97\xc7\x8b\xf8\xd6\x19\xae\x02\x9f\xe8\xc6\x7a\x1f\x36\xfd\x0e\x09\xd8\x56\xfb\x25\xea\xf8\xb2\x1d\x90\x27\x77\x41\x20\xee\x0d\x62\x9a\xfb\x9b\x81\x27\xe4\xa2\xc4\x80\x09\x5e\xcc\xd8\xb5\x58\x0e\x91\x6e\x2d\x38\x64\xf3\x60\x11\x22\xb7\x16\x59\x85\xa9\xa4\xd6\xda\x59\x58\x32\x1f\x18\x90\x70\x1f\x9f\x0d\xe4\x85\x50\x43\xf2\x12\xc1\x88\xaa\xc4\x52\xe0\xb1\xaa\xa9\xe0\xba\xff\x9a\x6a\x0a\x8c\x57\x92\x54\xdc\x7d\x13\xa5\x6b\x66\xee\x7a\x73\x8c\x86\x70\x74\x90\xb8\x5b\xa3\x56\x5a\x53\x6d\x75\x12\xfe\xe0\x85\xdc\xa3\x33\x27\x11\x15\x50\xcd\x98\x0a\x2b\xd2\xb3\x7e\x95\xc2\x42\x64\x49\x34\x46\xd8\x86\x96\x06\xeb\x92\x36\xaa\x12\xc6\x30\x09\x33\x9c\xf3\xfa\x5a\x78\xc0\x18\x5e\x8d\xd8\x85\x1b\x64\xc0\xaf\x42\x58\xe4\x1b\x2a\x1b\xcb\x97\x59\x76\x90\x7b\xc9\xe1\x68\x74\x88\x04\x7e\x4d\xae\x50\x8f\xf3\xb1\x1b\xa6\xee\x0e\x58\xba\xd9\x41\xfc\xc0\x17\x06\x91\x81\x9d\xc8\x07\xc8\xd7\x1a\xb2\xe0\xec\xcc\x33\x30\xde\x19\x44\x69\x75\x3a\x3b\x00\xc0\xee\x8a\x5b\xbe\x0b\x6a\x79\x27\xbf\x45\xfe\xd9\x1d\xad\x7c\x27\xac\xf2\x4d\x48\xe5\xb4\x53\x74\xdb\xfa\x63\x38\xdf\x03\x62\x7b\xde\x0b\xe6\xd5\x7f\x72\x23\x25\xc8\x1d\x19\x4a\x4f\x27\x19\x91\x40\x9f\x2a\xf1\x4d\x09\x85\xe3\xe9\xba\x22\xb0\x3e\x59\x30\x91\x97\x3d\x0d\xc5\x62\x5b\x4f\x2d\x0d\xf6\xab\xe5\xc2\x7a\x8b\x87\xed\x4f\x1f\x71\xb1\xfd\xe9\xe6\x0c\x6c\x7f\x72\x85\x2d\x49\x4b\x0a\x44\x3f\x8d\xe2\x87\x25\xb5\x1a\x30\xbb\xe3\x15\x1c\xb1\x0f\xc4\x14\xf0\x30\xf2\x89\xd1\x55\x63\x43\x26\xd3\x1a\x8e\x01\x9d\x7a\x84\x6f\x4c\x29\xf5\x8f\x25\xfc\x03\x38\x27\x92\xe5\xbe\xac\x04\x3f\x3b\x5d\xf1\xbe\xc5\xe8\x7e\xb5\xc1\x24\xf7\x58\x43\x2f\x4a\xec\xbc\x8e\xbe\x83\x80\x3b\xe1\x63\xa9\x33\x19\x07\x22\x49\xac\x41\x01\xca\x8b\x2b\x54\x07\xaa\xf7\x14\xbb\x59\x6d\x68\xac\x64\x98\x38\xbd\x18\xef\xa4\x01\x24\xed\x37\xe8\x00\xe9\x13\xbf\x62\x2d\x60\x8c\x5a\x40\x5a\x76\xe7\x3c\xce\x9c\x4c\xca\x8e\xec\x3c\x7b\x31\x72\x65\xd8\xef\x1c\xb1\x4c\x83\x4e\x73\x0c\x3d\x34\xf6\x44\xb2\x9a\xe0\xee\x79\xaf\x23\x5c\xe2\xe7\x2e\x72\x3e\xa2\xf8\x08\xeb\xd1\x29\xba\xb1\xfd\x59\x2d\x76\x07\x93\x65\x97\x50\xda\x06\xf5\xc1\x44\xb1\x5c\xe8\xf2\x7b\xac\x0a\x01\xb5\xe3\xb0\x28\xcc\x00\x6b\xe3\x98\x01\x2a\x8c\x4e\x8a\x48\x7c\xc5\x75\x62\x72\xdf\x59\x6e\xd8\xa9\xca\xd1\x7d\xea\x1c\xb9\x0d\x84\x99\x5f\xf4\xdd\x45\x76\xcf\xb2\x45\x2c\x61\x4d\xbb\x15\x42\xc9\xf6\x94\x7a\xf2\x1b\x68\x8a\x99\x98\x73\xc4\xf0\xf3\xd3\x73\x54\xe6\xb6\x96\xd6\x0a\xc4\x52\x12\x35\xd4\x7c\x1d\x64\x3e\x83\x83\x9b\xd7\x07\xbb\x94\x83\xb9\x67\xc5\x1e\x16\x77\x61\x0f\x8b\x71\x91\x89\x6c\xee\x5c\x83\x2e\x51\x01\xf0\xa6\x6a\x19\x24\x1c\x83\xb9\xc1\xd5\x7b\xf4\x89\xef\x43\x8f\xda\x55\x7f\x1a\x04\x81\xe1\x45\x7f\x7a\xd1\x9f\xf6\xa2\x3f\x25\x8c\xc5\x13\x9c\x35\xba\x54\x1a\x30\xec\x15\xaa\x98\xc8\x94\x00\xf0\xb8\xa3\xe9\x55\xa9\x58\x29\x1d\x2d\x6e\x4e\x1f\x3a\xf4\x0a\x16\x9d\xe3\xc6\x4e\x87\x7f\x62\x42\x15\xba\xc4\xcd\x77\xfd\xd7\xc6\x82\x68\x13\x75\x92\x74\x2c\x73\xff\xae\xd4\x6a\x07\x7d\xef\xba\x75\x3b\xd1\x01\xef\x0a\x7c\xb7\x27\x06\x1f\xd9\x7a\x48\x26\xa6\xe9\x07\xac\x01\xe2\xef\xd1\x09\x89\x55\xa7\x43\x11\x7c\x28\x1d\x7b\x84\x5f\x8e\x8a\x45\x33\xa0\x07\x46\x73\x31\xd7\xf5\x72\x10\x1e\x72\x3f\x66\xad\xe8\x89\x63\x90\x09\x8a\xa6\x76\x1a\x60\xb5\xfc\x56\xa5\x03\xbf\x40\x8f\x2c\x1c\x84\x7d\xea\x57\x34\x28\xfd\xe4\x47\x22\x82\x8a\x81\x7e\x1f\x8b\x28\x4d\x03\xe4\xa1\x19\x44\xb5\xd3\x7d\x2b\xd4\x0d\xbb\xe1\x75\x87\x48\xbc\x75\x9f\x7b\xca\x03\xa5\xbc\x91\x66\xb7\x7a\x87\xad\xa9\x5f\x12\xd3\x40\xbb\x8e\x6e\xec\xa2\xb1\x44\x29\xfd\xad\xf0\x29\xf3\xe1\x36\xb4\x84\xa2\xd7\x07\x3b\x0d\xe3\x9b\xa9\x2f\x8c\x9f\x1d\xab\x0c\xe3\xe7\xbe\xb5\x86\xf3\x5e\x76\x3e\x36\x7b\x2d\x2c\xee\x3f\xfe\x58\xec\xe3\x1e\x46\x16\x19\x71\x1e\xbc\x70\xfa\x48\x17\x0d\xc3\x4d\x76\xb2\xdb\x10\x42\xfd\x7a\x93\x0d\xfd\xf8\x2b\xb6\xd6\xec\xd7\x67\x4b\xf9\x85\xbf\x71\x87\xed\x25\xd5\x33\x78\xf1\xd6\x76\x3a\x82\x2f\xde\xda\x17\x6f\xed\x8b\xb7\xf6\xc5\xda\xf0\x62\x6d\x78\xf1\xd6\xb2\x17\x6f\xed\x5e\xd6\x70\x7f\xde\x5a\x14\xf5\xd6\xf9\x6c\x49\xd8\x8b\x0e\xdb\x47\xf5\xd7\x52\xe1\x9e\xd3\xa2\xd0\x8d\xb2\x9f\xf5\xb5\xe8\xec\x74\x68\xc9\xff\x2b\xfd\x00\x00\xc2\x06\x7d\x60\xf5\xe1\x47\x53\x0e\xfa\x4b\x25\xbd\x64\x8b\x5d\xa4\x0a\xde\x94\xd2\x49\xfe\x3b\x1f\x33\xdf\x41\x0a\x4e\xa4\x4a\x51\xc6\x1f\xe8\x2a\x5b\xb7\xd6\x23\x76\xca\x6a\x51\xc8\x85\xa4\x32\xf2\x1c\xbf\xc7\x83\x17\x6a\x23\x48\x6b\x44\x35\x25\x8c\x7a\x95\xd6\xfa\x89\xf2\x3b\xd1\xc1\xb5\xaf\x41\x0e\xa5\x3d\x92\xb9\xaf\x85\x54\x8b\xbf\x7b\xd6\x46\xa3\xf9\x9c\xf6\x90\x9a\x57\x60\x2a\x59\x89\x21\x78\xd9\x42\x52\x82\xf5\x43\x5f\x7f\xf1\x75\x21\x6b\x38\xbc\x97\xa2\xd0\xaa\x4b\x4d\xd5\x0d\x1b\xb4\xd2\x53\xe4\x4f\x60\x1b\x15\x25\x2b\x9b\x3a\xd4\x4c\xbd\xe1\x95\x2c\xa5\x5d\x06\xaf\x1d\x95\xd7\xe2\x78\x63\xc2\x36\x9a\xb8\x8c\x8c\x2f\x16\xb5\xe6\xc5\x4c\x98\xe4\x6d\x28\xa0\x50\x12\x59\x88\x7d\xc7\x12\x70\x20\xa3\x40\x1b\xc7\x20\xab\x25\xab\xb5\xf5\x8e\xf7\x0d\x2f\xfc\x9c\x74\x06\xcd\x91\xcb\xd9\x7a\x09\xde\x79\x9d\x76\x81\xa3\x92\xd3\xf4\x0f\xc3\x74\x55\x7a\x08\x93\x3f\xbd\x72\x42\x61\x41\x67\xd0\x11\x3f\x00\xb8\xb0\x9a\x55\x8e\x61\x3b\x82\xb8\xb9\xf1\xef\xbf\x63\x33\xdd\xd4\x66\x94\x82\x0e\xbc\x86\xef\x50\xbf\xf3\x42\xa5\x65\x95\xe0\xc6\xb2\xd7\xaf\xd8\x5c\xaa\xc6\xf1\xa9\xde\xc7\xa6\xbf\x1c\x94\x48\x40\x7f\xf8\xae\x73\xbb\xbe\xb2\xcf\x46\xa9\x67\x81\xd8\xc8\x24\xfa\xd0\x4d\xc2\xc4\x38\x44\x16\x6f\x09\x42\x44\x74\xd3\xd5\x56\x56\x3f\xc0\xfd\xfa\xa5\xd1\x93\xa5\xed\x93\x44\x49\x2d\xf2\xec\xc9\x7f\xa7\x2f\xbb\x80\xa7\x44\xec\x94\x3b\x5f\xfa\x20\x15\x2e\xae\xa4\xb1\x5b\xea\x5b\xc4\xfc\xca\x3b\x1f\xeb\xce\x56\xae\x9c\x76\xd0\x33\x57\x06\xda\x78\x89\xd8\xdb\x96\x8a\x42\x60\x31\xcb\xf3\x58\x29\x49\x69\x7c\x76\x6b\xf7\x4f\x0c\x38\xe6\x0f\xc8\x1e\x50\xd3\x3b\x4e\xb5\x9b\xd0\xe5\x8f\x44\xef\xb9\x62\xb3\xfc\x16\x18\xa9\xae\x10\xe4\x7c\xde\x54\x56\x2e\xaa\x38\xef\x4f\xbe\x01\x11\xf2\xd4\xe6\xc6\x13\x33\x11\xc7\xc4\x62\x44\x9b\x02\xfb\xe4\x51\xe8\x4b\x28\x8b\x58\xdd\xb5\xe3\x07\x0b\x5e\xf3\xb0\x78\x50\x49\xd7\x1c\x93\xf9\x8e\x83\x47\x91\xe0\x30\x5d\x2b\x5e\xc5\x11\x27\x5e\xa4\x7d\x1e\x1a\x2b\x14\x57\x1d\x4c\xd5\x39\x3c\x17\x34\x62\xfa\x36\x04\x93\x61\x19\x94\xd6\x69\x21\xa1\xe6\x0d\x2f\xae\x85\x2a\xb1\x68\x14\x4c\xbb\x5c\x2a\x3e\x27\xb4\xad\xa4\x1e\x77\xab\xbd\x19\x90\x61\x02\xd3\xf7\x7c\x9a\x31\x72\xdd\x7d\xae\x41\x63\x7a\x43\xd9\xb8\x26\xdb\xee\xb9\x41\x93\x4d\x2d\x6f\x0a\xe1\xf9\xbf\x6b\xb7\xcf\xa1\xdf\x74\xc8\xa5\x5f\x19\xbc\xdf\x9e\xe4\xfc\x02\xb9\x0f\x96\x73\x00\xd5\xe2\x95\xbb\xda\xcb\x90\x33\xda\xda\xdc\xc9\x72\xbf\x55\x6f\xea\x49\x9f\xcc\xdf\xc3\x7a\x52\xe6\x97\xf8\x13\x2f\xb5\x61\x6f\x2a\x5d\x5c\xb3\x73\x01\x42\xd7\x43\x96\x67\xa9\x27\xe5\x53\x42\x78\xcf\xf9\xd5\x36\x3f\xdb\x90\xcd\xb5\x92\x56\xd7\x77\xd3\x8b\xc7\x2b\x3b\xf9\x02\xf7\xbc\x11\xa1\xca\x9d\xe6\xe7\x0c\xf6\xec\x8e\x5b\xdf\x8d\x87\x46\x41\x3d\x83\xdb\x89\x5f\x51\x15\xb0\x1d\xef\xda\xef\x66\xfa\x76\x68\xf5\xb0\x31\x62\x28\x3b\x38\x74\x7b\x4c\xf3\x5a\x2c\xc1\x8b\xdd\x73\xa2\xd4\x2c\xd3\x19\xac\x06\x0b\x14\x7c\xef\x38\xf7\xa7\x37\xe7\x5f\x8c\xa8\x47\xa9\x0c\x78\x22\x6c\x71\x52\x88\xc5\xec\x84\x7a\x78\x96\x8b\xe2\x89\x48\xdf\x55\xf1\xed\x90\xcd\x14\xba\xaa\x28\x31\x5b\x4f\xd9\x99\x58\xcc\x42\xc7\x8f\x3d\xeb\xa7\x43\x04\x5e\x68\xdd\x17\x08\xf5\xd0\xb5\xc9\x2f\x11\x7c\x83\x77\x28\x39\x4c\xf5\xa4\x5f\x11\x8a\xc7\x3a\x3e\xcf\xba\xd4\xe6\x03\x2e\xce\xc3\xc2\x29\x1f\x66\x78\xca\x69\xbc\x67\x0e\x96\xec\x23\x46\x32\x12\x34\x9e\xa2\xd0\x5d\x8a\x92\xe9\x1b\x51\xd7\xb2\x14\x86\x05\x1a\x94\x6a\xa9\xb2\x7a\xec\x75\x7b\xc1\x6d\x7e\x72\xdc\xe6\x1d\xd4\xa1\x43\xd0\x87\x32\x32\x05\xdf\xac\x90\x29\x5e\xce\xa5\x7a\x76\x84\xca\x14\xbc\x12\xe3\x1f\x7b\xe8\x1f\xd4\x22\x57\x41\x2e\xe9\xcb\x04\x3f\x6d\x0b\x2a\xd9\x5f\xc3\xb9\x61\x4a\x97\xdb\x4c\xaa\x0f\xa0\x48\x5c\x71\x2b\x6e\xb7\xb2\xc3\x61\x24\x54\xdb\x9f\x04\xe1\xf4\x29\x55\x8e\x67\x81\x11\x98\x9c\x79\x04\x3d\xdb\x27\x53\xa5\x5d\xeb\x6b\x9c\xc4\x56\x29\xfc\x6e\x1b\x74\xd7\x9f\xe0\xd3\x8b\x31\xfb\x01\x1f\xdf\x2f\x7a\x61\xad\x2d\x8a\x81\xe7\x7a\xce\x65\xdf\x22\x1b\xed\xe6\x6d\xf4\xd5\x74\x0a\x17\xe1\x59\x46\x0f\x27\x05\x5c\xa6\xf2\xaa\x71\x3a\x1d\xe9\x61\xcf\x0a\x60\x6e\x45\x74\x79\xbe\x00\x73\xf7\xaf\x06\x91\x98\x9c\x7c\x5c\x64\x94\x58\xfc\x56\x02\x2b\x09\x3e\x50\x66\x84\x32\x12\x1c\x32\x89\x57\x9c\x2a\xfd\x61\x69\x49\x0c\x82\x44\x11\x67\xc0\xde\xeb\x2b\xa9\xfc\xed\xd5\xe4\xaf\x9b\x72\x59\x75\x5d\x8c\x17\x99\xe4\xc9\x65\x12\x63\xaa\xb7\x8a\x4f\xaa\x2e\xe1\x06\xf9\x51\x0b\x0d\xd9\xbb\x8a\x5f\x31\x01\x7f\x9c\x94\xd2\xb8\xff\xb3\xcb\xcb\xf7\x60\x84\x6f\x94\x97\x98\xc1\x40\x4d\xb4\x2f\x24\x29\xe0\x45\xdc\xef\xdd\x41\xd2\xb3\x03\xfa\x5f\xd2\x92\x49\x55\xba\x81\x27\xa5\xe0\x30\x48\x0a\x9e\x40\x3c\xc4\x10\xf3\x8b\x61\x03\x13\xc1\x3e\xcf\x64\x71\x7d\x91\xd8\xdd\x75\xed\xbe\x53\xc9\x57\x19\x03\x6b\xff\xb6\x4f\x6a\x49\x43\xbd\xe8\xaf\x1a\x27\x2d\x3d\x1f\xf0\x04\xe3\x92\xe6\x0f\xbf\x71\x63\x74\x21\xa3\xcf\x05\x6c\x34\x91\x39\x94\xc0\x1c\xf6\x3b\x27\x10\x0f\xfa\x4e\x07\xe5\x8f\x35\x1c\xcd\xef\xa6\xaf\x8e\x6b\x52\x0e\x26\x95\x9f\xf5\x5e\xa7\x80\x67\x66\x07\x68\xf4\xd8\x70\x15\x1a\xdd\x0b\xc3\x2d\xc7\x82\x0f\x53\xa7\xcd\xf3\x82\x98\xaf\xcd\xb9\xb2\x7d\x01\x22\x9d\xa0\x09\xf7\x36\xf1\x2e\x69\x1b\xeb\xd4\xf0\x96\x37\x11\xbf\x23\x57\x03\xdc\xb9\x85\x5e\x34\x15\xc6\x73\xdc\x1f\xdf\xdd\xdb\x8c\xf1\x3d\x7b\x72\x3d\x3c\x06\x6a\xe9\x61\x1a\xd8\xdb\x3f\xd2\xf9\xd7\x81\x5d\x9a\x08\x77\xaf\xfe\xf0\xdd\x77\xdf\x3a\x9a\x69\x57\x15\xfc\x21\xe0\x4c\x3b\x9a\x68\xd7\xe4\x17\x8d\x5f\xf2\x8b\x7e\xbb\xf9\x45\x0f\x8f\x42\xbb\xe7\x0c\xa2\x9e\xb1\xb9\xfd\xe2\x72\xbb\xe7\x08\x75\x8e\xde\xed\x1b\xb9\xdb\x23\x0b\x68\xbf\xb9\x3f\xbd\x63\x59\xfb\xe4\xf9\xbc\x64\xf7\xfc\x5a\xb3\x7b\x76\x89\x65\xed\x9f\xc9\xd3\x27\x86\xf5\xd7\x98\xb5\xd3\xe3\x72\x76\xcf\x2e\xb9\x77\x4e\x49\x7f\x10\xc0\xfe\xf6\xb4\x5d\x0a\x52\xc5\x96\x6b\x35\x48\x9f\x54\xee\xb1\xc7\x0e\x0f\x4d\x02\x2d\x66\xb5\xbb\x81\x8f\xa2\x90\xb0\x1e\xda\x18\x76\xaf\xfb\xd4\x86\xa4\x36\x3f\x5e\xb6\x1c\x33\xe1\xeb\xa7\xf1\xc7\xfc\x16\x1c\x1e\x2f\x35\x5d\xbe\x11\x93\xbb\xc9\xd0\x5a\xbc\xb5\x02\x48\x00\x30\x72\x3d\x49\x51\x22\xe3\xd5\x39\xbd\x18\x3b\x1d\x1c\xd2\x88\x78\x65\x46\x6c\x0d\x9f\xf7\xe6\x52\x92\x0b\x3c\x7f\xe7\xd6\x8a\xf9\xc2\x76\xdf\xf5\x17\x8b\xfb\x93\x5b\xdc\xf7\x68\x01\x9c\x35\x73\xae\x86\xee\x46\x81\xcd\x3d\xf3\xd6\xb5\x28\xf3\x88\xd1\xdd\x41\xf6\x04\x16\x10\x48\x2e\xc8\x0b\x1b\xf3\xa4\xcc\xe5\xc3\x98\x3d\xa1\xef\x9d\x67\x8e\x7c\xb5\x75\xd3\x0a\xbd\x12\xf0\x4a\xd3\x09\xab\xe0\x2f\x55\xc2\x9c\x33\x35\xdc\xce\x04\xf2\xf0\x0b\x48\xc8\x89\x4f\xe5\x92\x34\x8a\xd2\xbc\xaa\xf4\x2d\xbe\x3b\xe5\x6b\x6e\xf5\xdd\x58\x28\xd3\x6c\x22\xd8\x5c\x3a\x1d\x9d\x0c\xac\xe9\x70\xd0\x65\xea\x24\x72\x51\xa3\xc0\x5b\x93\xb3\xed\x52\x58\xda\x28\xd8\x68\xa7\xdf\x2a\x0c\x08\x77\xff\xf6\x51\x45\xf0\x6e\x4f\x13\x26\x62\xc6\x6f\xa4\x6e\x6a\x6c\x6d\x35\x3b\xa0\x9f\x80\x37\x2c\x75\x13\xec\x5d\x58\x0c\x33\xcc\xce\xac\x59\xa7\x8f\xf1\x47\x50\x05\x4a\xed\x4d\x13\x43\xf1\x55\x1a\xbb\x3a\x17\xbf\x44\x1e\x06\x6f\x5f\xe7\xe6\xc6\x2c\x1c\x5b\xe8\x5d\xd5\x2e\x6b\x97\xcb\x2b\x37\x97\xf0\xd3\x37\x54\xd3\x6e\x2b\xba\xeb\xa3\x89\x40\xbf\x41\xf1\x27\x78\xc2\x2a\x59\x2c\x7b\x97\x7b\x6b\xb5\xf6\x44\xdb\x04\x1f\x9a\xfb\x9e\xbd\xe1\x46\x94\xec\x03\x57\xfc\x0a\xf5\xbd\xa3\xcb\x8b\x37\x1f\x8e\xdd\xbe\x82\x3e\x39\x3e\x5f\xeb\x68\xbb\x4c\x3b\xff\xb8\xcf\x7c\x91\x95\x89\xef\xc0\xaa\x56\xda\xef\x38\xf9\xbd\x26\xc2\xb0\xc0\x87\xba\x81\xf5\xae\x61\x41\x17\xed\x14\xd6\x76\xcd\xcf\x16\x81\xb9\x99\x97\xf7\xac\xf2\x29\x95\xb1\xbc\xaa\x2e\x2a\xae\x4e\x17\x8b\x5a\xdf\xac\xd7\xc6\xb3\xb1\xfa\x07\xfd\x48\x31\xcc\xc3\x7f\xb9\xc0\xa5\x07\x17\xb6\x62\xe3\xd8\xff\x88\x8d\x6d\xd0\xc2\xb5\x02\x96\x7a\x70\xda\x58\x3d\xe7\x56\x16\x07\x4e\x59\x3f\xf8\xc0\x55\xc3\xab\xb5\x41\x57\x77\x4e\x63\x93\x88\x78\x67\xa3\xcd\xd0\x75\x1d\x9a\xdd\x29\x6b\xdc\xdd\xde\xf2\xda\x51\xa7\xb3\xcb\x9f\x7a\xb5\x35\x96\xdb\x66\x85\x0a\xdf\xc1\x19\x36\xf3\x82\x21\xab\xb8\xb1\x5f\x16\xa5\xbb\xf4\xad\x5f\xef\x22\xf8\x05\xb7\xbc\xd2\x57\x7f\x11\xbc\x5a\x7f\xc2\xb3\x73\x72\x96\x3e\xed\x0d\x50\xe4\xf0\x6f\x26\xe1\xc1\x43\xc3\x9c\x80\xed\x73\xe0\x6b\x51\x89\x1b\xae\xac\x6f\x8e\xc5\xd5\xcd\x21\xcd\x1f\x4e\x91\x8c\xc6\xd7\x52\x58\x51\xcf\xa5\xca\xfb\xbc\x84\x67\xcf\xb4\x2a\x25\x9a\x1d\xc1\xa0\x86\x2d\xf2\x7e\x37\x1f\xb5\x4d\x9e\x86\x3b\x7c\x0b\x39\xba\x66\x32\x9e\x7c\x29\xf0\xb1\x09\xc9\x97\x33\xfc\x12\x3c\xed\xd9\xd8\x56\x56\x8a\x5d\x2b\x27\x18\x02\x8e\xc8\x7a\xb2\xb5\x55\x4e\xd8\x26\x1f\x0c\xfd\x1e\xe3\x10\x36\x07\x8e\x0e\x69\xdc\x9b\x7c\x10\x77\x1d\x31\xfc\x6c\x97\x2c\xda\x43\xd9\x4c\x53\xd7\x9d\xbb\xd0\x0c\x33\x59\x5a\x05\xf9\xb3\x87\x36\xf3\x80\x4e\x82\x57\x37\x19\xa9\x2b\xaa\x7d\x4e\x6b\x23\x06\xfb\x8a\x2a\xdb\x41\x62\xdc\xca\xb4\x3a\x82\xcb\xe7\x8a\xf5\x98\xe2\xff\x6a\x52\x45\x38\x5b\x48\x81\xe0\x27\x5c\xd1\x62\x01\x67\x11\xbc\xa4\x2f\x1d\x07\x73\x2a\x21\xfc\x36\x20\x67\x38\x1a\x97\x29\xd6\xc2\x1b\xa8\x39\x82\x7f\x80\xe3\xe2\xe4\x07\x4d\x46\x5e\x4a\xd2\x75\x34\x00\x38\xf9\x80\x99\xa6\x98\x31\x6e\xdc\xd0\xdc\x81\x76\x37\x5e\x8c\xe6\x5c\xc9\xa9\x30\x76\x14\x50\x82\xcd\x7f\xfe\xfe\xbf\x47\xec\x9d\xae\x19\x05\xaa\x0f\x3c\xaa\x06\x8d\x33\x9e\x0b\x69\x70\x32\xa1\x6d\xd4\x5a\x17\xba\xa4\x41\xdf\xc2\x60\x2d\xbf\x76\x3c\x0c\x07\xdb\x08\x70\x5d\x7c\xcf\x0e\x9c\x98\x98\xbc\xfa\xff\x1c\x5b\xfa\xc7\x01\x3b\xba\x05\xa6\x7d\xe0\xfe\x3c\xc0\x17\x86\xb0\xc9\x54\xa9\x8e\x2f\xc6\x64\xc9\x5a\x5e\x5d\x89\x1a\xd5\x47\x06\x49\x85\xc7\x84\x0a\xa2\x74\xf2\xb0\x77\x4a\x47\x75\xb3\x3d\x90\xff\xfc\xfd\x7f\x1f\xb0\xa3\x7c\x5e\x4c\xaa\x52\x7c\x65\xbf\x47\xeb\xb2\x34\x6e\x8e\xc7\xe4\xcc\x31\x4b\x65\xf9\x57\xd7\x67\x31\xd3\x46\x28\x54\xe5\xad\x66\x33\x7e\x23\x98\xd1\x4e\x03\x16\x55\x35\x24\x5b\x3a\xbb\xe5\x80\xd4\xe2\x97\x12\x12\xeb\xd9\x82\xd7\x36\x3b\x12\x23\xb2\x90\xc0\xdb\xdc\xb6\x5d\x29\xef\x99\x9e\x4a\x45\xfe\x2b\xf2\x9c\xb9\x3d\x87\xc4\x50\xdc\x24\xab\x59\x31\xe3\xea\x2a\xe4\xa6\x4f\x1b\xdb\xd4\x62\x8b\xeb\xa7\xe3\x1d\xb8\x96\xaa\x57\x0a\xf3\x5f\xa5\x6a\x07\x15\xac\xb7\x2b\x5d\x49\xeb\xb3\x22\x28\x56\xd1\x2e\x4f\xdc\x2e\xd4\x72\xd2\x58\x5d\x9b\x93\x52\xdc\x88\xea\xc4\xc8\xab\x21\xaf\x8b\x99\xb4\xa2\x70\xd3\x3a\xe1\x0b\x39\x2c\xb4\x72\x3b\x0e\xa8\x0c\xf3\xf2\x77\x50\xde\x74\xe8\x86\xba\x05\x75\xba\xe3\xa4\xb7\x1b\xd5\x9e\xd4\x98\xb6\xb7\x39\x76\xb0\x07\xad\x4e\x14\x6d\x33\x8f\x30\x5b\x30\x84\x9c\xec\x65\xb2\x1e\x34\xb9\x3f\x8f\x39\x24\x1c\xf0\xa2\xdd\x87\xbb\x76\x18\x40\x02\xb7\x32\xa3\x94\x73\x5e\x22\x29\xe5\x6a\xf9\xe0\x87\xdf\x2d\x29\xc0\xe5\x17\xcb\x21\x74\xa1\xab\x21\x57\xa5\xfb\x37\x26\xec\x14\xcb\xbd\xac\x61\x23\x7b\x11\x82\x2f\xe3\xf3\xc7\xb9\x12\x8d\xdc\xc3\xad\x27\x79\xad\xa3\x10\x85\xa2\x2a\x06\x6a\xd4\x8d\xf0\x4c\x33\x17\x50\xa5\xf1\xbd\xfe\xff\xe4\x7f\x09\x68\x67\xdb\x44\xaa\xbb\xbd\x26\x89\xec\xd8\x71\xbc\xef\x63\x8b\xd4\x26\x07\x81\x57\xdc\x58\x82\xd6\xf2\x18\x04\xd9\x34\xbc\x82\x02\x0c\x66\xb3\x63\xb8\xd3\x19\xf2\xf1\x02\x6e\x20\xc3\xb5\x98\x4b\x45\x50\x4a\xb6\x2b\x50\x51\x7f\xc9\xea\xa0\xe1\xa4\xac\x30\x96\xf1\x1b\x2e\x2b\xb0\xce\xeb\x89\x11\xf5\x0d\x16\xa4\x22\xa8\x41\xde\xd6\xb3\xa8\xe6\x04\x8a\x51\x8f\xa4\xf9\xf8\x39\xac\xee\xca\x5d\x13\x00\x6d\xa8\x35\xfa\x8d\xa3\xde\x8b\xde\x83\xea\xe5\xc6\x9f\xdd\x1b\x76\x54\x63\xdc\xf9\xfb\x8b\xe0\xb5\x9d\x08\x6e\x3f\xcb\xbb\xf8\xee\xca\x91\xce\xda\x85\x52\xee\xe1\x40\xdf\x0a\x76\xa5\xad\x13\xb1\x1a\x38\xfb\x28\x93\x22\xa8\x4f\x38\x68\x0f\x7d\xa2\xe3\x2c\x3f\xd7\x1c\x52\x7c\xb4\xea\x39\xcd\xbc\xe1\xea\x3c\x49\x3a\xa6\x93\x64\xf1\x69\x04\xd2\xd0\x4a\xd0\xde\xa1\x37\x03\x28\xd0\xe3\x4c\x79\x2e\x8c\xb9\x13\x60\x23\x8f\x2e\xc4\xa7\xf1\x2a\xb7\x5c\x6b\x73\xff\x1b\xa6\x85\x38\x01\xba\x14\x96\xcb\xca\x5f\x65\x5c\x8a\xb0\x4a\xdb\xa8\xeb\x9d\x13\xac\x05\x37\x77\x09\x08\xd9\xa8\x3f\xc1\xc3\x38\x68\xad\xc4\xf0\x56\xd7\x25\x3b\xe3\x73\x51\x9d\x71\x23\xa8\xaf\x34\x45\x0f\xf7\xe8\xd0\xec\x75\xc8\xeb\x6d\x5f\x1b\x86\x8c\xc6\x9f\x68\x12\x86\xbf\xa2\x8a\x85\x03\x1c\x78\x13\xe4\xe7\xba\x11\x03\xf6\xce\x71\xaf\x01\xfb\xa2\xae\x95\xbe\xbd\xdf\x58\xed\x9d\x5e\x90\x6c\xa4\x69\xf8\x87\x87\xd5\xc9\x0c\x3e\x61\xb8\x3b\x8e\x88\x08\xfe\x06\x53\x63\xce\x6c\xc2\xa3\x7e\x44\xee\x9f\x2b\x26\x28\xa7\x28\xd6\xfa\xaa\x16\x06\x91\x6b\xd6\x82\x24\x76\x35\x39\xff\x20\x14\x25\xf7\x6d\x1d\xde\x78\x5d\x2b\x3f\x52\xcf\xd7\xae\xe2\x2f\xb4\xdf\xf4\xb2\x45\xb5\x56\xd4\xb8\x3b\x22\x30\x19\xe8\x06\xe3\xd3\xa6\x11\xae\x37\x3a\x25\x5c\x2f\x79\x16\x85\x92\xbb\xac\xa3\x7e\x76\x67\x97\x3f\x6d\x5e\xec\x8d\xbc\x6f\x1b\x7f\xda\x6e\x96\xba\xaf\x41\x6a\xeb\x9d\xd9\x6a\x84\x7a\x31\x3f\xbd\x98\x9f\xbe\x25\xf3\xd3\xd6\x13\x7f\x97\xc9\xe9\xdb\x30\x36\x6d\x9d\xe2\x5d\x06\xa6\x67\x69\x5a\xea\x34\xa3\x3b\xcd\x49\xcf\xd6\x90\xb4\x75\x6a\x1d\x8d\x47\xbf\x1d\xb3\xd1\xd6\x15\xbb\xc3\x54\xf4\x0c\x8d\x44\x5d\x04\x32\x51\x76\x11\x13\xc7\xc9\xc3\xa9\xa0\x18\xcb\x59\x86\xee\x7c\x50\x4e\x2a\xce\xec\x2a\x2d\x3a\x01\x6e\xeb\xd8\x0e\x69\x70\xdd\x65\x2f\x12\x18\xa9\xd8\xe3\xca\x60\xd9\xf9\xdb\x8b\x4f\x6f\xcf\x4e\x3f\xbf\x3d\x6f\xcb\x77\xeb\x56\x7a\x8b\x24\x76\xb7\x0d\x62\x98\x48\x62\x1b\x1e\x70\x04\x79\xc3\x4f\xee\x0c\x6c\xf8\xa9\x69\xe4\xba\x56\xf7\x97\x0b\xef\xc5\xe5\xee\xc5\x3f\xb6\xdf\xce\xae\xd7\xf3\x0b\x06\x4e\x71\x8a\x39\x73\x72\xcf\x4c\x57\xa5\xf1\x71\xab\xe3\xf3\x90\x49\x25\x55\x51\x35\xa5\x13\x2e\xbe\x7c\x19\x9f\x9b\x11\x63\x6f\x44\xc1\x1b\x03\x56\x98\x52\xab\x43\xcb\x7e\xfc\xf8\xfe\x3f\x20\x1e\x1b\x9e\x18\x04\x5c\x13\x40\xe5\x95\x1c\x81\x85\x2d\xc2\xb5\xb1\x37\x02\x05\x15\x78\x73\xc1\x17\x8e\x8a\x19\xac\x5c\x61\x41\x16\x99\x89\x6a\xe1\x28\xe6\xb5\x60\x11\x41\xd5\x75\x1c\x2b\xcc\xfb\xf0\xc9\x2b\x61\x31\xeb\xea\xae\x08\xc9\x3b\x57\x6d\x8b\xc5\xf5\x1e\xb6\xd6\x4c\x7d\x24\x6d\xfc\x96\x1b\xb2\x58\xad\x1d\xed\x96\xfd\xdd\x6e\x9f\xd9\x6c\xe2\xd8\x60\xdc\x40\xf2\x0c\x7f\xad\x8c\xd9\x0d\x36\xda\x31\x30\x88\x44\xda\xce\xd6\xd4\xcd\x61\x40\xeb\xeb\x00\xac\xd8\x32\x44\x7b\x91\xb3\x17\x87\x88\xec\x64\xc8\xdd\xc6\x02\x45\x44\xca\xac\xf6\x27\xc5\xcf\xe5\xdf\x35\x93\x50\xfd\x35\x8e\x97\x2c\x32\xec\xff\xfe\xf1\x4f\xff\xf4\xff\x02\x00\x00\xff\xff\x7d\xa3\x14\xcb\xc4\x98\x0c\x00") -func olmManifests0250CrdsYamlBytes() ([]byte, error) { +func olmManifests0260CrdsYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0250CrdsYaml, - "olm-manifests/0.25.0-crds.yaml", + _olmManifests0260CrdsYaml, + "olm-manifests/0.26.0-crds.yaml", ) } -func olmManifests0250CrdsYaml() (*asset, error) { - bytes, err := olmManifests0250CrdsYamlBytes() +func olmManifests0260CrdsYaml() (*asset, error) { + bytes, err := olmManifests0260CrdsYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.25.0-crds.yaml", size: 773165, mode: os.FileMode(420), modTime: time.Unix(1709244468, 0)} + info := bindataFileInfo{name: "olm-manifests/0.26.0-crds.yaml", size: 825540, mode: os.FileMode(420), modTime: time.Unix(1730300877, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _olmManifests0250OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xeb\x6f\x1b\xb9\x11\xff\xae\xbf\x62\x20\x14\x70\x5b\x64\xf5\x48\x6c\xc5\xb7\x40\x80\x73\x9d\xdc\xe5\x50\xdb\x11\x6c\xa7\x5f\x0e\x87\x82\xe2\x8e\x56\xac\xf9\xd8\x23\xb9\x52\x74\x45\xff\xf7\x82\xcb\x7d\x8b\x92\x65\x27\x77\x29\x8a\xf0\x8b\xa4\xe5\x0c\x67\x38\x1c\xce\xe3\xa7\x8d\xa2\x68\x40\x32\xf6\x0f\xd4\x86\x29\x19\xc3\x7a\x3a\x78\x60\x32\x89\xe1\x86\x08\x34\x19\xa1\x38\x10\x68\x49\x42\x2c\x89\x07\x00\x92\x08\x8c\x41\x71\x31\x00\xe0\x64\x81\xdc\xb8\xa7\x00\x99\x4a\x22\x83\x34\xd7\xcc\x6e\x47\x0f\xf9\x02\xb5\x44\x8b\x66\xc4\xd4\x18\xe5\x52\x69\x8a\x31\x68\x34\x56\x33\x6a\x31\x39\x92\x25\x5a\x57\x5a\x71\x62\xd1\xd8\xc7\xd8\x48\x9e\x30\xfb\x14\x39\x05\xc3\x53\xa5\x6c\x88\x96\x4f\x11\xe2\xe8\x77\x64\x3c\xcf\xec\x19\x6a\x62\x95\x36\xcf\x30\xfe\x82\x18\xe4\x4c\xe2\x37\xd3\x3b\xd3\x7b\x5b\xdf\xa1\x5e\x33\x8a\x17\x94\xaa\x5c\xda\xfe\x79\x04\xdd\x3e\xaa\xce\x20\x32\x9e\x99\x94\xcc\x9e\xa6\x38\x39\x7f\x3f\xfa\x27\xac\x17\x84\x8e\x48\x6e\x57\x4a\xb3\xdf\x88\x65\x4a\x8e\x1e\xce\x0b\x2d\xeb\xb3\xbf\xe4\xb9\xb1\xa8\x6f\x15\x0f\x9d\xbe\xd9\x1a\x8b\x22\xa6\x4a\x5a\xad\x38\x47\x1d\xd7\xba\x70\xb6\x44\xba\xa5\x1c\x23\x41\x24\x49\x51\x0f\x74\xce\xd1\xc4\x83\x08\x48\xc6\x7e\xd4\x2a\xcf\x4c\x0c\x3f\x0f\xff\x3a\xfc\x65\x00\xce\x7e\x2a\xd7\x14\x5b\x8f\xd6\xa8\x17\xf5\xcf\x08\xa4\x92\xb7\x25\xd1\xc7\xdb\xab\xbd\x74\x9f\xb5\xc3\xbf\x31\x99\x30\x99\x3e\x66\xe6\x85\x27\x8b\x9c\x49\xb5\xe2\x78\x8b\x4b\x47\x59\x6d\xeb\x80\xd4\x01\xc0\xae\x59\x9f\x65\x4c\x93\x2f\xfe\x85\xd4\x16\xf6\x0c\x7a\xce\x17\x71\x90\xfa\x76\x8f\xa8\xd2\xa8\xdc\x87\x68\x2c\xf7\xe1\xea\xfa\x52\xc9\x25\x0b\x19\x8c\xfa\x0d\xee\xac\x48\xb2\xcc\x34\x2b\xbc\xc5\x8c\xab\xad\x40\x69\x1f\xb1\xf9\xae\xaa\xdd\x70\x43\xb2\xac\xc7\x60\x32\xa4\x6e\xce\x58\x4d\x2c\xa6\x5b\x4f\x67\xb7\x19\xc6\x70\xab\x38\x67\x32\xfd\x98\x25\xc4\x62\xe1\x7d\x19\x67\x94\x98\x18\xa6\x8e\x03\x39\x52\xab\xb4\xe7\x10\xc4\xd2\xd5\x55\x4b\x54\x48\x18\x80\x45\x91\xb9\xcb\x5c\x32\xb5\x36\xe3\x06\xef\xf0\x87\x57\x00\xa8\x54\x2e\xbe\x97\xd1\xe3\x52\x49\x8b\x9f\x6c\xc3\xaa\x73\x79\x61\x6e\x94\xbc\x55\xca\xc6\x60\x75\x8e\xf5\x94\x41\x4a\x95\xc8\xe6\x5a\x2d\x19\xc7\x86\xa5\xde\x76\x2e\x2d\x13\xf8\x16\x97\x24\xe7\xb6\x16\xd4\x76\x9b\x9b\x23\x7c\xc6\x0d\xe7\xa4\x84\x49\xd4\xad\x4d\x45\xe1\x73\x6b\x69\x17\xde\x51\x61\x10\xce\xd5\x66\xae\xd9\x9a\x71\x4c\xf1\x9d\xa1\x84\x17\xf7\x26\x86\x25\xe1\x06\x3b\xb4\x94\x64\x64\xc1\x38\xb3\x0c\x4d\x77\x15\x80\x44\xab\x2c\x86\x9f\x61\x78\x71\x75\x35\x84\x5f\x5a\xb3\x54\x09\x41\x64\xd2\x66\x88\x60\xbc\x60\x72\xec\xbd\xa9\xd6\x44\xa7\xa6\x4b\x14\x45\xb5\xeb\x75\x9e\xff\xe9\xcf\x1f\xe6\xef\x6e\x2f\xee\x3f\xdc\xfe\xf3\xe6\xe2\xfa\xdd\xdd\xfc\xe2\xf2\xdd\x5f\x7a\x9c\x1b\xcd\x2c\xde\x59\x62\x73\xe3\x4c\xdb\x99\x1d\x0e\x5b\x3f\x99\x20\x29\xc6\xf0\x6b\x4e\xb6\x2e\x3a\xd5\xd6\x5f\x6a\x22\x70\xa3\xf4\x83\x53\xf3\x7b\xb3\x22\x2f\xcf\x66\xf1\x74\xf6\x6a\x41\x68\x32\xfb\x6e\x32\x99\x2e\x91\x4c\xe8\x6c\x36\x43\xba\x3c\x9f\x9d\x4f\xf1\xbb\xd3\xf3\xb3\x57\x67\xd3\x97\xd3\x09\x4d\xf0\xf5\xeb\x53\xc4\x57\xa7\x67\x74\x32\x5b\x9e\x4f\x92\x33\x32\x3b\x9b\x9e\xbe\x7e\xd5\x97\x3b\xcf\x39\x9f\x2b\xce\xe8\x36\x86\x9f\x96\x37\xca\xce\x35\x1a\xac\x0f\x1b\x8a\x8c\xa6\x6d\xcf\xda\x51\xe3\x05\x73\xa5\x6d\x0c\xe7\x93\xf3\x49\xef\x3c\xbc\x47\x08\x74\xc9\xd1\xb4\xe6\x38\x5b\xa3\x44\x63\xe6\x5a\x2d\xb0\xbb\xec\xca\xda\xec\x47\xb4\xfd\x93\xcd\x88\x5d\xc5\x30\x5e\x21\xe1\x76\xf5\x5b\x7f\x72\x9f\x7c\x43\x57\xe8\x34\x78\x7f\x7f\x3f\x6f\x4d\x69\x24\x09\xfb\x8a\xf2\x2d\x6a\xc1\x64\xe1\xe1\xd7\x68\x8c\x3b\x82\xd2\xfc\x3f\x10\xce\x17\x84\x3e\xdc\xab\x2b\x95\x9a\x0f\xf2\x9d\xd6\x9d\x5b\x84\x72\xdd\xf5\x4e\x6f\xe1\x5d\x4f\xec\x28\xb2\x26\x3c\xc7\x1f\xb4\x12\xfd\x5d\x2d\x19\xf2\xa4\xcc\x5f\x81\x99\x79\xb1\xe9\x2a\x9a\x8d\xc2\xf7\x20\xa0\xc1\xae\xf0\xbd\x61\xa1\xc9\xfc\x1d\x26\x8d\xbf\xe6\x68\xfa\x2e\x07\x40\xb3\x3c\x86\xe9\x44\xf4\x1e\x0b\x14\x4a\x6f\x63\x98\xce\x26\xd7\xac\x9c\x93\x2a\xc1\xbb\x4e\x2c\x77\xa3\x5b\x8d\x29\x13\x03\x67\x32\xff\xf4\x39\x89\x8a\x12\x4b\xb8\x4a\x9f\x96\xac\x76\x98\x7e\xef\x84\x15\xd0\xf2\x19\x49\x2b\xb0\xca\xff\x4d\xe2\x0a\xee\xed\x91\x5d\xc1\x57\x4e\x5e\xa5\xce\x07\x13\xd8\x49\x2b\x83\x9d\x74\x66\xba\xa9\xcf\x25\x2c\x5a\x14\x74\x82\x64\xae\x9c\x44\xfd\x93\x4b\x0f\x6f\x0e\x64\xa5\x9a\xbe\xb1\xbb\xc6\x94\x19\xab\xb7\x71\xab\x81\x6a\x04\xe4\x96\xf1\xa8\xc8\x3a\x9d\x89\x3f\x3e\xf3\x39\x65\x0c\xda\xc8\x89\xe0\x8a\x24\x51\x6e\x50\x47\x2c\x79\xd3\x71\xcd\x6f\x99\xb9\x19\xdf\x32\xf3\xa1\xcc\xfc\x65\x13\xd9\xf9\xe7\xe4\xb1\xdd\x1e\xf3\xe8\x9e\x78\x37\xbb\x91\x34\xd5\x98\x12\x8b\xae\xdf\x8d\x30\x61\xb6\x97\xce\xf6\xaf\xd7\xb0\x5a\x15\x91\x44\x30\x19\xc3\xd0\x5d\xaf\xe1\x53\x18\xb1\x80\x71\x4a\xbe\x30\x88\x10\xea\x53\x77\x71\x05\x93\x2f\x0c\xd5\x2c\x73\x92\x4c\x17\x3b\xa0\x1a\x89\xc5\xe1\x0b\x18\xe6\x45\x8e\x75\xdf\x32\x97\x48\xdd\x97\x04\x39\x5a\x2c\x50\x88\x67\x48\x2d\x3b\xe1\x32\x1b\x95\xc8\x8f\x71\xeb\x96\xb1\xbb\xa4\x75\x4f\x98\x34\x96\x70\x9e\x71\xe2\x29\x0e\x68\xdc\x28\xf5\xfb\x1e\xf8\x9a\xe1\xe6\x6b\x1e\xf8\x13\xf8\x9c\xaa\x5f\xc4\x51\xbe\xdc\x91\xbd\x80\x5a\x64\x5a\x28\xd1\x3d\xc4\x14\xad\x23\xe1\xcc\x14\x9f\x9b\xc2\xe3\x76\xfc\x2c\x23\xf4\x81\xa4\x68\x46\xc7\x69\x5f\x92\x0b\x22\xd9\xd2\x45\x1e\xef\xcb\xdd\x67\x63\x46\x95\x3c\x4e\x97\xa7\x41\x42\xe5\x6c\xa1\x7c\xc0\xb7\x52\xae\x16\x84\x47\x6d\xd4\xb8\x5d\x2a\xd7\x8f\xbf\xac\xd4\x76\x59\xd8\x17\xc9\x45\x5d\x79\x5b\xa2\x53\xb4\x35\xda\x5d\x7a\x7b\xf4\x14\x64\x8c\xf0\x6c\x45\x7a\xc8\x62\x09\xcc\x95\xac\x01\xf5\xaa\xf3\x2d\x2a\xae\xc7\x9a\x07\xc5\xc5\xa8\x86\x8f\xd7\x93\xd1\xcb\xb3\xd1\xa4\xde\x41\xc2\x4c\xc6\xc9\xd6\x17\xc3\x73\xbf\x2c\xdc\x55\xeb\x26\x58\x7b\x66\x0c\xb7\x98\xf9\x52\xc2\x00\x91\xb5\x05\x2b\x5d\xc0\xae\x88\x05\x66\x80\xac\x09\xe3\x64\xc1\x11\x96\x5a\x09\x20\x90\xba\xfa\x00\x2e\xfd\x3d\xb8\x2b\xbc\x0e\x36\x2b\x46\x57\xb0\x61\x9c\x17\x9e\xc8\xd7\x08\x56\x01\x09\x1b\x60\x34\x00\x10\x4c\xfe\x3d\x5f\x60\x6d\xcd\xe9\x68\x3a\x1d\xb9\x0c\xfd\x80\xdb\x8d\xd2\x89\x73\xc8\x93\xbe\xcf\x9e\xbc\x80\x13\xc5\x85\xfb\xa8\x2c\x76\xe2\x3c\x58\x10\xd6\xae\xe9\xab\x6a\xfe\x16\x13\x78\x4f\x7c\xa5\x84\x82\x30\x5e\x1c\x9a\x34\x2b\xb6\xb4\x8d\x37\x7c\xaf\x31\x59\x11\xeb\x8e\x6f\x00\x90\x69\xb5\x66\x09\x96\x69\xb6\xbf\x0e\x67\xf2\xa1\x23\x62\xc7\xc2\x00\xb9\xe6\x71\x51\xa8\x98\x78\x3c\x4e\x99\x5d\xe5\x8b\xc2\x35\x42\x65\xe3\x5e\x74\x77\x6c\x35\xe2\x58\x10\x67\xbc\x71\xf6\x90\x8e\xcb\xfd\x46\xb5\x8b\x94\x51\xe7\x5a\x25\x58\x6a\xe4\x3b\xa5\x0f\x1b\x79\xd3\x69\xd2\x4d\x9e\xb9\x12\x08\x93\xba\xe5\xaa\x48\xef\x98\x4c\x39\x1e\x4b\x7d\x9d\x73\xcb\x8e\x25\xbe\xe0\xbc\xb9\x45\x7b\x68\xcb\x1d\x78\x4b\xd7\x3d\x2f\x24\x4d\xa3\x0d\xbd\xce\xb2\x8c\xca\x73\x57\xa1\x99\x22\x22\x57\x33\xd1\x33\x9b\x41\xd7\x94\x72\xec\x74\x82\x4d\xe0\xed\x55\xd4\x7b\xe0\xfc\x47\xaa\xbf\x08\x4a\xa0\x9e\x50\x8a\xc6\x68\x74\x39\xaa\x5d\x6e\xfb\xf0\xdb\xaf\xde\x8b\x6a\xa4\xf7\x30\x45\xfb\x98\x9e\x3d\x4c\x31\xa8\x53\xd1\x1b\xf8\x96\xed\xa0\x1e\x5d\x81\xee\xb7\xcb\x0c\x9d\x07\x45\x8a\x38\x42\xa7\x60\xda\x3a\x42\xcf\x4e\xae\xfd\x83\x74\x3d\x9c\x6b\x1f\x57\xba\x1f\xb4\x9e\xad\x76\x73\x11\x5a\x6e\x1e\xce\x17\x7e\xb4\xaf\x0a\x40\x1f\x47\xaa\x46\x18\x4f\x6a\x6d\xab\x3d\xd3\xef\x59\x04\xf9\xf4\x51\xd6\x19\xc1\x83\x4f\xbd\xf9\xbb\x5c\xa7\xbd\x99\x06\xac\x7a\xd9\x41\x54\xfa\x1d\x0d\x84\xc1\xab\x6a\x14\xf0\x53\x78\xeb\x7d\x24\xab\x5e\xad\x87\x68\x55\xa3\x8f\x6c\x1d\x25\x62\xd7\xc2\xf0\x18\x30\x04\x87\x61\xaf\xd6\x1a\x7b\xe0\xaf\x7a\x7b\xfb\x61\xb0\x66\x91\xe7\x45\x40\x3f\xc2\x3d\x66\x35\xf6\xf5\x9a\x5d\xaa\x10\xb4\xe6\xc7\x61\xc7\x3d\xda\x94\x4f\x43\xda\x4a\xa5\x0e\xe0\x6d\x7e\xec\x47\xdd\xaa\x6d\xed\x60\x6f\xd5\xae\x0a\x04\x6e\x27\x37\xf7\xa9\xa2\xf5\x9b\xd3\xd0\x63\xff\x86\x00\x46\x2e\x31\x06\xe6\x87\x67\xa7\xa7\xaf\x86\x41\xc6\xb2\x8a\x0e\xc1\xf1\x15\x51\x17\xd9\xf3\xe3\x6b\x21\x59\x2d\xe9\x6d\x3c\xeb\x82\x6f\xc8\xd6\xec\xd0\x05\xf0\x2c\x08\x61\x5a\xce\x3c\x81\x03\xcd\xb4\xb2\x8a\x2a\x1e\xc3\xfd\xe5\x7c\x67\xfe\x00\xba\xe5\xc7\x1e\x8c\xc9\x8f\x36\x66\x74\x17\xa4\x38\x88\x45\x35\xfb\xdb\xa3\xfd\x21\xf0\xeb\x7f\x40\xbd\xe7\x63\x63\xd5\xf6\x82\x35\x52\x35\x19\xc6\xc9\xfc\xd8\x83\x96\xf9\x51\x61\x66\x67\x0d\x66\xd6\x8c\xb5\xe2\xb9\xc0\x6b\x17\xf3\x82\x5e\xe5\x23\x93\x15\xd9\x72\xd7\x15\x01\x84\xe3\xf3\xff\x82\x8d\xad\xc8\x06\xa1\xb5\xf7\x86\xbb\xf0\xa2\x28\x32\xbb\x7d\xcb\x74\x0c\xff\xfe\x4f\xd1\xbd\xd8\x22\xea\xc5\x50\xf4\x8e\xbe\x23\xef\x76\x77\xc5\xab\x25\x65\xf8\x4e\x70\xc9\x24\xb3\x4d\xf5\xab\x36\x12\x93\xaa\x53\x4d\xfd\xfb\x27\x07\x8b\x98\x52\xa1\x75\xeb\xb5\x22\xff\xc4\x37\xad\x65\x4f\x73\x5d\x16\x30\x15\x06\xd9\x8e\xdf\xfd\xe2\x26\xd4\x75\xf6\xf8\x3b\xad\xe7\x45\x9f\xa8\x68\x34\x6b\xf7\x80\x14\xa5\x53\x1b\x13\xdf\x73\xe2\x27\x66\x2c\x93\x69\xb7\xe9\x74\x6d\x6b\x02\x76\x85\x4c\x83\x7f\x0b\xe5\xba\xa9\x68\x9b\xe2\xe9\x66\x6f\xe2\x09\x85\x93\x67\x75\xf9\x6d\xad\x0e\xbc\x21\xb7\xca\x17\x4c\x45\xcd\xff\x35\x7b\x40\x08\x6f\x83\xfb\x22\xe1\xa7\x3a\xa3\x83\xbd\x71\xbb\x58\xb0\xfa\x03\xa8\xf9\xb3\xa5\x73\x1a\x97\x4a\x88\x5c\x32\xbb\xad\x3b\x7c\x67\xa2\x2c\x5f\x70\x66\x56\xa8\x1b\xe8\xe4\x7d\xbe\xf0\x0d\x8d\x93\x39\x57\x89\x37\x69\xd9\x9d\x75\x13\x73\x39\xd5\x7d\xe7\xcd\xc3\xa6\x77\x9d\x9a\xb3\xfa\x23\x68\xae\xaa\x3e\xcf\xb5\x7d\x16\xf5\x9a\xf0\x18\x66\x13\x31\xf8\x6f\x00\x00\x00\xff\xff\xec\x51\x46\x9a\xea\x29\x00\x00") +var _olmManifests0260OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x6d\x6f\x1b\xb9\xf1\x7f\xaf\x4f\x31\x10\xfe\x80\xff\x2d\xb2\x92\xe5\xc4\xae\xb3\x40\x80\x73\x9d\xdc\xe5\x50\xdb\x11\x6c\xa7\x6f\x0e\x41\xc1\xe5\x8e\x56\xac\xf9\xb0\x47\x72\xa5\xe8\x8a\x7e\xf7\x82\xcb\x7d\x16\x25\xcb\x4e\xee\x52\x14\xe1\x1b\x49\x24\x87\x33\x9c\x99\x9d\x87\x9f\x36\x8a\xa2\x11\xc9\xd9\xdf\x51\x1b\xa6\x64\x0c\xab\xd9\xe8\x81\xc9\x34\x86\x1b\x22\xd0\xe4\x84\xe2\x48\xa0\x25\x29\xb1\x24\x1e\x01\x48\x22\x30\x06\xc5\xc5\x08\x80\x93\x04\xb9\x71\xb3\x00\xb9\x4a\x23\x83\xb4\xd0\xcc\x6e\x26\x0f\x45\x82\x5a\xa2\x45\x33\x61\x6a\x8a\x72\xa1\x34\xc5\x18\x34\x1a\xab\x19\xb5\x98\x1e\x48\x12\xad\x6a\xa9\x38\xb1\x68\xec\x63\x64\xa4\x48\x99\x7d\x0a\x9f\x92\xe0\xa9\x5c\xd6\x44\xcb\xa7\x30\x71\xfb\xb7\x78\x3c\x4f\xed\x39\x6a\x62\x95\x36\xcf\x50\x7e\x42\x0c\x72\x26\xf1\xbb\xea\x9d\xea\xbd\xae\xef\x50\xaf\x18\xc5\x0b\x4a\x55\x21\xed\xd0\x1e\x41\xb7\x8f\x6a\x1b\x44\xc6\x13\x93\x8a\xd8\xef\x29\x2d\xe7\x9f\x8f\xa1\x85\x75\x42\xe8\x84\x14\x76\xa9\x34\xfb\x8d\x58\xa6\xe4\xe4\xe1\xbc\x94\xb2\xb1\xfd\x25\x2f\x8c\x45\x7d\xab\x78\xc8\xfa\x66\x63\x2c\x8a\x98\x2a\x69\xb5\xe2\x1c\x75\xdc\xc8\xc2\xd9\x02\xe9\x86\x72\x8c\x04\x91\x24\x43\x3d\xd2\x05\x47\x13\x8f\x22\x20\x39\xfb\x49\xab\x22\x37\x31\xfc\x32\xfe\xf3\xf8\xd3\x08\x9c\xfe\x54\xa1\x29\x76\xa6\x56\xa8\x93\xf2\xe7\x9a\x58\xba\x1c\xbf\x80\x31\x67\xc6\xba\xcf\x0c\xcb\x0f\xaa\x91\x58\x74\xdf\x8a\x3c\xad\xbe\xe5\xf5\xde\x14\x39\xfa\x29\xff\x8d\x3a\xf1\xa8\xbb\xa2\x9b\x43\x43\x09\xaf\x48\x12\x26\xd3\xf1\xa7\x51\x04\x52\xc9\xdb\x4a\x8c\x8f\xb7\x57\x21\x49\xdc\xcf\x2f\xd3\xe1\x5f\x99\x4c\x99\xcc\x1e\x33\x64\xe2\xb7\x45\xce\x68\x5a\x71\xbc\xc5\x85\xdb\x59\x2b\x6e\x0f\xd7\x11\xc0\xb6\xe1\x9e\x65\x2e\x53\x24\xff\x44\x6a\x4b\x8b\x05\x7d\xf3\xab\xb8\x60\x13\x3f\x26\x54\x69\x54\xee\x43\xb4\x9a\xfb\x70\x75\x7d\xa9\xe4\x82\x85\x14\x46\xfd\x05\xb7\x4e\x24\x79\x6e\xda\x13\xde\x62\xce\xd5\x46\xa0\xb4\x8f\xe8\x7c\x5b\xd4\x7e\x40\x23\x79\x3e\x20\x30\x39\x52\xb7\x66\xac\x26\x16\xb3\x8d\xdf\x67\x37\x39\xc6\x70\xab\x38\x67\x32\xfb\x58\x3a\x66\xe9\xdf\x39\x67\x94\x98\x18\x66\x8e\x02\x9d\x2f\x2a\xed\x29\x84\xf3\xd9\xab\x0e\xab\x10\x33\x00\x8b\x22\x77\x3e\x5b\x11\x75\x2e\xe3\x06\xef\xd1\x87\x4f\x00\xa8\x45\x2e\xbf\x57\xf1\xe9\x52\x49\x8b\x9f\x6d\x4b\xaa\x0b\x79\x61\x6e\x94\xbc\x55\xca\xc6\x60\x75\x81\xcd\x92\x41\x4a\x95\xc8\xe7\x5a\x2d\x18\xc7\x96\xa4\xb9\x76\x21\x2d\x13\xf8\x16\x17\xa4\xe0\xb6\x61\xd4\x75\x9b\x9b\x03\x7c\xc6\x0d\xe7\xa4\x84\x49\xd4\x9d\x4b\x45\x61\xbb\x75\xa4\x0b\xdf\xa8\x54\x08\xe7\x6a\x3d\xd7\x6c\xc5\x38\x66\xf8\xce\x07\x80\xd2\x61\x16\x84\x1b\xec\xed\xa5\x24\x27\x09\xe3\xcc\x32\x34\xfd\x53\x00\x52\xad\xf2\x18\x7e\x81\xf1\xc5\xd5\xd5\x18\x3e\x75\x56\xa9\x12\x82\xc8\xb4\x4b\x10\xc1\x34\x61\x72\xea\xbd\xa9\x91\x44\x67\xa6\xbf\x29\x8a\x1a\xd7\xeb\xcd\xff\xdf\xff\x7f\x98\xbf\xbb\xbd\xb8\xff\x70\xfb\x8f\x9b\x8b\xeb\x77\x77\xf3\x8b\xcb\x77\x7f\x1a\x50\xae\x35\xb3\x78\x67\x89\x2d\x8c\x53\x6d\x6f\x75\x3c\xee\xfc\x64\x82\x64\x18\xc3\xaf\x05\xd9\xb8\xe8\xd4\x68\x7f\xa1\x89\xc0\xb5\xd2\x0f\x4e\xcc\x1f\xcc\x92\x9c\x9c\x9e\xc5\x2f\x8f\x5f\x9d\xcf\xce\x5e\xbe\xc6\xf3\xd7\xe4\x98\x26\x27\xe7\x27\x0b\x3a\x3b\x3f\x3d\xa5\xb3\x64\x91\xa6\xf8\xfa\x0c\xe9\x29\xe2\xcb\xb3\x74\x46\xcf\x4e\x67\xf4\x24\x3d\x4e\xff\xf2\x9a\x9e\xa7\x27\xaf\x5e\xe3\x4b\x4c\x4f\x87\x7c\xe7\x05\xe7\x73\xc5\x19\xdd\xc4\xf0\xf3\xe2\x46\xd9\xb9\x46\x83\x8d\xb1\xa1\xcc\x99\xda\x0e\xb4\x1d\xb5\x5e\x30\x57\xda\xc6\x70\x7e\x7c\x7e\x3c\xb0\x87\xf7\x08\x81\x2e\xfd\x9a\xce\x1a\x67\x2b\x94\x68\xcc\x5c\xab\x04\xfb\xc7\x2e\xad\xcd\x7f\x42\x3b\xb4\x6c\x4e\xec\x32\x86\xe9\x12\x09\xb7\xcb\xdf\x86\x8b\xbb\xf8\x1b\xba\x44\x27\xc1\xfb\xfb\xfb\x79\x67\x49\x23\x49\xd9\x37\xe4\x6f\x51\x0b\x26\x4b\x0f\xbf\x46\x63\x9c\x09\x2a\xf5\xff\x48\x38\x4f\x08\x7d\xb8\x57\x57\x2a\x33\x1f\xe4\x3b\xad\x7b\x4f\x11\xca\x55\xdf\x3b\xbd\x86\xb7\x3d\xb1\x27\xc8\x8a\xf0\x02\x7f\xd4\x4a\x0c\x6f\xb5\x60\xc8\xd3\x2a\x7f\x05\x56\xe6\xe5\xa5\xeb\x68\x36\x09\x3f\x07\x01\x09\xb6\x99\xef\x0c\x0b\x6d\x6d\xd1\x23\xd2\xf8\x6b\x81\x66\xe8\x72\x00\x34\x2f\x62\x98\x1d\x8b\xc1\xb4\x40\xa1\xf4\x26\x86\xd9\xd9\xf1\x35\xab\xd6\xa4\x4a\xf1\xae\x17\xcb\xdd\xe8\xd7\x7b\xca\xc4\xc0\x99\x2c\x3e\x7f\x49\xa2\xa2\xc4\x12\xae\xb2\xa7\x25\xab\x2d\xa2\xdf\x3b\x61\x05\xa4\x7c\x46\xd2\x0a\x9c\xf2\x3f\x93\xb8\x82\x77\x7b\xe4\x56\xf0\x8d\x93\x57\x25\xf3\xde\x04\x76\xd4\xc9\x60\x47\xbd\x95\x7e\xea\x73\x09\x8b\x96\x05\x9d\x20\xb9\x2b\x27\x51\xff\xec\xd2\xc3\x9b\x3d\x59\xa9\xd9\xdf\xea\x5d\x63\xc6\x8c\xd5\x9b\xb8\xd3\xa2\xb5\x0c\x0a\xcb\x78\x54\x66\x9d\xde\xc2\x1f\x9f\xf9\x9c\x30\x06\x6d\xe4\x58\x70\x45\xd2\xa8\x30\xa8\x23\x96\xbe\xe9\xb9\xe6\xf7\xcc\xdc\x8e\xef\x99\x79\x5f\x66\xfe\xba\x89\xec\xfc\x4b\xf2\xd8\x76\x8f\x79\x70\x4f\xbc\x9d\xdd\x48\x96\x69\xcc\x88\x45\xd7\xef\x46\x98\x32\x3b\x48\x67\xbb\xcf\x6b\x49\xad\x8a\x48\x2a\x98\x8c\x61\xec\x1e\xaf\xf1\x53\x08\xb1\x04\x8a\x2a\xba\x30\x4c\x11\xea\x53\xb7\x91\x0b\x53\x24\x86\x6a\x96\x3b\x4e\xa6\x8f\x1d\x1c\x82\x56\x7c\x7a\x1e\xd7\xaa\x13\xae\xb2\x51\x85\x2d\x99\x12\x22\xf1\xb1\xbb\xda\xeb\x66\x98\x34\x96\x70\x9e\x73\xe2\x77\xec\x91\xb8\x15\xea\xf7\x35\xf8\x8a\xe1\xfa\x5b\x1a\xfc\x09\x74\x4e\xd4\xaf\xe2\x28\x5f\xcf\x64\x2f\xa0\x61\x99\x95\x42\xf4\x8d\x58\x61\x65\x35\x74\xe6\xb1\xb4\x2d\x3f\xcb\x09\x7d\x20\x19\x9a\xc9\x61\xd2\x57\xdb\x05\x91\x6c\xe1\x22\x8f\xf7\xe5\xfe\xdc\x94\x51\x25\x0f\x93\xe5\x69\x90\x50\xb5\x5a\x0a\x1f\xf0\xad\x8c\xab\x84\xf0\xa8\x8b\x4b\x77\x4b\xe5\x66\xfa\xeb\x72\xed\x96\x85\x43\x96\x5c\x34\x95\xb7\x25\x3a\x43\xdb\xe0\xe9\x95\xb7\x47\x4f\x41\xc6\x08\xcf\x97\x64\x80\x2c\x56\xc0\x5c\x45\x1a\x10\xaf\xb6\x6f\x59\x71\x3d\xd6\x3c\x28\x2e\x26\x0d\x40\xbd\x3a\x9e\x9c\x9c\x4d\x8e\x9b\x1b\xa4\xcc\xe4\x9c\x6c\x7c\x31\x3c\xf7\xc7\xc2\x5d\x7d\x6e\x8a\x8d\x67\xc6\x70\x8b\xb9\x2f\x25\x0c\x10\xd9\x68\xb0\x96\x05\xec\x92\x58\x60\x06\xc8\x8a\x30\x4e\x12\x8e\xb0\xd0\x4a\x00\x81\xcc\xd5\x07\x70\xe9\x9f\x83\xbb\xd2\xeb\x60\xbd\x64\x74\x09\x6b\xc6\x79\xe9\x89\x7c\x85\x60\x15\x90\xb0\x02\x26\x23\x00\xc1\xe4\xdf\x8a\x04\x1b\x6d\xce\x26\xb3\xd9\xc4\x65\xe8\x07\xdc\xac\x95\x4e\x9d\x43\x1e\x0d\x7d\xf6\xe8\x05\x1c\x29\x2e\xdc\x47\xad\xb1\x23\xe7\xc1\x82\xb0\x6e\x4d\x5f\x57\xf3\xb7\x98\xc2\x7b\xe2\x2b\x25\x14\x84\xf1\xd2\x68\xd2\x2c\xd9\xc2\xb6\xde\xf0\x83\xc6\x74\x49\xac\x33\xdf\x08\x20\xd7\x6a\xc5\x52\xac\xd2\xec\xf0\x1c\xce\xe4\x43\x8f\xc5\x96\x86\x01\x0a\xcd\xe3\xb2\x50\x31\xf1\x74\x9a\x31\xbb\x2c\x92\xd2\x35\x42\x65\xe3\x4e\x74\x77\x6a\x35\xe2\x54\x10\xa7\xbc\x69\xfe\x90\x4d\xab\xfb\x46\x8d\x8b\x54\x51\xe7\x5a\xa5\x58\x49\xe4\x3b\xa5\x0f\x6b\x79\xd3\x6b\xd2\x4d\x91\xbb\x12\x08\xd3\xa6\xe5\xaa\xb7\xde\x31\x99\x71\x3c\x74\xf7\x75\xc1\x2d\x3b\x74\xf3\x05\xe7\xed\x53\xb4\x63\x6f\x75\x03\xaf\xe9\xa6\xe7\x85\xb4\x6d\xb4\x61\xd0\x59\x56\x51\x79\xee\x2a\x34\x53\x46\xe4\x7a\x25\x7a\x66\x33\xe8\x9a\x52\x8e\xbd\x4e\xb0\x0d\xbc\x83\x8a\x7a\x07\x9c\xff\x48\xf5\x17\x41\x05\xd4\x13\x4a\xd1\x18\x8d\x2e\x47\x75\xcb\x6d\x1f\x7e\x87\xd5\x7b\x59\x8d\x0c\x26\x33\xb4\x8f\xc9\x39\xc0\x14\x83\x32\x95\xbd\x81\x6f\xd9\xf6\xca\xd1\x67\xe8\x7e\xbb\xcc\xd0\x9b\x28\x53\xc4\x01\x32\x05\xd3\xd6\x01\x72\xf6\x72\xed\x1f\x24\xeb\xfe\x5c\xfb\xb8\xd0\xc3\xa0\xf5\x6c\xb1\xdb\x07\xa1\xe3\xe6\xe1\x7c\xe1\x47\xf7\x51\x01\x18\xe2\x48\xf5\x08\xe3\x49\x9d\x6b\x75\x57\x86\x3d\x8b\x20\x9f\x3f\xca\x26\x23\x78\xf0\x69\xb0\x7e\x57\xe8\x6c\xb0\xd2\x82\x55\x27\x3d\x44\x65\xd8\xd1\x40\x18\xbc\xaa\x47\x09\x3f\x85\xaf\x3e\x44\xb2\x9a\xd3\x06\x88\x56\x3d\x86\xc8\xd6\x41\x2c\xb6\x35\x0c\x8f\x01\x43\xb0\x1f\xf6\xea\x9c\xb1\x03\xfe\x6a\xae\xb7\x1b\x06\x6b\x0f\x79\x5e\x04\xf4\x23\xdc\x63\xd6\x63\x57\xaf\xd9\xdf\x15\x82\xd6\xfc\xd8\xef\xb8\x07\xab\xf2\x69\x48\x5b\x25\xd4\x1e\xbc\xcd\x8f\xdd\xa8\x5b\x7d\xad\x2d\xec\xad\xbe\x55\x89\xc0\x6d\xe5\xe6\xe1\xae\x68\xf5\xe6\x55\x68\xda\xbf\x83\x80\x91\x4b\x8c\x81\xf5\xf1\xe9\xab\x57\x2f\xc7\x41\xc2\xaa\x8a\x0e\xc1\xf1\xf5\xa6\x3e\xb2\xe7\xc7\xb7\x42\xb2\x3a\xdc\xbb\x78\xd6\x05\x5f\x93\x8d\xd9\xda\x17\xc0\xb3\x20\x84\x69\x39\xf5\x04\x0c\x9a\x6b\x65\x15\x55\x3c\x86\xfb\xcb\xf9\xd6\xfa\x1e\x74\xcb\x8f\x1d\x18\x93\x1f\x5d\xcc\xe8\x2e\xb8\x63\x2f\x16\xd5\xde\x6f\x87\xf4\xfb\xc0\xaf\xff\x02\xf1\x9e\x8f\x8d\xd5\xd7\x0b\xd6\x48\xf5\x62\x18\x27\xf3\x63\x07\x5a\xe6\x47\x8d\x99\x9d\xb6\x98\x59\x3b\x56\x8a\x17\x02\xaf\x5d\xcc\x0b\x7a\x95\x8f\x4c\x56\xe4\x8b\x6d\x57\x04\x10\x8e\xce\xff\x0b\x36\xb5\x22\x1f\x85\xce\xde\x19\xee\xc2\x87\xa2\xc8\xed\xe6\x2d\xd3\x31\xfc\xeb\xdf\x65\xf7\x62\xcb\xa8\x17\x43\xd9\x3b\xfa\x8e\xbc\xdf\xdd\x95\xaf\x96\x54\xe1\x3b\xc5\x05\x93\xcc\xb6\xd5\xaf\x5a\x4b\x4c\xeb\x4e\x35\xf3\xef\x9f\xec\x2d\x62\x2a\x81\x56\x9d\x17\x97\xfc\x8c\x6f\x5a\xab\x9e\xe6\xba\x2a\x60\x6a\x0c\xb2\x1b\xbf\x87\xc5\x4d\xa8\xeb\x1c\xd0\xf7\x5a\xcf\x8b\xe1\xa6\xb2\xd1\x6c\xdc\x03\x32\x94\x4e\x6c\x4c\x7d\xcf\x89\x9f\x99\xb1\x4c\x66\xfd\xa6\xd3\xb5\xad\x29\xd8\x25\x32\x0d\xfe\x2d\x94\xeb\xb6\xa2\x6d\x8b\xa7\x9b\x9d\x89\x27\x14\x4e\x9e\xd5\xe5\x77\xa5\xda\xf3\x0e\xde\xb2\x48\x98\x8a\xda\xff\x6b\x76\x80\x10\x5e\x07\xf7\x65\xc2\xcf\x74\x4e\x47\x3b\xe3\x76\x79\x60\xfd\x07\x50\xfb\x67\x4b\xcf\x1a\x97\x4a\x88\x42\x32\xbb\x69\x3a\x7c\xa7\xa2\xbc\x48\x38\x33\x4b\xd4\x2d\x74\xf2\xbe\x48\x7c\x43\xe3\x78\xce\x55\xea\x55\x5a\x75\x67\xfd\xc4\x5c\x2d\xf5\xdf\xaa\xf3\xb0\xe9\x5d\xaf\xe6\xac\xff\x08\x9a\xab\xba\xcf\x73\x6d\x9f\x45\xbd\x22\x3c\x86\xb3\x63\x31\xfa\x4f\x00\x00\x00\xff\xff\x43\x90\x59\x30\x4c\x2a\x00\x00") -func olmManifests0250OlmYamlBytes() ([]byte, error) { +func olmManifests0260OlmYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0250OlmYaml, - "olm-manifests/0.25.0-olm.yaml", + _olmManifests0260OlmYaml, + "olm-manifests/0.26.0-olm.yaml", ) } -func olmManifests0250OlmYaml() (*asset, error) { - bytes, err := olmManifests0250OlmYamlBytes() +func olmManifests0260OlmYaml() (*asset, error) { + bytes, err := olmManifests0260OlmYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.25.0-olm.yaml", size: 10730, mode: os.FileMode(420), modTime: time.Unix(1709244468, 0)} + info := bindataFileInfo{name: "olm-manifests/0.26.0-olm.yaml", size: 10828, mode: os.FileMode(420), modTime: time.Unix(1730300876, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _olmManifests0260CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x77\x23\xb7\xb1\x38\xfa\xbf\x3f\x05\x8e\xe2\xfb\x24\x39\x24\x35\x93\xed\x97\xe8\x26\xf1\xd1\x95\xc6\x8e\x9e\x67\xd1\x19\xc9\xce\xcb\xcf\xe3\x1b\x83\xdd\x45\x12\x51\x37\xd0\x01\xd0\x94\x98\x38\xdf\xfd\x1d\x54\x01\xbd\x70\x13\x97\x9e\x19\x69\x0c\xe4\x9c\x78\xc4\xee\xc6\x52\x28\xd4\x5e\x85\x7e\xbf\xff\x19\x2f\xc4\x77\xa0\x8d\x50\xf2\x94\xf1\x42\xc0\xbd\x05\xe9\xfe\x32\x83\xdb\xdf\x9b\x81\x50\x27\xd3\xe7\x9f\xdd\x0a\x99\x9e\xb2\xf3\xd2\x58\x95\xbf\x05\xa3\x4a\x9d\xc0\x05\x8c\x84\x14\x56\x28\xf9\x59\x0e\x96\xa7\xdc\xf2\xd3\xcf\x18\xe3\x52\x2a\xcb\xdd\xcf\xc6\xfd\xc9\x58\xa2\xa4\xd5\x2a\xcb\x40\xf7\xc7\x20\x07\xb7\xe5\x10\x86\xa5\xc8\x52\xd0\xd8\x79\x18\x7a\xfa\x6c\xf0\x87\xc1\xb3\xcf\x18\x4b\x34\xe0\xe7\x37\x22\x07\x63\x79\x5e\x9c\x32\x59\x66\xd9\x67\x8c\x49\x9e\xc3\x29\x4b\xb8\xe5\x99\x1a\xd3\x24\xcc\x40\x15\xa0\xb9\x55\xda\x0c\x12\xa5\x41\xb9\xff\xe4\x9f\x99\x02\x12\x37\xfa\x58\xab\xb2\x38\x65\x4b\xdf\xa1\xfe\xc2\x24\xb9\x85\xb1\xd2\x22\xfc\xcd\x58\x9f\xa9\x2c\xc7\x7f\xfb\xc5\xd3\xb0\xd7\x38\x2c\xfe\x9e\x09\x63\xbf\x59\x7c\xf6\x52\x18\x8b\xcf\x8b\xac\xd4\x3c\x9b\x9f\x30\x3e\x32\x13\xa5\xed\xeb\x7a\x78\x37\x5c\xc2\xad\xd1\x09\x3d\x16\x72\x5c\x66\x5c\xcf\x7d\xfb\x19\x63\x26\x51\x05\x9c\x32\xfc\xb4\xe0\x09\xa4\x9f\x31\xe6\x41\xe8\xbb\xea\x33\x9e\xa6\xb8\x2d\x3c\xbb\xd2\x42\x5a\xd0\xe7\x2a\x2b\x73\x59\x0d\xe5\xde\x49\xc1\x24\x5a\x14\x16\x41\x7f\x33\x01\x56\x68\xb0\x76\x86\x20\x61\x6a\xc4\xec\x04\xc2\xd8\xd5\x57\x8c\xfd\xc3\x28\x79\xc5\xed\xe4\x94\x0d\x1c\x84\x07\xa9\x30\x45\xc6\x67\x6e\x36\x8d\xb7\x68\x9b\x2e\xe8\x59\xe3\x77\x3b\x73\x53\x37\x56\x0b\x39\x5e\x37\x15\xf7\xde\xe6\x73\x20\xd0\xdc\xcc\x8a\xc5\x29\xcc\xfd\xb8\xe9\xf8\x45\x39\xcc\x84\x99\x80\xde\x7c\x12\xd5\x27\x0b\x73\xb8\x5a\xf2\x64\xc5\x44\x1a\x9d\x86\x03\x35\x58\x38\x0c\x0b\x03\x9c\x8d\x17\xd7\x98\x72\x1b\x7e\xa4\x97\xa6\xcf\x79\x56\x4c\xf8\x73\xff\xa3\x49\x26\x90\xf3\x1a\x1f\x54\x01\xf2\xec\xea\xf2\xbb\x5f\x5f\xcf\x3d\x60\x6d\xe8\xb4\xf0\x9c\x09\xc3\x38\xd3\x50\x28\x23\xac\xd2\x33\x07\xad\xf3\xeb\xef\x4c\x8f\x9d\xbf\xbd\x30\x3d\xc6\x65\x5a\x1d\x3c\x56\xf0\xe4\x96\x8f\xc1\x0c\x16\xe6\xaa\x86\xff\x80\xc4\x36\x7e\xd6\xf0\xcf\x52\x68\x48\x9b\xb3\x70\xe0\x09\x30\x99\xfb\xd9\xc1\xbf\xf1\x53\xa1\xdd\x98\xb6\x71\x90\xa9\x35\xa8\x5c\xeb\xf7\xb9\x15\x1e\x3a\x30\xd0\x7b\x2c\x75\x04\x0e\x0c\xa2\x80\x3f\x63\x90\x7a\xd8\x11\x6a\x08\xe3\xd6\xaf\xc1\x80\x24\x92\xe7\x7e\xe6\xd2\xaf\x69\xc0\xae\x41\xbb\x0f\xdd\x71\x2f\xb3\xd4\x51\xc2\x29\x68\xcb\x34\x24\x6a\x2c\xc5\xbf\xaa\xde\x0c\xb3\x0a\x87\xc9\xb8\x05\x63\x19\x9e\x5a\xc9\x33\x36\xe5\x59\x09\x04\xca\x9c\xcf\x98\x06\xd7\x2f\x2b\x65\xa3\x07\x7c\xc5\x0c\xd8\x2b\xa5\x81\x09\x39\x52\xa7\x6c\x62\x6d\x61\x4e\x4f\x4e\xc6\xc2\x06\x1a\x9e\xa8\x3c\x2f\xa5\xb0\xb3\x13\x24\xc7\x62\x58\x3a\x72\x78\x92\xc2\x14\xb2\x13\x23\xc6\x7d\xae\x93\x89\xb0\x90\xd8\x52\xc3\x09\x2f\x44\x1f\x27\x2b\x91\x8e\x0f\xf2\xf4\x17\xda\x53\x7d\x73\x38\x07\xbe\xa5\xc8\xcc\x02\xd9\x5c\x0b\x6b\x47\x3c\x09\x8b\xe8\x73\x5a\x4b\x0d\x52\xf7\x93\x83\xca\xdb\x17\xd7\x37\x2c\x4c\x80\xc0\x4e\x10\xae\x5f\x35\x35\xb0\x1d\xa0\x84\x1c\x81\xa6\x37\x47\x5a\xe5\xd8\x0b\xc8\xb4\x50\x42\x5a\x3a\xd2\x99\x00\x69\x99\x29\x87\xb9\xb0\x06\x71\x0e\x8c\x75\xfb\x30\x60\xe7\xc8\xc2\xd8\x10\x58\x59\xb8\x93\x94\x0e\xd8\xa5\x64\xe7\x3c\x87\xec\x9c\x1b\x78\xef\xa0\x76\x10\x35\x7d\x07\xbe\xcd\x81\xdd\xe4\xc0\x8b\x1f\x2c\x9c\x31\xc6\x02\x87\xdc\xe8\xe5\x55\x87\x92\xd1\x09\x5c\x46\x81\xd9\x9a\xb3\xe8\x1a\x4f\x53\x0d\x66\xc9\x83\x85\x03\x49\x2f\x12\x9e\x4c\x94\x71\xfb\xc7\x2d\x7b\xf3\xf2\x15\x4b\xb8\x64\xa5\x01\x77\x78\x12\x25\xa5\x43\x08\xab\x18\x77\xbc\xac\x0f\xf7\xc2\x20\x02\x69\x18\x0b\x63\xf5\x6c\xc0\xbe\x52\x3a\xe7\xf6\x94\xfd\x31\xfc\xd4\xc7\xee\x94\x66\xa2\xf8\xf3\xe9\x1f\x0b\xa5\xed\x9f\xd9\x1b\x99\xcd\x5c\xa7\x29\xbb\x9b\x80\x64\xd7\xd5\xda\xd8\x9f\x1a\x7f\x7c\xad\x8b\x64\xc0\x2e\xc7\x52\xe9\xf0\xa6\xc3\xaa\xcb\x9c\x8f\x81\x8d\x04\x64\x88\xd7\x06\xec\x60\x7e\x07\xd7\xee\x22\x23\x71\x69\x24\xc6\xaf\x78\xf1\x20\x68\xce\xc3\x9b\x6e\x2c\x37\x7c\x93\x79\xd7\x0f\xad\x42\x54\x76\x4b\x72\xff\xe4\xc9\x2d\xe3\x7e\x94\x9c\x17\x7d\x83\xc7\xa6\x01\xa6\xcd\x20\x70\x1e\x3a\x70\xf0\xab\x7f\xbe\xf4\x94\x6b\xb0\xed\xb2\x9b\x2b\xdb\xfa\xdb\x5a\x0c\x79\x10\x68\xaf\x96\x71\x91\x0d\xc6\x18\xeb\x22\xb9\x52\x29\x2d\xfb\xc1\x51\xbe\x6e\xbe\xcd\xe0\xbe\x50\x06\x0c\x4b\xc5\x68\x04\xda\xd1\x1d\x35\x05\xad\x45\x0a\x86\x8d\x94\xc6\xfd\x2a\x54\x8a\x67\xb2\xda\xbf\x16\xab\xbd\x52\xe9\xa6\x1b\xe3\x86\x46\x86\x41\xc8\xe8\xd1\x70\xe5\x72\x97\x9e\x76\xf6\xc0\xe1\x75\x8d\x8f\x50\xfc\x9f\x2d\x7f\x3a\x07\x8f\x33\xff\x72\xc0\x54\x2f\x51\x79\xd2\x71\x68\xdc\xf2\x0f\x4d\xd5\xe7\xb2\xe9\x6e\x30\xe5\x4d\xa6\xed\x9a\x54\x29\x9c\x3d\x30\xfd\x85\x25\x5c\xe0\x1f\x43\x30\xf8\x79\x35\x55\xe4\xe0\x69\x99\x21\xa9\x29\xb3\xf6\x8e\xae\x5a\xc7\x86\x6b\xd9\x74\x3d\xf4\x1e\x8c\x40\x6b\x48\x2f\x4a\x87\xbf\xd7\xd5\xac\x3c\x91\xa2\x9f\x5f\xdc\x43\x52\xae\x3a\x63\x2b\x97\xee\x84\x62\xbf\x4c\xd0\xec\x4e\x64\x99\x1f\xce\x11\x94\xf0\xc0\xad\x17\xe5\x18\x07\x1e\x43\x44\xda\x70\x2b\xcc\x68\x86\xe0\xa8\x00\x06\xf7\x8e\x67\xa3\xc6\x82\x18\x2f\x46\x02\x52\x36\x9c\x79\x76\xed\x88\x67\x8f\x0d\x4b\xcb\x84\x45\x5e\x9e\x4c\x94\x32\xc0\x38\xc1\x1d\xfb\x9d\x0a\x85\x92\x12\x53\x12\x1c\xfd\xc9\x1d\x43\xf6\x07\xa7\xd1\xfd\x00\x67\x5e\x7f\x26\x0c\xcb\x1d\xc5\xaf\x60\x15\xd0\xd1\x75\x73\x27\xec\x04\xff\x18\x3b\x91\xdb\x49\x61\xa6\xcc\x5d\xa7\x77\x20\xc6\x13\x6b\x7a\x4c\x0c\x60\x80\xbb\x0b\x3c\x99\x34\xba\xcd\x01\xac\x61\x3c\xcb\xc2\x14\x9a\x28\x41\x7c\x33\x77\x22\x0a\x3b\xaa\x64\x18\x2f\x6f\xf4\x2a\xbe\x3a\xbf\x6b\x4b\xc1\xd5\x63\x60\x93\xc1\x71\x8f\x25\x2a\x2f\x4a\xeb\x60\xe2\xe6\x38\x9c\x31\x61\x9d\x9c\x4d\xf2\x92\x56\xe5\x98\x56\x02\x99\x1f\x38\x08\xab\xc4\x99\x1c\x71\x70\x3a\xa2\x1c\xb3\x03\x5a\xdc\x41\x90\x3f\x5d\x77\x82\x16\x81\xeb\xcb\xb9\x4d\x26\x5e\x04\x4e\x94\xd6\x60\x0a\x25\xf1\x4b\x7c\xf2\xa2\x9e\xdb\x7f\x57\x1f\x1d\x99\xe3\x1a\x98\x13\x31\x9e\x04\x58\x72\x0d\xf8\x5b\x7b\x0f\xd6\x9d\x91\xfa\x9c\x70\xad\x5b\xba\xe4\xb2\x26\x2c\xe4\x0f\x9c\x92\x05\xd4\x3e\x93\x0c\xf2\xc2\xce\x1a\x38\xd1\xd8\x3d\x0b\x3a\xaf\x60\x80\x1b\x8c\xc7\xd5\xd0\xfa\x44\x5e\x64\x22\x11\xd6\x63\x08\x7b\xc6\x8e\x10\x45\x84\x75\xa4\x8c\x49\xd5\x57\xc5\xf1\x80\x9d\xa1\xf9\x62\x83\x01\xa4\xaa\xfa\xf7\x1d\xb9\x41\x8d\xaa\xfb\x7a\x70\x6d\x1b\x12\x15\x6a\xab\x65\xba\xc5\xd6\xf7\xf3\x07\x99\xcc\x4b\x79\xcb\x5f\x27\x98\x3c\xf8\xea\xa6\xe4\x2d\xbc\x1d\xe6\xb0\xc9\xdb\xf3\x5b\x4d\x28\x6d\x20\x83\xc4\xa9\xa4\x0e\xf6\x3d\xc6\x8d\x51\x89\x70\x52\x7e\x8d\xb4\x6d\x4c\xa7\x95\x3c\x0c\x7b\xb6\x2d\xfc\xd9\xd6\xeb\x77\x6d\xfe\xe0\x6d\xfa\xdd\x02\x34\x32\xe1\x84\xdf\xd1\x1c\x54\x5a\x04\x6b\x38\xc3\xa7\x87\x86\x65\x7c\x08\x99\xd9\x0c\x08\x6c\xab\x53\x5b\xb7\x0d\xcf\xef\xca\x05\xad\x5c\x88\xd7\x31\xab\x8d\x77\x44\xdb\xe9\x66\x5c\x48\xe3\xf5\xe7\x1e\xe3\xec\x16\x66\xa4\x6a\x3b\x0d\x3e\x18\x2e\xf0\x65\x0d\xc4\x6e\x1c\x72\xdc\xc2\x0c\x5f\xf2\x7a\xf7\x16\xd3\xdd\x1a\x39\xa8\x6d\x73\x4c\xeb\xd6\x77\x13\xdd\xf2\x8b\xb0\xe8\x2d\x3e\xdb\x1e\x7f\xa9\xdd\xc2\x5a\xc9\x6b\x59\x5b\x10\x49\x10\x27\x71\x3f\x70\x93\x90\x7f\x85\x3d\xe6\x45\x91\x09\x40\x7d\x7e\xcb\x61\xd6\x6a\x01\xeb\x5a\x80\xde\x5e\xeb\x7a\x5b\x19\x34\x08\x21\x0f\x0d\x21\x9f\x3b\xe9\x13\x51\x90\x7e\x6b\x00\x0f\x6e\xb0\xfc\x7c\xc7\x33\x51\x9b\xda\x0c\xf2\xd9\x4b\xd9\x63\xaf\x95\x75\xff\x79\xe1\x34\x61\xd3\x63\x17\x0a\xcc\x6b\x65\xf1\xcf\x01\xfb\xda\x12\xae\xbf\xdc\x90\xb2\x75\x00\x20\x9a\xef\x5e\xe0\x39\x93\x44\x53\xdc\xf2\x9b\x36\x23\x33\x60\x97\x24\xb6\x54\x07\x57\x18\x76\x29\x9d\x70\xe8\xc1\x80\x56\x3c\x7c\xd7\x77\x91\x97\x06\x8d\x3c\x52\xc9\x3e\xca\x00\x4b\xfb\x20\xe8\xb9\x7e\x9a\xf0\x5b\xd3\xdd\xea\xae\xbe\x46\x5b\xc3\xcb\x95\x1f\x4f\xf8\x14\x45\x3a\x21\xc7\x59\x25\xbc\xf5\xd8\xdd\x44\x24\x13\x92\xba\x87\x40\xa6\xc1\x42\x83\x63\x58\xdc\x38\x52\xe5\x7e\x19\x83\x76\xc2\xae\x08\xfd\x91\x61\x32\xe3\x09\xa4\x2c\x45\xd1\x92\x8c\x6c\xdc\xc2\x58\x24\x2c\x07\x3d\x06\x56\x38\x4e\xb2\xdb\xee\x6f\x47\xd8\xa9\x6d\x4d\xde\x9b\x03\x6e\x85\x6e\xc8\x22\xbf\x72\xb2\xee\x07\xe2\x8e\x28\x57\x47\xee\x18\xb9\xe3\x5c\x8b\xdc\xb1\x6a\x91\x3b\x3e\xd0\x22\x77\x8c\xdc\xf1\xbd\x73\x47\xd2\x65\x77\x50\x9e\xff\x4a\x26\x8e\x79\x6d\x19\x39\x6d\x70\xd3\xb5\xd5\x66\xc7\x6f\xae\x3d\xc1\xb9\x41\x55\x5b\x90\x93\x44\x73\x39\x06\xf6\xbc\xff\xfc\xd9\xb3\x6d\x94\x6a\xbf\x91\x1b\x7d\x31\xf2\x9e\x1e\x21\xed\xaf\x7f\xb5\xf6\x8b\x55\xf6\xb7\x0e\xac\xa6\x1e\xc7\x2b\x43\x5e\x4b\x76\x58\x61\xf8\x44\xea\x24\x95\x65\x39\x58\xc6\x6d\xcb\x54\x24\x72\xe8\x55\xae\x02\x44\x78\xef\xa5\x0c\x16\xd8\x94\x29\xe9\xed\x78\x0e\xf8\x83\xdd\x66\x90\x00\x27\x97\xda\x10\xaa\x59\xa8\xdc\x8d\x2a\xa4\x0d\xc7\xc5\x4d\x01\x02\x54\xd8\x11\x0c\xc6\x03\x96\x96\xf8\x19\x97\xde\x6d\x7a\x4c\xb3\x35\x33\x63\x21\x47\x4b\xae\xd2\xf8\x1f\x37\x6d\xab\x67\xee\x65\x98\x82\xb4\x25\xcf\xb2\x19\x83\xa9\x48\x6c\xb5\x3e\xf4\xda\x0a\x4b\xc6\xf6\xcd\x4c\x84\x1b\x89\x0e\x9b\x8b\x0b\xfd\x05\x0c\x36\x0f\x7c\xb3\x0d\xb7\x5f\xe8\x7b\x93\x33\x39\xc7\x0b\x69\x25\x83\x95\xc2\xaa\x75\xfd\x92\x0d\x1c\xff\x89\xc8\xf5\xe6\xed\xc3\x26\x57\xb6\x35\x25\xdb\x82\x7a\xcd\x8b\xa5\x65\x96\x39\xc4\x20\x2b\xec\xe2\x02\x96\x58\x47\x69\x49\x2d\x64\x26\xc3\x3b\x99\x98\xcf\x5e\x5f\x38\xa8\xb8\x77\x6e\x54\xa1\x32\x35\x9e\x35\x21\x4d\xe1\x45\x22\x2f\x82\x71\x9c\x33\x53\x0e\xbd\xd0\xe0\xd0\xef\xf5\xdc\xd6\x44\xcb\x5f\xb4\xfc\x45\xdd\x66\xa1\x45\xdd\xa6\x6a\x51\xb7\x79\xa0\x45\xdd\x26\xea\x36\xd1\xf2\xc7\x22\x77\x5c\x03\x93\xc8\x1d\x59\xe4\x8e\x2b\xd7\x15\xb9\xe3\x5a\xf0\x44\xee\x18\xb9\xe3\xb2\x56\xa8\x74\x8f\x40\xc7\x42\xa5\x6b\xe2\x1c\xc9\xea\x93\xa8\x7e\xa6\x12\x6e\x7d\x5c\xbe\xfb\xc4\xdb\xf9\x0c\xcf\xc9\x10\xd5\x63\xff\x52\x12\x28\x78\xcd\xed\x0d\x9a\x93\x94\x9d\x80\x76\xaf\x1f\x99\xe3\xb5\x81\x4d\x31\x4e\x32\xc6\x49\x3e\xfa\x38\xc9\x09\x37\xb4\xaf\x44\x94\x56\x87\x4d\x36\x0e\xe4\x0d\xe8\xfc\x89\x46\x4d\x3a\x74\xf1\xdb\x8d\x19\x4f\xf5\x96\xd2\xca\x53\xef\x2f\x80\xf4\xaa\xbd\x5e\x2f\x2f\xe3\xa2\x78\x9a\x42\xca\x0a\xd0\x7d\x42\x11\xc5\x46\x42\xa6\x4b\xd6\x1a\xe0\xf3\x51\xa3\x1f\xdb\xeb\xf8\x88\x21\x90\xed\x89\xec\x60\x73\x6d\x1a\x8e\x5b\x14\xfe\x51\x04\x44\x6e\x2b\xd5\xf7\x99\xf5\x46\xde\x6f\x36\x94\xeb\xb7\x17\xcd\x51\xa0\x0e\x26\xe1\xdd\xf5\x4a\x14\xcb\xff\x59\x82\x9e\x61\xfe\x47\x2d\xb0\x56\xb9\x75\xde\x47\x26\x0c\x4b\xb8\x21\x4e\xb1\xad\x6a\xb9\xa5\x1a\xb5\x9b\x9e\xb2\xbb\x25\x9a\xcd\xc3\x65\xbe\x2b\xd2\x49\x83\x0e\x4e\x30\x5b\xaa\x84\x2f\xf1\x02\xd4\xd6\xff\xad\xe6\xb3\xab\xe8\xb6\x93\xe0\xb6\x14\x29\x1e\xb1\x72\xce\x76\x57\xd0\xd9\xce\x4a\x3a\xdb\x49\x51\x67\xbb\x2a\xeb\x6c\x0f\x85\x9d\xed\xa6\xb4\xb3\x79\x54\x70\x3b\xe4\xa5\xac\xf7\xa3\xbf\xb3\x7d\x54\x54\xb6\x87\x1e\xcf\xe6\x97\x5a\xa1\xa9\x7e\x5f\x4a\x3d\xe2\x7a\x4b\xaf\xff\xd0\xc0\xda\x4d\xa7\x67\xf3\xa0\xf2\xca\xb0\x40\x85\xf6\x89\x68\xf8\x1f\x44\xdd\x66\x7b\xa9\xdc\x6c\x77\xb5\x9b\xed\x8e\x19\xc8\xea\x5e\xa2\x3b\x75\x5f\x86\x49\xbd\x10\x8b\xc0\x1c\xdc\x11\xfb\xb7\xe3\x04\xb8\x2f\xff\x61\x05\x17\xda\x38\xf9\xce\xdb\x4c\x9a\xcf\xbc\x76\xde\xec\x26\xa7\x14\x62\x47\xaa\xa7\x3c\x73\xbc\x87\xe2\x38\xbc\x5e\xe4\x7a\x9f\x67\xd3\x3d\x76\x37\x71\xda\xa6\xa3\x52\x55\xbe\xf3\xc1\x2d\xcc\x0e\x7a\x0b\x88\x74\x70\x29\x0f\x88\x47\x2d\xa0\x4e\xc5\xd0\x94\xcc\x66\xec\x00\x9f\x1d\x74\xcd\xd9\x77\x60\x5c\xcd\x12\x2a\xbb\xf2\x85\x1d\xb0\x44\x86\xb2\x2e\xdd\x0b\x9b\xc4\x45\xc8\xb1\x11\x46\x31\x35\x83\xc1\x50\x8b\x06\x73\xa9\xa2\x46\x10\xc7\xf0\xf7\x34\x28\xbf\xa5\xf4\x95\x2e\x42\xce\xb9\xef\x8c\x98\xd4\x62\x48\x93\xdf\x78\x25\xc1\xa0\x60\x07\x95\x89\xa8\xf1\x31\xbe\x3b\xa0\x70\x90\x9a\xdb\xc9\x74\x3e\x40\xa4\xfe\x02\x65\xc4\x1c\xb8\x34\xec\x20\xd8\x9e\x0e\x4d\xfd\xc6\xc1\xa0\xce\xee\xab\x7a\x3c\xfa\xf7\x7f\x8e\x5b\x19\x7d\x75\x87\x51\xd2\x8e\x92\x76\x94\xb4\xb7\xf8\x2a\x4a\xda\xab\x5b\x94\xb4\xb7\x68\x51\xd2\x8e\x92\xf6\xba\x81\xa3\xa4\x1d\x25\xed\x87\x07\xdf\x4d\xd2\xde\x35\x4e\xa8\x29\xf7\x7a\xe7\x1c\x15\x32\xe3\x56\x24\x75\x0c\x51\x78\x8b\xfe\xd5\xad\xbc\xdd\x94\xa5\x97\x4b\xdb\x4d\x89\x7c\x41\xb7\x18\x3c\x20\x5a\x57\xc2\xf7\xc2\x97\xeb\xa5\xee\xc7\x15\x0b\xb5\x03\x6e\x34\x1c\x0a\x3b\x22\xc7\x4d\x70\x85\xfb\xc2\x7f\x43\xa8\xfd\xe4\x29\x3b\x0a\x1e\x97\x63\x07\x7c\xa9\x6c\xfb\xa1\xb4\xa2\x5f\xbf\x51\xf9\x60\xd0\xbd\xd8\xca\xb7\x69\xb9\x25\x2a\xaf\x7b\xe5\x29\xae\xf7\xd3\x91\x10\xd0\xad\x39\x08\xe3\xcb\x1b\x62\xb4\x84\x2e\xa5\x74\xbd\x2a\x19\xdc\xc7\x44\x73\xa8\x1e\x9f\xc7\x3c\x12\x96\x70\x3e\x28\x31\xd5\x50\x6a\xf8\x3b\xb9\xa5\x12\x88\x3e\x94\x5f\x49\xef\x11\x75\xbf\x04\xaf\x6f\x40\x4a\x5c\x91\xa8\x46\x1f\xb0\x17\x88\x87\xcd\x8e\x85\x41\xf8\xf0\x2c\x53\x77\xdb\x90\xa4\x0f\x95\x16\x75\xb7\x75\x5a\xd4\x9c\xff\x2e\x66\x45\xfd\x4c\xb2\xa2\xf0\x21\x1d\xa1\xce\xd3\xa3\xd8\x5f\x7d\x01\x42\x0d\x08\xaa\xbc\xcc\xac\x28\xea\x58\x29\x43\x43\x65\x24\x65\x8e\x7c\xe4\x49\x1b\x2f\xdd\x68\x3c\x99\xcc\xe3\x27\xf6\x87\xb1\x55\x06\x0f\xad\x8f\xee\xe0\x59\xe6\x73\x8a\x82\x48\x4a\x21\x2c\xe2\x63\x47\x26\x5c\xf8\x9a\xad\x95\x36\x83\x44\xe6\xc8\xd1\xc2\xcc\x6d\xa8\xa3\x6a\x6b\x88\x28\x29\x45\x53\x08\xac\x77\x2c\xa6\x20\x6b\x4a\x7a\x64\x8e\x8f\x03\x0f\xef\x94\xc2\xbf\x17\x0a\xfd\xc7\x06\x25\xfd\xf3\x26\x34\x1a\x17\x54\x51\xe9\x1a\x7c\x35\x8d\xfe\x98\x21\x18\xdb\xf8\xf9\xb7\xb3\x31\xec\xe0\xdf\xff\x80\xbe\xfd\xa7\x93\x59\xf6\x91\x2d\x8c\x1f\x23\xb6\xfe\xd1\x5b\x15\x63\x70\x7d\xdd\xf6\x0d\xae\x7f\xef\x96\xc3\x8f\x1b\x63\xff\x04\xac\x85\x1f\x33\xc6\x3e\x5a\x08\xd7\x6e\xca\x63\x0b\x7d\x6f\xb7\x9d\x2c\x82\xd1\x1a\xb8\x33\x17\xde\x92\xe1\xec\x6b\x05\xdc\x12\x23\x76\xf4\xb3\x47\x1f\xfb\x87\xf1\xb1\x47\x89\x77\xc3\x16\x25\xde\x95\x40\x89\x12\x2f\x8b\x12\xef\x43\xcb\x8b\x12\xef\x5a\xf0\x44\x89\x77\xed\xa6\x44\x89\x37\x4a\xbc\xec\xa9\x49\xbc\xbb\x54\xe9\x8a\xbe\xee\xbd\x7c\xdd\xdb\x52\x8b\xad\x68\xc4\x96\x78\xb0\xb5\x6f\x3b\xfa\xb5\x1f\x8b\x5f\x7b\xe3\x84\x7f\x69\xc5\xbe\x49\xff\xcd\xbd\x5a\x95\xf9\xcf\xa7\x4a\xa4\xac\x28\xad\xcf\xa7\x8e\xd9\xff\x5d\x64\xff\xb7\x20\x1f\x4b\x00\x6c\x54\x02\x60\x15\xcc\x62\x1d\x80\x58\x07\xa0\x63\x27\x74\xac\x03\x10\xeb\x00\xc4\x3a\x00\xa1\xc5\xec\x24\x16\xb3\x93\x36\x6a\x31\x3b\x69\x75\x8b\xd9\x49\x8f\xd6\xfa\xca\x62\x76\xd2\xe3\xb6\xc4\xb2\x98\x9d\x14\xad\xb3\x1b\x6e\xd4\x13\xcc\x4e\x8a\x75\x00\x1e\x6b\x8c\x02\x8b\x92\x76\x94\xb4\xa3\xa4\x1d\x25\xed\xf5\x2d\x4a\xda\x5b\xb4\x28\x69\x47\x49\x7b\xdd\xc0\x51\xd2\x8e\x92\xf6\xc3\x83\xc7\x3a\x00\x4f\x28\x36\x82\xc5\x3a\x00\x31\x5e\x22\xd6\x01\xf8\xf9\xd6\x01\x68\xf9\xee\x3f\x5e\x31\x80\xed\xa7\x11\x2b\x02\xc4\x8a\x00\xb1\x22\x40\xac\x08\x10\x5a\xac\x08\x40\xed\x31\xd9\x1a\x63\x7e\xd4\x4a\xa0\xc4\xfc\x28\x16\xf3\xa3\x1e\x5a\xde\x13\xb0\x1b\xc6\xfc\xa8\x47\x68\x2b\x8c\xf9\x51\xd1\x2e\x38\xbf\x39\x4f\x24\x3f\x2a\x56\x04\x78\x8c\xde\xf6\x28\xf1\x6e\xd8\xa2\xc4\xbb\x12\x28\x51\xe2\x65\x51\xe2\x7d\x68\x79\x51\xe2\x5d\x0b\x9e\x28\xf1\xae\xdd\x94\x28\xf1\x46\x89\x97\x3d\x35\x89\x37\x56\x04\x88\x15\x01\x62\x45\x80\xa7\xe8\xe1\x7e\x70\xa7\xe1\xde\x6a\x9e\xd8\x73\x25\x2d\xc8\x95\x7e\xed\xd6\x86\xbe\x68\x7d\xe2\x88\xe4\x48\x8c\x4b\xed\x65\xf0\xf1\xdb\xab\x73\x96\x70\xcb\x33\x35\x66\x57\x0a\x0f\xa9\x1f\xa4\xfa\x39\x07\xcb\x53\x6e\x39\xb9\x24\x71\x43\xb5\x9a\x8a\x14\x0f\x6b\x0a\xf7\x4c\xe4\x7c\x0c\x78\xc0\x4a\x4c\x56\xbf\x83\x2c\xeb\xdf\x4a\x75\x27\xd9\x14\xb4\x69\x1c\xf7\x1f\x55\x91\xff\xc8\x0c\xe8\x29\x65\xd1\xc3\x7d\xe1\x36\x4b\x58\xa2\x18\x61\xc4\x66\xb7\xb5\x2f\xee\x9c\x9e\x5e\x53\x1a\xb9\x30\xf5\x5a\x70\xda\x6e\xec\x2f\x9c\xa8\xf0\x85\x43\xda\xd2\x04\x5c\x1b\x89\x0c\xfa\x43\x6e\x20\x0d\xfd\x1b\x87\x71\x4a\xa7\x34\x87\xd2\x8a\x4c\xfc\x0b\x3c\xd5\x01\x6e\x4b\x0d\xab\xb6\x6b\x03\x3e\xf0\xb0\x92\xd1\x67\x09\x4f\x26\x70\x21\x56\xab\x07\xfd\x30\xd5\xd5\x2f\x6d\xa2\x2f\x84\x71\x36\xae\x1a\x71\xee\x3f\x08\x1a\x41\x2a\x34\x1e\xd1\x19\x33\x56\xe9\x00\xd1\x42\x43\x3f\xe1\x59\x52\x66\x78\x20\xcf\xae\x2e\x69\xa4\x87\xeb\x3e\x3c\x40\xc4\xea\x45\x6f\x31\xe3\xf0\xc9\xfa\x39\x2f\x62\x01\xca\x0b\xa8\xa8\xef\x33\xed\x1c\x72\xa5\x67\x37\x5c\x8f\x61\xb3\xf3\x78\xf0\xaa\xf1\xc5\xfc\x71\xfc\xfc\xeb\x37\xaf\x5e\xbc\x7a\x79\xf9\xea\xf2\xc6\x53\xb0\x91\xd2\x4b\x0f\xaa\x17\x83\x49\x1f\x57\x23\xeb\x27\xc2\x32\x91\x0b\x5b\x7d\x45\x27\xad\xe7\x29\x19\x86\xa3\x94\xd2\x8a\x1c\x28\x98\x82\x5b\xeb\x98\xa5\x3b\x05\x39\x80\xc5\xca\x13\x39\xbf\x05\x47\xba\xd8\xb8\xe4\x9a\x4b\x0b\x81\x38\x0a\x4b\x1f\xa5\x8a\x19\xe5\x05\x7a\xe1\xb5\x7e\x37\x0f\x03\x5e\x76\xbf\x0a\xb1\x1a\x13\x3e\xa5\x12\x07\x23\xe5\xa8\xa0\xdb\x8a\x5c\xa5\x62\x24\x12\x52\xbb\x58\xce\xd3\xca\x0f\xef\xa5\x37\xd0\x15\x49\xaf\x17\x70\xca\xfa\x0b\xe0\x01\x39\x15\x5a\x49\x94\x29\xa7\x5c\x0b\x3e\xcc\xfc\xaa\x86\x64\xa2\xc3\x7e\xeb\x09\x4a\x36\x9c\x59\x30\xbe\x27\x0f\x2d\x5f\x8b\x62\xcd\x77\xef\x24\x01\x9a\xc4\x91\x9a\x29\xba\x37\xc5\x88\x09\x7b\xe8\xd8\x91\x11\x9e\x08\x69\x48\xcb\x24\x2c\x5a\xd9\x42\x0b\x12\x79\x79\xb5\x77\x9e\xf8\x71\xc3\xf2\xd2\x71\x17\xc7\x6d\x8d\x11\xc3\x0c\x7a\x8e\xa7\x8a\xe6\xbb\x43\x70\x70\xc0\x2f\x90\xef\x4d\xc1\xed\xb0\xc3\x1c\x12\x67\x00\x1c\x63\x55\x58\x48\x82\x13\x13\x4d\x61\xc4\xcb\x8c\xf8\x0e\x81\x19\xb7\x6a\xa6\x4a\xdd\x22\xab\x13\xee\x30\x07\x4f\x45\x08\x50\xc1\x33\xdc\x63\x29\x38\xc1\x4d\x48\x47\xc9\xc7\x4a\xa5\x4e\x7e\xd3\xea\x5e\xe4\xd8\x9b\x47\xad\x0a\x3e\xc3\x19\x4b\x55\x39\xcc\xaa\x0d\x73\xa4\xd4\x53\xfb\x82\x27\xb7\x6e\x2c\xec\x98\x71\xcb\x4e\x6c\x5e\x9c\xe0\x5f\xfe\xff\xfd\x1b\x66\xf0\x0f\xa3\x64\x90\x03\x1a\xd3\x1c\xcc\xc1\x5f\x18\x36\x04\x63\xfb\x30\x1a\x29\x6d\xff\xdb\x41\xab\x94\x88\x78\x52\x55\x4b\x0f\x9b\x59\xba\xc3\x8e\x70\x52\x88\x93\xad\x13\xa2\xf4\x92\xc3\xd6\x40\x83\xc1\xc1\x2a\xba\xeb\x0e\x8d\x96\xa7\xec\x7f\x8f\xde\xfd\xf2\xa7\xfe\xf1\x97\x47\x47\xdf\x3f\xeb\xff\xe1\x87\x5f\x1e\xbd\x1b\xe0\x3f\xbe\x38\xfe\xf2\xf8\xa7\xf0\xc7\x2f\x8f\x8f\x8f\x8e\xbe\xff\xe6\xd5\xd7\x37\x57\x2f\x7e\x10\xc7\x3f\x7d\x2f\xcb\xfc\x96\xfe\xfa\xe9\xe8\x7b\x78\xf1\xc3\x86\x9d\x1c\x1f\x7f\xf9\xf9\x8a\x09\x71\x39\x7b\x33\x5a\xc7\x6d\x36\x0b\x28\xeb\x6f\x42\xa2\xef\xfb\xb7\xe5\x10\xb4\x04\x0b\xa6\x2f\xa4\xed\x2b\xdd\xa7\x0f\x4e\x99\xd5\x25\x2c\xfd\xcc\x89\x53\x0f\x59\xe1\x5b\x24\xf2\x75\xe3\x83\x39\x8b\xa3\x2f\xc3\xe2\x0d\x02\x6e\xc8\x8a\xd6\x15\x24\xbd\x8c\xdc\xe6\x06\x61\x70\xc0\xae\x97\x7c\x89\x32\x9f\x7f\xe3\xd0\x90\x74\x68\xe6\xfb\x99\x0b\x32\x23\x1a\x88\x7d\xee\x2e\x1b\x6c\xa7\x11\x3e\xb8\x1f\x85\x16\x4a\x0b\x3b\x3b\xcf\xb8\x31\xaf\x79\x0e\x1b\x41\xf7\x72\x54\x4b\xda\x3d\x77\xd8\x1c\x39\xf6\xfc\x87\xb4\x9f\xd0\x2f\x52\x0e\x27\xc4\x36\xde\x0f\x10\x0a\xef\x54\x67\x26\x9c\x3e\xa5\xd9\xbf\x40\x2b\x5f\x45\x47\x03\x09\xc2\xe1\xf1\x7a\xe0\xad\x59\xab\x81\xa4\xc4\xb5\x3a\xa6\x7d\xef\xc4\xd9\x91\x18\x6f\xc6\x70\xaf\x97\x7d\xca\x12\x2e\xdd\xb4\xb1\x8a\xd2\x88\xfd\x98\xc1\x98\x27\xb3\x1f\xdd\xf4\x7f\xd4\xe0\x26\xe2\x04\xfd\x1f\x49\x2e\x6d\x49\x9e\x87\xbe\x2c\x96\x61\x20\xb0\xea\x95\x90\xff\x20\xad\xa0\x52\x78\x34\x06\x8f\x16\x2a\x1d\x38\xc8\x0d\xe6\xe6\x8e\x34\xa9\x7a\x58\xf1\xbd\xef\xbf\xf8\x61\xe1\x4d\x6f\xdf\xb0\x8a\xf4\x88\x26\x7e\xea\x12\x09\xa6\x23\x6c\x61\x81\xec\x2c\xcd\x05\x9a\x54\xd8\xd1\xd5\xf5\xd9\x71\x6b\x25\x8e\xf5\x12\x8b\x49\x15\x18\x79\x68\x89\xd9\x4d\xc0\xd4\x66\x14\x64\x1b\x18\xc5\x44\xa7\x05\xc3\x98\xc2\x98\x0e\x60\x68\x59\x19\x42\x35\xf8\xf5\x19\xfb\xd1\x09\x55\x99\x90\x40\xb0\x2b\xb4\x98\x8a\x0c\xc6\x6e\xc4\x86\x53\x88\x9d\x97\x5a\x83\xb4\xd9\x2c\x94\x57\x5a\xbe\x2b\xc2\x38\x82\xde\x46\xb7\x80\x59\x95\x4a\x57\x6d\x96\x7b\xdb\x40\x3a\x60\xd7\xf8\xc5\x8c\xec\x7f\xfe\x3d\xdc\x1b\xe4\x8b\xab\x36\x97\x69\x30\xae\x63\x21\xe9\x2b\x91\x12\x8b\x03\xad\x95\xf6\x21\x97\xa4\x47\xa8\xcc\x29\x0b\x95\x7a\xe2\x58\x93\x09\x52\x55\x82\x22\x81\x8f\x4b\xf5\x80\x59\x02\xf8\xd5\x6b\x6e\x0b\x15\x56\x55\xf3\x45\xee\x77\xe9\x26\x37\x2a\x9d\x56\x52\x69\x53\x78\xe6\x9a\xa0\x99\x93\x5f\x9a\xc3\xf7\x6a\x3d\x8e\x0b\x8f\x6a\x26\x8c\xa9\x61\x58\x8a\x0c\x4d\x2c\x42\xd7\xea\x11\x22\x32\x6f\x2a\x6f\xaa\xc8\x7d\x6d\xb3\xb2\x28\x94\xb6\xb5\xe2\x9d\xb4\xb4\x32\x52\x8c\x97\x00\xc0\x4d\xab\xd0\x50\x70\x5d\x51\x6c\x03\x2c\x99\x70\xe9\xd8\xbf\x5b\xe8\x2b\x85\x71\xa8\x14\xcc\xec\x86\xe5\x43\x55\x5a\xc4\x31\x7f\x56\x47\xaa\x94\x29\x73\x44\xe5\x94\x4d\xac\x2d\xcc\xe9\xc9\x49\xcd\x8f\x06\x42\x9d\xa4\x2a\x31\x27\x89\x92\x09\x14\xd6\x9c\x84\xd3\x74\x52\xa8\xb4\x1f\xfe\xe8\xf3\x70\x48\x4e\x0e\x57\xf1\xf8\x0d\x38\xa1\x87\xfc\x29\xa3\xbd\x5a\xf1\x16\xc8\x72\x4d\x25\xa7\xfe\xfa\x8f\xdd\x0b\x35\x18\x97\xbe\x64\x55\x86\x75\xcf\xd6\xb8\x37\xdb\xd6\x9d\xfa\xfd\xaa\xfe\x58\x25\x98\x36\xa8\xdb\xa1\x69\x76\xbd\x9e\x68\xaf\xb3\x7a\x3d\x60\xe7\x5a\xa8\x3d\x86\xb4\xcd\x89\x7b\xf5\x44\x51\x00\xb0\x96\x63\xf5\x31\x27\x9b\xd3\x13\x47\xae\xe4\x8c\x39\x7c\xb6\xbe\x14\x5d\xa3\x36\x9b\xd5\x18\x1c\xfd\xc7\xca\x54\xdd\x83\xd1\x08\x12\xfb\xe7\x86\x5d\xa0\x32\x48\x55\xe6\xe5\x3f\x86\x7f\xfd\x79\xb5\x4a\xb8\x91\x25\x78\x33\x5f\x1e\x4d\x69\xbd\x8d\xae\x6d\xca\xc1\x0f\xe6\x58\x36\x41\x80\xfa\x42\x45\x0e\xbd\x1d\xde\x20\x45\x96\x4d\x2f\xef\x38\x9a\xd1\x78\xd9\x78\x0a\xd7\xa0\xb6\xde\x58\x55\x9b\xd5\x81\xbd\x56\x3e\x4b\x00\x7a\xec\x0a\x0b\xb7\xd5\xbf\x20\x23\x7b\xad\x28\x5f\x60\xad\xf6\xbf\xb1\x11\xf3\x41\x6f\x66\x0b\x20\xdf\xd4\xbe\x4b\x5a\x59\xcb\x77\x59\x63\x70\xcb\x34\xbd\x0e\x32\xb7\x30\xab\xfd\x5d\xde\x33\x8a\xe6\xe4\x5e\x8d\x25\x41\xf8\x24\xf7\xd5\x7f\xfb\x80\x5f\x95\x0f\x85\xa4\xc1\xa8\xeb\xb0\x15\xd8\x7b\x00\xa8\x4c\xf1\x4f\x1c\xa6\x0b\x70\x6d\xe6\x22\x6d\xc1\xec\xcd\x16\x0e\xd1\xca\xc5\xb2\xdc\x15\xda\xf0\x7f\xbe\xf8\x67\xc9\xb3\x01\xbb\x20\xaa\x88\xab\xf7\x3f\xf9\x97\x16\x5c\x42\x77\x22\x4b\x13\xae\x53\xe4\x06\x74\x46\x99\x51\xb4\x7b\xbc\x12\x38\xc2\x69\xaf\xf7\x88\x0a\x13\xb2\x82\x6b\x2b\x92\x32\xe3\xc8\xb6\x60\xac\xf4\xac\x13\x88\xd6\x48\x73\x0d\x89\x92\xe9\x03\x56\xfa\x15\xd4\xd5\x7f\xdb\x84\x31\x8a\x51\xa0\x85\x8f\xbf\x17\x39\xcc\x23\xe9\x51\x5b\xb9\x51\xa3\x70\xaa\xab\x23\xd6\x23\xa9\xe6\x4e\x18\x68\x3a\x49\x84\x61\x82\x12\x78\x8e\x1b\xe4\xb1\x3a\x15\x03\xf6\x3f\xb3\xc0\xaf\x7a\x4c\xd8\x60\x9a\x46\xbd\xd9\x8f\xe9\x51\xd6\x03\xbb\x3e\x50\x23\xa5\x61\x0a\x9a\x1d\xa5\x0a\xbf\xc1\x1c\x95\xe3\x01\xfb\xbf\x4e\xc4\x27\x1b\xc4\x98\xd2\x29\x3c\x8a\x07\x49\xc4\x62\x25\x51\x34\xd1\x3f\x63\x47\x94\xda\x22\xf2\x1c\x52\xc1\x2d\x64\xb3\x63\x8a\x6e\x0a\xc9\x31\x9b\x6c\xdd\x26\x19\x51\x8d\x4c\xa8\xdf\xfd\x66\xcd\x9b\x38\xd9\x2d\x76\xf6\xbb\x60\xe4\xaa\x21\x43\x52\xe6\xdc\x16\x56\x3c\x48\xad\xf1\x78\x37\x3c\xdc\x0d\xd9\x2f\x90\x99\x6a\x83\xff\xe1\xf0\x80\x33\x0d\x63\xc4\x72\xc2\xdc\x3d\x70\x5c\x24\xcb\x33\xba\x1e\xe0\x68\xeb\xed\xd9\x7d\xe6\xc4\xff\xdf\xfd\x26\xe5\x96\xaf\x78\x81\xf6\x7c\x56\x2c\x33\x0e\x3c\xc4\x28\xeb\xce\x57\x6d\xd6\x06\x06\x5a\x3f\xfc\x4e\x3d\xa0\xa8\xbf\xec\xcb\xb6\x4a\x8d\x26\x35\x0a\xa2\x08\xfb\xdd\xd7\x30\x16\xc6\xea\x59\xc3\xb2\xe9\x3d\x1a\x8a\x09\x69\x2c\x97\x56\x20\x65\x63\xe1\xcd\xbe\xb7\x0d\x3a\xf1\x7b\xc0\xde\x38\x5d\x0b\x6d\x58\x77\x8e\x4d\x93\x80\x7d\x33\x2b\x80\xfd\xa9\xf1\xc7\xd7\xba\x48\x10\xd7\x3c\xa1\x21\xe4\xe2\x69\xaa\xc1\x2c\xd2\x87\x65\xe8\xb3\x76\xfd\x41\xcd\x7f\x10\x04\x87\x57\xc1\x20\xe0\x1d\xb7\xc6\x88\xb1\x93\x32\x43\x2a\x65\x30\xf3\xb6\xa4\x4d\xd2\x0a\xf0\x43\x72\xc1\x40\x5e\x31\x01\x61\x83\xdc\x9f\x28\x69\xca\x3c\x44\x44\x3a\xad\xa7\x00\x99\x82\x4c\x66\x98\x7b\x93\x4d\x41\x0f\xd8\xb7\xc6\xed\x14\xfb\x8b\x18\x3b\xbd\xcf\x0f\xda\x14\x95\x82\x1b\x69\x6e\x06\xc2\x34\x0a\xd2\x62\x8c\xa7\x93\x81\x42\x0f\x0d\x77\x81\x4f\xf2\x09\x71\x26\xf3\x93\x28\xc9\xd6\x7a\x53\xa5\x7c\x06\x23\x68\x80\x0b\x1d\x78\xb7\xa4\xb1\x22\x57\x5a\xa1\x8c\x08\xa9\x68\x15\x1d\x6d\xa5\x8d\xaa\x11\x25\x75\x52\xbf\x6d\x45\x18\x03\x96\xe6\x16\x83\x8a\x5b\x29\x09\xf8\xd0\xb4\xd2\x04\x32\xf3\xac\xed\x69\x6b\x7e\x67\x43\x95\xef\xf6\x94\x6b\x9a\xae\xb9\xbc\x85\x94\x65\x70\x2f\x12\x35\xd6\xbc\x98\x88\x04\x33\x17\xc9\xaf\xe2\x64\x75\x4b\xbe\xf3\xc1\xe1\x4a\x44\x5b\x45\xc6\x8b\x72\x98\x09\x33\x81\xa5\xb2\xcc\x5a\x1c\x35\x90\x68\xb0\x4b\x29\x48\x0b\x45\xaf\xe9\xbd\x9a\x29\x87\x70\x2f\xdf\x81\x0f\x67\x24\x9c\xc3\x83\xe7\x40\x9c\x24\xee\x20\x05\x0f\x45\x5d\x4d\xba\x82\xe1\x80\x5d\xda\x60\x98\x76\x5f\xdc\x02\x14\x84\x69\x18\x77\x60\x72\xb4\xa9\x18\x21\x13\xa0\xfc\x4b\xca\x63\x05\x08\x66\x46\xab\x05\x90\x18\x04\x68\xe0\x0f\x7b\x03\xd2\x2e\x17\x6a\xd6\xeb\x5d\x6b\x74\xae\xf5\x60\xac\x68\xca\xc3\x90\xac\x69\x51\xe0\x89\xee\xdf\x0e\x94\xf8\x64\xdb\x1d\xa4\x74\xd9\x6b\x8a\xdb\x7a\x98\xd6\x7c\xdb\x7a\xdd\x47\x03\x18\x36\x51\x77\xbe\xa7\xf9\x43\xeb\x2d\x36\x61\x6f\x53\x61\x12\x77\xd2\x21\x65\xe7\x4a\x9a\x90\x33\xcb\x25\xa5\xc1\x4e\x79\x46\xa8\x10\x3a\x2e\x54\x86\xfe\x8d\xb4\x0c\xea\x04\x85\xb6\x42\x3e\x04\xac\x75\x6d\xc2\x54\x56\xb0\xb9\x07\x58\xec\x43\x5c\x30\xf0\x87\x2b\x95\x65\xeb\xb9\xd8\x5a\xbd\x74\x13\xad\x34\x00\x60\x63\xff\xeb\x65\x80\x98\xb7\xc5\x39\x9c\xae\x3d\x48\x88\x1a\x4e\xd4\xad\x00\x3b\x04\x7b\x07\x20\x59\x32\x81\xe4\xd6\xd4\x01\x1a\x58\x75\x7e\x6e\xd7\xbc\xfd\xa9\x4d\xb1\x2a\x79\xca\xed\x0a\x2a\x1a\x06\x80\xdc\x66\x12\xee\xe6\x03\x0e\x16\x89\x3d\x9f\x72\x91\xf1\x61\x46\xb9\xe2\xd5\x5f\xbd\xe6\x3c\x44\xe0\xe7\x45\x99\x65\xde\x89\x84\x0e\x58\xab\xf9\x68\x24\x12\x8c\x41\x41\x37\x73\x1d\xd6\xb4\x74\x09\x3b\xb9\x96\x8d\xe5\xb6\x5c\xd8\xa3\x35\x1b\xbc\x6e\x63\x9d\x1e\x22\x56\x1a\x88\xe6\xea\x87\xb7\x94\x15\x37\x0d\x20\x65\xab\x65\xff\x1e\xb0\xd7\xca\xfa\xb8\x8c\x57\x60\x4c\x88\xfd\x78\x0b\xdc\x28\xd9\xa0\xae\x28\xfd\x6a\x31\x16\x92\x67\x7e\x51\x4d\xfb\x5e\xa5\x7b\x70\x34\x29\xe7\x62\xac\xb9\xad\x88\x62\x3d\x6f\xcf\x5d\x3c\x5f\x24\x4b\xe8\x80\x9d\xc9\x19\xee\xb7\x0f\xd8\x70\x3d\x5b\xad\xd2\x32\x01\xef\x7c\x2e\x4d\xb3\x93\x4e\xc9\x68\xdb\xbd\x70\x1e\x06\xa9\x03\x10\x53\xb0\x5c\x78\x97\x92\x92\xc0\xb8\x29\x9c\x1e\x17\x70\x92\x4c\xe1\x35\x80\x91\x59\x9c\x5d\x5d\xb2\xb7\x3e\x93\x78\xc0\xfa\xfd\x3e\xf9\x3d\x8d\xd5\x65\x82\xfc\xc5\x1d\x21\x99\x7a\x4e\x41\xd8\x47\xf1\x36\x8d\xd8\x5d\x6f\xf9\x20\x11\xac\xe0\x76\xc2\x06\x04\xf8\x41\x03\x14\x8c\x7d\xe5\x78\xcd\x3d\xcf\x0b\x87\xf7\xef\x24\x51\xef\xaf\x94\xba\xa6\x4d\xa2\x31\xff\xcd\x4e\x4e\xe6\x71\x42\x0d\x9d\x88\xea\x0d\x88\x88\x1a\x23\xa5\x0e\x4d\x7b\x49\x03\xf7\xe1\x37\x18\xfe\xb3\x64\x74\x1c\x8b\x6b\x38\x65\xef\x0e\xce\xc2\xe9\x7b\x77\xd0\x63\xef\x0e\xae\xb4\x1a\x63\x4c\xa8\x1c\xbf\xf3\x41\x9e\xef\x0e\x2e\x60\xac\x79\x0a\xe9\xbb\x03\xd7\xed\x2f\x31\x98\xf7\x15\xe8\x31\x7c\x03\xb3\x3f\x61\x67\xd5\xcf\x81\x23\xfc\x89\xe2\x7e\xdd\xef\x8e\x05\x3b\x3e\xf5\xa7\x9c\x17\xd5\x0f\xaf\x78\x51\x7d\x7c\x5e\xe3\xd9\xf7\x3f\xe4\x60\xf9\xf4\xf9\xa0\xde\xd1\x1f\xff\x61\x94\x3c\x7d\x77\x50\xcf\xbf\xa7\x72\x81\x41\x13\xb3\x77\x07\xac\x35\xea\xe9\xbb\x03\x1c\x37\xfc\x1e\x26\x79\xfa\xee\xc0\x8d\xe4\x7e\xd6\xca\xaa\x61\x39\x3a\x7d\x77\x80\xb1\x08\xbd\xe7\x3d\x0d\x45\xcf\x09\x4c\x7f\xaa\x47\x78\x77\xf0\xa3\xdb\x93\x93\x13\xef\xc2\xf0\x37\x2b\xfc\x67\xb9\xb1\xfa\x41\xba\xff\x50\x3c\x52\x9f\x65\xdc\xd8\x1b\xcd\xa5\xc1\xf1\x6f\x44\xbe\xdc\x8d\x4b\xba\x1c\x9e\xf7\x95\xcf\x35\xd2\x80\x95\x8f\x09\x1b\x56\x3e\x5e\xc1\x3d\x37\xe1\x5c\x8b\x6b\xd8\xd0\xea\xbc\xf8\x61\x9d\x0d\xe1\xe4\xb9\x60\xa7\xa9\xf6\xc7\xf1\x00\xff\x36\xf8\x2a\x1d\xee\x88\x7b\xfa\x86\xb1\xce\xb8\x6f\x3e\x40\xa7\x56\xf0\xef\x7c\x05\x0f\x56\xca\x14\x74\x86\xce\xaa\xba\x57\xf2\x84\xa4\x03\x46\x76\x03\x5e\x59\x69\x30\x8e\x0e\xb9\x93\x6c\x18\xaf\x29\x86\x27\xf4\xe8\x68\x87\x2f\x62\x42\xdd\x20\xa3\x4b\x12\x28\x2c\x72\xba\xdd\x5d\xcc\xac\x61\x54\x71\x92\x55\xdf\xae\x46\x0f\x8f\x1c\x1b\x02\xde\xbf\x4d\xfe\xfd\x49\x99\x73\xc7\x3a\x78\x8a\x61\x3c\xd5\x33\x52\xdf\x48\xdd\x22\x92\x4a\x4e\x21\xb2\xf1\x87\x7d\xf0\xa0\xf6\x8c\x84\x57\xd9\x6a\x0f\x58\x4c\x36\x5a\x7c\xce\xef\x5f\x82\x1c\xdb\xc9\x29\xfb\xf5\xaf\xfe\xcf\xef\x7e\xbf\xe2\x45\x22\x8c\x90\x7e\x0d\xd2\xdb\x82\x36\x04\xc3\xe2\x87\xf3\x46\xc3\x41\x88\xbf\x1c\x8c\xeb\x77\x2a\x23\x77\x8d\x41\x77\x1c\x63\xb0\x3c\xbb\x2c\x0b\x07\x97\xaf\x30\xba\xd6\x58\x2e\x13\xe8\x39\x21\x69\x69\x67\xa2\x22\xe0\xd9\x8c\x3d\xff\x15\xdd\x40\x84\x43\x2f\x90\xef\xef\xef\x7f\x18\x2c\x99\xb2\x30\xec\x0f\xbd\xb9\xf9\x08\xc3\xdc\x56\xa9\x11\x22\x0e\xa9\x98\x1a\x88\x13\x06\x63\xc0\x22\x27\x84\x6a\xbe\x0f\x6d\xdc\x43\xf6\xc0\xcd\x6c\x81\xb9\x90\x22\x2f\xf3\x53\xf6\x6c\x65\x3c\xa7\x23\x69\x1b\xee\x26\xbd\x5c\x0b\x02\xdc\x91\xae\xb1\xe6\x79\x8e\x71\xf4\x22\x05\x69\xc5\x48\x60\xd0\x40\x85\xda\xa8\xee\xd3\x87\x21\x06\xa5\x82\x22\x86\xa7\x38\x3a\xd4\x40\xf6\x2b\x92\x73\x34\x72\x60\xef\xbd\x49\x9a\x04\x6a\x56\x00\x9d\x06\x52\x60\x18\xdc\x17\x24\xaa\x36\xdc\x10\x39\x70\x29\xe4\xd8\xd4\xf1\x5c\xfe\xf6\x29\xf7\xf0\x6e\x02\xde\x7b\x0e\x4d\x5f\x50\xe2\x94\xa5\x14\xf5\x26\x5e\x87\x07\x62\x00\x28\xc9\xe8\xf3\x36\x4d\x27\x39\xe6\x90\x9d\x73\x03\xe1\x34\x36\xa3\xb9\x42\x29\xa4\x2a\xb5\xa7\xb3\xa3\xfa\xfc\xd9\xaf\xd6\x6e\x79\xf5\xde\x6a\x17\x5e\x15\xe6\xf5\xfd\x59\xff\xff\xf2\xfe\xbf\x7e\x38\xf2\xff\x78\xd6\xff\xc3\xdf\x7b\xa7\x3f\x7c\xd1\xf8\xf3\x87\xd5\xd1\x59\xcb\x85\xf9\x15\xe8\xe3\x99\x48\x90\x13\xc3\x8e\xf6\x42\x94\xca\x8d\x2e\xa1\xc7\xbe\xe2\x99\x81\x1e\xfb\x56\x22\x6b\xd8\x13\x68\xeb\x3d\xd4\x8e\x2b\x1f\xb8\x51\x57\x79\xca\xfd\x2b\x38\xa5\xf5\xef\xf8\xe9\xae\x53\x5f\x37\x03\x52\x30\x35\x34\x28\x8d\x6c\xe0\x19\xe5\x13\x8c\x94\x1a\x78\x09\x77\x90\xa8\xfc\xa4\x7a\x4e\xa2\xf5\x2b\x2e\x67\xac\x26\x6b\x24\x94\xce\x63\xba\xc1\x80\x79\x9e\x68\x65\x4c\x5d\xe4\x87\x65\xe2\x16\xd8\x59\xad\x37\x3a\x62\x39\x84\x84\xa3\x2c\xae\x87\xc2\x6a\x4e\x46\xdf\x20\x57\xd6\x16\xa5\x51\x99\xb1\x23\xa7\xae\x0e\x30\x90\x6c\x81\xba\xfa\x82\x61\x7c\x28\x32\xbc\xb7\xc9\xa9\xd2\x89\x92\xa3\x4c\x78\x15\x20\x2f\x94\xb6\x5c\xda\x90\xd5\x34\x86\x7b\xba\x2a\x8e\xdc\x0e\xc2\xb0\xa3\x54\x9a\xe7\xcf\x7f\xf5\xeb\xeb\x72\x98\xaa\x9c\x0b\xf9\x55\x6e\x4f\x8e\xbf\x3c\xfa\x67\xc9\x33\xf4\xf2\xbe\xe6\x39\x7c\x95\xdb\xd5\x97\x6e\x6d\xcd\x16\x9f\xff\x6e\x83\x53\x74\xf4\x3d\x9d\x95\x1f\x8e\xbe\xef\xfb\x7f\x7d\x11\x7e\x3a\xfe\xf2\xe8\xdd\x60\xed\xf3\xe3\x2f\x4e\x30\x46\xb2\x3a\x72\x3f\x7c\xdf\xaf\x8f\xdf\xe0\x87\x2f\x8e\xbf\x6c\x3c\x3b\x5e\x76\x18\x5b\xa1\x8b\x4e\x0b\xe8\xe7\xbc\xe8\xdf\xc2\x6c\xc5\xe1\x5c\x29\x8e\x2e\x76\x44\x10\xcb\x79\xb1\x4c\xfb\x1e\x89\xf1\x2b\x5e\xbc\x85\x11\x68\x90\xc9\x52\x24\xdf\xd3\x03\xe3\xf4\x87\x35\x8f\x30\x02\x6b\x07\xab\x93\xe3\x3b\x64\x69\x5b\x27\x4e\x6f\x80\x2d\x9b\xc9\x8f\x72\x4d\xfc\xe2\x83\x83\x54\xeb\xdc\xb9\x87\x70\xbe\xbf\x23\xfb\xd1\xce\xfd\x94\x62\xa5\xa6\xd5\xb6\x61\x5e\x5e\x90\xe8\x8b\xa4\x07\xc5\xb9\x89\x72\x7a\x5e\x29\xc5\x3f\x4b\x60\x97\x17\x55\x3e\xbd\x90\x49\x56\x62\x05\xbf\x6f\xbf\xbd\xbc\x70\xfa\xfb\xff\x78\x72\x73\x07\x2c\x55\xf2\xd0\xb2\x37\xaf\x5f\xfe\x0d\x8d\x01\xf8\x46\x8f\x18\xba\x4f\xea\xcd\x04\x27\x33\x99\x67\xc0\xec\x7f\x80\xe2\xe4\x70\xe4\x84\x17\x95\xfd\x04\xc9\x1d\x46\x58\x65\x85\xc1\x44\x00\x66\x4a\xed\x67\xe7\x3a\x26\x8f\x2f\xa6\xfe\x79\x7f\x70\xc8\x61\xc0\x4c\x90\x9d\x82\x3b\x13\x25\x25\x24\xe8\x34\x77\x52\xe0\x7b\x38\x1f\x0e\x91\xdf\x78\x99\x15\xc7\xd8\xe1\x30\x78\x87\xda\xce\x68\xe1\xe6\x70\x4e\x2b\x7d\xef\x27\x69\x61\xbd\x3b\x8d\x48\xf6\x4c\xf4\x6c\xbe\x7d\xc0\xfe\xbc\x10\xc6\xd5\x56\x9d\xe7\xf2\xb6\xd0\xb6\x5a\x39\x47\x27\xdc\xb0\x21\x80\x44\x73\x2e\x59\xff\x40\x7a\xac\x83\xda\x10\x5b\x16\x7d\xab\xfa\xe9\xf2\xcd\x7b\x00\x72\x0f\x43\x6d\x8d\xe6\x3a\x57\x1a\x63\x5b\x45\xf5\x6e\x32\x5b\x06\x03\x53\x57\x0a\xac\x64\x90\x6d\x17\xb6\x5a\x31\x99\xb3\xea\xa2\x66\xe1\x8d\x1a\x5e\xcf\x58\x9c\x92\xd3\x1e\x5b\x96\x0d\xab\xd0\x9b\xd7\xb6\xec\x6d\x3f\x47\xda\xe6\x6b\xd0\x53\xb1\x13\xf3\x7b\xe8\x60\x26\x14\x67\x72\xf6\xfe\x8f\x95\x13\xbd\x76\x1e\x04\x4d\x7f\x89\x7a\xc0\x7d\xb3\x36\xfe\x1d\x21\xb8\x2e\xca\x7f\x9b\x3e\xb6\x65\x96\x44\x4d\x5a\x49\x1e\xc6\x2a\x8d\x2e\xf7\xe6\x6f\xe5\xb0\x12\x94\xeb\xde\xbd\x0e\xc4\xfe\xfd\x9f\xcf\x3e\xeb\xf7\xfb\x9f\xf1\x42\x04\x36\xcb\x78\x21\xe0\xde\x82\xa4\x4b\x8b\x6f\x7f\x8f\x61\xbc\xd3\xe7\x9f\xdd\x0a\x99\x9e\xb2\xf3\xd2\x58\x95\x07\xb3\x38\x56\x7e\x45\xfc\xfc\x2c\x98\x31\xdc\x20\x5c\x4a\x65\x9b\x41\xb0\x4e\xfd\xd6\x8e\x9c\xe8\xfe\x18\xe4\xc0\x89\x6b\x18\xe6\x0c\x1a\x3b\x0f\x43\x4f\x9f\x0d\xfe\x30\x70\x6a\x3f\xe2\x90\xb7\xfe\x19\xcb\xf3\xe2\x14\x33\xc5\x3f\xf3\x42\x09\x4b\xb2\xd2\x60\x79\x5c\x04\x9f\xff\xde\x0c\xaa\x60\xb8\x41\xa2\x34\x28\xf7\x9f\xfc\x33\xa7\x8f\xbb\x59\x8c\xb5\x2a\x8b\xba\xfc\x48\xeb\x1d\x2f\xaf\xf8\xc9\x52\xf4\x5a\x03\xc1\xfb\x4c\x65\x74\x11\xad\x07\x02\x0d\xef\xcf\x90\x87\x1c\x3e\x77\xd2\xe7\x37\xab\xdf\x79\x29\x0c\x1d\xa9\x22\x2b\x35\xcf\x56\x2d\x04\x5f\x31\x13\xa5\xed\xeb\x7a\x5a\x98\x83\x6a\xa6\xcd\x7f\xfb\x17\x85\xc4\x80\xa4\x15\xbd\x7d\xc6\x98\x49\x94\xc3\x9f\x0a\xcd\xd2\xcf\x58\x70\xcb\xf9\xce\xfb\xad\x4c\x18\xf4\x0d\x9e\xab\xac\xcc\x9b\x4e\xaa\xfe\x22\x5b\x71\x50\x0b\xca\xf1\xf9\xf5\x77\x0d\xec\xfd\x87\x51\xf2\x8a\x3b\x6d\x84\x92\x2a\x52\x61\x8a\x8c\xcf\x5e\xb7\x25\x63\xda\xcd\x0b\x7a\xf6\xd9\x03\x07\x67\xc9\xf8\x73\xbe\xc5\xf5\x53\x98\x36\xf6\xa9\x39\xfc\x77\x0b\xbf\x6f\x3a\x7c\x58\x3e\x77\x23\x37\x02\x5a\x94\x84\x50\x05\xc5\xac\x99\xd0\x92\x57\x68\x46\x6f\x17\x1f\xac\x98\x52\xb3\x4b\xd2\x5d\x8b\x09\x37\x8b\x20\xbe\x9a\xfb\x75\x49\x77\xf4\xe2\xf4\x39\xcf\x8a\x09\x0f\x66\x18\x93\x4c\x20\x6f\x84\x7a\xa9\x02\xe4\xd9\xd5\xe5\x77\xbf\xbe\x9e\x7b\x30\x9f\x04\xbc\x0c\xfb\x49\xbc\x26\x0a\x52\x79\xd6\x70\xef\x9c\xdc\xfb\xe3\xd2\x6f\xae\x0b\x48\x7e\x1c\x2c\xcc\x7c\x81\x3b\x2d\x17\x39\xfb\x55\xaa\xfc\xdc\xcf\x0e\xfe\x8d\x9f\x56\xf1\xb4\x06\x5d\x9c\xa3\xcc\xed\x50\x2b\x07\x12\xbf\xc6\x10\xa2\x60\x6b\xf4\x84\xd4\xc3\xb1\x72\x2d\x56\x06\x65\x32\xd6\x52\xa8\x03\xad\x69\xc0\xae\x31\xe6\xac\x72\x54\x24\x4a\x4e\x41\x5b\xa6\x21\x51\x63\x29\xfe\x55\xf5\x66\xe6\x1c\xdd\x78\x6a\x25\xcf\x42\xec\x2e\x1a\x15\xf9\x8c\x69\xf8\x07\x7a\x26\x65\xa3\x87\x50\x48\xa8\x4a\xf1\xa8\xf3\x37\xc6\xc2\x06\xaa\x9f\xa8\x3c\x2f\xa5\xb0\xb3\x13\x24\xe0\x62\x58\x3a\xc2\x79\x92\xc2\x14\xb2\x13\x23\xc6\x7d\xae\x93\x89\xb0\x90\x38\x85\xe5\x84\x17\xa2\x8f\x93\x95\xe4\x57\xcc\xd3\x5f\x54\xac\x67\x3e\xfa\x68\x25\x67\x44\x02\xbb\x16\xd6\x8e\xbc\xfa\x1c\xc4\x46\x51\xa4\x1a\xa4\xc1\x80\xfb\xf6\xc5\xf5\x4d\xa5\x44\xfa\x73\x89\x10\x6e\x98\xf3\x6b\x60\x3b\x40\x09\x39\x82\x60\x7a\x0d\x85\x15\x40\xa6\x54\x6e\x1e\xed\x7f\x99\x40\xc9\xab\x1c\xe6\x02\xc3\x96\x30\x57\x99\x82\x4b\xcf\x91\xe9\xa1\x59\x89\x22\x5e\x06\xec\xb2\x61\x05\x7b\xef\xa0\x46\x1b\x73\xdf\x81\x6f\x73\x60\x37\x79\xf6\xe2\x07\x4b\x24\xc0\xc0\x4b\x57\xee\xce\xca\x33\xcc\x52\x48\x32\x1e\x32\x5d\x2c\x64\x19\x7b\xf3\xf2\x15\x46\x08\x85\xe8\xcb\x2c\x5b\xac\x4e\x97\x70\xc9\x72\x2e\x31\xa2\xa1\x28\xc8\x36\xce\x7d\x85\xf8\x10\x8c\xb2\xe9\xe4\xd7\xe9\xa5\x7d\xb6\x9c\x41\x85\xa7\x7e\x82\x73\x4f\xd6\x89\xc2\x0b\x32\xd0\x1a\xa8\x9d\xd5\xef\x7a\x1b\x41\x29\xc9\xe5\x8f\xa5\x34\x6e\x21\xc4\x2a\xe6\xbc\x40\x29\x2f\xa4\x36\xf2\x26\x82\x63\xc6\xcd\x2c\x24\x9d\x0d\x67\xcc\x89\x71\x48\x10\xac\x52\x3e\x30\xc7\x7d\x8b\x84\x41\x83\xd5\x02\xa6\x4d\x03\x69\xe5\x88\xda\x5e\x27\xd8\x3c\x8d\x76\xad\x48\xcc\x0b\xe1\x65\x97\xb4\x12\x2c\x37\x80\xde\xd5\xa5\xc7\xb7\x5a\x1c\x35\x1e\xdf\x7c\x31\x4c\x2f\x1f\x54\x72\x2d\x8e\xe4\x11\x2b\x65\x75\x45\x45\x0c\x68\x6d\x22\x21\xe5\xfb\x6b\x2e\xdd\x83\xa5\xc8\xbd\x03\xb4\x1e\xd2\xa0\xd4\x9d\x5c\x1d\x1d\xd0\x6d\x8a\x57\x13\x76\xd5\xcf\xa1\x9a\x4c\x1d\x36\x63\x15\x9e\x56\xd2\xa0\x11\x76\x55\xc1\x99\xa9\xe0\x8c\x8f\xc7\x1a\xa3\x65\x57\x46\x1a\x6c\x98\xa6\xb5\x49\x3d\xc8\x3e\x49\xf2\x6b\xdf\x70\x64\x70\xed\x0b\x2b\x2d\xb4\xe1\x85\x45\x61\xb1\xdd\x36\x4b\x28\xe3\x68\x46\x0b\xa0\x55\xfa\x81\xdc\x95\x4d\x8b\x56\x6d\x54\xac\xaa\xbd\xcf\x73\x13\xf1\x4f\x87\x58\x53\xac\x22\xcd\x8e\x1c\x24\xb5\x37\xdb\xbb\x49\x0a\xd0\x4e\x1f\xa7\x78\x62\xce\x12\x92\xdf\x2a\xc2\x13\xbc\xc3\x0f\x4c\x67\x8b\x82\x6d\x9b\x57\x05\xed\x63\x48\xd5\x03\xaf\x6d\x53\xc7\xb3\x09\xb4\x07\x5f\xde\xb2\x10\x58\x83\xc3\x74\xde\xb7\x03\x43\xe7\x9d\x6e\x90\x93\x43\xad\x6d\xde\xe2\x77\xaf\x9a\x91\x24\x9a\xdf\x31\x90\x89\x72\xc4\xe2\xff\xbd\x7e\xf3\x3a\xe4\xaf\x5d\x5a\x26\xf2\xc2\x5f\x96\xc3\x5e\x71\x6d\x26\x3c\x03\xaa\x8d\xfc\xad\xcc\x5b\x7f\xcf\x85\x80\xa7\x90\xf1\x19\x75\x96\x42\xa2\xd0\x12\xaf\x34\x2b\x9c\x80\x9b\x17\x25\xa6\x70\xe0\x53\x1c\xf7\xc1\x24\x9d\x1d\x40\x53\x9b\xa8\x86\xb3\xa5\x16\xd0\x76\xbb\xef\xa7\x9b\xd2\x80\xe6\x64\x36\x2d\x5f\xb7\x45\xf1\xba\x0d\x57\x59\x65\xc8\x5c\xad\xb1\xb1\x35\x7b\xdc\x32\x17\x6c\xed\xad\x58\x29\x14\x99\x9a\x39\xbc\x78\xf8\xac\x6c\xb8\x9e\x8d\xcf\xf5\xa6\xfd\x6d\x7a\x96\x37\xec\x8f\x8c\x53\x5d\xf4\xb4\x4c\x81\xda\xa9\xa3\x75\xee\xbf\xad\x3a\x5a\x62\x7f\x5c\xdd\xdb\x7b\x61\x7e\x57\x97\xc1\xda\x50\x79\x7d\x3d\x6d\xaa\xfe\xc4\xdc\x9d\x6f\x2a\x37\x72\x43\xae\xae\xbc\x81\x64\xad\xc7\xbc\x24\x1d\x6a\xd4\x3d\x58\x24\xfb\x3d\xb1\xbd\x07\x04\x9c\xf0\xda\x03\x62\x4e\x78\xed\x21\x61\x87\xda\x36\x7c\xf4\x61\x2c\xa4\xd6\x4e\x1e\x77\x9a\xbd\x17\xd5\xab\x9d\x49\xdb\x5b\xd1\x39\x25\x7f\x18\xcd\x97\xcc\xf4\x0a\xcd\xb7\x2d\xf3\xe7\xaa\x09\xb3\xa3\x55\x26\xf3\x81\xd3\x8b\x07\x68\x94\xfd\xfe\x87\x01\x75\x79\x1c\xb2\xe1\xbd\x6d\x43\x3c\xd0\x79\xa8\x69\x39\x2f\x95\x75\x0e\xa6\xe9\x7a\x2f\xfc\x4a\x48\x9d\x5d\x5d\x06\x03\xeb\x07\xdc\x5a\x53\x40\xf2\x08\xa4\xee\xeb\xd6\x34\x5a\x32\xb7\xcf\x03\x75\x02\xb5\x9b\x2c\x1b\x66\x2a\xb9\xf5\xb6\xe4\xb7\x17\x55\xca\xa5\xd3\xba\x9c\xf0\xe3\x13\x2e\x99\x78\x88\x88\x44\x31\x3b\x8a\xd9\x51\xcc\x7e\x2a\x62\x36\xf9\x6c\x1e\x03\xa5\x9a\x9b\xc8\x4a\x5a\x45\xf1\xb0\x91\x5a\xad\x69\x91\x5a\x61\x8b\xd4\xea\x81\xf6\xe4\xa8\xd5\x46\x32\xe0\x06\x71\x9d\xeb\x0f\x72\x34\x70\x47\x03\x77\x34\x70\xfb\x16\x79\x99\x6f\x91\x97\x45\x5e\x16\x0d\xdc\xeb\xba\x8c\x06\xee\x2d\x3b\x8a\x06\xee\x68\xe0\x6e\xb5\x68\xe0\x8e\x06\xee\x68\xe0\x8e\x06\xee\x15\x2d\x8a\xd9\x3b\x76\x1a\xc5\xec\x35\xed\xd3\x16\xb3\xa3\x81\x3b\x52\xab\x48\xad\x22\xb5\x7a\x1a\xd4\x6a\x7f\x03\x77\x92\x01\x97\xcb\x15\xdd\xb9\x3c\x09\x7c\xaf\x71\xb5\x2f\xe5\x97\xd0\xaf\x43\x98\xf0\xa9\x50\xa5\xae\x0b\x8a\x9d\x5f\x7f\xc7\xc6\x60\x8d\xc3\x02\x58\x7e\xf9\xc8\x9e\x49\xf9\x20\xf9\x30\x5b\xda\xf1\x43\xa4\xc4\x7f\xb9\xde\xa0\x3f\x54\xca\xad\x6e\x11\x62\x28\xd7\x07\x39\x79\x9b\xb8\xff\x83\x55\x7a\xc7\xf2\xe0\xff\xf3\xb7\x17\x5d\x85\xfc\xe3\x2d\x40\x55\xaf\xbe\x60\x35\x56\xd8\xf4\x35\x31\xdf\xdc\x49\x48\x31\x19\x34\x94\xf7\x77\x87\x5e\x24\xc2\x66\xb3\x6a\xe0\xa5\x17\xda\x3d\x9d\xd4\x81\xf3\xb7\x17\x9b\xbb\x54\xc2\x06\x7c\x08\xef\x49\xf4\x8d\x44\xdf\x48\xd5\xa2\x18\xb4\x63\xa7\x51\x0c\x5a\xd3\x3e\x6d\x31\xe8\xb1\xfb\x12\xa2\x07\x80\x45\x0f\x40\x78\x2d\x7a\x00\xa2\x07\xa0\x1b\x30\x45\x0f\x40\xf4\x00\xac\x7f\x29\x0a\x93\x3b\x76\x1a\x85\xc9\x35\xed\xd3\x16\x26\xa3\x07\x20\x52\xab\x48\xad\x22\xb5\x7a\x1a\xd4\xea\x29\x86\xb8\x47\x43\x6c\x34\xc4\x46\x43\x6c\xe4\x46\x91\x1b\x3d\xd0\x9e\x1c\x37\x8a\x86\xd8\x6d\x3b\x8a\x86\xd8\x68\x88\x5d\xd5\xa2\x21\x36\x1a\x62\xa3\x21\x36\x1a\x62\xd7\xb7\x28\x4c\x62\x8b\xc2\xe4\x03\xed\xc9\x09\x93\xd1\x10\x1b\xa9\x55\xa4\x56\x91\x5a\x3d\x0d\x6a\xb5\xbf\x21\xf6\x81\x93\xd4\x42\x99\xa6\xfd\xd4\x4b\x8e\x21\x1e\x18\x2b\xfb\xfb\x1b\xdf\xe8\x0a\xac\x70\xc1\x7d\x8f\x65\x22\x17\xa1\x6e\xbb\xd2\x0e\x3b\xfa\x09\x37\x60\x16\xfa\x58\x32\xfe\xfa\xb9\xaf\x3f\xa9\x6b\xef\x61\xa9\x02\x99\x85\x0c\xfd\x78\x5c\xd9\x7a\x1a\x22\xd9\x00\x76\x6e\x7c\xf7\x62\x7d\x6f\xed\xc3\xcb\xde\xe1\x8a\xff\x07\xc9\xf7\xc3\xd7\xaa\x0f\xb9\x81\xdf\xfd\x66\xe1\x36\x90\xe6\x2b\x39\xa4\x82\xdb\xdd\x6f\x3d\xaf\x87\x58\x8d\xb9\x1b\x9c\x80\x6a\x1a\x3b\xf6\xe2\xaf\x2b\x78\x70\xef\x1c\x82\xa5\x97\xf4\x72\xb8\x35\x7f\xfe\xb6\xeb\x9a\xff\xca\x15\xd7\xba\x54\x9a\xd5\xdd\x04\xc2\x35\x71\xfe\x42\x07\x13\x3a\x15\xa6\xca\x75\x58\x7a\x2b\xe1\x9e\xc9\x0b\x61\x9c\x25\x8f\x1f\xda\xb4\x65\x77\x5a\x2c\x05\x56\x00\xd0\x05\xf9\x55\x2e\xaa\x22\x0e\xf3\x10\x2b\xb8\x76\x7c\x22\xf8\x5f\x50\x74\x69\xbc\x3d\x07\xef\xf5\x77\x34\xae\x95\x57\x1e\x96\x53\xfa\x8d\x5a\x13\xab\x7c\x3e\x9b\x88\x27\xfe\x66\xa9\x2b\xd0\xb9\x30\x66\x55\x7a\x46\x7b\xea\x0f\x31\x8f\x0d\x98\xc6\x0a\xf8\x87\x15\x35\xa6\x53\x09\x91\xa4\xf6\x0f\x79\xc2\x74\x99\xf9\xab\xb5\xfd\xa5\x12\x8c\x27\x89\x2a\xa5\x65\x12\x20\xa5\xc4\x8f\x65\xb8\xba\x01\xcb\xd9\x40\x8a\xdc\x54\x86\xec\xd3\x3c\x1f\x7c\xcb\xaf\xe1\x8c\x96\xb0\xf4\x9a\x92\x66\xdb\x5c\xe6\xc4\xe1\x1f\xe6\xdd\xdb\x08\x04\x1b\x8b\x03\x6d\x43\x97\xca\x44\x32\x7b\x5b\x66\xe0\x2f\x5e\x15\x92\xf8\x56\xe5\x0a\x6b\x2a\x0a\x05\xbe\x8d\xb3\xa7\x1b\x9f\x53\x05\x64\xa0\xf2\xa5\x5d\x5a\x9f\x87\xbb\x1f\xe9\xc2\x24\xf7\x11\xe3\x45\x91\x61\xe2\x95\x72\xbc\xfb\x6e\x22\x92\x49\x7d\x6b\xed\xb2\xd7\x36\x97\xe1\x36\x52\x32\xd8\x56\x8a\x06\x0b\xc6\xd3\xe1\x43\xa8\xc2\xb6\xd4\x38\x18\x5d\xbc\xf2\xb5\x56\x65\xb1\xe1\xeb\x8b\x76\x37\xfa\x3a\xdc\x69\xd9\x14\x47\xc2\x43\xef\xcc\x0c\xf7\xf0\x93\x71\xce\x1b\xeb\x07\x8c\x5d\x8e\x58\x5e\x66\x56\x14\x19\x7e\x42\xf5\x62\xe8\xea\xef\x8a\x6f\xf4\x18\x97\xb3\xe0\x1b\xf5\x97\x2f\x41\xca\xf8\xd8\xf5\x68\xc3\x95\xec\x74\x6b\x53\x99\x3b\x19\xa4\x61\xf6\xc3\x0b\x3e\xdd\xf7\x55\xef\xec\x4e\x64\x19\x5e\x8a\x9f\x65\xea\x0e\xd2\x01\x3b\x38\x98\x27\xe5\x89\xd2\x8d\xf9\x20\x31\x39\xf8\xa2\xf5\x96\xa3\x1c\xf5\x84\x37\xc1\x11\xb6\xb5\x78\xcd\xb6\x13\xb1\xd9\xf6\xca\x04\x63\x52\xc9\x60\x36\xfe\xf6\xed\xcb\xdd\x10\xe1\x75\xbb\x0f\x7f\x4b\x17\x58\xb7\x2d\x05\xd7\x56\xf0\x8c\x95\x3a\x33\x84\x0b\xdc\x09\xcc\x3a\x5c\x73\x36\xe1\xe8\xf7\x4e\xc0\xd0\x7d\x5a\xec\x0b\xda\x7d\xbf\x39\x74\xc6\x95\xcc\x66\x8c\xd3\xd6\x8c\xca\x2c\xeb\xb1\x91\x90\xdc\x91\x6e\x28\x42\xee\x9d\xd3\x44\xd9\xb5\x90\x09\xb8\x35\xf5\x2b\xe1\x04\x67\xe4\x7a\x74\x34\xa2\x3a\xe8\xa9\xbf\x9a\xd9\xdb\x1d\x8c\x1f\xc2\x1d\xfa\x04\x2f\x94\x75\x52\xad\x17\x7b\xde\xaa\x0c\xbd\x35\x95\x49\x19\x6f\x09\xe3\xcd\xc7\xff\x23\x24\xaa\x7b\xec\x2d\x32\x1f\xa7\x36\x82\xb0\x13\xa7\x45\x16\x45\x86\x17\xc8\x3b\x64\xa9\x91\xf2\xc8\x94\xc9\xc4\x2d\xe9\xa0\x50\xa9\x39\x70\xa4\xe8\xc0\x40\xa2\xc1\x9a\x83\x63\xf7\xd7\xfc\x1a\x70\x7d\xcd\xef\x4e\x78\x21\x0e\x8e\x7b\x0c\x01\x84\x57\x90\x29\x3b\x79\xba\x78\x18\xd6\xda\xba\xf9\xf2\xa1\x36\x77\xbf\x6e\xa3\x07\x7f\x9f\x96\x2a\xe8\x7a\x2a\x47\xe7\x2d\x60\x66\xa6\x43\x4a\xba\x39\xbb\xf6\xb8\xcd\x11\x7c\xc6\xce\x24\x03\xf2\x91\x80\x65\x39\x70\xe9\xdf\x86\x29\xe8\x99\x9d\xa0\xdb\xc4\x54\x04\xe4\xc9\x03\x7d\x3f\x80\xfb\x03\x1f\x80\x5b\x23\x39\xdd\x79\x38\x0f\xdc\xc3\x2f\x0e\xe7\x09\x69\xcd\x11\x9e\x2c\x28\x91\x45\xef\x04\xc6\xef\xdc\x97\x6d\x10\xd2\x4f\x44\x2d\x2b\xfa\xf1\xf2\x25\xdd\x6f\xe8\x61\xf5\x8d\x90\xa9\xa9\xea\xd9\xa5\xd5\x3d\xd6\x0e\xde\x4b\x81\x8c\x33\x7c\x8a\x00\x5e\x14\x81\x37\x15\x5b\x1f\xe8\xbe\xa1\x23\x3d\x06\xb5\x06\xef\x4b\x6c\x49\x4a\x8e\x4e\xf5\xc8\x79\xe7\x44\x90\x8c\x0f\x21\x33\xde\xe0\x02\x8d\xe9\xb3\xb3\x97\xaf\xaa\x7b\x43\xf1\x1e\xee\x0f\xad\xcc\x6c\x10\x05\xb0\x70\xfb\xea\x62\xdb\x5c\x7e\x45\x50\x6c\x67\x56\x67\xd7\x60\xe9\x98\xe5\xbc\x70\xa7\x8c\xfa\x58\x6a\x15\x7e\x89\x90\x7e\xf8\xb0\x6c\x25\xf7\x6f\x7e\x5b\xe2\xb2\x41\x36\x3a\x2a\x9b\x45\x1a\x6c\x73\xf6\xd6\x58\x49\xea\x36\x67\x54\x6d\x21\xb4\xd7\x0d\xbc\x34\x9f\xf0\xa6\xb1\x35\x05\x43\xa5\x18\xa8\xf0\x85\x0e\xbf\xd7\x5d\x74\xbc\x05\xdb\x28\x5e\x4e\xf7\xce\x20\xb1\x6a\x7d\xf1\xcf\xf0\xb2\x85\xbc\xc8\x1e\x3a\x79\x6c\x6b\x25\x2d\x17\xf2\x2d\xf0\x74\x76\x0d\x89\x92\xe9\x86\x04\xb6\xb5\x1f\xaf\x84\x14\x79\x99\x33\x59\xe6\x43\x40\x10\x1b\xea\x0b\x09\x09\x29\xc0\x9c\x49\xb8\xcb\x66\xe1\x12\x7f\x56\xa8\x34\xd0\x93\xa1\x53\xd8\x78\x3a\xc3\x9b\x47\xb1\x4c\xb6\x9c\xb9\x4e\x84\xad\xb9\x8f\x66\x89\xe6\xc6\x89\x45\x3d\xec\x54\x58\xc7\xb1\x86\x80\x5e\x3a\x91\x82\xdb\x63\x3e\xe5\x22\x73\xa2\xf5\x80\x5d\xc0\x88\x97\x19\x5e\xa0\xcb\x9e\xb1\x23\x37\x58\xd0\xc9\x96\x7d\xe0\xc4\x5d\xa3\x9c\x36\x6f\x7c\x55\x0d\x9c\xd0\xf1\x16\x7e\x87\x4d\xaa\xb8\x86\xb6\x69\x35\xd7\xd0\x0a\x5e\x9a\x4d\x55\xf9\xd6\xc6\x5c\xca\xd4\x9d\x87\xa6\x24\xda\x20\xe9\xc2\xf8\x9e\x37\x63\xd9\xeb\xab\xad\x2c\x99\xb5\x56\x63\x0d\xc6\x5c\x00\x4f\x33\x21\x61\x77\xfc\xba\x99\x00\xcb\xf9\x3d\xe2\x98\x15\x39\x38\x49\xa4\x89\x61\xbc\xb9\x2a\xab\x58\xce\x6f\xa1\x1a\x9e\x0d\x61\x84\x17\x24\xe3\x82\x1b\xbb\x4f\xf8\x33\xe2\x22\x73\x1a\xfa\x4d\x1b\x36\x78\x57\xb2\xca\x32\xd0\x84\x38\xee\x6f\x21\x4b\x0c\xb1\x2b\xb4\x42\x65\x92\x3e\x6d\xf2\x78\xe4\xa1\xdc\xbd\x4c\x74\x38\xdc\xa5\x7b\x35\x07\x8a\x17\xf7\x09\x19\x0a\x35\x70\x83\xaf\x11\x6e\x9a\x52\x8f\x9c\xea\x18\x34\xce\xc6\x84\xfc\x25\xec\xec\xb5\xb2\x3e\x92\xaf\x5a\x20\x7e\xed\xaf\x88\x06\x63\x45\x8e\x07\x2c\x2d\x75\xb8\xb0\x1a\x61\xc6\x97\x6f\x7d\xeb\xa8\xfc\xee\xd9\xb3\x0d\xe5\xb7\xf7\x8f\xf4\x1a\x50\x53\xde\x05\x5f\x5e\x57\x74\x28\x90\x7f\xa7\x02\xbb\x3d\x16\x5e\x0c\xc6\x9b\xb7\x41\xa3\xc7\x55\x18\x2b\xe4\xb8\x14\x66\xc2\x86\x60\xef\x00\x24\x83\x7b\xaa\xa9\xc3\xfe\x05\x5a\xe1\xa6\x3a\xf0\xd6\x6e\x86\x16\xd0\x9e\x3f\x1e\x88\x4d\x85\x11\x4a\xfe\x45\x18\xab\xf4\xec\xa5\xc8\xc5\x03\x05\xa8\x43\x5b\x74\xfb\x55\x10\x54\x59\xca\xde\xd2\x56\x5c\x03\x2d\x58\x03\x5a\x41\xad\x22\xf5\x94\xb9\x73\x32\xe4\xc9\xed\x7b\x03\xf0\xb3\xc7\x02\xe1\xc0\xae\x77\x80\x2a\xca\x7b\x55\x07\x48\xb6\x08\x29\x5f\xdc\x13\x7c\x5a\x50\xbe\x9b\x28\x03\xf8\x02\x19\x2a\xf1\xb3\xe0\x58\x10\xa6\x22\x18\xe8\x96\x95\x60\x18\x1f\x8d\xda\x6f\xd4\x87\x1d\x25\xcf\xbc\x34\x96\xe5\xdc\x26\x13\x32\x65\xa9\xb4\x12\x27\x0e\x8d\x17\xfb\xb7\x81\xf2\xc6\x86\xe8\xed\x4d\xc6\x8c\xe6\xf9\xe2\xde\xe9\x96\x0f\x7a\x84\xda\xad\x05\xf2\xf9\x6e\xda\x1a\x70\xd6\xde\x10\x2f\xb7\xe5\x74\x79\xff\x0d\x1a\x91\xeb\x5f\x70\x17\xce\x5e\x5f\x6c\x6e\x8a\xd9\x45\xc1\xdd\x5a\xc5\x9d\x37\x97\xaf\x59\x54\x30\x99\xfa\x27\x6d\x9b\x39\x6a\x28\xa6\xc7\x38\xbb\x85\x59\x8f\xb8\xd8\xfc\x85\xf9\x1a\x32\x2f\x49\x00\xde\x1b\xef\x5e\xa2\xef\x36\x07\xc9\x0e\xd8\x43\x6d\x3b\x77\x46\x68\x7d\x37\xd1\x2d\xbf\x08\x8b\xde\xe2\xb3\xed\x11\x9c\xda\x2d\xcc\xb6\xfb\x60\x6e\xbb\xdd\x2e\x78\xdd\x87\xf6\xdd\xfd\x50\x09\x7a\xd5\x56\x6f\xe7\x67\x6a\xb6\xad\x4d\x54\xa1\x05\x20\xee\xb5\xbc\x0a\xfd\x9a\x56\x26\xb7\xc6\x43\x43\xc8\xe8\xce\xf4\x44\x14\x94\xf5\xe0\x9d\x01\x1e\x23\xd9\x77\x3c\x13\x69\xd5\x05\x9d\xdf\x4b\xd9\x73\xe2\x93\xfb\x0f\x12\x5d\x12\xd7\x2e\x14\x98\xd7\xca\xe2\x2f\x1f\x0c\x40\x34\xcd\xbd\xc0\x43\x5d\x78\x2b\x34\x52\x19\x54\xbc\x28\xe2\x3e\x80\xe1\x72\x3e\x72\xc7\xb0\x4b\xc9\x94\x0e\x70\x70\x0f\x7d\x47\xd4\x05\xf2\x89\x21\x39\x38\xd0\x3e\xbd\xb4\x0f\x0f\x3e\xa5\x5b\xd0\x5b\xd3\x9d\xef\x0a\xe5\x03\x7a\x82\x3a\x56\x91\xa1\xb4\xeb\x45\x55\x1e\x1c\xe5\x22\x61\x39\xe8\x31\x7a\x5c\x92\x8d\x3d\x0e\xed\x4d\xd9\x8e\xee\x52\xdb\x9a\xfa\x36\x07\xdc\x0a\x0b\x90\x35\x91\x09\x68\x1f\xe6\x46\x3d\xb4\x4c\x4e\xff\x76\x14\x1c\xf7\xe0\x3f\xac\xe0\x42\x9b\x01\x3b\x63\x46\xc8\x71\x06\xad\x67\x5e\xc3\x68\x76\xe3\x7a\x10\x86\x39\x52\x3b\xe5\x99\xd7\xa5\xb8\x64\x40\x36\x2b\xd7\xfb\x3c\x4b\xed\x79\x49\xc5\x51\x9e\xca\xd1\x75\x70\x0b\xb3\x83\xde\x02\xd2\x1c\x5c\xca\x03\xe2\x2d\x0b\x68\x52\x31\x22\xf4\x91\x1d\xe0\xb3\x83\x2e\xb9\xf0\x96\x0c\x67\x57\x3b\x5a\x7b\xd0\x8d\x31\x22\xc4\x87\xec\x28\xac\xb7\xb4\x44\x1f\x15\x65\x15\x2b\x0d\x90\xb4\x8e\xa7\x8c\x41\x90\x33\x51\xaa\x44\xc5\x54\xc2\x1d\x4a\x8f\x8f\x46\xf0\x73\x9a\x84\x90\xe3\x6f\x8b\x94\xdb\x8d\xc2\x73\xa9\xb5\x20\x72\xf8\x96\x3a\x61\x25\xf6\xe2\x70\x6b\x24\xc6\xac\xe0\x9a\xe7\x66\xc0\xae\x7c\x3d\x55\xc4\x34\x31\x6a\xda\x12\x3d\xec\x6e\x66\x05\xb0\x3f\xb1\xb7\xcd\xb9\x0c\x58\xbf\xdf\x67\x37\x6f\x2e\xde\x9c\x32\xfa\x85\xa4\x6c\xab\xd8\x48\xa1\x12\xa4\x4a\xed\x86\x9a\x82\x44\xc5\xdf\xc9\xf7\x4a\xc2\x9b\x91\x3b\x21\xdc\xc2\x14\x34\xbb\x73\x5b\x95\x88\x14\x2a\xeb\xd5\xe0\xf0\xfd\xe2\xf1\x6e\x92\x49\xce\xef\xaf\x4b\x3d\xde\x62\x03\xd8\xc2\x26\x34\x4d\x36\xb5\x32\x89\xa8\xd7\xcc\x3d\x37\xc9\x04\xd2\x32\x83\x94\xf1\xa1\x9a\x42\xcb\x64\xdb\xfe\x0c\x59\x7a\x09\xe1\x43\xc7\xf3\x86\x46\x65\xa5\xad\x94\xd5\x23\xb8\x3f\x65\xbf\x45\xd7\x36\x67\x05\xe8\x04\xa4\xe5\x63\x98\x37\x03\xd0\x7b\xcf\x9f\xfd\xd7\xb1\xe7\x47\xae\x47\x6f\x3d\x79\xe6\x30\xe2\x15\xbf\xff\x56\xd6\xa6\x41\x61\xd8\xb3\x01\x3b\x9b\x1b\x0c\xbf\xcb\x92\x32\x43\x5b\x0b\xba\xeb\x1b\x43\x0e\x67\x4c\xab\x12\x1d\xf6\xac\x2c\xda\xda\xec\xaf\x7e\xfb\x5f\x4e\xe9\xe3\x79\x91\xc1\x69\x28\xc3\x4c\x6a\xb3\x93\x61\xac\x62\xbf\x7e\xf6\x5f\x44\x3d\xdd\xf9\xac\xb5\xc2\x1a\x66\xdc\x01\xac\x2c\x98\xc8\x29\x9c\x13\xb2\x59\x5d\xcf\x59\xb7\xd1\xdf\x58\xae\xad\xe9\x31\xf4\xea\x57\xc2\xa1\x55\x96\x67\x73\x5a\x3e\x6a\xe1\x70\x47\x40\x4a\x15\xc2\x04\xd0\x50\xc5\x9e\xff\xfa\xd9\x7f\x2d\x9a\x53\xde\xc8\x04\xf0\x4b\xfc\x02\xc3\x2c\x86\x4e\xb9\xbf\x15\x59\x06\x69\xef\xc1\xe9\x8f\x4a\x6d\x27\xa0\x7b\x0c\xa4\x09\xc6\x2a\x37\xbf\xb9\xb9\x61\xef\xba\x94\x12\x65\x04\xb2\x0e\xa3\x45\xab\x61\xe1\xf2\x8b\x75\x8c\xd0\xb2\x5c\x19\xbb\x7c\xca\x9b\x1f\x37\xd7\xb8\x9c\xbd\x19\x6d\x2b\x0e\xf4\x77\x30\x43\x2c\x7e\xbd\x83\x48\x79\xdf\xbf\xad\x12\x7f\xfb\x42\xda\xbe\xd2\x7d\xea\xe6\x94\x59\x5d\x3e\xec\x35\xa8\x5b\xde\x3a\x01\x1f\x80\x0c\x94\x8d\xf3\xb6\xb0\xab\xef\xe5\xe4\xef\x7e\x9e\x53\x75\x27\x57\x53\x0e\x24\x9c\x9e\x66\xec\x78\xea\xdb\x16\xb7\xb9\x63\xe3\x46\x77\x6f\xff\x9f\x45\xec\xde\x82\x1c\xf8\xb3\x5b\x9d\x76\x27\x57\xa1\xc7\xa3\xb7\xc1\xe8\xd5\xb1\x25\xce\x47\x36\x27\xf7\x02\x0d\xb3\x84\x72\x2d\x9c\xf0\x25\x14\x88\xe6\x51\x3b\x64\x2c\x46\x14\xb8\x73\x6e\x56\x1e\xf4\x0c\xb8\xb1\xcb\x40\x11\x0f\xfa\xc3\x6d\x7d\x12\xc0\x7c\x6b\x0b\x9d\x4e\x42\x42\x90\xd7\x36\xc6\x73\x42\x94\x83\xb7\x40\x1e\x3e\x0a\x38\x6b\x09\x51\x07\xd5\x91\x70\xfb\xd7\x96\xaf\xde\x57\xd8\x4c\x30\x72\xee\x22\x5a\xfb\x4f\x1b\xc1\xc1\xde\x74\xea\x89\x57\xe5\x51\x24\x97\x26\xe9\x2b\x14\xe5\xe7\x0f\x46\x18\x7d\x60\x0a\x48\x06\x1a\xf0\xf4\x51\x34\x32\x29\x40\xa8\x17\x9d\x65\x77\x7c\x66\x0e\x1e\x8d\x14\x9e\x83\xe5\xeb\x13\x4d\xe6\x5b\x9b\xe8\x5f\x5b\x2e\x53\xae\x53\x3f\xcb\xc3\x43\x53\x75\x39\x60\xaf\xd0\x17\x27\x47\xea\x94\x4d\xac\x2d\xcc\xe9\xc9\xc9\x58\xd8\xc1\xed\xef\xcd\x40\xa8\x93\x44\xe5\x79\x29\x85\x9d\x9d\xa0\x03\x4e\x0c\x4b\xab\xb4\x39\x49\x61\x0a\xd9\x89\x11\xe3\x3e\xd7\xc9\x44\x58\x48\x6c\xa9\xe1\x84\x17\xa2\x5f\xcb\xdc\x66\x90\xa7\xbf\x08\x03\xbd\x67\xc1\xba\x75\x06\xd1\x3a\xa5\xa7\xd0\x2f\xe5\xad\x54\x77\xb2\x8f\x9a\xb0\xd9\xea\x34\x6e\x16\x05\x11\xda\x1c\xbc\xb7\x09\x7c\x28\x54\xfa\xde\x37\xc1\x2d\xa6\xcf\x65\xda\x27\xa7\xe5\x7b\xde\x8b\x5d\x6c\xc3\xfd\x3a\xb0\x60\x93\xa8\x77\x6a\xbb\x69\x53\x3c\xb1\x62\x0a\x3b\x39\xc1\x43\x6b\x6d\xf7\x9b\x10\x70\x9a\x96\x9a\x76\xbc\xe1\x0d\x0f\xbe\x9d\x9c\xcf\x50\x56\xc2\xb1\x99\x22\x51\x40\xaa\x14\xbc\xe5\x74\x8a\xa6\x81\x6b\x47\x8e\x6e\x9c\x28\xed\x7d\xe4\x68\x37\x9e\x19\x0b\x39\x11\x37\xfa\x3e\x9b\x31\xab\x67\xe4\x58\xd7\xb7\x4e\x79\xf5\x9e\x6f\xa7\x31\xdc\xe2\x7b\xc6\xa8\x44\xa0\xe8\x54\xc3\x35\xc8\x6d\xc1\x06\xc8\x59\xa1\x8c\xc0\xb1\x3d\xcf\xdc\xce\xb2\xb7\x3b\xbb\x6d\xb8\xf9\x7e\xf7\x9b\x6d\xb6\x6e\x84\x55\x4e\xb6\xb4\xd2\xb7\x23\x30\x46\xcd\x2c\x03\xbf\x3d\x87\x26\x28\xbe\x4e\xac\x49\x94\x34\x56\x73\xb1\x3a\x8f\x6a\x79\xdb\xd1\x95\xb2\xbb\xbf\x82\x21\x06\x9d\xed\x04\x14\xb6\x3c\x31\x76\x88\x99\x35\x29\x54\xa0\x6e\x02\x86\xd2\xac\x42\x2c\xa2\x23\x5c\x3b\x9a\x66\x77\x80\x11\xdb\x0b\x4e\xf4\x35\x55\x59\x4a\x2f\x50\x7a\xbd\xae\xd6\x75\x39\x96\xaa\xfa\xf9\xc5\x3d\x24\xe5\xa6\x39\xf9\x8b\x6d\xc1\x16\x18\x0c\x2a\x3e\x6c\x85\x26\xe1\x8e\x6e\x78\xe0\xe5\x17\x85\x60\xf7\x82\x8c\xe1\x56\x98\x11\xe5\xac\x55\x1b\x01\x0d\xc7\x69\x85\xc2\x95\x7b\x19\x59\x1c\xa5\x4e\x08\x8b\xe4\x26\x99\x28\x65\xdc\x29\xc7\xfd\xc4\x7e\xa7\x42\x91\xcf\x10\x13\x68\x34\xcb\x1d\x8d\x09\x89\x34\x75\xf7\x24\x38\xd5\x9f\x09\x43\x2a\x7c\x05\xc1\xe0\xe5\x72\xdd\xa0\xe1\xd2\xfd\x31\x46\xa9\xcb\x58\x66\xca\xdc\x75\x7a\x07\x62\x3c\xb1\xa6\xc7\xc4\x00\x06\x88\x35\xc0\x93\x49\xa3\xdb\x1c\xc0\xb6\xee\x6d\x6a\xa2\x5a\xd3\xca\x7c\x54\x65\x45\xf8\x54\xa0\x5e\xc5\x63\xe6\xf7\x72\x29\xb8\x7a\x0c\x6c\x32\x38\xee\xb1\x3a\x65\xdf\xcd\x71\x38\x63\xc2\x82\xa3\xd9\xa8\xcb\x68\x55\x8e\x69\x25\x10\x62\x42\x71\x5e\x55\xca\x08\x7a\x61\x53\xd4\x39\x0f\x68\x71\x07\x6e\xdf\x70\xe6\x65\x1e\x8a\x2a\xe1\xfa\xd0\x2c\x0f\x55\x62\x91\x06\x53\x28\xd2\x56\xe7\x0d\xf6\xff\x5d\x7d\x74\x64\x8e\x6b\x60\x4e\xc4\x78\x12\x60\xc9\x3d\x23\x68\xef\xc1\xf6\x67\x8f\xed\xe5\x8b\xa1\xb6\xa3\x47\x86\x5a\xdb\x37\x1e\xf2\x2d\x6a\xac\x6a\xec\xbf\x05\x9d\x57\x50\x44\x14\x41\x92\xe1\xed\xe4\xe1\x8a\x2d\x8f\x63\xec\x19\x3b\x42\x24\x13\xf6\xd0\x20\xc2\xf7\x55\x71\x3c\x60\x67\x4c\x96\xd5\x99\x5b\x37\x80\x54\x55\xff\xbe\x23\x37\xa8\x51\x75\x5f\x3b\xae\x78\x2f\x72\x47\x6d\x37\x4f\x7b\xb3\xf5\x3d\x04\xe0\xe1\xa2\xa1\xeb\x3a\x21\x58\xef\xd8\xc1\x7e\xa4\x3b\xf4\x11\x56\xb1\x7b\x1f\x0b\x01\x1a\x78\x5c\xeb\x28\x0c\xd0\x79\xaf\x29\x3d\x55\x07\xb2\x7d\x8a\x09\x16\xbb\x62\x05\xeb\x06\x33\x58\x47\x70\x65\x7b\x45\xf8\x2c\x6f\xf3\x61\x30\x21\x0b\xab\x05\xed\x16\x91\x1f\xce\xf0\xe9\x96\xc1\x4f\xab\xdb\xbe\x94\xae\x6e\x7b\xd1\xbc\xba\xad\x45\xbc\xc7\x17\x18\xb4\xbc\x75\x84\xb6\xd4\xf6\x27\x6d\x75\xdb\x3e\xb4\x68\x55\x3f\x3b\x04\x1c\x2d\x6f\x5d\x9d\x4d\x6a\x3b\x04\x27\x2d\x6f\x0b\x22\xea\xfb\x89\x55\x5a\xde\x76\x36\xb2\x2e\x6f\xbb\xc6\x35\x2d\x6f\x73\xa9\x8e\xef\x29\xc8\xa9\xd7\x8e\x70\x62\x5f\x5b\x3a\xc7\x2f\xf7\xe2\x27\x75\xeb\x18\xc4\xbb\x45\x46\x2d\x6f\xf3\x02\xe0\x13\x89\x92\x5a\xd2\xd5\xd7\xd6\x75\xf3\x72\xe5\xc7\x94\xe3\x1e\xe2\x7c\xbc\x42\xd1\xf3\xa9\x37\xc1\x4e\x8d\x11\xd9\x85\x06\x2c\x6d\x80\x61\x63\xc1\x0e\xf3\x61\x02\xb3\x96\xb7\xee\x18\x27\xb5\x8e\xd8\x27\xb5\xce\x90\x1b\x05\x9e\xaf\xc8\x2e\xfc\x11\x65\x1d\xb2\x4c\x47\x59\x27\xca\x3a\x5b\xb4\x28\xeb\x6c\xda\xa2\xac\xb3\xaa\x45\x59\x67\x49\x8b\xb2\x4e\x94\x75\xf6\x6a\x8f\x4f\xd6\x21\x4b\x55\x67\x06\xb3\xbf\x92\xc1\x75\xde\x42\x86\xd2\x54\x08\x09\x6a\x9b\xca\x1c\xef\xbf\xf6\x24\xf6\x06\xcd\x6b\x3e\xd2\x5d\x73\x39\x06\xf6\xbc\xff\xfc\xd9\x86\xe9\x84\xcb\xdb\x3e\x41\x3f\xcd\xb6\x6d\xea\xe1\x7c\x5b\xe5\x91\x78\x6f\xde\x25\x7f\x52\x2b\x87\x47\x4b\xc2\x5c\xe1\x20\xaa\xaa\x62\xe5\x60\x19\xb7\x2d\x83\xb8\xc8\xa1\x72\x88\xb6\x52\x98\xeb\x98\x60\x25\xbd\xbf\xc3\x6d\xea\x60\xb7\x19\x24\xc0\x29\x0e\x7e\x08\xd5\x2c\x54\x0e\x94\xa0\x1a\x0e\xbd\x9b\x02\x04\x58\xb1\x23\x18\x8c\x07\x2c\xa5\x64\x6f\x2e\x7d\xcc\xd9\x71\xaf\xe9\x1e\xcf\x1d\x71\xd5\xf8\x1f\x37\x6d\xef\x1f\x87\x29\x48\x5b\xf2\x2c\x9b\x31\x98\x8a\xc4\x56\xeb\xc3\x80\x42\x61\xc9\xd9\xb9\x8f\x2b\x65\x0f\xf1\x70\x5f\x91\xb0\xbf\x70\xb6\xb6\xf3\x57\x87\xb6\xbf\xec\xb6\x30\x8f\xdd\xe9\xcd\x9c\x5c\x42\x10\x1a\xac\x54\xab\xac\x1b\x8d\xfc\x95\xf8\x4f\x44\xf0\x37\x6f\x77\x75\x8f\xb1\x8e\x78\xc2\xde\x7c\x60\x5e\x81\x2a\xb3\xcc\xa1\x37\x79\xcc\x16\x41\xb0\xc4\x93\xb5\x24\x5b\x87\xdc\xac\x79\x23\x6b\x07\xdf\xb9\x51\x85\xca\xd4\x78\xd6\xdc\x41\x7f\x0f\x4c\x5d\x1e\x87\x33\x53\x0e\xbd\x08\xe8\x0e\xd1\xeb\xb9\x2d\x8f\xbe\x90\x95\x2d\xfa\x42\x16\x5a\xb4\x0f\xcc\xb7\x68\x1f\xd8\xa2\x45\xfb\xc0\x92\x16\xed\x03\x8b\x2d\xda\x07\xa2\x7d\x60\x9f\xf6\xe9\xdb\x07\x58\xf4\x85\xac\x6a\x51\xd6\xa9\x5b\x94\x75\x36\x6f\x51\xd6\x59\x6c\x51\xd6\x89\xb2\x4e\x94\x75\xa2\xac\xb3\x6b\xdb\x03\xb9\x0b\x95\x76\x9e\x22\x53\xa8\x74\x4d\x86\x0c\xd9\xab\x13\xd5\xcf\x54\x52\x55\x26\x71\x9f\x78\xcf\x87\xe1\x39\x99\xd0\x7b\xec\x5f\x4a\x02\xa5\x27\x50\xc9\xdb\x1c\x98\xc2\x4b\x24\x0a\x95\x1e\x99\xe3\x1d\x02\xcf\x63\x86\x4d\xcc\xb0\xf9\x19\x64\xd8\x4c\xb8\xf1\x85\x93\x90\xb4\xae\x4e\xb8\x69\x1c\xff\x1b\xd0\xf9\xcf\x36\xdf\xc6\x21\x9c\x47\x18\xbc\xa7\xae\x46\x0a\x82\x5d\xea\x7d\xbb\x90\x5e\xb5\x21\xe6\xf5\x32\xba\xa2\x27\x4d\x21\x65\x05\xe8\x3e\x21\x99\x62\x23\xe1\xeb\x87\xcd\xe1\xaf\x87\xf0\x13\xcf\x9b\x69\x43\xe2\x49\x27\xcf\xb4\x97\xd2\x99\x6f\xaa\xe9\xa2\x6b\x71\xc5\x27\x97\x4a\xd3\x8d\x56\xda\x67\xd6\xbb\xd3\xbe\xd9\x4b\x2f\xed\x4a\x89\x44\x25\xef\x7a\xab\x32\xc9\xab\xdb\xd2\xe2\xb6\xff\x2c\x41\xcf\x98\x9a\x82\xae\x15\xa3\xea\x76\x9f\x5e\x75\x49\x4d\xc2\x7d\x01\xe5\x6e\x0c\x3c\x9d\x98\x22\xba\xd4\xd4\xbb\xf6\x1a\xb2\x47\x56\x3d\x79\x75\xeb\x56\x71\xe8\x50\x6d\x78\x6a\xb5\x98\x57\xb7\x4e\xcd\x6f\xac\x63\x13\x1c\xeb\xd0\x0c\xc7\xba\x35\xc5\xb1\xce\xcd\x71\xac\x4b\x93\x1c\xfb\xe0\x15\xa4\x57\xb7\x8e\xcd\x47\xac\x73\x2b\x1d\x7b\x82\xf5\xa8\x57\xb7\xf7\x00\xee\x2e\x2d\x76\x2c\x56\xb7\xde\xbb\x75\x6d\x50\x63\x5d\x1b\xd5\x58\xd7\x78\xb8\x53\x15\xed\xd5\x2d\xd6\xd7\x7e\x0f\x72\x5a\x67\x42\xc4\xbe\x35\xb9\x1f\x9a\x68\x07\x38\x59\xdd\xfd\xfb\xa1\x14\x20\xe2\xd2\xf5\x85\xb3\x6e\xec\xc6\x5d\x5f\x18\xaa\xd9\xbc\x18\x35\xc4\xad\x22\x46\xe3\xef\x69\x30\x78\x95\xb2\x51\x3c\xae\xd1\xd9\xc2\xd5\x33\xb5\xe9\xac\xba\x7c\xc6\x29\x05\xf5\xa5\x55\x8d\x8f\xf1\xdd\x01\x85\x93\xd6\xd2\x84\x4c\xe7\x03\x4c\xeb\x2f\x50\xbf\xa0\xeb\x70\x0f\x82\x1d\xfb\xd0\xd4\x6f\x1c\x0c\x9a\x37\xe7\xfa\x1e\x8f\xfe\xfd\x9f\xe3\x56\xf5\x96\xba\xc3\xa8\xfd\x6d\xdc\xa2\xf6\xb7\x57\x8b\xda\xdf\xca\x16\xb5\xbf\x3d\x5a\xd4\xfe\x36\x6b\x51\xfb\x5b\xdd\xa2\xf6\x17\xb5\xbf\x1d\x5a\xd4\xfe\xa2\xf6\xb7\x6b\xfb\x19\x6b\x7f\xdd\x46\x35\x37\x75\x31\x1f\x24\x82\xf2\xa3\xe5\x56\x24\x75\xc4\x73\x78\x8b\xfe\xd5\xad\x0e\xd8\xd4\xef\x96\x6b\x80\x4d\x2d\x71\x41\x0b\x1e\x3c\xa0\xee\x55\x0a\xe1\xc2\x97\xeb\x35\xc1\x4f\x2d\x72\xbb\x33\x4c\x6c\xb8\x84\x3b\x45\xc5\x9b\x10\x58\x56\x5f\xdc\x5e\x45\x9d\xa5\xec\x28\xf8\xe2\xf1\x22\x16\xa9\x6c\xfb\xa1\xb4\xa2\x5f\xbf\x51\x79\xe7\x31\xa8\xa6\x95\xcf\xdf\x72\x21\x57\x31\x6c\x55\x7c\x54\x8d\x3d\x8e\x3c\x82\x6e\xcd\x01\x2f\xbe\x1d\x09\x49\x91\x8e\xe1\xd2\x20\x25\x43\xd0\x14\xd1\x53\xba\x7a\xc1\xe3\x39\x89\xbe\x38\x1f\x94\x7f\x6b\xd8\x35\xa2\x7c\x38\x1e\x32\x2e\x7d\x32\xac\x92\xe1\x56\x7b\xba\xa9\xbe\x96\x97\xab\xbb\x58\xaa\xd1\x07\xec\x05\x62\x7d\xb3\x63\x61\x10\x3e\xfe\x9a\x88\x6e\x10\xf9\x71\x15\x6e\xb8\xdb\xba\x70\xc3\x5c\xc4\x48\xac\xdb\x10\xeb\x36\xec\x55\xb7\x01\x1f\xd2\xe1\xee\xbc\x80\x03\xfb\xab\xbf\x5e\x49\x03\x82\x2a\x2f\x33\x2b\x8a\x3a\x02\xdb\xd0\x50\x19\x69\x12\x23\x1f\x09\xda\xc6\x77\x37\x1a\x4f\x26\xf3\x78\x8f\xfd\x61\xc4\xb6\x41\x72\xe2\xa3\x2d\xf1\x32\x24\xac\x38\x10\xd4\x0e\x0a\x29\x15\x4f\x3f\x52\xf0\x02\x09\xb6\xa9\xb5\x66\xba\xab\xcb\xd1\xf9\xcc\xa1\x84\xa3\xd8\x6b\x18\x44\xf3\x42\x0b\x8c\x5a\x15\x53\x90\x35\x97\x38\x32\xc7\xc7\x41\x1a\xea\x94\x7b\xbd\x17\xee\xf3\xc7\x06\x97\xf8\xf3\x26\xfc\x07\x17\x54\x71\xa0\x1a\x7c\x35\xff\x79\xda\x21\x91\xfb\x47\xb7\x75\x61\x91\xeb\x2c\xaa\xed\xa3\x47\xb4\xfd\x9c\x6a\x5f\x3c\x4a\x1f\xc6\xa3\xd3\x3a\x3e\x0d\xbf\x45\x4c\x18\xdd\xbc\x3d\x85\x84\xd1\x8f\xe4\x9b\x78\x3a\x79\xa3\x4f\xd6\x1f\xf1\x54\xf2\x46\xa3\x0f\x62\xab\xf6\xa9\xa6\x73\xb6\x5b\x87\x3e\x87\xe8\x6f\xe8\x58\xa6\xea\x84\xf9\xbf\x1f\x3f\x43\x27\xf8\xd7\x69\x74\x59\x8c\x2c\xfb\x98\x91\x65\x51\x0b\x8b\x5a\x58\xbb\x45\x2d\x6c\xa1\x45\x2d\x6c\x8b\x16\xb5\xb0\xd5\x2d\x6a\x61\x8b\x2d\x6a\x61\x51\x0b\xdb\xa0\x45\x2d\x2c\x6a\x61\x9b\xb6\x9f\x99\x16\xd6\x5d\xbd\xf5\x18\xe1\xf5\x1e\x22\xbc\xba\xa1\x84\x1d\xd0\xbf\x4e\xb0\xae\xa3\x88\xae\x18\xcd\xf5\xb8\xa3\xb9\xf6\x2c\x3b\x27\xad\x78\x3f\xa5\xe7\x9a\xbb\xbd\xaa\xfe\x1c\x9f\x2a\x91\xb2\xa2\xb4\xbe\xfa\x56\xac\x41\xf7\x98\x6b\xd0\xb5\x76\x34\x16\xa2\xdb\xa8\x10\xdd\x2a\x98\xc5\x6a\x74\x2b\xda\xe3\x89\x31\x8b\xd5\xe8\xb6\x6d\xb1\x1a\xdd\xf2\x16\xab\xd1\xad\x69\xb1\x1a\x5d\xac\x46\x17\xeb\x11\xec\xd1\x62\x3d\x82\x25\x2d\xd6\x23\xd8\xbd\xc5\x7a\x04\x1b\xb5\x58\x8f\x20\xd6\x23\x68\xb7\xe8\x85\xda\xaf\xc5\x7a\x04\x7b\xb6\xe8\x99\x8a\xf5\x08\xf6\xea\x30\x56\xa3\xfb\xa4\x62\x06\x59\xd4\xfe\xa2\xf6\xb7\x71\x8b\xda\xdf\xca\x16\xb5\xbf\x3d\x5a\xd4\xfe\x36\x6b\x51\xfb\x5b\xdd\xa2\xf6\x17\xb5\xbf\x1d\x5a\xd4\xfe\xa2\xf6\xb7\x6b\xfb\x19\x6b\x7f\xb1\x1a\xdd\xa3\x8f\x55\x64\x8f\x31\x23\x29\x56\xa3\x8b\xf1\x8b\x3b\x6d\x77\xac\x46\xf7\x70\xfb\xd9\x57\xa3\x6b\xc5\xd2\x7d\xbc\x92\x74\xdb\x4f\x23\xd6\xa5\x8b\x75\xe9\x62\x5d\xba\x58\x97\x2e\xd6\xa5\x8b\x75\xe9\x36\x6f\x8f\xdf\x9b\xf1\xe8\xf4\x8f\x4f\xc3\x83\x11\x2b\x22\x6c\xde\x62\x45\x84\x95\x2d\x56\x44\x88\x15\x11\xa2\x37\x62\x97\x16\x2b\x22\x6c\xd9\xa2\xe7\x21\x56\x44\xd8\xaa\xc5\xba\x74\x9f\x4c\x8c\x59\xd4\xc2\xa2\x16\xd6\x6e\x51\x0b\x5b\x68\x51\x0b\xdb\xa2\x45\x2d\x6c\x75\x8b\x5a\xd8\x62\x8b\x5a\x58\xd4\xc2\x36\x68\x51\x0b\x8b\x5a\xd8\xa6\xed\x67\xa6\x85\xc5\xba\x74\x8f\x3a\xd6\x2b\xd6\xa5\x5b\xd2\x62\x5c\xd7\xe3\x8e\xeb\xda\x11\x57\x78\x69\x55\xae\x4a\x69\xaf\x41\x4f\x45\x02\x67\x49\xe2\xfe\xba\x51\xb7\xb0\x65\x2c\x51\x5b\x0d\x5d\xd3\x2d\x13\x32\x15\x09\x2a\x92\x77\x13\xc0\xb2\x72\x4e\xbe\xc5\xf7\x18\xa7\x17\x99\xc5\x37\x6b\xf4\xc2\x79\x3a\xa2\x86\x01\x36\xd8\xf5\xb6\xf0\x22\x08\x0d\x95\xca\x80\xcb\x2d\xbe\xf4\xdc\x10\xf4\x96\xa7\xb9\x05\x90\x97\x9e\x14\xd7\x9d\xb1\x21\x64\x4a\x8e\x7d\x3c\x8f\x3f\x01\x03\x76\x5e\xbf\x90\x70\x89\x87\xa7\xd4\x1a\xa4\xcd\x66\x08\x07\x2c\x70\x85\x5a\x43\xae\xa6\x90\x22\xc9\xc6\x30\x22\x92\x23\xb9\x65\x19\x70\x37\x96\x84\x7a\x30\x77\x78\x38\xbb\xc2\xfe\xa9\xd3\x21\xf8\xd0\xa6\x9d\x80\xb8\x3d\x6d\xdc\x89\x1a\xce\x59\x36\xbc\xd8\x84\x7c\x29\x41\xfd\xa8\xb1\x42\x3c\x9a\x33\x55\xb2\x3b\x4e\x92\x92\x2e\x25\x1e\x66\x5c\xba\x03\xed\x96\x83\xef\x21\x93\xec\x6e\x7e\xe8\x23\x55\xdb\xf2\xb3\x7d\xcc\x01\x5c\x8f\x77\x62\x52\xad\xad\x39\x3c\xd3\xe3\x92\x44\x42\x8f\xca\x20\xad\x9e\x61\xbc\x1d\xc9\x14\x0d\x4c\xcc\xf9\x18\x0e\x0f\x0d\x3b\x7f\x75\xe1\xc8\x5f\x69\x1c\xb5\xf6\x55\xf6\x3c\x39\x2c\xb4\x9a\x8a\xd4\x21\xf7\x77\x5c\x0b\x3e\xcc\x9c\xdc\x39\x02\x0d\xd2\x89\x05\x9f\x1f\x7d\x77\xf6\xf6\xef\xaf\xcf\x5e\xbd\x38\x46\x09\x14\xee\x0b\x2e\xdd\xa9\x28\x4d\x1d\x28\xea\x87\x73\x03\x81\x9c\x0a\xad\xa4\x9b\x1f\xea\x6a\x9c\x4d\x43\xaf\x49\x75\x18\x34\x18\x95\x4d\x21\x25\x39\xb9\x1a\x2d\x70\x1d\x21\x8b\xd2\x06\xdd\x11\xc3\x17\xdd\x01\x92\xc9\x84\xcb\xb1\x9b\xe7\x85\x2a\x5d\x7f\x9f\x7f\x8e\x33\xd2\x90\x96\x09\x49\x4e\x3c\x60\xed\xe7\xbd\xc0\x29\x1c\xad\x37\x54\x12\xd1\x24\xbc\x08\x73\x6e\x2e\xcb\xcc\xa4\xe5\xf7\xa7\x14\xbf\x77\xf0\x79\xe3\xd1\x41\x28\x27\xa9\xdc\x10\xc4\x6f\x68\x56\x19\x56\x32\xcc\xd8\x41\xf3\xed\x01\x7b\xe1\xc6\x80\xb4\x09\x40\x0a\xbf\x84\x29\x68\xd4\x3c\x3d\xf8\x7a\x4c\xc3\x98\xeb\x34\x03\x83\x81\x87\x81\x36\x93\x76\xe0\x01\x06\x95\x5e\x2b\x95\x5d\x46\x4c\xd8\x2b\x85\x41\x88\x23\x75\xca\x26\xd6\x16\xe6\xf4\xe4\xe4\xb6\x1c\x82\x96\x60\xc1\x0c\x84\x3a\x49\x55\x62\x4e\x2c\x37\xb7\xe6\x44\x48\x77\xb8\xfa\x29\xb7\xbc\xdf\x38\xd5\x27\xc4\xb9\xfb\x89\xca\x73\x2e\xd3\x3e\xf7\xd8\xd5\xaf\xb6\xf5\xe4\x17\x9e\xa7\xf6\x79\xf5\x96\x90\x7d\xde\x37\x13\xc8\xb2\xc3\x1d\xf0\x79\x3f\x99\x6f\x0f\x59\x6f\x2f\x19\xcf\xaf\x7d\xff\x03\xfc\xa2\x3a\xaf\x04\x83\x01\x7b\xad\xac\x8f\x8f\xf5\xa1\xd8\x48\x47\x11\xbe\x2b\x8f\xf4\x8b\xd7\x37\x6f\xff\x76\xf5\xe6\xf2\xf5\x4d\x3c\xd9\xf1\x64\xc7\x93\xbd\xc7\xc9\x06\x39\xdd\xfb\x54\x07\x99\xb3\x71\x4c\xaa\xfd\x46\x4e\x6d\xc0\x86\x63\x50\x6d\xc0\xde\x12\x22\xb5\x8f\x06\xf5\x16\x04\x5e\xc8\xe9\x77\xbc\x6d\x61\x97\x4b\xc1\xc1\xfc\x0b\x24\x28\x57\x32\xf8\x3e\xf1\xf1\x7b\x58\xb3\xf6\x75\x5f\xed\x24\x45\x52\xdb\xdf\xb5\xe4\x86\xde\xdd\xd0\xd0\xda\xbe\xd7\x3c\xaf\x2b\x54\x2f\xd9\xb5\x01\x7b\x15\xd4\x1e\x76\xfe\xf7\xcb\x8b\x17\xaf\x6f\x2e\xbf\xba\x7c\xf1\x76\x77\x3d\xba\x03\x8b\x0b\xda\x14\x3a\x02\xc0\xe1\x8e\x5c\xb2\xd0\x30\x15\xaa\x34\xd9\xac\xb2\x82\x2c\x27\x02\xf3\xa7\xdf\xfb\x7d\x67\x95\x3e\xbe\xf4\xb3\xc8\x6c\xbb\x65\xb6\x17\x30\xe2\x65\x46\xda\xd3\xc1\xc1\x60\x17\x2e\x47\xad\x2b\xf4\xfd\x4a\xab\x3d\x2a\x30\xb7\x50\xf8\x9a\x6a\xb7\x8f\x94\x5e\x79\x8c\x0f\x7d\xf4\x41\x8b\xf5\x78\xe1\x91\x2c\x74\x5e\x7a\x24\x27\xd9\x9e\xd0\xd9\xd3\xcb\xd0\x8d\xef\x3d\x51\x72\x24\xc6\xaf\x78\xf1\x0d\xcc\xde\xc2\x68\x3f\x33\x71\x1b\xde\x68\x7d\xf4\xae\x64\xb4\x55\x3a\x76\x46\x83\xed\xe7\xa6\xe9\xcc\x49\xd3\x55\x74\xc6\xfe\x91\x19\xdd\x05\x52\x74\x12\x44\xb1\x50\x0f\x9f\xec\xd0\xde\xa2\xdc\x55\x8c\x4d\x27\x9e\xfb\xfd\xb8\x7c\x68\x6d\x66\xd7\x64\xf7\x9e\xce\xda\x4d\xd5\x8e\x44\xc9\x04\x0a\x6b\x4e\xd4\xd4\x71\x2e\xb8\x3b\xb9\x53\xfa\xd6\xe9\x11\x4e\x77\xed\x13\xd6\x9a\x13\xf4\x19\x9c\xfc\x82\xdc\x60\x37\x6f\x2e\xde\x9c\xb2\xb3\x34\xf5\x97\x9b\x94\x06\x46\x65\xe6\xaf\x13\x18\x30\x5e\x88\xef\x40\x1b\xa1\x64\x8f\xdd\x0a\x99\xf6\x58\x29\xd2\x2f\x77\x27\xce\xa1\x75\xb8\x0b\xaa\x20\x57\x67\xc7\x3b\x71\x8d\x3e\x96\x59\x8b\x77\x55\x44\xc4\x71\x2d\x61\x0d\xe2\x66\xb0\x3a\x7b\x21\xa3\x23\xd0\x6c\x6f\xa2\x9f\x6f\xb8\x85\xdd\xd2\xd5\xc3\x9a\xb0\x92\x8b\xd3\x23\x6a\xa1\xd2\x53\x66\xca\xa2\x50\xda\x1a\x96\x83\xe5\x4e\xe9\x1d\x38\x0c\xeb\xb5\xff\x44\x5f\x55\x8f\xfd\x58\xfd\x88\x0e\x27\xf3\xfd\xe1\xe1\x1f\xbf\x79\xf1\xb7\x3f\x1f\x1e\xfe\xf0\x63\xf3\x29\xb2\x42\x8a\x02\x6a\xbf\x62\x0a\x48\x06\x52\xa5\xf0\x1a\xc7\xc0\x3f\x4d\xcb\xcd\xe2\x1f\x58\x6e\x4b\x33\x98\x28\x63\x2f\xaf\xaa\x3f\x0b\x95\xce\xff\x65\xf6\x90\x38\xd8\xe3\x64\x0c\xb8\x45\x57\xdc\x4e\x1e\x09\x7b\xa8\x69\x49\xc7\x47\xd5\xf7\xda\xbc\x44\x27\xe7\xf8\xcf\xaf\x02\x08\x9c\xf4\x74\xa7\x85\xb5\xe8\x7a\xf3\xa9\xe0\x6a\xd4\x73\xa7\xb6\x16\x3b\xa7\xcf\xf7\xae\x8f\xd2\x29\x69\xab\x76\xb0\x63\x80\x21\x44\x3c\xb4\xe8\x20\x57\x0c\x76\xd1\xc5\x7c\x76\x75\xc9\xa6\x04\xe1\x47\x03\x9c\x90\xde\xfb\xd5\x7b\xa5\x71\xd5\xa5\x4b\x1e\x54\x95\x86\x78\x4a\x41\x41\x55\x92\x31\xcb\x44\x2e\x7c\xac\xa1\xbf\xa0\xc9\xb0\x23\xfa\x71\x90\x14\x65\xcf\xbf\x30\xc8\x21\x57\x7a\x56\xfd\x09\xc5\x04\x72\xa7\x69\xf5\x8d\x55\x9a\x8f\xa1\x57\x7d\x4e\x9f\x55\x7f\xd1\x87\xad\x01\x16\xbf\x26\x55\xb8\x76\x95\x7a\x8a\x0c\xe9\xa7\x47\xdb\x02\xe8\x1f\x09\x69\xab\x30\xe3\xf5\x7b\x10\x09\x2b\x4b\x1c\x09\x9c\x15\x14\x51\x9f\x9c\xaa\xac\xcc\xc1\xf4\x2a\x31\x88\xac\x01\x72\xea\x34\x4b\xf3\xa8\x04\xb5\x54\x4c\x85\xe9\x22\x8c\x78\x89\x9c\x26\x7c\x44\xbe\x2a\x6d\x51\x5a\x5f\x6f\xa6\x71\xb1\x9b\x32\x68\xb7\xa8\x8a\x02\xb4\xc8\xfe\xf3\x83\xfd\xa3\xd1\xb9\xb5\xa0\xe5\x29\xfb\xdf\xa3\x77\xbf\xfc\xa9\x7f\xfc\xe5\xd1\xd1\xf7\xcf\xfa\x7f\xf8\xe1\x97\x47\xef\x06\xf8\x8f\x2f\x8e\xbf\x3c\xfe\x29\xfc\xf1\xcb\xe3\xe3\xa3\xa3\xef\xbf\x79\xf5\xf5\xcd\xd5\x8b\x1f\xc4\xf1\x4f\xdf\xcb\x32\xbf\xa5\xbf\x7e\x3a\xfa\x1e\x5e\xfc\xb0\x61\x27\xc7\xc7\x5f\x7e\xbe\xf7\xd4\xb9\x9c\xbd\xd9\x93\x80\x52\xeb\x77\x56\x2e\x68\xbe\xc7\x8e\xe2\xac\xef\xfb\xb5\xd2\xd4\x17\xd2\xf6\x95\xee\x53\xd7\xa7\xcc\xea\x72\x3f\x62\x52\x33\xa5\xae\xcf\x7f\xb8\xbd\xeb\xb4\x66\x48\x15\xbb\x7e\x34\x07\xdc\x40\xa2\xc1\x7e\x08\x4b\x0e\x8d\x14\xe4\x94\xb9\x98\xc7\x4f\x8d\xcf\xfd\x1c\x8c\x3b\x55\xc8\x20\xee\x6b\x2d\x89\x8e\xb4\xca\x07\xac\xe1\xde\x98\x62\xc2\x87\x7f\xef\x16\xf6\xb0\x82\x86\x16\x8d\x41\xd1\x18\xb4\xa2\x3d\x68\x0c\xba\x26\x3c\x7c\xb4\x96\x20\x90\xd3\x5d\x5d\x18\x4b\x3d\xe8\x41\xd7\xb1\x8a\x15\xaa\x28\x33\x6e\x57\x78\xc6\x96\xb8\xd3\xfd\x51\xaf\xe3\x91\xeb\x60\x1a\x62\x68\xf9\x72\x1f\x26\x3b\xcb\x32\x26\x24\x1d\x7c\xec\x20\x38\xcc\x34\x90\x6a\xc3\x38\xf9\xb3\xa7\x6e\x0a\x77\xbe\xac\x5c\x33\x2e\xc7\x30\x63\xb9\xb6\x18\x7b\x8c\x65\xe7\x88\x95\x78\xef\x93\x90\x75\xf1\xb9\x4a\x38\xac\x72\x41\x96\xde\x8c\x99\x71\x63\xc3\xb4\x71\x36\x96\xdf\xa2\xb7\x31\x81\x14\x64\x02\x98\x98\x56\x42\xbd\xd6\xa1\xd3\xdb\xd8\x0b\x39\xa5\x3e\x38\x4b\x4b\x0a\x06\x21\xf2\xb7\xbc\x8f\x4f\x2b\x00\xc1\x21\xe2\x75\xb8\xc0\xb8\x8a\x43\x40\xaa\x5f\x69\xd8\x55\x7e\x5f\x65\x65\x35\x1f\x27\xf2\x60\x7f\x9e\x59\x79\xb6\xf6\x12\x86\x16\x98\x65\x6d\x7e\x6e\x33\xc9\x4f\xc1\x19\xb8\x3f\xfb\xfc\xd9\xb1\xce\x8e\xd8\x66\x37\x2c\x73\x0b\xdf\x49\x97\x6c\xb2\x0b\x67\x49\xa1\x61\x24\xee\x3b\x3a\xa7\x67\xb2\xb6\xc4\x88\x14\xa4\x15\x23\x41\x77\xde\x17\x1a\x0a\x90\x69\x55\xb8\x14\x93\xc3\x65\x1b\x36\x8f\x32\x98\x87\x04\xee\x6e\x49\xd9\xf5\x32\x61\x3f\xd2\x31\x16\xe9\xd8\xce\xed\x03\xd1\x31\x8f\xb9\x8f\x87\x88\x61\xe4\xf9\xfe\xd1\xef\xe7\xed\x50\x76\x44\xe4\xad\x11\xad\xce\xec\x3a\xc1\x5e\x0c\x65\x49\x56\x69\xd8\x15\x69\xb4\x8a\x82\xd7\xd8\x44\x8c\x1d\x64\x33\x98\x42\xe6\xe5\x26\x96\x73\xc9\xc7\x94\xdf\x6d\x55\x30\xd5\x3a\x45\xcb\xe1\xb1\x16\xe9\x42\xdc\x3d\xca\xf1\x0e\xb7\x33\xc5\x53\x7c\xa8\x55\x96\x81\x36\x2c\x13\xb7\xc0\x2e\xa0\xc8\xd4\xcc\xa7\x6b\xcb\x94\x5d\x5b\x6e\x1d\x56\x5f\x83\xdd\xcd\xed\xbb\x17\xc6\xe2\x8c\xaf\xca\x2c\xbb\x52\x99\x48\x76\x32\xaa\xb4\x77\xee\x12\xf7\xab\x28\xb3\x8c\x15\xd8\xe5\x80\xbd\x91\x48\x34\xce\xb2\x3b\x3e\x33\x3d\xf6\x1a\xa6\xa0\x7b\xec\x72\xf4\x5a\xd9\x2b\x92\xbe\xdb\x01\x77\xf4\x22\x13\x23\x76\x8a\xd5\x6d\x2c\xb3\x7c\x8c\xba\x53\x70\x03\xf6\x1c\xfc\x9b\x1d\x10\x7d\xb8\x13\x66\xa9\xb2\xb2\x37\xe2\xfc\x02\x7b\x72\xb4\x8a\xfe\xfe\xe0\xdb\x94\x89\x11\x24\xb3\x24\xdb\xff\x68\x9d\x25\x18\xc0\x50\x67\x9c\x37\xf0\xdb\x57\x53\xf7\x39\x9e\xa8\x05\x0a\xc9\xa8\xcc\x39\xd5\x6f\xaf\x51\xbd\x9a\x11\x69\xbb\xa6\x53\x25\x71\x67\xe6\xb9\x2f\xdb\x2c\x94\xb1\xd7\x4e\x43\xef\xa4\x18\xfa\xe1\x55\xe8\x8e\x61\xc9\xe7\x2c\x83\x94\x89\x3c\x87\xd4\x69\xf1\xd9\x8c\xf1\x91\xc5\x5c\xdb\x96\x85\x20\xd1\x40\x58\xeb\xab\x98\x4c\xb8\x4c\x33\xd0\x6c\xc4\x45\xe6\xed\x01\xad\xf7\x2d\xe8\x5c\x48\x34\x0b\x90\x47\x16\x4d\x0c\xee\xaf\x24\x51\x3a\x94\xa7\x17\xd6\x84\x47\xf5\xc1\x44\x3e\xd2\x40\x80\x79\xd7\x32\x1b\x66\x2a\xb9\x35\xac\x94\x56\x64\x34\x19\xa5\x6e\x59\xa2\xf2\x22\xc3\xa3\xb3\xc7\xc9\xaa\xfe\xd9\xaf\x50\xa9\xef\x7a\x37\x27\xbf\xa8\x1f\xe1\x0f\xbb\x32\xf4\x0e\x04\xb1\x2e\xc4\x30\xb8\x87\xa4\xb3\x3c\xff\x17\xf7\x90\x34\x0a\x4b\xe0\x7d\x0c\x78\xa2\x31\xcf\x93\xdf\xc2\x27\x54\xc9\x6e\x8f\x5c\xba\x66\x6b\xc1\xef\x9c\xfa\x0c\x85\xb0\xfc\x10\x2c\x13\x12\xe9\x9b\xcf\xaf\x63\x42\x1a\xc7\xd9\x5b\x87\x81\x8e\x9e\x17\x5a\x59\x2a\x34\x56\x41\x98\x55\x81\xd4\xa1\x2f\x2c\x30\xa0\x94\x65\x47\x87\x27\x87\xc7\x0b\xf6\xc7\x43\x27\x81\x64\x40\xb4\x36\x24\xee\x55\x93\x32\x22\x2f\xb2\x19\xce\xe3\x30\xed\x31\x61\x43\xa4\xb5\x2e\x65\x98\x95\x4f\xfa\xeb\x31\xa3\x98\xd5\x3c\x54\x57\xa1\x5f\xdd\x4b\x56\x97\x9e\xca\x1f\x1d\xfe\x74\xd8\x63\x60\x93\x63\x76\xa7\xe4\xa1\xc5\xe9\x0f\xd8\x8d\x72\xa2\x74\xdd\xd1\x4c\x95\x4c\x02\x05\xf6\xc3\x7d\x91\x89\x44\xd8\x6c\x86\x14\x8b\xa9\xd2\x52\x0e\x31\xb7\x21\xd9\xf0\xc5\xbd\xb0\x3e\x5e\xcd\x91\x8c\x67\x08\x4d\xa2\x5a\x8c\x3b\x31\x67\x0a\x27\x13\xe0\x99\x9d\x50\x90\x88\x54\xb2\xff\x2f\xd0\x0a\x73\x10\xa5\x7f\xf2\xc9\x55\xfd\xeb\x44\x73\x70\x44\xf4\x6b\xe8\xee\x12\x9f\xbf\xdc\xdc\x5c\x7d\x0d\x76\x8e\x64\xb8\x51\x42\xe8\x0e\x5a\x03\x40\x8f\x94\xce\x1f\x01\xed\xe8\xc6\x59\xd9\x67\x85\xd2\x8f\x81\x84\x4d\x94\xd9\x6b\x2f\xd9\xc2\x7e\x2a\x63\x51\x1b\xf2\xd2\x98\x84\xc4\xed\x60\x3b\x86\x24\xdc\x73\x73\x79\x35\x60\x7f\x53\xa5\x5b\xcd\x90\x0f\xb3\x59\x55\x89\xc1\x80\x65\x07\xae\xab\x03\x47\x9e\x1c\x36\xfc\x05\x78\xea\x54\x14\x47\x3d\x80\x3f\x8e\xfb\xac\x98\x3f\x0f\x7e\x6e\xdd\xf2\x81\xd2\x58\x95\xb3\x89\x5f\x76\x3b\xf5\xd2\x9f\x8c\x01\x9e\x9e\x90\xd7\xa4\xa1\x20\x0a\xe7\xbf\xf9\xe4\xe8\xd7\x02\xdd\x20\xb8\xfb\xdf\x87\x58\xc6\x2a\x69\x82\xcd\x5f\xe8\x44\x89\x41\x92\x80\xe5\x50\x0d\x76\x73\x95\x34\xdb\x23\xae\x3d\xba\x73\x22\xe7\x7c\x47\xe8\xd4\xdb\x3f\xd6\xab\xd3\xca\xa3\xdd\xc4\x0d\xb0\x65\x46\x56\x8f\x33\x64\x7d\x21\x7b\x0e\x9a\x63\x82\x0f\x35\xe1\x52\x49\x91\xf0\x4c\xfc\x0b\x52\x56\x16\x4a\xfa\xf8\x39\x94\x73\x12\x6e\xa0\x8f\x4e\x5d\x69\x7d\xcd\xb4\x3a\x5b\xd1\x1d\x47\xab\x14\x0a\x1f\xe8\xc6\x73\xf4\x91\xc6\x7b\xbc\x05\x36\x3f\x04\x98\xbb\x41\x31\xd6\x25\x04\x8a\x0e\x02\xc8\x17\xc3\xc7\xad\x72\xda\x2e\x26\x78\x12\x09\x47\x62\x64\x40\x4f\xf7\x47\x81\xee\x96\xae\x76\xb7\x2b\x84\xb6\x24\x1b\x5b\x33\x59\xe6\x43\xd0\x75\xfe\x8b\xb6\x8b\x00\x69\xc4\x3f\xbc\xa6\xd7\x83\xd1\xb8\x7d\x49\xa3\xfb\xf2\x77\xbf\xfd\xed\xaf\x7f\x3b\xa0\xee\xab\x58\x08\xc9\x2e\xcf\x5e\x9f\xfd\xfd\xfa\xbb\x73\x4c\xc1\xdd\x17\xaa\x1d\x05\x7a\x76\x1d\xe6\xd9\x69\x90\xe7\x7b\x0d\xf1\xc4\xc4\x92\xbd\xa9\x48\xdb\xc3\x80\x5d\x3a\x0c\x70\xda\xa1\xd3\x6b\xbd\x84\xd9\x28\x89\xe6\x24\xda\xb6\xb9\xd6\x1d\xb5\x47\x71\xc6\x6c\x52\x5c\xab\xe4\xb6\x43\xed\xe9\x02\x0a\x0d\x09\x59\xe3\x6e\xce\xaf\xa8\x77\xa7\xc5\xbe\x7e\x73\x53\x27\x34\x60\xd4\x0f\x7b\x19\xac\x58\x7f\xf1\xf6\x3a\xa7\xf9\xde\x42\x61\x2b\x03\xc1\x90\x27\xb7\x77\x5c\xa7\x68\x3f\xe3\x56\x0c\x45\x26\xa8\xc4\x70\xb8\x7a\x52\x2a\x0a\x2b\xa4\x52\x6a\x6a\x34\x5f\xc0\xb3\x36\xba\xa2\x61\x8c\x58\xe0\x88\x8b\x0c\xed\xb4\xa5\xb4\x22\x07\x1f\x77\x94\x14\x95\xe1\xb0\x69\x39\x8f\x2a\x5e\x68\x8f\x56\xc5\x3b\x7c\x13\x7c\x87\x5b\x6b\x7b\xfb\x46\x3f\x3e\x62\x56\xe7\x59\x1c\xa5\x9d\x44\x56\xf7\xb3\x60\x75\x85\x86\x6b\xab\x8a\x8e\x7c\x31\xd4\xd9\x0a\x4f\xcc\x10\x46\xca\x11\xe1\x95\xae\x95\x70\x13\xb1\xc4\x14\xc4\x60\x3b\x53\x2d\xf7\x09\xc5\x7d\x9a\x32\x99\x04\x33\xa8\x04\x63\x4e\xd0\xe9\x52\x16\xa4\x1b\x23\xb9\x2e\x35\xf4\xdc\xea\x20\xc7\xd9\xf5\xea\x5c\x0a\x37\x3c\x48\xfa\x11\x6c\x42\xf6\xe1\x06\x21\xc7\xf2\xa3\x7e\xfa\xf3\xce\x9a\x44\x73\x33\x01\x2c\x62\x02\xf7\x22\xdc\xb9\x72\xa5\xd2\xc3\xc3\x7a\x29\x8e\xb1\x8c\x35\x4f\x80\x15\xa0\x85\x72\xcc\xa8\x94\x36\x55\x77\x92\x0d\x61\x2c\xa4\x09\xa0\x70\x7d\x07\x98\xa1\xd7\x47\x98\xaa\xfc\xdc\x80\xbd\x6d\x95\x54\xf1\xc9\x4e\x89\xaa\x8f\xa6\x9f\xf3\xbc\xbf\x0a\x39\x56\xe3\x62\xe6\x0a\xc2\x21\x08\xd7\x6e\x30\xe5\xa3\x52\xe2\xc8\x29\x64\x7c\x46\x31\xad\x23\x21\x51\x73\xd4\xe6\xb8\x03\xbf\x96\x03\x61\xfd\x6c\xe5\x3c\xf0\x42\x00\x9e\x4c\xf6\x73\x31\x47\x47\xd8\x86\x2d\x3a\xc2\xf6\xe9\x24\x3a\xc2\xa2\x23\xec\x81\x16\x1d\x61\xd1\x11\x36\xd7\x1e\xad\x96\x14\x1d\x61\x3b\xb7\xe8\x08\x5b\xdf\xa2\x23\x6c\x83\x16\x1d\x61\x1b\xb6\xe8\x08\x5b\xdd\xa2\x23\x6c\xbf\xc9\x44\x47\x58\x74\x84\xf9\xf6\xf3\xb3\x0e\x86\x16\x1d\x61\x0b\x9d\x44\x47\x58\x74\x84\x6d\xdc\x1e\xad\x8a\x17\x1d\x61\xd4\xa2\x23\xac\xdd\x7e\x5e\xac\x2e\xb8\x91\xae\x9c\x42\xb9\x7f\x7e\xde\x15\xba\x2e\x44\xe2\xbd\x51\xcd\x0b\xf0\xaa\xa1\x1a\x77\xde\x35\x4a\x9c\x84\xb4\x22\xef\x77\xaa\xbd\x59\x4b\x73\xbf\xb6\x75\x88\x84\x84\x49\x73\x52\x28\xfa\xbf\xda\x1d\xd2\xf0\x83\x90\x5a\xbd\x7b\xfe\xdd\x47\xcb\x2c\xdb\xc7\xf9\xf1\x61\x1c\x1f\x8f\xc4\x4b\xd4\x81\xb3\x23\x3a\x3a\x3e\x39\x47\xc7\xa7\x73\x03\xb0\xf7\xff\xdf\x4c\x34\x98\x89\xca\x76\x46\xf4\x16\x92\xbf\x12\x52\xe4\x65\xee\x70\xce\x38\x7c\x16\xd3\x2a\xd0\xc0\x54\xe8\x4a\x14\x9b\x6c\x95\xee\x45\x91\x02\x16\x6e\xe5\x22\x73\xdb\x88\xb9\xa8\x13\x3e\x75\xb8\x6e\xca\x24\x01\xc0\x6b\xe1\x9a\x1a\xce\xaf\x07\xd5\x48\xd5\x35\x20\xcf\xf7\xa3\x37\xfb\x31\x71\x2a\xad\x8a\xbd\xfc\xfa\x57\x3b\xf5\x31\xd6\x45\x37\x74\xf9\xeb\xb7\x57\xe7\xcd\x2b\xbf\x65\x20\xcb\x42\x4e\x55\x86\x50\xe5\xf4\x92\x13\xd6\x3e\x22\x91\xde\x5f\xed\xd8\x4b\xe5\xe8\x82\x47\xec\x2b\x55\xb7\xed\x66\x4e\x76\x6e\x5b\x8e\xc6\xb8\x97\x54\xc1\x7f\x63\xd9\x79\x6f\xea\xb6\xbf\x3c\xbb\xff\x71\x60\x58\x62\x07\x17\xde\x19\x80\x0f\xfc\x95\xd3\x81\x05\x37\x15\x97\x70\xab\x95\x55\xac\xc8\x78\x7d\x2f\x15\xee\xc0\x5f\x90\x6f\x9c\x4f\x20\xb9\x7d\xeb\x7d\xb4\x47\x06\xa0\x92\x27\xc7\xc2\x4e\xca\xe1\x20\x51\xf9\x89\x3b\xc6\xf4\x7f\xc3\x4c\x0d\x4f\x72\x6e\x2c\x68\x27\x62\x7a\xb6\xd4\x4f\x5c\x2f\x42\x8e\x07\x79\x7a\x3c\x60\xef\x24\x65\xd7\xd7\xf7\x60\x36\x6a\x4b\xb8\xf1\x43\x9d\x8f\x21\x38\x8a\xa8\x74\xf3\xfa\xf2\xe1\x0c\xa7\x37\xd8\xa7\x50\xf3\xde\x6c\x64\x4f\xff\xf8\x87\xf7\x8d\x47\xca\xc5\x3a\x30\x92\x3c\x35\x1f\x78\x67\xb1\x20\x1d\xf8\xbe\x1f\x91\xdf\xfb\xd1\x88\xb3\x8f\xc5\xd7\xfd\x08\xab\x5d\x77\xe0\xdf\xee\xc2\xb7\xdd\x9d\x5f\xfb\x3d\x14\x85\x7e\xca\xfe\xec\x0e\x8d\x7e\x1d\xf9\xb1\x3f\x84\x0f\xbb\x93\x55\xef\xeb\xbb\xfe\x70\x7e\xeb\x6e\x96\xdb\xa5\xba\xf1\x54\x7d\xd5\x1d\x18\xef\xbb\x34\xdc\x77\x66\xb4\x7f\x6f\xbe\xe9\xfd\xfd\xd2\x8f\xc0\x27\xbd\x37\x90\x85\x14\x56\xf0\xec\x02\x32\x3e\xbb\x86\x44\xc9\x74\x67\x3e\x36\x57\x8b\xb4\x3a\x3f\x86\xba\xf5\x16\xac\x76\xa2\xc7\x84\xfb\x92\xeb\x4e\x6f\xa3\xc4\x96\xe0\xe5\xf0\x62\x0b\xfa\x9b\x69\x96\x8f\xd2\x6f\xc1\x1e\x8d\xa9\x8c\xb2\x5e\xba\xdc\xc4\xbf\xa8\x3b\xa6\x46\x16\x24\x3b\x12\x32\xec\xe3\x71\x43\xd9\xac\xed\x96\x15\x5a\xbb\xa7\xcf\x9f\x85\x97\x3f\x3d\x83\x24\x9a\x5e\x8d\x79\xff\xf6\x61\x3f\xd0\xc3\x06\x62\xff\xe2\xa8\xcc\xda\x46\x62\x32\x1c\xb7\xe9\xcd\xf3\xba\x68\xf4\x73\xec\xb7\x3a\x6d\x5c\xa6\xcc\x67\xc2\x7d\x7a\x9b\xb6\x77\xc4\x4d\x5b\xf4\xab\x22\x6c\x1e\xb2\x27\xdf\x9c\x5f\x45\x73\xf2\xe3\x32\xca\x7c\xa4\xa8\x95\x47\x28\xe8\x3e\xd1\x48\x95\x28\xe8\x6e\xd1\x1a\xb9\xb1\x5f\x6b\x9e\xc0\x55\xe7\x32\x42\x38\x4e\x2c\x2d\x35\xf7\x04\xb0\x12\xf9\xc2\xe1\x91\x00\x29\x9d\xa6\x2a\x9f\x18\x33\x75\x47\x65\x96\xcd\xc8\xe6\xd0\xca\xbe\x26\x2f\xfc\x7c\x32\x2f\x1a\xfe\x97\x8c\x52\x0b\x96\x85\x56\x9e\x67\xea\x52\x4a\x47\x83\xeb\x9b\xdf\x50\x90\xc4\x62\xd4\xbc\x95\x32\x6c\xc4\xd8\x4d\xdf\xf1\x3f\xcc\x26\xae\x43\x13\x5b\x1d\xba\xaf\x47\x4a\x27\x62\x98\xcd\xd8\x84\x67\xd5\x35\x3f\x9c\xdd\x8a\x2c\xf3\xdd\x0c\xd8\x35\x58\x72\x5c\x10\xef\xcc\x94\x1c\xe3\xe4\xb8\x0c\xd7\x4b\x42\xe2\xbe\x4d\x32\xe0\xb2\x2c\x68\x3c\xc7\x89\x67\xaa\xd4\x61\xbc\x41\xe5\xfe\xa8\x38\xb0\x14\x59\xaf\x71\x89\xdd\xda\x8d\xad\x4d\x34\xc6\x09\x00\x6f\x42\xf1\xed\x5e\xb3\xcf\x50\x1f\xdd\x34\xae\x30\x2a\xb4\x9a\x8a\x94\x7c\x28\x01\x6c\x78\x5d\x36\x5d\x53\x54\x9d\x67\xa9\x64\x5f\xc2\x98\xa3\xa0\xe2\x4f\x11\xed\x19\xf5\x43\xb1\x05\x32\xc5\x8b\x8b\x9c\x84\xaf\x8a\x56\x3a\xff\x54\xd0\x95\xcb\x0d\xc8\xb1\x23\xa9\x98\xc2\x48\xd5\x52\x0a\x4b\xd7\xf8\x4f\x4a\xcb\x52\x75\x27\x8f\xbd\xcd\x4a\x18\xc6\xd9\x10\x2c\x6f\xc4\x9a\x7a\x06\x67\x18\x48\x3e\xcc\xdc\x9e\x63\x28\xd6\xcd\x52\x00\xb1\x11\x70\x5b\x6a\x60\x63\x6e\x61\xa9\x9c\x43\xeb\x5d\x0f\x5e\x61\xbc\x81\x75\xc4\x4a\x69\x60\x4f\xf6\xde\x99\x70\xf4\xbb\xdf\xec\x46\x23\x44\x0e\xaa\xb4\x1f\x44\xfb\xbb\x9b\x88\x64\xd2\x14\x66\x45\x0e\x86\xa9\x72\x4e\x2d\x7e\xee\x3f\x5b\xbe\x43\x51\x05\x5c\xd6\x76\x35\x1f\x2f\xb1\x7e\xcd\x97\x63\xa8\xef\xf7\xc6\x08\xf2\x8b\xd7\xd7\x7f\x7f\x79\xf6\x3f\x2f\x5e\x0e\xd8\x0b\x9e\x4c\x9a\x35\x39\x24\xe3\x48\x34\x90\x50\x4c\xf8\x14\x18\x67\xa5\x14\xff\x2c\xbd\x5b\xf9\xa8\xfa\xf6\xb8\xd3\x8a\xf4\x3b\x72\x5f\x47\x6d\x76\xc2\xf8\xa5\x97\xde\x61\x6f\x3e\x62\x4b\x19\xc0\x6b\x6a\x16\xc4\xa7\xca\x97\x3d\x23\x15\x01\x05\x2e\x0c\xac\xbf\x78\xf3\xe2\x1a\x03\xf6\x0b\x4d\x95\x4a\x30\xc2\x0b\x9f\x63\x4f\x43\x70\x5f\xf8\xfb\x89\x07\xec\x4c\xce\xe8\x21\x9d\x29\x61\x58\x26\x8c\x05\xe4\x7a\x5e\x6c\x0b\x5e\xf2\x83\x67\x03\xfc\xdf\x01\xe3\x69\xaa\x9d\x5c\x57\x05\xae\x25\x0b\x91\xa4\x24\xf9\x89\x61\xd6\x58\x80\x04\x4b\x71\x6a\xaf\x54\xea\x67\x8e\x9c\x04\x3d\x64\xc4\x06\x8d\xd5\xdc\xc2\x58\x24\x2c\x07\x3d\x06\x56\x70\x9b\x4c\x58\xce\x67\x2c\x51\x5a\x97\x05\xdd\x66\x90\x72\xcb\x07\xec\x2b\xa5\x59\x1e\x0e\xb1\xc3\x79\xc7\x87\xaf\x97\x47\x0e\xd4\x27\xbb\xf9\x4f\x61\x4c\x09\xe6\xe4\xf9\xb3\xdf\xff\xea\xb7\xbf\xfd\xa4\x2e\xc0\xab\x42\x7b\x31\xee\xa5\x71\x01\x1e\x0f\xbb\x40\xbb\x4e\x17\x22\x0a\x39\xce\x9a\xf8\xb5\x1b\x03\xd8\x57\xcb\xdc\x57\xc7\xec\xd7\x2b\xb8\xda\x55\xd5\xec\xe4\x22\xbe\x7a\x0e\x1d\x5d\x5f\x55\xf3\xc1\xa0\x58\x79\xda\xa0\x9a\x37\x12\x5f\x5e\x85\x83\xe9\xe5\x9c\x7c\xee\x1a\xdb\xa2\x8e\x81\xea\xb1\x67\xec\x8f\xec\x9e\xfd\x11\x15\xad\xdf\xed\x7b\xd9\xd7\xbe\x2a\x50\x17\x21\x4d\x4e\xbf\xbf\xbc\xea\x08\xe2\x7f\x75\x44\xd3\xf5\xe8\xa0\x6a\x15\x1b\x0a\x2f\xd8\xc3\xbd\x05\xed\x04\x4d\xbf\x13\x1f\xf5\x9a\x34\x37\xc1\x0f\x88\x66\xe4\x78\xb8\x1c\xb5\xc3\xa8\xb6\x43\x34\xf7\xf9\x5f\x94\xb1\xaf\x3d\x15\x6a\x5f\xf8\x53\xf7\x96\x23\xe1\x6f\x91\x31\xc7\x37\x8c\xad\x0f\x98\x61\xa9\xc2\xa8\x2e\x0a\x71\x9e\x88\x3d\x82\x35\x1e\x0f\x1a\xef\xe7\xbf\x6f\xed\xe7\xba\x9d\x9a\x33\xa5\xa0\x0e\xe4\x45\xac\x46\x8d\xae\x42\xa5\x5e\x3a\x73\xd3\x4a\x1b\x3c\x63\x8d\x78\xe6\xad\x36\x95\xbd\x19\x71\xc9\x9d\xa7\x84\x4b\x4a\x32\x19\x81\xd6\x14\x95\x3e\x9c\x85\xe0\xc0\xbd\x37\x6f\xaf\x93\x54\x68\x65\x55\xa2\xf6\xb8\xc9\xad\xed\xed\xf6\xdd\x21\x10\x0a\xc2\x5d\x0f\xf9\x6f\x2f\xae\x7a\xec\xe6\xfc\x0a\x6f\xb7\xba\x3e\xbf\xb9\x6a\xeb\x2c\x07\x37\xe7\x57\x07\x1f\x15\x14\x2c\x08\x7c\x68\xa2\xde\xa1\x93\x96\x09\xca\x49\x93\xfd\x9c\x17\xfd\x5b\x98\xed\xc8\x53\xbb\xe0\xeb\xfd\x6a\x87\x3b\x59\x10\x81\x39\xe7\xc5\xd6\xbd\x69\xe0\xa9\xf8\x40\x99\x5e\x21\xec\xb6\x1a\x73\x79\xca\x57\xae\xa6\x90\x92\x94\x1e\xbe\x00\x99\x16\x4a\x38\x79\x31\xe6\x81\x6d\xff\x75\xcc\x03\xdb\xb8\xc5\x3c\xb0\x98\x07\xb6\xd8\x1e\x4d\xe0\x6c\xcc\x03\xfb\xb4\x3c\xf8\x31\x0f\x6c\xfb\xf6\xd1\x1d\xf7\x31\x0f\x6c\x79\x8b\x79\x60\x31\x0f\x6c\xb3\x16\xf3\xc0\xb6\x6f\x8f\x2e\xe4\x28\xe6\x81\x6d\xd5\x62\x1e\xd8\x62\x8b\x79\x60\x2b\x5a\xcc\x03\x5b\xd1\x62\x1e\xd8\x62\x8b\x79\x60\xdb\xb5\x98\x07\x16\xf3\xc0\x3e\xe9\xf0\x58\x16\xf3\xc0\x7c\x8b\x79\x60\x9f\x44\x10\x20\x8b\x79\x60\x1b\xb5\x98\x07\x16\xf3\xc0\x76\x69\x31\x0f\xec\x53\x31\xca\xc4\x3c\xb0\x98\x07\xf6\xf3\x11\x74\x63\x1e\x58\xcc\x03\x8b\x79\x60\x31\x0f\x6c\xed\x2c\x62\x1e\xd8\xa7\xa0\x02\x6a\x30\xe2\x5f\x70\xa5\x32\x91\xcc\xf6\x8e\x52\x7c\xeb\x2f\x3e\x36\xbe\x5b\x56\x60\xbf\x8d\xd0\xaa\x3d\x32\x4f\x1e\x59\xc2\xcd\xdb\x06\xe0\x9a\x89\x37\xd5\xe5\xcf\xef\x01\x04\x8f\x22\xf9\x26\x2c\xf0\xf5\xee\x9e\x94\x7e\xb8\x80\x80\xc0\xb7\x9b\xdd\x62\x6f\x15\xa1\xb9\x90\x8e\xe2\xc1\x0f\x9b\x19\x91\x15\x26\x58\x55\x51\x30\xb1\x12\x41\x78\x51\x64\x02\xcc\x80\x5d\x57\x17\xf0\x20\xf5\x32\xa7\x2c\x29\xca\x1e\xcb\x21\x57\x7a\xb6\x87\x36\xd1\x81\xc0\xd9\xda\xb5\x8e\x40\xf6\x96\xfa\x0c\x60\x70\x4a\x44\x51\x64\x33\x12\xa6\xea\x54\xd2\x0a\x6a\x22\x10\x97\x14\xc5\x9d\xb9\x28\x0f\x61\x5b\x6a\xd8\x6b\x65\xdf\x7a\x84\xff\x68\xb1\xf6\xab\xa2\xca\xb9\x55\xb9\x48\x76\x21\xd8\x44\x63\xf7\x8f\x29\x3f\x57\x79\x51\x5a\x68\x91\x6d\x02\x16\x49\x72\xc2\x34\x55\xb8\xfd\xa3\xc1\x13\x25\x47\x62\xec\x45\xf1\x13\xba\xd1\xbd\x5f\xad\xa7\xdf\xb8\x45\xfd\x09\x86\x82\x27\x19\x17\xbb\xfb\xed\xdb\xa1\x55\xe7\xd8\x17\x66\xe8\xd6\xc1\x55\x18\xa3\x5b\x41\xab\x57\x05\x2e\x09\x3a\x26\x83\xf0\x88\x3e\xee\x51\xa4\xaf\xd3\x3f\x50\xe8\x5c\xb2\xa1\xef\x64\x2d\x1e\x4b\xc6\xb3\x62\xb2\x5e\x40\x76\x13\xb9\x98\x49\x9e\x8b\x24\x60\xcc\x59\x96\xa9\x84\x14\xa2\xb6\x88\x1c\xfa\xa6\xfe\xdc\x20\x79\x5e\x5a\x3e\xcc\x60\xc0\x2e\x29\x43\x48\xc9\x6c\xe6\xb0\xc9\x80\x0d\x8e\x0f\xbf\xfd\x3b\xc7\x60\xed\x1f\x80\xb1\x67\xf0\xc5\x52\x69\x08\x37\x84\xb2\xa1\x40\xba\x53\xa6\x24\x30\x90\x56\xcf\xdc\xde\x5d\xa9\xf4\xda\x6d\x5f\xeb\xed\xbd\x93\xa4\xf6\x8c\xb9\xe8\x22\xde\x62\xcf\x58\x8b\x6e\x22\x24\xf6\x8f\x8e\x58\x74\xf3\x36\xf2\x16\x9b\x81\x8f\xad\x5d\x2d\x54\x3a\x58\x72\x2a\x83\x68\x70\xa5\x52\xc7\xe0\x34\x34\xaf\xc2\xf3\xfa\x21\x1e\x90\x9c\xdf\xa2\x8a\xcd\x6d\xcd\xf9\xf8\x94\x8b\xcc\x1d\xa1\x25\xf9\xf8\xfb\x05\x4e\x74\x20\x1a\x74\x9d\x0c\xc6\xf6\xc5\xa0\x2e\x93\xb9\x18\xde\xdc\x95\x8b\xdd\xaa\x3f\xb0\x05\xc6\xfb\x12\xfb\x6a\x84\x63\x39\x9c\xc8\xf9\x3d\xea\xac\x3c\x57\xa5\xb4\x94\xe1\x45\xfc\xb9\x22\xfa\x14\xb4\xf6\xe8\x38\x2f\xeb\x86\xec\xf0\x34\xa4\xc0\x5c\x75\x11\x4d\xce\xad\x05\x2d\x4f\xd9\xff\x1e\xbd\xfb\xe5\x4f\xfd\xe3\x2f\x8f\x8e\xbe\x7f\xd6\xff\xc3\x0f\xbf\x3c\x7a\x37\xc0\x7f\x7c\x71\xfc\xe5\xf1\x4f\xe1\x8f\x5f\x1e\x1f\x1f\x1d\x7d\xff\xcd\xab\xaf\x6f\xae\x5e\xfc\x20\x8e\x7f\xfa\x5e\x96\xf9\x2d\xfd\xf5\xd3\xd1\xf7\xf0\xe2\x87\x0d\x3b\x39\x3e\xfe\xf2\xf3\x9d\xa7\xbc\xb7\x8d\xba\x3b\x0b\x75\x47\xf6\xe9\xf7\x62\x9d\xf6\x71\x9c\x1d\x9d\x45\x1f\x83\xbe\x70\x1a\xbd\x05\x69\xdd\x69\x0c\x5c\x12\x15\x91\xaa\x1f\x61\x98\xca\x85\x75\x0a\x9c\x13\x6b\x78\x33\xf3\x6c\x4e\x3d\xf1\x74\x00\x73\x2f\x39\xa6\x88\x35\xb2\xb6\x1a\x5a\x8d\x0a\xa6\x58\x54\x8f\x24\x13\x79\x91\x41\x0e\xd2\xe2\x79\xee\x07\x49\x10\xf5\xc5\x41\x3d\x93\x84\x24\x76\xb8\x4f\x00\x52\x3f\x58\x24\x1d\x0f\xb7\x48\x3a\x3e\x45\xd2\x61\x20\x29\xb5\xb0\xb3\x73\x25\x2d\xdc\xef\xe4\x11\x6d\x53\x8e\xeb\x76\x87\x5e\x21\xf3\x31\xad\xfe\x19\x53\x05\x65\x70\xce\x95\xc8\x9a\xa8\x32\x4b\x31\x2d\xbb\x94\xe8\x10\xa2\x7a\x1b\x60\xc9\x5b\x83\x02\x21\x4a\x8b\xf3\x83\x04\xff\x0b\xb9\x85\xfe\x59\x8a\x29\xcf\x40\xda\xc6\x17\x57\xe8\x71\x68\x7e\xb4\xe9\x99\xb7\xdc\xdc\xd6\x07\x1e\xfa\x85\x4a\xeb\xf3\x7d\x12\x96\x84\x3f\xc1\xbd\x7d\x8a\x4a\x3a\xca\x4f\x57\x5a\x4c\x45\x06\x63\x78\x61\x12\x9e\x21\x5d\xeb\x86\x95\x9c\xad\xe8\x1d\x37\x5e\xab\xcc\x38\x99\xdf\x91\x72\xc6\x83\xcb\x0e\x35\xe1\x31\x17\x92\x2a\x5c\x15\xe1\x63\x43\xbe\x3f\xc7\x1d\x0a\xae\xdd\x06\x57\x3e\x3e\xd4\xab\x87\x4a\x65\x3e\x77\x39\x9b\xd5\xfd\xfb\x2c\x7e\xa9\xfe\x2e\xe1\xee\xef\xae\x37\xc3\x46\x19\x1f\x57\xae\x3d\xa7\x6c\xcf\x7b\xe7\xeb\xae\x57\x2e\x00\x13\x83\x4b\x60\x3c\xbb\xe3\x33\x53\x3b\x3a\x1b\xb5\xdc\xcc\x29\x7b\x7e\x8c\xe8\xcc\x0d\xab\xfa\x48\xd9\xaf\x8e\x31\x5c\xef\xfc\xec\xea\xef\xd7\x7f\xbb\xfe\xfb\xd9\xc5\xab\xcb\xd7\xec\xb5\xb2\x40\x3c\xaf\xa1\xff\x24\x95\x81\xc9\xcd\xb2\xb2\xff\x0d\x94\x19\xa0\x8e\x85\xd1\xe7\x32\x55\x77\x66\x67\x2b\x28\xa1\x9f\x03\x1e\x70\xb9\x9b\x99\x87\x17\x1c\x6f\x38\xdf\x83\xc3\x2c\x44\x84\x37\x3b\x45\x16\x9f\xa6\x27\xa9\x56\x05\x01\x21\x38\xa5\x1b\x06\x92\x96\xdb\xab\x99\xd9\x86\xfb\x3b\x6a\x77\x38\xd6\x5c\xda\xda\x3b\x5b\xef\x99\xbf\x5a\x7d\xb0\xf7\x76\x7c\x3c\xc6\xdf\x85\x95\x80\xa7\xdd\xd5\x25\x38\x4b\x53\x48\x5b\xe0\xff\xe4\xf2\x89\xce\xc3\xe2\x1a\x6e\x2f\x76\xf5\xe6\xfa\xf2\xff\x9b\xc3\xe3\x59\xb1\x5f\x62\x43\x37\x35\x6e\xb4\x2a\x3a\xdb\xdd\xb7\xbe\x86\x4a\xdc\xdf\x47\xb1\xbf\x15\xb7\xec\x26\x9c\xf6\x6d\x29\xdb\xc5\x49\xeb\xfe\x59\xae\x52\x18\xb0\xab\x2a\xae\xa7\xfd\xb4\x51\xaa\x8c\x6b\x60\xee\x15\x69\x05\xcf\xb2\x59\x53\x44\xb3\x8a\xea\x89\xb4\xaa\xac\x35\x09\xf9\x88\x67\xe6\x63\x53\xe3\x7d\x78\xa3\x93\x23\x5e\x39\x75\xb9\x93\xed\xa8\x7a\x63\x29\x48\x65\xbd\x60\xed\x66\x89\x95\xeb\xb4\x4a\x18\xe9\xe6\x8d\xe4\x89\x16\x7f\x33\x14\x5b\x14\x58\xa3\x30\x01\xd8\x57\x55\xcf\xe4\x96\x2d\x0d\xcc\x0b\xe8\x9e\x35\xd6\xda\xba\xeb\x5d\x03\x4f\xd1\x6b\x51\x70\x3b\xa1\xd8\xe7\x9c\x9b\x5b\x48\xe9\x07\x2f\x9a\x55\x8e\x13\x34\xf4\x86\xa1\x6e\xdc\xbc\x83\x8f\x04\x45\x32\x8a\xc8\x46\xef\x0a\xa4\x1f\x79\xd7\xf7\x38\x84\x0e\x28\x6f\x64\x36\x7b\xab\x94\xfd\xaa\x2a\x88\xd3\x09\x06\xfc\xd5\x4b\xcb\x6d\xc7\x15\x8a\x93\x1c\xc7\xed\xe3\x6e\xe0\xa1\x6a\xd6\xe2\xb9\xa8\x77\xfc\xa9\x1f\x29\x5d\xca\x33\xf3\xb5\x56\xe5\xce\x4c\x6c\x41\xd8\xfc\xfa\xf2\x02\x49\x51\xe9\x43\x0b\xa5\xd5\x33\x2c\x02\xb6\x58\xc9\xb9\x52\x0c\xbe\xf5\xc1\x91\xcd\x33\x51\xc7\xb1\xb1\x57\x7c\xc6\x78\x66\x54\x80\xa5\x77\x6b\xcd\x6b\xa1\x5e\xc5\x75\x8f\x87\xca\x4e\x16\x74\x5b\x77\xa0\x16\xbf\xeb\x35\x22\x0d\xeb\x78\x00\x21\x17\x3e\xb7\xe8\x33\x29\x34\x24\x90\x82\x4c\x3e\xf6\xb6\x7f\xec\x00\x3d\x44\x9d\xd7\x4a\xba\x83\xd9\x09\xf2\x5c\x56\x91\x99\x1e\xa4\x4d\x54\x41\xa7\x98\xd7\xfe\x38\x46\x7a\xe2\xb1\x2c\x0d\x68\x0a\x4b\xd5\x25\xd0\x4e\x7e\x53\x0e\x21\x73\x90\x77\x2a\x29\xd6\x11\xe5\x96\xcc\x19\x22\xe7\x63\x60\xdc\x56\x98\x66\x15\x03\x69\x4a\xed\x37\x51\x58\x96\x2a\xa8\xeb\x68\x71\xc3\xbe\xbd\xbc\x60\xcf\xd8\x91\x1b\xeb\x18\xf1\x67\xc4\x45\x86\x41\xa0\x18\x54\x32\xa7\xa3\x8e\x42\x17\x38\x25\x44\x5e\xa6\x34\x11\x89\x1e\x93\x8a\x99\x32\x99\x84\x39\x39\xbd\x37\xa8\xcd\x3e\x71\x09\x3d\x2f\x8f\x13\xd7\x3f\x2e\x85\xfa\xd6\x80\xee\x8c\x40\x7d\xbb\x03\x81\x6a\x8a\x51\x0e\xe7\xda\xd0\x23\xc4\xca\xc1\xf2\x94\x5b\xee\x09\x57\x78\xe1\xd1\x6e\xe9\xcf\x9b\x7c\x19\x78\x29\x64\x79\x4f\x89\x02\xdd\x99\x5a\xae\x5f\x60\xb7\x2c\x09\x50\xc7\x5d\xa7\xe0\xbb\x34\x58\x53\x1a\x41\x32\x97\x2d\x5c\xe9\xad\x10\x13\x91\x4e\x70\x0a\x86\x01\x27\x9c\x70\x99\xaa\x7c\x61\x30\x27\x44\x42\xeb\x0e\x84\x01\x8b\xd8\xd7\x6e\x8f\xc4\x28\x94\xc1\x14\xf6\xa8\x12\x3c\x7f\xe7\x83\xeb\xcd\x01\x27\x60\x04\x76\xcf\x32\x3e\x84\xcc\x07\x6a\x51\xf8\xe7\x22\x06\x7e\xec\xec\x31\xad\xb2\xee\xd2\xdd\xdf\xaa\x0c\x28\x1d\x23\x00\xc2\x75\xff\x24\xe0\x80\x9d\x74\x05\x07\xd4\x06\x5b\x70\x40\xbd\xf6\x29\xc0\xa1\xdc\x83\xd5\xb3\x79\x38\x38\xb9\xa1\x0d\x07\x64\xde\x8f\x1d\x0e\x06\x92\x44\xe5\xc5\x95\x56\x4e\xed\xec\x8c\x37\xf9\x6e\x6b\x9f\x21\x19\x36\x96\x84\x6e\x22\x2f\x68\xbf\xcc\x75\x23\x11\x8b\x5b\x62\x12\x21\x1b\xeb\xff\x69\xf0\x2c\x24\x3d\xf3\x8c\x2c\xf4\xd2\x72\x2f\xba\x2f\xfd\x83\xa7\xcc\x0e\xba\xc8\x65\xde\xc3\xd8\xd9\x09\x37\x52\x09\xcf\xf0\x16\x88\xfd\x50\x8e\xcd\xa3\xdd\x7c\xc7\x8d\xf4\x3b\xf4\x51\xe2\x6f\x8d\x48\x63\x8e\x86\x96\x60\xc2\x94\x2a\x85\x86\x2f\x9b\xa2\x17\x6f\x28\x4d\x0b\xdf\x0b\x99\x7f\x4e\xae\x08\x6e\xe5\xb4\xf5\xb5\x55\xbe\x96\xf1\xab\xea\x6e\x09\x37\x41\x90\xa9\x90\x63\xb4\xab\xf5\x98\x86\x8c\x72\x06\x3d\x11\xb8\x25\x0d\xf2\x10\x8f\x44\xe8\x34\x9c\x87\x30\x74\x08\x4c\xf6\x3d\x37\xa3\x8d\xc5\x88\xc8\xad\x30\xec\xe0\x65\x00\xc0\x1e\xc5\xf8\x1f\x23\x87\x39\xa0\x15\x56\xbb\x49\x96\xce\x5b\x21\x53\x9f\x5e\xd7\x02\x56\x75\x9b\x13\xc9\xc1\x98\xb8\x29\xd2\x26\x6d\x39\x65\xef\x24\xab\x80\xc5\xfa\x3b\xa3\xc7\x5b\x12\x99\x83\x8d\xae\xbf\xde\xf0\x5a\x0d\x32\xdf\xcd\xb7\x12\xf7\xde\x8d\xdb\x77\x9a\xfb\xe2\x7b\x61\x2d\x1f\xb5\xa0\xa7\xa7\x7e\x5d\x6b\x31\x7f\xa5\x6e\x83\x48\x9f\x38\xb4\xb6\x42\x8e\x4d\x53\x93\xe1\x59\xd6\x32\x86\x2f\x53\x65\xc2\x0e\x57\x77\x77\x2d\xaa\x10\x73\x69\xc1\x4f\x45\x0d\xc9\x9c\x38\xf1\xc4\x95\x90\x71\x6e\xf8\xb9\x76\x90\xb0\x82\x67\xd7\xc5\xee\x97\x0d\xb0\x85\xc2\xd6\xaf\xae\xcf\xda\x5d\x23\xb3\xf6\x31\xe9\x80\xcf\x19\x4f\x73\x61\x0c\x1a\xc2\x60\x38\x51\xea\x96\x1d\xad\xbd\x73\xad\x6f\xc4\xd8\x9c\x78\x9c\xef\xbb\xd9\x1f\x33\x21\xb3\x2a\x2a\x0a\xf5\x60\x69\xab\x30\x78\x1c\x24\xa9\x66\x81\x7b\xe8\x6f\xa0\xf1\xc1\x0a\x8b\xd3\xa4\x3b\x67\x1c\x16\x7c\x74\x82\xbd\xb8\x3d\xfb\xa5\x12\x3e\xb8\x45\xaf\x3d\x6e\xcf\xd7\x5b\x5e\x0a\x47\x92\x1e\x3f\x3a\x90\xbc\x70\x91\x80\xe9\xae\xcc\xeb\x5f\xea\x3e\x59\x0a\x94\x75\x0f\x18\xfd\xc4\x57\x06\xd9\xa1\x5d\xfa\x10\x8b\xb7\xf8\x4f\x0f\x9b\x12\x75\x3b\x5b\x09\x93\xa1\xfa\xa4\xa4\x3b\x8a\x86\x24\x30\x88\x10\x13\x25\x95\xcf\x91\x73\x4c\x54\x49\x44\x69\x24\x51\xe4\xcd\xc3\x3d\xf1\x24\xba\x31\xd5\xf3\xda\x4b\xdc\x74\x04\x62\xf1\x07\x5b\x5d\x92\x48\x73\xb8\x13\x76\x82\x37\x36\x4c\xe6\xbc\x86\x38\x13\x0d\x06\x1d\x30\x92\x81\xd6\x4a\xfb\x80\xac\x60\xb7\xf6\xa9\x5a\x57\x2a\xc5\x88\x2e\x87\x24\xdc\xfd\x75\x68\x9a\x8e\xea\xfa\x52\xa7\xaa\x06\x27\x8c\x46\x90\xa0\xa0\xd5\x04\x30\x51\xed\xa3\xfa\x0a\x0b\x9f\x84\xe0\x10\xcc\x5f\x0a\x95\x8b\x7b\x37\x4a\xf3\xab\xa6\x4b\xdc\x5f\x1d\xb1\xfc\xf1\xf1\x80\xb1\x4b\x59\x45\xf0\xf6\xdc\x2e\x36\xdf\x0c\xa1\x67\xd6\x2d\xb1\x79\xa3\x18\x2e\xa0\x69\x38\x73\xd2\xa1\x2e\x3b\xc0\xf8\x7d\xcc\xe1\xac\x69\x12\xef\x94\x1c\xa0\x69\xdc\x77\xea\xb6\x3e\xc8\x00\xfb\x98\xca\xdd\x2b\xef\xcb\x5c\xfe\x34\x1c\x20\x6c\x5f\x3a\xe7\xab\x9f\x75\x74\xcd\xd3\x75\xa3\xb7\x86\xf4\x5e\x39\xdc\xae\x54\x4a\xd5\x0f\xab\xea\x6d\xd9\x2c\x54\x63\xac\x72\xa2\x1b\x32\x9e\x54\x94\x3c\xd0\x2c\x8b\xe8\x2f\xc7\x49\x99\x13\xb5\xb3\x60\x5b\xc8\x8b\x0c\xb0\xea\x4a\xa3\xe7\xba\xa0\x4c\xe3\x5e\xa8\x5e\x9d\xc1\x56\x5d\x2d\xe5\x8b\x31\xf6\xd8\x3f\xf0\x50\x56\x81\xa8\xa1\x4e\xdc\x55\xf5\x39\x69\x88\xc2\x84\x4b\xe2\x30\x39\xd5\xaa\x60\xba\x60\xa9\x18\x61\x9e\xa4\xf5\x43\x16\x5c\xf3\xdc\x91\x78\xc3\x3c\x08\x86\x30\x16\x14\x10\x59\x11\xb6\x43\x27\xee\xf9\xda\x1c\x3d\x22\x86\xc2\xb2\x5c\x8c\x27\x84\x28\x8c\x63\x45\x1d\x16\x9c\x8a\x99\xe2\x29\x5e\x2e\xcb\x94\x66\x77\x5c\xe7\x8e\x6f\xf0\x64\x82\x1e\x4a\x2e\x59\x5a\x6a\xbc\x2f\xc5\x02\x4f\x67\x7d\x63\xb9\x75\x92\x32\x68\xaf\x50\x86\xf9\xc7\xcb\xb1\xd6\xb6\x78\x39\xd6\x86\x2d\x5e\x8e\x15\x2f\xc7\x5a\x6c\x8f\x26\x3a\x34\x5e\x8e\xf5\x69\x95\x35\x8d\x97\x63\x6d\xdf\x3e\x7a\x35\xd3\x78\x39\xd6\xf2\x16\x2f\xc7\x8a\x97\x63\x6d\xd6\xe2\xe5\x58\xdb\xb7\x47\x57\x87\x39\x5e\x8e\xb5\x55\x8b\x97\x63\x2d\xb6\x78\x39\xd6\x8a\x16\x2f\xc7\x5a\xd1\xe2\xe5\x58\x8b\x2d\x5e\x8e\xb5\x5d\x8b\x97\x63\xc5\xcb\xb1\x3e\xe9\x3b\x03\x58\xbc\x1c\xcb\xb7\x78\x39\xd6\x27\x51\x19\x9d\xc5\xcb\xb1\x36\x6a\xf1\x72\xac\x78\x39\xd6\x2e\x2d\x5e\x8e\xf5\xa9\x18\x65\xe2\xe5\x58\xf1\x72\xac\x9f\x8f\xa0\x1b\x2f\xc7\x8a\x97\x63\xc5\xcb\xb1\xe2\xe5\x58\x6b\x67\x11\x2f\xc7\xfa\x14\x54\x40\x63\x53\xb1\x53\x6d\xd0\x4d\xca\x18\xf9\xf0\xf4\x46\xd5\x80\x61\x39\x1a\x81\x46\xca\x85\x23\x2f\x84\x55\xd5\x15\x1b\xe7\x5d\xb9\x60\x7b\x58\x11\xc9\x67\xf2\xac\xf8\xdc\x97\x29\xc0\x1a\x9e\x75\x0c\xf9\x8b\x37\x5f\x2d\xa9\x99\xb4\x73\xbc\xe1\xae\xd1\xd3\x38\xe7\x37\x72\x37\x2f\xfc\x0a\x80\x2f\xcb\x2c\xf3\x70\x4f\x32\x65\x7c\xec\x3b\x02\x2b\x99\x70\x29\x21\xe8\x7b\xc2\xa2\x1d\x65\x08\x20\x99\x2a\xc0\xfb\xc0\x39\x33\x42\x8e\x33\x60\xdc\x5a\x9e\x4c\x06\x6e\x24\x19\x80\x5d\xc7\xa9\xfb\x5f\x8c\xd5\xc0\xf3\x10\xb1\x9f\x73\x41\x5d\x31\x9e\x68\x65\x0c\xcb\xcb\xcc\x8a\xa2\xea\x8c\x19\xc0\x54\x1b\x62\x54\x15\x30\x30\x5e\xae\x0e\x6e\xef\xd5\xa3\xf9\x69\xa9\x66\xd1\x3a\xd4\x36\x7b\x58\x48\x3c\x2f\xec\xac\x8a\xf0\x05\x36\x12\xda\x58\x96\x64\x02\xb9\x35\x8e\x48\x59\xd5\xd8\x5f\x2f\xf0\x6a\xe9\x67\x6a\xfc\x54\x65\x8a\x62\x6b\x61\x0d\xc5\xcb\xd6\x1d\xfa\xae\x52\x61\xbc\x98\x6f\x7a\x8c\x87\x8a\x6a\x04\xe8\x30\x53\x04\x75\xe0\x2c\xd4\xbb\xff\xa9\xd1\x5d\xa3\x92\x6c\x1d\x50\x5c\x23\x3a\x26\x3f\x04\xe4\xec\xb5\xf2\x3c\x6a\x81\xc2\xdf\x97\x31\x77\x0c\x70\x03\x24\x4c\x1d\x0e\x40\x02\x8e\xbf\xf2\x15\x58\xff\xc1\x91\xbe\xc1\x14\x5f\x81\x31\x7c\x0c\x57\x3b\x3a\x1a\x56\x69\x64\xe8\x6b\xa8\x37\x06\x51\x21\x6b\xdd\x49\xd6\x8c\xdb\x6c\x8b\x41\x2c\xa7\x39\x55\xc2\xcf\x9d\x16\xd6\x02\x6e\x2a\xd6\xde\x43\x8f\xe8\x7c\x6a\xfe\xe1\x5c\xf4\xe7\xab\xd0\x49\xfd\xb1\x23\xea\x32\xa5\x58\xcc\x21\xb0\xa1\x16\x30\x62\x23\x81\x01\x9e\x18\x72\xd9\xa3\x52\x4c\x9c\xac\x00\xc6\x38\x7d\x57\xc9\x20\xcb\x86\x79\x0d\xd8\x5f\xfd\xc4\xac\x2e\x65\xc2\x1b\x55\x6e\x31\xf7\x54\x8c\xd8\x18\x43\x36\xbd\xb4\xf8\x9b\x67\x7f\xf8\x1d\x1b\xce\x1c\x4b\x43\xc9\xca\x2a\xcb\xb3\x6a\x91\x19\xc8\xb1\x83\x15\x1d\xcf\x76\xf6\x64\x05\x01\xbc\x06\x84\x26\xfe\xfc\x57\xb7\xc3\x36\x8f\x3d\x49\x61\x7a\xd2\x80\x5f\x3f\x53\xe3\x65\x17\x67\xed\x1e\xcc\xbd\xa3\x4a\xb4\x04\xcd\xba\xb9\xf1\x31\xd4\x04\x63\x13\x75\x47\xb2\xfe\x12\xec\xa9\x13\xb1\x0a\x55\x94\x19\x19\x9d\xbf\xaa\xf2\x8e\x4b\x03\x8b\xd9\x81\x4b\xcf\x05\x9a\x49\x7d\x17\xf3\x15\xd5\x29\x52\x37\x0c\xa9\x7c\xd6\x89\x37\xe4\x55\xa5\xc1\x50\x11\xfa\x8a\x67\xd9\x90\x27\xb7\x37\xea\xa5\x1a\x9b\x37\xf2\x85\xd6\x4a\xb7\xe7\x92\x71\x47\x2d\x27\xa5\xbc\xa5\xab\x1f\xaa\xe2\x09\x6a\xec\x5d\xb9\x21\xc5\x61\xd9\x82\x29\x93\x3e\x10\xe1\xa0\x06\xd5\xbd\xc0\xbd\xa8\x75\x1d\x9f\xc4\x45\x18\xd9\xec\xdf\x34\x91\xed\x57\xcf\x7e\xf3\x7b\x42\x5d\xa6\x34\xfb\xfd\x33\x8c\xe6\x36\x3d\x3a\xc4\x48\xdb\x1c\xa3\xc8\x79\x96\x39\xb5\xa1\x89\x94\x0e\xd0\xcb\x90\xf0\x83\xe3\xa0\xdd\x1f\xdd\x36\x16\xa5\x6e\x6e\xfe\x86\x72\x94\xb0\x06\xb2\x51\x8f\xf2\x95\x2a\xb5\xe6\x10\x19\xc3\xa1\xa7\x3e\x98\x34\xf6\x08\x04\xa0\xa9\xca\xca\x1c\x2e\x60\x2a\xba\xb8\xdd\xaf\xd5\x5b\x50\xf5\x33\x61\x30\x35\x6c\x98\xa9\xe4\x96\xa5\xfe\x61\x23\xbe\x65\xbe\x46\xf8\xd3\xbd\xa8\xb5\xb9\xfe\x56\x6c\x4f\xce\x8b\xa2\xca\x1e\xd2\xfc\xae\x05\x0c\x3c\x93\x58\xc8\xe0\xe9\x5f\xd4\x4a\x2b\x72\x74\x73\xe7\x2e\x76\x0e\x08\xda\xdf\x46\x5d\xcf\xbe\xa3\xeb\xf8\xea\x0e\xc3\x69\x28\xf0\xdf\x94\x6f\xb2\x90\x2f\x59\xa5\xdc\x55\x88\x41\x02\x80\x43\x1f\x24\xc9\x1f\xed\x42\x51\xb6\x77\x60\x53\x0b\x2e\x72\xcd\x9d\x76\x9c\x15\xa0\x8d\x30\x8e\x2f\x7f\x87\x07\x8a\x2e\x33\xac\x4d\x80\x1f\x07\x08\x74\xb8\xb1\xb0\xf2\xfe\x94\xf2\x4a\xa5\xbe\x43\x24\x85\x54\x54\x7a\x89\x58\xdb\x96\x6a\x3b\x64\xa8\x1f\x9b\x54\x7e\x57\x43\xb3\x4d\x29\xdd\x2f\x15\xa9\xa4\xb7\x3e\x25\x02\x89\xeb\x7b\xaa\xf4\xb1\x9a\x7c\x47\x64\x00\x09\xa3\xdf\xdc\x36\x25\x6c\x29\x8f\x74\x50\x1a\x22\xbd\xd7\x03\x07\x8c\xbc\xe0\xee\x4c\xf8\x4f\xd9\xe1\xe9\xe1\x47\x25\x92\x04\x22\xad\x0a\x3e\xde\xeb\x96\x9f\x39\x48\xcd\x77\xdb\x2c\x41\xe1\xd4\x20\x7c\x5e\x15\x64\xc3\xb7\x20\xad\x2b\xec\x60\xfd\x24\xf2\x8e\x06\x00\x7b\x05\x81\x32\xb5\xef\xf8\x8c\x71\xad\x4a\x99\x7a\xfb\x52\x65\xe0\x7b\x35\x37\xf0\x6b\x25\xa1\xbe\x35\xb4\x5d\xc1\x02\x2d\xfa\x42\xb2\xe7\x83\xe7\xcf\x3e\x15\x4e\x85\x2b\x9c\xe3\x54\xaf\x2b\x4e\x45\xf4\xe9\xa3\xae\x35\xd4\xc2\xef\x68\xbd\xaf\xbc\x89\xa5\x2e\x75\x2f\x42\x21\x6d\xfc\xe9\x4e\x0b\x0b\x8d\xcb\x01\x8f\x50\x71\x71\xfa\x61\xa3\x5e\xc3\xf1\xb2\x3b\x26\xf6\x04\xd2\x7e\x05\x32\x4c\x39\x7c\x8f\x74\xcb\x13\x28\x3c\x6e\xcb\x2c\x5c\x66\x0d\x09\x6b\x02\xea\xe0\x80\x1d\xd1\x9b\x87\x94\xea\x7c\xfc\x51\x51\xcb\x03\xed\xc5\x7d\xb1\x47\xf5\xcd\xb9\xac\xfa\x82\xa3\x0d\xae\xe8\x10\x82\xff\x03\x13\x3e\x05\x4c\xf1\x16\x19\xd7\x19\xfa\x1c\xaf\x69\xee\x6c\x58\x5a\x06\x72\x2a\xb4\x92\x39\x48\xcb\x30\x06\x7e\x98\x41\xf3\x6e\xec\xcf\x8f\xbe\x3b\x7b\x8b\x01\x0d\xc7\xbe\x58\x85\x9f\x65\x69\x42\x61\x9b\xe6\x4c\x1a\xdd\x3d\xb8\x7d\x61\x1e\x0e\x86\x48\x73\xc3\xbc\xdc\x38\x79\x69\x4b\xba\xb0\xe5\x3e\xc9\x4a\x23\xa6\x1f\x8b\x92\xf8\xdc\xfb\x0b\xb1\xd3\x3e\xcf\xd5\x01\xa8\x01\xb5\x90\xd2\x8f\xa6\xf5\x25\x69\x80\x0b\x0e\x93\x43\x53\xa5\x06\x36\x7d\xe0\xde\xf4\xe4\xab\x6c\x50\xf8\x5c\xa8\xc5\xb8\x20\x42\x60\x45\x99\x8f\x6b\x84\x4a\xa5\x39\xc7\x19\x6e\x07\xd6\x76\x40\x72\x2b\x5b\xf0\xe2\xf5\x75\xb3\x3c\x09\xa9\x4b\x2a\x1d\xb0\xab\xfa\xc7\xba\x86\x0d\x56\x56\xab\x94\x48\xd0\xe3\xba\xdc\xf8\x18\x24\x68\x14\x12\x5c\x97\xad\x0b\x57\xd9\x90\x1b\x72\xf2\x5c\xbc\xbe\x26\x9b\xed\x76\x30\xdb\x59\xcc\xde\x5d\x42\xc5\x94\x16\x4c\x63\xd8\x41\xb8\x6d\xdf\xa6\x56\x19\xac\x1c\x60\x50\x29\xa5\x8e\xd9\xe5\x15\xe3\x69\xaa\xd1\xed\x33\x97\x7c\xe3\xf4\xf3\xe0\x5b\xc0\x7a\x31\xdc\x40\x73\x4e\x0d\x70\x23\x89\xab\x01\xcb\x2e\xca\x22\x13\xe4\x46\x68\x7e\x50\xd7\xb9\xc1\xeb\xbf\xb6\x47\xda\x7d\xd4\xbc\x9d\x95\xbc\x3d\xa8\x90\xda\xb5\x5c\xe5\x9a\xdd\xd3\x60\x54\x36\xad\x4b\x0d\xcf\xed\x9a\x3f\x11\x68\x12\xaf\x76\x2d\x54\xa7\xdc\x68\xc7\x40\x5a\x2d\x60\x71\xb7\xd8\x5b\x37\x72\x89\xa7\xa9\xea\x50\x4c\x01\xfd\xe3\xbe\x30\xa7\x2f\xf0\x56\x17\x3f\x26\xdf\x30\xd5\x9f\x06\xae\x03\x45\xc3\x59\xed\x78\x12\xd9\xc7\x42\x84\x79\x63\xc7\xc5\xeb\x6b\xa2\x84\xb4\xf8\xea\xde\xda\x65\xbb\x54\x53\xb5\x9d\x31\xf0\xa3\xd5\x1f\xda\x47\xf3\x98\xbb\xf6\xcf\xdf\xf3\xbd\x57\x20\xcb\x1e\xe2\xdf\x5e\xc9\x76\x7b\x8c\x6e\x80\xeb\x64\xb2\x0b\xfc\xd7\x10\x02\xea\x94\xa5\x8a\x22\x01\x46\x4a\xa3\x4a\xdc\x47\xf2\x9e\x29\x75\x5b\x16\x9b\x50\x74\xdf\x0d\x5d\xc5\xb6\x11\x81\x68\x7d\xf1\xb3\xa2\xe9\xa9\x34\xbb\xf8\x7b\xdb\xb2\x0f\x58\x92\x78\xb0\xa3\x3a\x81\x42\xcd\xeb\x4d\xe7\x59\x69\x2c\xe8\xaf\x84\x36\xf6\x20\x54\x92\x46\x0c\x26\x9b\xc8\x61\xf3\x85\xbf\x0a\x3b\xf1\x45\x1d\x0f\x7b\xed\x47\xee\x6f\xdf\xf1\xa1\xd3\x69\x0f\x5f\x2b\x09\x87\x83\x79\xb1\xab\x22\xe5\x15\x59\x5b\xc9\x53\xfc\xd4\x0d\x64\x14\x2f\x8a\x0f\x1a\xb8\x72\xe3\x0b\x5a\xba\x11\x02\xfd\x33\x60\x19\xc7\xe2\x71\xf8\xf6\xa4\x2e\x40\x49\x15\xa5\xa8\x82\xa6\xf2\x82\xde\xac\x09\xa2\x46\x91\x29\xab\x56\x2f\x7b\x17\x79\x6e\x6b\x0c\xa0\xc2\xa4\xbe\x2a\xc9\x4b\x21\x6f\xb7\x44\xbf\x76\x74\xc9\x8b\x85\xde\x5a\x95\xc6\xc9\x47\x2b\x24\x05\xdf\x39\x16\xc3\x87\xaa\xb4\xa1\xf2\x89\x69\x28\x8e\x42\xfe\x83\xf6\x02\xed\xed\x05\xd5\xf2\x5b\xa6\x23\x9a\x1e\x19\x7d\x82\x12\x68\x66\xd2\x72\xac\x3a\x7a\xa1\x92\x5b\xd0\x2c\x73\xd3\x18\xb0\x3a\xf0\xa5\x55\xe7\x52\x97\xb0\x65\xd4\xc5\xae\x96\x0e\x28\x26\x90\x83\xe6\x59\x5d\xee\x75\x0f\x50\xbf\xf4\x84\xb3\xea\xb5\x19\x93\x42\xe5\xd2\x7c\x81\x46\x77\x0e\x5f\x2c\x7b\x2b\xe7\xb3\x50\x03\x57\x48\x0c\x37\xb8\x17\x06\xcd\xfa\x85\x4a\x9b\x89\x67\xa5\x01\xdd\xaf\xd2\x02\x7d\xee\x8d\xa9\x02\x71\x52\x18\x96\xe3\xb1\x90\x63\x4f\x9d\x91\xa6\x37\x0a\x71\x57\x9a\x0e\x46\x7a\x27\x1a\xa8\x14\x2d\x4a\x0f\x14\x5f\x26\x9a\xef\xe7\x2a\xa5\xd7\x87\x33\xd2\x06\xc3\xce\xd6\x01\xd2\x97\x92\x29\xed\x0b\x30\xf0\x34\xc5\xb9\x2f\xae\x10\x9f\xb6\x57\xd5\xab\xe2\x38\x28\xb2\xbb\xfa\xaa\x01\x16\x53\x0e\x9d\xb0\x53\xea\x6d\x6b\x87\xee\x4a\xf8\x77\x22\xfa\xed\xaa\x42\x67\xb2\xde\xe2\xf3\x66\xc0\x1c\x67\x16\xf2\x42\x69\xae\x67\xf3\x2e\x4c\x47\xa4\x1c\x0a\x38\x00\xce\x41\xea\x4a\xa5\x48\xc7\x97\x6c\xfc\x94\xee\xf8\x5d\xb2\xf7\x4b\x71\x0c\xa9\xa0\x54\x2c\x40\xd4\xd1\x6b\x93\x4c\x20\x2d\x31\x7a\x7c\x5c\x72\xbc\x83\xdc\x9d\x62\x6f\xec\x9e\xf9\xb0\x3c\x42\x86\x2a\xe0\xaf\x4a\x13\x98\x61\x90\x0c\xd6\xe7\x74\xbf\x60\x9d\x4f\x0a\x0d\xa4\x2b\x98\xf1\x3a\xd6\x2a\x4a\xf0\xa6\xbe\x15\x02\x17\x0b\x53\x91\xd8\xf0\xd1\x68\x15\xe2\x24\xbc\xba\xf9\xf5\x4a\xf9\xba\x80\x09\x38\x62\x64\x4d\xbd\x14\x1f\x55\x82\x95\x3f\xdf\x49\xc7\x24\x56\xe3\x62\x8d\x78\x0f\xa0\x1c\xca\xd5\xed\xad\x58\x73\x7c\x2b\x28\x2d\x59\xfb\xb6\x25\x99\xf6\x10\xca\x77\xf7\xb8\xed\xe4\x29\xdb\x47\xfe\xe7\x7a\xbc\xbf\xae\x74\x78\xa6\xc7\x65\x4e\xd5\xbd\xd5\x5c\x81\x65\xc2\x39\xb4\x6b\x39\x96\x75\xfe\xea\xa2\x99\xc2\xd0\x8c\xcd\x0e\x09\x20\x4e\x14\xda\xd3\xde\x39\x6f\xf0\xbc\x74\xca\x59\x65\x45\xad\x69\xab\xd7\xe2\xbc\x45\xaf\x1a\x2d\x68\xb1\x42\x16\x8e\x1b\xa3\x0c\xd1\x28\x3d\x92\x4c\xb8\x1c\xa3\x19\x5c\x95\xae\xbf\xcf\x3f\xc7\x19\x69\x48\xcb\xc4\xdf\x28\x11\xe2\x9f\x3f\x0f\xd6\x3f\x5f\x28\x08\x2f\xb6\x33\x09\x2f\xc2\x9c\x9b\xcb\x22\x56\x7d\xca\xc4\x00\x06\xec\xe0\xf3\xc6\xa3\x03\x1a\xbd\xd0\xca\x0d\xe1\x43\xa7\x71\x56\x99\xb0\x78\x10\x0e\x9a\x6f\x0f\xd8\x0b\x37\x06\x7a\x44\x2a\x00\x36\xa2\x7b\x87\x35\xf8\x7a\x4c\xc3\x98\xeb\x34\xc3\x8c\xbb\x51\x25\x94\x50\x5e\x8e\x07\x18\x9e\x3e\x8c\xa7\x93\xca\x2e\xb3\x4e\x6e\x98\x16\x61\xb9\xb9\x35\x27\x24\xca\xf4\x53\x6e\x79\x1f\x6f\xe1\x20\xa2\x71\x42\xea\x75\xdf\xd7\x3f\xed\x73\x8f\x53\xfd\x6a\x5b\x4f\x7e\xe1\x33\xab\xfa\xbc\x7a\x4b\xc8\x3e\xef\x63\x25\xd2\xff\x9f\xbd\xff\x71\x6e\xdb\xc6\xfa\x85\xf1\x7f\x05\xe3\xdd\xb9\xb6\xb6\x92\x9c\xb4\xbb\x3b\xdd\xdc\x7e\xb7\xe3\xb5\x9d\xd6\xd3\xc4\xd1\xb5\x9d\xf6\xf6\x9b\xf4\xe9\x03\x91\x90\x84\xc7\x24\xc0\x25\x40\xd9\xda\x37\xef\xff\xfe\x0e\xce\x01\x40\x90\x92\x1d\x9b\x64\x6c\xd9\x25\x77\x66\x1b\x4b\x14\x08\x1e\x00\xe7\xf7\xf9\x9c\xe6\xb9\xa2\x8f\x90\x56\xd0\xca\xd2\x6d\x01\x83\x5b\x57\x4f\x3d\x0c\x3a\xd0\x00\x9a\x88\x94\xb0\xd7\x3e\x83\xc1\x22\xbd\x56\x0e\xf2\xf1\xe9\xc5\xd9\xaf\x93\x77\x27\xa7\x17\xfd\x79\xee\xcf\x73\x7f\x9e\x5b\x9c\x67\x26\x96\xad\xcf\xb2\xb7\x7f\x36\x99\x84\x35\x08\xbb\xa0\xa2\xfa\x19\x25\x67\x1d\x8b\xe5\xcf\xd4\x28\x7c\x59\xce\x14\xe8\x22\x46\x6f\xdc\x14\x45\xb5\x37\x60\x1f\xae\xc3\x27\x9f\x9d\xf5\x88\xb9\x55\x1d\xe6\xac\x9c\x06\x40\x00\x9b\x56\x2d\x6c\x7c\x77\xf8\xfb\xc9\xd1\xf1\xe9\xc5\xc9\xeb\x93\xe3\xb3\x47\x4d\x36\x68\x09\xee\x56\x95\xc6\x0d\xa5\x64\x96\xb3\x25\x97\x85\x4a\x56\x1e\x85\x76\x33\x13\x58\xcf\x57\x13\xc6\x3c\x5b\x79\xa0\xdd\x8d\x3f\xeb\x85\x6d\xb7\xc2\xb6\x9a\x7b\xd1\x02\xd7\xa3\xab\xed\xfb\x3a\x97\x69\x47\x5b\xf8\x1c\x4d\x76\xe7\xf2\xde\xb4\x9f\x76\x2d\x04\x40\x45\xf4\x58\xe5\xb1\xc4\x1b\x30\x5a\x68\x9a\xe9\x16\x6d\x01\x3a\x01\x0d\xed\x06\x5f\x13\xf3\x14\xde\xd2\xec\x27\xb6\x3a\x63\x2d\xe1\x43\x6a\xa1\x86\x84\x45\x46\xd0\x91\x4b\xb6\xc2\x08\xe4\xa1\x7b\x58\x3b\x10\xcc\x2d\xc4\x5c\xbd\x64\x6d\xf0\x70\xbb\x04\x4b\xbd\x64\x2d\x12\x17\xdd\xb5\x06\xe8\x69\x96\x10\xf4\x34\xb3\xa6\x5b\x05\x61\xfa\x05\xc0\x61\x77\x43\x71\x6f\xf9\xac\xbe\x37\xba\x82\x5c\x1a\xc9\xc5\xae\xf6\x6d\xd2\xd6\xc8\x58\xac\x23\xdc\xb5\x6a\x1f\x32\x53\xf6\xff\x84\xc0\xb1\x17\xef\x8e\xde\xbd\x22\x07\x71\x6c\x93\x87\x0b\xc5\x66\x45\x82\x69\xc0\x6a\x4c\x68\xc6\x7f\x66\xb9\x82\xbe\x6a\x97\x5c\xc4\x43\x52\xf0\xf8\xfb\x36\xa0\x4b\x78\x75\xb8\x0a\xd2\x05\x6c\xba\x5d\x89\x73\x1b\x8f\x0b\x65\x97\x67\x22\x04\x2b\x03\x61\x6f\x3a\xfc\x15\xab\x64\x74\x44\x9a\xb6\x2d\xe4\x08\x2e\x61\xb7\x7c\x75\xb7\x64\xac\x98\x27\xee\x01\xaa\xe2\x57\x44\x15\x00\x14\xa3\x7c\xdf\x37\xe8\xa4\x3a\xac\xfe\xa9\x32\x1a\xb1\x21\xf9\x6f\xff\x21\x74\x6a\x57\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\xc1\x6a\xae\xdd\x02\xf1\x1d\x21\x63\x76\x0a\xcf\x80\x3f\xad\xba\x76\x10\x45\xb2\x10\xda\x7e\x01\x55\xbd\xe3\x85\x54\xfa\x64\xe2\xff\xcc\x64\x5c\xff\x4b\xb5\x42\x12\xdb\x4a\xc1\x00\x4b\xd4\xa2\x3a\x05\xaf\xee\xc4\x43\xc9\x4b\x3a\x3e\xaa\x76\x54\xdf\x1f\x23\x5a\xb0\x14\xb1\x8c\x5e\x3b\x12\x40\x6f\x5a\x07\x1f\x20\xa0\xe6\xda\x68\xa6\x55\x58\xb9\x9d\xe5\xcb\x56\x4d\xbc\xf1\xea\x90\xb5\xf9\x15\xec\x98\x60\x40\x11\x4b\x2d\x3c\xc8\x5e\xc0\x3a\x2b\xa5\x8c\xc6\x1e\x4c\x4e\xc8\x12\x29\xbc\x35\xc4\x71\x51\xb0\xd7\x5f\x94\xc7\x85\xb1\xb6\x8a\x85\xf8\x0a\x5b\xb9\xba\xef\x6d\x9d\xbd\xf2\xd0\x57\xcc\x18\x36\x7b\xf8\xe1\x38\xca\x8a\xa1\xbd\x61\x9c\xb2\x54\xe6\x2b\xff\xa7\x8f\xf1\x8d\x94\x96\x39\x9d\x43\x5d\x06\xfe\x1c\x7f\xe6\xff\xc2\x1f\x56\x1e\xb0\xfe\x6b\x34\x85\xa3\x22\x37\x4a\x43\xb2\x72\x1c\xb9\x21\x5e\x44\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\xe6\x77\x46\xdb\x86\xad\x78\x55\x37\x64\x19\xa8\x07\x85\xd3\x53\x11\xec\x49\x5b\x77\x3a\xf4\x6a\x10\x7a\x03\xc4\xd2\x58\x96\x8d\x91\xb3\xca\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf5\x89\x1f\xe8\xe6\x94\x7a\x0b\x7d\x81\x89\x43\xde\x6d\x76\x9d\x01\x58\x90\x3f\xaf\x35\xb6\xff\xb2\x4d\x57\x22\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3d\xf5\x0e\xb0\x3b\xf1\xea\x12\xc1\xb3\x3a\x62\x27\xdb\xef\x0b\xc2\xd6\xe3\xe5\xb6\x57\xd7\xe7\xdf\x65\x0f\xbf\x2a\x05\x92\x17\xd7\x5b\x73\xc0\x15\x8b\x72\xa6\x1f\xc2\x93\x83\x4f\x0a\x10\x04\x76\x15\xf1\xa6\xc5\x73\x93\x73\x7f\x04\xe7\x8e\x6f\x6b\x07\xeb\x5a\x6a\xa2\xb3\x5c\xa6\xae\x2a\x1c\xc2\x1b\xd0\x9f\xde\xdd\x77\xc9\x5a\x35\x47\xc5\xab\x77\x06\xf5\xce\xa0\x1b\xae\xcf\x3a\x83\xce\x71\x1f\x6e\xad\x27\x88\x89\x65\xd3\x10\xc6\xc6\x08\xba\xb3\x75\x42\x08\xb5\xbb\x05\xd4\xc6\xee\xa8\x97\xfd\x20\xcb\x14\x1a\x14\x68\xe9\xe6\x18\x26\x39\x80\x5e\xcd\x78\xf0\x61\x80\xb2\xec\x02\x4d\x1b\x8b\xf0\xc7\x96\x66\x0a\x1e\x22\xba\x02\x06\x09\x89\x8e\x90\x7a\xfa\x0b\x66\x82\x5e\x62\x72\xa8\x31\xd2\xb8\x28\x61\x34\xbd\x72\x58\x62\x2f\x53\xa5\x64\x84\x49\xad\xbe\x08\x00\x90\xdd\xec\xb4\x61\x36\xd0\x20\x3e\xcb\x59\xc4\x62\x26\x22\x66\x71\x99\x2b\xbd\x2f\xa9\x20\xc7\x62\xe9\xb0\xa9\x63\x57\x52\x02\x33\xd9\x3c\xc6\xf3\x4a\x40\x30\x1b\xd1\x06\xc1\x82\x3c\x04\xe0\xfa\x65\x36\x2b\xa4\x62\xc8\x59\xe9\x65\x6d\xd6\x1e\xaf\xb5\x14\x6f\x2f\x33\x7d\x64\xab\x95\x32\xb4\x26\x2c\x4b\xf7\x73\x55\x48\x3e\x87\x60\x60\x7b\xf1\xf9\x87\x13\x9d\x1d\x89\xcd\x6e\x44\xe6\x3d\x62\x27\x5d\x8a\xc9\x2e\x82\x25\x59\xce\x66\xfc\xba\xa3\x73\x7a\x20\x4a\x4f\x0c\x8f\x99\xd0\x7c\xc6\xb1\xc4\x24\xcb\x59\xc6\x04\x56\x09\xd0\x68\x01\xbc\xdf\x4a\xca\x32\x38\xbd\x8d\xc9\x3c\xa8\x70\x77\xcb\xca\xce\x37\x29\xfb\x3d\x1f\x23\x3d\x1f\x6b\x7c\x3d\x10\x1f\xb3\x3b\x77\x7b\x98\x18\x64\x9e\xb7\xcf\x79\x3f\xac\x62\xad\xd8\xae\xb4\xf7\xdc\x68\x65\xd9\xd1\x3e\x8c\xd2\xc8\x01\xdd\x6a\x3f\xc0\x63\x27\x45\x92\x74\x84\x4f\xbd\x7b\x02\xd4\xc8\x8a\x24\xb1\x65\xb9\x63\xf2\x4e\xc0\x91\x3c\x80\x3e\x08\x43\x72\xca\x96\x2c\x1f\x92\x93\xd9\xa9\xd4\x13\xd4\x6d\xab\xe9\x6c\x78\x23\xe1\x33\xf2\xca\x58\x4d\x4a\x13\x8d\x58\xf4\x01\x72\x8e\xcc\x2b\x03\x94\xa0\x5c\x2d\xd2\xd0\x6f\x5e\x96\x3f\xb9\x82\xc9\xd1\x23\x2d\x93\x6f\xf6\xd1\x81\x79\x6a\x47\x72\x09\x72\x90\x14\x69\xa3\x23\x9b\xaa\x5e\x9f\x20\x10\x45\x26\x95\x3e\x37\x56\x6c\x37\x8d\x60\x26\x6e\x38\xe8\xad\x40\x93\x84\xc5\x95\x4e\x40\xd8\xc1\x82\x56\xad\x68\xa8\xc7\xf5\x0d\x15\x18\x59\x50\x11\x27\x2c\x07\x50\x74\x55\x47\x7e\xe2\x65\x17\x00\xdf\xb7\xc1\x15\x68\xd2\x28\x92\x79\x6c\x3b\xb0\xda\x42\x49\x98\x8c\x3f\x5e\xc0\x6b\x53\x2a\xe8\x9c\x81\x67\x61\x0d\x5a\x17\x00\x97\x55\xd0\xfc\x61\x21\xe5\x25\x89\x64\x9a\x25\x70\x00\x5a\x9c\x8f\xb2\xf7\x8c\xdf\xa2\x23\x33\xba\xda\x0f\xda\xd2\xc0\x07\xed\xba\xd2\xb4\x52\x56\xba\x50\x55\xd8\x35\x8b\x3a\xeb\x5b\x77\x7c\xcd\xa2\xa0\xf1\xa2\x59\x12\xdb\x79\x51\x4b\xf0\x6d\xb4\xef\xa7\xdb\xda\x2d\xdf\x95\x2b\xbc\x45\x95\x59\x78\xd5\x80\xd6\x60\x4c\x87\x2b\x6d\x1f\x01\x10\xfd\x58\x55\x0c\x95\x67\x0e\x6a\xba\x72\x18\xf0\xe8\xad\xa1\xb3\xf9\x64\x63\x37\x16\xd4\x3e\x4b\xa9\xc9\xde\xee\xfe\xee\x60\xcd\x47\x57\x03\x27\xbe\x08\x7e\xc9\x01\x8d\x2f\x03\x68\x3b\x16\xed\xc6\x43\xc2\xb5\x63\xb6\x08\x0a\x00\xb3\xb2\xe5\x70\xd0\xa1\x5e\xe7\x34\xe6\xd6\x0a\x82\x4f\xcd\x4d\x3a\x2f\x2c\x22\xc0\xde\xee\xa7\xdd\x21\x61\x3a\x1a\x90\x2b\x29\x76\x35\x4c\x1f\xe0\x33\x0a\x15\x0c\xb4\x92\x05\x74\xa9\x43\x12\x78\x2c\x0c\xc3\xb1\x88\x2c\xb0\xa5\xcd\x82\x6a\x57\x86\x77\x7c\xcd\xb5\x6b\xe3\x20\x67\xe4\x05\x76\xd4\x61\xd4\x7a\x09\x13\xbe\x64\xfb\x0b\x46\x13\xbd\xc0\x44\x0a\x21\xc5\x08\x9b\xa2\x19\x56\x62\xbf\x69\x1b\x53\x68\xe7\x72\x0b\xaf\x16\xee\xb7\xf5\x09\xb5\xd4\xae\x0d\x13\xfd\xa1\x79\xa7\x56\xb2\xd6\xc4\xf8\xe2\x62\xf2\x43\xa5\x57\x2b\x70\x71\xad\x33\x97\xde\x12\xe0\x4a\x6c\x01\xef\xe8\x26\xa0\xd7\xaa\x69\x2b\xe9\x90\x85\xb5\x6d\xde\x4a\xd6\x9b\x52\xdf\xaf\x6b\x2b\xf9\x55\x16\xd0\x6d\x8e\x4e\x93\x15\xb9\xa2\x42\xbb\x52\xbc\x1d\x33\xd4\x8e\x61\x4f\x66\x37\xfc\xc8\x68\xcc\x72\x05\xdc\x83\xd1\xc6\xf8\x59\xee\xea\x2c\xd0\x14\xcc\xad\x5b\x39\x50\x28\x2d\x53\xb2\xb0\xaf\x5d\x2d\x4f\xb4\x27\x63\x0c\xa7\xc7\xd5\xfe\xe4\x2c\x43\x0e\x67\x7f\xf3\xec\xf8\xd7\x1a\xdf\x40\xba\x57\x70\xe6\xa3\x90\x6c\x61\x37\x12\x2e\x90\x58\xd8\x47\xb0\x23\x5e\xda\x41\x82\x00\xe9\x30\x49\x80\xb4\x2b\x76\xac\x0f\x04\x81\xaf\xf6\xf9\x50\x9d\xe5\x1d\x90\xce\x62\xeb\x64\x93\x23\xd2\xee\x19\xcc\x82\x45\x9f\x47\x05\x3a\x2e\xa2\x42\x0a\x1e\xd1\x84\xff\x87\xc5\xd8\x15\x17\x73\xcc\x40\xcf\x89\xa8\x62\x23\x08\x7c\x0a\xe4\x7f\x41\x9b\x57\x61\x8e\xa3\x96\x12\x94\x0f\x08\x75\x19\xfe\x88\xcf\x6b\x9f\xb9\x40\xba\x8d\x9b\x93\xf6\x45\x9b\xe1\x75\x3b\x99\xbb\xd9\x62\xa4\x4b\x0a\x64\x1d\x24\x59\xaf\xa7\x58\xaf\xf5\xec\x06\x66\x84\xa8\xb0\x5b\x23\xcb\xda\x36\x30\x27\x9b\x2b\x96\x73\x22\x7c\xbf\xd9\xa7\xd1\xc4\x9c\x74\x97\x0c\xd9\x75\x2a\x64\xa7\x89\x90\x5f\x34\x0d\x12\x8a\x2f\x5a\x73\x91\xaa\x17\x1e\x86\x34\x3b\xc0\x58\x87\xc6\xae\xb5\x1a\xa6\xf5\x21\xb9\x9e\x18\x55\xa7\xab\x39\x6a\x5b\x71\xc6\x74\x94\x9d\xcb\xe8\xb2\x43\xeb\xe9\x88\x65\x39\x8b\xd0\x1b\x77\x71\x38\xc1\xd1\x8d\x15\x7b\xfa\xee\xa2\x4c\xfa\x87\xcc\x98\xd2\x3d\xfa\xa3\xf5\xd7\x19\xcb\xf7\x92\x65\xda\x3b\x08\xa6\x34\xba\xbc\xa2\x79\x0c\xfe\x33\xaa\xf9\x94\x27\x5c\xaf\xc0\x05\x90\x33\xa8\x28\x10\x12\x53\xef\x10\x8a\x51\xba\x86\xaa\xbe\xdb\xb7\xf7\x94\x81\x1f\xce\x8a\xc0\x19\xe5\xc6\xea\xf7\x5d\x73\x31\x37\x27\xca\xbc\xe3\x30\xf4\x7f\xf7\x26\x9e\xbb\xb6\xd6\xc4\x0b\x3a\xc2\xde\xd7\xda\x6b\x9b\x21\xb8\xc5\xa2\xce\x8a\xb8\xdc\x37\x3c\xeb\x45\x5d\x47\xe3\x6d\xaf\xa8\xcb\x72\x76\xae\x65\xd6\x51\x2c\x06\x07\xbb\x21\x12\x33\x65\x33\x69\x98\xf0\x8d\xa1\x95\xb8\x60\x16\x94\xf3\x60\x72\xe2\x7d\x67\xb2\x12\x3e\xc1\xdc\x48\x87\xc4\x99\xf0\x25\x13\x4c\xa9\x7d\x08\xba\x14\x99\x6d\xfa\x6f\x7b\xdb\x0e\xcd\xdb\xb1\x14\x66\x37\x2c\xeb\x0d\x6c\x67\x5d\xf8\x90\xe9\x08\xfd\xc3\x01\x23\x87\xa6\x5d\x76\xfa\xf5\x60\x4d\x94\x53\xb5\xc0\xae\xb3\xec\x9a\x6b\xdb\x39\x79\x82\x48\xbd\x61\xf3\xdb\x79\x4e\x23\x46\x32\x96\x73\x69\x84\x51\x21\x74\x2c\xaf\x04\x99\xb2\x39\x17\xca\x91\x02\xb0\x36\x2d\xcd\x20\xea\xc3\x95\x07\x66\x1b\x93\xb3\x0a\xec\x88\x2d\x08\x8a\x64\x79\x34\xed\x9c\xeb\xf1\x2a\x90\x58\x40\x27\xec\xe1\xe2\x29\x1c\xb6\xb5\xf9\xdc\x94\xf7\x0a\x01\x4f\x8e\x59\x42\x57\x98\xf7\x09\x1d\xa9\xf9\x7f\x58\xae\x06\x1d\xc4\xb5\xb0\x31\x93\xfb\xee\xc6\x79\x00\xc8\x29\x8d\x16\xed\x02\xc5\x7d\x20\xec\x8e\x57\x1f\x08\x6b\x33\x48\x1f\x08\xeb\x03\x61\x9f\xb9\xfa\x40\x58\x1f\x08\xab\x5d\x5b\x6b\x25\xf5\x81\xb0\xc6\x57\x1f\x08\xbb\xfd\xea\x03\x61\x77\xb8\xfa\x40\xd8\x1d\xaf\x3e\x10\x76\xf3\xd5\x07\xc2\xda\x4d\xa6\x0f\x84\xf5\x81\x30\x7b\xfd\xf1\xbc\x83\xee\xea\x03\x61\x6b\x83\xf4\x81\xb0\x3e\x10\x76\xe7\x6b\x6b\x4d\xbc\x3e\x10\x86\x57\x1f\x08\xab\x5e\x7f\x2c\x51\xe7\xc2\x48\x13\x63\x50\xb6\x6f\x2a\x0c\x66\xa9\xe5\xb1\xcf\xb2\x84\xab\x4d\x94\xe1\x61\x22\x0c\x5b\x12\x8e\xe9\x20\xaa\xd0\x47\x14\x9e\x5d\x44\xa1\x1b\x6f\x5c\x07\x9e\xb8\xd6\x3c\xd9\x06\xda\x2f\x16\x39\x53\x0b\x99\x34\xde\xe8\x95\x4d\xfe\x96\x0b\x9e\x16\xa9\xd9\x73\xca\xec\x67\xbe\xf4\x11\x7d\x55\x76\x5a\x86\x40\x3f\x3a\x05\xcd\x8d\x3c\x66\x80\x22\x4a\x79\x62\x96\x11\x8a\x3e\x17\x74\x69\xf6\xba\x2a\xa2\x88\x31\xe8\x51\x16\x9a\x12\xdf\x8c\xfd\x93\x7c\x4f\x8a\x97\xed\xf8\x4d\x3b\x69\x89\x38\x9f\x30\xca\x37\x5f\x37\x1a\x63\x9e\x67\xdd\xf0\xe5\x1f\xce\x26\x87\x01\x5f\xa6\xc2\xb1\x65\x2e\x96\x32\x59\x62\x27\x5b\xb8\xc9\x68\x45\x8f\xc8\xa4\xdb\xeb\xf7\xad\x74\xfb\x2e\x64\x44\x5b\xf5\xb5\xaa\x7b\x18\x25\xb5\xea\xa2\x99\xc3\x5a\x22\x9c\xfc\x9d\x95\xd4\xd6\xdc\xad\xbd\xe2\xd8\xfe\x38\x10\xc0\x7b\x81\x17\xef\x8c\xc0\x3b\xb6\xcf\xb7\x13\xc1\xa1\x85\xe0\x5a\x2c\x69\x49\xb2\x84\x96\x4d\x92\x60\x05\x7e\x04\xb9\x71\xb8\x60\xd1\xe5\x99\x0d\x86\xee\x29\xc6\x7c\x26\xcb\x9c\xeb\x45\x31\x1d\x47\x32\xdd\x37\xc7\x18\xff\x6f\x9a\xc8\xe9\x7e\x4a\x95\x66\xf9\x7e\x2c\x23\x2b\x96\x46\x91\x19\x85\x8b\xf9\x38\x8d\x07\xd0\x86\xf7\xa4\xda\x94\x31\x80\x62\x30\xcf\xb7\x06\x1c\x99\x32\xc3\x11\x25\x18\xe9\x01\x9e\x9b\x99\xde\xbd\x1b\xe7\x86\x57\x6b\x31\xd2\x32\x10\xfd\xf0\x41\xe8\x9e\x73\x91\x0e\xbc\x11\x4f\x2d\xd8\xdc\x59\xd2\x45\x07\x41\xe6\x2d\x0a\x30\x6f\x8d\x3a\xbb\x2d\x41\xe5\x2d\x84\x5e\xee\x20\x90\xdc\x45\x10\xb9\xbb\x00\xf2\x17\x40\x28\x7e\xca\x81\xe3\x0e\xbd\x6b\x1d\x05\x8c\x1f\x22\x58\xdc\xc9\x5b\xb7\x0d\x12\x3f\x5c\x80\xb8\x9b\xd7\xed\xd2\xdc\x78\xaa\x41\xe1\x0e\xbc\xe4\x5d\x7a\xc8\x3b\xf3\x8e\x7f\xb1\x20\x70\xfb\x00\xf0\x16\x04\x7f\x5b\x13\x99\x0b\xae\x39\x4d\x8e\x58\x42\x57\xe7\x2c\x92\x22\x6e\x2c\xc7\x6a\xc0\x98\xfe\xfc\x28\x1c\xd6\x7a\xb0\xaa\x15\x15\x0b\x6a\xf1\xbf\x8d\xdd\x86\x15\x24\x2e\x72\x61\xd5\x16\x08\x3a\xe0\x2c\x9b\x40\xeb\x5d\xc9\xfc\x32\x91\x34\x56\xfb\x99\xc4\xff\x2b\xeb\x25\x82\x42\x09\x7c\x56\xbb\x4a\x89\xc7\x76\x95\x61\x79\x49\x97\x8b\xf8\xa3\xbc\x22\x72\xa6\x99\x20\x7b\x5c\xb8\x75\x1c\x04\xc6\x66\xe9\xb7\xf4\xdb\xda\x7c\xfb\xf2\x85\xbb\xf9\xf9\x39\x24\xc1\xf5\xaa\xd4\x97\xf7\x0f\xdb\x07\x7d\xde\x41\x6c\x6f\x9c\x15\x49\xd5\x49\x8c\x8e\xe3\x2a\xbf\x79\x59\x22\x18\xbf\x84\x71\xfd\x69\xa3\x22\x26\xb6\xe4\xec\xf9\x2d\x5a\xeb\xd4\x96\xaa\xea\xe7\x53\x59\x3e\xe7\x4f\xbe\x38\x9c\xf4\xee\xe4\xed\x72\xca\x3c\x52\x7a\xc8\x16\x2a\xba\x4f\x34\x25\xa4\x57\x74\xef\x71\x05\x45\xa8\x3f\xe4\x34\x62\x93\xce\x75\x04\x77\x9c\x48\x5c\xe4\xd4\x32\x40\xaf\xf2\xb9\xc3\x23\x18\x8b\xf1\x34\xf9\xc2\x5d\x28\x89\x9d\x15\x49\xb2\x42\x9f\x43\xa5\xcc\x19\xa3\xf0\xf5\xaa\x59\x70\xfc\x6f\x78\x4a\xa9\x58\x66\xb9\xb4\x32\x33\x2f\x84\x30\x3c\xb8\x6c\x43\x06\x8a\x24\x60\x37\xd3\x4a\x6d\xae\xe2\x73\x33\x7d\x23\xff\xa0\x6c\xb7\xcc\x01\xac\x0c\x68\x7e\x3d\x93\x79\xc4\xa7\xc9\x8a\x2c\x68\xe2\x7b\xce\x50\x72\xc9\x93\xc4\x0e\x33\x26\xe7\x4c\x63\xe0\x02\x65\x67\x22\xc5\x1c\x26\x47\x85\xeb\x75\xc8\x22\xf3\xdb\x28\x61\x54\x14\x19\x3e\xcf\x48\xe2\x95\x2c\x72\xf7\xbc\xb1\x0f\x7f\x78\x09\x2c\x78\x32\x0c\x3a\xaa\xdd\xba\xb0\xa5\x8b\x46\x19\x05\xe0\x9d\xc3\xaa\x1e\x86\x63\xca\x25\xcb\x73\x1e\xdb\x68\x02\x7e\x96\xe5\x72\xc9\x63\x8c\xa1\x38\xb2\x41\xef\x66\xec\x99\xe3\xcf\xb3\x90\x62\x24\xd8\x9c\x82\xa2\x62\x4f\x11\xae\x19\x8e\x83\xb9\x05\x22\x86\x2e\x3a\x46\xc3\x97\x59\xa5\x6e\x7e\xc9\xb1\xff\x6f\x40\x39\xb2\x27\x24\x91\x90\x12\x5a\x08\xae\xb1\xa7\xfc\xa2\xd0\x24\x96\x57\x62\x60\x7d\x56\x5c\x11\x4a\xa6\x4c\xd3\x20\xa9\xd3\x0a\x38\x45\x98\xa0\xd3\xc4\xac\x39\x64\x2b\x5d\x6c\x24\x10\x99\x31\xaa\x8b\x9c\x91\x39\xd5\x6c\xa3\x9e\x83\xef\x7b\x3b\x79\xb9\xb2\x0e\xd6\x19\x29\x84\x62\x2d\xc5\x7b\x67\xca\xd1\xdf\xff\xda\x8c\x47\xf0\x94\xc9\x42\x3f\x88\xf5\x77\xb5\xe0\xd1\x22\x54\x66\x79\xca\x14\x91\x45\xcd\x2c\x7e\x69\x7f\xb6\x79\x85\x7a\x13\x70\xd3\xd5\xd4\x7d\xbc\xc1\xfb\x65\xdb\xb2\xae\x67\xf6\x05\x6d\xa7\x21\x69\xfb\xe8\xf4\xfc\xf7\x37\x07\xff\x3a\x7e\x63\xcf\xa7\x08\x85\x7e\x21\xf8\xbf\x0b\x46\x68\x2a\x8d\x2e\x9c\x84\x09\x82\x43\xb0\xe8\x83\x0f\xe0\x24\x77\x9b\x4a\xd8\x50\x20\x43\x8f\xfc\xf6\x09\x93\xd0\x69\xff\xcb\xe7\x4b\x3e\x76\xef\x30\xdf\x95\x02\xb2\x34\x82\xde\x61\x94\x08\xa6\xcd\xc9\x43\x8d\x12\x7b\xc9\x71\x31\x4f\x42\x65\xb2\x19\xbb\x6a\x6b\x13\xb5\xb5\x88\x46\xe5\x1b\x4c\x9a\x1a\x46\x9d\xf4\x30\x2b\xe7\xd0\x51\xe7\x9f\x92\x6b\x3b\x33\x00\x5b\x33\x3b\x33\x00\x55\x8f\x93\x09\xa1\x71\x9c\x83\x9a\x02\xa7\x3e\xad\x75\x00\xcd\xca\x8c\x9d\x21\x79\x41\xbe\x23\xd7\xe4\x3b\x30\x0b\xfe\xde\xb6\x4f\x52\x5b\x85\xbd\x8b\x04\x1c\x63\x8d\x9e\x4c\x3a\xa2\xf8\x2f\x0b\xaa\x61\x44\x43\x55\x2d\xc9\x94\x5b\x35\x94\x5d\x6b\x96\x1b\xb5\xc8\xae\xc4\xa3\x76\x98\x32\x13\x7c\xc0\x6d\x86\x6e\xf2\x93\x59\x35\xe9\xe7\x7e\x1b\xcd\xfc\xdc\xd8\xf7\xa7\x96\x0b\x55\xbb\xb9\x94\xa3\xa5\x54\x47\x8b\x2a\x1b\x33\x0a\x86\xaa\x08\xa7\x58\x02\x1b\xc7\x84\xdc\x05\x6f\x91\x5a\xb0\x3d\xdb\xb8\x5d\xb4\xb9\xb2\x9e\xb7\xad\x54\xcd\xf0\x07\x39\x6f\x15\x83\x00\xba\x29\x93\xf1\x98\x1c\xd3\x68\x01\xd3\x8a\x03\x99\x61\x2c\x10\x18\x6c\x41\x97\x66\xe1\xed\x6f\x31\x8e\x0d\xda\x8a\xf7\x8e\xc2\x5e\x32\xe7\x29\xa2\x02\x5b\x90\xce\x58\x9e\x63\x0e\xf5\x74\xe5\x52\xd9\x5a\x2f\x5e\xab\x93\x94\xe5\x52\xcb\x48\xb6\x68\x82\x55\xaf\xcb\x80\xe1\x80\x08\x19\xee\x5d\x4b\xf9\xf7\x47\x93\x21\xb9\x38\x9c\x40\xeb\xa2\xf3\xc3\x8b\x49\x55\xc3\xde\xb9\x38\x9c\xec\x3c\x2a\x29\x88\x73\xb3\x81\x43\xb5\xc1\x20\x15\x87\x49\xc2\x95\x1e\xa5\x34\x1b\x5d\xb2\x55\x43\x99\xda\x85\x5c\x1f\xf9\x15\xee\xe4\x85\x90\xcc\x29\xcd\xee\x3d\x5a\xce\x68\xcc\xfb\x02\xa0\xbb\x5f\x7d\x01\xd0\x1d\xaf\xbe\x00\xa8\x2f\x00\x5a\xbf\xb6\x26\x63\xb2\x2f\x00\x7a\x5e\xa1\xdb\xbe\x00\xe8\xfe\xd7\xa3\x47\x6c\xfb\x02\xa0\xcd\x57\x5f\x00\xd4\x17\x00\xdd\xed\xea\x0b\x80\xee\x7f\x6d\x5d\xae\x49\x5f\x00\x74\xaf\xab\x2f\x00\x5a\xbf\xfa\x02\xa0\x1b\xae\xbe\x00\xe8\x86\xab\x2f\x00\x5a\xbf\xfa\x02\xa0\xfb\x5d\x7d\x01\x50\x5f\x00\xf4\xac\xf3\x22\x49\x5f\x00\x64\xaf\xbe\x00\xe8\x59\x64\x7f\x91\xbe\x00\xe8\x4e\x57\x5f\x00\xd4\x17\x00\x35\xb9\xfa\x02\xa0\xe7\xe2\x94\xe9\x0b\x80\xfa\x02\xa0\x3f\x8e\xa2\xdb\x17\x00\xf5\x05\x40\x7d\x01\x50\x5f\x00\x74\xeb\x2c\xfa\x02\xa0\xe7\x60\x02\xe6\x4c\xf1\xff\xb0\x89\x4c\x78\xb4\x6a\x9d\xf0\x77\x66\x5b\xcb\x2a\x3b\x2c\xc9\x60\xdc\x20\xb5\xaa\x45\x11\xc7\x96\xd5\xae\x9c\x05\x84\x0b\x6b\x58\x7c\x7b\xdd\x2f\x40\x82\xad\xa8\x63\x71\x2f\x78\xda\x3c\x92\x02\x83\x18\xab\x11\xc9\xd7\xcc\x6f\xd1\xda\x44\x08\x5f\xa4\xa3\xd4\xea\xdd\xb0\x14\xce\xef\x04\x2d\x3d\x07\xe3\x37\x6e\x10\x9a\x65\x09\x67\x6a\x4c\xce\x7d\x8b\x13\xe0\x5e\xea\x15\x89\xb2\x62\x48\x52\x96\xca\x7c\xd5\xc2\x9a\xe8\x40\xe1\xac\xac\x5a\x47\x24\x3b\xc3\x31\x1d\x19\x8c\x11\x91\x65\xc9\x0a\x95\xa9\xb2\x72\xd0\x53\x8d\x3b\xe6\x12\x83\xba\x53\xcb\xf2\xe0\xba\x62\x86\x9d\x4a\x7d\x66\x37\xfc\xa3\xa5\xad\xdf\x94\xa0\x4d\xb5\x4c\x79\xd4\x84\x61\x23\x8f\xed\x90\x5b\xdf\x39\x43\x9b\x1c\x6f\xf8\x14\x5c\xd7\x2a\x33\x83\xe4\xe5\x90\x49\xce\x68\xbc\x82\x21\xa1\x99\x4f\x60\x15\x3f\xc1\x44\xef\x28\xa1\xbc\x79\x54\xbe\x9a\x38\x75\x08\x63\x11\xb3\x15\xca\xd4\x29\xc8\xc0\xf5\xe4\x1b\xfa\xb4\x24\x8e\x87\x60\xec\xbe\xc2\x1f\x0f\x31\x8f\xd7\x90\x1c\x54\x4a\x50\xbc\xb9\x0a\x2d\xee\x8f\xa2\x54\x7e\x05\xa1\x49\xb6\xb8\x5d\xfd\x35\x13\x39\x5a\x09\x9a\xf2\xc8\x6d\x8c\x03\x5c\x3b\x63\xee\x54\x15\x60\x37\x36\x8e\x67\x1e\x92\xa6\x85\xa6\xd3\x84\x8d\xc9\x09\x96\xd2\x48\x01\x9d\xee\x21\xff\xc2\x86\x35\xdc\x26\x6a\x9a\x61\xd5\x3e\xbd\xa2\x65\x6a\xc5\xc6\xd3\x03\x0b\x82\x65\x43\x4c\x98\x9d\x2f\x05\x23\x4c\xe8\x7c\x65\xd6\x6e\x22\xe3\x73\xb3\x7c\x95\xbb\x5b\x57\x13\xb5\xcc\xa8\xe8\x22\x9b\xa2\x65\x26\x45\x37\xf9\x0f\xed\x73\x1f\xd6\x83\xb8\x41\x81\x5f\x98\xd6\x58\x59\x55\xc3\xc3\x36\x9c\x4a\x27\xf8\x27\x32\x36\xe2\x2b\x67\x61\x2b\x31\x6b\xfd\xc1\x01\x49\xe9\x25\x18\xd0\x54\x97\x72\x8d\x2e\x29\x4f\xcc\x11\x2a\xcb\x03\x5a\xea\x8a\xee\xea\x40\xf0\x77\x5d\x35\x45\xda\xee\xa0\x2e\xab\x9e\x08\x74\x3e\x4a\x79\xb3\x0a\x7e\xb2\xa6\x03\xbe\x81\xb1\x82\x64\x2b\xb3\x27\x52\x7a\x0d\x16\x29\x4d\x65\x21\xb4\xd9\x29\x91\x4c\xb3\x42\x57\x65\x26\x88\xdf\x7b\x9b\xaa\x91\x14\x33\x3e\xb7\x2e\xae\xfd\x94\x0a\x3a\x67\x23\x3f\xec\xa8\x64\xbd\xfb\xed\xec\xd4\x56\x6c\x87\xc6\xae\xc0\x65\xd2\x45\xae\x38\xd5\x9a\xe5\xe2\x15\xf9\xaf\xbd\x8f\x5f\x7d\x1a\x0d\xbe\xdf\xdb\xfb\xf0\x62\xf4\x8f\xdf\xbe\xda\xfb\x38\x86\x7f\xfc\x65\xf0\xfd\xe0\x93\xfb\xe3\xab\xc1\x60\x6f\xef\xc3\x4f\x6f\x7f\xb8\x98\x1c\xff\xc6\x07\x9f\x3e\x88\x22\xbd\xc4\xbf\x3e\xed\x7d\x60\xc7\xbf\xdd\x71\x90\xc1\xe0\xfb\x3f\x37\x9e\x72\x6b\x0f\x74\x77\xfe\xe7\x8e\xbc\xcf\x5f\xc4\xf7\x6c\xb3\x34\x3b\x3a\x8b\x36\xc3\x7c\xed\x34\x5a\xff\xd0\x6d\xa7\xd1\x49\x49\x30\x33\xfc\x38\x5c\x11\x99\x72\xad\xad\x96\x4c\xc3\xba\xb2\x9a\xf1\x61\xf9\x00\x9f\x21\xa7\xe7\x2a\xac\xc9\x0a\x6c\x16\xe9\x1c\xad\x60\xfc\x08\xc2\xd3\x2c\x61\x29\x13\x1a\xce\xf3\xc8\x69\x82\x60\x0d\x8e\xcb\x99\x44\x54\x18\x9d\x9d\x5d\x47\x8c\xc5\xf6\x61\x3d\xeb\xf8\xfc\xd5\xb3\x8e\xe7\xc8\x3a\x14\x8b\x8a\x9c\xeb\xd5\xa1\x14\x9a\x5d\x37\x8a\x77\xde\x14\xf0\x3d\xaf\x0e\x6d\x4d\x33\x9b\xbb\x6a\xbf\x23\x32\xc3\x4a\xcd\x1b\x31\x90\x16\xb2\x48\x62\x40\x18\x28\x04\x84\x80\x10\xac\x82\x69\x8c\xcf\x80\x92\x08\x1a\x64\xfd\x71\x2e\xe2\x82\x43\xff\xbb\xe0\x4b\x9a\x30\xa1\x83\x5f\x4c\x20\xc6\x10\xfe\xa8\x91\x9b\xe8\x91\x4d\x6c\xd0\x7e\x26\x39\x5f\xf2\x84\xcd\xd9\xb1\x8a\x68\x02\x5c\xa9\x1b\x41\x70\x70\xc3\xe8\xb0\x44\xb9\x4c\x94\xd1\xd8\x0d\x23\x26\xd4\x85\xd3\xc0\x8e\x9d\x53\x2e\x48\x6a\x98\x6a\xe6\x7e\xac\x30\x2e\x67\x78\x7b\x46\x73\xb3\x14\x3e\xfe\x06\x56\xf1\x54\xca\xc4\xd6\x15\x27\xab\x72\x7c\x8e\xc6\x81\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xec\x66\x4c\xe5\x7a\xe4\xbc\x1c\xfa\xc6\x17\x80\xa2\xdd\x82\x11\x9a\x5c\xd1\x95\x2a\x83\x90\xe5\x18\x5c\xbd\x22\x2f\x07\xb0\xf1\xa8\x22\x7e\x8c\x98\x7c\x3d\x80\x54\xba\xc3\x83\xc9\xef\xe7\xbf\x9e\xff\x7e\x70\xf4\xf6\xe4\x94\x9c\x4a\xcd\x50\x62\x05\xd6\x8b\x15\x36\x76\x96\xde\x37\x37\x96\x6a\x0c\x16\x12\x64\x86\x8b\x58\x5e\xa9\xc6\x1e\x4a\xdc\x7e\x86\x78\x8c\x8a\x66\x4e\x1a\x9a\x51\xe8\xef\xdc\x42\x3e\xac\x65\x6b\x87\x83\x82\x80\x8e\xe3\xfd\x38\x97\x19\x12\xc1\x05\x8c\x43\x1f\xd9\x51\x2d\x0f\xc4\x55\x9d\xc1\xfa\xce\xaa\x03\xce\x73\x2a\x74\x19\x39\x2d\xd7\xcc\x36\x96\x1e\xb7\x5e\x8e\xc7\x13\xdb\x5d\xd8\xf8\x34\xee\x0e\x33\xe0\x20\x8e\x59\x5c\x21\xff\xb3\xab\xf5\x39\x74\x2f\x17\x84\xa4\xc8\xe4\xdd\xf9\xc9\xff\xad\xed\xe3\x55\xd6\xae\xe8\xa0\x1b\x28\x97\x5c\x66\x9d\xad\xee\x19\x4b\xe5\xb2\x5f\xdf\x6d\x59\x5f\x2f\x2d\xbb\x49\x75\x3d\x2b\x44\x28\xd0\x44\x30\x3e\x49\x65\xcc\xc6\x64\xe2\x73\x6e\xaa\xdf\x86\x70\x91\x39\x23\xe6\x16\xa1\x39\x4d\x92\x55\xa8\x4c\x69\x89\x58\x1f\x15\x30\xb1\x90\x91\xcf\x68\xa2\x1e\x9b\x1b\xb7\x91\x8d\x46\x8f\x78\x6b\x8c\xdd\x4e\x96\xc3\x8f\x46\x62\x26\xa4\xb6\xca\xb0\x99\x25\x00\xb4\xe5\x32\x22\x68\x59\x07\x85\x0d\x15\xf9\xa6\x30\xef\xc7\x89\x46\xae\x1c\xb1\x27\x7e\x64\x0c\x99\x16\x8a\xa9\xcd\xa2\xb1\xb4\xb5\xcd\xe8\x39\xa3\x31\xc4\x1c\x32\xaa\x17\x98\x97\x9c\x52\x75\xc9\x62\xfc\xc0\xaa\x66\x3e\xec\x01\x6e\x5a\xf7\xa8\x0b\x33\x6f\x17\xe1\x00\x95\x0c\xb3\xa5\x21\x36\xc2\xe2\x47\x5e\xf5\x16\x87\xd0\x10\xe5\x9d\x48\x56\x67\x52\xea\xd7\x1e\xac\xa6\x93\x1d\xf0\x8b\xd5\x96\xab\x61\x27\x50\x27\x29\x3c\x77\x04\xab\x01\x87\x2a\xc4\xc9\x39\x2a\x57\xfc\xa9\x1f\xa9\xbc\x10\x07\xea\x87\x5c\x16\x8d\x85\xd8\x9a\xb2\xf9\xc3\xc9\x11\xb0\xa2\xc2\xa6\xfd\x09\x9d\xaf\x32\xc9\xd1\x45\x75\x83\x61\xf0\xde\x26\x2e\x86\x67\xa2\xcc\x31\x23\x6f\xe9\x8a\xd0\x44\x49\x47\x4b\x1b\x94\xaa\xd9\x8b\xc4\x1a\xa3\xe6\xeb\xa9\xd4\x8b\x35\x2b\xd4\x1c\xa8\xf5\xdf\x0d\x83\x2c\xc0\x32\x56\xcf\xc5\xda\xcf\x35\x44\x3c\xb2\x9c\x45\x2c\x66\x22\x7a\xec\x65\x7f\xec\xe4\x39\xd8\x3a\xa7\x52\x98\x83\xd9\xc9\xe6\x39\xf1\x59\x93\x96\xa4\xe1\x56\x81\x90\x96\xb5\xfe\x28\x64\x61\xc2\xb1\x2c\x14\xcb\x31\x65\x34\x2f\x18\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\xb8\x4c\xaa\xd1\xf1\xc0\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\xc8\x35\x89\x25\x2b\x31\xae\xa8\x22\xef\x4f\x8e\xc8\x0b\xb2\x67\x9e\x35\x80\xfd\x33\xa3\x3c\x81\x04\x4d\x48\xf8\xa8\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\xa8\x08\xe2\x26\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x2e\xd2\xee\x5c\x2d\xe7\xc7\x30\x2c\xec\x21\xa0\x3a\xac\x3a\x26\xc6\xf9\xfc\xa1\x20\xc5\xe5\xa4\xb2\x57\x86\x37\xa8\x89\xc0\x27\x5c\x1a\x92\x51\x4e\xa8\x88\x65\xba\xf6\x30\xc8\x79\xa2\xd1\x22\x7c\x40\xbf\xfb\xaa\xd7\x96\x38\x85\x12\xb6\x64\x2d\xc0\x70\x6b\x3b\xef\x8d\x19\xcd\x10\xc7\xed\x08\x18\x9e\x24\x74\xca\x12\x9b\x66\x85\xa9\x99\xeb\x3b\xf0\xb1\x2b\xbb\x72\x99\x74\x57\x8a\x7e\x26\x13\x86\xa5\x12\x8e\x10\x66\xf8\x27\x41\x07\x18\xa4\x2b\x3a\x80\x35\x58\xa1\x03\xd8\xb5\x4f\x81\x0e\x45\x0b\x51\x4f\xea\x74\x30\x7a\x43\x95\x0e\x20\xbc\xb7\x9d\x0e\x8a\x45\x91\x4c\xb3\x49\x2e\x8d\xd9\xd9\x99\x6c\xb2\xc3\x96\x71\x3e\x74\x6c\x6c\x48\xbc\x04\x59\x50\xbd\x99\xe6\x41\x91\x14\xd5\x28\x24\x5c\xa5\xd4\xff\x0a\x64\x16\xb0\x9e\xba\x20\x73\xa3\x54\x02\x81\xe6\x97\xf6\x8b\xa7\x2c\x0e\xba\xa8\x33\x6e\xe1\xec\xec\x44\x1a\xc9\x88\x26\xd0\xec\xa0\xdd\x96\x23\xf5\x6d\x57\x1f\x38\x28\x8d\x83\x18\x25\x7c\x16\xe4\x09\x53\x70\xb4\x38\x17\xa6\x90\x31\x0b\xa2\xce\x98\x7b\x78\x81\x25\x54\x70\x9f\xab\xca\x33\x7a\x85\xcd\x02\x61\x71\xe5\xd7\x5a\x5a\x9c\xe1\xb7\xbe\x85\x82\x99\x20\x13\x31\x17\x73\xf0\xab\x0d\x49\xce\x12\xac\xe7\xb3\x4c\xe0\x12\x2d\xc8\x5d\x38\x12\x6e\x50\x77\x1e\xdc\xa3\x5d\x5a\xb1\x1d\x39\xcc\x15\xe6\x33\x64\xb7\x5c\x91\x9d\x37\x8e\x00\x2d\x30\xe7\xb7\x51\xc2\xec\xe0\x1b\xfa\xd5\x44\x4f\xe7\x25\x17\xb1\x2d\x7d\xab\x10\xcb\xd9\xb9\x56\x0f\x86\xa2\x4a\x1e\x87\xbc\xe5\x15\xf9\x28\x88\x27\x16\x19\x35\xde\x1e\x67\xa8\x32\x3b\x1f\xdd\xe8\x76\xc7\xab\x7f\x48\x7d\x98\xf7\x02\xd6\xde\x3c\x77\x64\x2c\xf7\xf5\xfb\xdc\xbb\x3c\x2a\xd8\xa6\xe5\x7e\x5d\x5b\x31\xbf\xe0\xb0\x4e\xa5\x8f\xcc\xb6\xd6\x5c\xcc\x55\x68\xc9\x54\x3b\x5b\x6d\x36\x65\xdc\x0a\xcf\x72\x99\xba\xbc\xe2\xba\x69\x50\x2d\xd9\x7d\x2a\x66\x48\x62\xd4\x89\x27\x6e\x84\xcc\x53\x45\x0f\x73\x43\x09\xcd\x69\x72\x9e\x35\x6f\x04\x40\xd6\x40\xa7\xdf\x9e\x1f\x54\x87\x06\x61\x6d\x33\xca\x19\x7c\x4f\x68\x9c\x72\xa5\xc0\x11\xc6\xa6\x0b\x29\x2f\xc9\xde\x06\x04\xdd\x20\xcb\x4a\xf1\xb9\xda\xb7\x7b\x7e\x64\x66\x3f\x20\x5c\x24\x3e\x93\x09\xec\x60\xa1\x7d\x12\x3b\x3c\x24\xf2\xb3\x80\x35\xb4\x8d\x56\x6c\xb2\xc2\xfa\x34\xb1\xb5\x8a\xd9\x05\x8f\xce\xb0\xd7\x97\xa7\x5d\x99\xdf\x67\x97\xe8\xd4\xee\xed\x3a\x16\xf2\x46\x3a\xa2\xf6\xf8\xe8\x44\xb2\xca\x45\xc4\x54\x77\x10\xac\x3f\x96\x63\x92\x98\x61\x45\x3c\x83\xec\x27\x7a\x63\x3a\x1c\xf8\xa5\x77\x01\x58\xc5\xfe\x74\x37\xd4\xa8\xab\xb5\x46\x50\xca\x34\x42\x23\xdd\x70\x34\x60\x81\x4e\x85\x58\x48\x21\x73\xdc\xa2\x46\x88\x4a\x01\x5b\x1a\x58\x14\x46\xf3\x60\x4d\x2c\x8b\x0e\xa6\x7a\x58\x46\x89\xc3\x40\x20\x00\x33\x20\x16\x5b\x39\x87\x2b\xae\x17\xd0\x4d\x61\x51\x8b\x1a\xc2\x4c\x72\xa6\x20\x00\x23\x08\xcb\x73\x99\xdb\x84\x2c\xe7\xb7\xb6\x85\x56\x13\x19\x43\x46\x97\xd9\x24\xd4\xfc\xb5\xab\xc2\x40\x75\xd9\xbb\xc8\xe3\x63\xb2\xd9\x8c\x45\xa0\x68\x85\x04\x46\xae\xbd\x57\xb6\x97\x70\x15\x7c\x5a\xba\xde\x47\x29\xbf\x36\x4f\x09\x7f\x55\xeb\xa0\x28\xa4\x18\x6d\xfe\x7a\x30\x26\xe4\x44\xf8\xfc\xdb\xa1\x59\xc5\xf0\x4e\x97\x7a\xa6\xcd\x2b\x86\x8d\xb3\xe0\x05\x42\xc7\x99\xd1\x0e\xf3\xa2\x83\x1d\xdf\xc6\x1d\x4e\x42\x97\x78\xa7\xec\x00\x5c\xe3\x76\x50\xb3\xf4\x4e\x07\x68\xe3\x2a\x37\xb7\x7c\x29\x77\xf9\xd3\x08\x80\x90\xb6\x7c\xce\x22\x93\xf5\xdd\x8c\xee\x76\xf5\xdd\x8c\xee\x78\xf5\xdd\x8c\xfa\x6e\x46\xeb\xd7\xd6\xa4\x0c\xf6\xdd\x8c\x9e\x17\x0e\x65\xdf\xcd\xe8\xfe\xd7\xa3\xc3\x4f\xf6\xdd\x8c\x36\x5f\x7d\x37\xa3\xbe\x9b\xd1\xdd\xae\xbe\x9b\xd1\xfd\xaf\xad\x03\xce\xed\xbb\x19\xdd\xeb\xea\xbb\x19\xad\x5f\x7d\x37\xa3\x1b\xae\xbe\x9b\xd1\x0d\x57\xdf\xcd\x68\xfd\xea\xbb\x19\xdd\xef\xea\xbb\x19\xf5\xdd\x8c\x9e\x35\xc8\x3b\xe9\xbb\x19\xd9\xab\xef\x66\xf4\x2c\xa0\xac\x49\xdf\xcd\xe8\x4e\x57\xdf\xcd\xa8\xef\x66\xd4\xe4\xea\xbb\x19\x3d\x17\xa7\x4c\xdf\xcd\xa8\xef\x66\xf4\xc7\x51\x74\xfb\x6e\x46\x7d\x37\xa3\xbe\x9b\x51\xdf\xcd\xe8\xd6\x59\xf4\xdd\x8c\x9e\x83\x09\xa8\x74\xcc\x1b\x01\x46\xde\x05\xdb\xc6\xe6\x2c\x07\xa5\xe4\xd3\x62\x36\x63\x39\x70\x2e\x78\xf2\x5a\x5a\x55\x09\xe3\x57\x0f\xe5\x32\x3d\x04\x98\x1c\x5b\xde\x71\xc3\xcf\x6d\xed\x3a\x00\x3b\x96\x89\xc5\xc7\xef\x5e\x6f\x00\xd2\x69\x9c\x6f\xd8\x34\xa5\x16\xe6\xfc\x4e\x34\x8b\xc2\xdf\x40\xf0\x4d\xe5\x46\x96\xee\x51\x22\x95\x4d\x88\x06\x62\x45\x0b\x2a\x04\x73\xf6\x1e\xd7\xe0\x47\x99\x32\x26\x88\xcc\x98\x8d\x81\x53\xa2\xb8\x98\x27\x8c\x50\xad\x69\xb4\x18\x9b\x27\x09\x47\xec\x32\x79\xd9\x7e\xa2\x74\xce\x68\xea\xd2\xb8\x53\xca\x71\x28\x42\xa3\x5c\x2a\x45\xd2\x22\xd1\x3c\xf3\x83\x11\xc5\xa0\xfe\x02\x05\x95\x27\x06\xe4\xcb\x95\x19\xcf\xc3\xf2\x69\x76\x5a\x32\x44\x32\x03\x6b\x73\x08\xd8\xd0\x69\xa6\x57\xc4\xbc\x72\x62\x01\x61\x73\xa5\x49\x94\x70\x90\xd6\xf0\x44\x2c\xb5\x85\xf1\x86\x4e\x56\x0b\x3b\x53\x65\xa7\x2a\x62\x50\x5b\x33\xad\x08\x24\x08\x97\x03\xda\xa1\x62\xae\xac\x9a\xaf\x86\x84\x3a\x98\x2d\x24\xb4\x9b\x29\x90\xda\x49\x16\x1c\xdd\x7e\x14\x0c\x17\xc0\x8b\xba\xc6\x40\xb6\x06\x09\x73\xe5\x13\x3a\xf7\x9b\x73\x58\x49\xfe\x2f\x15\x0a\xdb\x02\xa1\x76\x0c\x60\x01\x04\x5b\x9a\x3d\xc0\x22\x66\xe4\x2b\xbd\x61\xd7\x3f\xf8\xa6\xd7\x34\x9f\x33\xed\xcb\x05\x9a\x66\x91\x57\x93\x4f\x42\x20\xe0\xd0\x10\x29\x49\x06\xd4\xb1\xcd\x44\x82\x8a\xab\x4d\x48\xc3\x38\x43\x0b\xb0\xb6\xe9\x06\xa7\x18\x61\xf2\x66\xd9\x81\x26\xa3\x11\x53\x64\xef\x64\x72\x38\x24\x93\x93\x23\x9b\xa1\x29\x67\x9b\x2a\x9c\x2d\x0f\xc3\x1d\x78\x13\xe6\xb1\xc7\x6e\x0b\x86\x0f\xaa\x42\xed\xb3\x27\x5e\xbf\x82\xb6\x32\x9b\x38\x00\xa8\x5c\x1e\x16\x9d\x28\xec\x90\x65\x7d\x42\xdc\x97\x6c\xd8\xcd\xc7\xca\x42\x45\x87\x48\xe4\x7e\xe1\x27\x62\xa9\x64\xeb\x31\x5c\x44\x1d\x18\x2c\xc8\xeb\xb5\xa2\x0f\x48\x12\xb5\xd9\x35\x8d\xb2\x6a\x5a\x59\x48\x81\x2a\xf6\x96\x29\x45\xe7\x6c\xd2\x30\xbc\x75\x93\x1f\x00\x22\x5c\x25\x3b\x00\x06\x94\x54\x5a\x97\x85\xd9\xc2\x55\xe5\x9b\xa4\x38\x27\xbf\xb3\xae\x72\xae\x35\x03\x56\x02\x30\x80\xb0\xd8\x75\x94\x80\xdd\x5a\xce\xf1\x5b\x37\x48\xf9\x63\xa3\x4a\x88\x18\x33\x80\xa7\x8c\x4c\x73\xce\x66\x64\xc6\x21\xad\x18\x12\x7d\x87\x88\x0a\x45\xd1\xf7\xa4\x14\xcb\xb1\x5b\x11\x5a\x50\x6e\x5e\x63\xf2\x8b\x9d\x98\xce\x0b\x81\xdd\xa8\xac\x72\x0f\x65\xb0\x7c\x46\xe6\x90\x28\x6c\x6d\x94\xbf\xbe\xf8\xc7\xdf\xc9\x74\x65\x14\x29\xd8\x90\x5a\x6a\x9a\xf8\x97\x4c\x98\x98\x1b\x5a\xa1\x50\xa8\x16\x72\x7a\x0a\x40\x3f\x11\x9c\xf8\xcb\xaf\x2f\xa7\x55\xcd\x6e\x3f\x66\xcb\xfd\x80\x7e\xa3\x44\xce\xc7\xe4\xd0\xd7\x4d\x16\x59\x0c\x7e\xfe\xe6\x20\xde\xdd\x6d\xb3\x6e\x1a\x43\x3a\x78\x32\xb2\x90\x57\x68\x61\x6e\xd8\x3d\x65\x4d\x58\x26\xb3\x22\xc1\x50\xc7\x6b\x5f\x02\x5d\x28\xb6\x5e\xa8\xb8\xf1\x5c\x80\x73\xde\x0e\x51\xe3\xa3\x36\x3f\xdc\x3d\x52\xda\x02\x18\xeb\x3e\xf6\x28\x65\xc0\x4c\x5e\xd3\x24\x99\xd2\xe8\xf2\x42\xbe\x91\x73\xf5\x4e\x1c\xe7\xb9\xcc\xab\x73\x49\xa8\x91\xd1\x8b\x42\x5c\x62\x0f\x09\x8f\xe3\x20\xe7\x36\x81\xc0\xc1\x7e\x6f\x7a\x61\x2c\xea\x77\xa2\xdf\x19\xdf\xe5\x28\xec\x9a\x97\x16\xb6\xad\x27\xc3\x1d\x19\x8e\xaf\xc2\xcd\xf6\xf5\x8b\xbf\x7e\x8b\x5b\x97\xc8\x9c\x7c\xfb\x02\x6a\x08\xd4\x10\x0f\x31\x48\x54\xa3\x9e\xa4\x34\x49\x0c\x23\x0f\x37\xa5\x21\xf4\xa6\x4d\xf8\xe0\x7b\x50\xb7\xdf\x6e\x77\x56\xe0\x2f\x2e\x7e\x05\x29\xc2\xb5\x62\xc9\x6c\x88\xa5\x53\xde\x98\xde\x05\x75\x64\xd7\x72\x1f\xa8\x5f\xdb\x02\xb5\x7b\x29\x93\x22\x65\x47\x6c\xc9\xbb\x68\x02\x58\x19\xcd\x39\x98\x12\xae\x40\x0e\x4e\x13\x19\x5d\x92\xd8\x7e\x19\x64\x55\xd5\xe1\xca\x9f\x6e\x3f\xd7\xf0\xfd\x2b\x19\x65\x29\xcd\x32\xa3\x03\x40\x85\x66\x4e\xaf\x2a\xc4\x80\x33\x09\x98\x0a\x4f\xbf\x9f\x2b\xbe\x91\xe1\x9b\x8d\x87\x68\x9c\x86\xd6\x3e\x32\x52\xce\xbe\xa3\xbe\x7e\xe5\x80\xee\x34\x64\xf0\x6f\xac\x72\x5a\x53\xcc\x3d\xdc\xa6\xdf\x18\xa8\x00\x98\xed\x03\x2c\xf9\xd1\xfa\x8e\x92\xd6\xe9\x74\x15\xba\x88\x5b\x9a\xe3\x51\x92\xb1\x5c\x71\x65\xe4\xf2\xcf\x70\xa0\xb0\x2b\x62\xe9\x78\x7e\x1c\x22\xe0\xe1\x06\x8c\xe7\xf6\x9c\xd2\xd8\x29\x38\x20\xb0\x42\xc4\xb7\xde\xa0\xd6\x56\xb5\xda\xf3\x62\x0a\xfb\x07\x6e\xbf\x4f\xa7\xd5\x0e\x25\xf1\x63\xf3\xd8\x9f\xcb\x65\xa8\xb2\x58\xf3\x89\xe7\xb1\x78\xd7\x73\xe2\xac\xf0\x7e\x4f\x95\xb1\xfa\xc9\x77\xc4\x3f\x80\xa3\xda\xc5\xad\xb2\xd0\x8a\xd5\x89\x27\x2c\xb0\x05\xac\x01\x39\x26\x98\xb4\x61\xce\x84\xfd\x29\xd9\x7d\xb5\xfb\xa8\xdc\x15\x49\x94\xcb\x8c\xce\x5b\x75\x2a\xaa\x51\xaa\x3e\x6c\x08\xa3\x61\xec\xa7\x80\x95\x64\xf6\x2e\xc3\x49\x1c\x4a\x10\x60\x40\x61\x30\xdf\x11\xd8\x5a\x16\xd0\x68\x8e\x5c\xd1\x15\xa1\xb9\x2c\x44\x6c\xdd\xa1\xde\x1f\xfd\xb6\xf6\xe0\x53\x29\x58\xd9\xb7\xb4\x8a\xc2\x01\x01\x28\x2e\xc8\xcb\xf1\xcb\x17\xcf\x45\xc4\xc1\x1b\xd6\x44\xdc\xa9\x17\x71\xc8\x9f\x1e\xf5\x5d\x1d\x9e\x7f\x47\xef\xfb\xd6\xfa\x66\x4a\xb8\x7e\xee\xc0\xc0\xe1\xa3\xab\x9c\x6b\x16\xb4\x27\xdc\x03\x8b\xc7\x18\x96\x01\xe6\xc4\x60\x53\x9f\x8c\x96\x44\x6a\x07\xf2\xa1\x8a\xe9\x17\xe4\x5b\x96\x41\xc1\x71\xdb\xe4\x1a\x53\xb7\xb0\xb0\x90\x50\x3b\x3b\x64\x0f\xef\xdc\xc5\xca\xfc\xc1\xa3\x6e\x2d\x4b\xb4\xe3\xeb\xac\x05\x82\x68\x0d\x04\x22\xa3\xe0\xbc\xcb\x3a\xa4\xe0\xbf\xd8\x82\x2e\x19\x20\x12\xf0\x84\xe6\x09\x84\xc8\xcf\x71\xee\x64\x5a\x68\xc2\xc4\x92\xe7\x52\x80\x9f\x18\x4a\x36\xa6\x09\x0b\xbb\x73\xff\x79\xef\xe7\x83\x33\xc8\xbf\x19\x60\x3f\x18\x37\xcb\x42\x39\x70\x9e\x70\x26\xc1\x70\x9f\x5d\x3e\x37\x0f\x43\x43\xe0\xb9\x6e\x5e\xe6\x39\x69\xa1\x0b\x6c\x3a\x73\x1d\x25\x85\xe2\xcb\xc7\xe2\x24\x16\x2a\xe2\x88\x37\x5a\xe7\x1a\x6c\x45\x49\xa8\x35\x04\x8a\x32\x4c\xf0\x19\x80\xee\x5d\xe5\x2b\x59\xc3\x94\x0d\xeb\xb3\x22\x29\x9f\x2f\xb4\xcd\xf6\xac\x45\x0e\x82\x10\x54\x0a\x6e\xde\xc7\xf4\x5e\x19\xb1\x7b\x90\x70\xaa\xee\xab\x72\xad\x95\x4b\xda\x51\x6c\xe7\x7e\xe9\x72\x8b\x9c\x53\xc6\x3c\x08\x3d\x95\x27\x13\x1b\x41\x73\x74\xe3\xe2\x7f\x30\xb1\xc6\x9b\x25\x98\x28\x83\x3f\x41\x77\xe3\x8c\x04\x70\x41\x2e\xa1\x04\x98\x3f\x60\x54\x81\x45\x22\xa4\x18\x2d\x02\x38\xa7\x4c\xc6\xf7\x2c\x25\x6c\x6a\x78\x34\x32\x39\x36\x53\x90\x2c\x64\x12\xbb\xe6\xdb\xe8\xcb\x99\x32\x7d\xc5\x98\x20\x27\x13\xa0\x9f\x79\x45\x2c\xe7\xda\x4c\x45\x0c\x2b\xf8\xae\xef\x9b\xe8\x79\xdf\x0d\xd6\xc2\x2a\x69\xa3\xd2\xfb\x37\x6d\x7d\xe6\x7f\xf4\x34\x73\x19\xd9\x74\x2a\x97\x0c\x48\x1a\xc7\x39\x53\x2d\x80\x8f\x1e\xc1\x4e\x6d\xc5\x4a\x79\xa3\xc6\x3f\xd5\xc0\x88\x27\x9b\x73\x2d\x81\xfa\x0e\x47\x15\x36\xde\x03\x73\xb0\x93\xc9\x61\x0b\xee\xb5\xfb\xde\xc6\x45\xcc\x50\xbb\xbb\x8a\xf0\x2c\x2a\x63\xae\x63\x52\x86\x1b\x83\x42\x09\xd4\x18\xef\x17\xeb\x6a\xaa\x26\x06\x4c\xad\x25\x93\x26\x02\x87\x31\x6c\xc5\x96\x62\x5b\x77\x0e\x04\x1d\x32\x19\x43\x67\xa6\x92\x1a\xca\xfd\x22\x24\x88\x4b\x96\x40\x26\x6f\x53\x47\x86\x3e\x09\xb9\xc6\x98\xc0\xf5\xee\xd2\x0f\x03\x2e\xbe\x46\xcc\x07\xa3\xe5\xe4\xe4\xa8\xcb\xed\x92\xf1\x78\xeb\xb6\xcb\x7b\x75\xef\x92\xfe\xdb\x5f\x12\x30\xfd\x3e\xf7\x96\x18\x6c\xb2\x30\x7d\xf6\x6f\x48\x53\x97\x9a\xd8\xbe\x8f\x3e\x13\x76\x53\x42\x07\x70\x91\xea\x93\x86\xe6\xef\x59\x91\xc0\x26\x2d\x93\x7b\x7d\x66\x32\xf5\x79\xa1\xa0\x0d\xd0\x25\xe5\x09\x22\x66\xca\x9b\x87\x74\xe1\xf7\x44\xd2\x18\xcb\x3d\x2e\x59\x2e\x58\x42\x52\x19\x17\x09\x7a\xf3\x7c\x7f\xe1\xb7\xef\x8e\xde\xbf\x39\x76\x49\x58\xac\x5c\xce\x21\xa1\x44\xb0\x2b\x18\x5d\x80\x42\x12\x59\xe0\x2e\x5f\xf6\x63\xce\x93\xc3\xe2\x44\x33\x14\x1d\x13\xee\x85\x52\xae\xf9\x1c\x01\x36\x4b\xb5\x70\x9a\x33\x7a\x29\x0b\x4d\x96\x45\x22\x58\x5e\xf6\xc7\x64\x4b\x26\xd0\x07\x6b\x7e\x60\x1e\x1b\x62\x35\xf2\xbc\x02\x91\x69\x81\xd3\x1c\xec\x27\x8d\xac\x26\x6f\x4b\x8c\xe0\xcb\xa0\x39\x74\xa5\x85\xe4\xed\xd0\xa5\x4e\xf3\x0a\x50\x4b\xb1\x9c\x78\x1d\xb2\xd4\xa1\x4b\x62\x1a\xcd\xb9\xcb\x80\xb1\x89\x2f\x0f\x77\x1c\xee\xef\x6e\xa9\x56\x88\x56\xe1\x5b\xec\x80\x4e\xf6\x4d\x64\x7c\x83\xd5\x50\xea\x5d\x70\x7f\xd8\x32\x5b\x4b\x42\x09\xba\xdb\x47\x0e\xfe\x06\x32\x65\x9b\xb0\xc1\x7b\x0b\x4d\xb0\x3c\x26\x45\x92\x9c\xb3\x28\x67\xf7\x0d\x33\x54\x39\xc5\x49\x6d\xac\x9b\x2c\x80\xc0\x9c\x05\x4c\x10\x7b\xb3\x28\xf1\x07\x82\x3c\xa7\xb2\x16\x37\x2b\x12\x48\x0d\xa7\x62\xe5\x08\x0e\xb3\x57\x41\x4c\x97\x2b\x97\x65\x86\xdc\xa7\xb2\x0a\x8a\xf9\x87\xf9\xe6\x6b\x54\x29\xcc\x3c\xe0\x22\xe6\x4b\x1e\x17\x34\x81\x07\x81\x51\x66\x13\xb6\xa8\xc5\x31\xc7\xb3\x9c\x3a\xf4\xe3\xfb\xe6\x30\x97\x67\x72\x1f\xe7\xfd\x27\x9c\xde\x8a\x8b\xf9\x08\x3e\x31\x0f\xb6\x33\x1c\x49\x31\xa2\x23\xb3\x6d\x9e\x88\xdd\x02\xf8\xfd\xef\xc0\x30\x38\x73\xeb\xeb\xd8\x90\x22\x4c\xc8\x62\xbe\x00\x62\xe5\x29\x75\x50\x9a\x09\xd3\x80\x92\x68\xf3\x19\x30\x89\xcd\xfe\x36\xb6\x56\x46\x88\x1a\x59\xdd\x1b\x4f\xc4\x76\x69\xea\xe0\xad\x25\xe3\x07\x6c\xc6\xd2\x48\xdf\x7b\x07\xca\x25\xcb\x97\x9c\x5d\xed\x5b\xcd\x6f\x64\x64\xc2\x08\x29\xa2\xf6\x81\xb0\xfb\x7f\x42\xeb\xe8\xe2\xdd\xd1\x3b\x68\x39\x6e\xbd\xee\x4e\x54\x19\x51\xa0\xc6\x84\x66\xfc\x67\x96\x2b\x00\x55\xbe\xe4\x22\x1e\x92\x82\xc7\xdf\x3f\x60\xc2\x17\x17\xbc\xcc\x62\x6d\xc5\xb5\xde\x58\xae\x64\xab\xe8\xf9\x7f\x70\x7b\x06\x12\x74\xca\x12\x29\xe6\x01\x06\x00\x48\xf3\x13\xc1\xf5\x5a\x77\x66\x44\x3a\x05\x0f\x8f\xcc\x63\xc8\x15\xe6\x32\xaf\x84\x33\xcc\x78\x80\xff\x18\x64\x1c\x1b\x96\xc6\x2b\xe3\x41\x1a\x97\x2a\x75\x24\x4c\x04\x72\xe5\xc2\x0e\x1e\xdb\xe1\x4a\xa2\x2c\x5e\x50\x11\xc3\x9f\x51\x24\xf3\xd8\xce\x97\x6b\x9f\xde\x8c\xc9\x70\x98\x81\x05\x62\xc8\x70\x34\x2a\xea\x4f\x06\x35\x2d\x4f\x2b\xa9\xb0\x4e\x6b\x2f\x04\xff\x77\xc1\x08\x4d\xa5\x61\xc4\xf5\x26\x10\x35\x8a\xa4\x74\x05\xb2\x10\xa6\xfa\xc6\x95\x6b\xd8\x1a\x5b\x35\x24\x67\xcc\x28\x5d\x25\x4c\xc0\x90\xbc\xa9\xe2\x06\x0c\xcd\x5c\xce\xb1\xa0\xd9\x7e\x84\xb3\xcf\x99\x92\x45\x1e\xb1\x33\x8c\x71\xa6\x2e\x9f\x6e\xfd\x65\xcc\xaa\x68\x7a\xc9\x04\xfa\x94\x0c\x69\x20\x8c\x5b\xe4\xb0\x06\xd1\x82\xc5\x05\x48\x95\xe9\x8a\xcc\x38\x76\x86\x01\xd1\xce\xe7\x0b\xa6\xb4\xb3\x8d\xf6\x21\x47\xad\x6c\xb2\xe7\x26\x00\xdb\x37\x48\x66\x2f\xbd\xb0\x29\x05\xdc\x72\x38\xb2\x54\xbb\x7a\x2d\xd4\x06\x55\x91\xba\xb3\x5c\xa7\xb4\x1a\x93\x37\xe6\x51\xb8\x9f\x82\x8e\x1b\xbc\x46\x5c\x88\x31\x5b\x37\x32\x99\x51\xb5\x80\x7e\x34\xf5\x25\xb0\xcd\x2c\xa2\x22\x37\x0c\x03\x31\xe6\x69\x1c\x1b\xee\x9a\x93\x1c\x5b\xce\x6f\xf2\x3b\xb6\xac\xcf\x31\x93\x1d\x05\xf2\xee\xa9\x08\xb1\x03\x5f\x6f\x61\x08\x1f\xd5\x38\x01\xae\xa4\x11\x58\x0e\xd7\xcd\x28\xdc\x3e\xe0\x6f\xb8\xc2\xc3\x89\xa4\xe6\xe1\xfd\x46\x61\xf9\x36\x12\x90\xe6\xf3\xf6\x8e\xbb\xdd\x83\x7c\x5e\xe0\x41\xb7\x5c\xb8\x44\xa4\x1f\xd7\xf2\xee\x41\x99\x32\xb6\xea\xe1\xdb\xa3\xb0\xd0\x2f\xac\x60\x72\x65\x92\x63\xf2\x73\xdb\x30\x4b\x3d\xce\x62\x18\x7a\x19\xbc\x29\xfb\xc9\x18\xa6\x91\x2c\x9d\x49\xe0\x9f\xe6\x34\x5f\x2e\xb2\x42\x5b\x49\x18\x00\x74\x45\x0b\x2a\xe6\xe0\x26\x91\x85\x19\xef\xcf\x7f\x86\x19\xe5\x2c\x2e\x22\xdb\x8c\xc7\xed\xda\x3f\xbb\xa0\x83\x85\xd3\x03\x76\xa5\x22\x9a\xb9\x39\x87\xaf\xa5\x56\x42\xd3\xeb\x57\x84\x8f\xd9\x98\xec\xfc\x39\xf8\x6a\x07\x9f\x9e\xe5\xd2\x3c\xc2\x16\x18\xc1\xac\x12\xae\x21\xd1\x67\x27\xbc\x7b\x4c\x8e\xcd\x33\x20\x10\xeb\x09\x18\xd4\xc0\x4c\x4b\xf2\x0d\x49\xce\xe6\x34\x8f\x13\xeb\x30\xbc\x0a\x0a\xa7\x3c\xc1\xd8\x35\x57\x5a\x59\x6f\x41\x0b\xe6\xa4\xa9\xba\x34\xac\xc8\x1c\xae\x51\x4c\x35\x1d\x05\xa7\x7a\x1f\x4d\xad\x91\x45\x09\x1f\x51\xbb\xbb\x4a\xae\xb5\xff\x27\x5b\x7f\x3c\xa2\xfe\x2e\x6e\x94\x72\xc0\xeb\x6e\xae\xea\x3c\x35\x2f\x71\x0b\xb0\xf8\xea\x01\x3e\x2e\x3b\x48\x00\x0d\xa0\xff\x52\xa9\x32\x79\x3e\x6a\xf1\xd0\x6f\x38\xd2\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\x27\xbb\x3f\xd9\xfd\xc9\x6e\x71\xb2\x99\x58\xb6\x3e\xd5\xce\x7a\xda\x94\xb7\x50\x87\x7c\x0d\x4a\xf0\x9e\x51\x76\xe8\xb1\x58\xfe\x4c\x8d\x32\x6d\xfd\xda\x36\xe8\xba\x21\x8d\xc3\xde\x80\xaa\xfb\xe1\x93\x4f\x0f\x7d\xc4\xe4\xce\x0e\x93\xe6\x42\xc7\xca\xa6\x55\x0b\xbb\x87\x1e\xfe\x7e\x72\x74\x7c\x7a\x71\xf2\xfa\xe4\xf8\xec\x51\xb3\x9d\x5a\x82\xa1\x56\xe5\x72\x43\x29\x99\xe5\x6c\xc9\x65\xa1\x92\x95\x47\x6d\xdf\xcc\x04\xd6\x13\x66\x45\x0c\x1e\x0f\x07\x4c\xbf\xf1\x67\xbd\xb0\xed\x56\xd8\x56\x93\xbf\x5a\xe0\x60\x75\xb5\x7d\x5f\xe7\x32\xed\x68\x0b\x9f\xa3\x2f\xc6\x05\xdb\x36\xed\xa7\x5d\x0b\x99\x53\x11\x3d\x56\x79\x2c\xf1\x79\x8c\x3e\x9a\x66\xba\x45\x1b\x9d\x4e\x40\xb6\xbb\xc1\xa3\xc6\x84\xb3\xb7\x34\xfb\x89\xad\xce\x58\x4b\xb8\xad\x2a\xbd\x59\xc2\x22\x23\xe8\xc8\x25\x5b\x61\x76\xf1\xa1\x7b\x58\x3b\xd0\xe8\x2d\xc4\x28\xbf\x64\x6d\xf0\xe3\xbb\x04\x17\xbf\x64\x2d\x32\xa7\xdd\xb5\x06\x80\x6d\x96\x10\xf4\x34\xb3\xa6\x5b\x05\xf9\xfd\x05\xc0\xd4\x9f\x6f\x1c\xa5\x7a\x75\xb8\x0a\x2e\x7c\xdb\xf1\x4a\x60\x24\x7d\x55\x91\x5d\x9e\x89\x10\xac\x69\x86\xbd\xe9\x42\x0f\x56\xc9\xe8\x88\x34\x6d\xfb\x70\x12\x5c\xc2\x6e\xf9\xea\x6e\xc9\x58\x31\xe7\xc2\x03\x3a\xc6\xaf\x1c\x06\x88\xf2\xcd\x33\xa1\x1d\xf5\xb0\xfa\xa7\x4d\x6b\xf9\x6f\xff\x61\x42\xa7\x2c\x51\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\x31\xbc\x5d\xbd\x05\x00\x4d\x84\x8c\xd9\x29\x3c\x03\xfe\xb4\xea\xda\x01\x86\x50\xec\x17\x80\x47\x30\xc6\xd4\x3b\xff\x67\x26\xe3\xfa\x5f\xaa\x15\xf2\xe6\x56\x0a\x06\x58\xa2\x16\xe5\x71\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\x7e\x52\xd1\x82\xa5\x88\xfd\xf7\xda\x91\x00\x1a\x7c\x3b\xe0\x13\x01\x68\x11\x46\x33\xad\xc2\xb0\xee\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\xf5\x69\x2e\xbe\x01\xed\xc1\xe4\x84\x2c\x91\xc2\x5b\x43\x1c\x17\xde\x7c\xfd\x45\x79\x9c\x0f\xa2\xd6\xab\xd2\x5f\x61\x5a\x99\xfb\xde\x22\x84\x28\x0f\x15\xc9\x8c\x61\xb3\x87\x1f\x8e\xa3\xac\x18\xda\x1b\xc6\x29\x4b\x65\xbe\xf2\x7f\xfa\xca\xe4\x91\xd2\x32\xa7\x73\x28\x0c\xc3\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x19\x4b\xb5\x1c\xb9\x21\xd2\x4d\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\x16\xb5\xc5\x2b\xab\x5e\xd5\x0d\xe9\x3d\x71\xa8\x70\x7a\x2a\x82\x3d\x69\x2b\xe6\x87\x65\x16\x1b\x78\x03\xc4\xd2\x58\x96\x8d\x91\x26\xcb\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf9\x9b\x1f\xe8\xe6\x8c\x47\x0b\xda\x83\x59\x5c\xde\x6d\x76\x9d\x01\xb8\x9e\x3f\xaf\x35\xb6\xff\xb2\x4d\x17\x3f\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3d\xf5\x0e\xb0\xae\xf1\xea\x12\xf1\xba\x3a\x62\x27\xdb\xef\x0b\xb6\x79\xc1\xcb\x6d\xaf\xae\xcf\xff\x99\xe3\x9a\x41\x56\x8f\x13\xd7\x5b\x73\xc0\x31\x2d\xf4\x21\x3c\x39\xf8\xa4\x6a\xc1\x98\x37\x2d\x9e\x9b\x9c\xfb\x23\x38\x77\x7c\x1b\x58\x58\xd7\x52\x13\x9d\xe5\x32\x75\xb0\x14\x10\xde\xc0\x02\x4a\x7b\xdf\x25\x6b\xd5\x4c\x1c\xaf\xde\x19\xd4\x3b\x83\x6e\xb8\x3e\xeb\x0c\xc2\x22\x82\xed\xf5\x04\x31\xb1\x6c\x1a\xc2\xd8\x18\x41\x77\xb6\x4e\x08\xfe\x78\xb7\x80\xda\xd8\x1d\xf5\xb2\x7f\x72\x99\x4c\x83\x02\x2d\xdd\x1c\xc3\x24\x07\x49\x42\xb8\xc0\x83\x0f\x03\xf8\x5a\x2c\x86\xa6\x8d\x2b\x22\x5e\x9a\x29\xf8\xaa\xab\x0a\x78\x32\xe4\x16\x73\x31\xb7\x85\x51\x28\x4a\x6c\xf4\x89\x8b\x12\x76\xda\x2b\x87\x65\xaf\x02\xaa\x94\x8c\xa0\x29\x18\x56\x5a\x79\x4c\x4a\x3b\x6d\x98\x8d\xa6\x97\x10\x6d\x8c\x58\xcc\x44\xc4\x6c\x1f\x83\x4a\xaf\x68\x2a\xc8\xb1\x58\xba\x5e\x0e\x71\x81\xc9\x20\xc8\xfe\x36\x8f\xf1\xbc\x12\x10\xcc\x46\xb4\x41\xb0\x20\x0f\x01\xb8\xbe\xb7\xb0\x29\xa4\x62\xc8\x59\xe9\x65\x6d\xd6\x4e\xb6\xb5\x14\x6f\x2f\x33\x7d\x64\xab\x95\x32\xb4\x26\x2c\x4b\xf7\x73\x55\x48\x3e\x87\x60\x60\x7b\xf1\xf9\x87\x13\x9d\x1d\x89\xcd\x6e\x44\xe6\x3d\x62\x27\x5d\x8a\xc9\x2e\x82\x25\x59\xce\x66\xfc\xba\xa3\x73\x7a\x10\xd4\x13\xf2\x98\x09\xcd\x67\x1c\x3b\x66\x67\x39\xcb\x98\x00\x57\x2b\x94\x68\x18\xde\x6f\x25\x65\x19\x9c\xde\xc6\x64\x1e\x54\xb8\xbb\x65\x65\xe7\x9b\x94\xfd\x9e\x8f\x91\x9e\x8f\x35\xbe\x1e\x88\x8f\xd9\x9d\xbb\x3d\x4c\x0c\x32\xcf\xdb\x67\xbf\x1f\x56\x53\xd9\x6d\x17\xf7\xb6\x25\xc4\xb5\x02\x7d\xcf\x1a\xb5\xc4\xe4\x35\xac\x63\xcb\x09\xd6\xec\xa3\xde\x44\x52\x2a\xe8\x1c\x5b\x51\x68\xe9\xc1\xab\x64\xee\xdb\x89\xd5\xf3\xee\x41\x8f\x77\x25\x5e\xf0\x65\x2e\x93\x84\xe5\x8a\x24\xfc\x92\x91\x23\x96\x25\x72\x95\xda\xdc\xd7\x98\x9c\x6b\xaa\xcd\xae\x3e\x67\xba\x59\xd8\xb7\x1d\xaa\x8d\xab\x42\xef\x08\xfb\x1f\xcb\xda\xa1\x28\x9c\x64\xb6\x82\xf2\x9d\x00\xa6\x71\x00\x9d\x8d\x86\xe4\x94\x2d\x59\x3e\x24\x27\xb3\x53\xa9\x27\xa8\x7d\x57\x13\xee\xf0\x46\xc2\x67\xe4\x95\xb1\xeb\x94\x26\x1a\xbb\xcb\x04\x05\xea\x32\xaf\x0c\x50\xe2\x16\x76\x51\x9f\xb7\x5e\x7b\x0e\x23\xf9\xca\xf3\x46\x91\x8c\x56\xcb\xe4\xdb\x77\xb5\x5e\xa0\x03\xac\x27\x2d\xa1\xac\x83\xfd\x8d\xb8\x0a\x0e\x89\x0f\xac\x40\x2e\x48\xce\x54\x26\x85\x62\x55\x98\x51\x3f\x23\xb4\x76\xbb\xc5\x30\x6e\x2c\x3c\xdb\x8a\xcd\x4c\x2a\x0d\x25\xb4\xdd\x34\x85\x9b\xb8\xe1\xa0\x22\x99\x26\x09\x8b\x2b\x5d\x01\xb1\x9b\x15\xad\x7a\x08\x2c\x1a\x8a\xef\x6f\x83\x85\xca\x95\x1a\xe7\xca\xfd\xbe\xc3\xa4\xeb\xe1\xe4\xda\x8b\xdf\x54\xd9\x5c\x1e\x4c\x90\x23\xc1\x06\x58\x03\x3c\x07\x18\x7c\x15\x34\x82\x5a\x48\x79\x49\x22\x99\x66\x09\x1c\x9d\x16\x27\xab\xec\x43\xe7\xb7\xd2\xc8\x8c\xae\xf6\x83\x16\x75\xf0\x41\xbb\x0e\x75\xad\x14\xb1\x2e\xd4\x30\x76\xcd\xa2\xce\x7a\xd8\x1e\x5f\xb3\x28\x68\xc2\x0c\x90\x6c\x91\x43\x88\x30\x27\xb6\x7d\x6f\xfd\xd6\x21\x87\xae\xdc\xfc\x2d\x6a\xe9\xc2\xab\x86\x62\x09\x63\x3a\xb4\x7f\xfb\x08\x68\x9c\x02\xb6\x10\xd6\xd7\x85\x30\x1a\x7e\x33\xe2\xd1\x5b\x83\xbe\xf4\x89\xd4\x6e\x2c\x68\x91\x26\xa5\x26\x7b\xbb\xfb\xbb\x83\x35\xff\x63\x0d\x32\xfe\x22\xf8\x25\x07\xa8\xd3\x0c\x70\x43\x59\xb4\x1b\x0f\x09\xd7\x2e\xd3\x1a\xe1\x9e\x60\x56\xb6\xe8\x6f\x48\x94\x24\x3a\xa7\x31\xb7\x6a\x0c\x7c\x6a\x6e\xd2\x79\x61\xb9\xfc\xde\xee\xa7\x5d\xdb\xda\xeb\x4a\x8a\x5d\x0d\xd3\x1f\x93\x0b\xc4\x89\xf1\x03\xad\x64\x01\xb8\x50\x48\x82\x2c\xe1\x11\xd7\xc9\x0a\x38\x16\x91\x05\x62\x52\x19\x79\x61\x8b\x0d\x8f\xaf\xb9\x76\xcd\x75\xe4\x8c\xbc\xc0\xee\x7a\x88\xe1\x44\x15\x74\x58\xdf\x5f\x30\x9a\xe8\x05\x26\x89\x08\x29\x46\xd8\x20\xd5\xb0\x12\xfb\x4d\xdb\x78\x49\x3b\x77\x62\x78\xb5\x70\x2d\xae\x4f\xa8\xa5\xe5\x60\x98\xe8\x0f\xcd\xbb\xb6\x93\x35\xf4\xba\x8b\x8b\xc9\x0f\x95\xbe\xed\xc0\xc5\xb5\xce\x5c\xea\x0e\x78\x03\x58\x3e\x93\x79\xba\x05\xbc\xa3\x9b\x60\x65\xab\x06\xee\xa4\x43\x16\xd6\xb6\x91\x3b\xd9\x8c\x46\x78\xf7\x0e\xee\xe4\x57\x59\x00\x18\x08\x9d\x26\x2b\x8f\xc4\xa0\x98\x26\x3b\x66\xa8\x1d\xc3\x9e\xcc\x6e\xf8\x91\xd1\x18\x81\x32\x94\x66\xb4\x91\xea\x16\x5e\x9d\x05\xd1\x82\xb9\x75\x2b\x07\x0a\xa5\x65\x4a\x16\xf6\xb5\xab\xa5\x97\xf6\x64\x8c\xe1\xf4\xb8\xba\xa6\x9c\x65\xc8\xe1\xec\x6f\x9e\x1d\xff\x5a\xe3\x1b\x48\xf7\x4a\x13\x8f\x28\x24\x5b\xd8\x23\x8a\x0b\x24\x16\xe2\xce\x74\xc4\x4b\x3b\x48\x7e\x20\x1d\x26\x40\x90\x76\x85\x9c\xf5\x81\x20\xa8\xd7\x3e\xd7\xab\xb3\x9c\x0a\xd2\x59\xde\x00\xd9\xe4\x64\xb5\x7b\x06\xbd\x2f\xe8\xcf\x01\x77\x8c\x8b\xa1\x46\x54\x48\xc1\x23\x9a\xf0\xff\xb0\x18\x3b\xe4\x63\xfe\x1c\xe8\x39\x11\x55\x6c\x04\x41\x5d\x61\x1b\x7b\x06\xd5\x8a\xe6\x38\x6a\x29\x41\xf9\xf0\xc8\x67\xf8\xbc\xf6\x59\x19\xa4\xdb\x9c\x00\xd2\xbe\x20\x35\xbc\x6e\x27\x73\x37\x5b\x8c\x74\x49\x81\xac\x83\x04\xf2\xf5\xf4\x71\x04\xab\x82\x02\x4f\x64\xe1\xc0\x8c\x10\x5e\x73\x6b\x64\x99\xd1\x49\x3a\x7d\x75\x74\xc7\xe7\x44\xf8\xde\xf3\x0e\x4b\x78\x9d\x20\x41\xfe\x83\x6d\x55\xef\x9c\xc6\x4e\xe8\x51\x31\x67\xe4\xa5\xf9\xe5\xdf\xff\xf6\xb7\x6f\xfe\x36\xc6\xe1\x7d\x2e\x84\x20\x27\x07\xa7\x07\xbf\x9f\xff\x7c\x08\x25\xb8\x6d\xa9\xda\x51\xa2\x67\xd7\x69\x9e\x9d\x26\x79\x7e\xd1\x14\x4f\x28\x2c\x69\xcd\x45\xaa\x11\x06\x18\x32\x44\x11\xb5\x1a\x66\x80\xe6\x87\x48\xb7\xa1\xbb\xd6\x1c\xb5\xad\x38\x63\x3a\xca\xce\x65\x74\xd9\xa1\xf5\x74\xc4\xb2\x9c\x45\xe8\x8d\xbb\x38\x9c\xe0\xe8\xc6\x8a\x3d\x7d\x77\x51\x16\x34\x40\xd6\x4f\x09\xd9\xf7\xa3\xf5\xd7\x19\xcb\xf7\x92\x65\xda\x3b\x08\xa6\x34\xba\xbc\xa2\x79\x0c\xfe\x33\xaa\x39\x00\x14\x23\xc2\x60\xce\x6c\xb3\x38\x4c\x2b\x44\x28\x35\xd7\x8c\x1b\x79\x39\xba\x29\x9c\xd3\x15\x1c\x63\x28\x02\x67\x94\x27\xe0\xa7\xb5\x7d\xb0\x31\xef\x28\xca\xbc\xe3\x30\xf4\x9c\xf7\x26\x9e\xbb\xb6\xd6\xc4\x0b\xfa\x74\xdf\xd7\xda\x6b\x9b\xfd\xb8\xc5\xa2\xce\x8a\xb8\xbc\xd2\x32\xbf\x17\x75\x1d\x8c\xb7\xbd\xa2\x2e\xcb\xd9\xb9\x96\x8d\xfa\x6e\x90\xf5\x58\x0c\x0e\x76\x43\x24\x66\xca\x66\xd2\x30\xe1\x1b\x43\x2b\x71\x01\x87\x90\x0a\x28\x41\x74\xbe\x33\x59\x09\x9f\x60\xde\xa7\x47\xc9\xb7\xf0\xac\xfb\x2a\xc4\x64\x75\x1d\xc7\x87\xe6\xed\x58\x0a\xb3\x1b\x96\xb5\x14\xb6\xdf\x39\x7c\xc8\x74\x84\xfe\xe1\x80\x91\x03\x3e\xa9\x9d\x7e\x3d\x58\x13\xe5\x54\x2d\xb0\x17\x38\xbb\xe6\xda\xa2\xbf\x4e\x64\x5c\xef\xe0\x3f\xcf\x69\xc4\x48\xc6\x72\x2e\x8d\x30\x2a\x84\x8e\xe5\x95\x20\x53\x36\xe7\x42\x39\x52\x00\x44\xbb\xa5\x19\x44\x7d\xb8\xf2\xf0\x73\x63\x72\x56\x81\x54\xb1\xc5\x4e\x91\x2c\x8f\xa6\x9d\x73\x3d\x5e\x05\x12\x0b\xe8\x84\xb0\xfa\x9e\xc2\x61\xcf\xb0\xcf\x4d\x79\xaf\x10\xf0\xe4\x98\x25\x74\x85\x39\xad\x33\x2e\xc0\x72\xcc\xd5\xa0\x83\xb8\x16\x76\xbd\x73\xdf\xdd\x38\x0f\xae\x48\xce\x68\xb4\x68\x17\x62\xee\x03\x61\x77\xbc\xfa\x40\x58\x9b\x41\xfa\x40\x58\x1f\x08\xfb\xcc\xd5\x07\xc2\xfa\x40\x58\xed\xda\x5a\x2b\xa9\x0f\x84\x35\xbe\xfa\x40\xd8\xed\x57\x1f\x08\xbb\xc3\xd5\x07\xc2\xee\x78\xf5\x81\xb0\x9b\xaf\x3e\x10\xd6\x6e\x32\x7d\x20\xac\x0f\x84\xd9\xeb\x8f\xe7\x1d\x74\x57\x1f\x08\x5b\x1b\xa4\x0f\x84\xf5\x81\xb0\x3b\x5f\x5b\x6b\xe2\xf5\x81\x30\xbc\xfa\x40\x58\xf5\xfa\x63\x89\x3a\x17\x46\x9a\x18\x83\xb2\x7d\x7d\xde\x04\x42\x17\x3c\xb2\xd1\x28\x39\xab\xd4\x74\xe1\xa3\xc6\x65\xbf\x8d\x00\xe2\xc4\x95\x15\xd9\xb8\x53\x19\xcd\xda\x58\xfb\xd5\xb2\x27\x5e\x26\xe3\x32\x1c\x12\xc4\x41\xd0\xac\x6e\x5e\x7f\xf7\x68\x95\x65\x6d\x82\x1f\x0f\x13\xf8\xd8\x92\x28\x51\x07\xc1\x8e\x3e\xd0\xf1\xec\x02\x1d\xdd\x38\x09\x3b\x70\x10\xb6\x16\x15\x36\xfe\x7f\xb1\xc8\x99\x5a\xc8\xa4\xf1\x46\xaf\x6c\xf2\xb7\x5c\xf0\xb4\x48\xa1\xeb\xad\xd9\xcf\x7c\xe9\x13\x0d\x54\xd9\x56\x1f\x38\x36\xfa\x2a\x83\xf6\xb8\xae\x2d\x2e\xd4\xa2\xda\x36\xf7\xaa\x88\x22\xc6\xa0\x2d\x5c\x68\xe1\x7c\x33\xf6\x4f\xf2\x6d\x40\x5e\xb6\xe3\x37\xed\x84\x38\x42\xab\xc2\x28\xdf\x7c\xdd\x68\x8c\x79\x9e\x75\xc3\x97\x7f\x38\x9b\x1c\x06\x7c\x99\x0a\xc7\x96\xb9\x58\xca\x04\xa8\x4a\xf1\x26\xa3\xac\x3d\x22\x93\x6e\x6f\x76\xb4\x32\x39\xba\x90\x11\x6d\xb5\xea\xaa\xdf\xcc\xe8\xce\x55\xcf\xd1\x1c\xd6\x12\x11\xfc\xef\xac\x3b\xb7\xe6\x6e\xed\xf5\xd9\xf6\xc7\x81\x00\xc4\x0e\xbc\x78\x67\x04\xde\x39\xb7\xad\xab\xac\x08\x0e\x0d\x17\xd7\xd5\x4a\x4b\x92\x25\xb4\xec\x4b\x05\x2b\xf0\x23\xc8\x8d\xc3\x05\x8b\x2e\xcf\x6c\x8c\x76\x4f\x31\xe6\xf5\xc9\x39\xd7\x8b\x62\x3a\x8e\x64\xba\x6f\x8e\x31\xfe\xdf\x34\x91\xd3\xfd\x94\x2a\xcd\x72\xa3\x62\x5a\xb1\x34\x8a\xcc\x28\x5c\xcc\xc7\x69\x3c\x18\x93\x8f\x02\xab\xeb\xcb\x3e\x98\x01\xb6\x84\x79\xbe\xc3\xf9\x98\x32\xc3\x11\x25\xf8\x0e\x02\x08\x3d\x33\xbd\x71\x1b\xa0\xe6\xd6\x62\xa4\x65\x7c\xfc\xe1\x63\xe3\x3d\xe7\x22\x1d\x38\x49\x9e\x5a\x0c\xbc\xb3\x5c\x90\x0e\x62\xdf\x5b\x14\xf7\xde\x1a\x75\x76\x5b\x62\xdd\x5b\x88\x76\xdd\x41\x7c\xbb\x8b\xd8\x76\x77\x71\xed\x2f\x00\x0a\xfd\x94\xe3\xd9\x1d\x3a\xfd\x3a\x8a\x63\x3f\x44\x0c\xbb\x93\xb7\x6e\x1b\xbb\x7e\xb8\xb8\x75\x37\xaf\xdb\xa5\xb9\xf1\x54\x63\xd5\x1d\x38\xef\xbb\x74\xdc\x77\xe6\xb4\xff\x62\xb1\xe9\xf6\x71\xe9\x2d\x88\x49\xb7\x26\x32\x17\x5c\x73\x9a\x1c\xb1\x84\xae\xce\x59\x24\x45\xdc\x58\x8e\xd5\xb0\x48\xfd\xf9\x51\x38\xac\xf5\x60\x55\x0b\x3d\x16\xd4\x42\xae\x1b\xbb\x0d\x0b\x5b\x5c\x94\xc3\xaa\x2d\x10\x6f\xc6\x59\x6e\x65\xdc\x82\x6c\x8d\xab\x0c\xab\x5e\xba\x5c\xc4\x1f\xe5\x15\x91\x33\xcd\x04\xd9\xe3\xc2\xad\xe3\x20\x30\x36\x4b\xbf\xa5\xdf\xd6\xe6\xdb\x97\x2f\xdc\xcd\xcf\xcf\x21\x09\xae\x57\xa5\xbe\xbc\x7f\xd8\x3e\xe8\xf3\x0e\x62\x7b\xe3\xac\x48\xaa\x4e\x62\x74\x1c\x57\xf9\xcd\xcb\x12\x34\xfa\x25\x8c\xeb\x4f\x1b\x15\x31\xb1\x95\x70\xcf\x6f\xd1\x5a\x67\xdc\x54\x55\x3f\x9f\x61\xf3\x39\x7f\xf2\xc5\xe1\xa4\x77\x27\x6f\x97\x53\xe6\x91\xb2\x56\xb6\x50\xd1\x7d\xa2\x99\x2a\xbd\xa2\x7b\x8f\x2b\xa8\x8d\xfd\x21\xa7\x11\x9b\x74\xae\x23\xb8\xe3\x44\xe2\x22\xa7\x96\x01\x7a\x95\xcf\x1d\x1e\xc1\x58\x8c\xa7\xc9\xd7\x13\x43\xa5\xee\xac\x48\x92\x15\xfa\x1c\x2a\xd5\xd7\x18\x85\xaf\x17\xf3\x82\xe3\x7f\xc3\x53\x4a\xc5\x32\xcb\xa5\x95\x99\x79\x21\x84\xe1\xc1\x65\xe7\x37\x50\x24\x01\x8c\x9a\x56\x4a\x86\x15\x9f\x9b\xe9\x1b\xf9\x07\xd5\xc4\x65\x6a\x62\x65\x40\xf3\xeb\x99\xcc\x23\x3e\x4d\x56\x64\x41\x13\xdf\xe6\x87\x92\x4b\x9e\x24\x76\x98\x31\x39\x67\x1a\x03\x17\x28\x3b\x13\x29\xe6\x30\x39\x2a\x5c\x7b\x49\x16\x99\xdf\x46\x09\xa3\xa2\xc8\xf0\x79\x46\x12\xaf\x64\x91\xbb\xe7\x8d\x7d\xf8\xc3\x4b\x60\xc1\x93\x61\xd0\xc4\xee\xd6\x85\x2d\x5d\x34\xca\x28\x00\xef\x1c\xf8\xf6\x30\x1c\xd3\xe1\xa3\xab\xa0\x85\x51\x96\xcb\x25\x8f\x31\x86\xe2\xc8\x06\xed\xb2\xb1\x4d\x91\x3f\xcf\x42\x8a\x91\x60\x73\x0a\x8a\x8a\x3d\x45\xb8\x66\x38\x0e\xe6\x16\x88\x18\x1a\x17\x19\x0d\x5f\x66\x95\x72\xfe\x25\xc7\x96\xcb\x01\xe5\xc8\x9e\x90\x44\x42\xa6\x6a\x21\xb8\xc6\x36\xfe\x8b\x42\x93\x58\x5e\x89\x81\xf5\x59\x71\x45\x28\x99\x32\x4d\x83\x5c\x53\x2b\xe0\x14\x61\x82\x4e\x13\xb3\xe6\x90\x8a\x75\xb1\x91\x40\x64\xc6\xa8\x2e\x72\x46\xe6\x54\xb3\x8d\x7a\x0e\xbe\xef\xed\xe4\xe5\xca\x3a\x58\x67\xa4\x10\x8a\xb5\x14\xef\x9d\x29\x47\x7f\xff\x6b\x33\x1e\xc1\x53\x26\x0b\xfd\x20\xd6\xdf\xd5\x82\x47\x8b\x50\x99\xe5\x29\x53\x44\x16\x35\xb3\xf8\xa5\xfd\xd9\xe6\x15\xea\x4d\xc0\x4d\x57\x53\xf7\xf1\x06\xef\x57\x1d\x8e\xa1\xec\xef\x0d\x19\xe4\x47\xa7\xe7\xbf\xbf\x39\xf8\xd7\xf1\x9b\x31\x39\xa6\xd1\x22\xc4\xe4\x10\x84\x02\xd3\x00\x46\xb1\xa0\x4b\x46\x28\x29\x04\xff\x77\x61\xc3\xca\x7b\xfe\xb7\x83\x4e\x11\xe9\x1b\x4a\x5f\xc3\x6d\x1a\xed\xf8\x8d\x4d\xef\x60\x34\x9b\xb1\x25\x15\x83\x36\x35\x6b\xea\x93\x8f\x65\xaf\xd0\x44\x00\x85\x0b\x12\xeb\x8f\xde\x1d\x9f\x43\xc2\x7e\x96\x23\x52\x09\x64\x78\xc1\xf7\x30\xd2\x94\x99\x5f\xd8\xfe\xc4\x63\x72\x20\x56\xf8\x25\x9e\x29\xae\x48\xc2\x95\x66\x20\xf5\xac\xda\xe6\xa2\xe4\x3b\x2f\xc6\xf0\xbf\x1d\x42\xe3\x38\x37\x7a\x9d\x4f\x5c\x8b\xd6\x32\x49\x51\xf3\xe3\xd3\x24\x78\x01\xc1\x34\xe6\xa9\xbd\x95\xb1\x9d\x39\x48\x12\x88\x90\xa1\x18\x54\x3a\xa7\x9a\xcd\x79\x44\x52\x96\xcf\x19\xc9\xa8\x8e\x16\x24\xa5\x2b\x12\xc9\x3c\x2f\x32\xec\x66\x10\x53\x4d\xc7\xe4\xb5\xcc\x49\xea\x0e\xb1\xd9\xf3\x46\x0e\x9f\x6f\xce\x1c\x28\x4f\x76\xf8\x4f\xae\x54\xc1\xd4\xfe\xcb\x17\xdf\x7e\xfd\xb7\xbf\x3d\xab\x06\x78\x3e\xb5\x17\xf2\x5e\x82\x06\x78\xd4\xad\x02\xae\x3a\x36\x44\xe4\x62\x9e\x84\xfb\xab\x99\x00\x68\x6b\x65\xb6\xb5\x31\x47\xe5\x1b\x4c\x9a\x9a\x9a\x9d\x34\xe2\x2b\xe7\xd0\x51\xfb\xaa\x52\x0e\x3a\xc3\xca\xf2\x06\x19\x76\x24\x3e\x99\xb8\x83\x69\xf5\x9c\xb4\xd6\xc6\x36\x2b\x73\xa0\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\xd0\xfa\x7b\xdb\x66\x5f\x6d\x4d\xa0\x2e\x52\x9a\x8c\x7d\x7f\x32\xe9\x88\xe2\xbf\x18\xa6\x69\x46\x34\x54\xd5\x92\x4c\xb9\x55\xec\xd9\xb5\x66\xb9\x51\x34\xed\x4a\x3c\x6a\x9b\x34\x33\xc1\x07\xdc\x66\x18\x78\x38\x99\x55\xd3\xa8\xee\xb7\xd1\xcc\xcf\x7f\x94\x4a\x9f\x5a\x2e\x54\x6d\xf8\x53\x8e\x96\x02\xe3\xaf\xb0\x31\x23\x37\x94\x2e\x0f\x98\x22\xb1\x84\xac\x2e\x4c\x71\x5e\xf0\x16\xc9\x1a\xdb\xb3\x8d\xdb\xc5\xef\x2b\xeb\x79\xdb\x4a\xd5\x5c\x29\x60\x03\x59\x15\x2b\xc0\xe8\xca\x64\x6c\xb5\x33\x33\xad\x38\x90\x19\xb7\xa8\x67\xd6\x6b\xe3\xfd\xcd\xb0\x97\xcc\x79\x8a\xa8\xc0\x22\x93\x19\xcb\x73\xcc\x4a\x9f\xae\x5c\x72\x60\xeb\xc5\x6b\x75\x92\xb2\x5c\x6a\x19\xc9\x16\x9d\xdc\xaa\xd1\x6e\x3b\x1c\x10\x21\xc3\xbd\x6b\x29\xff\xfe\x68\x32\x24\x17\x87\x13\xe8\x6e\x75\x7e\x78\x31\xa9\xda\x2c\x3b\x17\x87\x93\x9d\x47\x25\x05\x71\x0a\x1f\xb8\xa8\x1b\x0c\x52\x71\x41\x19\x6d\x72\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\x7f\xa0\x4a\x2f\x97\x76\xeb\x9f\xb9\xb9\xe4\x2b\x95\x4b\x16\xa3\x96\xee\x7e\xc1\x44\x9c\x49\x6e\xf4\xc5\xbe\x0e\xec\xfe\xbf\xee\xeb\xc0\xee\x7c\xf5\x75\x60\x7d\x1d\xd8\xfa\xb5\x35\x89\xb3\x7d\x1d\xd8\xf3\x8a\xe0\xf7\x75\x60\xf7\xbf\x1e\x3d\x70\xdf\xd7\x81\x6d\xbe\xfa\x3a\xb0\xbe\x0e\xec\x6e\x57\x5f\x07\x76\xff\x6b\xeb\x52\x8e\xfa\x3a\xb0\x7b\x5d\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\x70\xf5\x75\x60\x37\x5c\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\xef\xea\xeb\xc0\xfa\x3a\xb0\x67\x9d\x1e\x4b\xfa\x3a\x30\x7b\xf5\x75\x60\xcf\x22\x09\x90\xf4\x75\x60\x77\xba\xfa\x3a\xb0\xbe\x0e\xac\xc9\xd5\xd7\x81\x3d\x17\xa7\x4c\x5f\x07\xd6\xd7\x81\xfd\x71\x14\xdd\xbe\x0e\xac\xaf\x03\xeb\xeb\xc0\xfa\x3a\xb0\x5b\x67\xd1\xd7\x81\x3d\x07\x13\x30\x67\x8a\xff\x87\x4d\x64\xc2\xa3\x55\xeb\x2c\xc5\x33\xdb\xf8\x58\xd9\x61\x49\x06\xe3\x06\xa9\x55\x2d\x2a\x4f\xb6\xac\xe0\xe6\x2c\x20\x5c\x58\x78\xe3\x9b\x3f\x7f\x01\x12\x6c\x45\xf1\x8d\x7b\xc1\xd3\xe6\x91\x94\x91\x6b\x40\x80\xe4\x6b\xe6\xb7\x68\x6d\x22\x84\x2f\xd2\x51\x3e\xf8\x6e\x58\x11\xe9\x77\x82\x96\x9e\x83\xf1\x1b\x37\x08\xcd\xb2\x84\x33\x35\x26\xe7\xbe\x01\x0f\x70\x2f\xf5\x8a\x44\x59\x31\x24\x29\x4b\x65\xbe\x6a\x61\x4d\x74\xa0\x70\x56\x56\xad\x23\x92\x9d\xe1\x98\x8e\x0c\xc6\x88\xc8\xb2\x64\x85\xca\x54\x59\x4a\xea\xa9\xc6\x1d\x73\x89\x41\xdd\xa9\x65\x79\x70\x5d\x31\xc3\x4e\xa5\x3e\xb3\x1b\xfe\xd1\x72\xed\x6f\xca\x2a\xa7\x5a\xa6\x3c\x6a\xc2\xb0\x91\xc7\xb6\xcf\x29\x3f\x94\x69\x56\x68\x56\x61\xdb\x48\x2c\xd4\xe4\xb8\x0a\x4d\xb8\xf6\xd9\xe0\x91\x14\x33\x3e\xb7\xaa\xf8\x3e\x76\x74\x1f\xf9\xf7\x19\x05\x5d\xd4\x9f\x60\x2a\x78\x94\x50\xde\x3c\x6e\x5f\x4d\xad\x3a\x84\xb1\xa0\x42\xb7\x4c\xae\x82\x1c\x5d\x4f\xad\xa1\x4f\x5c\xe2\x78\x4c\xc6\xee\x2b\xfc\xf1\x10\x33\x7d\x8d\xfd\x01\x4a\xe7\x86\x05\xfd\x28\x4a\xf5\x58\x10\x9a\x64\x8b\xdb\x15\x64\x33\x91\xa3\x95\xa0\x29\x8f\xdc\x8e\x39\x48\x12\x19\xa1\x41\x54\x55\x91\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x21\x24\x45\xb2\x32\xbb\x49\x31\xed\x02\x1f\x76\xf9\x1b\xe7\x60\xb5\x4f\xc0\x68\x99\x7c\xb1\x51\x1b\x82\x05\xc1\x6a\x28\x26\xcc\x29\x93\x82\x11\x26\x74\xbe\x32\x6b\x37\x91\xf1\xb9\x59\xbe\xca\xdd\xad\x8b\xa4\x5a\xe6\x5c\x74\x91\x6f\xd1\x32\xd7\xa2\x9b\x0c\x89\xf6\xd9\x11\xeb\x61\xde\xa0\x6e\x31\x4c\x7c\xac\xac\x6a\x26\xe3\xf1\x86\x53\xe9\x54\x83\x89\x8c\x8d\x80\xcb\x59\xd8\x0a\xcf\xda\x87\x70\x40\x52\x7a\x09\x26\x36\xd5\xa5\xe4\xa3\x4b\xca\x13\x73\x84\x36\xd4\xe3\xb7\x4b\x9c\xe8\x40\x35\xe8\xba\x18\x8c\xb4\xdd\x41\x5d\x16\x73\x11\xe8\xdc\x95\xf2\x66\xe8\x0f\x64\x4d\xf0\xbe\x81\xb1\x82\x74\x2c\xb3\x27\x52\x7a\x0d\x36\x2b\x4d\x65\x21\x34\x56\x78\xa1\x7c\xf6\x4c\x1f\x93\xd6\xb6\x4e\xf2\x92\x6e\xd8\x0e\x8d\x5d\x09\xcc\xa4\x8b\x6c\x72\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfa\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xb5\xf7\x71\x0c\xff\xf8\xcb\xe0\xfb\xc1\x27\xf7\xc7\x57\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x7f\x6e\x3c\xe5\xd6\x3e\xea\xee\x3c\xd4\x1d\xf9\xa7\xbf\x88\x77\xda\xe6\x71\x76\x74\x16\x6d\x0e\xfa\xda\x69\xb4\x1e\xa4\xdb\x4e\xa3\x93\x92\x60\x88\xf8\x71\xb8\x22\x32\xe5\xda\x18\x70\x46\xad\xa1\x61\xe5\x59\xcd\x3c\xb1\x7c\x00\x6a\x2f\x29\x94\x88\x05\x55\x5b\x81\x55\x23\x9d\x2b\x16\xcc\x23\x41\x78\x9a\x25\x2c\x65\x42\xc3\x79\x1e\x39\x4d\x10\xec\xc5\x71\x39\x93\x08\x35\x76\x76\x1d\x31\x16\xdb\x87\xf5\xac\xe3\xf3\x57\xcf\x3a\x9e\x23\xeb\x50\x2c\x2a\x72\xae\x57\x87\x52\x68\x76\xdd\x28\x22\x5a\xe5\x1c\xe7\xd5\x01\xad\x41\x66\x73\x5a\xed\x77\x44\x66\x58\xc1\x59\x83\xc8\x5a\xc8\x22\x89\xa1\x2c\xbb\x10\x10\x10\x42\xbc\x0d\xa6\x31\x5a\x03\x0a\x21\x68\x8b\xf5\x87\xb8\xf8\x0b\x86\x85\xfe\x5d\xf0\x25\x4d\x98\xd0\xc1\x2f\x26\x10\x71\x08\x7f\x74\xd7\x33\xaf\xa9\xba\x2c\x0f\x3c\x1b\x65\x32\x2e\xcf\xf7\xbe\x7b\x25\xf8\x88\x5d\xeb\xa7\x68\xa4\x83\xfe\x34\xc9\xf9\x92\x27\x6c\xce\x8e\x55\x44\x13\xe0\x6b\xdd\x88\x92\x83\x1b\x46\x87\x85\xcf\x65\xa2\x8c\xce\x6f\x58\x39\xa1\x2e\x64\x07\x96\xf0\x9c\x72\x81\x08\x57\x99\xfb\xb1\xc2\xd8\x9f\x91\x0e\x19\xcd\xcd\x02\xfb\x18\x1f\xd8\xd5\x53\x29\x13\x5b\xbb\x9c\xac\xca\xf1\x6d\x15\xbf\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xb4\x67\x8c\xed\x7a\x74\xbe\x1c\xfa\xc6\x17\x80\xc2\xe0\x82\x11\x9a\x5c\xd1\x95\x2a\x03\x9d\x01\x96\x9b\x7a\x45\x5e\x0e\x60\x3b\x53\x45\xfc\x18\x31\xf9\x7a\x00\xe9\x7a\x87\x07\x93\xdf\xcf\x7f\x3d\xff\xfd\xe0\xe8\xed\xc9\x29\x39\x95\x9a\xa1\xcc\x0b\xec\x9f\xc8\x3b\x98\xcc\x2c\xbd\xff\x6f\x2c\xd5\x18\x6c\x2c\xc8\x3e\x17\xb1\xbc\x52\x8d\xbd\xa0\xb8\xfd\x0c\xf1\x18\x15\xcd\xdc\x3c\x34\xa3\xd0\xe1\xbc\x85\x84\x59\xcb\x08\x0f\x07\x05\x11\x1f\xc7\xfb\x71\x2e\x33\x24\x82\x0b\x4a\x07\x0e\x92\x4a\xd8\x2b\xac\x6c\x83\xf5\x9d\x55\x07\x9c\xe7\x54\xe8\x32\x3a\x5b\xae\x99\x6d\xad\x3e\x6e\xbd\x1c\x8f\x27\xf8\xbb\xf0\x12\xd0\xb8\x3b\x5c\x82\x83\x38\x66\x71\x85\xfc\xcf\xae\x9e\xe8\xd0\xbd\x5c\x10\xf6\x22\x93\x77\xe7\x27\xff\xb7\xb6\x8f\x57\x59\xbb\xc2\x86\x6e\x30\x6e\x72\x99\x75\xb6\xba\x67\x16\x43\xa5\x5f\xdf\xad\x58\x5f\x2f\x2d\xbb\x49\xa7\x3d\x2b\x44\x15\x9c\xb4\x1c\x9f\xa4\x32\x66\x63\x32\xf1\x79\x3d\xd5\x6f\x03\xa8\x32\x9a\x33\x62\x6e\x11\x9a\xd3\x24\x59\x85\x2a\x9a\x96\x88\x27\x52\x41\x59\x0b\x19\xf9\x8c\x26\xea\xb1\xb9\x71\x1b\xd9\x68\xf4\x88\xb7\xc6\x5c\xee\x64\x39\xfc\x68\x24\x66\x42\x6a\xab\x58\x9b\x59\x02\x72\x5d\x2e\x23\x82\xb6\x79\x50\x3c\x51\x91\x6f\x0a\x73\x8b\x9c\x68\xe4\xca\x11\x7b\xe2\x47\xc6\xb0\x6c\xa1\x58\x5d\x41\xb7\xa2\xb1\xb4\xd6\xcd\xe8\x39\xa3\x31\x44\x2d\x32\xaa\x17\x98\xfb\x9c\x52\x75\xc9\x62\xfc\xc0\xaa\x66\x3e\x70\x02\x8e\x5e\xf7\xa8\x0b\x33\x6f\x17\x23\x01\x95\x0c\x33\xb2\x21\xba\xc2\xe2\x47\x5e\xf5\x16\x87\xd0\x10\xe5\x9d\x48\x56\x67\x52\xea\xd7\x1e\x10\xa7\x93\x1d\xf0\x8b\xd5\x96\xab\x81\x2b\x50\x27\x29\x3c\x77\x04\xab\x01\x87\x2a\xc4\xe2\x39\x2a\x57\xfc\xa9\x1f\xa9\xbc\x10\x07\xea\x87\x5c\x16\x8d\x85\xd8\x9a\xb2\xf9\xc3\xc9\x11\xb0\xa2\xc2\xa6\x16\x0a\x9d\xaf\x00\x04\x6c\x1d\xc9\xd9\x1b\x06\xef\x6d\x72\x64\x78\x26\xca\x3c\x36\xf2\x96\xae\x08\x4d\x94\x74\xb4\xb4\x61\xad\xba\x15\x6a\x4d\x5c\xf3\xf5\x54\xea\xc5\x9a\x6d\x6b\x0e\xd4\xfa\xef\x86\x41\xa6\x61\x99\x0f\xc0\xc5\xda\xcf\x35\xc4\x4c\xb2\x9c\x45\x2c\x66\x22\x7a\xec\x65\x7f\xec\x04\x3d\xd8\x3a\xa7\x52\x98\x83\xd9\xc9\xe6\x39\xf1\x99\x99\x96\xa4\xe1\x56\x81\xa0\x98\xb5\xfe\x28\x64\x7a\xc2\xb1\x2c\x14\xcb\x31\x2d\x35\x2f\x18\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\x1c\x51\xaa\xd1\x9d\xc1\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\xc8\x35\x89\x25\x2b\x71\xb4\xa8\x22\xef\x4f\x8e\xc8\x0b\xb2\x67\x9e\x35\x80\xfd\x33\xa3\x3c\x81\x24\x50\x48\x2a\xa9\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\x70\x09\x22\x2f\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x85\x02\xdd\xb9\x5a\xce\x8f\x61\x58\x12\x39\xaa\xc3\xaa\x63\xf2\x5d\xec\xbc\x29\x41\x92\xcc\x49\x65\xaf\x0c\x6f\x50\x13\x81\x4f\x50\x4c\x86\x61\x46\x39\xa1\x22\x96\xe9\xda\xc3\x8c\x12\xc9\x2a\x3d\x10\xc6\xa4\xdf\x7d\xd5\x6b\x4b\x9c\x42\x09\x5b\xb2\x16\x28\xc1\xf5\x9e\x0f\x66\x34\x43\x1c\xb7\x23\x60\x78\x92\xd0\x29\x4b\x6c\xa2\x16\xa6\x7f\xae\xef\xc0\xc7\xae\x1e\xcb\x65\xd2\x5d\xb9\xfb\x99\x4c\x18\x96\x63\x38\x42\x98\xe1\x9f\x04\x1d\x60\x90\xae\xe8\x00\xd6\x60\x85\x0e\x60\xd7\x3e\x05\x3a\x14\x2d\x44\x3d\xa9\xd3\xc1\xe8\x0d\x55\x3a\x80\xf0\xde\x76\x3a\x28\x16\x45\x32\xcd\x26\xb9\x34\x66\x67\x67\xb2\xc9\x0e\x5b\xc6\x0c\xd1\xb1\xb1\x21\x75\x13\x64\x41\xf5\x66\x9a\x07\x85\x58\x54\xa3\x90\x70\xd5\x58\xff\x2b\x90\x59\xc0\x7a\xea\x82\xcc\x8d\x52\x09\x2f\x9a\x5f\xda\x2f\x9e\xb2\x38\xe8\xa2\x96\xb9\x85\xb3\xb3\x13\x69\x24\x23\x9a\x40\x17\x88\x76\x5b\x8e\xd4\xb7\x5d\x7d\xe0\xa0\xfc\x0e\x62\x94\xf0\x59\x90\x69\x4c\xc1\xd1\xe2\x5c\x98\x42\xc6\x2c\x88\x65\x63\xf6\xe2\x05\x96\x69\xc1\x7d\xae\xf2\xcf\xe8\x15\x2e\xac\x1c\x57\x7e\xad\xa5\xc5\x32\x7e\xeb\x7b\x4b\x98\x09\x32\x11\x73\x31\x07\xbf\xda\x90\xe4\x2c\xc1\x9a\x41\xcb\x04\x2e\xd1\x82\xdc\x85\x23\xe1\x06\x75\xe7\xc1\x3d\xda\x25\x26\xdb\x91\xc3\x6c\x63\x3e\x43\x76\xcb\x15\xd9\x79\xe3\x08\xd0\x02\x8c\x7f\x1b\x25\xcc\x0e\xbe\xa1\x5f\x4d\xf4\x74\x5e\x72\x11\xdb\xf2\xba\x0a\xb1\x7c\x37\x27\xd4\x83\xa1\x70\x93\xc7\x21\x6f\x79\x45\x3e\x0a\xe2\x89\x45\x46\x8d\xb7\xc7\x19\xaa\xcc\xce\x47\x37\xba\xdd\xf1\xea\x1f\x52\x1f\xe6\xbd\x80\xb5\x37\xcf\x1d\x19\xcb\x7d\xfd\x3e\xf7\x2e\x8f\x0a\xe8\x69\xb9\x5f\xd7\x56\xcc\x2f\x38\xac\x53\xe9\x23\xb3\xad\x35\x17\x73\x15\x5a\x32\x34\x49\x2a\xce\xf0\x4d\xa6\x8c\x5b\x61\xdf\xbb\x6b\xdd\x84\xa8\x95\x05\x3f\x15\x33\x24\x31\xea\xc4\x13\x37\x42\xe6\xa9\xa2\x87\xb9\xa1\x84\xe6\x34\x39\xcf\x9a\x37\x1b\x20\x6b\xc0\xd6\x6f\xcf\x0f\xaa\x43\x83\xb0\xb6\x39\xe9\x0c\xbe\x27\x34\x4e\xb9\x52\xe0\x08\x63\xd3\x85\x94\x97\x64\xef\xd6\x9e\x6b\x23\xc5\xe7\x6a\xdf\xee\xf9\x91\x99\xfd\x80\x70\x91\xf8\xac\x28\xb0\x83\x85\xf6\x69\xf0\xf0\x90\xc8\xcf\x02\xd6\xd0\x76\xa0\xb1\xc9\x0a\xeb\xd3\xc4\x9e\x33\x66\x17\x3c\x3a\xc3\x5e\x5f\x9e\x76\xa5\x84\x9f\x5d\xa2\x53\xbb\xb7\xeb\x78\xcb\x1b\xe9\x88\xda\xe3\xa3\x13\xc9\x2a\x17\x11\x53\xdd\xc1\xbc\xfe\x58\x8e\x49\x62\x86\x55\xf7\x0c\xb2\x9f\xe8\x8d\x49\x76\xe0\x97\xde\x05\xf0\x16\xfb\xd3\xdd\x50\xa3\xae\x56\x2b\x41\x31\xd4\x08\x8d\x74\xc3\xd1\x80\x05\x3a\x15\x62\x21\x85\xb4\x35\x72\x46\x88\x4a\x01\x5b\x1a\x58\x14\x46\xf3\x60\x4d\x2c\x8b\x0e\xa6\x7a\x58\x46\x89\xc3\x40\x20\x80\x3f\x68\xdf\x24\x11\xe7\x70\xc5\xf5\x02\x3a\x36\x2c\x6a\x51\x43\x98\x49\xce\x14\x04\x60\x04\x61\x79\x2e\x73\x9b\x90\xe5\xfc\xd6\xb6\x54\x6b\x22\x63\xc8\xe8\x32\x9b\x84\x9a\xbf\x76\x55\x18\xa8\x2e\x9b\x3a\x79\x0c\x4e\x36\x9b\xb1\x08\x14\xad\x90\xc0\xc8\xb5\xf7\xca\x16\x16\xb6\x08\xc1\x6c\x30\xdb\x14\x2a\xe5\xd7\xe6\x29\xe1\xaf\xc2\x90\xb8\x6d\x1d\xb1\xf9\xeb\xc1\x98\x90\x13\xe1\x33\x78\x87\x66\x15\xc3\x3b\x5d\xea\x99\x36\xaf\x18\x76\x14\x83\x17\x08\x1d\x67\x46\x3b\xcc\x8b\x0e\x76\x7c\x1b\x77\x38\x09\x5d\xe2\x9d\xb2\x03\x70\x8d\xdb\x41\xcd\xd2\x3b\x1d\xa0\x8d\xab\xdc\xdc\xf2\xa5\xdc\xe5\x4f\x23\x00\x42\xda\xf2\x39\x8b\x7e\xd6\x51\x9b\xa7\xf3\x60\xb4\x40\x7b\xf7\x01\xb7\x89\x8c\x11\xfd\xd0\xa3\xb7\x25\x2b\x87\xc6\xe8\x6b\xa2\x03\x1d\x4f\x48\x2c\x1e\x08\x61\x11\x6d\x73\x9c\x98\x18\x55\x3b\x71\xbe\x85\x34\x4b\x18\xa0\xae\x04\x23\x97\x80\x32\x41\x5f\xa8\x61\x59\xc1\xe6\x5b\x4b\x59\x30\xc6\x21\xf9\x1f\x38\x94\x3e\x11\xd5\xe1\xc4\x4d\xfc\xcf\xd1\x42\xe4\xca\x35\x89\x83\xe2\x54\x2d\x9d\xeb\x82\xc4\x7c\x06\x75\x92\xda\x3e\x32\xa3\x39\x4d\x0d\x8b\x57\xc4\x92\x60\xca\xe6\x1c\x13\x22\x3d\x63\xdb\x35\xea\x9e\xc5\xe6\x18\x22\x33\xe4\x9a\xa4\x7c\xbe\xc0\x8d\x42\x28\x20\xea\x10\x17\x54\x4c\x24\x8d\xa1\xb9\x2c\x91\x39\xb9\xa2\x79\x6a\xe4\x06\x8d\x16\x10\xa1\xa4\x82\xc4\x45\x0e\xfd\x52\x34\xa3\xf1\x6a\xa4\x34\xd5\x46\x53\x66\xb9\x35\x28\xdd\xfc\xfb\xe6\x58\xb7\x5e\x7d\x73\xac\x3b\x5e\x7d\x73\xac\xbe\x39\xd6\xfa\xb5\x35\xd9\xa1\x7d\x73\xac\xe7\x05\x6b\xda\x37\xc7\xba\xff\xf5\xe8\x68\xa6\x7d\x73\xac\xcd\x57\xdf\x1c\xab\x6f\x8e\x75\xb7\xab\x6f\x8e\x75\xff\x6b\xeb\x70\x98\xfb\xe6\x58\xf7\xba\xfa\xe6\x58\xeb\x57\xdf\x1c\xeb\x86\xab\x6f\x8e\x75\xc3\xd5\x37\xc7\x5a\xbf\xfa\xe6\x58\xf7\xbb\xfa\xe6\x58\x7d\x73\xac\x67\xdd\x33\x80\xf4\xcd\xb1\xec\xd5\x37\xc7\x7a\x16\xc8\xe8\xa4\x6f\x8e\x75\xa7\xab\x6f\x8e\xd5\x37\xc7\x6a\x72\xf5\xcd\xb1\x9e\x8b\x53\xa6\x6f\x8e\xd5\x37\xc7\xfa\xe3\x28\xba\x7d\x73\xac\xbe\x39\x56\xdf\x1c\xab\x6f\x8e\x75\xeb\x2c\xfa\xe6\x58\xcf\xc1\x04\x54\x3a\xe6\x8d\xb0\x41\xef\x02\x63\x64\xd3\xd3\x03\xd4\x80\x69\x31\x9b\xb1\x1c\x38\x17\x3c\x79\x2d\xad\xaa\x44\x6c\xac\x87\x72\x99\x1e\x02\x22\x92\xad\xe4\xb9\xe1\xe7\x16\xa6\x00\x30\x3c\xcb\x1c\xf2\xe3\x77\xaf\x37\x60\x26\x35\xce\x37\x6c\x9a\x3d\x0d\x73\x7e\x27\x9a\x45\xe1\x6f\x20\xf8\xa6\xca\x32\x4b\xf7\x28\x91\xca\xe6\xbe\x03\xb1\xa2\x05\x15\x82\x39\x7b\x8f\x6b\xf0\xa3\x4c\x19\x13\x44\x66\xcc\xc6\xc0\x29\x51\x5c\xcc\x13\x46\xa8\xd6\x34\x5a\x8c\xcd\x93\x84\x23\x76\x99\xa7\x6e\x3f\x51\x3a\x67\x34\x75\x19\xfb\x29\xe5\x38\x14\xa1\x51\x2e\x95\x22\x69\x91\x68\x9e\xf9\xc1\x88\x62\x50\x6a\x83\x82\xca\x13\x03\xf2\xe5\xca\xe4\xf6\x61\xf9\x34\x3b\x2d\x19\x82\xd6\x81\xb5\x39\x04\x20\xf1\x34\xd3\x2b\x9f\xe1\xcb\xc8\x8c\xe7\x4a\x93\x28\xe1\x20\xad\xe1\x89\x58\x55\x0d\xe3\x0d\x9d\xac\x16\x76\xa6\xca\x4e\x55\xc4\xa0\xb6\x66\x5a\x61\xbe\x6c\x39\xa0\x1d\x2a\xe6\xca\xaa\xf9\x6a\x48\xa8\x43\x54\x43\x42\xbb\x99\x02\xa9\x9d\x64\xc1\xd1\xed\x47\xc1\x70\x01\x92\x6c\x99\x50\x5c\x6e\x74\x28\x7e\x70\x9b\x73\x58\xa9\xf3\x28\x15\x0a\xdb\x2f\xa3\x76\x0c\x60\x01\x04\x5b\x9a\x3d\xc0\x22\x66\xe4\x2b\xbd\x61\xd7\x3f\xf8\xa6\x0f\x84\xe2\x5b\xa6\x14\x9d\xb3\x49\xc3\x40\xc3\x4d\x16\x19\xc4\x1a\xca\x85\x81\xad\x90\x54\x7a\x92\x85\x79\x9b\x55\x35\x88\xa4\x38\x27\xaf\xfc\x5c\xe5\x5c\x6b\x06\x8b\x0a\xd8\x7b\x10\x11\xad\x97\xe6\xef\xd6\xb2\x3f\xdf\xba\x41\xca\x1f\x1b\xa6\x2e\x62\xcc\xc5\x9c\x32\x32\xcd\x39\x9b\x91\x19\x87\x04\x4f\x48\xb9\x1c\x22\x14\x13\x45\x2f\x80\x52\xc6\xde\x95\xc2\xe9\xb2\x6e\x5e\x63\xf2\x8b\x9d\x98\xce\x0b\x11\xd1\x00\xe5\x16\x6a\x4f\xf9\x8c\xcc\x21\x65\xd3\x6a\x8b\x7f\x7d\xf1\x8f\xbf\x93\xe9\xca\x88\x34\xd0\xac\xb4\xd4\x34\xf1\x2f\x99\x30\x31\x37\xb4\xc2\xe3\x59\xad\x9e\xf4\x14\x80\x36\x20\x38\xf1\x97\x5f\x5f\x4e\xab\x32\x76\x3f\x66\xcb\xfd\x80\x7e\xa3\x44\xce\x37\x35\xce\x6a\x9e\xcc\xdd\xd0\x24\xda\xb0\xcd\xba\xe9\xf8\xe8\x30\xc1\xc8\x42\x5e\xa1\xae\xbf\x61\xf7\x94\x85\x58\x99\xcc\x8a\x04\x9d\xce\xaf\x7d\xdd\x71\xa1\xd8\x7a\x75\xe0\xc6\x73\x01\x6e\x52\x3b\x44\x1d\x51\x1d\x33\x75\xdd\x23\xa5\xad\x3a\xb1\x8e\x3c\x0f\x0d\x06\x86\xd0\x6b\x9a\x24\x53\x1a\x5d\x5e\xc8\x37\x72\xae\xde\x89\xe3\x3c\x97\x79\x75\x2e\x09\x35\xdc\x72\x51\x88\x4b\x6c\xfd\xe0\xc1\x13\xe4\xdc\x86\x72\x5d\x89\xc3\xa6\x17\xc6\x4a\x7a\xc7\x84\x9d\x19\x54\x8e\xc2\xae\x79\x69\xeb\xd8\x22\x2e\xdc\x91\xe1\xf8\x2a\xdc\x6c\x5f\xbf\xf8\xeb\xb7\xb8\x75\x89\xcc\xc9\xb7\x2f\x20\x9b\x5b\x0d\xf1\x10\x03\x6f\x33\x82\x22\xa5\x49\x62\xcc\x86\x70\x53\x1a\x42\x6f\xda\x84\x0f\xbe\x07\x75\xfb\xed\x76\x67\x55\xea\xe2\xe2\x57\xd0\xa3\xb8\x56\x2c\x99\x0d\xb1\x5e\xc9\x9b\x35\xbb\x20\x18\x76\x2d\xf7\x81\xa2\xb1\x2d\x50\x80\x96\x32\x29\x52\x76\xc4\x96\xbc\x8b\xee\x7e\x95\xd1\x9c\xa9\x9f\x70\x05\xa5\x61\xd3\x44\x46\x97\x24\xb6\x5f\x06\xf9\x2d\x75\x8c\xf0\xa7\xdb\xa8\x35\x7c\xff\x4a\x6e\x4f\x4a\xb3\xcc\x57\x0f\xe5\xf4\xaa\x42\x0c\x38\x93\x00\x64\xf0\xf4\x1b\xb5\xe2\x1b\x19\xbe\xd9\x78\x88\xc6\x09\x41\xed\x7d\xd4\xe5\xec\x3b\x6a\xc7\x57\x0e\xe8\x4e\x43\x06\xff\xc6\x7a\x93\xb5\x7a\x49\x5f\x72\xe7\x37\x06\x2a\x00\x66\xfb\x00\x4b\x7e\xb4\x86\xa2\xa4\x75\x62\x53\x85\x2e\xe2\x96\x9e\x76\x94\x64\x2c\x57\x5c\x19\xb9\xfc\x33\x1c\x28\x6c\x66\x58\xba\x00\x1f\x87\x08\x78\xb8\x01\x58\xb9\x3d\xa7\x9c\xc8\xd8\x0e\x08\xac\x10\x41\xa5\x37\xa8\xb5\x55\xad\xb6\x43\x81\xfa\xd8\xac\xf2\xe7\x92\x9a\x55\x4e\x69\x3e\xf1\xac\x12\xef\x7a\x4e\x0c\x12\xde\xef\xa9\xf2\x47\x3f\xf9\x8e\xd8\x00\x30\x46\xbb\xb8\x55\x4e\x58\x31\x1e\xf1\xa0\x04\x2a\xbd\xb5\x03\xc7\x04\xa3\xe0\xe6\x4c\xd8\x9f\x92\xdd\x57\xbb\x8f\xca\x24\x91\x44\xb9\xcc\xe8\xbc\x55\x97\x9f\x1a\xa5\xea\xc3\x86\x10\x14\xc6\x0c\x82\xef\x3d\x20\x1b\xdc\xc5\xe2\x12\x61\x07\xf0\x93\x30\x3a\xea\x08\x6c\x0d\x04\xac\xd4\xbe\xa2\x2b\x42\x73\x59\x88\xd8\xfa\x97\xbc\x83\xef\x6d\xed\xc1\xa7\x52\xb0\xb2\x6b\x68\x15\xc1\x02\x3c\xfa\x5c\x90\x97\xe3\x97\x2f\x9e\x8b\xa4\x82\x37\xac\x49\xaa\x53\x2f\xa9\x90\x3f\x3d\xea\xbb\x3a\x2c\xfc\x8e\xde\xf7\xad\x75\xb1\x94\x50\xf7\xdc\x01\x69\xc3\x47\x57\x39\xd7\x2c\x68\x0e\xb8\x07\x86\x8b\xb1\x0f\x03\xbc\x86\xc1\xa6\x1e\x13\x2d\x89\xd4\x0e\x20\x43\x15\xd3\x2f\xc8\xb7\x2c\x83\x82\xe3\xb6\xc9\xc3\xa5\x6e\x61\x61\x21\xa1\x76\x76\xc8\x1e\xde\xb9\x8b\xa5\xce\x83\x47\xdd\x5a\x96\x68\xc7\xd7\x59\x0b\xf4\xcd\x5a\x55\x7d\x46\xc1\x07\x97\x75\x48\xc1\x7f\xb1\x05\x5d\x32\x28\xf1\xe6\x09\xcd\x13\x88\x39\x9e\xe3\xdc\xc9\xb4\xd0\x84\x89\x25\xcf\xa5\x48\x99\xd0\x04\x72\xe0\xa7\x09\x0b\x7b\x63\xff\x79\xef\xe7\x83\x33\x48\x68\x18\x58\xb0\x0a\x3b\xcb\x42\x39\x60\x9b\x70\x26\xc1\x70\x9f\x5d\x3e\x37\x0f\x43\x43\xe0\xb9\x6e\x5e\xe6\x39\x69\xa1\x0b\x6c\xd8\x72\x1d\x25\x85\xe2\xcb\xc7\xe2\x24\xb6\xf6\xfe\x88\x37\x5a\xe7\x1a\x0e\x40\x49\xa8\xb5\x92\x7e\x70\xad\x6f\x28\x03\x5c\x0b\x98\xec\x2a\x5f\x1a\x18\xc6\xc0\xad\xeb\xc9\xa2\x6c\x60\xfa\x9c\xc3\x62\x5c\x53\x21\x00\x51\xe6\x71\x9d\x50\x42\xc6\xec\xfe\x78\x3c\xd5\xf4\x1e\x3b\x04\xc6\xcc\x83\x3a\x41\x15\x2d\x58\x5c\x24\xb6\x9b\x37\xc0\xa6\x1a\xf3\x81\x96\xf8\x7c\x02\xfa\x07\x9d\xcc\x3c\xd8\x81\x18\x81\x73\x10\x69\xee\x7e\x9f\x3b\x68\x04\xf7\x81\xaa\x8d\x08\x46\xa9\x19\x6b\x48\xa8\x52\x45\x8a\x47\x02\x5b\x23\xcc\xb8\x56\x65\xb3\x70\xab\x1d\x9b\x83\x71\xcf\xb2\xad\x16\xf4\x3d\x67\x09\x6c\xae\x16\x34\xde\x3d\x0d\xc6\x41\x42\x2b\xf7\x97\xdd\x70\x36\x61\x02\xa2\x6d\x3e\x8f\x53\x82\x97\x74\xc6\xa1\xbd\x12\xb5\xf4\x3e\xdf\xf0\x4b\x54\x1d\xf0\x0e\x00\x8e\xa1\x53\x96\xa8\xfa\x40\xd3\x72\x51\x2c\x5e\xa9\x25\x7c\xcb\xfe\xb9\x54\x29\x3e\x17\xd0\x59\xd3\x8c\x76\xcf\x1e\x9a\x8d\x6d\xa6\x2e\xfa\xe3\x36\xe6\x6a\x95\x2c\xac\x94\x66\xb6\x11\x3b\xd5\x32\xe5\xd1\x3d\x46\x92\xf7\x9c\x72\xad\x22\xbb\x52\xe9\xfb\xee\x7c\xcd\xe3\xa3\x02\xaf\xc6\x98\x9c\xcb\xd4\xa6\x38\x89\xa0\xbf\x97\x6b\xb3\x6a\x24\x46\xce\x0c\x2d\x20\xf1\x88\x97\xd1\x78\xe8\x87\xe3\x6a\xad\xe1\x39\x5e\x25\xb7\x61\x5c\x00\xa6\xb4\x6d\x5e\x65\x92\xc8\x2b\x48\x2c\xc6\x71\xdd\xde\x86\x14\x98\x57\x64\x54\xeb\x59\x3b\xae\xc2\x89\xde\xfe\x1c\x7b\xef\xf0\xf3\x4f\xc1\xfc\x1c\x00\xea\x3b\x39\x0a\xff\x3c\x99\x1c\x86\x7f\xbe\x57\x86\x4a\xf6\x83\xfa\xd4\xaa\xfd\x1a\x6e\xbe\x2b\x44\xce\xbe\xe9\xae\x19\xb6\x3c\xfa\xcc\xd7\x87\x0b\x2a\x5c\x20\xeb\xc6\xe7\xad\x54\xa4\x93\x72\x3a\x0b\x9a\x33\x8b\x2c\x67\x38\xb9\xca\x68\x74\xe3\x2c\x3c\x8c\xdb\xad\x37\xdc\x3a\x53\x55\x64\xae\x53\x77\x02\x37\xfa\x99\x94\xdb\xee\xc3\x5f\x7e\xbb\x23\x31\x3f\xf7\x9b\x4d\xa4\xbd\xfd\x37\x95\x86\x7e\x77\xfa\xc5\xe6\x76\x5f\x77\xfb\x6d\xd0\x31\xef\x4e\xf7\xdf\xd4\xad\xf7\xae\x4f\x73\x5d\xde\xee\xf6\x62\xf5\xd5\xbe\xc3\xed\xb0\xa4\xf7\xc3\x44\x68\xcc\xc2\x9b\xba\xbb\x1a\x38\xa9\x9a\x3b\xa7\x9a\x19\xfb\x35\x05\xe0\x06\x90\x53\x0b\xc0\x26\xe6\xa4\x02\x2b\x55\xe4\x39\x13\xd0\x2f\xbf\x80\x4c\x47\xd7\x07\x1f\x99\x34\x30\x5b\x0b\xe1\x89\x38\xf4\xe4\xc0\xcb\x42\x9b\x01\x97\x52\x80\xf5\x0c\x60\xac\x67\x05\x24\x34\x02\xeb\x47\x98\x3a\x29\xcc\x3c\x5e\x6d\xc2\xe1\x90\x19\x13\x41\x17\x7c\xab\x35\x8f\xcc\x1e\xaa\x20\x73\xa0\x22\x30\x4e\xe3\x3f\x65\x09\xd5\x33\x99\xa7\x23\xa7\x1e\x8e\x2a\x4a\x02\x39\x84\xd4\x1a\xe5\xec\x2b\xcc\x6f\x45\xb8\x4d\x11\x27\x2c\x90\xe6\xfe\x55\x45\x8c\xe0\x54\xa4\x10\x39\x8b\xe4\x5c\x40\xe5\xb1\xfd\x16\xe4\x9a\x77\x0e\x51\x65\x24\x29\x11\x45\x92\xdc\x3f\x0f\xa1\xa1\x12\x20\x97\x2c\x5f\x30\x7a\xcf\xcd\x5b\x4b\x69\xb1\x63\x94\x5d\x49\x95\x45\x2e\xb0\x2a\xaf\x7b\x88\x51\x8d\x65\x04\xb5\x6d\x18\x62\x77\x89\xcb\x14\x04\xba\xd1\xf4\x28\x99\xf3\x25\x13\x0e\x8c\xfc\x30\xa1\xbe\xb3\xb6\xc3\x5f\xb5\x80\xe8\x85\x96\x3e\x69\x81\x50\x1d\x40\x22\x43\x8e\x93\x8d\x97\x86\xe3\x04\xb7\xd8\xbe\xdc\x89\xeb\x81\x76\x97\x3b\x21\x6f\x00\x9b\x42\x0e\xcb\x57\x4a\x9d\x6f\xb5\x82\xb9\x49\x22\xc8\x6e\x71\xa6\x88\xcd\x6a\xf9\xfc\x23\x6c\x4a\x9a\xe1\x41\x9b\x86\xb1\xea\xb2\x07\x87\x2d\x09\x9b\x18\xf6\xbf\x42\x25\xe7\x64\x56\x7d\x12\xaf\xc0\xf1\x43\xed\x13\xa8\xdf\xa5\x3d\x38\x91\xb1\xd1\xc2\x86\xc4\x2f\x65\xd8\x96\xdc\xc6\x5b\xf0\x4c\x06\x87\x11\x95\xb4\x3c\x67\x2a\x93\xd8\x15\x20\x7c\xec\x30\xf0\x7f\x71\x5d\x49\xb6\xc3\xfe\x6e\xfe\x68\x20\x6e\xdb\x7f\x58\x2e\x37\xea\xf0\x73\xae\xc7\x97\xdf\x82\x02\xcf\xc4\x82\x8a\x08\x6d\xa7\xfd\x4b\x96\xa9\x7d\xc5\xe7\xa8\xaf\xff\xfd\xdb\x6f\x41\x79\x77\x24\xd9\x3f\x3b\x3e\x38\x7a\x7b\x3c\x4e\xe3\x27\xa4\xc9\x67\x54\x6b\x96\x8b\x57\xe4\xbf\xf6\x3e\x7e\xf5\x69\x34\xf8\x7e\x6f\xef\xc3\x8b\xd1\x3f\x7e\xfb\x6a\xef\xe3\x18\xfe\xf1\x97\xc1\xf7\x83\x4f\xee\x8f\xaf\x06\x83\xbd\xbd\x0f\x3f\xbd\xfd\xe1\x62\x72\xfc\x1b\x1f\x7c\xfa\x20\x8a\xf4\x12\xff\xfa\xb4\xf7\x81\x1d\xff\x76\xc7\x41\x06\x83\xef\xff\x7c\xcf\x89\x36\xac\x4b\x69\x5b\x8b\xd2\xaa\xfe\xa4\xc3\x9a\x93\x2c\x67\x2c\x05\xf6\xd7\x24\x5b\xab\xea\x25\xad\x0d\xe5\x04\xac\xfd\xcb\xf0\x44\xf7\x34\x31\x37\x6c\x52\x21\xeb\x4c\xe4\x15\x64\x58\x72\x69\x94\x9f\x31\x79\x07\x72\x90\x9c\xb2\x25\xcb\x87\x6e\xd4\x37\xe6\xa6\x89\xbf\x27\x74\xc3\x6d\xba\xa3\x61\x8e\x7f\xc3\x35\x71\x73\x6f\x41\x3c\xec\x68\x62\x27\x0f\xfc\x69\x4c\x7e\xa6\x39\x97\x85\xb2\xba\x48\x08\x04\x8e\x29\x64\x5e\x92\x80\x57\xc2\x06\x78\xfc\x20\xbe\x32\xcc\xc5\x78\x3c\x6d\x0e\x3c\xbf\x3e\xdc\x2c\x12\xb8\x36\x2b\xb5\x74\x8f\xca\x5d\xaa\xeb\x1a\x86\x38\x0a\x83\x8d\xfc\xdf\x49\x34\x15\x4e\x14\x86\x71\xf3\x00\xde\x7a\x6a\x91\x4d\x18\x59\xf0\xb9\x4b\xa8\x86\xf7\x47\xf3\x35\xf8\xd4\xef\x90\x06\x4b\xda\xe4\x98\x36\xcd\xeb\xcf\xea\xef\xd7\x62\x5b\x54\x91\x96\x43\xb0\x66\x57\x51\x54\x9e\x9b\x1d\xdc\x27\x20\x44\x46\x51\xce\x35\x8f\x68\xb2\x03\xc2\xc9\x7d\x15\x25\x85\xd1\x13\xc3\x6f\x73\x46\xf4\x95\xc4\xa7\xd0\x84\x5c\xb2\xd5\x95\xcc\x63\x27\x9f\xdd\x13\xcb\xb5\x50\xda\x3d\x92\x33\x7b\x80\xd1\xcd\x90\xa7\x2c\x27\x53\xe6\x3c\xe8\xb5\x9b\x57\x63\x72\x20\x56\x36\xfc\x28\xc2\x22\xc3\x00\xff\x0d\x74\x04\xd4\xa2\x2a\x9b\xc4\x0a\x31\xf7\x34\xaa\x2d\x20\xce\x66\xef\xb2\x51\xc0\xfc\x29\x70\xd2\xdf\xb9\x97\x65\x6e\xab\x9c\xe0\x74\xe4\x58\xa3\x25\xdd\xd7\x0f\xc2\x2d\x8c\x7e\xc3\x05\x53\xea\x07\xb3\x94\x6d\xd4\xd5\xea\xee\xa0\xa0\x96\xd8\xb1\xa1\x52\xaa\x4c\x29\x66\xe6\x48\x61\x8c\xd8\xb0\x61\x19\x97\x77\x8e\xc9\x01\x7c\x00\x39\xf1\x46\xf3\x82\x2a\x3a\x33\x18\xd7\xaa\xde\x76\x1e\xef\x38\x38\x3d\x72\xb9\xcb\xa8\x29\xa8\x2a\x90\x3a\xaa\xcc\xd5\x99\x80\xa6\x67\x33\x68\xd9\xbf\x0b\x0a\x1d\x74\x77\x2e\xf2\x82\xed\x34\x53\x95\x10\xa2\x7f\xff\x6f\xdf\xbe\x00\x6d\xc9\x3f\x6f\x04\xcf\x6b\xa2\x2a\xdd\x3f\x47\xa6\x51\x76\x4c\x3d\x31\xe8\x2c\xdc\x0f\x8e\xe0\xce\xee\xb0\x41\x2b\xa8\xed\x85\x65\xf2\x34\x6f\xe4\x5a\x6d\x94\x0b\xd3\x3c\x0b\x66\x54\x4e\xf7\xe2\xfe\xdd\xcd\xda\x24\xb0\x54\x9e\xdb\x45\x94\xab\x1c\x0d\x57\x45\xe1\x92\xf8\xe7\x04\x9e\x5d\x6c\x82\x61\x3f\x86\x74\x58\x60\x5c\x10\x15\x00\xf6\xb8\xca\x5a\xa4\xfe\x36\xe0\x37\x68\xbc\x42\x5a\x5d\x2b\xff\xf6\x59\x65\x24\xcb\xb9\x9d\xa8\xa8\x7d\xe9\x6b\xc8\x6d\xc2\xb4\xab\xcd\x01\xf0\x29\x8f\x1a\xe3\x60\xfe\xa1\x1f\x8a\x6f\xf9\x01\x95\x39\xa8\x15\xb8\xc9\xab\x20\x39\x32\x66\x84\x2e\x29\x4f\xb0\x0f\x8a\x31\xe9\xa4\xaa\x38\xd9\x71\x42\x91\x14\xaa\x48\xe1\x19\xa9\x91\x2e\x28\x33\x3e\x8a\xb2\x26\x55\x60\x13\x96\x5b\xab\x52\xcd\x0c\x8f\x56\x82\xa6\x3c\x72\x6f\x78\x90\xb8\xc6\x6f\xb5\xba\x54\x37\xb6\x77\x93\xf3\x34\x2d\xb4\x99\xe6\x3d\x51\x4d\x1f\x99\x1f\x05\x0b\x19\xc6\xcd\xd9\x35\x8d\x74\xb2\x02\x47\x55\xf5\x26\xbd\xc8\x65\x31\x5f\x10\x4a\xe0\xef\x73\xf8\x6a\x4c\x4e\xb4\xb1\x25\xa1\x59\xbb\x85\x6b\xe0\x1a\xe5\x77\x21\xf8\xbf\x0b\x96\xac\x08\x87\x7e\x42\x3e\x66\x52\x1d\x36\x40\x8f\x87\x4e\x33\x41\x77\x1b\xd4\x02\x18\x8b\x1d\xe4\x81\x35\xed\x6f\x98\x3c\xda\xed\xa0\x3d\x18\x81\x4f\xef\x9f\xc4\xf3\x48\xfc\xb3\x41\xf6\x5f\x1b\xb6\xd9\x34\x93\x6a\x1d\x8b\x6d\xf3\x0a\xf3\x20\x7c\x1c\xd5\xd7\x18\x4c\x95\x32\x01\x0b\x1a\x35\x1e\x9d\x9e\xff\xfe\xe6\xe0\x5f\xc7\x6f\x1e\xbc\x96\x04\x67\xd9\x9a\x18\x78\x16\x82\x9c\x57\xdb\xff\x2c\x30\xd9\x2a\x7b\xb6\xf9\x7b\x3e\x5a\x13\x8e\x8a\x80\x69\xd3\x8f\xa8\xda\xc7\xb9\x3e\x6a\xdd\x61\x4f\x6b\x87\xdd\x1a\x09\x56\x0e\x03\xa8\xa5\xf0\xf1\x37\x5a\xa6\x39\xb4\x2b\xfb\x6f\x91\x61\x55\xa1\xd3\x05\x4b\x33\x63\x1f\x77\x46\xaf\xaa\x74\x0e\x87\xff\x0c\xe1\xdc\xad\x77\x27\x20\x0a\x3a\x46\xb4\xfb\x65\x98\xb4\x03\x79\xa7\xe8\xec\xa5\x44\xb0\xab\xea\xc3\x5c\x4a\x8f\xfb\xc5\x54\x16\xc2\xf6\xc4\x77\x83\xff\x82\x28\x1e\x36\x27\x05\x10\xc2\x13\xa6\x9d\x75\x57\x5d\x73\x5b\x6d\x8e\x8d\xa2\xec\x7d\xa8\x38\x84\x61\x9d\x0d\xbf\x99\x32\xf2\x1d\x40\x9c\xd0\x94\xfd\x73\xf4\x9d\x67\x4a\xf0\xf7\xd0\x1e\xd2\xda\xc7\xa5\x43\xab\x2a\x23\xc7\xe8\xc4\x80\x1c\x7f\xdb\x1f\x4d\x8a\x8a\x03\xdc\x99\xa5\xdc\xe7\x03\x18\x95\x48\x80\x5a\xe4\x9a\x49\x1a\x4b\x16\x7e\x6e\xa3\x07\xd5\x49\xef\xb1\xf1\x7c\x4c\xb4\x94\x00\x4d\x82\x58\xeb\x07\x82\xb0\x6b\xae\xc0\x62\xae\xbf\x62\x68\x28\xdb\xf4\x1d\x7c\x84\xbc\x12\x55\xa0\x10\x2c\x5d\xb6\x29\x53\xca\x5a\x88\x41\x9a\x0a\x5d\x4a\xee\x52\xe3\xa8\x80\xe0\x0f\x46\x2a\x3c\x71\xa6\x2b\x92\x72\x05\x4d\x72\x00\x4f\x31\x2e\x12\xbc\x39\x46\x24\x12\x84\x27\x43\x57\x83\x59\x5b\x28\x86\xaa\x54\x66\x97\x83\xd6\x14\x00\x23\x2e\x52\xb9\x64\xf1\x6d\xca\x95\xed\x8d\x02\xe5\xf5\xf3\xba\xa6\xe8\x4b\x2c\x2a\xde\xfd\xca\x53\x82\x82\xb4\x5c\x26\x24\x4b\xa8\x60\xb6\x46\xdf\x7b\x24\xd6\xf9\x74\x53\x9c\xfa\x6e\x72\x5c\x8c\x59\x01\x89\x2e\x97\x6c\x75\x6f\xb6\xdd\x40\xad\x58\x7f\x38\xbe\x47\x4a\xb3\xfb\x99\x22\x66\x33\xb4\x76\x35\xef\x9e\xe1\x40\x24\x2b\x7d\xcb\x6b\xc5\xd4\x3e\xd9\x14\xb8\x8a\xf5\x2a\x1f\x00\x32\xc5\x90\xbc\x13\xaf\xb1\x54\x77\x88\x8e\xe6\x31\x39\x11\x44\xc9\xd4\x96\x08\x5f\x6b\x35\xc4\x66\x8c\x94\xa8\x62\xaa\x98\xed\x76\x67\x0c\x0d\x1b\xf1\xb4\x21\xdd\x8c\xe5\x29\xd7\x61\x6a\xaf\xd9\x72\xf8\x98\x4e\x31\x4f\xf6\xff\x64\xa9\x37\xc2\x97\x6e\xe2\xe1\xb8\xbf\xed\x18\x84\xc1\x5a\xba\x32\x77\xcf\x6a\x63\x55\xec\xe8\x4a\x98\xaf\x2a\x88\x20\x25\x0e\x7d\x41\x64\x9e\xcb\x22\x73\x32\xa4\xda\xaf\xb9\x6c\x52\xe8\x04\x09\xfa\x07\xab\x43\x7b\xa6\x05\xd6\x38\x2b\x05\x63\x6c\xf4\x51\xa5\x86\x1b\xf9\x62\x5e\x08\xd7\xdb\x98\x81\x0f\x31\x48\xac\xdc\x49\xd8\x9c\x46\xab\x9d\xea\x73\x36\xa5\xb1\xa2\xc9\xc9\x53\xec\x0b\x85\xcf\x2b\x0b\xb4\xa1\x8e\x1b\x4c\x6a\x74\x1c\xa0\x9d\xa4\xec\x14\x9d\xff\xd2\x21\x8c\x60\x98\x3e\x6f\x11\x66\xfc\xdb\xb7\x7f\x1b\xb9\x44\x02\x98\xca\x83\x6c\x28\x9f\x86\xda\xa9\x63\xbc\xb2\x66\x46\x13\xe0\x2a\x83\xf5\x05\x49\x57\xfa\x26\xfd\xd3\x6f\xf3\x1d\x6f\x1e\xc4\x2d\x40\x39\xc4\x03\x92\x8b\x8b\x79\x5b\x67\xf1\xce\x79\x75\x28\xbb\x1b\x65\x46\xff\x5d\x94\x45\xdb\x96\xb7\xa1\xc2\x10\x90\xd8\x12\x05\xaa\x98\xcb\x39\x95\xdc\xd5\x2c\xc7\xfa\xf8\x86\xc0\xc1\x49\xf1\xc4\x55\x9a\xae\xdc\xe9\xae\x4e\x0b\xb4\x05\xcd\x7c\xb9\x52\x99\xb5\xec\x8f\x23\xd5\x46\xed\xac\xe7\x44\x33\xaf\x98\xd6\xdf\x33\x32\x6f\x19\x74\xe6\xa7\x1a\xfd\xa8\x20\xd9\x6d\x8e\x05\x62\xd3\x40\x9b\x49\xd0\x36\x2c\xeb\x37\x2a\xc0\x15\xcd\x63\x55\x75\x1b\x59\x28\x33\xeb\xfa\xb1\x51\x33\xa7\x45\x4c\x64\x5c\xce\xc0\xbb\x76\xab\x8e\xa2\x27\xe4\x0c\xaa\x52\x13\x5e\xbf\xcc\x7c\x01\xce\x3d\x41\x35\x71\x5e\xd0\x3c\x86\x90\x41\xb9\x11\x7a\x1f\xcb\xa6\xab\x3b\x1f\x8b\xeb\xf6\x54\x1e\x48\xf4\x43\x1e\x03\xd6\x53\xf5\xd3\xa0\x19\x33\xb5\xce\x19\x34\x0e\x1a\xf7\x39\xff\x23\x2b\xb2\xb5\x54\xcd\x36\x6a\x51\xbd\xeb\xf0\x42\x26\x31\x28\x30\xb6\x37\xb8\x7b\x94\x61\x7c\x39\x9f\x16\xda\xe6\xe2\x45\x32\x4d\xab\xc0\x5c\x18\x9e\x57\x63\x52\x22\x33\x85\x79\x12\xc0\x89\xc7\x84\x9c\x33\x06\x6b\x17\xce\x03\x34\x68\x27\xe2\xac\x10\x90\x33\xc2\xcc\x46\xc2\x0d\xf2\x40\xb9\x47\xcd\x0f\x96\xcd\xd8\x6e\x99\x1a\xba\x73\xe0\x43\xe1\x61\x62\x35\x2a\x9e\x28\x17\x69\x96\x25\x1c\xeb\xf8\x6b\x36\x07\xd4\xac\x97\xa9\xfd\xb6\x84\xcd\xd0\xc2\x86\x37\xe0\xb8\xfe\x54\x4c\x59\x82\xc9\x68\x68\xb1\x62\x02\xdc\x95\x19\x62\xc1\x33\x3c\xd5\x54\xfb\x9f\x83\x6f\xa3\x6e\xb6\xbf\x32\x12\xe9\x25\xba\x3a\xe4\x15\xa4\x1e\xfe\x70\x72\xe4\x75\x17\x73\xd7\xeb\x73\xcc\x1b\xff\x1a\xef\x52\x4c\xcf\x79\x4c\xa6\x58\x1d\x64\x24\xe1\x9e\x60\x57\x88\x37\x60\x1d\x36\x3e\x78\xbb\x74\x75\xf8\x38\x9a\x7f\xb8\x1d\x72\x40\xbe\xc1\x31\xc1\xf8\xc1\xd4\x8f\x29\xb7\xf5\xc8\xef\xce\x76\x5d\x4e\xe4\xd5\x28\xbf\x1a\x8d\x46\x23\x5b\x44\x00\xda\xf3\xb0\x42\x03\x2f\xd5\x53\x19\xf3\xd9\xaa\x46\x09\xf0\x20\xf8\x47\xc0\x8e\xa4\x62\x65\x67\x37\x26\xa7\x52\x33\x87\xa1\xe1\x1d\x03\x65\xcf\x64\xf3\x8a\x10\xcb\x86\x54\x6b\xa9\xc6\xce\xd3\xe2\xd2\x74\xef\x6f\xc1\xb7\xcb\xf9\x6a\x83\xf9\xb9\xa1\x1e\xa1\x6d\x12\xf4\xa6\x12\x07\x17\xd2\xf3\x0d\xfa\xe4\x0c\x37\x29\x40\x34\xdc\xb0\x30\x4e\x0e\xd9\x5d\x63\x43\x7b\x98\x0a\xc2\xae\x33\x89\x4d\xad\xc0\xcd\x3f\x91\xf1\x7a\x0e\x2c\x2a\x5b\x59\x86\x95\x9c\x95\x53\x63\x0d\x3d\x4c\xbb\x76\x44\x20\x53\x6a\x86\xf4\xd3\xd9\xab\xed\x93\x01\x44\x9e\x60\x68\x90\x77\x42\x12\x36\x9b\x19\x8b\x52\x0a\xc2\xb2\x05\x4b\x59\x4e\x93\xea\x83\x2c\x14\xdc\x2b\xc3\x6e\x73\xb3\x4b\x31\xcf\x34\xa5\x19\x72\x5b\x60\x9e\x31\xcf\x01\x52\x97\x57\xf2\xbf\x77\xde\x89\x33\x29\xf5\x5b\xae\xc0\xa6\xb4\x19\x37\xe8\x01\xd8\xd9\x64\x68\xb8\xef\xca\xba\xfa\xb6\x3b\xf9\xc1\x92\xac\x09\xfa\x04\x0e\x3a\xe1\xb5\x86\x83\x18\xa6\xe5\x0d\x77\xa3\x4c\xeb\x7c\x95\x49\x2e\xf4\x3a\x5a\x8e\x07\x59\x7e\x6f\x91\xa2\xc1\x10\x76\x42\xcb\x27\xfc\x91\xb7\x74\xe5\x5d\xc2\x36\x8f\xb9\x26\x63\xd1\x35\x60\xbf\x03\x0c\xb7\xba\x10\x36\x4b\x38\x01\xe4\xe0\xf0\xe3\x61\x90\x3d\x5c\x49\x78\xa9\xff\x5c\xd3\x4b\xa6\x48\x96\xb3\x88\xc5\x10\x7e\x44\x9f\x2a\xd5\x15\x48\xf6\x96\x8b\xfe\x84\xb8\x17\x6c\x99\x53\x09\xe7\xa4\xe5\xa6\x39\x09\x72\xe0\x2c\x7a\x52\xb9\x45\x40\xc7\x35\x7b\x89\x42\xd0\x59\x8a\x11\x34\x10\x2f\x94\xcb\x8e\xcf\x5d\x5e\x61\x45\x00\x59\xaf\x3d\x8a\x4d\xa8\x23\x36\x56\xa2\xdb\x61\x46\x75\x12\xaa\xc8\x99\x2f\x83\x8d\x25\x2b\x9b\x89\x53\x45\xde\x9f\x1c\x91\x17\x64\x0f\x4a\xc0\x3d\x0c\xa0\x4f\x64\xa8\xd7\x29\xcf\xdc\x10\x55\x97\x92\x45\x1d\x15\x12\x79\x51\x3d\x92\x80\xae\x46\x48\xb3\x8b\xb7\x72\x8f\x37\xdd\x8f\xcd\x80\x1e\x7c\x29\x55\x07\x3c\xe8\x7d\x03\x1e\x14\x2a\xd6\x66\x7b\x55\x69\x85\x7b\x28\x65\x9a\x02\xa2\x2d\xf2\x26\x77\xc3\x56\xae\xde\x1f\x9d\x43\x55\xab\x21\x3b\xd8\x54\xe7\xc7\x30\xa0\x0b\x27\x58\x35\x1e\x6d\x87\x78\xdd\x76\x70\xbc\xe0\x33\x40\x09\x2e\xe0\xe9\x41\x28\x73\x2a\x62\x99\xae\x3d\xcd\xac\x26\x18\x6f\xc1\x6a\xf6\xdb\xee\xa6\xab\x55\xfe\x44\xbb\xec\x09\xb0\xf1\x3b\xc0\x57\x7b\x03\xbe\x02\xae\xfc\x4e\x40\xe7\x01\x20\x0f\xac\x99\xad\xad\xe1\x37\x5b\x27\x43\xe4\x32\x69\x98\xf5\x50\xcd\x11\x91\x89\x45\xca\x70\xaf\x6d\x06\xde\xda\xb7\xd6\x0d\x73\x51\xeb\xec\x65\x95\xd5\xde\x1a\xdc\x39\xdb\xfa\xd6\x45\x23\x29\x4d\xea\x6f\x0d\x75\xd3\x95\xb7\x06\xb9\xbb\x8d\x6f\x5d\x2d\x93\xef\x40\x98\xd8\x01\x89\xb4\xc5\xfa\xb6\x5d\x65\x1d\x49\xb7\x2c\xc3\x05\x27\xd4\xd3\xe2\xa3\x6d\xb0\x16\xb1\x9a\xee\xa1\x59\xb7\x8c\x68\x02\x88\x16\x4d\xd7\x99\xd4\xd7\xba\x3e\x64\x50\xf1\x43\xcd\x6c\xe1\xb3\xa0\x6e\x95\x22\x0c\xb8\x2c\x03\xe5\xb5\xa0\xb8\x75\xd3\xd9\x5f\xba\xb4\x4a\x23\x7f\xcb\x32\xda\xf0\xd7\x5a\x02\x8a\x53\xd9\x6e\x90\xc2\x04\x19\xa6\xcd\x64\x54\x2f\x86\x04\x52\x75\xf8\xd2\xa7\xd6\x5c\xa2\x29\xb5\x5b\xa9\xcd\x75\x3b\xd6\x3d\xda\x65\x4c\xdb\x91\xc3\x80\x1c\x9f\x21\xff\xe2\x8a\xec\xbc\x71\x04\xd8\x79\xca\x0c\x7a\x07\xdf\xc7\xaf\x1d\x7a\xb1\x2e\xb9\x88\x6d\x6b\x9d\x0a\x69\x7c\x1d\x38\xea\x86\xce\xc3\xe4\xce\x3a\xcd\x19\x38\x7b\x3d\x69\xc8\xa8\xf1\x66\xb0\x29\x0a\x2e\x51\x65\x74\x83\x92\xe9\x7c\x2a\xee\x21\xf5\x61\xde\x0b\x58\x69\x01\x20\x1b\x42\x6e\xb8\xcf\xbd\x4b\xb3\x24\xa9\x36\xac\x77\x0d\x0d\xa5\x25\xfb\x3d\xf0\xb1\xf1\x39\x82\xab\x04\x2a\xbc\xf6\x4d\x4f\xac\x5d\x08\x36\x24\x17\x35\xd5\x7b\x08\xab\x63\x8b\xaa\xd7\xa4\x13\xd6\xf0\xa5\x34\x5f\x91\x1f\x4e\x8e\x2c\x68\x8f\x75\x74\xee\x85\x31\xf8\x01\x46\xa9\x31\x12\x91\xb2\x74\x8a\xde\x4f\xb5\x5e\xc8\x5e\x81\x44\xf3\xf9\x7c\x05\x8f\x6f\x31\x68\xeb\xe6\x87\x90\x21\x06\x84\x7b\xf7\x1c\x90\x21\xac\x01\x23\x56\x9b\xb5\xf6\x2f\x32\x43\xec\x03\xa7\xcd\x59\x41\x67\x2e\x5f\xb2\x21\x61\x4b\x26\x6c\x56\xe5\x0a\xee\x30\xb2\x8d\x8b\x28\x29\x62\xf7\x38\xe8\x71\xa0\xf4\xa3\x89\xc3\x66\xc8\xcb\x8d\x71\x97\xdb\x76\xb4\x6a\x65\x44\x23\x12\x52\xcb\x13\x77\x6e\xf1\x94\x16\x32\x89\x09\xf5\xc7\xcf\xa7\x22\xc7\xee\x39\x6b\xe9\xaa\x90\x83\x6b\x53\xaa\x0a\x51\x82\xb5\xb8\xfb\xf7\xea\x0a\x93\xe3\x78\x03\x0b\x31\xe8\xfc\x76\x09\x2d\x44\xb4\xf8\xa3\x6c\x99\x0d\xd4\xf7\x81\x20\x4a\x2e\x59\x2e\x58\x42\x32\x9a\xd3\x94\x41\x9b\x1b\xe7\x40\x78\xf8\x4a\x85\x76\x78\xdc\x2d\xb0\xb4\x47\xe8\xdc\x78\x84\xe2\x8a\x36\xd8\xc6\x1b\x33\x46\xa8\x9b\x12\xf6\x6a\x6c\xb4\x8c\xa4\x8b\x72\x08\xa0\x68\x27\xaf\x86\x5d\x2e\xb7\xe3\xdd\xaa\xf0\x79\x1d\xd8\x7e\xbf\xe0\x80\x25\xce\xa7\xcb\xf3\xb8\xaf\x33\xd1\x29\x94\xeb\xe8\xfa\xbb\x6a\xcd\x51\x57\x6d\x45\xfa\xc0\x91\x84\xc6\x7c\x17\xa0\xb8\x9e\x94\xff\x6f\x9e\x2a\x7a\x98\x33\xa8\x91\xa3\xc9\x79\xc6\xa2\x0e\xec\x8f\x1f\xde\x9e\x1f\x54\x07\x05\xa1\x84\x85\x67\x0b\x06\xdf\x07\xa8\x1d\x57\x6c\xba\x90\xf2\x92\xec\x6d\x40\x1e\x0b\x92\xa5\x14\x9f\xab\x7d\xbb\xbd\x47\x66\xde\x03\xc2\x05\xb4\x88\xf2\x42\xd5\xb7\xd6\x72\x0f\x89\xfc\x2c\x60\xad\x6c\xa6\xb5\x15\xc3\xeb\xd3\x3c\x6d\x95\x90\xd6\x9a\x27\xad\x2f\x46\xf3\xea\xac\xcf\x2c\xc8\x4d\x08\x74\x1b\xa9\x86\xee\x9e\x47\x21\x89\x75\x46\x18\x0d\xbc\x03\x3a\xfc\x58\x8e\x16\x76\x34\xe0\xb3\x4a\xb3\xc5\xd2\x8c\xf4\xa1\xdc\x5d\x68\xfa\x6e\x7f\xba\x1b\x9a\x1d\xd5\x9a\x20\xa8\xe7\xb6\x89\x73\x88\xc8\xe7\xf2\x4b\xa6\x8c\x2c\xa4\x90\xb9\x45\x1a\x29\xb1\x74\x80\xcd\x60\x12\x2f\xac\x80\xe5\xb7\xc1\x54\x83\xb2\x63\x97\xc6\x3b\x4b\xe8\x1c\x9a\x46\xd7\x00\x71\x80\xb9\xca\x02\x63\xbe\xe1\xcd\xae\x1c\xcc\x35\x44\x85\x7e\x6c\x0a\xb9\x98\x0b\xf5\xda\x84\x6a\xc8\x91\x39\x30\xf3\x9e\x61\x7a\xed\x6e\x05\x86\xa3\xcc\xe3\xf4\x55\x7a\xde\x20\xaa\x10\x18\x39\xef\x1e\xf7\xa5\x5f\x41\x85\xbd\xcd\x03\x4d\xf9\xb5\x79\x4a\xf8\xab\x10\xf0\x03\xca\xaa\xc4\x68\xf3\xd7\x83\x31\x21\x27\xa5\x5d\x3b\x34\xab\x18\xde\x19\x34\x2b\x15\xf0\xc5\x29\x22\x76\xe0\x0b\x84\x71\x28\xdb\x77\xb4\xcd\xfe\x6e\xde\x2d\xc0\x07\x92\x3b\x3a\xea\x10\x50\xb6\xc3\x99\x85\x76\xe2\xbb\x4d\x80\x19\x6c\xe3\x0e\x82\xcc\xeb\x32\xfa\xc1\x45\xfb\x43\xf2\x30\xc5\xf2\x25\x8f\xd8\x41\x14\xc9\x42\xb4\xca\xd1\x3d\x62\xe6\x15\xa8\x66\xf1\x79\x65\x4c\x8c\x47\xc4\xf0\x2d\xa6\xc4\xd3\x84\x53\x44\xfa\xae\xde\x89\x25\xa2\xe5\x38\x10\xcf\xa8\xcd\xd0\x6e\x19\xa5\x19\x6d\x96\x6f\xdb\x92\x42\x6d\x0b\xbc\xd6\xdf\x78\x93\x84\xab\x51\xd0\x86\x32\xd6\x8a\xb7\xee\x56\x39\xa7\xa9\xba\x2c\xf1\xcf\x19\x20\x01\xf9\xc3\x14\x7c\x6e\x5f\x74\x44\xf1\xa9\x8d\x30\xd1\x1b\x50\x57\x1b\xbe\x67\x5e\xfe\x40\xbd\xfe\x3f\x47\xa7\xed\xea\x9d\x7c\xeb\x67\x84\x98\x59\xd8\xa1\xbd\xaa\x1e\x22\x63\x86\x08\x61\xe6\xc9\x43\x92\x53\xdb\xd5\x92\x22\x13\x4a\x18\x45\x9f\x0a\xd9\x0b\xea\xcb\x06\x50\x07\x59\xe6\x12\x20\xab\x1f\xe2\xba\xa4\x8c\x0a\x15\xa0\xc0\x31\x18\xda\x39\xf5\xfc\x7c\x50\x10\xda\xd5\xb6\xde\x83\x3d\xe7\x92\xae\xde\xa1\x74\x5e\x44\x9a\x14\x5a\x99\xcf\xf1\xe1\x8e\x61\xde\xe1\xf1\x39\x9b\x73\xa5\x73\x0b\x98\x67\x06\x2c\x27\x61\xbd\x42\xfe\x96\x4b\xb6\x22\x3f\xfe\x74\xfc\xeb\xef\x6f\xde\x1d\x1e\xbc\xf9\xfd\xed\xc1\xe1\x8f\x27\xa7\xc7\x1f\x3f\x9e\xff\x7a\x7e\x71\xfc\xf6\xe3\xc7\x43\x04\xf9\xb5\x88\x78\xe7\x4c\x7f\xfc\x68\x77\xaa\xfa\xf8\xf1\x22\xca\x78\xf6\xf1\xe3\xc4\xf9\x40\xb0\xe9\xe9\xff\x39\x3a\x05\xfe\x89\xc0\x4c\x3e\x29\x0c\x64\x2b\x12\x1d\xe6\xbd\xa0\xaa\x4c\x41\xad\x54\x89\x36\x68\x94\xd3\x54\xdc\x6d\x44\x25\x6f\x75\xd8\x17\xe0\x0c\x76\xdd\xca\x9d\x97\xb6\x04\x0c\x98\x32\x7d\xc5\x2c\x92\xd8\x46\x1c\x7c\x5a\x2f\xf7\xb7\x69\xe9\x1b\x3a\x22\x3b\xa4\x9f\x25\x67\x57\x08\xfb\xca\xe7\x82\x26\x41\x5b\x6e\x40\x16\x44\x74\xb9\x75\xb4\x7d\x50\x92\x32\x19\xfb\x16\xe4\x35\xaf\xfd\x9a\xc7\xbe\x52\xfc\x89\xfd\x14\x58\x4c\x26\x27\x47\xe4\xe5\x18\x95\x9c\x93\x23\x6c\xef\xb2\x11\xec\xdd\x59\xaa\x46\xa0\xa2\xf4\xdd\x50\x93\x51\x6e\x80\x26\xcc\xa8\xc1\x0e\x28\xa6\xb1\x4c\x29\xbf\x67\x8b\xb2\xcf\x54\x5d\xce\x8a\x24\x59\x91\x7f\x17\x34\x41\x1d\x60\x22\xe3\x75\xce\xb4\xf3\x9d\xfb\xe8\x9f\xe3\xef\xfc\x3c\xfe\x39\xf6\x08\x0c\x40\xb6\x7f\x8e\xd5\x32\x1a\x7f\x67\x31\x0a\x89\xbd\x69\x63\x06\xf5\x5a\x8d\xae\xd5\x67\xf1\x37\xf0\x6c\x0a\xfa\xee\x83\x14\x69\x06\xed\x99\x7f\xc8\x69\xc4\x26\x2c\xe7\xa0\x32\x49\x11\xb7\x29\xd9\x74\x5b\x86\xc4\x0e\xb5\x9b\x0b\xa2\x70\x58\x4f\x02\xc1\x58\x8c\x4a\xa2\x9d\x05\x23\x73\x33\x09\x58\x18\xd4\x02\x01\x1a\x23\xca\x19\xc5\x44\x7c\x8b\x93\xe1\xa0\x98\xc7\xd6\x7d\xe6\x82\xc3\x46\xe3\x17\x6c\x8e\x21\x5e\x1b\x47\xc0\x30\x32\x72\x59\x84\x4f\xf4\xb1\x4d\xa5\x65\x46\x78\x9a\xb2\xd8\x28\x40\xc9\x8a\x2c\x39\x45\xce\x0f\x95\x9e\x78\x4e\xf7\x84\x24\x12\xbc\xf1\x85\xe0\xd6\x39\xb7\x28\x34\x89\xe5\x95\x18\x94\x0d\xf8\xf1\x01\xc6\x5a\xe1\xc9\xb0\x52\xf6\x0c\xaf\x44\x32\x20\x6c\x15\x6d\xc4\xe9\x4b\x30\xc3\xca\x6d\x56\xf7\xd8\x44\x3c\x04\x77\x40\x50\x51\xc7\x41\x1c\x82\x77\x09\x1a\x80\x21\x27\x26\x34\xa1\x95\x16\xdc\xf6\xa5\x1c\x2f\xc1\xbc\x3c\xe4\x62\xe1\x80\xe6\xd7\x33\x99\x47\x7c\x9a\xac\xc8\x82\x26\x65\x3b\xee\x90\x36\x60\x45\x86\xaf\x9f\x48\x31\x0f\x05\x35\x42\xb3\x43\x7d\x3a\xa3\xa2\xc8\xf0\x79\x46\xbe\xad\x64\x71\x83\xc1\xf0\xcd\x0b\xf7\xaa\x8f\x00\x96\x7a\xaf\xb0\x91\x96\x09\xc3\xf5\x69\x73\x52\x36\x56\x83\xef\xaa\x70\xf4\x26\x84\x78\x8c\x9a\xdb\x0b\x87\xbc\x62\x76\xc4\x85\x9f\x3f\x58\x1a\x5a\x53\x28\x47\x37\xa7\x1d\xbf\x81\x5a\xc0\x15\x31\x52\xcb\x22\xab\x85\xb8\x06\x3a\xe7\x59\xc2\xc8\x77\x97\x6c\x35\x44\x4c\x5d\x54\x42\xfe\x19\x74\x3a\xf3\xa8\x84\xd8\xfb\x40\xe6\xe4\x3b\xf7\xaf\x7f\x3e\x60\xfd\x6e\x1b\x2f\x2a\xbe\x54\xeb\xc8\xd7\x31\xd6\x08\x55\x41\x76\x91\xb2\xb6\x7c\x48\x4b\x24\xd7\x98\x1c\x03\x5a\x03\x6a\xa4\xb6\xdb\x53\x92\x54\x6e\x56\x56\xb3\xa9\x02\xb4\x82\xff\x25\xa8\x1d\x3a\x95\xb6\xc0\x9a\x01\xd2\xf5\x8c\xe5\xe5\x27\xc0\x60\x4e\xe5\xf1\x35\x8b\x0a\xfd\x90\x80\x91\x78\x5d\xb2\xf6\xbd\xf4\x7f\x62\x1e\x05\x1c\x69\x63\xb4\x70\x5f\xb7\x51\x9e\xce\x20\x75\xef\x76\xda\x5e\xb2\x95\xf2\x7d\x0e\x2e\x71\x74\x8b\x30\xe0\xf7\xaf\x13\x64\xc7\xd7\x5c\x69\xf5\xbf\x5d\x23\xff\x74\xea\xf8\x37\x0e\xed\x16\x13\x46\x0f\x7a\x5c\x98\x3f\xe1\x31\x0f\x4d\x70\xf7\x02\xad\xa9\xfe\xce\x51\x22\xe8\x62\x41\xcd\x3b\xed\x2a\x9b\xbc\x25\x05\x94\xf1\x85\xed\x10\xca\xb4\x23\xfc\x31\xee\x4f\xa4\x21\xd0\xe5\xd8\x28\x79\x55\x31\x63\x3f\xb2\x37\x71\x00\xf6\xe5\x4b\x9a\x30\x61\xbb\x43\x25\x71\x44\x73\x0c\xd1\x5b\x4c\x6f\x65\x1b\xcc\x59\x30\x5b\x23\xe3\x2c\x27\x2b\x57\x59\xd9\x50\x1e\xcd\x35\x8f\x8a\x84\xe6\xc4\x9c\xc7\xb9\xcc\xef\x09\xfd\x8d\x57\xab\x35\x29\xb7\x68\x23\x75\x0e\xaf\x2a\x7f\xaf\x8f\x58\xef\x35\x62\xb5\x17\x63\x32\x71\x44\x2f\x0d\x0f\xca\x5e\xb5\x41\x9d\x9c\x39\xde\xe4\x19\x45\xd8\xad\x42\x57\x01\xb3\xe6\xe0\xff\x1e\x04\xc2\xc3\x9f\xcc\x31\xf9\x97\xc7\x38\x19\x92\xd2\x67\x0c\x15\xbb\xf6\x99\xf6\xd8\xd8\xe5\x2a\x0f\xf5\x4c\xe6\x6c\xc9\x72\xb2\x17\x4b\x84\xfc\x58\xf2\x48\x0f\xc6\xe4\xff\x6f\x34\x45\x70\x22\x3b\x75\xd2\x1e\x33\x5f\xa5\x5c\xf6\xcc\x78\x41\xf6\xe0\x67\xa1\x2a\x39\x70\x81\x22\xdb\x8c\xe7\x89\x65\xc3\xb4\x88\x70\x6f\x88\x6e\x57\xd8\x28\x6a\x8a\xb5\xad\xe1\x25\xbf\xf4\x1c\xd2\xf3\x44\xae\xec\x29\xad\x78\x6e\x7d\x9c\xc5\xb1\x50\xbf\x71\xfe\x07\x7c\xf4\x24\x67\x73\x38\x7f\x78\x7a\x1e\xf0\xf4\x69\x99\xc9\x44\xce\x57\xe7\x59\xce\x68\x7c\x28\x85\xd2\x39\xb0\x86\x36\x2d\x16\x6e\x1a\x33\x00\xe7\x5c\xc8\x2b\x42\x6d\x02\x9b\x9c\x61\x93\x0a\x59\xcc\x17\x08\x37\x03\x3f\x24\x34\xca\x25\x00\xce\xe2\x70\xd6\xe8\x54\x1e\xfb\xce\xb9\x0f\x3c\x3a\x0d\x8c\x02\x0e\x8f\x2b\xba\xb2\x87\x89\x4e\x79\xcc\x54\x90\xc1\xed\x26\x83\xa1\x9f\x1b\xdf\x1f\xb8\xf2\xc1\xe9\xd1\x7d\xfb\x9a\x3e\xa2\x42\x7b\xc3\xab\x78\xcd\x08\xa9\x5e\xd2\xd7\x6b\xa4\x40\x37\x9a\x4a\xab\xa9\x62\x3b\x25\x47\x99\x27\x82\x2d\x93\xd2\xeb\xf3\x4b\x76\xd5\xe0\x97\xee\x45\x7f\x62\xf7\x4f\x05\x1b\x81\x3d\xfa\x5e\x28\xaa\xb9\x9a\x41\x03\xe4\x07\xd4\xc7\xa1\x24\xa3\x59\x9f\x56\xbc\xaa\x95\x4d\xe1\x68\xae\x64\xde\xe3\xe7\x56\x36\x8b\xcd\xff\x2b\xed\x20\x9b\xfe\x09\x25\x22\xbe\xc5\xab\x39\x41\x91\x6d\x7b\xae\x65\x19\x87\xc6\x48\x45\x91\x4e\x59\xee\xcf\x3e\x3a\x03\x78\x5e\xc3\x8f\xac\x9d\xfd\x27\x88\xd9\x0b\xe4\x39\xbe\x36\x9a\x87\x6a\x96\xa8\x84\x57\x65\xa9\xea\x83\x62\x78\xcc\x25\x70\xd6\x96\xa1\xd2\x3d\xd8\x62\xbd\x97\x9f\x34\xe5\x73\xe5\xd5\x26\x95\x12\xaf\xc6\x09\x95\x78\xd5\xd3\xc8\x6f\x7c\xfd\x5a\x0b\xe2\xb0\x1c\xd2\x3a\x85\xd4\x10\x15\x78\x74\x60\x03\x6c\x9b\x15\xec\x70\x33\x82\xa7\x2a\x6f\x14\x99\x9b\xf0\x77\x6d\x1b\x8c\x37\xde\x9f\x78\xb5\xcb\xd7\xc4\x6b\x64\x5e\xa9\xd5\xef\x1d\xb1\x1a\x0f\xd2\xf6\xb0\xe1\xd5\xd0\xa0\x2e\xaf\xca\x86\xba\x2c\x4d\x6b\xdc\x59\x15\xd3\xba\x64\x76\xa5\x61\xdd\xea\xd9\xad\xb3\x3d\xf1\x6a\x63\xe3\x96\x57\x85\x10\xf2\x1e\xd6\x2e\x25\x16\xc9\xd5\x9e\x8e\x8d\x36\xef\x89\x18\x92\x53\xa9\xcd\x7f\x02\xf3\xf7\x48\x32\x75\x2a\x35\x7c\xb2\x15\xa4\xc4\x57\xe8\x90\x90\xae\x93\x27\x36\xc6\x30\x7c\xd3\x86\x68\x8d\xc4\x73\x04\xdb\x60\x58\x9c\x08\x22\x73\x47\x31\x6f\x5d\x28\x3b\x44\x18\x56\xb0\x08\x64\x37\x1a\x27\x66\x9c\x90\xce\xb7\x0c\x67\x87\x82\xec\x2f\xfc\x06\xb0\xa2\xb3\x04\x0a\x04\xe2\x22\xc7\x36\x52\x46\xd7\xd4\x6c\xce\x23\x92\xb2\x7c\xce\x08\x00\x7a\x76\xb1\x7c\x6d\xe4\x0a\x5e\x2d\xa5\x4b\x38\x99\x16\x7b\x09\x44\x36\xa8\x58\x1d\xaa\x00\x38\x1e\x8a\xb5\x94\x82\x25\xf5\xff\x78\x1f\xf4\xff\x4b\x32\xca\x73\x68\x3b\x65\x63\xc7\xe1\x77\x36\xfa\x12\x0e\x63\x46\x58\xf3\x2d\x51\x41\x18\xd6\x79\x99\xd1\xeb\x8a\xc7\x90\x5c\x01\x54\xb3\xe1\x89\xde\xfd\xb1\x73\xc9\x56\x3b\xc3\xb5\xad\xb7\x73\x22\x76\xca\xc0\x70\x65\xb3\x79\x21\x0c\x19\x84\x3b\xf0\xdd\xce\x97\xd3\x55\x5a\x09\xdb\x2e\x9a\x76\xd6\x27\xd4\x70\x5f\x95\x8b\xf7\x53\x03\x4c\x47\xb2\x56\x4d\xf9\xb6\x32\x9e\xd3\x96\xb4\x55\xd2\x4b\xf1\xa7\x30\xe9\x3f\x09\x10\xf7\x15\x34\x96\x75\x30\x62\x19\x36\x09\x9b\x97\x29\x33\x34\x89\xb0\xef\x2e\xae\x2a\x0c\x62\x56\xd3\xd9\x18\x89\x94\x97\x45\xe6\x76\x05\x24\x19\x00\x46\x90\x88\x64\x6a\xad\x0e\x7c\x3e\x38\x56\xec\x96\x1b\xd9\x40\x1e\x6e\x5f\xbf\x39\x6c\xb7\xcb\x8a\x39\x53\x9d\xb0\xf7\x3b\x78\x58\xff\xfb\xbc\x82\xcf\x79\x09\x67\x67\xb1\xff\x68\xea\xdd\xe5\x33\x99\x4f\x79\x1c\x83\x29\x8d\x0f\xf2\xc9\x7f\x35\x42\x9b\x33\x51\xb1\xbe\xc6\xf5\x3b\x36\xa4\xe4\xd7\xcd\x35\xb1\xab\x31\x01\x02\x7e\x00\x0a\x4a\x2c\xcd\x87\xfe\xd1\x37\x10\xd4\xbf\xa1\x75\x5b\x1a\x86\x21\x8a\x24\xf1\xf0\xdb\x68\x58\xa0\x57\x12\x0e\xa8\x75\xe7\xcf\xcd\x91\xd5\x55\x42\x6f\x04\xf0\x5d\xef\xfa\x64\xa6\x52\x7d\xc5\x13\x31\x91\x71\xd5\x85\x51\xc1\xf2\xb5\xd5\x50\x0e\x04\x78\x2f\x40\x03\xf6\x29\x55\x4d\x8a\x60\xdb\x49\x99\x16\xb2\xa5\xa5\x44\xb9\x09\x5e\x95\x6a\x99\xf2\xa8\x01\x2b\x01\xf7\x49\x6b\x1e\xb2\xfb\x16\x07\x0a\x5c\x7d\x98\x5e\x30\xcf\x19\x56\xbd\xc3\xf1\x82\xe3\x66\x81\xfd\x0b\xc1\x96\xcc\x6c\xab\x98\x2b\x0b\xbc\xea\xb2\x95\xfe\x7b\xcd\xbb\xf2\xff\x3b\x92\xa7\x52\x3b\x07\xe0\x7f\x3b\x0f\x3a\x8a\xb2\x6b\x9e\x16\x69\xd9\x28\x80\xc4\x7c\xe6\xda\x52\xb9\x24\xa9\xaa\xeb\xa1\xea\x01\xb3\x47\x44\xd3\x7c\x0e\xc9\xd2\xd6\xf5\xe0\x24\xd6\x3c\x91\x53\x9a\x90\x94\x0b\xf3\x18\x9b\x07\x51\xf9\xcc\xcf\xc4\xfe\x79\xcb\x83\x40\xac\xf2\x39\x9f\x26\xcc\xfa\x36\x6a\x1d\x33\x83\x1f\xd7\x6e\x84\xa3\x95\x40\x2b\xae\x05\x15\xe4\x2d\x17\x47\xce\x31\xfa\xda\x1c\xd9\x6b\x9a\x66\x09\xc3\x5a\x68\xf2\xcd\xe8\x3f\x52\x30\x62\x73\x7d\x86\xc4\x2d\x8f\x4d\x01\xd3\x92\xbc\x1c\xba\x06\x22\x41\x97\x51\xe0\x63\x55\x0e\xea\x9c\xb2\x8a\x7c\xbd\xff\xf5\xfe\xcb\x57\x46\x1d\xc5\x88\x1f\x55\x16\xeb\x6d\x9d\x1a\x2f\xc7\xe4\x13\x31\x33\x78\x69\xff\xfb\xb5\xfd\xef\x37\xe4\x13\xf9\x44\xc8\x84\x4c\x48\xf8\x5f\xf3\x1f\xf2\x89\x8c\x0c\x11\x82\xa9\xbe\x1c\x56\x19\x57\x05\x6a\xdc\xee\x05\x10\x23\x38\x34\xb0\x8a\x48\xa6\x0c\xa6\xfa\xf5\xff\x0e\x21\x9a\xb9\x26\x52\xd8\x3b\x5f\xee\xc1\x94\x06\xe4\x0a\xfc\xf3\x29\xbd\x44\xdf\xd4\x41\xa4\x0b\x9a\x98\x87\xef\x7d\x33\x7a\x39\x20\x52\x54\x6f\x5f\x72\x09\xdd\x78\xec\x0c\xf7\x5e\x0e\xc6\x6b\x53\xfe\x7a\xc3\x94\x2b\xb3\x85\x59\x50\xb1\x82\xa1\x6f\xde\xef\x6e\xab\x1f\x88\xd5\x15\x5d\xf9\x0d\xef\xe4\xe6\x9c\x2f\x7d\xef\xde\x00\xed\x09\x12\x17\x60\xff\x72\x07\xe0\x87\x83\xae\x08\xd7\x63\x72\xa2\x77\x77\x15\x84\x1d\xd0\x6d\xe0\x9a\x0c\x1f\x85\xc0\xc4\x40\x78\xd8\x1b\x2f\x6a\x85\x0d\x0d\x60\x30\x3b\x8d\x10\xdd\xab\x4b\x30\x5e\xa9\x3f\x25\x1d\xa8\x49\x7e\xac\x0a\x6c\xc8\xfa\xa9\xaf\x1f\x5c\x9f\x83\x79\xeb\xe9\xae\xf5\xb0\x74\x6c\xe8\xd2\xaa\x64\xe5\xc9\x2f\xdf\x69\x08\xe9\x80\x4e\x7a\x12\x2b\x3e\x21\xea\xa7\xc8\xc7\x9d\xea\xb9\xfc\xb8\x03\x71\x40\xaf\x8a\x5b\xa8\x00\xab\xde\x58\x98\x59\xb7\x8d\x03\x28\xc4\x03\x11\x97\xd9\x57\x0d\xe7\x0f\x0d\x69\xc1\xfc\x9c\x43\x48\x32\x5f\x7f\x93\x20\x43\xab\x92\xd0\x6b\x4e\x61\x80\x78\x4f\x0e\x70\x03\x2b\x88\xa3\xde\x65\x5e\x37\xd2\x2e\xe8\x7d\x00\x0a\x93\x8f\x27\xa5\xd8\x39\xd3\xdc\x6e\x0f\x36\xba\xbd\x5d\x27\x4c\xbf\xac\x27\xb3\x0d\x29\x75\x65\xac\x09\x51\x7e\xcd\x26\x81\x12\xac\x70\xff\x04\x3d\x7a\x5f\x6e\x80\xbc\xb5\xc7\x45\x55\xc9\xf5\xc2\x6e\xa4\xf2\x99\x52\xe3\x73\x7f\xa9\xf3\x0f\x6f\xc7\x57\xe4\x26\x68\x69\x4d\x84\xc5\xd7\xc3\xda\xec\xed\xe7\x7f\x6b\x22\x43\xbe\x7e\x75\x3f\xe1\x60\xff\x7b\x51\x59\xe6\x8d\xab\xfb\xb7\xbd\x72\x96\x03\xc8\x85\xd8\x70\x08\xa0\x6e\xaa\x8c\x8b\x8f\xbd\x40\x53\x5c\x17\x14\x4b\xad\x04\xbb\xb2\xf9\xaf\x37\xbf\x54\xa0\x9b\x3b\xe6\x3e\x34\xf2\x87\x16\xd0\x2c\x35\xcd\x0a\x80\x46\x30\x84\x74\x9a\xf6\x37\x7b\xdf\x90\x11\x79\x31\x30\xbb\x41\xe0\xb6\x02\x62\x86\xa2\xcc\x88\x06\x9b\xce\xad\x17\x46\x79\x32\x94\x51\x43\x6c\xb0\x99\x24\x75\x21\x74\x1f\xc5\xdb\xd3\xe6\x71\x95\xee\xc7\x92\x05\x42\xc6\xec\x60\x06\xfd\x7f\x56\x4d\x11\xbe\xeb\x32\xe1\x74\x6d\xcc\x40\x36\x2c\xe4\x15\xb9\xb2\x59\xda\xb0\xe5\x6c\xb1\x61\x38\x91\x7d\xf3\x87\xdf\x53\xc0\xcf\x3c\x4b\xb6\x2a\x84\x67\xa5\xf6\x18\x29\x58\xf6\x77\x21\x7c\xd1\x88\xfc\x28\x85\xcc\x5f\xa1\x76\x64\x86\x54\x25\x2b\xbe\xf9\x71\xc8\x6a\x42\x30\x97\x8a\x40\x50\x46\xbd\x39\x01\xeb\xf0\xd5\xe7\x46\xf1\x36\x24\x24\x8c\xc7\x9e\x8f\xdd\x36\x38\xa2\xd6\xdf\x90\x99\xec\x11\xd2\xd7\x5c\x53\xe6\x5b\x78\x5d\xdb\x9d\x6c\x5c\xdb\xff\xb6\x3c\xd5\x6d\x68\x97\xe2\x5c\xeb\x23\x63\x56\xee\xc4\x4c\x4f\x71\x29\x70\xe9\x6e\x3b\x16\x50\x90\xda\x7c\xcf\x37\xb4\xf7\x0c\x25\x2f\x20\x2f\xa1\xcb\x0d\x1b\x8e\x78\xeb\x76\x45\xc8\x32\xcc\x8b\x68\xbd\x35\x71\x57\xf8\xfa\x5d\x18\x75\x48\x68\x22\xc1\xd9\x62\xf8\xac\xf9\x88\xc5\xf6\xc6\x99\x74\x3e\x99\x35\xff\xc5\x02\x4a\x96\xcb\xcc\x9c\x61\x65\xaf\xd5\x37\xad\x7b\x81\x3b\x6c\xd3\x56\x5b\x12\x9f\xf9\xfc\xf7\x64\x90\x37\xd1\x41\xb2\x9e\x1f\xcb\x19\xd1\x97\x0c\xe4\x1f\xac\x1c\x3a\xaa\xc6\x40\x17\x6b\xce\xd8\x42\x14\xf4\x49\x96\x1d\xa7\x5d\x54\x16\x9b\x21\x47\x34\x09\xb5\x29\xa3\x91\xf1\x98\xe5\x28\x60\xa7\xac\x52\xb6\xe4\xf3\x5d\xc8\x2f\xe5\x9d\x58\xae\x04\x79\xdd\x38\xd0\x3f\xb1\x4c\x7e\x67\x5a\x44\x97\x4c\x3b\x7f\x76\x0e\x95\x16\x59\xa1\xc9\x94\x26\x54\x44\x66\xf3\xd6\xf3\x1b\xb4\xc4\xc1\xf0\x97\xf0\x14\xc4\xfe\xf1\xe5\x34\x38\x74\x90\x8d\xc9\x85\xd2\x66\x34\x4c\xd3\x2c\x27\x78\x90\x28\x39\x34\x47\xd4\x0d\xb0\xee\x4c\x80\xa1\xec\xbf\xd1\x45\x6f\x85\x01\x63\xda\xd6\xeb\x05\x7e\x75\x4b\xe7\x9a\x00\xc3\xb2\xf4\x2a\x9b\x18\x13\xe8\x8f\x7a\x32\xab\x2f\xd9\x4e\xb5\x68\xd4\xd5\x21\xed\x0c\xf1\xad\xcd\xca\xd9\x22\x5e\xeb\xed\xb0\xcd\x57\x82\xb7\x12\x31\xd4\xb6\xd7\x07\xf6\x77\x54\x9f\x60\xd4\x21\x37\x3a\xa8\xad\xb7\x8f\x7e\xa2\x37\x59\xbc\x0f\x7d\x66\xd6\xec\xfb\xf6\x0e\xb7\x75\x95\xbf\xca\xc9\x21\xf3\x86\x26\xae\x22\xc6\x76\xc7\xb5\xc8\xf8\x62\x77\xb7\xf4\x0c\xc0\x51\x40\xce\x52\xda\x2e\x86\x8b\x56\x6c\x07\xb2\xe7\x54\x3f\xa2\x59\x92\xe0\x61\x2d\x4d\x28\xa3\x0a\x87\x1d\xe3\x38\x8c\x50\xf5\x62\x6c\xfc\xe1\x86\x36\x73\xe8\x28\x5b\x79\x4c\xcb\x21\x99\x16\x9a\xcc\xf9\xd2\x08\x80\x3b\x39\x3d\xd0\xb1\xb3\x60\x49\x46\x72\x16\x17\x91\xc5\x72\x00\xe9\x74\x10\x5a\x68\x90\xb9\xee\xb9\xc3\x4e\x85\xa0\x3b\xd8\xf6\x54\x54\x85\x0f\x9f\xc1\x01\x01\x45\x8b\xcf\x08\x5b\xb2\x7c\x45\x32\xa9\x14\x1c\x43\x60\x5b\x58\xd0\x08\xb1\x33\x0f\xbf\x0d\xd6\x04\xcc\xca\x29\xf0\x3b\x56\x83\xdf\x01\x0b\x57\x56\x58\xd1\xc3\x38\xf4\xbe\xd9\x7f\xb9\xff\xf2\x76\x63\x6c\x02\xff\x2b\x3d\x74\xee\xbf\x27\xb3\x0d\x36\x67\x39\x97\xca\xce\xb9\x8f\x13\xef\x6b\xf0\xb5\x7d\x33\x08\x7c\x79\xdf\xec\x7f\xbd\xff\x72\xcf\xcc\xf5\xeb\x81\x99\x75\xe0\xa5\xfb\x3a\xf0\xd2\xf9\x5f\xda\x19\x31\x55\xf1\xd3\x9d\x08\x5b\xbd\x7a\x25\xf3\xd8\x66\xe9\xba\x4a\x48\x33\x23\x44\x3e\x34\xb2\x21\x75\xbc\x1c\xb7\x5d\xd5\x4b\xb0\xab\xd1\x5d\xc8\x35\xf9\x4b\x2a\x73\xf6\x97\xe0\xfe\x1b\xfd\x6b\xcd\xdd\x66\x8f\xdc\xfc\xad\x79\x8a\x64\xdb\x04\xc9\x6e\xba\xc8\x61\x07\xa2\x36\x39\xcd\xbb\x6f\x5c\xe3\x4e\x1c\xca\x26\x8f\xa1\x53\x37\xb5\x49\x8e\xd3\x55\x58\x13\x3d\x65\x46\xa5\x45\x1f\x58\x09\x9c\x78\xcf\x46\xc5\x4a\xcb\x9c\xce\xd9\xbe\x7d\x6c\x93\x0a\xe6\xc7\xc8\x45\xfe\x19\x5b\x3e\x55\x32\x85\x10\x92\xca\x36\x83\x72\x65\xe9\x2e\x87\x14\xb8\x00\x8d\xa0\xa2\x13\x08\x59\x01\x3d\x0d\x6a\x45\x9f\x48\x3a\xf2\x03\xb7\xba\xa4\x57\xea\x38\xa1\x4a\xf3\xe8\x5f\x89\x8c\x2e\xcf\xb5\xb1\x7a\x5a\xab\x16\x9b\x46\xad\xac\xa9\x20\x07\xbf\x9c\x93\x23\xae\x2e\xcb\x7e\xcf\xae\x07\x7e\x58\x44\x49\x3d\x76\xb5\xc5\xd3\x20\x29\x8d\x16\xa8\xba\x5a\x1f\xb4\xeb\x5f\xd6\xdd\x59\xf9\x13\xbd\x52\x0c\xa7\x0f\xfd\x74\xcd\xd7\xac\x39\x0b\x7e\x34\x2c\x4d\x7c\x9d\x93\xa3\x47\x48\x5e\x9e\xa9\x8b\xc6\x40\xdd\xeb\x5d\xf0\x5c\x3b\x05\xc4\x85\x48\x18\x56\x1b\x21\x26\x79\xb5\xb3\x1d\xec\xa1\x95\x2c\xc8\x15\x45\xbb\x1a\x38\xec\x98\x5c\xf0\xec\x15\x39\x0e\x7a\x44\x6d\x1a\xca\x68\x1f\x1e\x91\xd6\x1a\xd4\xb0\xe7\x30\x19\xc9\x30\x64\x5b\xe7\x44\x8e\x51\xb5\x52\xaf\xc8\x0e\xbb\xd6\x7f\xdd\x19\x92\x9d\xeb\x99\x32\xff\x11\x7a\x06\x3d\xe5\x6c\x0f\x71\xa3\xe3\x89\x19\xcb\x4b\xd3\x11\x7f\xb0\x0e\x06\xd5\xfd\x96\x25\x17\xef\x8e\xde\xbd\x02\x5d\x3e\x96\xc6\xea\xcb\x72\xb6\x34\x3a\xa5\x85\x36\xb3\xbc\x31\x20\x03\xa4\xcf\x44\x32\xcd\x72\x99\xf2\xa0\x00\x19\x8e\x5c\x93\x13\x40\xba\xc8\x80\x03\xc3\x16\x36\x43\x27\xfb\xc9\x0f\xe7\xb6\x54\xf0\x81\xb8\xcb\x66\x3a\x99\x11\x89\x89\x02\x55\x08\x04\xae\xfc\x4d\x66\xfb\xd8\x51\x04\xe0\x4a\x95\x1b\xc6\x68\xe6\xf6\xab\xfd\x98\x2d\xf7\x55\x4c\x5f\x0e\xe1\x31\xb8\x1b\x56\xb5\x39\x51\x45\x76\x5e\xee\x8c\xc9\x39\x4f\x79\x42\xf3\xc4\xb6\xea\xb6\x43\x94\xf7\x19\x43\xc1\x0d\x08\xe6\xef\x8b\x1d\xb2\x87\x18\x04\xa0\x6e\x24\xcc\x21\xd2\x79\x04\x56\x48\xd2\x19\x34\xd2\x2e\x49\x07\xce\x78\xd2\xda\x21\x4f\x80\x4b\xd2\xf8\x9d\x48\x1a\x67\x6e\x57\x37\x87\x1b\xcd\x15\xf0\xe5\x85\xf5\x67\xce\x64\x6e\x8d\x40\x7f\x8b\x03\x3a\xe2\xc2\xaa\x2d\x6f\xcd\xd2\xab\xad\x11\x3f\xa4\x03\xf0\x3d\xe2\xa5\x48\x37\xf4\x75\xa3\x41\x2a\x02\xf6\xb8\x3e\x39\x72\x4c\x3c\x63\xb9\xe2\x4a\x1b\x16\x15\x57\x54\x03\x8e\xfa\xc2\xde\x41\x4a\xff\x23\x05\x39\xfe\xd7\xb9\x9d\xd6\x60\x0b\x89\xdd\x90\xd3\xd1\xff\x14\x39\x33\x1a\x51\x6b\xf5\xcb\x8f\x54\x57\xb9\xcc\xe7\xe4\x88\x6a\x8a\x9a\x17\x72\x2a\x59\x82\x83\x61\x8f\x7d\x28\xda\x72\xc8\x6f\x0d\x95\x67\xf2\xf8\xda\x8f\xd9\x41\xa7\xcd\xd1\xc4\xcd\xcf\xdf\x9f\x9d\x3c\x82\xee\x14\x81\xb8\x9d\xbf\x95\x71\x47\x0a\x54\x30\xa0\x13\x79\x00\xd6\x7a\x88\x9f\x93\xd4\x3c\x89\x9c\x4a\xc1\x86\xe4\x8c\xd1\x98\x18\xee\x66\xff\xf9\x4b\xce\xf5\x7d\xf1\xaf\xca\xab\xb5\xe8\x77\x8b\xd8\x09\x21\xdc\x60\x8e\x08\x61\x87\x7e\x00\xe8\x04\xa6\x63\x75\x80\x69\x22\xa7\xc4\x32\x8b\xc7\x7c\xfb\xf7\x67\x27\x9d\xbd\xfc\xfb\xb3\x13\xf7\xee\xe6\x9f\x72\xb6\x9d\xaf\xdd\xa1\xf1\x50\xda\x0e\xaf\x6b\xca\x7e\xa9\xce\x95\x8d\x94\xea\x06\xc1\xdd\xad\x81\x71\x57\x76\xc0\x63\xd1\xfc\x92\x8b\xc6\x35\x80\x55\x6e\x03\x4d\x94\x3c\x24\x56\x10\x44\x03\x24\xbe\xf8\x15\x49\x8b\x44\x03\xea\x11\xec\x35\xb3\xf9\x20\x5b\xcc\xed\x3a\x62\x11\x40\x09\x39\x62\x18\x8e\x88\x5f\xb9\x3a\x14\xff\x8b\xcd\x3f\x78\x4b\x05\x9d\x9b\xdb\x41\x02\x92\x14\xff\x0c\x36\xf9\x1e\x3a\xdd\x85\xff\x8a\x2e\x29\x4f\xe8\x94\x27\x5c\x83\x3e\x37\x18\x3b\x6d\x1e\x4b\x15\x60\xca\x8f\xc6\xfd\x3a\x55\x6d\xbd\xda\x1a\xe2\xc3\x00\xbc\x21\xd9\x33\xdf\xed\x5f\x19\x56\x3f\x18\x03\xdf\x87\x1b\x01\x8d\xbe\xa6\xfc\x9e\x7d\x4e\xf9\x7d\x14\x3d\x15\xd6\xfb\x75\xc3\x0e\x6f\xeb\xba\x93\x19\x69\xa3\xee\x04\x5f\x58\xd0\xd1\x67\xae\x3e\x61\x97\xfd\x16\x0a\x14\x9c\x9d\x86\xbf\x6f\xab\x42\x7d\x99\x83\x13\x3f\xbf\x83\x43\xb0\x17\xa6\x5d\xe9\x4e\xc8\x55\x0e\xe7\x74\x0d\x0f\x2e\x8d\x5f\xd5\xca\xe7\xf1\x64\x9d\x5b\x5e\xee\x40\xa7\xe1\xf7\xe6\x3c\x35\x01\xd7\xc0\xab\x35\xfb\xf5\x3b\xb8\x1b\xba\xb8\xd1\x1c\x59\x50\x48\xc1\xc7\xa4\xf1\x39\x6b\xf9\x9a\x11\xcb\x16\xb3\xf6\x99\xed\x66\x98\xd7\xe7\xd5\xa8\xcd\x21\xcb\x16\xe4\xf5\xf9\x06\x36\x89\x55\x05\xe6\xbd\x15\xc6\x72\x76\x15\x49\xf8\x8c\x69\xde\x88\x08\x8f\xcc\x28\x53\x29\xb8\x96\xb9\x7a\x04\x36\xe7\x1e\xdd\x8d\xe2\xe6\x46\x33\xfb\xf3\xcc\x11\x85\xbc\x0d\x3e\xa5\x24\x92\x49\xc2\x22\x97\xeb\x0f\x4b\xec\x7f\xb6\xc1\x11\x63\x33\x10\xd4\xf8\xf2\x5b\x70\xc5\x58\xa7\xcb\x3e\x6e\xbb\xfd\xb3\xe3\x83\xa3\xb7\xc7\xe3\x34\xfe\xd3\x42\x5e\x8d\xb4\x1c\x15\x8a\x8d\xb8\x6e\xa7\x6f\x3d\x22\x9e\x48\x07\x9e\x6e\xbd\xe8\xca\xc9\xad\x17\x66\xc9\x4a\x50\xeb\xf7\xaa\x84\x9d\x77\x71\xe7\x5c\x4a\xbd\x0e\x3c\x3f\x2b\x92\x04\xd7\x56\xe7\x8c\x0d\x43\xff\xf6\x3d\x61\xf9\xcb\x6b\xbb\x74\xe1\xd2\xcd\x5b\x21\xd1\x97\xd5\x8c\xb7\xe5\x80\xb4\xd7\x15\x9a\x6a\xda\x64\x6d\x1d\xca\xf1\xaa\x2b\x71\x5e\xf9\x1c\x03\x22\x7a\x61\xd6\xe5\x92\xad\x08\x40\x47\xcc\x64\x0e\x6d\x5c\xaa\xfb\x93\xe9\x08\x88\xb7\x5f\x28\x96\x8f\xad\xc2\xb1\x25\x84\x6f\xa3\x8a\xc0\x8b\x9c\xb1\x59\x97\x64\x3f\x63\xb3\x4d\x54\xb7\x1f\x03\xd6\xad\x4f\x8f\x33\xfa\x4a\xa1\x17\x98\x1b\x8b\x18\xdb\x48\xdb\x8d\xcb\x60\xb1\x3f\xb6\x84\xee\xad\x50\x1b\xba\x40\x16\x6a\xd3\x21\x92\xac\x2d\x5e\xe8\xb6\xb4\x8b\xa4\xef\x1d\x06\x91\x4b\x63\xc5\xb2\xab\xfd\x2b\x99\x5f\x72\x31\x1f\x5d\x71\xbd\x18\x21\xa5\xd4\x3e\x20\xfe\xef\xff\x09\xfe\x63\xa3\xc8\x07\x71\x6c\xf3\xdf\x0a\xc5\x66\x45\x82\x99\x69\x6a\x4c\x68\xc6\x7f\x66\xb9\x82\x2c\xcb\x4b\x2e\xe2\x21\x29\x78\xfc\x7d\xd3\x15\x23\x5d\x9c\x16\x73\xf6\xbb\x39\x28\xd0\xd3\x89\x2b\xdb\x99\xd1\x8a\xd1\xdc\xf1\xa4\x9c\xc6\x52\x61\xdf\x27\x43\xaa\xca\x11\xf8\xff\xd8\x7b\xd7\xe6\xb8\x71\x2b\x61\xf8\x7b\x7e\x05\x4a\x9b\x2a\x49\x93\xee\xb6\x3d\xc9\x26\x1b\x3f\xd9\x4c\x29\x96\x3d\x8f\x76\x7c\xd1\x2b\x79\x66\x6a\x1f\xdb\xbb\x83\x26\xd1\xdd\x88\x48\x80\x43\x80\x92\x3b\x99\xfc\xf7\xb7\x70\x0e\x00\x02\xec\x1b\xbb\x9b\xba\x79\xc8\x2f\xb6\xd8\x24\x08\x1c\x1c\x9c\xfb\x85\xa6\x39\x17\x0f\xe5\x04\xec\xaa\x1d\x70\x91\xee\x06\xc9\x86\x03\x02\xc6\x89\xd5\x03\x7b\xcf\xba\xb1\x7d\xcc\x0f\x75\xd6\x13\x6c\x7b\x6f\xa3\x7f\xe2\xd8\x9f\x56\x84\x25\x9f\xab\x9f\xb3\x21\x7e\x65\x58\xa4\x35\x5c\xfb\x40\x9e\x6d\xae\xbb\x0b\xe4\xe9\xd6\x20\x7f\x07\xe1\x39\xb7\x8a\x71\xe4\x01\xcb\xcc\xb7\x6b\x07\xbb\x47\x50\xef\x2f\x19\xdf\x8e\x84\x56\x73\x1f\xe8\x49\xa8\x5c\xa1\x3c\x10\xc0\x90\x2a\x39\x7b\x1a\xc4\xc8\xd7\x4d\xb0\x5c\xb5\x87\x44\x0a\x61\xfb\x23\xbc\x2b\x98\xb8\xd4\x34\xb9\xda\xd3\xab\xdb\x4b\x55\xbf\x32\xa9\xea\x96\x02\x81\x1c\x8a\x62\xe2\x9d\x0d\x7f\xab\x83\xbd\xf1\x90\x3f\x42\x02\x8c\xcd\xfe\xde\xd0\x62\x7f\xeb\xaa\x1b\xa9\x21\x41\xf9\xdb\xd6\xa0\x0a\xc9\x41\x85\x2c\xa0\xd8\x98\x4d\x41\x05\x38\xde\xbd\xc4\xb3\xef\xf9\xb6\x2c\xa6\xbb\x18\x98\x60\xc0\x98\xa2\xe6\xe6\xce\x98\xeb\x9a\x56\x2a\xa6\xb1\x14\x94\x2d\x91\x2c\x05\x49\x6c\xb9\x07\x90\x47\x82\x22\x06\x81\xac\x22\x88\x4c\xb4\xcb\x1a\xf5\x55\xa3\x9e\x3e\x7d\xfa\x14\x2b\xe1\xfc\xe9\x4f\x7f\x22\xb2\x84\x5e\xa4\x09\xcf\x17\x1f\x84\xa7\xfe\xfd\xd9\xb3\x11\xf9\xef\x93\x37\xaf\x21\xa3\xa1\xd0\x0a\xab\xbe\xe1\xc8\xe6\x81\xe8\x65\x35\x20\xff\x75\xf9\xee\x6d\x5d\xa3\x21\xfe\x15\x54\x73\xbf\xbc\xb8\x2f\xc8\xd3\x3f\xfe\xe1\x0f\x23\x72\xca\x4b\xc8\xe8\xe2\xcc\xf7\x9c\xf7\xa6\x16\x5a\x32\xac\xdc\x03\x35\x54\x9c\xc4\xc5\x7d\x7b\x47\x9b\x9f\x9c\xf3\xe9\x4c\xdb\x8c\x58\x83\x90\x19\x4f\x34\x26\x8f\x21\x59\x73\x2d\xed\xb1\xa5\x88\x6d\xd2\x63\xa5\x3f\x98\xdc\x80\x64\xfc\x8a\x91\x89\xfa\xb6\x94\x55\x51\x97\x79\xb4\x8d\x98\x6d\xa2\x0c\x0e\x56\xef\x95\x62\xfa\x91\x87\xad\xee\x65\x6a\x8e\x70\x1b\x46\x6a\x08\xac\x36\xbd\xb5\x2e\x75\x58\x50\xee\x93\x61\x20\x02\x30\xea\x01\xea\x6d\x3d\x29\x79\xe1\xa9\x8a\xab\x39\x52\x94\xf2\xef\x88\x02\x90\x8b\x1c\x90\x67\xc8\x15\x86\x9d\xb4\x99\xc2\x81\x77\xcb\xe5\x53\xdb\xa6\xf3\xee\xb6\xed\x64\xb3\xd8\x0e\x2c\xe3\xca\x7c\x02\x8a\xfd\xac\xf9\x72\xdd\xcb\xd8\x60\xa9\x42\x7c\xa9\xc4\xc2\xdb\xb6\xb0\x8a\x25\x97\xb6\x09\xa8\xad\xaf\x58\x8f\x81\xe5\x01\x6c\x1d\x1c\xfb\xac\x83\x92\x07\x44\x14\x6f\xad\x98\xae\x2c\x68\x20\x8a\xde\x7c\x1b\x1a\x54\xc2\x0a\x73\x5a\x5e\x19\xc5\xd5\x52\x97\x11\x39\x37\x93\xf4\xa5\x74\xb0\xd8\xf1\x35\x3a\x36\x73\x3a\x87\xcf\x5a\xc1\x0d\x3e\x72\x38\x1a\x1d\xe2\xf1\x93\x25\x51\x9a\x96\xf6\x2c\x99\xfb\x5f\x46\x95\xf5\x37\xb4\x50\x58\xf5\xd7\x48\xaa\x50\x11\x5b\x42\xee\xba\x9e\x39\x12\x44\x2d\xac\xfb\xca\xe8\x64\x08\x80\xd9\x79\x80\x07\x5e\x15\xdd\xee\xbe\x3d\xe5\x0f\xa2\x64\x77\xbe\x87\xc0\x81\x57\xd3\xa7\x9a\x36\x3c\x1b\xad\xe4\x0d\xdb\x15\x2a\x63\x8f\x4a\xc0\x58\xde\x05\xd6\x12\xce\x50\x00\x0b\xdb\x83\x3e\x5e\x39\x02\xaf\x2e\xa4\x09\xbc\xf6\x97\x29\xf0\xda\xc7\x89\x8c\x57\x84\xc3\xce\x93\x8c\xc0\xb4\x0c\x0c\x79\xd4\xa4\xde\x02\xe8\xd5\x57\x04\xc7\x1a\x1b\xdb\xba\x06\xcd\x82\xd0\xb1\x92\x59\xa5\xf1\xd5\xfa\xc7\x90\xfb\xc1\xa0\xae\x66\x38\xb0\x3c\xff\x58\xc0\x0b\x41\x0a\x40\xf6\xb1\x0f\x5b\xc4\x6b\x6f\xb2\xb1\x8f\x11\xe2\x57\x64\x80\xd8\x1b\xce\x5e\x61\xeb\x02\xd6\x6e\x30\x9f\x71\x77\x33\x63\x36\x04\x22\x90\xfb\x0c\x35\x35\x34\x02\x84\x4a\x27\xc2\x61\xe1\x9c\xf4\x5e\xcc\x8c\x89\xe2\xfb\xdb\x12\x14\x27\x47\x2f\x7c\x7a\xbc\x0b\xbb\x3b\x13\x9a\x95\x13\x9a\xb0\xe3\xd0\xc6\xc0\x8a\x19\xcb\x59\x69\x00\x65\x9f\x73\x39\xda\x33\x2a\x52\x5b\x76\x2a\x61\x25\x9c\x60\xf6\x59\xb3\xd2\x00\xf5\xc5\xe5\x19\x49\x4b\x7e\xcd\x4a\x45\x8e\xfe\x06\xe5\x04\xb1\xdc\xd4\xf1\x23\x0c\x83\xc5\x85\xdc\x87\x05\x04\x3e\xdc\x4d\xea\x07\x0c\xe5\x68\xb8\x08\xe8\x4c\xbd\x55\xae\x36\x96\xd9\x56\x15\xda\x8e\x46\xe6\x40\x00\x0b\x05\xea\x0b\x1d\xad\xd1\xb7\xe9\x8a\xd9\x43\xe3\xad\x44\xe3\xc0\x54\x91\x92\x4d\x8d\x36\x56\x06\x45\xfb\xb0\x4c\xca\xbd\x25\x37\x74\x9f\x50\x52\x3b\xab\xd6\xe5\x7e\x4c\xac\x5e\x29\xaf\x79\xea\xc4\x21\x2c\x8c\xef\x4b\xc3\x15\x54\x05\xc5\x0b\xa8\x52\x32\xe1\x60\x6a\x0a\xb6\x06\xb5\x54\x10\x9a\xe2\x56\x68\xce\xdd\x1c\xba\xc9\x24\x34\x14\xda\xa9\x0f\x2b\xe9\x84\x21\xca\x94\x9d\x57\xe3\x8c\xab\xd9\x65\xa7\x2e\x91\x65\x03\x63\x50\xe2\x42\xa4\xca\x4a\xcf\x88\x62\x42\x71\xdb\x36\x1f\xc5\x2d\x2e\xa1\xcb\x82\xd9\x06\xf7\x76\x78\x28\x24\x64\xc3\x43\x33\x7e\xf7\xd3\xdb\x7a\x1e\xb6\x58\x09\x76\x81\x4e\xd9\xf7\xa2\x88\xee\x27\x34\xcb\x94\x95\x6f\x7d\x8f\x13\xc7\x7b\x50\x42\x75\x05\x4c\x10\x2b\xb8\x41\x18\x37\x7b\x08\xc1\x41\xe2\xe5\x1b\xf2\x2c\x5d\x98\x0a\xca\x0d\x4b\xe1\x1e\x82\x66\xd6\xee\x05\x0f\x21\xcc\xc4\x41\xa4\xbb\xc7\x56\x28\xbd\xfb\xe7\xf1\xb9\x7f\x6e\x27\xa7\xa2\x6e\x31\x4a\xe1\xe6\x10\x32\xb4\xd0\xb5\x51\xd9\xb6\xb9\x8e\xd1\x38\x86\xb4\x21\x4c\xf3\xde\x5c\xc0\x38\xbf\x13\x6d\x7b\x51\x74\x63\xdd\x6d\x0e\x0a\xa2\x98\x51\xc5\x81\x42\x0d\x2d\xfc\x92\xe0\x48\x59\x1d\xd9\x9f\xf3\x45\xba\x56\xf3\x74\x60\xe7\x78\xf3\x50\x91\x54\x26\x95\x51\xbe\x6a\xb0\xd7\x01\x17\xfb\x75\x2b\xfc\xb2\xda\x27\xa5\xf2\x46\xdc\xd0\x32\x3d\x39\xdf\x29\x37\x37\x16\xce\xea\xb1\x42\xd1\xdb\xdd\x26\xe6\x3e\x1d\x43\xc1\x5b\x5b\xdb\xb0\xf7\xf6\x2d\x1d\x22\xa4\xe6\xcb\xcc\x6d\x5a\x1a\x22\xdb\xd2\x9b\xb7\xad\xc1\xae\x77\x10\xf6\x0e\xc2\xe8\x7a\x48\x0e\xc2\x33\x74\x10\x86\x9d\x7e\x23\xf2\x62\x2d\xb4\x06\xe2\x5f\x84\x8f\xe9\xb4\x26\xa9\x28\x89\x37\xf3\x79\x1b\xc2\x3f\x1e\xde\x1a\xeb\x02\x85\xc1\xd1\x5c\x90\xcb\xbe\x04\x7f\xd4\x03\xf0\x27\x01\x2c\xf7\xd0\x0a\xf1\x8a\x09\x7e\x9d\xaf\x86\x55\x6a\xd1\x31\x1d\x78\xb8\x0b\x99\xda\xde\x06\xd0\x74\x03\x1b\x08\x0c\x7c\x67\x40\xe1\xd2\x4d\x41\x3a\x2f\x68\xc2\x80\xbe\x79\xf1\xa7\x13\x27\xc1\x9e\x08\x40\x3a\x42\x02\x02\x88\x00\xd0\x39\xdf\x07\x1b\x48\x67\x18\x61\xae\x5a\xe3\xd9\x77\xa4\x66\x45\x51\x1c\xd5\x21\x82\x4a\x66\x2c\xa7\xf0\xdf\x57\x0e\x04\x86\x36\x1a\xe5\x41\x33\x2c\x01\xc7\xca\x5c\x11\x39\x19\x44\x91\xae\x07\xd7\xcf\x0e\xf6\x73\x36\x90\xee\xfc\x94\xc4\x9d\xa3\xf3\xbd\x9d\x3d\xa4\x09\xb0\xf3\xc8\xb7\x63\xce\x50\xdd\x03\xd3\xd5\xbd\xf7\x11\x14\xc0\x3f\x10\xc2\x0f\x06\x38\x5d\x3b\x71\x77\x75\xde\x0e\xbc\xd7\xe0\x11\x08\x7f\xbd\xf3\xf6\x4b\x74\xde\x06\x8c\xd1\x11\xba\x25\x8e\xdc\xd0\x25\xe0\xbc\xb9\x63\xe6\x94\x1a\xab\xc3\x38\x57\xae\xf3\xe3\xca\x32\x0e\x5d\x3a\x1c\x8d\x0e\x0f\x9d\x77\xd7\xe2\x7d\xa5\x27\xc3\xff\x20\x4c\x24\x32\x75\x0d\x7c\x27\xbc\x54\x1a\xc4\xbd\xda\xdc\x16\xce\x25\x77\xdf\x0a\xc3\x9f\x60\xec\x2e\xb6\x7a\x6f\xda\xe2\x4a\x12\xbe\xba\x05\x21\xa6\x16\x5d\x7c\xe1\x43\x0b\x22\x5f\xcf\xda\xca\x30\xee\x77\x45\x32\x9e\x73\xdb\xff\xde\x1c\x74\xa6\xb4\x22\x47\x78\x73\x94\x14\xd5\xc0\x3e\x30\xca\x59\x2e\xcb\xf9\xc0\x3f\x64\x7e\x8c\xde\xb2\x4f\x1c\x63\xbf\x93\xaa\x2c\x99\xd0\xd9\xfc\x4b\x96\x80\x1c\x10\x1f\x88\x00\xe4\xf7\x78\x9f\x8a\x23\xf5\x15\xa3\x56\xed\xf1\x05\xb3\x79\xd0\x5f\xc0\x57\xa3\x55\x83\xda\x2f\x6e\xee\x32\x71\x4d\xae\x69\xb9\x65\xe5\xf8\x65\x57\x87\x32\x4f\xca\xaf\xb9\x92\x3b\xbb\x45\x83\x81\x42\xf0\x5c\x7a\x23\xb4\x39\x6c\xb2\xd2\x45\xa5\x2d\x45\x77\x27\xd0\x55\x19\xf7\x27\xaf\x21\x1c\x3e\xdb\xa5\x8b\x52\x7c\x15\x54\x6b\x56\x8a\xe7\xe4\x7f\x8e\x3e\xfe\xee\x97\xe1\xf1\x37\x47\x47\x1f\x9e\x0e\xff\xfc\xe9\x77\x47\x1f\x47\xf0\x9f\xaf\x8e\xbf\x39\xfe\xc5\xfd\xf1\xbb\xe3\xe3\xa3\xa3\x0f\xdf\xbd\xf9\xf6\xfd\xf9\xcb\x4f\xfc\xf8\x97\x0f\xa2\xca\xaf\xf0\xaf\x5f\x8e\x3e\xb0\x97\x9f\x5a\x0e\x72\x7c\xfc\xcd\x6f\xf7\x9e\x3a\x15\xf3\x77\x7b\x92\x42\xbc\x86\x1d\xb2\xe4\x78\xc4\x4e\xd0\xaf\xd1\x56\x82\x0b\x3d\x94\xe5\x10\x87\x7e\x0e\xc5\x82\xf7\xfc\x80\x43\xaf\xae\xcf\x7f\x2d\x06\xd4\xe5\xf6\x9d\x50\x7f\xcf\x07\x1c\x5c\x9f\xa7\xbc\x83\x34\x63\x37\x52\x9c\x26\xa3\x59\x5e\xc8\x92\x96\x73\x92\x5a\x6b\xe6\x7c\x49\x05\xa2\xa0\x04\xd1\xde\x25\x85\x61\x1e\x29\x2f\xef\x21\xd3\x78\xef\x8a\x42\x2c\xe5\x55\xde\x51\x3d\x21\x18\x2b\xdc\x8c\x1b\xa8\xbc\x6f\xab\xf6\xbb\x90\x22\xfb\x98\x75\x68\x8c\x69\x72\x85\x1a\x94\xdf\x2d\x94\x1b\x83\xd4\xfa\x83\x03\x1b\x12\x91\x33\x2a\xbc\x61\x1f\x62\x5b\x64\xca\xcc\x56\xba\x87\x71\xec\xc8\x08\x8f\x9e\x76\x1b\x40\x58\x77\xa4\x92\x25\x79\x03\x02\xd0\xbd\xee\x3e\xe9\xa4\x56\x08\xff\x07\x7b\x6d\xa4\xbe\x8e\x32\x51\xdd\x70\x2e\x80\x48\x4b\xd0\x37\x6d\x5d\xaf\x09\x34\xd9\xaa\x23\xc4\x22\xc9\x02\x36\xf2\xa5\x3b\x96\xce\x7f\x6b\xb6\xd3\x8c\x8a\xb2\x29\x18\xa6\x33\x85\x71\x2b\x3c\x81\x3e\x50\xa0\x9b\xc2\x76\xf8\x2d\x7c\x1f\x34\xea\xaf\x94\xf9\x92\x14\xf1\x33\xf5\x87\xb0\x4d\xd6\x18\x71\xc2\x75\xd7\x8e\x35\x6a\xf3\xcb\xa5\x5f\x59\x6d\xcf\x80\x94\x65\xa7\x7e\xaa\x0a\x94\x14\xfb\x15\x2b\x6a\xcb\x09\x44\x56\x04\xfd\x7a\x5c\x4b\x9a\x05\x44\x15\x3c\x8b\x31\xd5\x75\x9e\xf0\x0b\xaf\x84\x0d\x28\xbc\x77\xb4\x7b\x74\xd2\xc7\x9e\x32\x47\x57\x92\x46\x27\xf2\x45\xe7\x52\x85\x8f\xdc\xdc\xbf\xdf\x6b\x1d\x04\x1a\xb1\xd5\xb0\x47\x46\x1c\x10\x4a\x7d\x5b\x34\x47\x13\x5c\xd4\xc1\x7b\x6f\x51\xb2\xec\x36\x99\x27\xb6\xc2\x13\x8f\x3a\xf8\xe0\xb0\x78\x34\x20\xb7\x6a\xe8\xbb\x57\xd7\x76\x09\x32\x66\x13\x0c\x7c\xc2\x77\xc0\x60\x60\x33\xc2\x52\x96\x31\xcd\x82\xb6\xf3\x05\x36\xca\x2e\x59\x2e\xaf\x6d\x9b\xd6\xef\x95\x75\x9b\xf3\xc9\x73\x42\x8f\xa3\xbc\x63\x65\xfb\x20\x33\x96\x62\x9a\x58\xd0\x5b\xb0\xac\x84\x1a\x90\xf1\xb1\x0b\x6b\xb5\x5d\x30\x4b\xb0\xad\xd9\x26\x5f\x60\xce\x2a\x99\x01\x00\xd4\xaa\x2a\x65\x4e\x94\xa0\x85\x9a\x49\x0d\x96\x13\x5a\xd0\x84\xeb\x39\xd1\x25\x4d\xae\xcc\x23\xe0\x4e\x85\xcf\x0d\x48\x72\x6c\xa3\xdc\x43\xf0\xc5\x99\x6b\x7a\x56\xca\x6a\x3a\x83\x54\x2a\x7c\x2a\xc9\xa8\x72\xab\x5f\xfa\xbe\x55\xe5\x15\x49\xe7\x82\xe6\x3c\xf1\x2d\x44\x4a\x79\xcd\x15\x97\xd6\xe1\xe5\xc6\x3d\xf7\xcd\x18\xd0\x89\xf6\x22\xa3\x3c\x27\x47\x8a\x31\xf2\xd2\xa1\x04\xfe\x72\x89\x02\x25\x1a\x14\xcb\x38\xb6\xce\xd6\x7d\xb4\xf5\x07\xcc\x9d\x9a\x02\xfb\x88\x05\x94\x09\xcc\xcc\x97\x7e\xf4\xd8\x6f\xd7\xf2\x39\xc9\x12\xe2\xde\x5c\x27\x20\x26\x52\x19\x04\xc6\x9c\x9c\x9f\xa9\x50\xcd\xb5\xdd\x14\x71\x24\xf8\x21\x93\x62\x1a\xd6\xbf\xab\x31\xd3\xd0\x7a\x01\x6d\x31\xaf\x79\x5a\xd1\x0c\xa9\xbc\x9d\xcc\x8b\xcb\x33\x7c\x9d\x4f\x67\x7a\x78\xc3\xc0\x08\x8a\xcc\xb0\x3e\x33\xee\xa3\x7c\x21\xe0\x96\x2b\xe0\x0a\xda\x1a\xdb\xd0\xa0\x0c\xad\x27\xe9\x1c\xea\xef\xda\x18\xcf\x28\x26\xc7\x55\xab\xc7\x21\x96\x41\x1c\xa6\x77\xe2\xfb\x24\x1a\xc9\x08\xac\xc4\x06\xc4\x80\xa9\x8b\x73\x83\xa6\x8f\x75\xeb\x0d\x7f\x5b\xd7\x0d\x20\x41\x2e\xde\xbd\x51\xf0\xbd\xc9\xb3\xd7\x35\x9a\xbc\x67\x79\x91\x51\xdd\x4d\x84\xc9\xc1\x8f\x81\x15\x3c\xf0\x21\x9b\xe3\x48\x45\x3a\xa4\x99\xc1\xc8\xf3\x1f\x5e\xd8\x04\x37\x3c\x60\x51\x14\xdb\xfb\xba\x55\xa9\xeb\x52\x6d\x84\xa5\xa5\x47\x0b\x4a\xaa\x8d\x59\x0a\xc4\xc8\x7e\x19\x4c\x15\x37\x02\x5b\x05\x9b\x3f\xce\x7f\x78\x31\x20\x7c\xc4\x46\xee\x2f\xff\xa8\xa3\x86\x5a\x4e\x31\xcf\xc1\x27\xd2\x00\x3e\xc3\x54\x42\x1b\x70\xf8\xee\x4f\x7f\x31\x93\x34\xbf\xfe\x75\xf8\x97\xa0\xa5\xd1\x5f\x7f\x32\xc4\xb5\x34\x0f\xc4\x77\xc3\x30\x73\xa0\x7b\xe6\xaf\x9f\xce\x65\x7a\x59\xb0\x64\x84\xcb\x52\x3f\x61\xb0\x00\x61\x42\x1b\x91\xfb\x5c\x42\x80\x19\x4f\x11\xcb\xe1\xdb\x25\xfb\xbb\xf3\x13\xd8\xae\xa9\x96\x90\x24\x54\x33\x01\x0c\xc0\xe5\x1b\x0b\xa9\xf1\x75\xec\xb7\x0a\xf3\x3f\x9a\x84\x1d\x50\xb5\x94\x70\xcc\x91\x94\x9c\x08\xc2\x3e\x73\x05\xe5\x67\x70\xad\x00\x0e\x6a\x63\xd8\x1d\x4f\x33\xc3\x1a\x08\xfb\x6a\x43\xd0\x82\xd5\xcc\xed\x2b\x21\xf5\x57\x7e\xfb\x5d\x7c\x22\xf6\x33\x27\xf4\x5a\xf2\x94\x54\xd0\x3e\xcb\x9c\x40\x01\x06\xee\xba\x83\xe1\x78\x4e\x72\xae\x34\xbd\x62\x23\x72\x69\x78\x56\x18\x68\x80\xd0\x13\x04\x9a\xd1\xb0\x94\x54\x42\xf3\x0c\x7e\xad\xc7\x31\x53\x0e\x79\xd9\xd9\x84\xa8\x2a\x81\x1e\xbd\x25\x1b\x3a\xee\x68\x9f\x5a\xa0\x31\xf5\x5a\x06\x7e\xb3\x67\x14\xd5\xa8\x22\x85\x57\xb1\xe3\xaf\xb0\xe8\xb5\x10\x5e\x6d\xe6\x29\x45\x52\x73\x44\x00\x26\x74\xd9\x36\x4c\x30\x73\x71\x40\xa8\xd1\x59\xbf\x81\x60\x09\x53\x8a\x96\x73\x6c\x8a\xca\x7d\xef\x46\x1b\xf9\x0a\x9c\x3a\xa7\xa2\x82\x01\x4a\x86\x2d\x76\xab\x04\xa0\x43\xc9\xb8\x94\x57\x4c\xf8\x4c\x02\xb3\x8b\x71\x5c\x75\x1d\x3c\x8a\xdd\xa7\x49\x32\xa3\x62\xca\xea\x64\xf2\x9c\xa6\x00\xfb\xef\xbc\xa4\xe5\xd6\x63\x20\x40\x27\x46\x60\xe1\x1a\x40\x31\x36\xfc\xc9\x7b\x3f\x3e\x0a\x5f\x0e\x77\x50\xbb\x27\xcc\x92\x78\xb6\x13\x4d\x24\xdd\xd8\xc3\xf7\xb7\x84\x0f\x41\xa0\xb8\xc7\x18\xee\x9c\x69\x9a\x52\x4d\x3b\x8b\xe3\x7e\x43\x7d\xf3\x4f\x1b\xdb\x01\xe8\x10\xc4\x7c\x58\x1e\xeb\x44\x49\x59\xf0\xb0\xbc\x00\x50\x83\x99\xdb\x7d\x28\x4f\xa5\x0d\x5e\x5b\xdf\x23\x86\x67\x83\xac\x46\xb3\x4c\xde\xd8\x82\x75\x6e\x34\x24\x59\x2c\x25\x69\x05\x62\x5f\x4d\xd2\xf6\xf1\x8d\x77\xe2\x3a\x31\x1b\xdd\x19\x94\xdf\xd7\x21\x00\x49\x1c\xa2\xbd\x54\x40\x43\x5e\xc7\x84\xe6\xd8\x4a\xdf\xd5\x83\xb0\xc0\xaf\x04\x1e\xd5\xc6\x36\xc0\x3e\x4d\x99\x56\x75\x70\x25\x72\x13\x43\x22\x2d\x2f\xb7\xb6\x04\x60\x35\x76\x6b\xac\x3a\xbe\x5c\x52\xc4\x8d\x53\xd2\x72\x0b\xc3\xbf\xee\x7d\x67\xba\xf3\x21\x61\x17\xdc\x37\x32\xdd\xdf\x19\xd5\x68\xe7\x5a\x0f\x5c\x27\x9d\x60\x02\x92\x02\x5b\x0f\x3e\x00\xae\x79\x15\x55\xcb\x40\x16\x30\xa3\xd7\xbb\x5b\x55\x6b\xc9\x74\xe8\x7b\xb6\xc1\xe7\x86\xf0\xb9\xe1\xb3\x7d\xed\xd7\xfb\x07\x2f\xba\x6b\xcf\x20\xc6\x78\x42\x1d\x38\x2c\x0c\x69\xbd\xec\xc4\x9f\xd0\x28\xa6\xe4\xc7\xb5\xfc\xd7\x06\x68\xf8\xa0\x18\x9b\x56\xcb\xb8\xa1\x9a\xcf\xc9\x57\x91\xc4\x65\x25\x5b\xaf\x0d\x63\x32\xd3\x91\x53\x8f\x47\x76\xe3\x5d\x55\xaf\xf8\xf1\xe3\xc6\x60\x20\xea\x2d\xd7\x1a\x5d\xd2\x94\x17\xbf\x8d\xa8\x0c\xed\xf8\x7d\xaa\xaa\x41\xe6\x52\x66\x99\x6b\xe1\x8e\x1a\x72\x23\xc4\x09\xda\x07\xa1\xd3\x64\xe0\xcd\x10\x5e\xde\x17\xec\xc6\x0b\x76\x54\x61\xd5\x52\xe7\xb2\x07\x53\x89\x8b\x3b\x5b\x36\xde\x08\x7a\xe0\xc3\xef\x27\x62\x8e\x93\x3f\x0d\x80\x8b\x06\x06\x32\x35\x9f\x32\x3a\x80\xa0\xe3\xcc\x48\x21\xc1\x06\xf8\xef\x34\x58\x9a\x96\xc1\x53\x17\x6c\x62\x2d\x03\xe1\xad\x76\xef\x22\x3f\x8c\x5e\x1c\xd5\x51\x92\x56\x4c\x0e\x2a\x65\x5a\xa8\x47\x8f\xc4\x51\x45\x8d\xd1\xa2\x82\x3d\xcb\x66\xb0\x67\xe8\x41\x87\xc1\x07\xdd\x85\x1f\x40\x6d\x18\x2e\x76\x8f\x29\xae\x87\xd9\xa1\x63\x78\xf3\xea\x2e\x8a\x01\x02\x39\x21\x8a\xab\x0b\x77\x70\x44\x76\x4e\xce\xcf\x60\x60\xa7\x61\x4e\xe1\x0f\x27\x79\x78\xbf\xe6\x98\x19\xba\x50\x57\xb4\x02\x8c\x0c\xdf\x5d\x12\xe6\x56\x1f\xce\xef\xa0\x7d\x93\x75\x17\xb9\xf4\x65\xc3\xb8\x4e\xce\xcf\xf0\x8b\x23\xe8\xe0\x4b\xc5\xdc\xca\x84\x7a\xc6\xcb\x74\x58\xd0\x52\xcf\xd1\xc8\x32\x88\xbe\xe6\x73\x38\x3b\x00\x47\xa7\x9e\xec\x7d\x3a\xbe\x85\x57\xb4\x47\x00\x3e\xe7\x27\xb2\x8e\xbe\x95\x3b\xf3\xd0\x20\xb2\x6f\x46\xa9\xbb\x22\x88\x84\x1d\x7f\x9c\x8d\xe5\x51\x40\x24\xa2\xd1\xb7\x25\x3f\x18\xf2\xaf\xe2\xe8\x1b\x14\x07\x40\xd6\xb7\x76\x31\x19\xa6\xb9\x79\xd9\x12\x8c\x14\x66\xa4\x01\xe1\x13\xc3\x88\xa5\x18\xda\xe4\x7a\x6f\xc4\xb7\xf2\xa9\x0b\x53\x45\x83\x03\x1c\xdd\xe0\x2b\xe1\xab\xfe\x94\x93\x23\x21\x05\x9e\x7c\x7c\xf6\x18\xe3\x73\x57\x58\xa0\xe1\x11\xcf\xcd\x43\xbb\x44\x40\x69\x9c\x98\xc0\x45\x6a\xb6\x1d\xd8\x1e\x58\x2c\x54\x95\x24\x8c\x79\x1b\x57\xd8\xd7\xbe\xa6\x4c\x76\xca\x39\xd5\xc9\x8c\x29\xa2\x24\xd4\x47\x55\x9a\x66\x59\x6d\x5b\xb2\x80\x92\x20\xe9\x38\x3b\x7f\x20\x00\x45\xd9\xe8\xd6\xcc\x56\x64\xd4\xda\x72\x26\x95\x48\x30\x02\x8c\xeb\x79\xd8\x19\x35\x12\xf6\x40\xa1\x56\x68\x72\xe2\x13\xb4\x2e\x07\x8a\xb1\x07\x26\x90\xd6\x39\x12\xd3\x99\xeb\x3d\x0e\xba\x9a\x2d\x02\x68\xe8\xe8\x98\x26\x57\x37\xb4\x4c\x15\x24\xda\x53\xcd\xb1\x17\xe3\x00\xa5\x8e\x50\x88\x10\x87\x87\xa1\xa3\x96\x8b\xa6\x7c\x13\x4e\xe4\x28\x98\xf5\x82\xdc\x73\xec\xe5\x1d\xc5\x7c\x97\xbe\x7a\x62\x84\x56\x5a\xe6\x54\xf3\x04\x4c\x51\x7c\x12\x78\x17\x72\xdf\xdd\xc2\x3b\x89\x91\x0b\x00\x5f\xb1\x0b\xb7\x78\xb0\x5c\x02\x5a\x32\xf1\x60\xae\x6e\x99\xcb\xe7\x15\xb0\x26\xfb\xa1\xf7\xe8\xaf\x06\x2f\x58\xc9\x18\xe1\xb9\x11\x60\x29\x34\xd0\x9e\xf8\x9c\x7f\xe7\x72\x59\x07\x14\x23\xa5\xff\x08\x7e\xae\xe0\x29\xb4\xa7\x65\x99\xbc\x51\x44\xdf\x48\xaf\xf4\xd7\xde\x04\x9b\xdc\x3e\x68\x88\x74\xf6\x1d\x73\xd4\x0c\x58\x82\x73\x34\x30\xb8\x73\xc3\xb2\xcc\xfc\xbb\xee\x34\xa9\xd1\xb2\x19\xf1\xa9\xc0\xf4\x67\xae\x9c\x05\xc6\xc6\xb3\x1f\xa5\xa5\x2c\x0a\x6b\x4b\xcd\x8f\x9b\x33\x02\xd7\x65\x79\xcd\x14\x78\xef\x5d\x84\xbc\x01\xc3\x94\x09\x56\x52\x0d\x8e\x10\x5b\xd4\x11\x08\x4a\xf3\x13\xd1\x36\x2e\x9d\x5c\x08\x2e\x74\x04\xad\x07\x8f\xfd\x15\x2c\x16\x06\x52\x0e\x61\xd4\x08\x0b\xe7\x1c\x93\xef\x15\x2e\xc8\x9f\x59\x1f\xcd\xdf\x4a\x67\x40\xb3\xaf\x55\x1b\x46\xe4\xe8\x24\x2b\x66\xc1\xa8\xa1\x94\xee\xb3\xa5\xe2\x99\x46\xdf\x7b\x51\x4a\xa5\xde\xba\x57\xb6\xf9\x74\x2f\xc1\xaf\x1b\xa6\x97\xe0\x7b\x09\x7e\x87\xab\x97\xe0\x9b\x57\x2f\xc1\x37\x2f\x4f\xe0\x6f\x05\x2c\x5e\xbc\x89\x79\xc9\x3a\x00\x91\xb7\x52\x5b\x17\x2b\x88\x78\x74\xa5\xa5\x88\x02\x23\xb9\xa1\xf3\x91\x60\xda\x56\xd4\x71\x46\xc1\x0b\x37\xde\xb7\xa5\x11\x76\xac\x6c\x1c\x1c\x56\x77\xf2\x5d\x2d\x9f\xe0\x2b\x5a\x22\xff\xad\x3d\xbe\x70\xff\x50\x59\x7f\xa7\xf9\x1d\xf2\xeb\xc2\x01\x12\x36\x22\x97\xcc\xb5\x30\x89\x3e\xbe\x58\x35\x25\x65\x9a\xf2\x4c\xd5\x0c\xf7\xfd\x0a\x06\xbe\x3b\x43\x7d\x48\x78\xe6\x73\x22\xba\xd5\x12\xeb\x24\xa7\x20\xf0\x2c\x8c\xe8\xac\x1f\x58\xe5\x72\x38\x9b\x90\x0b\x96\xc8\x6b\x56\x22\x6c\x5f\x7e\x2e\xa8\x30\x9a\xd0\x2b\xca\x33\x03\x59\x07\xe1\xda\xb8\x0a\xed\xbc\x62\x17\x5f\x60\xd1\xf6\x68\x6d\xb7\x31\xb7\x93\xb2\x05\x77\xcc\xf3\x36\x90\xa8\x28\xd9\x35\x97\x95\x72\x71\xa7\x95\x46\xa6\xa4\xb4\xd5\x3d\x66\x7c\xea\xbb\x6e\xfa\x70\xb0\x92\x25\xb2\x4c\x6b\xf4\x55\x9a\xea\x4a\xc5\xa9\xec\x09\xfa\xd4\xba\x73\xa7\x78\x38\x3e\x20\x29\xad\x4b\x79\x06\x00\xd6\xc1\x38\xcd\x18\x20\xd0\x56\x14\xd4\xd4\x08\x28\x60\x48\xfd\x30\x4b\x88\x0b\xdc\x50\x83\x44\x23\xf7\x13\xbe\x3c\xa8\x71\xa7\x0e\xce\xe0\xaa\x8e\x2e\xae\x23\x1d\x38\xe8\x27\xd4\x10\x94\x40\x11\xf7\xe4\x04\xd0\xd7\x89\xf5\xa7\xa8\xf9\x5f\xd8\x6f\x9d\x64\x46\x1b\x41\xf2\x14\x90\x94\x25\x51\x14\x3c\xcf\x2b\x6d\xce\xc1\x88\x9c\x61\xde\x2d\xe8\x34\x56\x55\x9e\xd4\x39\x9f\xac\x54\x3b\xc7\x3e\x84\x57\x77\xce\x37\xd2\x9d\x03\x8e\x34\xb7\xfa\x22\xdc\xb4\xb0\x9a\x9e\x14\x0c\x63\x98\xcc\xfe\xba\x18\xa7\xe8\xe9\x9d\x4b\x66\xc5\x57\x87\x47\x0b\xaf\xee\xd4\x20\xbc\x3a\xd1\x62\xf0\xea\xf2\xec\xe3\xd5\x95\x5c\x88\xd7\xa2\x74\x08\x94\x1d\x2c\x73\x91\x94\x18\x61\x47\x21\xd3\xd1\x12\x0a\xe0\x63\xee\x64\x6a\x03\xea\x62\xfb\x21\xa6\xd9\x9f\x99\xe1\xaf\x5c\xf0\xaa\xe7\x42\xf4\x9a\xf2\x0c\x32\x26\xb8\x50\x3c\x65\xd8\x15\xc8\x52\x8e\xce\xd6\xdb\xa9\x40\xda\x08\x76\x37\xc4\x73\x98\xd3\x62\x78\xc5\xe6\x1d\x6d\x77\x67\x98\xb8\x38\x51\x84\x44\x4e\x8b\xbd\x47\xc7\x64\x92\xce\x79\xd2\xe1\x6b\x4c\x52\xc1\x9b\x63\x2b\x1a\xb9\xbc\x99\x3a\x67\x27\x91\x79\x51\x69\x16\x88\x50\x56\xd8\xd9\x5a\xae\x88\x4a\x35\x3e\xc9\xa9\xa0\x53\x36\xf4\xc3\x0e\x6b\x76\xb1\x73\xeb\xf0\xf0\xea\x98\x0c\x76\x5b\x53\x30\xbc\x1e\x5d\x3a\x4d\x7c\x75\x96\xd0\x4b\x6e\x25\xa9\x97\x74\x9f\xd8\x4b\x6e\x3f\xb9\x97\xf8\x62\x0b\xdd\x9f\xfb\x0b\x57\xfc\xa1\x71\xf2\xad\xaa\xb4\xee\xe4\x47\x55\x86\xfd\x38\x5c\x11\x99\x73\xad\x99\x0b\xaa\xf6\x27\x19\x82\x60\xc2\xe4\x77\x4b\x73\xc0\x7b\x85\x91\xd3\xec\xb3\x6f\xaf\x1a\x28\xf4\x60\x6d\xbb\xe1\x0a\x55\x70\x41\x78\x5e\x60\xb3\x07\xa0\x1d\x43\x27\x29\x5b\xef\x90\x9f\x49\x02\xd1\x9b\x84\x7d\x06\x1f\x19\x7e\xac\x27\x53\x3d\x99\xea\xc9\xd4\x6d\x90\x29\xac\x09\xb0\x7f\x89\x8d\x88\x3c\xb9\x41\x6d\x11\x4a\x3a\x66\x19\xf9\xb9\x62\xe5\x9c\xc8\x6b\x16\x64\x66\x41\xa3\x5a\x23\xc8\x62\x6e\x93\xf5\x94\xef\x2b\xc9\x3e\x50\xb3\x04\xe8\x0b\x2f\x3f\x17\x25\xc3\xda\x61\x9d\x33\x85\xe6\x07\xe2\x12\xa0\xb8\x0b\x7e\x67\x42\x83\x16\x86\x55\x47\x26\x2e\x5a\x32\x72\xf2\xf6\xb4\x4b\xcb\xe3\x43\x57\xfa\x4f\xd6\x80\x08\x41\xe9\x7f\x01\xbe\xe7\x23\xa3\xbd\x73\x99\x5c\xb1\xf9\xc0\x26\x20\xd8\x2e\xe5\xee\x61\xcc\xe5\x89\x5b\x25\xee\x57\x62\x3b\xbe\x1e\x81\xbd\x60\xbf\xd6\x78\xf1\x58\x0e\xb8\x0f\xd4\xfe\xb0\x77\x0b\xbd\xf0\x5a\xd5\x4e\x0f\xb1\x15\xba\x6f\xb9\x3a\x03\x1e\x41\xa1\xb6\x02\x50\xd8\x07\x6b\x16\x20\xd0\xe5\x09\xb7\xf1\x96\x80\xe5\x8f\x60\x94\xc9\x7e\xc5\xe6\x87\xca\x56\xa1\x93\x42\xcd\x78\xe1\xfa\xab\x03\x9d\xb4\xa7\x92\xfc\x00\x29\x23\x6e\x08\xa4\x88\x67\x62\x40\xde\x4a\x6d\xfe\x79\x09\x39\x70\x70\x8e\x4f\x25\x53\x6f\xa5\x86\x3b\x0f\x1a\xdc\xb8\xb4\x5b\x02\xb6\x0d\xcb\xb1\x66\x6b\xc8\xf6\x84\xaa\x2f\x2e\x33\x0a\x80\x6a\x83\xc5\xfd\xc6\x70\x45\xce\x04\x91\xa5\x83\xaa\x76\x2d\x63\x95\x1d\xc2\x39\xf6\x83\x60\xab\x25\x63\xd8\xcd\x90\x65\xb4\x17\x6b\x86\xf3\xe1\x54\xdc\xfd\x02\xbe\x44\x08\x8d\xf3\xe9\x5c\xd0\xb6\x94\x6a\x36\xe5\x09\xc9\x59\x39\x85\x8a\x85\xc9\xac\xeb\x2d\xee\x8a\x2f\xe2\xd5\x21\x77\xc4\xab\x53\x3c\x04\x11\xe5\x35\x24\xea\xdd\x8e\xf8\x83\x63\x23\xbb\xce\x69\x61\x50\xf0\x9f\x86\x2b\x03\x16\xfc\x0b\xda\x22\xab\x11\x39\x21\x8a\x8b\x69\xc6\xa2\xdf\xac\x0b\x2e\x1c\xc6\x8c\x60\xd4\xdb\x9f\x2b\x7e\x4d\x33\x86\x89\xb5\x54\xf8\xa6\x85\x72\xb2\x20\x74\x0d\x6c\x6f\x64\x43\x97\xbd\x51\xf7\xe0\x8a\xcd\x0f\x06\x0b\x68\x7b\x70\x26\x0e\xea\xe2\xa7\x11\xa2\x7a\xe1\x02\xfc\x31\x07\xf0\xdb\xc1\xdd\xc8\x69\x8f\x40\x8d\xed\x0c\x27\xad\x97\xf4\x45\x46\xd1\x2f\xdf\xad\x47\xbb\x39\xfa\xb2\x96\x6c\x97\xc1\x33\x75\x34\x83\x4d\xda\xee\xdc\xf5\x0b\x45\x43\xba\x4a\xa1\xeb\x00\xfe\x38\xaf\x7d\x1a\x81\xb8\x6b\x49\x13\x1d\x28\x5f\xec\x8a\xca\x44\xb5\xc8\xea\x88\xf1\x15\x10\xff\x01\x9c\xf8\x72\x42\x5e\xd5\xad\xd6\xc0\x5d\x6a\xc4\x2a\x5b\x66\x46\x48\x4d\xb8\x48\xb2\xca\xfa\xef\xe1\x55\x74\xfa\x3e\x2c\xf0\x76\x8e\xd8\xf5\xb0\x0e\xa3\x5d\x8c\xfb\x42\xed\x80\x66\xc4\x2f\x04\x80\xfb\x18\x57\x84\xf6\x7d\x42\x6b\xb2\x53\x96\x74\xdc\x22\x30\x89\xe5\xcb\x57\x7c\x5c\x32\xf2\x62\x46\x85\x60\x59\x50\x7f\xd1\xda\x4a\xa9\xd6\x34\x99\x61\x98\x09\x25\xe6\x1c\x67\x4c\x1f\x2a\x32\x93\xe0\x53\x4c\x66\x5c\xf8\x8a\x64\xc2\xd7\x21\xad\x4b\x31\xdc\x43\x53\xcd\x7d\x15\xa4\x0e\xfb\x31\x1e\xda\x86\x8c\x16\xef\xc2\x4e\x88\x71\x9f\xc6\xba\xb5\x4f\xf3\x99\xba\xc7\x95\x3d\xf3\x00\x79\xe4\xcb\xd0\x34\x10\x9e\x5d\xdf\xe9\x31\xf7\xf6\x6e\x2e\x26\xac\x2c\x71\x87\xc6\xcc\xbe\x40\xf8\x84\x54\x22\x08\x1e\xc7\xf6\x6f\x33\x79\x43\x52\x49\x6e\x18\x44\x0b\x19\x01\x02\xc2\xcf\x95\x13\x3d\x82\x99\x42\xa6\x4a\x22\xf3\xa2\x94\x39\xf7\xe1\xdb\x16\x3d\xee\xad\xd4\x60\x56\xed\xdc\xad\x21\xde\xc5\xac\x12\x71\x9b\xf4\x57\x2f\x88\xa6\xe5\x94\x69\xf3\x0d\x22\xaa\x7c\xcc\xf6\xac\xa8\x78\xdf\xfd\x7c\x3a\xed\x9f\x77\xe8\x1b\xe8\x45\x50\xdb\xd0\x19\x8f\x5c\xb8\xb7\x20\xd0\x00\xb2\x60\x26\xb2\x4c\x5c\x58\xa3\xeb\xc9\x87\x0d\x9c\x0c\x16\xfe\x60\x19\x67\x25\xb4\xda\xb3\x9f\xd2\x3e\x9d\xf5\x10\x15\x7e\xfc\xf1\x6d\x37\x0d\x91\x0e\xeb\xf1\x56\x61\xdd\x8d\x2c\xb3\xf4\x86\xa7\x2e\xa8\xeb\xc8\x3c\x7c\xbc\x1f\x04\xee\xb1\x3f\xd2\xde\x27\xfd\xe6\x86\xa7\x1d\x01\x1f\x86\x8a\x81\xee\x52\xfa\x0c\xd0\x09\x40\x9d\xa7\x4c\x68\x43\x2c\x4b\x45\x8e\xe0\x8d\x63\xf2\x92\x63\xf1\x2a\x78\x1f\x42\xd1\xf2\x31\x17\x75\x61\xb4\x7a\x53\x0d\xbb\x34\x74\xc3\xa9\xf7\x8a\x69\x2c\x3b\x04\x59\xe6\x52\xcf\x88\xe2\x79\x95\x69\x2a\x98\xac\x54\x36\xdf\x13\xb5\x1f\xeb\xc6\x4e\x32\xf6\x19\x4f\xf8\xfe\x42\x8f\x1f\x2a\x16\x7e\x20\xb9\xaa\xae\x35\xb8\x20\xfd\xd4\xb9\x89\xe9\x13\x2f\x09\xf9\xda\x59\xec\x33\x4b\x6c\x59\x85\x22\xab\xa6\x7c\xa7\x3a\x3a\x7d\x07\xf1\x9d\xde\x6e\xd7\x41\xbc\x6e\x94\x5c\x29\x56\xd7\xfc\xb5\x45\xee\xee\x4b\x2e\xe9\xbe\xe1\xf7\xfd\xca\x97\xef\x97\x37\xfb\x4e\x59\xc1\x44\x0a\x4d\x87\x5e\xd5\xe7\x0f\x27\x7f\x6f\xb0\xb7\xcd\x7e\xba\xe1\x15\xae\x73\x50\xc4\xa5\x83\x00\xc9\x99\xcc\x52\x45\xd8\x67\x5d\x52\xc3\x0e\x72\x43\xf8\xfd\x3b\x13\x42\xc5\xbe\xa4\xfd\x4b\x69\x59\x4b\xee\x48\x02\x4d\xbf\x50\x09\x54\x75\xda\xcb\xfe\x50\x85\x1d\xec\x6b\xe8\x45\xb7\x3b\x6e\x6b\x8f\x0c\xd4\x52\x07\x15\x97\x44\x58\xd2\x7e\xbe\x4e\xa9\x5a\xac\xed\xb3\x63\x1b\x7a\xb5\xa4\x29\x75\x63\x56\xf7\x78\x58\xfb\x9e\xf4\x8f\xab\x27\xfd\x04\x2a\xa4\xee\xdf\x36\xc4\x8e\xd3\xb0\xd9\xd9\x9b\x56\x6c\x6d\x63\xa3\xb3\x27\x2a\xe0\xc9\x66\xdf\xdc\x40\xb6\xd2\x18\x51\x66\x37\xea\xb4\xc8\x4a\x88\xdd\xa8\xf9\x7d\x77\xec\xa6\x9a\x2a\xa6\xf7\xb1\x24\xc7\x02\x66\x3d\x9e\x21\x39\x21\xe6\xdb\x9f\xb0\xef\x3d\x54\x1e\x71\x55\x43\xc9\xf0\xaf\x56\x16\x15\xd1\x93\x46\x0a\x75\x70\x77\x6d\x45\x98\x8f\x2c\xc3\x31\x52\xb3\xdb\x09\xd5\x3b\x67\xec\xee\xcd\x8d\xed\x6c\xbf\xff\xfe\xec\xb4\x4b\x10\x9a\xf1\x9c\xb4\x0a\xff\x8f\xc1\x38\xf2\xc9\x64\x95\xe0\x3f\x57\xa1\xa2\x0d\xd5\xce\x3d\xe0\xec\xf3\xf7\x01\x9d\x69\xc2\x6a\x37\xc1\x29\x57\x57\xfb\xb7\x06\x5a\x18\x32\x3e\xee\xdf\xbe\x78\x49\xec\xdd\x56\xd6\xf9\x6d\xcc\xf3\xfb\x36\xf6\x98\x26\xac\x76\xdc\xa5\x5c\x5d\xdd\x43\x5b\xa1\x7d\x75\xe0\x22\x7d\xbb\x5b\x4a\xce\xc3\xf4\x34\x34\x35\x3c\xd7\x79\x20\x68\x89\x31\x97\x15\xb9\xb1\x95\xb7\xad\x86\xf8\x9e\x17\xcf\xc9\x4b\xa1\xaa\x92\xd5\x11\x5a\xcd\xa1\x8c\xbc\xd5\x5a\x5f\x84\xe2\xe6\xea\x79\x67\x5e\x89\xae\x31\xf5\x4b\x71\x73\x14\xb4\xd4\xa0\xc8\x75\x83\x48\x7e\x38\x47\xa7\x83\x1b\xa2\x0d\x26\x9d\x4d\x5c\x6e\xc6\xc0\x96\xe1\xf5\x2d\x87\xdc\x43\x06\x77\x82\xba\xfc\x21\xb6\xbc\xf2\xbd\x30\xc8\x93\x94\x5d\x3f\x51\x29\x7d\x36\x80\xcf\xb8\x2c\xf7\x78\x4e\x54\x91\x83\x67\x07\x23\x72\xc9\x73\x9e\xd1\x32\x9b\x47\xad\x81\xeb\xe7\x0c\xdb\x75\x03\x42\x34\xcb\xd3\x03\x72\x24\x4b\x18\x39\xa1\x82\x64\xcc\x15\x01\xb3\xa7\x7a\x8e\x7a\xc7\xf1\xc3\x20\x91\xe4\xc1\x78\x8a\x90\x5a\x76\x84\x6b\xa9\x93\xa9\x2c\xbf\x8f\xfa\x3c\x9c\xd6\x0c\x8f\x0b\xc3\x05\x47\xe4\x7b\xcb\xbe\xac\x5c\x80\xc8\x00\x87\xd9\x3d\xf1\xb0\x36\xeb\xe1\xd9\x43\x76\xb2\x6c\x2c\xba\xee\x1e\x1a\xa0\x77\xb5\x9e\x4c\xb9\xbe\x60\x85\xec\x40\x86\xc3\x81\x1a\xfe\x05\xae\xcd\x0d\xa9\x38\x34\x76\xa4\x9a\x50\x24\x49\x49\x95\x51\xa3\xd4\xa1\x77\x61\x44\x4e\x5f\x9e\x5f\xbc\x7c\x71\xf2\xfe\xe5\xe9\x73\xf2\xad\x1d\x89\x87\x7a\xc0\x88\xbc\x0f\x5b\xb5\x04\x09\x6f\xb6\x1f\x86\xff\xd6\xc0\x92\x58\x2a\xea\x96\x73\x50\xba\x9e\x0a\x72\x26\xb8\xae\x9b\xed\x62\x5e\x40\x26\x85\x8d\xf4\x37\x6f\x5b\xef\xc6\x94\x6b\x5b\x0c\x19\x07\x33\x3f\xc7\xa3\xd9\xac\x70\x23\x6c\xd6\x49\xdd\x8f\x50\xf8\xab\xb7\xe7\x3e\x14\x55\xd7\x45\xb2\x1b\x1d\xcb\x77\x10\x75\x15\xb2\xd0\x5b\x5c\xdf\x47\x66\xeb\x1b\xa6\xbb\x5e\x14\xb2\x8c\xfa\x99\x8f\x46\x87\x23\x62\xd8\xf8\xe1\xe8\xd0\x89\x7c\xd9\x42\xd3\x7d\x3f\x68\xd8\xf2\x27\x46\xf8\x11\x21\xef\x5c\x56\x25\xd4\x41\x5d\xde\xbf\x1f\x4b\x96\x07\xdd\xda\x1b\xc7\xc6\x55\x9b\xa9\xc6\xe1\x47\x6d\x8f\xa0\x29\xbf\xb6\xd5\x2c\xef\xcd\xa7\x50\x4f\xb5\x93\x6d\x0c\x57\x6e\x35\xe5\x8b\xd7\xf7\xb7\x36\xa4\x38\x1d\xad\xcc\x92\x2f\xbb\xae\x44\xe6\x39\x36\xb5\x99\xf9\x3a\x7b\x75\xa9\x3c\x4f\x1d\xef\x45\xcb\xc7\x56\x3e\x93\x9d\x0e\x76\x83\x33\xb8\xa1\x1a\x5a\xbd\xbf\x6d\xb3\x9f\x45\xad\x4e\x6d\xdf\x01\xd8\xf6\x92\x52\xae\x04\x99\x65\xb3\x4f\xfc\xc7\x9f\x5c\xbc\x3c\x39\x7d\xf3\x72\x94\xa7\x8f\x90\x48\x33\x91\x16\x92\x0b\xad\x76\xd5\xf0\xa9\x9e\xdd\x03\x79\xf7\xd3\xee\x46\x86\xf3\xc3\xb9\xf3\xe3\x6e\x04\x8d\xc1\x6c\x71\xb7\x00\xbb\xb4\x2c\x64\x26\xa7\xcb\x5b\x07\x6f\x81\x36\xff\x86\x4d\x25\x86\x74\x68\xf0\xf1\xfe\x94\x5d\x3d\xeb\x4a\xcf\xd5\x33\x07\xc8\x1a\x5a\x5e\x6f\xd4\xb3\x2f\x03\x60\x77\xa8\x46\x2c\x40\x11\xcd\x39\x40\xde\x5c\xdf\xb6\xba\x11\x5a\xc1\xca\x9c\x63\x16\x4a\x5b\xfd\xe2\x7e\x80\xbf\xab\x6a\x61\x28\xf9\xf9\x8e\xe8\x1a\x43\xdd\x8d\x14\x33\x90\xa2\x64\x43\xdf\x69\x66\xc2\x33\x06\x55\xd5\xbd\x84\x14\xf2\x13\x67\x09\x76\x76\x63\x7c\x2a\x9b\x37\x2d\xc2\x41\x61\x37\x67\x88\xc7\xfa\xd3\x59\x36\xaf\xbb\x09\x5a\x6b\x18\x9d\x62\x07\x99\xd2\x3a\xe4\x8a\x92\x5f\xf3\x8c\x4d\xa1\x53\x28\x17\xd3\xa0\xf2\x60\x58\xab\xd0\x96\xa9\x8c\x9d\x53\x6f\xcc\x5f\x41\xd3\x6a\xc0\xac\xb7\xef\xde\x43\xd3\x59\x08\xa9\xd8\x5b\xe1\x34\x1f\x84\x33\x3f\x1c\x0e\xc1\xf4\x77\xf4\x77\xa3\xf9\xa4\xd9\x31\xf9\x91\xd9\xef\x48\xe8\x8a\x5b\xf2\x44\x93\x9b\x99\xf4\x2d\x4a\x61\xae\x35\x64\x01\xa1\x31\x8c\xcf\x3e\xf5\xc4\x3c\x69\x24\x6a\x64\xe5\xd1\xf3\x9c\x41\xdf\xaf\x3a\xce\xe0\x31\x6a\x49\xf7\xc4\x40\x3b\xa6\xf6\xce\xd9\xb4\xec\x8c\xf8\xf0\x01\xc7\x17\x28\x51\xf3\x3c\xe3\xe2\xaa\x6e\xab\x34\x91\xb6\x32\x2b\x23\xe6\x07\x77\x6a\x4a\x46\xb3\xd5\x1c\x63\x17\x1c\xbd\x37\x6e\xa1\x3b\xf3\x47\x80\xbf\xc0\x50\x8b\xff\xeb\x88\x97\x0d\x00\x0b\x49\xfd\xc1\xc1\xa3\x86\x18\x57\x89\xe2\xfb\x93\x77\x18\x26\xa2\xed\x82\x9c\x5d\xbe\xb8\x3c\xbb\x53\xaf\xdf\x2a\xe6\x0a\xb3\x7b\xd4\xda\x03\xff\x79\xb7\xa8\xaa\x21\xc9\xaa\x5d\xdf\x44\xd3\xcb\xb9\x2c\x35\xcd\xee\x81\x70\x26\x33\x5a\x9c\x54\x7a\x76\xca\x15\x14\x18\xee\x46\xfc\x5b\x18\x35\xc8\x57\xc4\xd6\xcd\xae\x47\x1d\x77\xe8\x6b\x9f\x7b\xf1\x7f\x4f\xce\x09\xad\x0c\x3e\x6a\xdb\x95\xf3\xde\x82\xe5\xdc\x2a\x2e\x31\x07\xba\x53\xc8\xd8\x31\x37\xc0\xc5\x3d\xf5\x90\xa0\x72\x77\x59\x6f\xbd\x3f\x1a\x38\x17\x52\xfd\x2f\xc4\x07\xcd\x05\xd7\x9c\x6a\x59\x76\xe6\x1b\x8c\x46\xf4\x06\xc3\x4a\x69\x99\xdb\x53\x74\xe6\x9e\x80\x80\x2c\x90\xdf\x16\x5e\xaa\xad\x89\xa0\x7d\x02\xcc\xcf\x84\xd1\x15\x69\xc2\x1a\x69\x36\x03\xe8\x96\x89\x63\x73\xff\xcc\x5f\xac\x11\x1d\x3a\x17\x65\x7f\x7d\x1e\xf5\x93\xaf\x5b\x53\xba\x26\xc0\xd6\x8a\x99\x48\x21\x58\xb2\x4f\x6f\xe5\xfd\xb7\xe4\xe7\x6e\x48\x1b\xff\x59\x34\xfc\x09\x08\xa2\xff\xaf\xa2\x19\x82\xf6\xed\x7d\x1a\xdf\xe3\x2d\xed\x66\xc5\x31\x96\xd8\xc5\xd7\x28\xf1\xd6\x5b\xdb\x2a\x85\x7d\x99\x10\x22\xba\xa4\x42\x19\x3c\x89\xed\x19\x87\x36\x00\xe2\x90\x1c\xe9\xa4\x38\xbe\x37\x48\x75\x95\x0e\x9b\x55\x22\x14\x56\x71\xed\xef\x11\x35\x5e\xfb\x74\xd8\xfd\x96\x79\xef\x41\x0e\x70\xda\xbb\xb1\xdb\xda\xb1\x3c\x1e\x85\xf0\x42\x01\x91\xbc\xe6\x4a\x63\x1e\x0d\x3e\x0c\x65\x5c\x30\x9f\xd0\xe8\x02\xe7\x44\x96\x84\x17\xff\x4b\xd3\xb4\x7c\x8e\x72\x84\xd5\x55\xe1\xff\xca\x77\x0a\xa2\xc2\x47\xdb\x1c\xe9\x79\x61\x7b\xc4\xbd\x7f\x71\x0e\x4f\x2a\xf2\x1f\x7f\x7c\x0a\x7a\xc1\xef\xbf\xfe\xe3\xd3\x3d\x11\xf1\xb1\x66\x15\x92\xae\x6d\xa2\x9d\x47\x56\x7c\x21\x59\x24\x51\xb6\x08\xb4\x93\x31\xd2\xee\x25\x26\x67\x18\x3e\x69\x89\x26\x1e\x04\x83\x95\x9e\x7b\x77\x29\x13\xf7\x59\x17\xbf\xa2\xac\x0b\xe2\xb3\xf1\x91\xb0\x76\x82\xc8\xe1\x80\x50\x56\x67\x91\x80\x23\xed\x3e\x7f\x2c\xb4\x7b\x47\xe8\xee\x8a\xc9\x31\x06\x87\x21\x7e\x36\x11\x37\x48\x4f\x3d\x7d\x7b\xf9\xbf\xaf\x4f\xfe\xf6\xf2\x35\xac\xd5\x46\x05\x1a\xf4\xb4\x9a\xd0\x2e\x31\xeb\xed\xd1\x7d\x77\xe3\xd6\xae\x20\xed\x22\xc0\x40\x34\x42\x0b\x04\x79\xfb\xea\x72\xdb\xa8\x82\x7d\xd5\x59\x31\xd9\x03\x7a\x8f\xcd\xaf\x61\x5e\x85\x7e\xad\xf7\x91\x39\xdf\xb1\x53\x24\xa8\x8a\x1f\xd9\x51\x0c\x0e\xe1\x1a\xf7\x36\x75\xec\x88\x1b\xe4\xc1\xc9\x7a\xeb\xfd\xdf\x06\x62\x08\xc5\xce\x3d\xdf\x77\x0a\xed\xfd\x64\xc8\xb2\xab\xb2\x0e\x87\x38\x96\x13\x1f\x0d\x09\x43\xde\x51\x1a\xae\x6a\xf8\x29\x53\xbe\x41\xd1\x17\x80\xad\xc5\xb2\x76\xd3\xfb\x73\x87\xa5\xc3\xe2\x7f\x2f\x5d\xb7\xc0\x20\xaa\x20\xca\xeb\x5e\xd5\x51\xde\x45\x64\xd2\x3c\x68\xac\xd9\x65\xe5\xc7\xfa\x16\xde\xc1\x26\x79\x8f\x90\xc1\xc0\xc4\xef\x29\xbd\xcc\x7f\xbb\x9b\xe3\xe8\x87\x6b\x56\x5a\xd9\x0a\x4b\x08\x55\x4e\x90\xb3\xb1\xe6\x61\x49\x96\x07\x89\x42\xe4\xc1\xf1\x21\xcf\x86\x7e\xdc\xd1\xdc\x70\x9f\xa6\x86\x62\x26\xb5\x14\x1d\xe7\xd0\x2e\x1b\x34\x26\x6c\xe7\xf0\xc4\x0b\xcc\x74\xcf\x58\x19\xd0\x5b\xcc\x20\xf2\x6e\x75\xa3\x79\x38\xd6\x2d\x85\x73\xb0\xc7\xee\xf5\xc7\x47\x89\x8a\xf4\xec\xf4\x1e\x88\xd0\x97\x56\xec\x68\x5b\x37\xe1\xbd\x05\xca\xa6\x1d\x65\xee\x9b\x81\x1c\xcc\xcf\x4e\xad\xba\xe0\xd2\xf2\x95\x3d\x56\x64\xf5\xb9\xba\x17\x51\x4a\x96\xfa\x46\x96\x5d\x95\x8f\x8b\x87\x6b\x44\x61\xda\xdf\x16\x8a\x71\x7c\x99\x54\x04\x57\xf9\xe8\x29\xc9\x25\x50\x92\x46\xe7\xee\x55\x14\xe5\x36\x08\xca\xe3\x21\x24\xb7\x23\xb8\xdc\x6e\x25\xae\x7b\x53\x7f\xdd\xf1\xe8\x04\x58\x6e\x30\x6b\x06\x35\x88\x52\xd3\x5d\x0a\xe6\xe6\x80\xf2\xdc\x0b\x9d\x2d\xa5\xa1\x43\xbb\x91\x93\x98\xc4\xba\x91\xd0\x39\x88\x5d\x1d\xb3\xcc\xec\xac\x14\x61\x3f\x48\x5b\xac\x6b\x40\xb0\x67\x62\x4e\x0b\x85\x4d\x29\x52\x79\x23\x6e\x68\x99\x92\x93\xf3\xb3\xbb\xa7\xab\x7b\x67\x82\xe2\x79\xd8\xa7\xb7\x40\x9c\x0b\x5a\x8f\x07\x11\xf8\x10\x24\x64\xfe\x18\x73\x8d\x6d\x9b\x31\x18\x5f\x87\xd6\x28\xc3\xa7\x7c\x24\x8b\xa1\x74\x86\xaa\xd9\x91\x02\xb1\x4a\x10\x99\x68\x9a\x61\x0b\x10\x32\x66\xfa\x86\x31\x41\x9e\x3e\x7d\x8a\x0e\x8a\xa7\x7f\xfa\xd3\x9f\x08\x34\xe5\x4c\x59\xc2\xf3\xc5\x07\xe1\xa9\x7f\x7f\xf6\x6c\x44\xfe\xfb\xe4\xcd\x6b\x42\x13\xd0\xe5\xb0\xf2\x2d\x8e\x0c\xfb\x19\xbe\xac\x06\xe4\xbf\x2e\xdf\xbd\xad\x1b\xca\xc7\xbf\x02\xba\xf8\xe5\x8d\xc8\x69\x10\x7b\x1f\x3a\x0f\xa8\x9e\x01\x34\x84\xd4\x84\x4e\x26\x88\x70\xae\xab\xbd\x25\x26\xae\xf6\x1c\x9f\xce\x60\xb9\x5c\x00\xaa\x65\x90\x14\xc0\xcd\x14\xc1\x61\xe3\xea\x38\x62\x8e\x03\x8c\xe5\x99\x08\x4c\x65\x40\x32\x7e\xc5\xc8\x44\x7d\x5b\xca\xaa\xa8\x1b\xa7\x94\x4c\x19\x05\x2c\xa1\xc2\x8c\x8e\x83\xd5\x3b\xa3\xd8\x9e\xb5\x31\xef\x3b\x72\xc2\x9e\xd3\x6e\x5c\xc8\xf6\xcc\xbb\x16\x62\xb6\x37\xa0\xcb\xd1\x42\x92\x61\x76\xe1\xb1\x46\x32\x44\xab\x3d\xf7\xeb\x41\xa4\xb2\xd5\x0f\x6b\xca\x48\x33\x29\xa6\x21\x0e\xd6\xd2\x87\x0b\xa6\x9c\x17\x6c\x57\x60\x74\xd4\x50\xa7\x9b\xf6\x74\x48\xdc\xdf\xd0\x62\xbf\x4e\x20\x71\x8c\xae\x1b\x33\xaa\x43\x49\xc7\xb2\xd2\x2e\x66\xcf\xfe\x0e\xe5\xdb\xb4\x74\xa0\xdf\x6b\x0a\x9d\x75\x29\xea\xae\xef\x5f\x47\x4d\xb7\xe2\x98\x39\xe0\xda\xb1\xc8\x3a\x20\x8c\x26\x33\x72\xc5\xe6\x43\xe4\x00\x05\x85\xea\x11\x00\xed\x53\x03\x63\x2c\x93\x1b\x87\x33\x24\x2c\x35\xda\xa4\xdd\x0a\x17\x60\x19\xc8\x07\xae\xfa\x84\x53\xb8\x94\x95\xcb\x6d\x2b\x2b\x11\x58\x28\x5d\xef\xca\x44\x0a\x6d\xfb\x62\xfa\xde\x55\x10\x30\xda\x28\x48\x60\x28\x0c\x4b\xcd\x6b\x6a\xdd\x97\xeb\xa8\x52\xc3\x51\xac\xfc\x51\x89\x85\xb7\xa1\x9e\x3b\xc4\xf4\x2a\x66\x2b\x23\x51\xd7\x13\x31\x88\x4c\x9d\xf1\x04\x32\x8e\xcc\xe3\xf6\x59\x07\x25\x0f\x88\xa8\x60\x82\x62\xba\xb2\xa0\x81\x38\x61\xf3\x6d\xa6\x14\xe1\xb0\xc2\x9c\x96\x57\xcc\x15\x1a\xa6\xd9\x88\x9c\x9b\x49\xfa\x6a\xf3\xd8\x4a\xf0\x1a\x13\x44\x0c\x8d\x09\x2b\x41\x98\x8f\x1c\x8e\x46\x87\xc8\x2a\x97\xd4\x85\xd8\x1b\x6b\xba\xec\x22\xd7\x59\xf7\xb8\x08\x95\xdf\xd0\x42\x61\x37\x3d\xa3\x5a\x40\xc7\x4a\x09\x75\x5b\xf4\xcc\x09\x13\x74\xcf\x12\xe2\xe1\xd5\x71\x1b\xb3\x6e\x3b\xa1\x76\xd7\x07\x75\x0f\x5f\x7b\x7c\x75\xdd\xff\xb4\xc3\xee\xa7\xab\x7a\x9f\x5a\x1c\xb2\x94\xa4\xab\x8e\x8c\x9d\xb7\xdc\xcc\x3b\x68\x6c\xe6\xae\xd8\x75\x04\xf2\x6d\x54\x4b\xba\x95\x2e\x62\x4b\xa9\x67\xec\x51\x29\x1f\x67\x13\x20\xa9\xcb\x6b\xdd\x84\x7a\x99\xe3\x30\x06\x02\xf7\xaf\x75\xec\xdb\x65\xcf\x5d\xb7\xd1\xa6\x7e\x7f\xb5\xa4\x79\xed\x13\x44\xd3\xbc\x62\x43\x46\x50\x56\xc2\xb3\xda\x30\xfb\x18\xb6\x4a\x4b\xe8\xd6\x59\x13\x87\x11\x79\x63\x59\x31\x22\x39\x1d\x2b\x99\x55\xda\x57\xa2\x58\xc2\xa7\x61\x50\xd7\xdb\x13\x8b\x36\xb9\xc7\x02\xae\x0d\xf2\x0a\xb2\xb2\x6e\x18\x38\x5e\x1d\x12\x9f\x7d\x03\x64\xf1\xfa\x95\x85\xc9\xe2\xd5\xe1\x2e\x38\x71\xb1\xe3\x9d\x70\xc3\xfa\xea\x9d\x2e\x23\x32\x92\x6e\x21\x46\x56\x2b\x14\x9d\x9d\xa0\x8a\x39\x94\xbb\x56\xc0\xae\xaf\xfd\xad\xba\x76\x5d\xd6\xc0\x78\x72\x7e\xd6\xa1\x56\x1a\x8c\xba\x42\x2f\x0d\x9f\xe8\x35\xd3\x36\x57\x04\xe0\x33\xd4\x4c\x8d\x48\xef\x0c\x48\xa7\x35\x44\xad\x4b\xcf\x10\xe5\x5f\x81\x6a\xb3\xb0\xf0\x57\x86\x19\x85\xc9\x5c\x71\x87\x0e\x34\x06\xd7\x6c\x2b\xe8\xea\xe1\x62\x78\x80\xc4\x7d\xf9\x6a\xd0\x03\x55\x5e\x00\xfa\x7b\x64\xec\x34\xaf\x98\x8b\x5e\x38\x20\x92\x4b\x96\x19\xa6\x47\x1a\x26\x9b\x42\xa6\xcf\xb1\xe7\x37\x15\x42\x6a\xc0\x1b\x35\x20\x19\xf4\x23\x1f\xa0\x29\xc6\x48\xa0\x41\xf4\x57\x19\x38\x4d\x3b\x96\x39\x3b\x43\x1e\xd2\x39\x02\x11\x40\x22\x80\xdd\x79\x37\x98\x44\x6e\x01\x9b\xcc\x55\x8b\x2a\x5d\xb6\xe5\x8f\xf0\xca\x8e\xef\x90\x48\x25\x33\x96\x53\xec\x47\xe2\x00\x64\xe8\xf5\x4d\xc9\xb5\x66\x58\x75\x9c\x95\xb9\x22\x72\x32\x88\xfc\xc6\x07\xd7\xcf\x0e\xba\x92\x67\xc9\x6d\x28\xd4\xc4\x9d\xd0\x5d\xcb\x80\xad\xba\x62\xbf\x41\xa4\x5c\x98\xd3\x09\xda\x74\x06\x0d\x92\x44\xc3\x60\x69\x84\x88\x6b\x84\xff\x83\x06\xdd\xed\xd9\x22\x76\xb5\x41\x0c\xbc\x60\xda\xdb\x20\x7a\x1b\x44\x17\x23\xde\x9a\x0d\x22\x60\xdc\x8e\x98\x2e\xb1\x47\x84\x89\x78\xce\x28\x51\x97\xb2\x08\xca\x44\x1b\x94\x77\xe6\x08\x59\xc6\xbe\x82\xc3\xd1\xe8\xf0\xd0\x19\x29\xec\xf9\xa8\xf4\x64\xf8\x1f\x84\x89\x44\xa6\x88\x54\x66\xfc\x52\x69\x10\x6a\x6b\xad\x3c\x9c\x4b\xee\xbe\x15\xfa\x1b\x60\xec\x6e\x51\xa2\x43\x0a\xe5\x42\x52\x5e\xdd\xaa\x08\x56\x0b\x5e\xbe\x0c\x98\x05\xa0\xaf\x96\x68\x25\xb0\x3a\x44\x26\xe3\x39\xb7\xf5\x09\x0d\xb9\x60\x4a\x2b\x72\x84\x37\x47\x49\x51\x0d\xec\x03\xa3\x9c\xe5\xb2\x9c\x0f\xfc\x43\xe6\xc7\xe8\x2d\xfb\xc4\x31\x48\x6d\x49\x55\x96\x4c\xe8\x6c\xfe\xeb\x95\xdf\x1c\x88\x1f\xb0\xf8\xe6\xb1\x62\x9f\xbc\x8f\x65\x57\x8c\x96\x75\x13\x01\xb0\xde\x79\x68\x03\x1f\xb2\x19\x18\x83\xda\xf8\x63\xee\x32\x71\x4d\xae\x69\xb9\x73\x06\xc6\xb2\xeb\x56\x24\xb6\x94\x5f\x73\x25\x77\xce\x61\x5b\x3a\x64\x08\xbc\x4b\xcb\x94\xd1\x46\x2c\x2b\x5d\x54\xda\x72\x17\x77\xb6\x5d\xc9\x3e\x7f\xa6\x1b\x82\xef\xb3\x83\x0e\x27\x57\x50\xad\x59\x29\x9e\x93\xff\x39\xfa\xf8\xbb\x5f\x86\xc7\xdf\x1c\x1d\x7d\x78\x3a\xfc\xf3\xa7\xdf\x1d\x7d\x1c\xc1\x7f\xbe\x3a\xfe\xe6\xf8\x17\xf7\xc7\xef\x8e\x8f\x8f\x8e\x3e\x7c\xf7\xe6\xdb\xf7\xe7\x2f\x3f\xf1\xe3\x5f\x3e\x88\x2a\xbf\xc2\xbf\x7e\x39\xfa\xc0\x5e\x7e\x6a\x39\xc8\xf1\xf1\x37\xbf\xed\x70\x11\x54\xcc\xdf\x75\x46\x82\xf1\x1a\xde\x8a\x18\x11\x8f\xdd\x31\xea\x12\xf2\x79\x58\x5b\xb4\x87\x5c\xe8\xa1\x2c\x87\xf8\x91\xe7\x44\x97\x55\x57\xa4\xab\x66\x7f\xb7\x47\x63\x6a\x21\xa6\xae\x80\xe9\x14\x9b\x07\x48\x44\x30\x30\xb5\x43\xcb\xb0\xed\x63\xbb\xdc\x28\x6c\x7f\xec\xed\xc1\x6d\xae\x5b\x8c\x54\xb2\xf5\x6c\x7e\xe5\x61\x4a\x97\xb6\x9b\x72\x1f\xa3\xb4\x70\xf5\x31\x4a\x8b\x57\x1f\xa3\xb4\xe5\xd5\xc7\x28\xb9\xab\x8f\x51\xea\xed\x83\xfb\x5f\xbf\x72\xfb\x60\x1f\xa3\xb4\xed\xd5\xc7\x28\xed\x7c\x3d\xa2\x18\x25\x14\xf2\x97\x45\x2a\x59\x31\xbf\x0e\x53\x7a\xb0\x51\x4a\xca\xe0\x43\xc2\x4e\x92\x44\x56\x42\xbf\x97\x57\x6c\x4f\x47\x6e\x43\x27\x5d\x18\x1d\x4a\x22\xae\xd0\x51\x17\x1f\x7e\x90\x0a\x6b\x57\xf2\x68\x07\xf2\x63\x77\x92\x23\xad\x52\x6e\x74\xd4\x8e\x0f\x8b\x1b\x36\x2c\x8b\x2d\x52\x96\xd6\x3f\x58\x92\xa6\xcd\x7e\x8f\xc8\x09\x29\x59\xc2\x0b\x6e\x18\x00\xd4\x0a\x82\xfb\x78\x7c\x7c\x17\x67\xae\x15\xcb\x26\xb6\x93\xad\xa8\xd3\x9c\xcb\x40\xff\xb4\x1c\x65\xe9\x67\x50\x86\x90\xae\xd7\x28\x51\x33\x59\x65\x29\x29\xd9\xdf\x9d\xf0\x61\x67\xf3\x3e\x1c\x21\x34\xa9\xc2\x52\xea\xcf\xda\xc1\x69\xc1\x6d\x51\xb1\x87\x44\x06\xd9\xe7\x82\x97\x70\xd8\x2e\x59\x22\x45\xda\xb5\x85\x64\x61\xfc\x5a\x56\x00\xbf\x10\x4b\x49\x5a\xe1\x03\x90\x8e\x49\x33\x9e\x72\x3d\xf7\xf1\x1c\x78\xec\x8d\xd8\x8a\xbd\x83\x2d\x22\xa8\x7a\x23\x08\x2d\x8a\x52\xd2\x64\xc6\x54\xf0\x35\x14\x42\x6d\xa1\x0c\x9f\xe5\x99\x55\x53\x2e\x50\x0e\x85\x77\x8c\xb0\x92\xcd\x49\x29\xb5\x0b\x4d\x5b\xf1\xc1\xf7\xc1\x60\xf0\x3a\x4a\x1c\xba\x9c\x43\xfc\x9a\x0c\x87\xc0\x59\xf1\x49\xf8\x87\x22\x32\x4b\x5d\x69\xd6\xff\x78\x6a\x04\xff\xc4\x62\xb1\x61\x02\x50\x34\x53\x4b\x92\x19\xe1\xc9\x30\x86\xd5\x2f\x7f\xfd\x07\x32\x93\x55\xa9\x46\x61\xb1\xbf\x67\x70\x0f\x2d\x1c\x4e\x71\xd0\x24\x63\x54\x69\xf2\xec\x29\xc9\xb9\xa8\x0c\xc7\xef\x08\xf1\xba\x92\x75\x03\x29\xf7\x8f\x7f\xd8\x73\xb4\x6e\xe4\xdb\x95\x92\x6d\x81\x1d\xf3\xac\x78\x6b\xcf\x38\x16\xf4\xc0\xae\x99\x0d\x61\xd7\xb2\xa4\x70\x17\x85\x96\xf7\x7c\xf2\x7f\xae\xe4\x78\xae\xf7\x2f\x61\x63\xc7\x89\x6b\xd7\xfc\x7f\xf6\x66\x9b\x52\xb1\x75\xa5\xd8\x1d\xa6\x72\xef\x3d\xbe\xa7\x5c\xe9\x9d\x3a\x7c\xd7\x35\x6f\x76\x78\x79\x5f\x66\x3e\x35\xfa\x71\x27\x99\xf4\x30\x92\xd3\xe8\x9c\x45\x3a\x49\x98\x02\x52\xe4\x8a\xc2\x81\x71\x17\x9f\xdd\xf1\xa3\x0f\xb4\xda\xcc\xb2\x22\x32\x0e\xf9\x3b\xe8\x55\xba\x17\xb0\xf6\x11\xf9\x1d\x62\x77\x04\x2d\x1c\x2c\xa6\x11\x8a\x8b\x29\xb6\x16\xcd\xab\x4c\xf3\x22\xab\x21\x77\xe1\x5e\xb0\x0c\x38\xf4\x16\xd0\xc0\x3c\x4d\xb1\xe8\x15\x56\x3f\x07\xcf\xca\x91\x1f\x8b\x09\x8d\x1d\x32\x4b\xc3\xc7\x0b\x5a\x52\x0f\xfe\x44\xe6\x39\x55\xc7\xd6\xf1\x40\x21\x0a\xc6\xb6\x01\x32\x6f\xd1\xac\x9e\x71\x10\x75\x70\x5f\x88\xab\x99\xa0\x62\x67\xf7\x5f\x5c\x70\x1e\x86\x22\xf2\xc6\x07\xda\x63\x93\xfb\x06\xc6\x5a\x81\xf8\x6f\x34\xb9\x62\x22\x25\xdf\x2b\x07\xb8\x74\x2e\x68\x6e\xeb\xc7\x17\xa5\xc4\x2e\xea\x2c\x6d\xbc\xaf\x06\xd6\xec\x88\xa5\x4f\x5c\x01\x2b\x94\xb7\xee\x0b\x8a\x95\xea\xa8\x78\xb0\x19\x68\x13\xbd\x53\x68\xd2\x2d\xf9\x75\xc2\x9c\xec\x68\xde\xbb\xaf\xc5\x5f\xef\x5c\xad\x8e\x2c\x2f\x1d\x65\xdb\x98\xe2\x29\x04\x96\xee\x3d\x97\x50\x26\x9e\x66\x86\xc4\xcd\x7d\xcd\x9f\x06\x82\x8d\xe7\x60\xf7\xba\x97\xca\x63\xe5\x78\xff\x9a\x52\x87\xe5\x38\x8d\x89\xd9\x05\x4d\xa5\x22\x7f\xcb\x64\x72\x45\x4e\x19\x28\x0d\xb7\xd9\x7c\xbf\x1c\xa7\x8f\xbb\x71\x66\x4e\xa7\xbb\x45\x8c\x0c\x49\x2e\x05\xd7\xb2\xdc\x85\x1e\x3f\xa0\x42\x81\x7d\x2b\xc3\x36\x15\xd3\xcd\x39\xfb\x52\x1a\x19\x1a\x94\xef\x06\x75\x60\x28\x6f\x3a\x01\xca\x83\xb7\x80\xa8\xee\x4c\x47\xfe\x6d\x26\x6f\x86\x5a\x0e\x2b\xc5\x86\x7c\xe7\x40\xa8\xbd\x01\x75\xc5\xe6\x10\x55\xd6\x09\xa8\xec\x60\x91\xe6\xae\x25\xd8\xd9\xe1\xbe\x91\xef\x2e\xfe\x76\xfa\xbd\x62\xe5\x28\xd4\x56\x9e\x30\x9d\x3c\x49\x58\x31\x7b\x62\x47\x78\xf4\x60\x75\x64\xb3\x1b\xb8\xba\xd1\x50\x10\x48\x64\x96\xd9\x02\x63\x72\x42\x5e\xb0\x62\xe6\x3f\xf7\x30\xe0\xf6\x98\x7b\xca\x15\x52\x76\xd3\x6e\xea\xd0\x8c\x14\x93\x0d\xb8\x83\x54\x23\x40\xfe\x72\xbc\x5d\x23\xef\x87\x88\xee\x77\xd8\x9d\x65\x97\x56\x7c\x0f\x02\xbc\x0f\xa7\xa5\xdf\x61\xd4\xd3\x2f\xcc\x1f\x8a\x1b\xf6\xb9\xe8\xd4\x88\x6c\x9f\x4d\x50\x19\x4d\x59\x4a\xe4\x35\x2b\x4b\x9e\x32\x45\x3c\xdd\x0e\x6d\x50\x3c\x7b\x18\x90\xef\x7b\x07\x3e\xae\x80\x83\x87\x63\x7e\x38\x04\xfb\x43\x44\xc4\xe1\xce\x02\x11\xa7\x69\xce\xc5\xc3\xc0\xf6\x1d\xe1\xa6\x12\x9a\xb1\xb3\x77\x7b\x6b\xeb\x76\x9c\x58\x61\xbf\xb4\x37\x83\x9e\x02\x1b\xea\xec\x7f\xe7\x71\x97\x08\x99\xee\xe6\x40\xbb\x67\xb5\x7b\x4a\x35\xbb\xd9\x51\x10\x1a\xd6\x24\x7f\xd7\xf7\x41\x3d\x7b\xdc\x6a\xfb\x83\xe8\x14\x12\x9c\x72\x2c\xf9\x7f\x5f\x42\x96\xc5\xa7\x6e\x1c\x49\x38\x56\xd8\x94\xad\xd9\x8a\xcd\x9d\xd9\x93\xf3\x33\xf2\x2d\x3e\x7e\x7f\x5d\x50\x4a\xa9\x51\xe5\x39\x95\x39\xe5\xdd\x34\x40\x6f\x0e\xda\xec\x87\x15\x02\xe1\xdc\x3f\x4b\xec\xc3\x46\x28\xaa\xcb\x0d\x57\x25\x4b\x89\xb5\xa7\x7c\x61\x2d\x1e\x16\xc4\xe9\x2f\xa3\xc5\xc3\x6d\x75\xc9\x0e\x4c\xf3\x2e\x7f\xa7\x96\xa2\x1d\x3a\x81\x10\xe1\x63\x9d\x88\x62\x42\x71\x08\x6f\x08\x22\xf0\x40\xd4\x86\xb0\x74\x9f\xac\x83\x62\xf7\x80\xbc\x96\x53\x2e\x1c\x15\x93\x36\xaa\x66\x42\x79\xb6\x1f\x38\x7b\x39\xf9\x57\x26\x27\x2b\x95\xbd\x14\x74\x9c\xed\x1e\x32\x19\x1f\x02\x3f\x1c\x79\x95\xd1\x29\x61\xf0\xc7\x93\x94\x2b\xf3\x2f\xb9\xbc\x7c\x0d\xce\xe0\x4a\x38\xfd\x12\xdc\x9c\x96\xb7\xf8\xd4\x68\x24\x32\xf7\x47\x17\x90\x88\x77\xd6\xc1\x23\x18\x8f\x70\x91\x9a\xa5\x33\x15\x05\x25\xdb\x27\xb0\x57\x8a\xcf\xbb\xc3\xd0\xc7\x31\x23\xef\x67\x3c\xb9\x3a\x0f\xfc\xbf\xb2\x34\xf7\x44\x70\x2b\x12\x52\x9a\xbf\xdd\x17\x37\xb2\xcb\x3a\xef\xca\xa0\x16\x8c\xe7\x38\xb5\x23\xa7\x97\x16\x82\xf0\x1b\x55\x4a\x26\xbc\x8e\x3f\x00\x4b\x74\xcd\xbe\x53\x60\xdf\xf7\x07\x15\x10\x38\xbb\x01\x08\xca\xb9\x4b\xa4\x16\x87\x51\xf6\x09\xaa\x42\x29\x85\x0b\x07\xb7\x7b\x03\x02\xe2\x78\x67\x2d\x4d\xeb\xe1\x16\x5b\x9a\x3a\x35\xb3\xe1\x22\x77\x09\xaf\x16\x81\x9c\xca\x60\x7b\x68\x2f\xa2\x90\x6f\x6d\x6a\x9b\x99\xdc\x0b\xe8\x76\x4f\x4d\x5f\x66\xfe\x6b\xc4\x07\xe1\x3d\xeb\x34\x07\xda\x53\xc8\xa2\xca\x30\xb2\x76\xff\xce\xae\xce\xc7\x88\xdf\xb9\x07\x27\xfa\x43\xeb\xec\x74\x18\xa6\xe7\x6d\x9f\xaf\xf8\x65\xf4\x77\x0a\x54\x8b\xa7\x7f\xfc\xc3\x1f\x1e\x7b\xc7\xa7\xfd\x0c\x77\xf7\xdd\xf2\x69\x2f\xd7\xdb\x92\xda\x0c\x67\x7d\x6d\x86\xbe\x36\x43\x7c\xdd\xbb\x7f\xf8\xee\xab\x2f\x74\x92\xdd\xd6\x45\x66\xdb\xbe\xf5\x15\xf6\xcc\x8a\xeb\x26\x23\x6e\xef\x0a\x0a\x77\x51\x37\xa1\xa3\x1c\xb1\xfd\x6b\x24\xf4\x95\x11\x7e\x5d\x95\x11\xba\xcb\x11\xeb\xaa\x0a\xc2\xfe\xb9\x61\xbf\x9e\x8a\x07\x7b\x93\x8d\x7d\xf3\xea\xf7\xce\xa6\xef\xaa\xe9\x47\x57\xd6\xfd\xce\x2c\x0c\x87\xf5\x78\x4b\xed\x2d\xae\xc4\x9b\xab\xa6\x7f\x78\xa8\x82\x62\xf9\x5a\x1a\xea\x72\x8f\xaa\x33\xd9\xdb\xf2\x80\x53\x91\x3b\xf1\xee\x65\x56\xbc\x77\x97\x8d\x00\x01\x7f\xfb\xe1\xc7\x05\xf4\x0e\xf2\xfd\xc2\xd4\xbf\x2c\xf7\xe8\x17\xda\x01\xff\xb6\xdc\xa3\x2a\xaa\x9a\xeb\xac\x8e\x40\x20\x41\x84\x93\xe3\xb0\x33\x4d\x4d\x16\x4e\xce\xcf\x48\x52\x32\x28\xed\x40\x33\x35\x22\x4b\x24\x3c\xe7\x40\xb2\x12\xa1\x93\xec\xa8\xd6\x2c\x2f\xf4\xbe\x98\xd7\x7b\x47\x7f\x65\xde\xd1\x5b\xf7\x52\xcc\xaa\x9c\x8a\xa1\xa1\x16\xe0\x1f\x8d\xe2\x4e\x1a\xfc\x70\x44\x2c\x5d\x40\xb1\x02\x6c\xa1\x90\xd2\x5c\x09\xfe\x73\xc5\x6a\x73\x85\x97\x3a\x1e\x80\x73\x07\xe6\xd1\x31\xec\x50\xa2\x6a\x50\x91\x44\x2e\x24\x71\x59\x80\x78\x38\x3a\x82\x11\x88\x65\x91\xe9\x4d\xcf\x18\x4a\x6f\xe7\x50\x24\xa1\x7e\x2a\xd6\x0f\x51\x41\xa4\x59\x26\x6f\xf0\xdb\xa1\x3c\x62\xf6\xcf\xcc\xc5\xd6\x25\x19\x33\x92\xf3\xb2\x94\xa5\x75\x23\x85\xd3\xc1\xf0\x21\xa3\x67\xb2\x12\x15\xb6\xd2\x06\x7d\x5c\x32\x6d\xb7\x1a\x50\x45\x4b\x42\x05\x26\x70\x9a\xff\xbb\x88\x6b\xf8\xb6\xa3\x77\x63\x36\xa3\xd7\x5c\x56\x25\xbe\xad\x25\x39\xb0\x3f\x01\xef\x9d\xcb\xca\xdb\xce\x2b\xc8\xd0\xf2\xab\x53\x4b\xe0\xf4\xb6\xfe\x11\x14\xdc\x54\x3a\x73\xe4\x90\x7d\xe6\x4a\x2f\xae\xc5\x81\xc8\xb5\x9c\xb8\x0f\xcc\xbb\x56\x85\x61\xb0\x3f\xec\x9c\x7b\x1b\xe3\x5b\x38\x5a\x2c\xa9\x5e\x5f\xc2\x4f\x9b\xe4\x54\x5b\xb1\x06\x53\xe6\x5d\x3a\xdc\xe3\x8b\x61\xc5\x55\xee\xd8\xeb\xea\x41\x0a\xca\xbd\x90\xbc\xf6\xf2\x51\x16\x19\x4f\xe6\x67\xa7\xdd\x46\x6e\xe0\x98\x8e\xfd\x29\x1f\xb5\x61\xee\x93\xbf\x51\xc5\x52\xf2\x86\x0a\x3a\x45\xab\xcb\xd1\xe5\xf9\xdf\xde\x1c\x1b\x2c\x02\xab\xce\xd9\xe9\xd2\xd0\x8e\xcb\x70\xf0\xb7\xf7\x95\xe7\x4e\x9a\xa0\xeb\x4c\x6c\x58\x18\x75\x47\xf0\xdd\x5b\x09\x00\xe2\x65\x82\x7d\xda\xa7\x2d\x11\x07\xce\x9b\x45\xa2\x30\x7c\xc3\x55\x7f\x53\x4d\x52\x7d\x9d\xa7\x57\xb7\x09\x80\xc0\x6e\xbe\x6e\x95\xed\x7c\x60\x2d\xfc\x5c\x71\x37\x12\x5d\x52\xcd\xa6\xf3\x53\x56\x64\x72\x6e\x10\xe0\x3c\x30\xe3\xe3\xa3\x63\x14\x1b\xca\x31\x4d\x48\x59\x65\x0c\x7b\x0b\x35\xcb\xae\x09\xc6\xd2\x9a\xd2\x71\xa1\x34\x85\xa2\x6b\x38\xfe\xda\x19\xb5\x66\x56\x6d\xd9\xd2\x10\xe7\xb9\xf1\xa9\xb8\x44\xa5\x39\x25\x6b\x5f\x69\xcf\x98\xe0\xf3\x9b\x71\x76\x1b\xbf\x66\x6b\x0f\x66\xdc\x1d\x10\x4e\xf9\x45\x95\x19\xe6\x93\xa5\x8d\x16\xaf\x20\xa7\xd9\x3d\xc6\x6a\x17\x40\x13\xcc\xec\x07\x64\x5c\x19\x21\x8e\xa9\xc8\xc6\xbd\x58\xea\xf3\x66\x86\x2e\x6d\xf3\x12\xa1\x45\x91\x71\x0c\x61\x96\xa5\xf5\x4b\x07\x06\xcd\xc5\xc7\xda\x90\x96\x2d\x65\x99\xed\x64\x97\x21\xb9\x66\xe5\xb8\x4d\x9d\x8a\x6d\xc5\x12\x5a\x70\xf0\xe3\xb4\x96\x62\xa2\x8d\x3b\x39\x3f\xc3\xb7\x97\x19\x8e\xdd\x8f\xb8\x83\x76\x6f\x9c\x7b\xc3\xf6\x0c\x42\xcd\xc5\x57\x5a\x3a\x39\x3f\xc3\xd2\x5e\xb6\xd8\x52\x6d\xfe\x30\x7a\x02\xc5\x20\xc7\xba\xc2\x23\x9d\x9a\x11\x35\x91\xc2\x7f\x94\x89\x2a\x67\x58\xa0\xa9\x6e\x36\x66\x94\x47\x31\xaf\x47\xaf\xad\x27\x46\xd7\x31\xaa\xcf\xc1\x41\x28\x08\x63\xea\x43\x19\xcc\x07\x88\xc9\xc1\x57\xd1\x53\x86\x72\xd4\x13\x6e\xcb\x7e\xb6\x8f\x12\xd8\x32\x2a\x60\x6b\x7e\x26\xa4\xb8\xb0\xa0\xfa\xfe\xe2\xf5\x6e\x88\xf0\x36\x1e\xc3\x16\xf5\x61\x50\xbf\xb0\xa0\xa5\xe6\x34\x23\x55\x99\x39\xb7\x22\xe6\x08\xd8\x50\xbc\x19\xbd\x0e\x0a\x1f\x8d\x08\xf9\x0a\x77\xdf\x6e\x0e\x9e\x71\x6c\xe0\x6b\x4d\xc1\x55\x96\x0d\xc8\x84\x43\xcb\x76\xcd\x0a\x12\xba\xb5\x2e\xb9\x48\x8c\x3a\x28\x86\xbe\x23\x0f\xcc\xc8\x29\x89\xfe\xa0\x83\xd7\x14\x64\x66\x96\xa5\x50\x0c\x13\x3e\x61\x0e\x7d\x02\x26\x0b\xa3\xc5\xbe\xc8\x2a\xa5\x59\x79\x21\x0d\x43\x09\xc2\x76\xa0\x30\x08\x0d\x7f\xfe\x1b\x17\x29\xc4\x69\x5d\x00\xf3\x49\xa8\x20\x8c\x83\x31\xc8\x0c\x09\xfe\x77\x83\x2c\x35\x52\x1e\xa9\x2a\x99\x99\x25\x1d\x14\x32\x55\x07\x86\x14\x1d\xa0\xc9\x50\x1d\x1c\x9b\xbf\x9a\x6b\xc0\x28\x9c\xe0\xbd\x27\xb4\xe0\x07\xc7\x03\x02\x00\x02\x07\xa0\xd4\xb3\xc7\x8b\x87\x6e\xad\xa0\xa3\xef\x84\x85\x17\xe1\x08\x80\x83\xa2\x76\xf5\xdd\xcc\xb8\x66\xbe\xbd\x3a\x5a\x9a\x7c\xa5\x9b\x26\xc1\x27\xe4\x44\x10\x96\x17\x1a\xac\xd7\x24\x67\xd4\xb9\xc4\xd9\x35\x2b\xe7\x7a\x66\x2b\x81\x38\x02\xf2\xe8\x81\xbe\x1f\xc0\x1b\xbd\xeb\x6b\x24\x87\x13\xb6\x00\xdc\xc3\xaf\x0e\x9b\x84\xb4\xe6\x08\x8f\x16\x94\xc0\xa2\x77\x02\xe3\x0f\xe6\xcd\x18\x84\x78\x0b\xa9\xa5\xa7\x1f\xaf\x5f\x5b\xc7\x0a\xc2\xea\x3b\x2e\x52\xe5\xbb\x29\xda\xb8\x6f\x0b\xef\xa5\x40\x86\x19\x3e\x46\x00\x2f\x8a\xc0\x6d\xc5\xd6\x35\xc3\x3b\xa9\x7f\xd5\x50\x6b\x07\xb0\xaa\xc3\x1b\x99\x2e\x3f\x3a\xd1\xfe\x9e\x05\x0f\xfb\x60\x83\xda\xee\x62\xc7\xb2\xe2\xee\xbc\x58\xaa\x13\xac\xdf\x8e\x35\xa0\x5f\x35\x93\xda\xe0\x00\x74\x32\xf8\x05\xac\x49\x58\xe7\x9c\x4c\x32\x3a\xad\xd1\x08\xa8\x1e\x0a\x5a\x2f\x2e\x7f\x70\x4b\x50\x84\x2f\x17\x79\x37\xca\xc4\x9b\xa4\xe0\x61\x0d\xa5\x95\x4f\x98\x8f\x2c\xfd\x71\xb3\x28\xec\x07\x5f\x8d\x4d\x6d\x9c\x8d\x7a\xad\x21\x6f\x15\xfc\x9d\xcd\x8e\x06\x98\xe0\x0a\xb6\x39\xc5\x14\xe2\xa7\x40\x0e\xb9\xfc\x21\x42\x93\x0d\xf3\x5d\x81\xb4\x57\x6c\x7e\x23\xcb\xe5\xb5\xd8\x63\xb9\xde\xd3\x21\xf7\x8a\xd3\xc0\x9c\xf3\x12\xed\x83\x72\x69\xd1\xf9\x9d\x51\x75\xed\xe4\x33\x3a\x66\xd9\xe6\xa9\xbf\xa1\x85\x99\x77\x1d\xf7\x8a\x86\x00\xeb\x36\x45\x55\x04\x43\xd4\x5c\x58\xa0\x2c\xa7\x54\xf0\x7f\x60\xb0\x70\x62\x48\x82\x2c\xcd\x9f\x47\xe8\x7a\x41\x33\x42\xc6\x12\x7d\x6c\x51\x79\x29\x09\xdd\x80\xeb\x34\x4d\x39\x0a\x22\xe7\x1b\xd0\x72\x3d\x10\xb8\xb8\xda\x66\xfb\xe0\x79\x8c\x26\xc3\xc5\xde\xf2\xde\xad\x39\xeb\x9b\x8f\xe3\x7a\x1f\x70\x0b\x76\x51\x95\x6b\xc2\xc3\xd6\xbe\x9f\x53\x6e\x9b\x05\x6f\x03\x5d\x8b\x39\xd4\x4a\x98\x86\x40\x9a\xf5\xf9\xd1\xee\xe0\xb0\xec\x05\x70\x96\x53\xbe\x2b\xc4\xf0\xda\x63\xcb\x72\xaa\xab\x92\xeb\xa5\xec\x77\xfd\x8b\x5c\x7c\x57\x8d\x99\xf5\xa8\x6f\xfd\xba\x80\xc0\xca\x93\xf3\xb3\xa5\x60\xe9\x86\xcd\x82\xdd\xc3\x4e\xd0\x48\x69\xa4\x12\x34\x1f\xf3\x69\x25\x2b\x95\xcd\x43\x33\x2e\x85\x80\x80\x11\x21\x67\x68\xc7\x12\x87\x9a\x50\x21\xc5\x3c\xb7\x8f\x8a\x24\xab\x52\x16\x8d\x08\x7e\xd3\x6b\xc9\x53\x42\x2b\x2d\x73\xaa\x79\x42\x12\xc9\xca\x04\x7c\xac\xe1\x48\x95\x62\x84\xae\x78\x37\xa9\x94\x96\x39\xc9\x69\xa9\x66\x34\xcb\x56\xed\x71\x07\x3c\x7c\x5d\xb1\xf6\x21\xac\x7f\xe5\x8f\xd7\x38\xeb\x1d\xf1\x7b\x43\x6d\xfa\x16\xf8\x6d\x26\xb7\xd7\x00\xd7\xab\xb1\xb4\xc5\x18\xb6\x2a\xc2\xd2\x7a\x4f\x11\xc2\xbd\x9f\x31\x52\x54\xe3\x8c\x2b\xd0\x4c\x81\x12\xcd\xc9\x98\xcd\xb8\x8d\xce\xde\x4c\x82\x56\x6e\xf1\x26\x38\xaf\xa3\x01\x1b\x21\xb4\x86\x64\xaf\x7d\xd7\xb2\xb4\xb3\x9c\x4e\x5b\x08\xe0\xaf\x0d\xc1\xa6\x62\xee\x39\x21\x14\x39\x55\x03\x22\x4b\x1b\xb1\xe3\x7b\xd2\xdb\x9f\x7c\xa1\xdc\x92\xbc\xb3\xa0\xb3\xa1\xf3\x16\xdf\x21\xa1\x82\x95\x13\x59\xe6\x06\xc0\xbc\x24\x93\x4a\x80\x81\x52\xd9\x48\x7b\xe0\x12\xd6\xc6\x45\x33\x25\xfd\x59\x86\xbd\x10\x6e\x12\x84\x2a\x72\xc3\xb2\x6c\x44\x4e\xb2\xcc\x56\x5f\x0d\xea\x6c\xd4\xb9\xf2\x75\x3c\xc7\x78\x4e\x52\x3e\x65\x4a\x93\xa3\xcb\xff\x7b\x72\x0c\x22\x0a\xd8\x7f\xe6\x44\x53\x97\x2a\x18\xdb\xb5\x40\xd8\x49\x2b\x10\x8a\x12\xaa\x69\x26\xa7\x18\xd2\x00\x36\x72\x91\x92\x22\xa3\x73\x68\xad\x50\xd0\x12\xa2\x7d\x13\xb4\x6d\x91\xb2\x12\x50\x54\xfa\x4e\x79\xd7\x66\xa2\xb2\xae\xee\xf3\x10\x70\x72\x47\xa2\xb1\xa1\xba\xee\xed\x32\xc5\x92\x15\x19\x5d\x61\x8d\x59\x38\xf0\x75\x22\xb8\x51\x0f\x40\xf5\x97\x82\xf9\x31\x46\xe4\x12\x71\x27\xa7\x3a\x41\x7f\xf2\x4f\x39\xd3\x34\xa5\x9a\x8e\x8c\x0e\xfd\x53\x9c\x95\x28\xb3\xd4\x0c\xb4\x7a\xa3\x57\xcc\x19\x85\x63\xb9\x99\x48\xbd\x36\x12\xbc\x7f\x1c\xf4\x1a\x77\x1e\xd7\x9a\x7f\xf6\xa4\x4f\xb0\xfc\x97\x9f\x8d\x0a\xbb\xd6\x7f\x19\xcd\xb5\xf9\x52\x6c\x9d\xc9\xe2\x95\x58\x6c\xcd\x19\x94\xe8\x7c\x6f\xbb\x50\xb9\x3b\x60\x7a\x3e\x79\x7b\xba\xda\x4c\xb8\xd9\xd4\xb2\xc1\xb4\xd2\x94\x4f\x57\x4e\xcf\x19\xe6\xed\x2f\xb1\x67\xc6\xa5\x22\x41\xf2\x26\x26\xf6\x50\xe1\x39\x87\x2b\xce\x9f\x81\xc5\x20\x4c\x3b\xc5\xf7\x56\xdb\x95\x5a\xb9\xc6\xda\x38\xc4\x36\x65\xf9\x0d\xfd\x64\x57\x3e\xd4\xce\x3f\xb6\x31\x13\x6f\x55\xa6\x1d\x42\x1e\x12\x73\x9c\x69\xd9\x03\xbb\xad\x3f\xb1\xa5\x5d\xcc\x2d\x75\x8b\x89\xfa\xad\x8c\x82\xbe\xae\xd8\xfc\xd0\xea\x88\x06\xd3\x67\xbc\xc0\x54\x51\xeb\xbe\xb1\xbb\x4b\x7e\xa0\x19\x4f\xfd\x10\x88\xd5\x67\x62\x40\xde\x4a\x6d\xfe\x79\xf9\x99\x2b\x8d\xba\xf6\xa9\x64\xea\xad\xd4\x70\xa7\x93\xa5\xe2\x14\xb6\x58\xa8\xd5\xf6\xd1\x03\x00\xe7\x2a\xb0\x09\xb8\x05\x9d\x4d\x22\xc9\xc8\x3c\x7d\x26\x8c\x44\x60\x57\xe4\x53\xa8\x95\x1d\xc2\xe5\xff\x08\x29\x86\xe0\x1b\x58\x3a\x86\x05\x84\x2c\x23\x38\xac\x19\xce\x0e\x85\xc1\x97\xf0\x0b\x57\x8e\x88\x7b\x9e\x4d\x9d\xb9\x92\x27\x24\x67\xe5\x14\xbc\x5d\xc9\x06\x6f\x4f\x5b\x13\x6e\x2b\xc3\xed\xc6\xbd\x02\x92\xf9\x7a\xa5\x95\x66\x61\x93\x82\xe7\x91\x2c\xe5\x68\xba\xf9\xa7\xa1\x3e\x00\xa9\x7f\x41\x1e\xbd\x1a\x91\x13\xd7\xe2\x27\xfc\xcd\x7a\xfd\xc2\x61\xcc\x08\x5c\x11\x43\x4a\xae\x69\xc6\xb0\xc3\x01\x15\x3e\xd7\x4d\x4e\x16\x08\xfb\xc0\xe6\xd3\x9b\x33\xeb\x45\xa6\x83\x2b\x36\x3f\x18\x2c\x6c\xed\xc1\x99\x38\xa8\x13\x1e\xa3\xcd\xf4\x44\x14\xa4\xad\x03\xf8\xed\x60\x77\x5e\xb0\x96\x58\xb6\xb7\x25\x6d\xdc\x37\x75\xc5\x97\xbb\xfe\x97\x0a\x1b\x47\xea\x18\xcc\x1e\x02\x7b\x2d\xc9\x12\xcc\xc0\xe6\x6e\x58\x5a\xc5\x88\xaa\x57\xbc\x28\xea\x4a\x34\x55\x31\x2d\x69\xca\xc8\xb4\xa4\xc5\x6c\x5b\xb1\x04\x65\x9b\x65\xc3\x3f\x1a\x41\x77\x05\xf0\xd7\xe8\x86\x6b\xdf\xbb\x61\xe3\x99\x94\x57\x90\x86\x08\x88\x70\x8b\x96\x8c\x1f\xf1\x5b\xa7\xf5\x3d\xa7\x94\x2a\x92\x32\x4d\x79\x06\x71\x34\xef\x5e\xbf\xb1\x91\x36\x8e\x8f\xbb\x59\x2e\x0f\x5a\xe9\x40\x01\xa0\xa9\x8d\x00\xbb\x60\xd7\x9c\xdd\x58\xfb\xc6\xaa\x18\x99\x21\x99\x32\x01\x81\x21\x6b\x02\xa8\x86\x44\xf1\x94\xbd\x84\xa4\xe7\xd5\x03\xed\xe1\x70\x58\x31\xe7\x4d\x87\x77\x3d\x05\xdf\x48\xbd\x5b\x70\x59\xaf\xfe\x9e\xcb\x72\x4d\x11\xa6\x76\x39\xd8\xed\xf2\xab\x6d\x14\xff\x73\xf2\x87\x3f\xfc\x7e\xe5\x43\x39\xfd\xcc\xf3\x2a\x7f\x4e\xfe\xf8\xef\xff\xfe\xfb\x7f\x5f\xfd\x18\x17\xf8\xd8\xb3\xd5\xeb\xb3\xa7\xed\xc5\xc5\xe9\x03\x80\x77\xea\x23\x19\xd7\x3b\x33\x5b\x0c\x35\xa1\x3c\xab\x4a\x1b\x43\xdb\x52\x45\x78\x15\xbe\x03\x8e\xa8\x3a\xe9\x84\xba\x11\x5d\xa0\x9d\x0d\xc0\x9b\x70\xc1\x14\x34\xcf\xa9\x44\xc9\x12\x39\x15\xfc\x1f\x2c\x75\xbd\x73\x20\x20\x06\xaa\xec\x3b\x14\x27\x4c\xa4\xd8\xc3\xd4\xf0\xbc\x19\x15\x69\xb6\x2e\x50\xa2\xc5\x4a\xc3\x13\xbc\x17\xc8\x80\xf3\x6c\x05\xb0\x37\xf5\x1b\x0d\x70\x41\x27\x56\xeb\xb6\x43\x8e\x86\x60\xdb\x6b\xa5\x48\x18\x2f\xd7\x28\xd6\x4b\xe6\xb8\xa0\xf7\xa1\xca\x0a\xf7\x7e\xae\x58\x39\x87\x04\x9b\x5a\xb0\x0f\x82\xf0\xde\xd7\xf5\x1b\xdc\x32\xac\x44\x85\x05\x74\x1a\xba\x70\x2d\xc4\xd4\x61\x32\x8d\x6f\xc3\x3b\x0c\xc3\x0e\x9c\xd7\x8c\x9c\x10\x51\x65\xd9\xaa\x47\x85\x5c\xe7\x5f\x0b\x61\xb7\x41\x95\x6c\xa7\xe3\xb5\x35\x0b\x2c\x81\xf4\x9d\x1a\x07\xc2\x85\x77\x24\xca\x3f\x6c\x73\x41\xb8\xe0\x56\xf1\xb4\xed\x63\x69\xdb\x95\x09\x6a\x61\x46\xc0\x6b\x9b\x60\xdb\x96\xc5\x7d\x6e\xd3\xb0\x80\xd7\x56\x71\x4d\xed\x8c\x0c\x4b\xa6\xfe\xe0\x4c\x0d\x3b\x2c\xbe\x8d\xd9\x61\xc9\xd2\x7b\xe3\xc3\x02\xc0\xdb\x46\x91\x6d\x11\x41\xd6\x72\x27\x5b\x18\x25\xf0\xea\x4d\x13\x5b\x71\xa2\x16\x84\x79\x3b\x33\x45\xeb\x5d\x2d\x19\x17\xd7\x12\x8b\x6c\x6f\x25\xc3\x5d\x2c\xbc\xd8\x10\xe5\x6e\x80\xb2\x5a\x59\xce\x0b\xbf\xa1\x48\x6b\x14\x5a\x52\xa9\xcd\xc6\xee\xf5\x2b\x58\x9f\x77\xd3\x89\x0e\x12\xaf\xbc\xca\xd8\x8f\x5c\xcf\xde\xb9\xa2\xfa\x16\xab\x75\x55\x64\xb0\xd8\xe0\x07\x83\x42\x17\xb5\x64\x78\x86\x6d\xdc\x58\x22\xf3\x9c\x89\x14\x83\x88\x72\x7a\xc5\x48\xdd\x2a\xd4\xc8\x78\x20\x06\xc3\x70\xec\x73\x41\x45\x2d\x27\x5e\x1b\x5a\xbe\x0e\xa3\x5a\xe2\x53\x5b\x5e\xdb\x3a\xa1\x65\x7d\x22\x4b\x90\x89\x12\x25\xac\x90\x31\xcb\x24\xa4\xc0\x63\x84\x2d\xc6\x80\xbb\x1c\x10\x43\x92\xed\x5d\xcb\xf5\x6c\xc1\x4d\x26\xa6\x75\x1d\x2f\x95\x41\x53\x5f\x4b\x81\xa5\x60\x23\x72\x61\x45\x98\x76\x52\x51\x1b\x72\xda\x92\x94\x6e\xc1\x10\x3f\x0f\xeb\x6a\x19\x43\x23\xec\x0e\xed\x6c\xb4\xcc\x79\xb2\x69\x53\x36\xdb\x3a\xf0\x6a\x6e\x8b\x7b\x2f\xdc\x98\x6b\x77\xaf\xcd\xd6\xb8\x87\xfb\xcd\x59\x71\xf9\x56\x1b\xdb\xed\x4d\x4c\x4c\x6a\x7e\xe4\x37\xa6\x41\x36\x13\x6c\x56\x0d\x46\xc2\x21\x79\x71\xf1\xf2\xe4\xfd\xcb\x01\xf9\xfe\xfc\x14\xfe\x3d\x7d\xf9\xfa\xa5\xf9\xf7\xc5\xbb\xb7\x6f\x5f\xbe\x78\x6f\x24\x98\xaf\xb0\x69\x80\x51\x20\xcd\xd6\x18\x4e\x28\x63\x3a\x45\xc5\x9c\x4c\x2a\x6d\x08\x51\xfd\xb1\x68\x16\x14\xad\x0f\x34\x4d\x8d\xb2\xfa\xe8\x10\x60\x39\xc0\x9b\x06\x9b\xb0\x5b\x0a\xf6\x59\xb0\x29\x72\x9b\x05\xb4\xbb\xc1\xb0\xd6\x49\x26\xd1\x7a\x0f\x76\xcc\x2e\xf9\x28\xc8\x2b\x59\x12\xdb\x9b\x0e\x9a\x95\xa6\xea\xd0\xe6\xf0\x98\xff\x8f\xf0\xd6\x93\x4c\x4e\x0f\x7d\x6a\x0f\x23\x99\x9c\x12\x55\x8d\x7d\xca\x15\x08\x01\xf0\xf4\x57\xee\xb1\x28\x53\x65\xe0\xf3\xae\x82\xb7\xfc\xe0\xd1\x3b\xe1\x03\xe1\xb8\x4f\xa0\xa1\x5c\xf4\xa4\xb9\xd1\x1c\xf0\xab\x27\xcb\x67\xe0\xe4\x3d\x5e\x36\xde\xf8\x28\x0c\xae\xdf\xf0\x2c\x4d\x68\x99\x2e\x20\x3c\xf0\x64\xc4\x17\x80\x1e\x56\x59\xc6\xe6\xdf\xf5\xe0\xb6\x36\x8a\xbc\x66\x65\x46\x0b\x4c\x08\x80\x32\xd7\x10\x31\x05\x1f\x39\x65\x05\x83\xb4\x37\xd7\x9c\x9e\x89\x24\x93\x50\x86\x05\x19\xfa\x20\x5e\x3a\x46\x50\xb9\x5a\x95\x2e\xf9\xd2\x1f\xaf\x83\x2f\x93\xc0\x42\x1c\xf9\x56\xa8\x8f\x91\xe7\x2b\x0b\x01\xf9\x1c\x1f\x54\x94\xbd\xb4\xcf\xc8\x81\xcd\x48\x3c\x18\x90\x03\x5f\xeb\x26\xb5\x9a\xc1\xc1\x57\x07\xf5\x03\x61\x4e\x1b\x28\x06\xd6\x0d\x36\x84\xef\x84\xd9\xb3\x80\x1d\xce\x59\xe7\x3f\x5d\xd7\x2b\x32\x1c\xd9\x1a\xee\x60\x0e\xf1\x40\xa3\x68\x22\x0b\x5f\xad\xd3\x31\x37\x7e\xd1\x4c\x3f\x78\x5d\x43\xf9\x03\x4c\xeb\xb4\xc0\x29\x99\xd9\x4a\x17\x84\x77\x19\x61\x9e\x77\x36\x86\x05\x95\x78\x49\x0a\x5a\x1a\xf5\xcb\x3d\x19\xb7\xc4\xfb\x6a\x63\x43\xbc\x16\x18\x14\xf8\x94\x5a\x6a\x2a\x97\xfe\x8d\x17\x19\x55\x6a\x89\xb5\x19\xa8\x88\x19\x98\x30\x1c\x99\x50\xe7\x70\x83\x7a\xe7\x33\x7a\xbd\xa6\x20\x46\x8b\x49\x6b\x5a\x4e\x99\x5e\xef\x0d\xa2\x62\xfe\x6e\x6d\x09\xbd\x61\xeb\xa2\xbd\xc3\x76\x47\x31\x3a\x84\x5c\xe8\xa1\x2c\x87\xf8\xca\x73\xa2\xcb\x6a\x95\x5f\x4f\xf3\x9c\xc9\x4a\x5f\xb2\x44\x8a\xe5\xd9\x2f\xf6\xb9\xce\xdc\x5b\x5b\xa4\x04\x59\x0f\xeb\x89\x13\x60\xc2\xa2\x97\x4e\x19\xad\xa5\x1b\xe7\x55\x8d\xcb\xf6\xbc\x7b\xfd\x66\x9f\xcd\x26\x90\x36\xbf\x7e\x27\x7f\xb0\x3c\x43\x4c\xfd\x4c\xed\xcc\xd7\xbe\xf6\xa6\xd2\xdb\xbf\xf4\xc2\x7b\xeb\xd6\x3f\x6d\x81\xb1\xbe\xf4\xca\xca\xf5\x2b\x4d\x75\xb5\x80\x0d\xd1\xde\x58\x62\x79\x89\xe9\x87\x56\x15\xb9\x84\xf7\x42\xc3\xe6\x62\xbd\x09\xac\x61\x03\xcf\xb9\x00\xcd\x11\xb1\x2f\x9a\xf3\xa9\x4b\xca\x51\x69\xa6\x89\xae\x20\x8f\x9d\x6a\x1b\xcc\x69\x0b\x2e\xfd\x66\xd9\x32\x96\xaa\xc9\xeb\x54\xe3\x84\x95\x5a\xbd\xa6\x4a\x7f\x5f\xa4\x74\x45\xa6\x5b\x23\x48\x53\x69\x38\x30\x28\xd2\xdf\x08\x96\x1a\x0a\x6f\x41\x80\xe3\x91\x1b\x43\x7a\x2b\x1c\x71\x65\xe8\xc1\x4a\x94\x73\x07\xc8\xbc\x3e\x34\x9f\x5a\x3e\xeb\x0b\x69\x60\x72\xb2\x94\x00\xc5\xe1\x29\x9b\x66\x6b\xd8\x49\x09\xa3\x11\xc1\x3e\x2f\xb3\x32\xec\x3f\xe3\x8c\x51\xb1\x3c\xd9\xa0\x81\x51\xf0\xdc\xf6\x38\x64\x3f\x40\x6e\x66\xdc\xc8\xbb\x98\x11\xa8\x88\x93\xbf\x52\x96\xb1\x15\x89\x81\x7b\x86\xcf\xda\x2f\x9c\xda\x0f\xb4\x0a\xed\x3a\x8f\xdf\xf1\x4e\x0c\x2b\xc1\xdb\xd4\x93\x5a\xd2\xb6\xd2\x83\xd7\xd7\x9a\xab\x02\xf1\x65\x9c\xc9\xe4\x0a\x0b\xd0\x41\xed\x07\xfe\x0f\x56\xba\x58\xfb\xba\xf9\x9c\xed\x88\x36\x75\xdd\x5e\x1d\xdc\x5c\xfb\x2b\x18\xc5\x8c\x6d\x00\xe8\xc7\x97\x65\x6d\x4d\xad\x84\xcd\xb4\xbc\x9b\x70\x5d\xa7\xe5\x40\x8e\x42\xe4\x2d\x59\x54\x78\xb0\x56\x0d\xd4\xc7\xb4\xca\x2a\xcd\x6d\x6e\xd0\x93\xef\x56\xe7\xd1\x74\x1a\x82\xbb\x2e\x9b\x07\x9f\x00\xf0\x89\x64\x6d\x69\xa3\xb5\x79\x3f\x6d\xad\x7d\x1b\xf2\x7b\x48\x7b\x09\xdf\x4f\xb9\xcd\x68\x9d\x06\x54\x76\xee\xe1\x5c\x99\xfa\x50\x5f\xdb\xf8\x2d\xdb\x16\xe6\xdd\xca\xb3\x26\xb6\x29\xa0\x1a\x17\x9a\xf1\x6a\x87\xcd\xe2\xc5\xe8\x83\x89\x2c\x57\x2a\x30\xdd\x4d\x7e\x7d\x36\xd8\xc6\x81\x8c\xf4\xb9\x3a\x5e\x6f\x31\x61\xc9\x50\x2f\xff\xca\x80\x50\x32\xe3\x4a\xcb\xd2\xba\x13\xa1\x79\x5d\x49\xa1\xb9\xee\xf2\xb8\xb7\x6e\x22\x00\x5f\xf8\x29\x10\x5a\x14\x8c\xfa\xbe\x56\x96\x37\x41\x63\xaa\x92\x25\xb2\x4c\x97\x4e\xcc\x99\x06\x96\xca\x52\x4b\x3f\xdf\x41\x66\x6b\x46\x95\x7e\xef\xe7\x60\x04\x84\x96\xd4\x38\x16\x7f\xec\x12\xeb\xd5\xb8\xd2\x3f\x52\xd4\x3f\x4a\x42\x05\x9a\x44\xf6\x93\xc1\x37\x0b\x19\xf5\xda\x50\x9a\xdb\x69\x5d\x37\x5e\x72\x0b\x96\x78\x37\x33\xcf\x99\x52\x6b\x93\xab\x1a\x81\x29\x50\x43\x9a\xf8\x1a\xd2\xf6\x75\xc7\xec\x51\x40\xc0\x10\x54\x57\xe5\x6d\xbe\x1a\xd5\x08\x88\x09\x68\x50\xf0\xc7\x6a\xaf\x2d\x2b\x66\x54\xb5\x5d\x8c\x3f\x45\x3e\xac\xb9\xf5\x71\x68\x39\x9b\x92\x51\xb5\x2e\xd1\xb4\x01\xdb\x71\xc9\xd9\x84\xbc\xa0\x39\xcb\x5e\x50\xd5\x25\x70\x81\x02\x8c\x08\x1b\x4d\x47\xe4\xf0\x22\xf0\x30\xbf\x95\xfa\xcd\xba\x1e\x1f\x1b\xca\x3f\xb4\x39\xd1\xb7\x7a\x96\xf7\x56\x12\x36\x9f\xdc\x3d\xcf\xec\xde\x33\x5c\x73\x42\x1f\xc4\xd9\x5c\x9f\x2d\xbd\xea\x3c\xc6\x27\xb1\x2a\xc1\xe2\x97\xec\x7a\x22\x37\x24\x70\xae\x3a\x85\x0f\xf9\xfc\x6d\x58\x92\x1f\xe2\x72\xa9\xc9\x64\x61\x75\xef\x23\xcd\x15\x7c\x06\x61\x50\x21\x94\x87\x37\x33\x7d\x71\xf9\x43\x97\x62\xcb\xfd\x96\x2a\xb0\x1b\xb8\xf2\xf7\x35\x72\xf9\x70\x3d\x17\xde\xb7\x0c\x42\x0a\x5e\x1a\x83\x01\x77\x19\x74\x72\xea\xbe\x6a\x6d\x1d\xbe\xb2\x33\xfc\x35\xb1\x1d\xf4\xec\x33\x11\x7e\x1c\x41\xaf\x42\x76\x8d\x0d\x42\x21\xc9\x85\x11\xc1\x94\x39\x14\xc7\x6b\x3e\xdf\x52\xa1\x6a\xa7\x4c\x6d\x56\x74\x37\x2a\xb1\x64\xf3\xd6\xba\x87\xd6\x6d\x30\x5e\x6d\x75\xb6\x16\x3a\xf1\x16\xca\xda\x66\x8d\x67\x8b\xc1\x36\x8a\x7f\x5b\x8e\xb7\xdc\x80\xdb\xbc\x1a\x95\xa4\xcd\x2b\x17\x40\xa4\xd1\xab\x9c\x18\x0a\x9c\x40\x7d\x71\xa4\xdd\x96\x3c\xc5\xf6\xdb\x8b\x26\x0d\x84\x10\xcb\x18\xc3\xbb\x5a\x56\x55\xf1\xee\x60\xbe\xb1\xfe\x48\xeb\xf1\x1e\x40\x31\x95\x8d\x08\x74\xbb\xc5\x19\xf0\xda\x84\x75\xf7\x8f\x6f\x6d\x2a\x65\xad\xc5\xb1\x5b\xaa\x6b\xa3\x58\x79\xcd\xd2\xc8\x53\x67\xeb\xfc\xc7\xf7\x02\xbf\x6d\x3d\xbe\x05\x3b\xf9\xe7\xbf\x7e\xf3\x9b\xe1\x70\xf8\x9b\x3a\xa4\xec\x39\xa1\x05\x67\x9f\x35\xc3\xa8\xc3\xd1\xd5\x7f\x40\x33\xa7\xeb\x67\xbf\x01\x84\x23\x2f\xc0\xda\xec\xcc\xac\xa7\x3e\x6b\xf2\x37\x2e\xeb\xd4\x7c\x84\x0a\x21\x75\x18\x05\x95\x48\xa1\x4b\x99\x65\xac\x1c\x4e\x99\x18\x5d\x55\x63\x36\xae\x78\x96\xb2\x12\x06\x77\x9f\xbe\x7e\x3a\xfa\xf3\xe8\xe9\x6f\x88\xcf\x31\x35\x92\xbd\xd2\x34\x2f\x9e\x43\xb2\xcb\x6f\x2c\xc6\xb9\xea\x7d\x45\x46\x85\x1a\xf9\xd0\xf6\x51\x22\x4b\x26\xcd\x3f\xf9\x6f\x54\xc1\x12\xf3\x6d\x3c\x68\x64\xe9\x33\xd6\x74\x66\xa7\x68\x6b\xd5\xd5\x60\x1a\x12\x99\xe5\xf0\x7f\x5c\xba\x2d\x37\x78\x9e\xd9\xda\x85\x19\x57\xfa\xbb\xe6\x2f\xaf\xb9\x42\x76\x59\x64\x55\x49\xb3\x78\xaa\xf0\x83\x9a\xc9\x52\x47\x65\x79\x87\x84\x23\x6b\x54\x5c\x4c\xab\x8c\x96\xd1\x5b\xbf\x71\x31\x0f\xb5\xb9\xce\x70\xc9\xeb\x28\x04\x70\x18\x05\x08\x73\xa1\x59\xf9\x42\x66\x55\x1e\x5a\xc7\x86\x8b\x72\xe5\x84\x97\x4a\xdb\x7a\x88\xb1\x53\x61\x99\x5c\x0c\xdf\x0f\x70\xf4\xef\x4a\x0a\x70\x17\x92\x91\x01\xf7\x68\xf5\x4b\x1f\x9e\x7e\x0a\xde\xc3\x3d\x8c\xe5\xd5\xa5\xa7\x64\xc9\x8c\x69\x51\x94\xf2\x9a\x62\x35\xc7\x35\x73\x71\xcf\x2d\x7c\xf6\x64\xf1\x87\x15\xdf\x5e\x3e\x64\xe4\xa3\x0b\x87\x8c\x7e\xd0\x4b\x2a\x5d\xe2\xc3\xd7\xcf\x68\x56\xcc\xa8\xcb\xad\x54\xc9\x8c\xe5\xb4\xde\x24\x59\x30\x71\x72\x7e\xf6\xc3\xef\x2f\x1b\x3f\x2c\xaf\x7d\x69\x50\xce\xa7\x13\x06\x5d\x18\xa8\xd3\xc5\x7c\x3a\x48\x7d\x02\x16\xa6\xb9\x20\xe4\x2d\x17\xea\x8c\x54\x8e\x67\xbc\x71\xdb\x40\x27\xb8\xb5\x4a\xb8\x0a\x88\x4c\x83\xd0\xc5\xfd\xe6\xea\x38\xd5\x68\x65\x16\xe1\x59\x6a\x61\x56\x47\xef\x38\x37\x4f\xbd\x68\x61\xd7\x34\x22\x06\x19\x59\xe9\x2b\x3f\x61\xea\xaa\x26\x41\xce\x25\x8e\xa6\x5c\x3d\x47\x48\xb1\xd2\x10\xb7\x50\x0a\xd7\x34\x7a\xe0\x7b\xdf\x97\xcc\x8c\x1b\x67\x6d\xba\x34\x94\x25\x2d\xf1\xa6\x5c\x3b\x12\x9a\xc8\x3c\xaf\x04\xd7\xf3\x27\x40\x0d\xf9\xb8\x32\xbb\xf1\x24\x65\xd7\x2c\x7b\xa2\xf8\x74\x48\xcb\x64\xc6\x35\x4b\x74\x55\xb2\x27\xb4\xe0\x43\x98\xac\xc0\x00\x9c\x3c\xfd\x37\x4f\xc7\x9b\x4a\xe7\x4a\x0e\xb3\x4c\x46\x88\x61\x0d\xf5\xf4\x78\xd0\xdb\x1e\xdb\x6f\x47\x35\x6a\xa1\x4a\xf2\xcb\xcb\xf7\xb5\x8b\x11\xab\x23\x01\x84\x03\x27\x5b\x0d\x6c\x03\x28\xe8\x5d\x64\x8b\xc2\xbb\x74\x56\x9f\xc4\x0a\x3d\x01\x32\x6e\x74\x12\x55\x8d\x73\xae\x95\x8b\xb2\xc4\xa8\xc3\x17\xc0\x41\xa0\xae\x28\x5a\x6a\x46\xe4\x4c\xd4\xfa\xfd\xad\x83\x1a\xa2\x82\x86\x06\x7c\xed\x81\x1d\x32\xc0\xc5\x17\x96\x28\x52\x8e\x45\xad\xdc\x9d\xe0\x8c\x5f\x16\x2c\xf1\xa7\xc1\x9f\xe9\x13\xac\xaf\x6f\x1b\x39\xf8\x40\x4e\x89\x1d\xc9\xe1\xe5\x85\x90\x82\x35\x7a\xdd\x6a\x5d\x6e\x48\x96\xd0\xd3\xf8\xa7\x25\xb1\x0b\xc3\x76\x6c\x84\x6c\x50\xc8\xdc\xa7\x37\xdb\x81\x1c\x6f\xb0\xda\x31\xf4\x45\xf0\x0c\xc3\xe6\xa0\x80\xae\x2c\x42\xd8\x42\x5e\x46\x10\xa2\x6c\x20\x7b\x70\xe2\x8a\x41\x62\x2f\x81\x37\x54\x54\x34\x5b\x1a\xc0\xb6\x56\xbe\x73\xb0\x59\x5d\x53\x62\x55\x35\xe4\xd5\xa0\xeb\xb4\x3e\xc5\xda\xd9\xdb\x1c\xf1\xb5\x65\x35\x56\x05\x78\x21\x36\x6e\x5d\x8e\x23\xe8\x39\xb0\xca\xa5\xb9\x4f\x0c\xd2\x41\x78\xa6\x16\xc2\x46\x90\x81\xae\x0f\x1d\x51\x9a\x15\xaa\x2e\xcc\xa1\x25\x49\x64\x5e\x64\x4c\xc7\xbc\x17\x22\x7a\xb7\x8b\x51\x6a\x06\xec\xee\x78\x52\x6d\x9d\x96\xcb\x15\xfe\xda\x21\x5a\x76\xb7\x39\x7f\x5a\x33\x51\x19\x2a\x7c\x19\x55\x8e\x5f\xd1\xf2\x37\x3e\x92\xab\xdf\x0d\xeb\x32\x62\x06\x6e\xdc\x5d\xca\xc5\x98\xb8\xca\xd2\xa9\x0d\x4c\x4d\x83\x54\xbd\xd5\xa1\x25\x7b\xc6\xe9\xac\x96\x55\x96\x2f\xb3\xce\xa3\x59\xe8\x94\xbb\xe2\xfd\x8d\x6a\x21\x24\x29\xae\x8b\xc6\x8b\x39\xf9\x99\x05\x68\x69\x7b\x8a\x52\x52\x70\x86\x81\xf7\x5e\x1c\x02\x80\x31\x9a\xda\x9b\x86\xe1\x95\xcc\x07\x97\x5b\x7b\x37\x0c\x50\x8b\x4b\xd0\x03\x8a\x62\x94\x3b\xf9\xaf\xcb\x77\x6f\x9f\x7c\x2b\x6d\x02\xa5\x6d\x33\x03\x98\x9c\x43\x3c\xbc\xeb\xa6\x92\x32\x65\xd0\xf3\x12\x8c\xe7\x39\x15\x7c\xc2\x94\x1e\xf9\xba\x28\xea\xc3\xd7\x9f\x46\x61\x5e\xc1\xc0\x15\xc2\xf7\x42\x85\x45\x0d\x20\xe5\x66\x31\x75\x49\x51\xdf\xc0\xb6\x90\xae\xeb\xcc\x0d\x4c\x56\xd3\x2b\x43\xbf\x71\xb2\x95\xd1\x65\xae\xd8\x73\x72\x80\xaa\x89\xff\xf4\x3f\x8d\x18\xfe\xaf\x03\x72\x74\x03\x21\xcf\x07\xe6\xcf\x03\xfc\xa0\x97\x01\xc3\xc6\x4b\xf5\x87\x31\x50\xba\xe4\xd3\x29\x2b\xad\xef\x08\xcc\xaa\xd0\x5f\x86\x43\xcb\xd8\xfa\x61\x61\xfb\xef\xd5\x75\x46\x9b\x13\xf9\xf0\xf5\xa7\x03\x72\x14\xaf\x8b\x70\x91\xb2\xcf\xe4\x6b\xef\x7e\x28\x64\x7a\x6c\xa3\xb2\xd4\x5c\x68\xfa\xd9\x8c\x99\xcc\xa4\x62\x02\x43\xbe\xb5\xc4\x96\x3f\x4a\x82\x67\x2b\xcb\x86\x28\x25\xa4\xe4\x06\x53\xa5\x1d\x28\x31\xf5\x18\xca\x34\xc5\x12\x32\xb6\x5b\x86\xaf\x99\x6d\x9b\x82\x69\xc5\x48\x5f\xd8\x13\x08\xb3\x22\xc2\xca\x50\xaa\xc2\x4d\x32\xa4\x6f\x46\x05\xb8\x59\x6c\x2b\x21\x23\x4f\x8d\x56\xf9\x24\x37\x62\xfc\x3a\x93\xd6\x12\xb1\xb5\x4d\x4b\xea\x3b\x12\x0a\x5b\x2f\x71\x9d\xc1\xec\x5e\xbb\x6e\xef\xb5\xa2\xb5\xd1\x47\x8b\xcb\xc2\x90\xa3\x3b\x58\x1b\xf4\x26\x7e\xb2\xf3\xd2\x9c\x48\xbd\x0d\x27\x38\xbc\xc4\x03\x9f\x34\xdf\x36\xc7\x05\x23\x0e\xad\xd2\x1a\x50\xb8\x9c\xa6\x48\x02\xa9\x98\xdf\x3a\x1a\x1b\x00\x82\xd7\x36\x99\x0f\xad\x5d\x6e\x48\x45\x6a\xfe\xaf\xb8\xd2\xe6\xfe\xce\x10\x5b\x63\x08\x8d\xa1\xf4\xfd\xd9\xe9\xdd\x20\x77\xc5\x77\x3c\xad\xe3\x4a\xa4\x19\x7b\x2d\xe5\xd5\x8a\xf4\xe7\x68\x41\x7f\x0b\x9f\xf6\xde\x39\xd4\xd2\xb8\x18\xfa\x18\xda\x40\xcb\x25\x45\x95\x21\x79\xad\x44\x41\x93\x2b\x3a\x65\xf6\xa3\xc0\x46\x6c\x51\x03\xd4\x94\x41\x15\xe8\xb4\x96\xde\xca\xd9\xa3\x35\xc0\xce\x73\xc5\x34\x1d\x5f\xb4\xa5\x16\xa8\x9b\xf7\xe6\xf9\x76\xe2\x57\x8e\x24\xdc\x0b\x36\x59\xf9\xa0\x6f\x0d\xb0\x2a\xff\x64\x08\x6d\xe0\x56\xfe\xe8\x8a\x3f\x2f\x7d\x60\xb3\x0f\xb1\x39\xcf\xb6\xd1\x4d\x8d\xd7\xdc\x8e\x38\x82\x61\xa1\x1c\x3d\x06\x77\xec\x2e\x40\xe7\xbe\x1b\xaa\x80\x02\x65\xd7\x36\x32\xe7\x4e\xca\x40\x6d\x16\x9b\x97\xac\x77\x07\xe1\x39\x9c\xf8\x46\xbf\xdd\x46\x41\x7a\xc9\x9c\x7a\x71\xba\x17\xa7\x1f\xb8\x38\xbd\xd5\x19\xd8\x1c\x7a\xf0\x38\x04\xec\xad\x16\xbd\x39\xda\xfe\x41\x8a\xdc\x5b\xaf\xb1\x45\xf0\xff\x83\x15\xc2\xb7\x5a\x6c\x4b\x81\x7c\xd9\x92\xbf\x64\xb1\x7c\x2b\x18\x6e\x8c\x87\x79\x80\x82\x7a\xeb\x05\xae\x4f\x0a\x59\xb2\xbe\x20\x1f\xa3\x61\x07\x36\x93\xc6\x76\xf6\xde\x4e\x1b\x8a\xc9\x9b\xc4\xa9\x4e\xaa\xde\x76\x16\x7d\xd7\x2a\x6c\x6e\x65\x29\x66\xbc\xda\xc6\xcc\x6d\x93\x2d\x82\xd7\x9a\x38\xf3\x3a\xae\x78\xef\xb4\x11\xbc\xb6\xc8\xac\x6a\x9b\x88\x51\x2f\xbb\x4d\x22\xc9\x16\x4b\x36\x32\x7c\x51\xca\x71\xdb\x5a\x39\xb7\xb0\xaa\x96\x51\x86\x7b\x86\xb3\x43\x76\xbe\xdf\xdf\xce\x16\xbb\x29\x89\x63\xc9\xdc\xb1\x8e\x5f\x14\x49\xe6\xf7\xe3\x50\xc1\x26\xdf\xc6\x4c\x77\x0e\xbe\x0c\xc4\x6a\x9c\xe4\xc0\x79\x30\xdf\x97\x15\x1b\x90\x57\x34\x53\x6c\x40\xbe\x17\x57\x42\xde\x74\x37\xdf\xf5\x15\x19\x96\xcc\xf6\xbd\xad\xbd\xd0\x22\x57\xa8\xf5\x54\x6a\xed\xbe\x25\xb1\x3f\xf3\x2f\x38\x0b\x8d\xd5\xd0\x87\x95\xe0\x3f\x57\xb1\xa2\xe2\x9d\x4c\x47\x4d\x15\xe6\xc5\xe5\x0f\x80\x1c\xa8\x6e\xab\xa8\x90\xaf\xf9\x51\xad\x0e\xab\x6e\x93\x07\xb5\x56\x51\x8d\x13\xc3\x8d\xa2\x1f\xab\x5a\x99\x2d\xc9\xd8\x34\xcb\x14\x55\x96\x8d\xc8\x99\x3e\x54\x66\x0e\x3c\xa1\x59\x36\x37\x5a\x4b\xa3\x43\xda\x7e\x19\x5c\x2d\x18\xc4\xc2\x61\xc3\x8a\x2b\xfc\x9a\x05\xaf\x3b\x40\xa3\xc1\x89\xa5\x76\x1d\xfb\x95\x89\x5c\xd3\x0b\x6c\xc9\xd4\x2e\xec\xe3\x0e\x51\xc2\xfd\xaf\xa1\x6a\x07\x45\x5d\x13\x90\x46\x30\x32\x91\x95\x48\x09\xd5\xb0\x3d\x3b\xce\x39\xf6\xe1\xde\x9d\xc3\x7f\xbd\xfc\xd4\x8d\xb1\x31\xf0\xc0\xd7\x79\x7c\x6b\x84\xaf\x9a\xc8\xb1\xcf\x2c\xa9\x82\x18\xaf\x30\x86\x63\x37\x5b\x63\xb7\xb9\xaf\xf7\x92\x98\x7a\xb7\x39\xa5\x5d\xa7\x4e\x7a\x0c\x68\x1f\xd5\xdd\x4e\x54\xe8\x20\xf6\xbc\x4d\x61\xa7\xf6\x95\x89\x96\xa1\x3d\x70\x45\xdb\x0b\x9c\xa9\x60\x85\x0b\xf8\x6d\xe8\x09\x85\x0a\x2c\x86\xc9\xd8\x4e\x10\x50\xa7\x6a\x26\x77\xa6\x8c\x6d\xf3\x13\xdf\x38\xf9\xcd\x7c\x10\x64\xbb\xe1\x82\x6c\x67\xf9\x5f\x2d\xdb\x41\xc3\xa2\x3a\x94\x06\x98\x64\x4e\xe7\x10\x9a\x96\x17\xb2\xd4\x14\x1d\x1c\x95\x48\x59\xa9\x34\xc5\x1a\x25\x2e\x2f\xaf\x30\x6b\x9e\x51\x45\xb8\x56\x24\xb1\x49\x86\xb8\x61\xb7\x94\xc9\x18\x00\xfb\xdc\xbc\xe0\x45\x84\xe8\xe3\xc8\x57\xa3\x8d\x59\xbb\x0b\xeb\x27\x96\xd1\x35\x81\x55\xfb\xd2\xd9\x4b\xcd\x8a\x26\x5d\x0d\x16\x21\x40\x1c\xbf\xe6\x29\x06\x23\xb1\x82\x70\xd1\x0d\x51\xdd\xec\xc0\x41\xc7\xc4\xea\x63\x35\xf4\x56\x9a\x95\x0f\xac\xd1\x68\x37\x13\x75\x59\x60\xa4\xfc\xa6\xb3\xbf\x2a\x36\x0f\x2f\xbf\x8a\x3d\xc9\xe5\xea\x48\x39\xbc\x16\x76\xd5\x65\x5f\xac\xd9\xdd\x20\x56\x17\xa2\x41\x75\x69\x25\xa9\x79\xab\x3d\x26\x77\x5d\xe5\x66\x43\xea\xdf\xc6\x42\x2c\xc3\x20\x70\xb0\xe5\x63\x60\x98\x5c\xfb\xec\xa6\x3c\xc2\xbb\xae\xab\xb3\x67\xc5\x94\xfa\x72\x2e\xa4\x4e\x06\xdb\x6c\x65\x6f\x39\x50\xbd\x35\x1d\x0f\xd7\xc2\x3e\xde\x72\xcc\x56\x09\x80\xdd\xa7\xbd\xb1\x22\x4e\xfb\x5d\xc6\x93\x0a\x5a\x6a\x9e\x54\x19\x2d\xeb\xb3\x0f\x44\x7e\x21\x6f\x69\xeb\x39\x2b\x4d\x4b\xdd\xaa\xc8\xc2\xa5\x7b\xd2\xd7\x5c\x84\x82\x0b\x33\x26\xbc\xf3\x0f\xd3\xc0\xc8\x98\x4d\x0d\xf3\x2c\x8a\x6c\xee\x72\x0c\xea\x08\xf6\x8c\x2b\x5d\x37\x3c\x04\x59\xa0\x6d\x28\xc4\xd6\xe5\x1a\x7e\xd5\x79\x74\x32\xcb\x13\x29\x26\x7c\x7a\x77\x59\x74\xef\x5e\xbf\x79\x01\x9f\x84\x7b\x75\x0e\x9d\xbf\xbf\x90\x41\x57\x4f\x12\x6e\xd7\x49\x72\xfe\x87\x3a\x45\xce\xd6\x73\x58\x92\x1f\xe7\xb2\xaf\xdc\x7e\xee\x98\x77\xe5\xa7\xe9\xa2\x32\x3c\x2b\x56\x85\x14\x8a\x1b\x99\x18\xea\x67\xc1\x43\xd8\xf1\xe5\xdd\xeb\x37\xdd\x26\x5d\xf5\x19\x56\x7d\x86\x55\x9f\x61\xb5\xe9\x40\xb5\xc8\xb0\xf2\xa7\x19\xf2\xab\x5c\xd8\x9e\xf9\xbf\x4d\x13\xaa\x8f\xbb\xaf\x69\xdd\xf6\xe3\xeb\xe5\xc3\x09\xa3\x06\x34\x9b\x23\x0b\x5f\xd9\x07\xeb\xce\x43\x51\x9e\xae\x25\x33\xa0\x8b\xbf\x7b\xfd\xc6\x8f\x7b\x0b\x39\x11\x29\x57\xe6\x33\x2f\x64\xc1\x59\xfa\xe2\xf2\x87\x76\x8d\xa9\x4f\x9b\x6f\x45\x39\x1d\xf8\xa3\x99\xf9\xa1\x22\x07\xf8\x10\x79\x71\xf9\xc3\x81\x5b\x08\x6c\x44\xdd\xbc\xcc\x67\xb5\x11\xaa\x43\x81\x00\xe9\xff\x80\x60\x14\x12\x8d\x6f\xa7\x51\x73\x27\x29\x6c\xa7\x9d\x19\x55\x64\xcc\x98\x08\x06\x45\x15\xf8\x9d\x7d\x1a\x4a\x81\xda\x38\x25\xa8\xe0\x8d\x1d\x03\xea\xa8\x86\x11\xf9\xd1\x88\x36\x25\x63\xc2\x2c\x23\x1d\xc0\x16\x60\x85\x5c\x06\xbc\x17\x5d\x7a\xc1\xc2\xd4\x01\xac\x08\xca\xf8\xac\x98\xe4\xfa\x8c\x91\x75\x3a\xa9\x8d\xcf\x44\x22\x71\x39\x17\xc9\x99\xa1\xb1\x2b\x52\xe7\x16\x76\xea\x7c\xd5\xdb\xd1\x8e\x01\xbf\xc0\x73\x32\x17\x09\x52\x71\xf3\x8c\x59\x95\xfd\x7e\x09\x32\x55\x69\x1b\x33\xd8\x61\x83\x7b\xa4\x60\x25\x97\xa9\xf5\x42\x24\x33\x96\x5c\x35\xf4\xd7\x28\xb6\x51\xfd\x1f\x1b\x4b\x17\x15\x6e\xc7\x31\x48\x05\xfd\x11\xd2\xaa\xee\xd8\x91\x53\x4d\x8e\xa0\x5e\xd3\xc1\x1f\x9f\xe6\x07\xc7\x18\x19\x87\xe1\x5f\xb4\xa4\x39\xd3\xac\x1c\x60\xb4\xd7\x4c\x56\xa5\x22\x47\x07\xb3\x83\xe3\x01\xc9\xb9\xa8\x34\x33\x7f\xe6\xe6\x4f\xc3\x8e\x14\xd6\x38\x27\x47\x07\xea\xe0\xd8\x59\xaf\x7c\x08\x9a\xdd\x7d\xe8\x59\xe1\xee\x0d\xc2\xb9\xd9\xa6\xbc\x9e\xf1\x21\xe5\xaf\x43\xd8\x6c\xe8\x1d\xbc\x11\x02\x69\xe7\x94\x21\xf0\x1e\x19\xae\xfa\x9c\xfc\xcf\xd1\x87\xa7\xc3\x3f\x7f\xfa\xdd\xd1\xc7\x11\xfe\xe7\xf8\x9b\x23\xf5\x4b\xfe\xcb\xec\xf8\xf8\x77\xbf\x8d\x89\xe4\xe6\xac\xb9\x9a\x4c\xae\xac\x3e\x74\x8b\xa4\xf2\x2e\x9c\x12\x07\xb5\x2b\xc2\xd3\x59\xe7\xa3\x06\x0a\x24\x18\xa1\x66\xe7\xb4\xf7\xb8\x06\x3a\x58\xdd\x49\xe2\xe4\xfc\xcc\xd7\x20\x1e\x91\xe1\x70\x68\x83\x0d\x75\x59\x25\x1a\xeb\x8a\x69\xec\xfc\x65\x46\x4d\x79\x09\xa2\x8e\x62\x60\x46\x74\x0d\x0e\x2d\x69\xc3\x08\x41\x88\xe6\x1d\x59\xd3\x67\x0d\x8a\x11\x89\x03\x3e\x3f\x0a\x80\x04\x79\x25\xa5\xdd\x24\xfc\xe6\x3f\xc9\x93\x27\xe4\xa2\xe1\x5d\x19\x1b\x3c\xb3\x6d\x7d\x40\x79\x9c\x48\x79\x18\xdb\x59\xd9\xc8\xbc\xf8\x9d\x90\x37\x62\xd9\xd7\xe1\x5b\xb4\x64\xcf\xc9\xc7\x83\x93\x6b\xca\x33\x43\xff\x3e\x1e\x0c\xc8\xc7\x83\x73\x1b\xeb\xce\xc5\xf4\xa3\xed\x95\xf1\xf1\xe0\x94\x41\xd3\xfa\xf4\xe3\x81\x19\xf6\x77\xd0\xf1\xf0\x0d\x2b\xa7\xec\x3b\x36\xff\x4f\x18\xcc\xdf\xbe\xc4\xee\x88\xf3\xff\xc4\xe6\x88\xe6\xbe\xe1\x76\xef\xe7\x05\xfb\xcf\x9c\x16\xfe\xc6\x1b\x5a\xf8\x97\x83\x30\x9e\x0f\x9f\x8c\x98\x70\xfd\x6c\x54\xef\xe8\x4f\x7f\x57\x52\x3c\xff\x78\x10\xd4\x7f\x95\xb9\xc1\x8c\x42\xcf\x3f\x1e\x90\xe8\xab\xcf\x3f\x1e\xc0\x77\xdd\x7d\x37\xc9\xe7\x1f\x0f\xcc\x97\xcc\xed\x52\x6a\x39\xae\x26\xcf\x3f\x1e\x8c\xe7\x9a\xa9\xc1\xb3\x41\xc9\x8a\x81\xe1\x0a\xff\x59\x7f\xe1\xe3\xc1\x4f\x66\x4f\x9e\x3c\xc1\x06\x2f\xb8\x99\x8a\xfc\x6b\x79\x57\x96\x0e\x6c\xaa\x8b\x8e\xaa\x95\x8f\x6e\x2a\xae\x86\x4e\x97\x5d\x4c\xaf\x7b\x76\x74\xdf\xb9\xd0\xec\xe2\x8b\x75\xab\xd7\xfd\xc2\x89\xec\xf9\x45\xdd\x66\x1c\xd8\x32\xc0\x6f\x81\xc6\x8b\x7a\x54\x0c\xe0\x4d\x47\x04\xdb\x89\x62\x02\xab\x61\x10\x10\x7e\x01\xcc\x41\x58\x96\xb5\x68\x1d\x31\xb4\x03\xcf\xbc\x1d\x06\xd4\x86\x24\x61\x85\x36\xa7\xeb\x8e\x0a\xe2\x6e\x57\x56\x36\x5f\x70\x0d\xed\x1e\xf6\x83\xa0\xb6\x5c\x96\xba\x56\xd8\xb8\xac\x3d\x17\x9f\xd3\xcf\xaf\xa1\x2f\xd9\x73\xf2\xfb\xaf\xff\xf4\xc7\xff\x58\xe5\x17\x18\xa3\x35\xe8\xdb\xb5\x79\xef\x4b\xc0\xb0\xf8\x62\xd3\x36\x3f\x72\xca\xcb\xa8\x4e\xaa\xaf\xbb\x0f\xc7\x31\x5f\x8a\x69\x32\x06\xf7\x67\x55\x18\xb8\xbc\x72\xa9\xce\x22\xc1\x78\xd4\xa5\x83\x71\x4f\xc0\xb3\x39\x79\xf6\x35\x36\xd4\x82\x4f\x2f\x90\xef\x0f\x9f\x3f\x8d\x96\x4c\x99\x2b\xf2\xe7\x41\x63\x3e\x46\x60\xae\x80\xe9\x19\xc4\xc1\x48\x87\x92\x21\x27\x74\x36\xb9\x45\x4e\xc8\xfc\x7c\x37\x6d\xdc\x16\xfd\x61\xfe\xf8\x87\xd5\xfb\xcb\x05\xcf\xab\xfc\x39\x79\xba\xd2\xcb\xb2\x85\x53\xda\x3a\x9d\xbd\x20\x40\xb1\x07\x02\xcd\xa1\x20\x44\x10\x77\x14\xa2\xb6\xde\x2e\x72\x8c\x9c\x97\x32\xad\x12\xa3\xcb\xcb\x89\x93\x09\x93\x90\x40\x41\x63\x22\x73\x1a\xac\xc8\xcd\x3e\x1b\xa0\xb3\xba\x43\x95\x48\xa1\x83\x13\x17\x53\x55\x57\x01\x05\x02\x82\x5c\xf7\x66\xc6\x80\xf5\xe8\xb0\x87\x2d\xcc\x4a\xf1\x14\x72\x2e\x28\x99\x56\xb4\xa4\x42\x33\xec\xf4\x81\x7d\x6c\xad\x98\xea\x49\x1e\x0d\x0a\xab\xda\xd3\x88\x47\x15\x89\x95\x99\xa2\x35\x25\x60\xff\xe3\xce\x8e\xea\xb3\xa7\x5f\xaf\xdd\x72\xff\xdc\x6a\x0f\x8d\x17\x87\x3f\x9c\x0c\xff\x1f\x1d\xfe\xe3\xd3\x91\xfd\xcf\xd3\xe1\x9f\xff\x77\xf0\xfc\xd3\x57\xc1\x9f\x9f\x8e\xbf\xf9\x6d\x17\xf6\x7a\xd5\x69\x64\x5e\x2b\xa0\x6d\xee\x38\x74\x60\xbe\xba\xae\x25\xdc\x90\x1c\xc0\x94\xd6\x3f\x63\xa7\xbb\x4e\x41\x69\x07\x24\xdd\x0c\x08\x34\xba\x77\x8d\x67\x40\xf1\x8c\x58\x3a\xb2\x12\xee\x28\x91\xf9\x93\xc0\x3c\x65\x44\xeb\x37\x54\xcc\x49\x4d\xd6\x50\x28\x6d\x62\xba\x82\x2c\x45\x9a\x94\x52\xa9\xc8\xc5\x70\xc5\x88\x97\x5c\x91\x58\x8e\x59\x42\x41\x16\x2f\xc7\x5c\x97\xb4\x9c\x07\xaa\x87\xeb\x90\x50\x29\x36\xa9\x32\x72\xa4\x18\x23\x23\x21\x53\xb6\x48\x5d\x8f\x91\x86\xd2\x31\xcf\xb8\x9e\xa3\xd2\x9c\x48\x31\xc9\xb8\x55\x01\x5c\xf8\x83\x6b\x1b\x3d\x65\x9f\x09\xd7\xd8\x55\x0d\x43\xce\x8e\x52\xa1\x9e\x3d\xfb\xfa\xf7\x97\xd5\x38\x95\x39\xe5\xe2\x55\xae\x9f\x1c\x7f\x73\xf4\x73\x45\x33\xd0\x1d\xdf\xd2\x9c\xbd\xca\xf5\x5e\x91\x86\x31\x5b\x7c\xf6\xc7\x16\xa7\xe8\xe8\x03\x9e\x95\x4f\x47\x1f\x86\xf6\x7f\x5f\xb9\x5b\xc7\xdf\x18\x5d\x73\xdd\xef\xc7\x5f\x99\x35\x04\x27\xf0\xd3\x87\x61\x7d\xfc\x46\x9f\xbe\x3a\xfe\x26\xf8\xed\xf8\xb7\xbd\x87\xa6\x76\xb9\x04\xba\xd7\x9d\x79\x6a\xec\x18\x5e\x91\x6a\x7a\x6c\x9a\xbf\x2f\x7a\x6e\x16\x26\x8f\x1e\x9c\x25\x15\x10\x93\xe8\x23\x81\x8f\xa7\x39\x44\xcb\x72\x88\x5d\xb9\x7b\x9a\x6b\x44\x49\x17\x71\xc3\x6b\xfa\x40\xeb\x0d\xf1\xf9\x69\xe1\xf9\x9f\x6c\x76\x51\x60\x42\x03\x4b\xf8\x3c\x8e\x8e\x92\x60\x39\x8c\xeb\x0d\xf9\x64\xd3\x25\x76\xc1\xde\x87\xd4\xfb\x90\x7a\x1f\xd2\xc3\xf0\x21\x35\x8f\x3c\xf8\x92\xa0\x1f\xaf\x0a\x3c\x11\x34\xcd\xb9\x58\x71\xfc\xd7\x9f\x7b\x4b\x1d\x06\xa4\x90\x46\x96\xe1\x60\x35\x97\xd7\xac\x2c\x39\xc4\x4c\xe2\x3b\x25\xab\x3b\x58\x86\xf9\x0b\x1d\x19\x61\x53\x56\x64\x72\x9e\xaf\xaa\x7b\x7f\x3b\xe1\xe8\x76\x91\x1d\x47\xc0\xf7\x86\xdf\xde\xf0\xfb\x05\x19\x7e\x7b\x6b\x6e\x6f\xcd\xed\xad\xb9\x4b\xae\xde\x9a\xdb\x5b\x73\x7b\x6b\x6e\x6f\xcd\x5d\xb8\x7a\x6b\xae\x7d\xa6\xb7\xe6\xf6\xd6\xdc\xbb\xb6\xe6\xd6\x97\x8a\x2a\x42\xdf\x91\x5a\xd9\x26\xda\x69\x41\xa1\xb7\xbd\x79\xad\x4a\x1f\x6b\xe6\x4b\xd4\x79\xae\x95\xcb\x54\x05\xcd\x7d\x14\xf6\xf0\x6b\x59\x0c\xbc\x1b\xad\xbd\x0f\x9d\xea\x35\xe8\x5e\x83\xee\x43\xa7\xe2\xab\x57\xb6\xfd\xd5\x2b\xdb\xbd\xb2\xdd\x2b\xdb\xbd\xb2\xdd\x2b\xdb\xcd\xab\x57\xb6\xf1\xea\x95\xed\x5e\xd9\x5e\x72\x3d\x0e\x65\x7b\x5d\xe8\xd4\xc4\xa0\xac\xbb\xb9\x29\x76\x8a\x84\x41\x35\x5f\xf7\x41\x35\x7d\x50\x4d\x1f\x54\xd3\x07\xd5\xb8\xeb\xae\x83\x6a\x62\x0b\x1c\x46\xbe\x44\x16\x37\xc0\xd9\xa2\x94\xd7\x3c\x65\xaa\x11\x82\xe3\x8b\x35\x06\x5c\x26\x87\xf6\x8e\x75\x58\x0d\xbb\x9b\xa0\x9a\xde\x3c\xd7\x9b\xe7\x7a\xf3\x5c\x6f\x9e\x8b\xaf\xde\x3c\xe7\xaf\xde\x3c\xd7\x9b\xe7\x7a\xf3\x5c\x6f\x9e\xeb\xcd\x73\xcd\xab\x37\xcf\xe1\xd5\x9b\xe7\x7a\xf3\xdc\x92\xeb\x71\x98\xe7\x42\x0c\xea\xd3\x2b\x7a\xed\xb3\xd7\x3e\x1f\x9e\xf6\xd9\xab\x94\xbd\x4a\xd9\xab\x94\x4b\xae\x5e\xa5\xec\x55\xca\x5e\xa5\xec\x55\xca\x85\xab\x57\x29\xed\x33\xbd\x4a\xd9\xab\x94\x7d\x7a\xc5\x96\xe9\x15\xef\x5e\xbf\x09\xe2\x39\x30\xce\x23\xc0\x2c\xe8\xce\x0e\x55\x9b\x1d\x4f\xee\x7d\xb1\xbd\x36\xdc\x6b\xc3\xbd\x2f\xd6\x5e\xbd\xe2\xdc\x2b\xce\xbd\xe2\xdc\x2b\xce\xd1\xc6\xf5\x8a\x73\xaf\x38\xc7\x5b\xd9\x2b\xce\xdb\x03\xad\x57\x9c\x7b\xc5\x79\xc9\x56\x7c\x19\x8a\x73\x5f\x65\x56\xcb\x12\xaa\xc7\xde\x7d\x85\xd9\x6f\x7d\x7f\xd8\xc5\xea\xb2\xf0\xdb\xca\xca\xb2\x38\x61\xf8\x69\x59\x55\x59\x89\x58\xb9\x58\x4e\xd6\x75\xa4\xbd\x87\x52\xb2\xd8\x55\xca\x2a\x0e\x95\xe0\x20\xf6\xe4\x55\xa6\xb9\x66\x82\x8a\x64\x0e\x6c\xf6\xdd\xeb\x37\x24\xa7\x82\x4e\x83\xc6\x50\x6a\x44\xce\x34\xd0\x1b\x5d\xfa\x4e\x60\xb6\x79\x95\x4f\x00\x09\x7b\x65\x41\x25\x0a\xdf\xae\x0a\x14\x8e\xa0\xfd\x90\x11\x00\x0d\xfb\x80\xd6\x56\x61\x57\xab\xdf\x34\x0f\x78\x9f\x12\xd3\xa7\xc4\xf4\x29\x31\x0f\x24\x25\x06\xe8\xc7\xca\x7e\x85\x11\x91\xd9\xa1\x11\x97\xed\x59\xb6\x28\x5f\x55\x05\xd8\xd6\xbc\x05\x8b\x9c\xe2\x93\x5b\x98\x58\x15\xcb\x58\xa2\x65\xb9\x4c\x78\x8b\xdb\x08\xdb\x07\xed\x1b\xb8\xcc\x68\x69\x87\x6a\x3d\xdd\x6a\xb1\xd2\x4d\xb3\x25\x20\xba\xe8\x64\xf6\xf2\x73\x01\x96\xc6\x15\xa6\xe1\x85\xd9\x37\x5f\xc2\x13\xe5\x3a\x36\x66\x74\xcc\x32\x0f\x0a\x47\x49\x73\x3c\x32\x28\xa9\xd5\x77\x40\xc0\x3c\x79\x7b\xba\x68\xe5\x8e\x17\xb8\xca\x30\x4d\xd6\x1b\xa7\x17\xa6\x7e\xb2\x66\x7a\x96\x30\xb8\x5f\xc0\xaa\xe0\x95\x57\x24\x7a\x03\x42\xc9\x15\x9b\x23\x7d\x8c\xb2\xb4\xcc\xc3\x25\x03\x6a\x0a\x9b\x79\xc5\xe6\xf0\x90\x25\x96\x1b\x04\xcc\x4e\x9a\xd0\x5f\xb1\x55\x10\xc2\xdf\xdd\x64\x57\x0b\xa8\xad\xda\xbd\x5f\xb1\xf9\xba\x9f\x1b\x00\x37\x70\xf0\x36\x44\x03\x79\x73\xc3\x1b\x6c\x3c\xb0\x69\x51\x64\xd0\xf8\x50\xae\x06\x15\x69\xdf\xc6\xdc\x2d\x75\x8b\x89\xfa\xad\x0c\x2c\x4e\xb0\xd9\x87\x0a\x37\xd6\x60\xfa\x8c\x17\x56\xc8\x40\xd1\xc2\xb1\xc2\x1f\x68\xc6\x03\x31\x06\xb0\xfa\x4c\x0c\xc8\x5b\xa9\xcd\x3f\x2f\x3f\x73\x43\xea\x0d\x3e\x9c\x4a\xa6\xde\x4a\x0d\x77\x3a\x59\x2a\x4e\x61\x8b\x85\x5a\xcd\x8e\x07\x9e\x12\x39\x89\xf8\xa1\x11\xc3\x26\x51\x3a\xa0\x79\xfa\x4c\x18\x75\xd2\xae\x28\x32\x86\x98\x21\xf2\x4a\x01\x03\x13\x52\x0c\xd1\x7e\xb1\x6c\x0c\x0b\x08\x59\x46\x70\x58\x33\x9c\x1d\x0a\xec\x24\xf8\x0b\x4a\x40\x99\x11\x65\x49\x8a\xed\xa7\x81\x9b\x1b\xa2\xcd\x13\x82\xde\x0e\xf0\x39\xb4\x01\xef\x3a\xba\x82\xd7\x06\xea\xd2\x72\xaf\x80\x64\xbe\x36\x07\x60\x0b\x12\x8b\xcf\x23\x59\xca\x69\x61\xb6\xe9\x9f\x86\xfa\x00\xa4\xfe\x45\x0a\xca\x8d\xc4\x7c\x02\xd2\x7f\xc6\xa2\xdf\x6c\xd7\xcd\x70\x18\x33\x02\x57\xc4\x90\x92\x6b\x9a\x19\x7a\x07\xf6\x79\xc2\x32\xa4\x7e\x46\x48\x6f\x10\xf6\x01\xb9\x99\x49\x85\xc4\x0c\xad\x54\x5c\x91\x83\x2b\x36\x3f\x18\x2c\x6c\xed\xc1\x99\xb0\x6e\xaa\x85\xcd\xf4\x44\x14\x7a\x92\x1e\xc0\x6f\x07\xbb\xf3\x82\xb5\xc4\x92\xa6\x68\x3e\xa0\xd9\x79\x0b\x6a\xb6\x76\xdf\x62\xff\xb2\xd1\xa0\x5a\xf0\xf5\xe6\x2b\x8e\xf8\x61\x6a\x6e\xa8\x9b\xc0\x93\x84\xe2\xa3\xd6\x0f\x0c\x9d\x75\xd1\x3c\x62\x9b\xd1\x16\x99\x9c\x7b\x38\x1f\xa9\x63\xdc\x59\x23\x8f\x3a\xd8\x83\xa6\xb7\x5a\x34\x58\xb5\x38\xa3\x3e\x24\xe7\x98\x41\x9c\x9e\x9c\x9f\x6d\x6e\xd4\x7c\x09\xaf\x10\xcd\xb2\x0c\xbd\xd8\x46\x66\xd5\xd2\xca\xac\x4b\x45\x98\x22\x18\x3f\x50\xf2\x57\x4e\x76\x55\xef\x5f\x14\x85\xbc\x12\xbb\x79\xae\xef\x1b\x2f\x58\x72\xc7\x3e\x17\x19\x4f\xb8\x76\xf4\xbb\x96\xad\x40\x1f\x82\x97\x80\x70\x71\x90\x06\x14\xd3\x83\x5a\x56\xe3\x8a\xf0\xa9\x90\xe5\x72\xfc\xbc\x9d\x08\x76\x42\x3e\x0f\xaf\xaa\x31\x2b\x05\xd3\x4c\x0d\x8d\x8c\x35\xb4\x2f\xb0\xc5\x23\xd0\x14\x61\x37\x41\xe9\xe0\xfb\xf8\x85\x48\x01\xb5\x83\x39\xda\x3a\x5f\x68\x54\x0d\x4f\x79\x08\xc2\x79\x2e\x19\x5a\x0c\xbd\x03\x45\xdf\x48\xa2\xaa\xc2\x26\x99\x37\x86\x34\x47\x93\x7c\x14\x4e\xd0\x7e\x5e\x37\x97\x06\x42\x01\xf1\x12\x2e\xb7\xdd\x9e\x2c\xab\x29\xc3\x76\xe5\xf2\x9a\x39\x35\x16\x59\x82\x61\x06\xc5\x8c\x2a\x56\xeb\x60\xaa\x4a\x12\xc6\x52\x96\xe2\x0f\x96\x95\xb0\xc9\x84\x25\x9a\x5f\xb3\x6c\x0e\xc6\x7f\x85\x22\x89\xff\xbe\xc1\x6c\xfc\x7c\xbd\xe0\xc6\x17\x05\xfb\xac\x9d\x92\x4e\x38\x28\xe1\xb1\xa5\xa2\xf4\xcb\x9d\x51\x45\x26\x94\x67\x46\xaf\xfb\x28\xc8\x7b\x96\xcc\xce\x4b\x76\xcd\xd9\xcd\xf7\x42\xd1\x09\x7b\x45\x79\xf6\x4a\x96\x37\xb4\x4c\x03\x18\xdc\xc6\xf2\xcd\xac\xfc\x6f\x38\x25\x07\x97\x13\x4f\x38\xb3\x79\xd0\xe6\xdb\x7a\xc6\xcc\x7a\x6f\xdc\x02\xcf\x33\x03\x31\x70\xb8\x52\xa3\xd0\x7a\x8c\x22\x25\x9b\xb0\x92\x09\x73\x9e\xa8\x1b\x3f\x78\xc9\xb3\x87\x04\xdb\x5f\xd7\x1d\xca\xad\xde\x8b\x8e\x31\x0a\x1f\x73\xd0\x73\x6e\x20\x66\x44\x05\x68\x07\x82\x67\x37\x30\x1a\x7d\x14\xe4\xc7\x93\x8b\xb7\x67\x6f\xbf\x7d\x0e\x5c\x65\x1d\x84\x17\xf1\x9a\x2b\x52\xc1\x53\x81\xd5\x43\x55\x99\x36\x28\x5e\x09\xef\x2f\x1a\xb3\x19\xbd\xe6\xe6\x0c\x94\xd6\x1e\x72\xcd\xb0\x2d\xbd\x51\x83\x49\x26\x95\x19\x27\x63\x4a\x91\xb9\xac\x30\x8e\x27\x65\xac\x40\x17\xb7\xd2\x54\x40\x33\x13\xeb\xcf\x68\x2e\x82\x8c\x99\xf9\xd5\x59\xc4\x16\x4e\xd7\x32\x7f\xc2\x06\xca\xe1\x34\xdd\x15\x8a\x2c\x59\xeb\xf0\x18\xae\x79\xcb\xfc\xba\x0e\xc4\xb1\xda\xdf\x3e\x60\x0a\x15\xff\x75\x1d\xb8\xc3\x07\x2f\xb6\xd7\xfd\x57\xeb\x51\x18\xf8\xf1\x3d\x62\xe1\x16\x1a\xff\xfa\xa0\xaa\x68\x95\x41\x70\x4d\x43\xf6\x5e\xc6\x39\x83\x20\xa1\x2e\x99\x4d\x1f\xad\xd5\x47\x6b\xf5\xd1\x5a\xcb\x7e\xef\xa3\xb5\xfa\x68\xad\x3e\x5a\xab\x8f\xd6\xea\xa3\xb5\xfa\x68\xad\x3e\x5a\x8b\xf4\xd1\x5a\xf5\x33\x7d\xb4\x56\x1f\xad\x75\x7f\x69\x4e\x81\x62\xba\x51\xc7\x7c\x5d\x3f\x8b\xd2\x89\x76\xf1\x50\xee\x64\xc6\xa2\x61\x53\xeb\xb4\xa7\xd8\xf0\x63\x3b\xcc\xd6\x86\xe5\x36\x42\x97\x68\x6f\xc8\x8d\x4d\xb8\x81\xe5\x64\xc1\x3b\xee\x39\x50\xb4\xa8\x87\x6a\xaa\x8d\x9d\x0b\x17\x6c\xb2\xa5\x6f\xe1\x82\x4d\x42\x6b\x1b\x02\x26\x76\x29\xd8\x88\x15\xef\x73\xb8\x85\xf0\x81\xd5\x31\x4e\x4b\x97\x60\x84\x7d\x67\x32\xb5\xf8\x68\xd7\xb0\xd2\x17\xba\xf1\x48\x03\x3f\x3e\xa7\x7a\xd6\x6a\x06\x87\x67\x16\x6c\xe0\x38\x04\x57\x6e\xc1\x59\xc2\xa2\x30\x2a\x90\xe3\x18\x4d\xed\x4d\x23\xf8\x94\xcc\xfe\x36\x40\x89\xc3\xba\x4b\xeb\x30\x2b\x23\x34\x11\x6a\x08\x31\x4f\xc9\x7f\x5d\xbe\x7b\xfb\xe4\x5b\x69\x65\x05\xa3\xcd\x28\xdb\x30\x29\x67\x42\x0f\x88\xaa\x92\x19\xa1\xca\x4c\xcd\xe8\xb7\x97\x60\x7a\xc8\xa9\xe0\x13\xa6\xf4\xc8\x8e\xc6\x4a\xf5\xe1\xeb\x4f\xa3\xd8\xe2\xc1\xad\x4f\xd5\x05\x23\x59\x04\x80\xb3\x61\x16\xe3\xdf\x05\xa1\x15\xa6\x54\xc8\xd4\x4e\xfa\x06\x26\xab\xe9\x15\x23\xd2\x4e\xb6\x62\xc0\x14\x9e\x93\x03\x83\x26\xc1\xa7\xff\x69\x0e\xd6\xbf\x0e\xc8\xd1\x0d\x58\xf5\x0f\xcc\x9f\x07\xf8\x41\x1f\x3b\x66\xee\x05\x1c\xdf\x7e\x18\xe5\xfb\x92\x4f\xa7\x20\x6e\x81\xe9\xf6\x9a\x09\x7d\x0c\xfc\x6d\x42\x84\x0c\x1e\x16\xd6\x45\x56\x3b\xc6\x9a\x13\xf9\xf0\xf5\xa7\x03\x72\x14\xaf\xcb\x88\xa0\xec\x33\xf9\xda\x3b\xc3\x0a\x99\x1e\x3b\xad\x75\x2e\x34\xfd\x0c\x8a\xc1\x4c\x2a\x26\xd0\x97\xa0\x25\x1a\x64\x95\x34\xca\x27\xcb\xb2\x21\x0a\x98\x29\xb9\x41\x1b\x9c\x03\x25\xfa\x93\x0b\x5a\xea\x46\x64\xdd\xfb\x77\xa7\xef\x9e\xe3\xd7\xcc\xb6\x4d\x85\xd3\x72\x27\x5c\xd0\xcc\x5a\xb6\xbd\x7c\x68\x26\x52\xe1\x26\x69\x69\x55\x5b\x67\xd4\x9d\x54\xba\x2a\xd9\xa8\x19\x69\xd5\x1a\xe3\x97\x85\xb9\x2d\x47\x76\x08\x77\x6b\x1e\xb4\x7b\x0c\x26\x6b\xbd\x44\xb1\xc2\xd9\xba\xb8\xc4\xb7\x01\x0e\xae\x5d\x62\x4d\x9a\xcd\x2a\x53\x99\x28\xb3\xc0\x84\x15\x5a\x3d\x91\xd7\x86\x74\xb2\x9b\x27\x37\xb2\xbc\xe2\x62\x3a\x34\x48\x36\xc4\x9d\x57\x4f\x80\xc5\x3c\xf9\x37\xf8\x67\xaf\x15\x01\x9f\x6a\xbf\x2c\x8c\x69\xbd\x83\xb5\x01\xfb\x7c\xb2\xf3\xd2\x9c\x7c\xb9\x0d\x27\x38\xbc\x74\xca\x5f\xe3\x6d\x73\x5c\xd0\x17\x6e\x83\x5d\x03\x0a\x97\xd3\x14\x49\x20\x15\xf3\x5b\x47\x63\x03\x40\xd0\xf1\x93\xf9\xd0\x46\xa3\x0f\xa9\x48\x87\x5e\xbe\x4e\xe6\x3b\x43\xac\xe2\x2d\x0f\xf0\xf7\x67\xa7\x77\x83\xdc\x15\xdf\xea\xb4\x76\x95\x4b\x40\xa2\xf8\x73\x9a\x15\x33\xda\x55\xef\x85\x3e\x0a\x1d\xae\x3e\x0a\xbd\x8f\x42\xef\xa3\xd0\xeb\xeb\x81\x44\xa1\xf7\x51\xe4\x7d\x14\x79\x1f\x45\xbe\xfa\xe7\x3e\x8a\xbc\x8f\x22\xef\xa3\xc8\x9b\x57\x1f\x45\xde\x47\x91\xf7\x51\xe4\x7d\x14\xf9\x92\xab\x8b\x82\x75\x8f\x30\xfe\xb2\x77\x8e\x3d\x0e\xe7\x58\xef\xee\xea\xdd\x5d\xbd\xbb\xab\x77\x77\xed\x80\xf1\xbd\xbb\xab\x77\x77\xf5\xee\xae\xde\xdd\xf5\x40\xdd\x5d\x5b\x75\x19\x7f\xd4\xb5\xb3\xee\xbe\x6c\x16\xdc\x5a\xac\x98\xb5\xb2\x58\x96\xad\x93\xb5\x50\x0c\xab\xae\x83\xf5\x02\xd3\x29\x6f\xbf\x08\x56\x6c\x00\x74\x0d\x9a\xb7\x68\xca\xde\x3b\xf4\x7a\x87\x5e\xef\xd0\xdb\x74\x4a\xb6\x70\xe8\x81\x2f\x2f\x3c\x0a\x56\x1d\xa9\x53\x38\xde\x2d\x77\x6d\xac\xfe\x74\x7b\xd3\x8a\xb5\xaa\x84\x9f\x77\xb9\x28\xf5\xf7\x03\x0b\x0b\x9c\x14\xb3\xa1\x89\xcc\x0b\x29\x0c\x62\x74\xe3\x5c\xac\xc7\x6b\x91\xb0\xea\x1e\xb5\xf7\xc7\x2c\x0c\x26\xb7\x9e\xad\xbc\x90\x8a\x45\x76\xdc\x1d\x14\xef\xf5\xae\xa9\x21\x3a\x7d\x9c\x09\x6d\x07\xc5\x3d\x7a\xbf\x95\x2c\xf2\x3a\x7c\xc3\xba\x26\xc1\xf3\xf4\x73\xc5\x4a\x6c\xa3\x5f\x3b\x70\x6a\xa0\x38\x93\x2b\xba\xa4\x22\xb0\x1c\xae\xd9\xcc\x96\x60\x6a\xb3\x54\xb2\x85\x3f\x76\x61\xd5\x77\xea\x93\x25\xad\xfd\x27\x2d\xbc\x27\x0f\xdb\x3f\x4b\xda\xfa\x68\x49\x4b\x3f\x2d\x69\xe1\xab\x25\xed\xfc\xb5\xa4\xb5\xcf\x96\xb4\xf1\xdb\x92\x5b\xf6\xdd\x92\xf6\x4e\x4d\xd2\xda\x87\xbb\x30\xe9\x07\xe7\xc7\xdd\x72\xd9\x6d\xfc\xb9\x0b\x8b\xee\x7d\xba\x0d\x50\x6f\xf6\xeb\x92\xb6\xbe\x5d\xd2\x3e\x3d\x69\xa3\x8f\x97\xf4\x7e\xde\xed\xf8\xcb\x46\xa2\xbb\x9d\xbf\xb7\xd5\x5e\x96\x6c\xd2\xce\x49\x7f\xc1\x26\xb8\x98\x40\x9c\xa8\x1d\x1d\x72\xa5\x0c\x51\x4b\x1d\x03\x4b\x45\x5d\xfd\x9c\x48\x76\xb9\x9b\x88\xa8\x0b\x9e\xcc\x2e\x42\xe3\x15\x0d\x6c\x59\x40\x23\xdd\x6c\x07\x84\x89\x92\x27\x33\x37\x59\x23\xe4\x5a\xcf\xda\xfa\x9a\x27\xe1\xb4\x37\x6c\x68\x3b\x76\xb6\xd9\x9b\xb3\x64\xa1\x3b\xf8\x74\xc2\x89\x6f\x24\xde\xeb\x0b\xca\xac\x98\x54\x50\x09\xa4\x91\x81\x6f\xf5\xf0\x28\x4b\xdd\x63\xd0\x1d\x86\xb6\x2c\x9f\x6e\x3d\xdb\x70\xb2\xd4\x25\xa8\x2e\xd6\x6c\x11\xf5\xe4\xad\x43\x76\x4d\xae\x7d\xb8\x8c\x16\x62\x57\x7b\xc1\x6b\x63\x3d\x90\xf0\xc1\x95\x95\x41\xea\xab\xbd\xf4\xb5\x5d\xb5\x90\xfa\x5a\xf0\x83\xef\x53\x1d\xa4\x2b\x4e\x57\x5f\x6d\xcb\x74\xc4\x60\x40\x27\x7c\xa7\x20\xb8\xa1\x10\x6d\x32\x5e\x88\x41\xb8\x97\x45\x6e\xac\x4a\xb2\x62\x75\x27\xfb\x16\x25\xe9\x7a\xf1\x9b\x0a\x51\xac\x58\xc7\xfb\xed\xaa\x4b\x74\x3d\xeb\x4d\xf5\x0f\x56\xcc\xfa\xb2\xd3\x4a\x08\x3b\xce\x7d\x7d\x51\x82\x15\x33\x7f\xdf\x2c\x4f\xd0\xe1\xb4\x36\xc6\x2d\x2c\x99\x4f\x1f\xbd\xd0\x47\x2f\x3c\xf0\xe8\x85\xad\xce\xc0\xba\x48\x86\x65\xe8\xff\x50\xe3\x19\xb6\x5a\xf4\xba\xd8\x86\x65\x8b\x7e\x20\x11\x0e\x5b\xaf\x71\x6d\xb4\xc3\xaa\x85\x3e\x90\x98\x87\xad\x16\xdb\x32\xfe\x61\xd9\x92\xbf\xe4\x28\x88\xad\x60\xb8\x26\x22\x62\x19\xdc\x1e\x44\x5c\xc4\xca\x05\xfe\xaa\x1b\x8b\x85\xe5\x8f\xef\x2e\x40\xe2\x32\xf8\x6a\x23\x48\x22\xfc\x69\x21\x50\x22\x9a\x2d\x06\x4b\x2c\x69\x2a\xa6\xaa\x71\xf8\xff\x66\x54\x85\x8a\x3f\xde\xa6\xc3\x58\x68\x5f\x83\x98\x80\x17\x32\xab\xf2\xd0\xc6\x31\x5c\x14\xfd\x0b\x9a\x5c\x19\xad\xc5\x7e\x6f\x0c\x9e\xb5\x00\x39\xff\xae\xa4\x00\x89\x92\x8c\x40\x0c\x31\x10\x0c\x7e\xc6\xfd\x39\xc7\x41\x7e\xb3\x16\x83\x97\x7e\xde\xd5\xa8\xb6\xde\x7a\xa7\x81\xd4\xc2\x4f\xb1\x30\x74\x73\x46\xf8\xea\xc2\x9c\x2e\x9b\xb7\x5b\x4f\x69\x46\x85\x60\x99\xa1\x05\xe8\xd1\x07\xe9\xce\xc3\x67\x3d\x78\xec\xcb\x0b\xb3\x79\xb1\x70\x7f\xc9\x74\xa2\x14\xfd\x7d\x63\x64\x42\x14\x25\x57\x8c\x15\x2a\x70\x96\x54\xe0\x53\x81\x5c\x90\xf1\xdc\xa8\x77\xc9\x15\x94\x1b\x05\xa9\x0c\xd6\xfb\x02\x37\xa6\xe3\x04\x7a\x40\xf6\x82\x25\xc1\xad\x3e\x04\xa7\x0f\xc1\xe9\x43\x70\x36\x9d\xb1\x16\x21\x38\xe1\x81\x8f\xc2\x70\xa8\x20\x27\x45\x91\x81\x51\xca\x95\x86\xb5\x35\x07\x6d\xc1\x8d\x05\x4b\xdc\x8e\xe9\x45\x0d\xe6\xe0\x6e\x2f\x50\xe8\xf8\x07\xcf\xd4\x1a\x4f\xac\x8d\xb0\x41\x7a\xba\x4c\xbe\x5b\x2b\x1d\x26\x52\x4c\xf8\x74\x73\x5e\x4c\x00\xcb\x17\xf0\x4a\xed\x31\xc3\x21\x2a\x5b\xd9\xb6\xe6\x54\x90\xbe\x15\xf1\xed\xdb\x48\x8e\x99\x80\x04\xb6\x32\x3c\x20\x5a\xc5\xd9\xa4\x9e\xde\x00\xa2\x69\x4a\x9e\x5a\xfa\x58\xc8\xf4\x50\x01\x35\x4b\xab\xcc\x96\x9a\xc6\x52\x2c\xe6\x68\x0a\x9e\x99\x95\x0c\xa9\xc6\xf3\xc0\x14\xe6\x3b\x7e\x25\xa4\xfe\xca\x8f\x84\x86\x97\x92\x4f\xb9\x27\x7d\xbe\x65\x49\x21\xd3\x91\x2f\xe6\xa0\xc1\x65\x19\x0f\x38\x22\xdf\x2b\xeb\x60\x76\xc4\xe1\xe8\x9f\xff\x3a\x36\x84\x95\x95\x58\xa8\xd3\x0e\x1c\xbd\xb7\x21\x0a\xa4\xa3\xd8\x1e\x21\x53\x76\xb2\x01\xd4\x0b\xe0\x3e\xf5\xf1\x5b\xe6\x75\xbf\x55\x21\x90\xcb\x2a\x0b\xd2\xc4\x0c\x8c\xf6\x77\xab\xb6\x75\x6c\x14\x68\xe5\x63\xe9\x29\xb8\xed\x2f\xfd\xac\xce\x30\x53\x12\x6f\xbf\xfc\xcc\x92\x4a\x6f\x54\x39\x97\x18\x91\xed\x32\xc1\x20\x95\x65\xf6\x73\x20\x3a\xd9\x1f\xcc\x7a\x81\x71\x1a\xf0\xd8\xd0\x36\x45\x35\x57\x93\x39\xe6\xdd\x3a\x80\xb1\x20\x36\xaa\x3e\x5f\x46\x50\x09\xea\x10\x8f\x2b\x8d\xa5\x4d\xe7\x24\x99\x49\x83\x5f\x14\xe1\x0e\xe3\x5e\x73\x89\x01\x44\x60\x0f\x2e\x49\x6e\x38\x80\xd5\xee\x82\xe1\xd1\xe3\x5d\xbf\x66\x54\x61\xa9\x74\x0d\x2b\x17\x54\x63\x86\x01\x3b\x9b\xf9\x63\x6a\xd4\x15\xf0\xf8\x55\xb9\x19\xf4\x86\xf1\xe9\x4c\xab\x01\xe1\x23\x36\x82\xdd\x65\x34\x99\x05\xc3\xe6\x8c\x69\x45\x68\x96\xf9\xc6\x24\x01\x4a\x84\xee\xf6\x23\xcf\x34\x2d\x83\x1b\x78\x7a\xdb\xdc\xb5\xa5\xe0\x1a\x10\xa6\x93\xd1\xf1\x00\x3c\x78\xe6\xb4\x50\x98\xe3\x78\x4e\xb8\x86\x5a\xdc\xc0\xa0\x4b\x59\x4d\x71\x25\x36\xd0\x40\x79\xe9\xc8\xda\x67\x45\x0a\xda\x84\x98\x92\x03\x5c\xdc\x81\x13\x78\xcc\x70\xd6\xe4\x0a\xeb\x73\xa5\x65\xd1\xe2\x59\x96\x4c\x15\x12\x7b\xb0\x34\x23\x17\xfe\x8f\x7f\xe9\x48\x1d\xd7\xc0\x9c\xf1\xe9\xcc\xc1\x92\x96\x48\x53\xe2\x3d\x68\xe7\x7c\x6c\x13\x46\xd2\x32\x88\x24\xf6\xf3\xb8\x72\xf1\x35\x4e\x04\xbb\xa7\x59\x99\x7b\x18\xc0\x06\xa3\xae\x6f\x8d\xb2\xb9\xcd\x61\x46\x20\x92\xa7\xe4\x08\x50\x84\xeb\x43\x05\xe8\x3a\x94\xc5\xf1\x88\x9c\x80\xb6\xdb\xe2\x03\x42\xfa\xf1\xed\x40\xe6\xa3\x4a\xd6\x63\xb5\xf3\x59\xb4\xf3\xd4\x6e\xe3\xab\x35\xdc\xbc\xf0\x26\xa5\x56\x8f\x23\x4c\x36\x3e\xba\x8d\xdf\x96\x04\x73\x68\xf3\xf4\x82\x4b\x0f\x50\xba\x0e\x5b\x64\x65\x3e\x20\x54\x29\x99\xf0\xba\x71\xd2\x22\xa6\xe3\x4a\xda\xf8\x71\xb6\x84\x3f\xd9\x7a\xfd\x64\xcb\xc0\xd4\xf8\x6a\xc6\x77\xda\x90\xd4\x18\x2a\x11\xc1\x1a\xcf\xe1\x57\x70\x14\x8e\x59\xb6\x21\x3a\x33\xbc\xb6\x09\xfe\x72\x57\xeb\x20\xb0\x15\x0b\x5a\xb9\x90\x7b\x8b\x57\x5d\x06\x93\x2d\x90\x03\xaf\x6d\x8e\x69\x7d\xb5\x89\x6c\x6d\xbe\xd1\x2a\xce\x35\xbe\xb6\xc7\x5f\xbc\x5a\xc5\xc0\xc6\xd7\x82\x48\xd2\x55\x28\x6c\x7c\x6d\x19\x92\x50\x5f\xed\xc3\x64\xd7\xac\xeb\xe2\xb6\x62\x65\x07\x71\xa0\x2c\xf9\x56\x23\xae\xbf\x6e\x49\xd9\x3a\x00\x50\xdb\x80\xda\x35\xe0\x39\x79\x34\x41\xb5\x4b\x86\xfa\x56\x9b\x61\x5e\xaf\x7c\x19\x1c\xb6\xd4\x05\x97\x5a\xe1\x6d\xd0\x28\x48\x03\xb6\xa8\xa2\x64\x86\x61\x61\xef\x2f\xdb\x09\xe5\xd6\xe2\x78\x97\xed\xfe\x76\x84\x1d\xaf\xad\xc9\x7b\xf8\xc1\xad\xd0\x0d\x58\xe4\x2b\x68\x9c\x75\x37\xdc\x11\x9b\x74\xf5\xdc\xb1\xe7\x8e\xf1\xd5\x73\x47\x7f\xf5\xdc\x71\xc3\xd5\x73\xc7\x9e\x3b\xde\x3a\x77\x44\x5d\x76\x07\xe5\xf9\x47\x34\x71\x34\xb5\x65\xe0\xb4\xce\x2f\x14\xab\xcd\x86\xdf\xb8\x04\x8a\xf7\xa0\x6a\x5b\xdb\x71\x09\xb1\x61\xcf\x86\xcf\x9e\x3e\xdd\x46\xa9\xde\xd4\xf0\x2d\xbc\x82\xe6\x6f\xbf\xff\x7a\xed\x1b\xab\xec\x6f\x1d\x58\x4d\x2d\x8e\x7b\x43\x5e\x24\x3b\xac\x30\x7c\x02\x75\x12\x52\x93\x9c\x69\x42\x75\x64\x2a\xe2\x39\x1b\x38\xc3\x72\xdd\x62\x7b\x5c\x9b\x66\x53\x22\x85\x8b\x54\x94\x29\x1b\xed\x36\x83\x84\x51\x05\xf9\x26\x63\xe6\x67\x21\x73\xf3\x55\x2e\xb4\x3b\x2e\x66\x0a\xcc\x41\x85\x1c\xb1\xd1\x74\x44\xd2\x8a\xd9\x04\x27\xf4\xd3\xd9\x76\x56\x6a\xae\x34\xcb\xc1\x92\x2b\x4b\xdf\xf4\x4d\x97\x10\xa3\x08\x81\x92\x15\xcd\xb2\x39\x61\xd7\xdc\x66\xfb\x9a\xc1\xc1\x4d\x08\x35\xe1\xcd\x4a\x5a\x99\x08\x3b\xcf\x4f\x68\x62\xf0\xa6\x54\x85\x6d\xb8\xfd\xc2\xd8\x5b\x47\x1a\x5f\xd8\x95\x8c\x56\x0a\xab\xda\x8c\x8b\x36\x70\xf8\x2f\x20\xd7\xbb\x8b\xcd\x26\x57\xb2\x35\x25\xdb\x82\x7a\x35\xc5\xd2\x2a\xcb\x0c\x62\xa0\x15\x76\x71\x01\x4b\xac\xa3\x4b\x12\xd9\xd0\xf0\x9e\x07\x09\x6d\xd8\xc4\x5c\x16\x32\x93\xd3\x79\x08\x69\xec\x20\xc7\xf3\xc2\x19\xc7\xd1\xab\xc7\x7c\x83\xe6\xb7\x8d\xad\xe9\x2d\x7f\xbd\xe5\xaf\xd7\x6d\x16\xae\x5e\xb7\xf1\x57\xaf\xdb\x6c\xb8\x7a\xdd\xa6\xd7\x6d\x7a\xcb\x1f\xe9\xb9\xe3\x1a\x98\xf4\xdc\x91\xf4\xdc\x71\xe5\xba\x7a\xee\xb8\x16\x3c\x3d\x77\xec\xb9\xe3\xb2\xab\x90\xe9\x1e\x81\x8e\x85\x4c\xd7\xc4\x39\xa2\xd5\x27\x91\xc3\x4c\x26\xd8\x76\x02\x13\x53\x9d\x9d\x4f\xd1\x1c\x0d\x51\x03\xf2\x0f\x29\x18\x06\xaf\x99\xbd\x01\x73\x12\xd4\x41\x30\x8f\x1f\xa9\xe3\xb5\x81\x4d\x7d\x9c\x64\x1f\x27\xf9\xe0\xe3\x24\x67\x54\xe1\xbe\x22\x51\x5a\x1d\x36\x19\x1c\xc8\xf7\xac\xcc\x1f\x69\xd4\xa4\x41\x17\xbb\xdd\x90\x62\x53\x6f\x29\xae\x3c\xb5\xfe\x02\x96\x9e\xc7\xeb\xb5\xf2\x32\xd6\x6a\x4a\x53\x96\x92\x82\x95\x43\x44\x11\x49\x26\xdc\x16\xb3\x6a\x60\x9f\x85\xcf\xbd\x46\x3f\xc6\xeb\xb8\xc7\x10\xc8\x78\x22\x3b\xd8\x5c\x43\xc3\x71\x44\xe1\x1f\x44\x40\xe4\xb6\x52\xfd\x90\x68\x6b\xe4\xfd\xae\xa5\x5c\xbf\xbd\x68\xde\xaa\xf4\xe9\xe2\xb5\xb4\x9e\xe6\xda\xda\xa7\x03\x5f\xe0\x21\xa1\x0a\x39\xc5\xb6\xaa\xe5\x96\x6a\xd4\x6e\x7a\xca\xee\x96\x68\x72\xef\xe5\x52\x17\xaf\x5d\x45\xb7\x9d\x04\xb7\x87\x5f\x64\x75\x15\x80\xb6\x56\xd0\xc9\xce\x4a\x3a\xd9\x49\x51\x27\xbb\x2a\xeb\x64\x0f\x85\x9d\xec\xa6\xb4\x93\x3b\x28\xf1\xba\x78\xed\xac\xa2\x92\x3d\xf4\x78\xf2\x28\x0a\xc3\x2e\x5e\x7b\x01\x6b\x37\x9d\x9e\xf4\xe5\x64\xb7\xb8\x76\x57\xb9\xc9\xee\x6a\x37\xd9\x1d\x33\x5a\x96\xa5\x5d\xbc\xfa\x42\xb5\x7b\x71\xf6\x1d\x18\xd7\xf6\xc5\x6c\x57\x7d\x7c\x2b\x2c\xf1\x75\x86\xba\x17\x36\x75\xdd\xd9\x30\xec\xb5\xe9\x18\x0c\x84\x5a\x04\xcc\xc5\x47\x8d\x00\x8e\xc1\xfd\xd4\x29\xbf\x95\x08\x2a\xb7\x06\x83\xf9\x0a\xba\x8d\x90\x26\xbb\xf1\x52\x30\x05\x82\x1d\xf3\x26\xa2\xb0\xb9\xa2\x79\x76\x84\xe1\x20\x35\xb7\x13\x69\x33\x40\xa4\x7e\x03\x64\xc4\x9c\x51\xa1\xc8\x81\xb3\x3d\x1d\xaa\xfa\x89\x83\x51\x9d\xdd\xe7\x47\x84\x24\xe4\x30\xa3\x6f\x7d\x53\xf7\x75\x3b\xdb\x4b\xda\xbd\xa4\xdd\x4b\xda\xbd\xa4\xbd\xf4\xea\x25\xed\x2d\xae\x5e\xd2\xee\x25\xed\x75\x1f\xee\x25\xed\x5e\xd2\xde\xfc\xf1\xdd\x24\xed\x5d\xe3\x84\x42\xb9\xd7\x3a\xe7\xb0\x72\x16\xb4\xe6\xf7\x31\x44\xbe\x40\x29\xfc\xaf\x5b\x79\x3b\x94\xa5\x97\x4b\xdb\xa1\x44\xbe\xa0\x5b\x8c\x36\x88\xd6\x5e\xf8\x5e\x78\x73\xbd\xd4\xfd\xb0\x62\xa1\x76\xc0\x8d\xc0\xa1\xb0\x23\x72\xbc\x77\xae\x70\x5b\x69\x6e\xcc\x6a\x3f\x79\x4a\x8e\x9c\xc7\x05\x2a\x44\x0b\xa9\xe3\x1f\x85\xe6\xc3\xfa\x09\xef\x83\x01\xf7\x62\x94\x6f\x93\xc5\xfd\xd5\x44\xa3\xb6\x62\xbd\x9f\x86\x84\xb0\x32\x9a\x03\x77\x8d\xf4\x20\x5a\xa2\xac\x84\x30\xa3\x42\x95\x6c\xf0\xc6\x21\xcd\xc1\x02\x70\xbe\xb3\xbf\x11\x96\x60\x3e\x20\x31\xd5\x50\x0a\xfc\x9d\xd4\x96\x91\xb6\xa1\xfc\x52\x58\x8f\xa8\xb9\xe3\xbc\xbe\x0e\x29\x61\x45\xdc\x7f\x7d\x44\x5e\x02\x1e\x86\x03\xdb\x92\xd3\x34\xcb\xe4\xcd\x36\x24\xe9\xae\xd2\xa2\x6e\xb6\x4e\x8b\x6a\xf8\xef\xfa\xac\xa8\x5f\x49\x56\x14\xfc\x88\x47\xa8\xf3\xf4\x28\xf2\xe3\x8c\x01\x16\x95\x0c\x40\x95\x57\x99\xe6\x45\x1d\x2b\xa5\xf0\x53\x19\x4a\x99\x13\x1b\x79\x12\xe3\xa5\xf9\x1a\x4d\x66\x4d\xfc\x84\xf1\x20\xb6\x4a\xc1\xa1\xb5\xd1\x1d\x34\xcb\x6c\x4e\x91\x13\x49\x31\x84\x85\xdf\x77\x64\xc2\xa9\xab\x8a\xe8\xb4\x19\x20\x32\x47\x86\x16\x66\x73\x5b\xa9\x6e\x0d\x11\x45\xa5\xe8\x9a\x39\xd6\x3b\xe5\xd7\x4c\xd4\x94\xf4\x48\x1d\x1f\x3b\x1e\xde\x29\x85\xbf\x15\x0a\xfd\x97\x80\x92\xfe\xb5\x0d\x8d\x86\x05\x79\x2a\x5d\x83\xaf\xa6\xd1\xf7\x19\x82\xb1\x8d\x9f\x7f\x3b\x1b\xc3\x0e\xfe\xfd\x3b\xf4\xed\x3f\x9e\xcc\xb2\x7b\xb6\x30\xde\x47\x6c\xfd\x83\xb7\x2a\xf6\xc1\xf5\xf5\xb5\x6f\x70\xfd\xad\x5b\x0e\xef\x37\xc6\xfe\x11\x58\x0b\xef\x33\xc6\xbe\xb7\x10\xae\xdd\x94\x87\x16\xfa\x1e\x5f\x3b\x59\x04\x7b\x6b\xe0\xce\x5c\x78\x4b\x86\xb3\xaf\x15\x70\x4b\x8c\xd8\xd1\xcf\xde\xfb\xd8\xef\xc6\xc7\xde\x4b\xbc\x2d\xaf\x5e\xe2\x5d\x09\x94\x5e\xe2\x25\xbd\xc4\xbb\x69\x79\xbd\xc4\xbb\x16\x3c\xbd\xc4\xbb\x76\x53\x7a\x89\xb7\x97\x78\xc9\x63\x93\x78\x77\xa9\xd2\xd5\xfb\xba\xf7\xf2\x75\x6f\x4b\x2d\xb6\xa2\x11\x5b\xe2\xc1\xd6\xbe\xed\xde\xaf\xfd\x50\xfc\xda\xad\x13\xfe\x85\xe6\xfb\x26\xfd\x87\x7b\xb5\x2a\xf3\x9f\x5e\x4b\x9e\x92\xa2\xd2\x36\x9f\xba\xcf\xfe\xef\x22\xfb\x3f\x82\x7c\x5f\x02\xa0\x55\x09\x80\x55\x30\xeb\xeb\x00\xf4\x75\x00\x3a\x76\x42\xf7\x75\x00\xfa\x3a\x00\x7d\x1d\x00\x77\xf5\xd9\x49\xa4\xcf\x4e\x6a\x75\xf5\xd9\x49\xab\xaf\x3e\x3b\xe9\xc1\x5a\x5f\x49\x9f\x9d\xf4\xb0\x2d\xb1\xa4\xcf\x4e\xea\xad\xb3\x2d\x37\xea\x11\x66\x27\xf5\x75\x00\x1e\x6a\x8c\x02\xe9\x25\xed\x5e\xd2\xee\x25\xed\x5e\xd2\x5e\x7f\xf5\x92\xf6\x16\x57\x2f\x69\xf7\x92\xf6\xba\x0f\xf7\x92\x76\x2f\x69\x6f\xfe\x78\x5f\x07\xe0\x11\xc5\x46\x90\xbe\x0e\x40\x1f\x2f\xd1\xd7\x01\xf8\xf5\xd6\x01\x88\x7c\xf7\xf7\x57\x0c\x60\xfb\x69\xf4\x15\x01\xfa\x8a\x00\x7d\x45\x80\xbe\x22\x80\xbb\xfa\x8a\x00\x78\x3d\x24\x5b\x63\x9f\x1f\xb5\x12\x28\x7d\x7e\x14\xe9\xf3\xa3\x36\x2d\xef\x11\xd8\x0d\xfb\xfc\xa8\x07\x68\x2b\xec\xf3\xa3\x7a\xbb\x60\x73\x73\x1e\x49\x7e\x54\x5f\x11\xe0\x21\x7a\xdb\x7b\x89\xb7\xe5\xd5\x4b\xbc\x2b\x81\xd2\x4b\xbc\xa4\x97\x78\x37\x2d\xaf\x97\x78\xd7\x82\xa7\x97\x78\xd7\x6e\x4a\x2f\xf1\xf6\x12\x2f\x79\x6c\x12\x6f\x5f\x11\xa0\xaf\x08\xd0\x57\x04\x78\x8c\x1e\xee\x8d\x3b\xcd\xc4\xf5\xaa\x3d\x8d\x76\xf1\xa5\xb8\x8e\xf5\x14\x26\xae\x79\x29\x05\x50\xe0\x6b\x5a\x72\x3a\xce\xe0\xa4\x82\xc4\x63\xe1\x6f\xe9\x27\x2b\x47\xe4\x05\x15\xd6\xd1\x8a\x9e\xcc\x95\xf3\xdf\x8c\xf8\x1b\x50\xbd\x39\xed\x1f\x68\x2c\xaa\x89\xa5\x53\x27\xf6\x01\x33\x75\x4a\x5e\xf8\x89\xaf\xfc\x4c\x2b\x02\xde\x46\x3f\x18\x02\x72\xae\x7c\xa0\x9d\x14\x6f\x86\x58\x7f\x36\x23\xb0\xbc\xa5\x79\x9d\xe2\xbf\x04\x1a\x23\xf2\xc6\x4a\x48\x94\xbc\xf8\xdf\xb3\xd3\x97\x6f\xdf\x9f\xbd\x3a\x7b\x79\xb1\x1e\xe9\x5a\x92\x15\x38\x48\x5b\x4c\xf6\xf0\x07\xb7\x47\x90\xe6\xcd\x84\xa1\xc0\xbf\x3d\xfa\xe1\xe4\xe2\x7f\xdf\x9e\xbc\x79\x79\x0c\xec\x97\x7d\x2e\xa8\x48\x59\x4a\x2a\xe5\x48\x42\x51\xb2\x6b\x2e\x2b\x95\xcd\xfd\xf1\x5e\x8e\xb4\x4d\x6c\xb5\x8a\xe6\x9c\x28\x56\x5e\xf3\x64\x39\x88\x50\x8a\xa5\x35\x02\x25\x1e\xc3\x4b\xa6\x64\x76\xcd\x52\x94\x35\xfc\xa4\xdd\x77\xb8\x28\x2a\xed\x24\x62\x08\x41\x30\xa7\x42\x24\x33\x2a\xa6\x2c\x1d\x91\x53\x59\x99\xf1\x7e\xfb\x5b\x58\x58\xc9\xd2\x2a\x41\x5e\x47\x9d\xc0\xf4\xdb\x81\xa3\x24\x86\x16\x28\x2c\xa3\xa0\x12\x5a\xb8\xa5\x87\xd0\x51\x73\xa1\xe9\xe7\xe7\xe8\x83\x3f\xf8\x6d\xf0\xd3\x81\x2b\x41\x21\xcd\x27\x90\x1e\xe1\xac\x32\xa8\x7e\x90\x91\x83\xf0\xe9\x11\x79\x69\xbe\xc1\xd2\x70\x1f\x30\x84\x82\x5d\xb3\x12\xe4\x69\xbb\x0b\x03\x52\xb2\x29\x2d\xd3\x8c\x29\x08\x1e\xb8\x99\x31\x28\xe7\x81\x12\x96\x05\x18\xf3\xd2\xba\x90\x7a\x44\x4e\xd9\x84\x56\x99\x06\x1a\x72\x70\x30\x3a\xec\x0c\xd5\x5e\x95\x72\x43\xf2\x7b\x84\x6e\x97\x58\x54\x62\x22\xcb\x95\xc7\xe3\xd0\x9a\x26\x22\xb2\xa6\x0c\x27\xb1\x9a\x9e\xa3\xd5\xa8\x5f\xb4\x58\x49\x0b\x41\xb0\xbd\x3a\x9f\x48\x31\xe1\xd3\x37\xb4\xf8\x8e\xcd\x2f\xd8\x64\xcb\x68\x08\x64\xa2\x56\xa7\x05\x06\x66\xc8\x21\x0e\xb8\x99\xe9\xdc\xa2\x2f\xbf\x8d\xd1\x64\x3b\x9b\x47\x6b\x4b\xc7\x42\x49\x0b\x64\xfa\x96\x7d\x77\x58\x9c\xa7\xbe\x36\x53\xf4\xa5\x93\x3b\x0c\x49\xbb\x3d\xa7\x7a\x44\xde\x48\x08\xc9\x99\xc8\xe7\x64\xa6\x75\xa1\x9e\x3f\x79\x72\x55\x8d\x59\x29\x98\x66\x6a\xc4\xe5\x93\x54\x26\xea\x49\x22\x45\xc2\x0a\xad\x9e\xc8\x6b\x43\xf9\xd8\xcd\x93\x1b\x59\x5e\x71\x31\x1d\x1a\x49\x67\x88\xbb\xaa\x9e\x80\x30\xf5\xe4\xdf\x50\x62\x7f\xff\xee\xf4\xdd\x73\x72\x92\xa6\xb6\x62\x4f\xa5\xd8\xa4\xca\x6c\xf5\x8e\x11\xa1\x05\xff\x81\x95\x46\x29\x1b\x90\x2b\x2e\xd2\x01\xa9\x78\xfa\xcd\xfa\xc3\xbd\x23\xc4\x64\x81\xba\xd1\x0e\x50\xbb\x04\x41\x71\x1e\xd1\x29\x8f\xf4\x86\x42\x71\xad\x60\xcf\x9d\xe1\xc0\x32\x94\x2d\x96\x31\x96\x32\x63\x54\x6c\x78\x03\xc0\xb6\xfd\x99\x3d\xac\x0f\x2d\x6a\x39\x16\x01\x0a\x99\x3e\x27\xaa\x2a\x0a\x59\x6a\x45\x72\xa6\x69\x4a\x35\x1d\x99\x9d\x1b\xc4\x7f\x82\x70\x3c\x20\x3f\xf9\x9b\x20\xe1\xaa\x0f\x87\x87\x7f\xf9\xee\xe5\x7f\xff\xf5\xf0\xf0\xd3\x4f\xe1\xaf\x40\xf6\xd0\xd4\x15\x3f\x62\x44\xee\x91\x11\x77\xdf\xc2\x37\xe0\x4f\xcb\x46\x4f\x92\x44\x56\x42\xdb\x1f\x34\xd5\x95\x1a\xcd\xa4\xd2\x67\xe7\xfe\xcf\x42\xa6\xcd\xbf\xd4\x06\x4e\x40\x6e\x97\xe8\x00\x38\xcf\xa9\x9e\x75\x4c\x7a\xea\x73\xb1\x03\xba\xda\x37\xc3\x0a\x49\x39\x85\xff\xbe\x72\xd3\x35\x1c\xe8\xa6\xe4\x5a\x33\x01\x72\x07\xc4\xdd\xc9\xc9\xc0\x60\x6e\xcd\x66\xaf\x9f\x6d\xa5\x8e\xb6\x3e\x8a\x1e\x6a\x3b\x2c\x0e\x66\x6f\x57\x86\xc8\xec\x09\xed\xa2\x5e\x77\x72\x7e\x46\xae\x11\x1a\x9d\x2f\xc4\x45\x61\xbd\xda\xfb\x4c\xfa\x4a\x55\x76\x59\x5e\xd2\x7c\x8e\x96\x25\x1f\xef\x45\x32\x9e\x73\x6b\x00\xb6\x55\xad\x14\x39\xc2\x9b\xa3\xa4\xa8\x06\xf6\x81\x51\xce\x72\x59\xce\xfd\x9f\xac\x98\xb1\xdc\x48\x6c\x43\xa5\x65\x49\xa7\x6c\xe0\x5f\xc7\xd7\xfc\x5f\xf8\x62\xf4\x81\xc5\xb7\x51\xa4\x4e\xaa\xd2\x30\x8f\x6c\xee\x28\x08\x4b\xef\xf7\x2c\x3a\x30\x75\x7c\x14\xfd\x6e\xbc\xdd\x91\xe5\x7a\x6d\x11\x99\xb6\x5f\x15\xc8\x90\xd7\x32\xab\x72\xa6\x06\x9e\x3d\xa1\xb4\x2e\xae\x8d\x34\xa9\x6e\x85\x11\xa6\xfc\x9a\xab\x9d\xfc\xd3\x97\xde\x52\x07\x26\xb2\x4a\x1b\x4d\x05\x83\xc1\x83\x8a\x70\x52\x81\x0e\xe0\x63\x14\x23\x92\xf2\xec\xa0\x9d\xf7\x95\x6a\xcd\x4a\xf1\x9c\xfc\xcf\xd1\xc7\xdf\xfd\x32\x3c\xfe\xe6\xe8\xe8\xc3\xd3\xe1\x9f\x3f\xfd\xee\xe8\xe3\x08\xfe\xf3\xd5\xf1\x37\xc7\xbf\xb8\x3f\x7e\x77\x7c\x7c\x74\xf4\xe1\xbb\x37\xdf\xbe\x3f\x7f\xf9\x89\x1f\xff\xf2\x41\x54\xf9\x15\xfe\xf5\xcb\xd1\x07\xf6\xf2\x53\xcb\x41\x8e\x8f\xbf\xf9\x6d\xab\xe9\x51\x31\x7f\xd7\xe2\xc0\xe3\x35\xdc\x21\xc2\xbe\x7e\x6b\x0b\x03\xfd\xe7\x61\x2d\xb4\x0d\xb9\xd0\x43\x59\x0e\xf1\xf5\xe7\x44\x97\xd5\xe6\x83\x51\x13\xb5\x5d\xf0\xdc\x95\x03\x7b\x5e\x13\x34\x4f\x9a\x3b\x47\x64\xc5\x92\x92\xe9\xae\x34\x18\x1c\xcd\xf1\x8f\x86\x49\xb6\x57\x6a\x6a\xa5\xc6\xdb\x25\x01\x5e\x35\xe7\x9d\x94\x32\x1f\x91\xc0\x2c\x74\x0d\x9e\x4c\xfb\xdc\x15\xdb\xa0\xe5\xba\xab\x57\x82\x1e\x97\x12\x74\x89\xfb\x7b\xeb\x1a\x10\x13\xd7\xeb\xcc\x34\x4d\x9b\xee\x2b\x48\x65\x09\xcd\xd1\x4e\x80\xd2\x92\x14\xb2\xa8\x32\xaa\x57\x98\xed\x96\xd8\xa6\x2d\xee\xd7\x5e\x00\xb3\xd1\x60\x07\xb6\x54\x2e\x5f\x6e\x0c\x25\x27\x59\x46\xb8\xc0\x93\x00\x03\x38\x6b\x5e\xc9\x50\x5e\x22\x14\x0d\xce\xd7\x66\x0a\x37\x36\xe1\x26\x30\x34\x72\x65\x74\x9d\x52\x83\xc5\x1f\x12\x72\x90\x66\x59\xd3\x18\x17\x75\x5a\x8e\xe7\xb6\xde\x4b\xb9\xb4\xfe\x62\x46\x95\x76\xd3\x86\xd9\x68\x7a\x05\xa6\xd0\x84\xa5\x4c\x24\x0c\x42\x10\x2a\x56\xaf\x75\x6c\x84\x41\x30\xef\xc3\x18\x94\xa4\x55\x91\xf1\xc4\xc0\xcf\xcc\x64\xf9\x18\x67\x79\x5e\x69\x30\x14\xdf\x95\x15\xdf\xec\xf8\xa5\x2b\xf7\xea\x8d\xf9\x40\xaa\xbc\x68\xed\xa3\x2d\xbc\xea\xae\xf6\x33\xdf\xb7\x23\xbc\xde\xdc\xb6\x91\x53\x2d\x50\xdc\xda\xc6\x10\x53\xda\xbb\xb6\x18\xb6\xa3\xb3\x5f\x24\x8d\xdd\x82\xbe\xb6\xa7\xad\x5b\x18\x97\xb6\xa5\xa7\x6d\xad\x49\x45\xc9\x26\xfc\xf3\x16\xf8\x78\x22\x6a\x15\x85\xa7\x4c\x68\xa3\x08\x40\x65\xea\xa2\x64\x05\x13\xa9\x4f\xf7\x83\x00\x2f\x11\xaf\xe3\x56\x3d\x46\x28\x65\x6c\x7f\xbc\x2e\x97\x49\x31\xfd\xd9\xfa\xc2\xcf\x96\xdd\xf5\xee\x0f\x96\x90\xe9\xc6\xe0\xef\xc6\x3e\x06\x6f\x34\x22\x5d\x6d\xf9\x6f\x3b\x49\xa3\xbd\x79\x97\x53\x21\x53\xac\x71\xad\xeb\x20\x84\x11\xb9\x5c\xf2\x26\xc4\x1a\xd8\x27\x0e\x0f\x15\x86\x25\xa8\xe6\x40\x8d\xec\x66\x8c\x4c\xc0\x41\xb7\x44\x29\x64\x75\x55\x09\x96\xdf\x27\x54\x29\x3e\x15\xc3\x42\xa6\x50\x97\xfb\xc9\x2a\x84\x68\x71\xa8\xb6\x8b\x6c\xda\x88\x57\xde\x38\xd1\x6e\x9b\x2e\xbc\xfd\x2d\x90\x2d\x5c\x45\xf8\x32\xf8\xd1\xda\x75\x5c\x1c\x7d\x20\x43\xd6\x12\xd1\x7e\x30\xcd\xa9\xa0\x53\x36\xb4\x1f\x1f\xfa\x8f\x0f\xfd\xb7\xf6\x01\x73\x1b\xaa\x95\x64\x94\xaf\x0f\x25\x8a\x80\x77\xf0\x02\x9e\xb7\x89\xe2\x3e\x02\xab\x91\xc6\xea\xa4\x4d\x2e\xd0\x25\xe0\x7e\xc2\x97\x07\x88\x92\xb4\xb4\x6e\xd4\x25\xf0\xfd\x28\x30\x90\xc8\xc6\x95\x66\xc5\x8c\x06\x01\x5d\x76\x67\x14\x61\x82\x8e\x33\xe7\x05\x3f\x9d\x0b\x9a\xf3\xc4\xed\xee\x49\x06\x01\x3f\x5c\x0a\x32\x61\x54\x57\x25\x23\x53\xaa\x59\x3d\xb6\x8f\x14\xe4\xf5\x66\x9e\x69\x92\x50\x81\x66\xda\x31\x66\x6a\x98\xd3\xe5\x67\xa6\x46\xeb\xec\x5d\xed\xa2\xb8\x5a\xc4\x6e\x35\xca\xb2\x07\xc0\x0b\x9d\xf1\x52\x18\xa5\x47\x97\xc0\x9e\xcf\x65\x6a\xa8\xe3\x28\x7a\x7a\x43\x50\x7c\x6b\xf6\xd7\xd6\xc8\xb1\x21\xb8\x85\xdc\x36\x27\x05\x46\x1a\x90\x4a\x87\x9f\x06\x3d\x23\x68\x15\x32\x1d\x2d\xc1\x4c\xc7\x84\xcf\x65\x6a\xe3\xc6\x74\x84\x29\x06\x5d\x01\x49\x72\x7a\xe5\x62\xbe\xbc\x71\x8c\x5e\x53\x9e\x41\xa8\x03\x17\x8a\xa7\x46\x34\x4a\x36\x07\x16\xb9\xab\x25\xf3\x8c\x6c\x82\xe6\x10\x0e\x73\x5a\x0c\x8d\x36\xba\x1e\x54\x1b\x77\x66\x71\x60\x9c\x51\x4e\x8b\x95\x6f\xa1\x3b\xa2\x35\xed\x38\x7c\x8d\xee\x8e\xd4\xb7\x96\xc1\xd8\xdf\xcf\x3c\xaf\x72\x42\x73\x59\x61\x78\xef\x22\x29\x76\x41\x70\x9d\x10\xdb\x25\x44\x56\xad\xa4\xb2\xa4\xfd\x31\xd9\x3e\x5c\xf7\x81\x5a\xc5\x5b\x59\xc3\xb7\xb3\x82\x6f\x61\xfd\xde\xd9\xea\xed\x1c\x5c\xed\xf1\xf1\xc2\xf9\xdc\x1a\x18\xc9\xc5\x46\x8c\x2c\x7d\xaf\x8c\xb3\x09\xf1\xe3\x70\x45\x64\xce\xb5\xb6\xce\xa0\x80\x00\x0c\x08\xd7\x91\xe7\xc4\x9e\x05\xe8\x15\x83\xed\x75\xd8\xe7\x22\xe3\x09\x07\x0f\x9c\xf3\x78\x0e\x50\x42\xbf\xe1\x58\x59\x86\x0a\xc2\xf3\x02\x03\xe1\x01\xa7\x87\x8e\xd3\xda\x00\x25\x3f\x13\x1b\x9e\xc6\x3e\x27\x8c\xa5\xf6\x63\xfd\xf1\xe9\x8f\xcf\xf2\xe3\xa3\xb6\x51\x73\x42\x0d\xa7\x0e\x8e\xf6\x9a\x8e\x41\x7c\xd7\xd3\x0a\x82\xbf\x11\x87\xcc\x51\x81\xfc\x1c\x23\xae\x5d\x30\x30\x3a\x5e\x32\xad\x6c\xb8\x35\xbc\x61\x24\xc2\x85\xec\x55\x67\x64\xf5\x51\xfc\x74\x32\x89\x9f\x48\x59\x91\xc9\x79\x0e\x4a\xf3\x99\x6e\xf2\x7f\xd0\x8a\x58\x5e\x64\x54\x33\xaf\x33\xad\x37\x64\xee\x2d\x54\x6f\x93\x3a\x7a\xbf\xc9\xa2\xb7\x23\xb2\x3e\xc8\x14\xd0\x5b\x90\x76\x37\xbb\xf3\x5a\xa6\x72\xb6\x97\x8a\x5b\xf9\xfb\x6e\x3b\x41\x73\x2b\x4b\x4f\xdb\x24\xcc\x87\x9f\x76\xb9\xc5\xb2\xdb\xa6\x56\xf6\xc9\x94\xeb\x40\xdd\x2e\x21\xaa\x75\x32\x54\xab\xfd\x6b\x99\x14\xd9\xa7\x41\x6e\xc1\x5f\x6e\x41\xf8\xdb\xb8\x97\x5a\x66\x0c\x25\xd7\x76\x66\xc1\xf7\xf5\xf3\xbe\xb5\x22\x46\x8e\x04\x23\xdd\x8d\x03\xf4\xbd\x13\x5b\xcc\xd9\xaa\xe7\x05\xa8\xa5\x35\x85\x3e\x8a\x5a\xba\x79\x99\x8d\x13\x73\x62\xf6\x4c\xdb\xa6\x9a\x41\x97\x49\x5d\x82\x3f\xf9\x2f\x1e\xdb\x06\x0c\xe4\xa7\xbf\x06\xa9\x33\x3e\xb5\xce\x63\xc8\x5f\xdc\xff\xfe\xba\x67\x4a\x54\x3b\xc6\x86\x53\xda\x42\xc0\x78\x09\x2f\x10\x2e\x52\xf0\x5d\xdb\xa5\x02\x04\x70\x2c\x03\x1f\x58\x96\x4b\xad\xc3\x1c\x4d\x6b\x41\x07\x27\x77\xfd\xb0\xb2\xde\xf8\x40\xed\xb2\x16\x87\xfa\x64\x30\xf2\x56\xda\x7a\xa7\x6c\x40\xce\xc1\x0c\x57\xdf\x81\x93\xf4\x56\x62\xe5\xd3\x95\x6e\xf2\x10\x6e\x1b\xb9\xc8\x46\x46\x1f\x01\xe4\xbb\x9a\xc9\xe3\xca\x22\x26\x5f\x63\x70\x94\x64\xbb\x0e\x32\x57\x6c\x5e\x33\x1b\x2b\x42\x00\xc9\x1f\xd4\x58\xe2\x58\x01\xf2\x8e\xff\xe3\xac\xb8\xf9\x98\x0b\xfc\x18\x0e\xed\xb6\x02\x46\x77\x00\x35\x92\x5d\x96\xe1\x67\xba\x00\x57\x3b\x39\x23\x82\xd9\xbb\x2d\x64\x0c\x4f\x25\x97\x4b\x17\x81\x48\xf1\xf2\xe7\x8a\x66\x71\x7e\x93\xbd\x65\x1f\x5a\xa0\xea\x37\x3c\x4b\x13\x5a\xda\x00\x52\x38\xa3\x44\x49\x6b\x24\x07\x42\x90\x50\xe1\x4f\x7b\xbd\x47\xd8\x62\x95\x14\xb4\xd4\x3c\xa9\x32\x5a\x12\x73\x16\xa6\xb2\x6c\x95\x83\xb4\x11\xa2\x35\xd2\x5c\xb2\x44\x8a\x74\x1b\x05\xe0\x7d\xf3\xdd\x66\x18\x47\xc1\x4a\x6e\x2b\x89\xf2\x9c\x35\x91\xf4\x28\x76\x97\xc9\x89\x3b\xd5\xfe\x88\x45\x86\x91\xd8\x9a\x8f\xa5\x88\x8f\x03\xf2\xe8\x4f\xc5\x88\xfc\x6d\xee\xac\x30\x60\x91\xb1\x89\x5b\x8a\x69\x97\x63\xe7\x50\xd6\x02\xbb\x3e\x50\x13\x59\x42\xde\xdb\x51\x2a\x31\xd9\xeb\x9a\x27\xfa\x78\x44\xfe\x1f\x2b\x25\x26\x87\xb3\x29\x16\x86\xb5\x28\xee\x15\x57\xe8\x89\x0c\xc1\x41\x4f\xc9\x11\x16\xe9\xe5\x79\xce\x52\x4e\x35\xcb\xe6\xc7\xa8\xc7\xba\x32\xbf\x6d\xb6\xae\x8d\xd1\x20\xa8\xe9\xfc\xc7\x3f\xac\x79\x72\xdb\xf4\xcc\x1f\x5c\xc2\x5b\x0d\x19\x0c\x4f\x6a\x6c\xa1\xe7\x41\x72\x8d\xb8\x19\x86\x37\xd5\xf9\xe2\x8e\xcc\xf8\x0d\xfe\xbb\xc1\x03\x4a\x4a\x36\x05\x2c\x47\xcc\xdd\x13\xc7\x31\x50\xfb\x8d\xac\xc4\x6a\x8b\x61\xb4\xf0\xd7\x56\x09\xff\x21\x78\x71\x65\x02\xf4\x9d\x88\x09\xc1\x4c\x02\x0b\x26\x25\x60\xb6\x04\x76\x6e\xc8\x03\x3e\x55\x07\xb9\xb5\xf0\x49\x74\x98\xec\x0c\x73\xd9\x90\x50\xd3\x49\x4a\xb4\xff\xd0\x16\xb8\x0c\xb9\x27\x16\x30\x8d\x94\x60\x6d\xc9\x01\xe0\x27\x42\xb0\x46\x50\xf8\x16\x4b\x5d\x80\x2c\x96\x31\x80\x57\xc9\xe1\xf3\xc3\x4e\x88\x2f\x2e\xa7\x94\x05\x9d\xd2\xcd\xa5\xd4\x63\x65\xa4\xf1\x2a\x49\x99\x66\x65\x0e\x35\xaf\x67\xf2\x06\x7f\x47\xb6\x55\xd8\xa7\x98\x2d\x17\x6e\x56\x3b\x93\x0a\xb8\x52\x9c\x1f\x0d\xe7\x17\x62\x2e\x6e\xe8\x9c\xd0\x52\x56\x22\xb5\x52\x93\x27\xa0\x6f\x1a\x1f\x7e\x2b\x05\xab\xbd\x66\xb1\xcf\x75\xcc\x34\x35\xc7\xe6\xd9\xe8\xd9\x86\xb2\xf6\x2d\x01\xb6\x65\x4a\x3c\xcc\xa6\x61\x29\x74\x61\x38\xee\xcc\x74\x32\xaf\x92\xd1\xf4\x9d\xc8\xb6\x91\xe5\xde\x20\x7a\xc1\xab\x43\x50\xc2\xf8\x04\x6c\xb7\x03\xbc\x75\x53\x72\xcd\x02\xf2\x78\x34\xa1\x99\x82\x5e\xfe\x95\xf0\x22\xec\x71\x2c\x82\xc0\x23\x6d\x16\xb4\x39\xd4\x4c\x55\xe3\x3d\xcf\x99\x3d\x50\x80\x72\xf5\x31\xf3\x08\xf7\xff\xb3\xf7\xae\xcd\x6d\xe4\xd8\xfd\xf0\xfb\x7c\x0a\x94\xf6\x85\xa4\x14\x49\xd9\xfb\x4c\x76\xb7\xe6\x49\x6d\x95\x2c\xd9\xb3\xcc\xda\x1e\xc5\xb2\x67\x2a\x95\xa4\xb2\x60\x37\x28\x62\xd5\x04\x38\x0d\xb4\x64\x26\xb5\xdf\xfd\x5f\x38\xe7\xe0\xd6\x24\xc5\x6e\x8a\xba\x78\x46\x7c\x31\x63\x91\x0d\x34\xae\xe7\x7e\x7e\xe7\xd0\xdc\x71\xe5\xf2\xbc\x71\x76\x84\x4f\x3a\x89\x4d\x6b\x7b\xbc\x9f\xf8\x33\x9c\xa0\xd3\xac\xfb\xa8\x24\x1e\x92\x60\xb1\xc7\xd9\xbe\x11\x33\x7e\x23\x0c\x33\x72\x2e\x2b\x5e\x57\x90\x86\x7c\x89\xe3\x63\x93\xc6\xae\x07\xb7\xe8\x07\x9c\x90\x8e\x24\xe9\x6e\xeb\x52\xfb\x71\xb8\x75\x02\x1a\xe1\xc7\x85\xf5\x05\x7c\x51\x82\xaf\x45\xd5\x18\x79\x73\xdf\xdb\x44\x89\x55\x3b\xb0\xea\x36\x97\x5e\x50\xa4\xc4\x23\xf2\xe8\x5c\xc3\x70\xa4\xaa\xf4\x9b\x0e\x3c\x19\x95\x7d\xd0\xdc\x21\xee\x84\x17\x85\x30\xc6\x87\x6b\x2f\xd3\x10\xf2\x30\x87\x6f\x05\xab\x84\xdf\x9a\xb7\x15\x37\x56\x16\x6f\x2a\x5d\x5c\x5f\x5a\x5d\xf7\x82\x03\x59\xd7\xbe\x85\xf0\x72\xfa\xf3\x25\x3b\x97\xe6\x3a\x49\x54\x22\x9f\x6a\x6a\x2e\xe1\xec\xba\x99\x88\x4a\xd8\xc3\x43\x83\x5c\x6e\xce\x8b\x99\x54\xc2\x33\x38\x15\xb2\xdd\x48\xe1\x73\xab\xdc\xd7\x67\x4a\x39\x95\x27\x74\x5e\x7f\xc7\x6f\x8d\xc0\xe1\x4f\xdc\xf0\xdd\xcf\xa2\x0b\xd8\xc5\x5e\xfd\x14\x38\x98\xf1\xf9\x9e\x7c\x10\x53\xf3\xd9\x8d\xb1\x9f\x71\xfb\x10\x5b\x79\xd5\x61\x2a\x2b\x41\x85\x4d\xdc\x84\x7d\xe4\x0d\xdd\x0a\xd8\xbf\xa5\x6e\xd8\x2d\x47\x1d\x19\x28\xe2\x88\x7d\x96\x8b\xef\xd9\x5b\x65\x9a\x5a\x44\xeb\x46\xbb\x2b\x69\x62\x0a\xab\x57\xae\x60\xbf\x51\x01\x71\x74\x8f\x74\x2d\xf6\xf6\x2b\x9f\x2f\x2a\x61\xbe\x67\x07\xe2\xab\xfd\xee\x60\xc0\x0e\xbe\x4e\x8d\xfb\x9f\xb2\x53\x73\x30\x62\xe3\x79\x70\xca\x4b\x35\x15\x75\x2d\x7c\x8c\x25\x36\x70\xac\x39\xe1\xba\x0f\x72\x5c\x28\x5e\xd7\xc9\x6e\xa5\x66\xb7\x08\x75\xe3\x08\xbe\xa8\x6b\x5d\x87\x14\x97\x64\x19\x80\xd7\x14\x7a\xbe\xa8\xf5\x5c\x26\x66\x3e\x38\xee\x7b\x0d\xe4\x05\xe3\x43\x97\x5a\x3f\xed\xd3\x10\x1a\xfa\x03\x91\x7c\xa1\xba\x1c\x85\xf1\xd4\xc7\x5a\xa0\x16\x49\x6a\x3d\x74\x47\x0f\xb9\xcd\xa7\x5e\x1c\x21\x4b\xb7\xfb\x5d\xc8\xd5\x65\x27\xa5\xb8\x39\x31\x25\x7f\x3d\x80\xd7\x18\x8a\x31\xce\xc7\xc4\x0d\x3b\x78\x7d\x30\x62\x97\x9e\x11\x0f\xd2\x31\xc6\xe7\xa6\xba\x0e\x1d\x82\x9d\xfd\xd5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xc1\x6f\xc8\xb6\x8c\xd7\x6d\x89\xea\xee\x71\xe7\x5c\xeb\xae\x69\xa7\xdd\x8b\x3a\x75\x15\x52\x57\x37\xd1\xb7\xf3\x26\x80\xba\xa1\x34\xa4\xa9\xae\x09\x62\x28\x3c\x62\x84\x85\xab\x27\x55\xa6\x42\x3f\x01\x81\x65\x3d\x51\x3a\x3c\xf5\xec\xbb\x3a\xbe\x1d\xe8\x40\x4a\xfe\xd2\x08\x36\x3e\x0f\x58\x1d\xa2\x36\xd2\x58\x77\x8d\xcb\x8c\x75\x49\xe4\x67\x47\xa7\x73\xfe\xbf\x5a\xb1\xb7\x6f\x2e\x69\x00\xc7\x4f\xba\x54\x5b\xa9\x01\xff\xdf\xa6\x16\x8e\x0b\xf7\x60\xee\xa1\x4d\x9b\xa1\xbb\xef\xd9\x39\xb7\x1c\xf9\x3a\x05\x62\xa9\x48\xca\x1d\xcb\x9e\x48\x55\xd2\x4f\x09\xc3\x7e\x6c\xde\xea\x76\xef\xe3\xb6\xa8\x57\xff\xe0\x97\x4f\xe3\x3d\xf1\xe0\x02\x88\xf9\xd5\x07\x5d\xf6\x66\xc4\x49\x53\x4f\x7c\xff\xe2\xd6\xf4\x0c\xbf\x67\x73\xd7\x27\x73\xda\xfb\x80\x7d\x12\xbc\x64\xee\xfe\xd2\x3f\x7f\x76\xba\x67\x67\x5a\xd5\x89\x85\xf8\x05\xec\x39\x0d\xdf\xcc\x4f\x21\x4d\xa2\x29\xdd\xc9\x81\x6b\x45\xbc\x64\x52\xe9\x09\xa3\xeb\xb0\xef\xb1\x7f\xf9\x34\xde\x61\xe8\x5f\x3e\x8d\xfd\xc8\xdd\x3f\xf5\xf4\xf1\x06\xbd\x93\xf8\x16\xa5\xb7\x77\x2d\x71\x2b\xb2\xe4\x98\x13\xd6\x16\xc9\xba\xcb\x63\xa3\x7d\x49\x62\xfb\x5c\xb1\x6b\xa9\x3a\x24\xf8\xe7\xb7\xcc\xb5\x71\x0a\x05\xc6\xaa\x25\x7e\xc4\xcb\x19\x07\x54\x85\x90\xeb\x0b\xfb\xec\x36\xde\x38\xae\xe0\x77\xdc\x29\x81\x40\xdb\xd8\xb9\x40\x2f\x67\xf9\xbd\x8f\x1d\x08\x2d\xd6\x37\xf8\x00\x91\x9a\x25\xd1\x57\x86\x81\x9b\x65\x72\xc0\x8e\xd0\xaa\xa4\xc2\x4f\x14\xbb\x2e\x2b\x09\x55\x1a\x9c\x76\x9f\x06\xab\x1a\x18\xf2\x5e\x6f\xfd\x8e\x22\x47\x10\x27\x56\x8c\x5b\xec\xc8\xfd\x76\x02\xc6\xb1\xe3\x11\x50\x2b\x78\x10\xc2\xf8\x5b\x42\xc9\xa7\x6d\x42\xc9\xde\xe4\x07\xd8\x01\x77\x63\xfa\x72\x45\xd7\x66\x2d\x57\x84\x1f\x2e\x09\xaa\xf2\x39\x33\x46\x4c\xe3\xec\xc4\x1a\xe1\x7c\x6d\x7d\xb2\x3b\x73\xbc\xef\xe1\x2a\xbf\x8d\xc3\xc5\x42\xb2\xec\x0e\xfc\x33\x36\xf4\x7c\x28\xa4\xca\x78\x38\x90\x2c\x34\x13\x4f\xdf\x25\xd1\x1a\x42\x77\x43\xae\xeb\xce\x5c\x97\x92\x8b\x7d\xf0\x60\xfc\x89\xe8\x3b\x2b\xdf\xce\x4f\x0a\x49\x20\x7c\xcd\x3a\x9c\xc5\xce\x83\x2c\xc4\x62\x36\xed\xe3\x12\x77\x0d\xde\x5d\xe6\x96\xc0\x33\xb1\x98\xb1\x77\x97\x6b\xae\x31\xac\x3d\x8c\xda\xa0\x7d\xf0\xd0\xb0\x4a\x4e\x85\x95\x5b\xa6\xf0\x00\x17\x79\xae\x95\xb4\xba\xde\x8c\xae\xc0\x7a\x5d\x4e\xdf\x5d\x5f\x86\xea\xdb\xb9\x9d\x8d\xd8\x44\x1f\x92\x6f\x39\x2b\x74\x55\x89\xc2\x12\x5a\x1e\x2c\x6f\x68\xb6\x46\x79\x12\x64\x0f\x18\x5d\xff\x09\xd4\x27\x52\x94\x4e\x70\x73\x4f\x3e\xbd\x3d\x3d\xff\xf0\x76\x34\x2f\x7f\x37\xd3\xb7\x43\xab\x87\x8d\x11\x43\xd9\x01\xfc\xe8\xe9\xa2\x17\xf1\xb3\xe8\x84\xc5\xd7\x36\xc8\x20\x8c\xe0\x8f\x3e\x35\x9b\x7d\x31\x18\xb5\x00\xb6\x23\xef\x93\xd2\xda\x0e\x58\xcd\x29\xfd\x9a\x93\xe9\xa9\xa9\x2a\x5c\x6d\x5b\x0b\x31\x48\x6d\x31\x77\xa6\x86\xf4\x9e\xd8\xbd\x0d\x15\xd9\x04\x1f\x56\x86\x78\xfc\x03\xd7\x87\x63\x6c\x97\x49\x56\x57\x31\xb6\xcc\xd7\xf1\x32\xfb\x1e\x0d\x67\x76\xe6\x56\xf5\x5a\x2c\x19\x04\x02\x4f\x75\xed\xce\x53\x9d\x9f\x0d\x61\x0b\x98\xfa\x49\x63\x44\x3d\x22\xb6\xf3\xe8\xcb\xd6\x03\xa0\x6c\x07\x5c\xc8\xd0\x70\xdd\x9a\xd1\xd7\x11\x34\x9c\xe4\x35\xde\xd8\x99\x50\x56\x52\x02\x33\xad\xcc\xda\x45\xa4\x38\xec\x47\x5f\xb5\x8e\xf8\x68\xfd\xd0\xcc\x5e\x10\xc0\xfa\x9c\x49\x77\x6b\xfa\x1e\x47\xd7\x06\xf2\x14\x53\x32\x1f\x72\xb9\x6a\x5e\x6a\x08\xd8\x40\x70\xcb\xec\xa0\xf1\x72\x2e\xd5\x33\xbc\x9d\x85\x54\xe5\xb6\x75\x68\x19\xc0\xa0\x45\x2e\x8a\xd1\x77\x64\xd0\x0f\x7e\x43\xee\x35\x29\xc4\xd2\x20\x0f\x62\xee\x3f\xec\x74\xf9\xe6\x4b\xf3\x4b\x35\xc4\xb7\x0c\x17\x65\x5c\x95\x17\x67\xe0\xaa\x07\x6f\xbf\x26\xa5\x47\x70\xf1\xed\x69\xb7\xd9\x23\x4b\x43\x0f\xab\xe7\x3e\xca\x42\xf5\x91\x79\xee\xcb\xbd\x23\xcd\x5c\x68\x49\xe1\x9f\x01\x6c\x14\xef\xa8\xd7\x97\xdd\x7a\x2c\x78\xcd\xe7\xc2\x8a\x1a\x43\xe0\x28\xa8\x4e\x51\x76\xc2\x8f\x0b\xa1\x2e\x2d\x2f\xae\xf7\x8d\xb2\xfc\xc2\x71\x1f\x8e\xe3\xde\xdb\x15\xe8\x0f\x02\x41\xae\x2d\x53\x2f\xb2\x54\xc4\x85\x9e\x09\x89\x09\x48\x87\x7d\xac\x1c\x01\xe9\x2e\xe7\xae\x11\xf9\x10\x0d\x1b\x10\xe9\x16\xa0\x3b\x21\x82\x1f\x57\x61\x3f\xdc\xb0\xfb\x1d\x20\x12\xb8\x8b\x1f\x2d\x69\x9a\x53\x87\xb9\xfb\x66\x22\x6d\xbc\xf7\x46\x58\xb6\x10\xf5\x5c\x52\x5a\xb7\x56\xac\xa0\xb4\x00\xe0\x6b\x8e\x87\x51\x77\x09\xcf\x53\x4c\x17\x96\x53\xce\x0c\x9b\x08\x7b\x2b\x84\x62\xaf\x5e\xbd\x7a\x05\x72\xc9\xab\x3f\xfe\xf1\x8f\x0c\x60\x26\x4a\x51\xc8\xf9\xea\x83\xf0\xd4\xbf\xbc\x7e\x3d\x62\xff\x71\xfa\xe1\x3d\x44\x95\x2d\xac\x61\x13\x6d\x67\xd4\xb3\x7b\x20\x6b\x6c\x06\xec\xdf\x2e\x7f\xfc\x18\x21\x96\xf2\x5f\x41\x05\x09\xd3\xcb\x43\x04\x5f\xfd\xe1\xbb\xef\x46\xec\x5c\xd6\x90\x4f\x2c\x21\x03\x22\x04\x41\x2e\x7c\x60\x20\xd4\x34\x6b\x67\xf0\x13\x07\xa1\x20\xe1\xb9\xbc\x9a\xc1\x02\xb8\x0b\xa1\xd5\xb4\x92\x85\x45\xb8\x52\xbc\xfa\xb8\xd0\x04\xbf\xc3\x29\xdd\x8b\xa4\x08\x18\xdc\x80\x55\xf2\x5a\xb0\xa9\xf9\xa1\xd6\xcd\x22\xa6\x39\xd6\xc2\x38\x59\xb6\xe0\x0a\xb2\x4a\xa0\xb3\xb8\x57\x46\xd8\x27\x0d\xc2\xe8\x68\x08\xca\xce\x20\xb4\x69\x09\x28\x83\x00\xdb\x38\xc4\xf3\xb0\xe0\x32\x04\x0e\x82\x4f\x3d\x2b\x1a\x12\x74\xcf\x32\x81\xa9\xf4\xb9\x2b\x8b\x5a\xff\x1d\xb7\x4a\x2a\x9f\x05\x45\x12\xb2\x21\x99\x8c\x92\x4e\x55\x62\x73\xf5\x59\xf9\x8e\x17\x52\xc6\x7f\x92\x3f\x35\x9e\xa6\x89\x76\x90\x96\x8e\x95\x1b\x33\x4c\xdd\x35\x6f\x8e\x75\x20\xdc\x69\x32\xb8\xaf\x8d\x5a\x69\x4d\x25\x9a\x88\xfc\x50\xe1\x2e\x4a\x61\x8b\x7d\x60\x28\x2e\x25\x00\x25\xe5\xe0\x32\x9c\xcb\x2c\xca\xc7\x08\xdb\xd0\xd2\x40\xe4\x95\x7b\xb7\x30\x86\xf2\x88\xe6\xbc\xbe\x76\x4a\x02\x51\x81\x11\x44\x3d\x9b\x90\xc3\x84\x09\x65\x37\x68\x2c\x9f\xf3\x65\x96\x35\xe0\x5e\x72\x38\x1a\x1d\xe2\x35\xd1\x35\xc2\x04\xe3\x99\x77\xdf\x3f\x51\xbe\x74\x1e\x95\xce\x17\x58\xd1\x13\xec\x39\x54\x11\x89\x67\xd1\xce\x9c\x56\xaa\x0b\x38\x78\xcf\x8a\xa8\xfd\x4a\x6f\x77\x2f\xb9\x3d\x84\x09\x74\x78\xb4\x6f\x79\xed\x1e\x65\xb5\x37\xa1\x35\xd0\x1a\xd3\x4d\xe8\x5a\x6c\xb6\x77\x99\x81\x79\x27\xd6\xb7\x66\xa8\x87\x73\xe2\x7c\x3f\xf6\xe3\x7c\x94\xaf\x97\xd5\x1d\x7c\xfe\xac\x6e\x3c\xc5\x4c\x97\x9c\x74\x11\x69\x48\x45\x81\x50\xe3\x2f\xa6\xbd\x3c\x6b\x8e\x96\x1e\x9b\x7e\x35\x2d\xfa\x70\x37\xfc\x74\x73\x4c\xe0\x27\x3b\x6b\xde\x3b\x81\x93\x26\x52\xba\xc8\x6a\x07\x55\x68\x37\x00\x19\xd3\x5f\x9e\x11\xfb\x40\xa4\x16\x0f\x19\x9f\x18\x5d\x35\x16\x9b\xc6\x1f\x53\x3a\x0c\x9d\x7a\x94\x05\x20\xbe\xe1\xb1\x84\x2a\xdb\x58\x3d\xb1\x1b\x81\xc6\x4f\x8f\xcb\xf9\x02\x24\xfc\x80\x40\xc2\x01\xfa\xda\x74\x2c\x05\x67\x1e\x0c\xb9\xbb\x30\xb2\x8f\x7e\x65\x24\x3b\x8a\x15\x88\xbc\x3b\x7e\xac\xac\xa8\xa7\xbc\x10\xc7\xa9\xde\x15\x2a\x3d\x85\x10\x21\x9f\x17\x31\xe3\xaa\xac\x50\x00\x2f\x44\x0d\x67\x5f\x7c\xb5\xa2\x76\x4b\x72\x76\x39\x66\x65\x2d\x6f\x44\x6d\xd8\xd1\x1b\xe1\xe4\x45\xc4\x4f\xed\x94\x5d\xb5\xdf\xd8\x4a\x18\xc6\xbe\x34\x3d\xe8\xac\x6f\xa8\x1e\x34\xf2\x94\x47\x25\xf7\x2b\x2e\x13\xae\x2a\x2e\xa9\x49\x75\xd9\x91\x3b\x4a\x40\xa0\x81\x66\x2c\x75\x53\x93\x15\xdd\x43\x36\x17\xba\x76\xea\x12\x76\xcc\x0d\xab\xc5\x95\x93\x66\x6b\x5f\xc7\x5c\xb0\xa2\x6a\xdc\x17\x7b\x0d\x67\xbb\x4f\x00\x60\x34\xcd\xde\x15\xab\x37\x25\xa9\x5a\xdf\xc8\xd2\xb3\x4a\x2c\xab\x1e\x0a\xa6\x2e\xb8\x49\x52\x6d\x92\xe2\x16\xc9\xc2\xa2\x8c\x0e\x0c\x35\x24\xb1\x66\xc1\xfe\xa9\x51\x58\x03\xb6\x45\x87\xca\x34\x7d\x88\xb0\x2e\xc5\x45\x33\xa9\xa4\x99\x5d\xee\x68\x42\x5c\xd7\x05\x06\x2b\xac\x78\xfd\x36\x5a\x12\x8d\x50\x46\x02\xcb\x73\x64\xdc\x31\x5d\xe9\xe4\x28\x0d\x8b\xe8\x5b\xa7\x07\x52\x43\xf6\x47\x25\x08\xc1\xc0\xfd\xf4\x31\x8e\x83\x92\xd2\x10\xb3\xa4\x14\x5f\xd4\x22\xfb\xbe\xe0\x55\x65\xda\x09\xbb\x9e\x62\xa2\xec\xe1\x13\xd5\x70\x4f\xa5\xdb\xee\x50\x74\xa9\x05\x8e\xb9\x71\x62\x86\xcd\x35\xa6\xf1\x28\x00\xe7\xc5\x87\x00\x7a\xc5\x37\x48\x12\x19\x21\x5d\x19\x8e\xcc\x9e\xab\xd2\xbe\x98\x4b\x1f\xce\x5c\x7a\xdf\x38\x3c\x13\x0a\xd4\xf1\x24\x1b\x3a\x83\x25\x0d\xa4\xd4\x93\xdc\x2d\x41\x1d\x7b\x75\x2b\xe0\x3b\x4f\xad\xad\xe5\xa4\xb1\xfd\xf1\xde\x5a\xcd\x81\x4d\x3b\x45\x04\x6e\xf1\x90\x66\x5f\x24\x47\x34\x22\xa7\xe7\xe4\x33\xde\xfd\xc8\x73\x80\xdd\xe0\x97\x87\x86\x95\xba\x68\x02\x6c\x2c\x2c\x5a\x74\xa0\x75\x41\x4f\x64\x7d\xef\x55\x7f\x48\xaf\xf4\x25\x5b\x8f\x57\xa9\x6f\xd5\x2d\xaf\xcb\xd3\x8b\x2d\xd1\xf7\x39\x3b\x8f\xad\x52\x41\xc9\x7f\x0d\x05\x46\xf9\x44\x37\x36\x42\x87\xfe\x7a\xec\xd5\xeb\xd4\x74\xab\x1d\x69\xe8\x68\x8f\xee\xab\xe8\xbf\x98\xb8\x5f\x4c\xdc\xd9\x67\x17\x13\xf7\x18\x4d\xdc\x29\x0e\x6e\x76\x5d\x3d\xbc\x82\xac\xba\xc6\xf6\x3e\xa4\x95\xf4\x3c\x12\x18\x94\xa6\xda\x71\xfc\x2d\x01\x0e\xaf\x48\xdc\xdb\x44\xe8\xf3\x14\x08\x78\xf6\xd3\x5b\x54\x1f\xc8\x4e\xda\xbd\x04\x3a\x7e\x36\xd5\x28\xbd\xab\x24\x3a\x48\x0d\x49\x0d\xf3\x01\xa1\x40\x0f\x48\xef\x52\x65\xac\x0e\x8a\x20\xd4\x3d\x2a\x20\xe3\xa7\xe7\xe2\xb3\xde\x1b\xc0\x7a\xd6\x27\xc7\x4f\xdf\xdd\x60\x3b\xd4\x2a\xc7\xcf\x13\x57\x2c\xc7\x4f\x6f\xdb\x37\xeb\x5f\xbd\x7c\xcd\x74\x1f\xb6\x86\xf9\x8e\x53\xdb\xdd\xac\xbf\xab\x39\x7f\x10\x2b\x67\x3e\x7f\xb6\xfe\x62\xce\x5f\xf9\x3c\xa2\x39\x3f\x21\xdc\x9e\x18\xac\x31\xed\xa7\xe6\x36\x6f\xdf\x9f\x08\x2f\x56\x8e\x22\xfa\x9a\x3b\x72\xde\xb2\x1f\xcb\x35\xa1\x5b\xf5\x70\x34\x3a\x3c\xf4\xf6\x7e\x3a\x9f\x8d\x9d\x0e\xff\xc4\x84\x2a\x74\x89\x9b\xea\xfa\xaf\x8d\x05\xa6\x1f\xd5\xf4\x74\x2c\x73\xff\xae\xd4\x35\x0b\x7d\xf7\xdb\x92\x1e\x37\xd8\x43\x02\xbc\xbb\x17\x8b\x8c\x8c\x31\x40\x0c\xd0\x04\x03\xaa\x10\x71\xc8\x58\xdd\x04\x0b\xfb\x84\x5a\x5b\x50\x51\xe4\x08\xbf\x1c\x15\x8b\x66\x40\x0f\x8c\xe6\x62\xae\xeb\xe5\x20\x3c\xe4\x7e\xcc\x5a\xd1\x13\x88\x3d\x55\x34\x75\x2d\x14\xd4\x37\x79\xae\xfc\xd5\x2f\xc1\x03\xb2\xd7\xb0\xea\xdd\xb2\xdb\xe2\x27\xdf\xd6\xe8\x03\x00\x93\x54\xac\x56\x37\x0d\xc8\x26\x66\x10\xfd\x1c\xee\x5b\xa1\x6e\xd8\x0d\xaf\x4d\xd7\x35\x67\xbb\x72\xd4\x52\xde\x48\xd3\x05\xf2\x7f\xc3\xe4\x2e\x83\xd9\x07\x60\x07\x1b\xbb\x68\x2c\x51\x27\x7f\x76\x3d\x52\x53\x5e\x74\x2e\x0a\x0e\xaf\xef\xaa\xd3\xd6\xfe\x3c\xd3\x42\x32\xf9\xa7\x53\x59\x99\xfc\xd3\xaf\xc8\xcc\xfa\xb6\x3d\xb7\xfe\x1e\xf5\x9b\xda\x1f\xbf\xb5\xbb\xdf\x91\xc8\x64\x22\x30\x98\x17\xcc\x1e\xe0\x12\x80\x31\xfc\x5c\xf6\x4a\x45\xf0\x6d\xf2\x70\x49\x2b\xe6\x0b\x5d\xf3\x7a\xc9\x4a\xb2\x35\x2c\xd7\x64\x84\x26\x29\xa1\xf7\x86\x86\x81\x71\x94\xb2\xde\x53\x36\x42\x8f\x6c\x50\x51\xca\x66\x63\x25\xf8\x4d\xcb\x86\xad\xd2\x45\xbb\x05\x34\x30\x42\x12\xf3\xee\x4e\x7a\xcc\x03\x2b\xf2\xe2\x9a\x2a\x06\xf9\x55\x45\xde\x9f\x24\xb9\x1c\x1c\xb4\x70\xa0\xc1\x3c\x06\xbe\x3f\x2a\xba\xea\x1f\xc6\xbe\x33\x53\x16\x7a\x43\x28\x2c\xe0\x88\x1e\x3c\x76\x12\xc9\x07\x60\x83\x8f\xb4\x4b\xac\x67\x66\x9b\xfc\x5f\x01\x05\xc2\x7a\xc7\xc6\xfb\x86\x01\x0e\x5a\x83\x64\x1e\xca\xa6\x55\xba\x48\x7c\xcf\x19\x87\x82\x6d\x78\xeb\x0f\xbf\xb7\xdd\xbb\xcd\x70\xbd\xa2\x7c\x01\x46\x9f\xca\xa0\x5f\x4f\x16\x00\x6d\x09\x52\x3c\x2c\x66\xd8\x80\xcf\x49\x11\xc1\xc6\xb8\x37\x01\xf2\x7c\xf2\x4c\x7c\xd1\xad\x47\xd8\xb4\x49\x9d\xb7\x5c\xf7\x70\xbf\x5c\x86\x99\x45\xbd\x0d\x52\x20\xbc\xa0\x6e\x1a\x10\x13\xe9\x2d\x24\x2e\xe9\x29\xf8\xae\x62\x59\xb4\x00\xee\xb8\x72\xcc\x94\xac\xf2\x73\xe6\xb1\xec\xc2\xc4\x1b\x45\x81\x06\x8f\x78\x68\x9e\x31\x1f\xec\xcc\xfd\xfa\xf3\xbc\x9e\x9c\xee\x1e\xfc\x2d\xc4\x63\xf4\xe0\x10\x07\x31\x88\x23\x63\x11\x29\x3a\x5e\x1e\xd0\xc1\x7d\xcc\x40\xb8\x79\xde\x33\xf4\x39\x68\xb8\xc4\x3a\x8a\x65\x41\x39\xbb\x32\x43\xbd\xc4\x6e\xf1\x00\x42\x7c\xeb\xd0\xfd\xc7\x6b\xc2\xde\xac\x3f\x11\x53\x1d\x0b\xa5\xa0\x62\x44\x51\xb9\xa5\xa8\x84\x85\x20\x5b\x11\x00\x4b\xd1\x33\x3c\xd7\x37\xee\x4c\xff\x97\x62\x5f\x3c\x74\xbf\x9c\x7e\xcf\xf8\x71\x96\x09\x41\xc5\x67\x94\x10\x25\x86\xea\x56\xf1\x3d\x75\xa3\xcc\x80\x4d\x8e\x7d\x58\x0a\x5c\x3c\xe5\xa4\xc3\xca\x0b\xbe\xa8\x5e\xd7\xc2\x2d\x00\x64\x1f\xd7\x7a\xce\x8c\xe2\x0b\x33\xd3\x16\x34\x44\xbe\xe0\x85\xb4\x4b\x66\x6b\x5e\x5c\x43\xa5\xa2\x5a\xd0\xeb\x06\xac\x38\xa6\xf8\xae\x74\xf9\xf2\xe8\x61\x3b\xab\x75\x73\x35\x83\x80\x58\x7c\xaa\xa8\xb8\xf1\xb3\x5f\xdb\x9e\x94\x1e\xc3\x4a\x2c\x54\x1c\xc0\x03\x6b\x7d\x23\x8d\xd4\x64\xf4\xf5\xfd\x5e\x04\x80\x38\x34\x24\x63\xf9\xdf\x23\x23\x04\x7b\xeb\x8f\x04\xfe\x72\x89\xa2\x0d\x1a\x38\xea\x3c\x46\x40\x07\x64\x73\x45\xb8\x08\x91\xce\x05\x1f\x16\xf2\x4d\x37\xf2\xb5\x2f\x3d\x0e\xdb\xb5\x7e\x4c\xba\x06\xff\xbd\x47\xf0\x14\xaa\xd4\x89\xf3\xf2\xf4\x62\x6c\x52\xa5\x04\xcf\x16\xc1\xdf\xc1\x0f\x95\x56\x57\x29\x9a\x40\x3c\x99\x8e\xa2\x2a\xa8\xf2\x72\x23\xcb\x86\x57\x48\x4b\x69\x30\x67\x97\x63\x6c\x2e\xaf\x66\x76\x78\x2b\xc0\x28\x83\x2c\x27\xde\x19\xff\x52\xb9\x12\xb4\x23\x0d\xd0\x5e\x4b\x46\x05\x34\x70\xb9\xa1\xdd\xf2\x25\xa0\xd7\x50\xa4\x49\xe6\x37\xf5\xf8\x62\xd8\xc5\xba\x15\x87\xe1\x9d\x86\xaa\x1d\x4e\x7a\x00\xab\x95\x5b\x62\x38\xa9\xab\x63\x73\x0b\x9f\xc0\x01\x86\xaf\xa9\x40\x1b\x77\x1b\xe4\x64\xbc\xbb\x55\x9a\x07\x90\xcd\x6e\xe2\x26\x7f\xa6\x0a\x8a\x3d\x65\x84\x83\x9f\x13\xeb\x59\xe2\xef\x70\xd7\x86\xab\x72\xc8\x2b\x77\x72\x2e\x7e\x3a\xa3\x40\x67\xbc\x08\x99\x3f\xdf\x17\x43\x92\x2a\xa0\x67\x3b\xd1\x61\xed\x15\x80\x74\xf8\x89\x28\x81\x68\xa4\x75\x23\x6f\x9d\xa2\xec\x8b\x3b\xff\x74\x36\x60\x72\x24\x46\xfe\xaf\xf0\xa8\xa7\x5a\x56\x5f\x61\x34\x60\x08\xf5\x84\x73\x07\x43\x49\x6d\x52\x69\xdb\xbf\xfd\xab\x1b\xa4\xfb\xf5\xcf\xc3\x7f\x4d\x40\x47\xff\xfc\x37\xaa\x24\xfd\xb7\xd6\xb7\x69\x48\x59\x00\xdf\xff\x9b\x2f\xe3\x4d\xd0\xd5\x7f\xa3\x9a\x5c\x50\xb8\x7a\x04\x75\xa9\x6f\x78\x25\x4b\x3c\x8d\xf0\xee\x5a\xfc\xdd\xdb\x17\x61\x99\x82\x6d\xa7\xe0\x56\x28\x20\xd4\x3e\x37\x43\x69\x8b\xcd\xa9\x3a\xad\x1b\xff\x11\x58\x06\x30\xb7\x6c\xc0\xac\xd6\x70\x1d\xf1\xca\x9f\x2a\x26\x7c\xc9\x4e\x9c\x2b\x2c\x07\xa7\x78\x35\xcf\x7b\x5c\xb7\x6e\x85\x43\x26\xae\x1b\x07\x8c\xed\x9f\x95\xb6\xff\x1c\xb6\xdf\x47\x6a\x00\x83\xd1\x8c\xdf\x68\xe9\x71\xc8\xdd\x4d\x51\x58\xd8\x31\x20\x63\x4f\x96\x6c\x2e\x8d\xe5\xd7\x62\xc4\x2e\x1d\x6f\x49\x9d\x62\xb8\x7a\x8a\x01\x90\xa5\x28\x59\xa3\xac\xac\xe0\xd7\xd8\x8f\x1b\x72\xca\x73\xc6\x53\x66\x9a\xc2\xd1\xd6\x45\x2d\x86\x9e\x8b\xd1\x53\x2b\xb4\x20\xce\x65\x10\x36\x7b\xc6\x51\x25\x58\x94\xd0\x14\xd6\x83\x2b\x3a\x5e\x2b\xe1\x5c\x6e\x9c\x5a\x15\x91\x73\xc1\x62\x9a\x11\xfb\x08\xcc\xaa\xf2\x9e\x61\xd4\x4e\xc8\x8e\xa9\x44\x21\x8c\xe1\xf5\x72\x00\xf8\xee\x32\x60\x82\x53\x04\x0f\x70\xd4\x39\x57\x88\xae\x5e\x8b\x42\x2b\x63\xeb\xa6\xb0\x58\x6e\x6f\x52\xeb\x6b\xa1\x42\xd4\xe0\x6a\xb1\xfb\x18\x46\x03\x6e\x2f\xcd\x8a\x19\x57\x57\x49\xb9\x9a\x39\x2f\x61\xed\xff\x1a\xa4\x1c\x3f\x1f\xb7\x02\x7c\xea\x04\x0b\x69\x61\x29\x26\x8e\x8f\x04\x6b\xec\x7f\xa9\x00\xcb\x33\x88\xe6\x52\x37\x25\x59\x6d\xa1\x5d\xbd\xe8\x17\xeb\x69\xdb\x1b\x02\xdb\xde\x73\x1c\xd8\x5c\x58\x5e\x72\xcb\x77\x88\x05\xfb\x10\x6b\xec\x91\x1f\x92\xea\x9c\x06\xff\x24\xf1\x21\x2f\x6e\xe9\x85\x4c\xd3\xa0\xe0\x26\xce\xfc\xca\x43\xe2\xb5\x75\x67\x8a\xfc\x05\x18\xe2\x05\xf2\x8c\x2f\x62\xe6\xba\xf7\xbd\x21\xb9\x88\x15\x1a\x23\x39\xe9\xe6\x8d\xea\x69\x88\x75\x4b\xbf\xc3\x1a\x7d\x8e\x2e\xb3\x22\x0f\xf3\x5a\x2b\x82\x20\x97\x10\xca\xca\x5a\xa4\x59\x67\xb4\x74\x8d\xc2\x43\xde\x5a\x44\x58\xe5\x2b\x61\x4d\x0c\x54\x41\x3a\xec\x88\x0b\xf1\x3b\xd2\x49\x81\x48\xd3\xc2\x92\x5a\xb7\x5e\x16\xc2\x65\x37\x9a\xe8\xac\xa3\xfc\x0f\xb2\xae\xbb\xd8\x9e\xb1\xaa\xc0\x07\x5d\xf6\x31\x57\xb7\xc0\xf8\x63\x17\x31\x8c\x13\x03\x72\x0d\xe8\xf6\xf8\x00\x38\xad\x4c\x96\x3b\x87\x44\x6e\xc6\x6f\x76\xb7\x55\x45\x19\x69\x18\x10\x8d\xe1\x75\x43\x78\xdd\xf0\x75\x77\x9b\x5e\x9f\x40\x10\xff\xe9\x1c\x10\x92\xbf\xa4\x97\x01\xd5\x91\x94\xcb\x9e\x56\xcf\x56\x52\x72\xe8\x81\x68\x3e\x39\x13\x83\x03\x97\x12\x1e\x84\x74\xd4\xe2\x7b\xf6\xcf\x19\x97\x27\x69\x2a\x68\x4a\x18\xb0\x7b\xe4\x55\xa7\x11\x6d\x85\xcf\x41\xcf\x1f\x3f\x6e\x75\x06\xe2\xc5\x7a\x8d\xc2\x07\x06\x07\x91\xcf\x89\x67\x35\xd8\xd0\x7c\x1a\x82\x3b\x5e\xb5\xae\x2a\x51\xc3\x14\x48\x7b\x6a\x39\xd3\x01\xd2\x14\x4d\xbb\x83\xa0\xa2\x06\x19\x53\x89\xdb\x20\x4c\x70\x83\x08\x2e\xde\xf1\x25\xa8\x7e\xde\xc6\xfe\xa8\xba\x91\xfb\xfd\x54\x2d\x71\xf0\xe7\xc9\xe2\xa2\xf2\xc9\xae\xdc\xab\x9c\xdc\xa9\xf8\xa4\x72\x9c\x2f\xd9\x80\xf0\x9e\x16\x29\xb7\x3a\x79\xea\x93\x98\x92\xd6\x98\x7e\xd5\xad\x2d\xf2\x81\xac\xe1\x28\x46\xb2\xf8\xe2\x76\x11\xb9\x84\x56\x3d\x7b\x24\xf7\x80\xb7\x7a\xcb\x12\x6a\xd7\x8d\xa0\xb3\x03\x6f\x27\x17\xde\x2e\x4e\x3c\xc8\xfe\x94\xaa\x4b\xc4\x54\x6c\x70\x67\x9d\x93\xf6\x67\x17\xaf\x1f\x84\xd5\x80\xb7\xbf\x9f\x0b\x27\x2f\xab\x7e\x31\x86\x2e\xbc\xee\x70\x05\x7f\x78\xce\x18\x7c\x1c\x13\xe1\x6e\x5f\xcc\xeb\x86\x7d\x4f\xdb\xae\x09\x7c\x88\x57\xe0\xaf\x00\x1e\x4b\x46\xed\x50\x18\xad\x16\x10\xb8\x02\x6f\x1c\x41\xf5\x04\xae\x96\x24\x71\xd8\x99\xac\xcb\xe1\x82\xd7\x76\x89\x6a\xee\x20\x7b\x5b\xc8\x06\xe8\x35\xf1\x1d\xbd\x4f\xdd\x90\x9a\x37\xae\x30\x4c\xde\x5b\xb3\xc9\x99\xb0\x71\x5d\x1f\x63\x3e\xdd\xf3\x0d\xd6\xce\x27\x45\x42\xf5\x9a\xeb\x93\xcd\x27\xa3\x2c\xf7\xe7\x6f\x8e\x3c\x99\xdc\x53\x8c\xec\x2a\xad\xb4\xa5\xd3\xa0\xed\x20\x8d\x80\xe2\xe6\x7a\x1a\x38\x7d\x99\xc7\xd2\xe8\x89\x01\x92\x24\x1a\x1f\xf2\x43\x85\x99\xdc\xa1\x4f\xde\x92\x36\x0d\xf7\x83\x1d\x29\xad\xf0\xce\xe0\xb3\xc7\x18\xeb\xb4\xc1\x7a\x06\x8f\x04\x6e\x93\xea\x6a\xc9\x1d\xf5\x6c\x4c\xaa\xd2\x6d\x1a\x90\x65\xd0\xe2\x4c\x53\x14\x42\x04\xbd\x3f\xad\xa5\x13\xef\x34\x0d\xd9\xd7\xe4\x34\x1a\xd0\x66\x8c\xe5\x55\x15\xf5\x6d\x5a\x28\x0d\x9c\xd8\xdb\x28\x13\x06\x9d\x65\x04\x91\xe9\x01\xaa\xbd\x63\x7c\x4e\xa3\x0a\x8c\x35\x90\x76\x99\xe2\xf0\x67\xc2\x08\x28\x3a\x06\xd5\x70\x39\x45\xcb\x58\xa2\xb0\x84\xc5\x04\xa2\x44\xb5\xe6\x67\xbe\x62\x0a\x48\xe1\x04\x22\xe1\x28\xd0\x84\x17\xd7\xb7\xbc\x2e\xa1\xe6\xf0\x82\x5b\x89\xf8\xe5\x03\xe4\x8a\x29\x93\x53\x87\x87\xa9\x2b\x47\xaa\x36\xff\x4d\x07\x72\x94\x8c\x7a\x85\x2f\x1f\x07\x7e\x6c\x44\x40\xd7\x8e\x03\x63\xbc\xb1\x7a\xce\xad\x2c\x40\x3d\x97\xd3\xc4\x32\x3a\x0f\x68\x8d\xad\x8a\x8a\x40\x91\x43\x6d\xfe\x9f\xdb\x83\xbf\x73\xe0\xc9\x58\xfd\x34\xd7\x8f\x2b\x21\xea\xa1\x72\x3f\x78\xb4\xc0\x82\x5f\x0b\xc1\xe4\xdc\x09\x58\x1c\x0a\x92\x4c\x43\xde\x95\x37\x17\xdf\xb5\x28\x4e\x8a\xfc\x19\x6c\xf4\xc9\x53\x68\x63\x70\x1a\xa8\x61\xf6\x56\x07\x75\x2e\x5a\x42\x29\x71\x69\xd0\x12\x39\xa8\x8d\xbb\x6a\x6e\x59\x92\x7b\x34\x70\x67\xe7\x56\x54\x95\xfb\xff\x5d\xb7\xc9\x8c\xd6\x8d\x08\x2b\x03\x1b\x56\x4a\xd3\x2a\xef\x7d\x54\xd6\x7a\xb1\x20\xfb\xd2\xfc\xb8\x3d\x22\x70\xbb\xd4\x37\xc2\x24\x15\xac\x51\x66\xbb\x12\x2a\x94\x60\x27\x50\x10\x20\x28\xed\x57\x64\xdb\xb8\x76\x70\xe9\x72\xa1\x11\xfb\xee\xe5\xa1\x5f\x41\x17\x75\x2b\xe5\x0f\x8c\x19\x61\xd2\xee\x31\xfb\x42\x85\x9f\xc2\x9d\x0d\x91\x91\x9d\x64\x5a\x34\x85\x91\x58\x3b\x62\x47\xa7\xd5\x62\x96\xf4\x9a\x4a\x91\x21\xe2\x3a\x1f\x69\xf6\xbe\xb3\x5a\x1b\xf3\xd1\x37\xe9\xf3\xea\x17\x09\xb3\xe3\xe7\x45\xc2\x7c\x91\x30\x7f\xdb\x12\xa6\x9f\x0f\xd0\x98\x7b\x4e\x2a\xb0\xdf\x9c\xd6\xdd\x35\x3d\xf6\x51\x5b\x72\x8b\x80\x08\xc2\x37\x6a\xda\x1c\x08\xdd\x2d\x5f\x8e\x94\xb0\x94\xcd\xeb\x8d\x2a\x9f\x7c\x7f\x3f\xd4\x8e\x19\x93\xec\x96\x1c\x73\x7f\x67\x7c\x1e\x71\xf2\x16\xab\x91\x3f\x44\x2f\x0d\x7c\x7f\x68\xc8\x47\xe1\x7e\x87\x58\xfa\xb4\x83\x42\x8c\xd8\xa5\xf0\xa0\x9e\xd9\xcb\x57\xb3\x46\x4b\x61\xb9\xac\x4c\x64\x08\x9f\x37\x30\x98\xdd\x09\xfe\x43\x9f\x92\x10\x33\xba\xab\x0e\x12\x03\xa5\x93\x90\x8c\x34\xa2\x28\x3e\xb0\xc9\x04\x3a\x9e\xb2\x4f\xa2\xd0\x37\xa2\xc6\x95\x81\xea\xc1\x4e\xce\x7e\xc7\x65\xe5\xd6\xc5\xaf\x4f\x34\x2d\x01\x2c\x73\x6e\xd8\x4f\xec\x79\xe1\x50\xd2\x26\xcc\x69\x50\x94\x2e\xec\x9e\x27\x17\xfb\xa2\x16\x37\x52\x37\xc6\xc7\x3d\x35\x16\x89\xb1\xb1\x24\xd9\xce\xe4\x55\x40\xf7\x0f\x81\x12\xb5\x28\x74\x5d\xc6\xc3\x67\x2c\xb7\x8d\xc9\x93\xad\x0a\xb4\xc5\xef\xcf\xbc\x1b\xd6\xf1\x81\x65\x80\xdd\xf8\x2d\x4c\xb7\x57\x8b\xb6\x77\x1c\x64\x56\x03\x79\x8d\x09\x9d\x49\x69\x0c\xc6\x35\x4b\x85\x0b\xef\x36\x7b\xe4\x7f\xc2\xc6\x83\xb8\xc7\xd1\x6d\x29\x4d\x52\xe6\x3f\xf8\x00\x25\x48\xa9\xdc\x5d\xdb\x44\x1d\x0b\x97\x16\x8e\x99\x17\xee\xce\x51\xff\xfb\x44\xef\x3a\xad\x9c\x4c\x8a\x44\x20\xb9\xb8\x6b\xfc\x8b\x72\x3e\x6f\xac\x3b\xaf\x23\x36\xc6\x4c\x16\x90\x6c\x49\x61\x9a\xc6\xec\x0c\x51\x9b\x0e\x5e\xc1\xf4\xb3\x8b\xd1\x9e\xed\x62\xb8\x5f\xd9\xa8\x4f\xe9\x92\xa7\xa8\x14\x4e\xbb\x03\xdf\xbc\xdb\x1d\xef\xbb\xcf\x9e\xee\x90\x56\xbf\x6e\x96\x3d\x0f\x30\x7e\x76\x11\x65\xf1\xd3\x53\x3e\xc5\xcf\x6e\xb7\x06\x3f\xfd\xa5\x0e\xfc\xac\xca\x1e\xad\x22\xfe\x5e\x06\xc9\x76\x66\xa1\xcb\xd1\x9a\xbb\x13\xe2\x38\x74\x49\x41\x1a\xb9\xfd\x05\x53\xbe\xc6\xae\xfb\x6b\x1f\xb8\x14\xe8\x2c\x95\x4c\xab\xc0\x92\x22\x4b\x81\x28\xb7\x74\xe7\x76\x98\xd9\x8e\xe2\x4e\x2b\x20\xd1\x91\x92\xe1\x9c\x2f\x86\xd7\x62\xd9\x7b\x5b\x76\x38\x05\xab\x2f\xc7\x79\xcc\xf9\xa2\x47\x3f\x18\x40\x7b\x0f\x4a\x7a\xf8\x1e\x43\x70\xf1\xcb\x09\x31\x5e\x1f\x15\x1c\x23\x92\x0b\x3d\x5f\x34\x56\x24\x0c\x9a\x58\x69\x6f\xae\x95\x81\x90\x9c\x60\x1d\xbd\x61\xe8\x76\x18\x89\x5c\x87\x02\x38\xe9\x67\xe7\xeb\xbf\x2b\xde\x46\xfa\x79\xc6\x01\xc0\xad\xc9\xf6\x4f\x86\x61\xf7\x4c\x88\x61\xf7\x49\x8a\x61\xfb\x4c\x8c\x61\x21\xbd\xee\x3e\x37\xe6\x93\x4f\xec\x6b\xdd\x19\x12\x61\xef\xba\x33\x19\xbe\x53\xe8\x47\x1a\x5f\x90\x9b\xc2\xcb\xc2\x1d\x00\xd7\x6c\x9a\x9e\x45\xb7\x15\x6c\xd6\x18\x43\x26\xbe\x86\x22\x0c\x89\x9a\x04\xda\xff\xad\x34\xa8\xd8\x28\x26\xe7\x0b\x04\x66\x84\x5b\x37\xf4\x92\x11\xd9\x84\xc3\x48\x0a\x88\xa5\x61\xe2\x2b\x58\xc6\xf1\x65\x2f\x17\x9c\xbd\x5c\xf0\xce\xed\x9f\xf2\x82\x63\x7e\x5a\x9f\xf4\xc9\x56\x5d\x47\x6c\x4e\x90\x29\x7c\x22\x2a\xf6\x4b\x23\xea\x25\x73\xda\x66\x8c\xc2\x86\x62\x14\x4e\x70\xc1\x38\x66\xf2\x2c\x75\x97\x5c\x1e\x51\xd1\x02\xe9\xee\xed\x57\xa7\x6a\x03\xea\xc0\x3d\xc8\x5e\xbb\xab\x1c\x58\x06\x57\x2b\xac\x60\xaa\x4a\x63\x20\x58\xa6\x5c\x3b\x9d\xeb\xf4\xe3\xf9\x6e\x16\x8b\xa7\x50\x63\x4e\xef\x98\x20\x2e\x44\xf8\x25\xaf\xfd\x19\x5c\x1e\xec\x5a\x2c\x07\x14\xae\x48\xb5\x76\xfc\xc3\x18\x75\x9b\x03\xc0\x77\x05\x16\x5b\xb7\x40\x8f\xae\x01\x75\x85\x0c\xcf\x5b\xf9\x45\x78\x44\xdd\xa9\x07\xb4\x78\xfa\xd9\x04\x33\x8e\x67\x02\xf0\x92\x7d\x16\x5a\x38\x06\x90\x79\x07\xd4\xe2\x51\x55\x1a\x06\xc8\xbe\xb8\xb0\xf7\x9e\x6a\x38\xa6\x59\xfe\xd4\xb5\x58\x1e\x1a\xc2\x78\xd0\xca\xcc\xe4\xc2\x57\xf3\x01\x4a\x40\x27\x97\xfd\x04\x61\x9c\xbe\x0b\xbc\xf3\x63\x35\x60\x1f\xb5\x75\xff\x7b\x0b\x11\xdd\x70\xd6\xcf\xb5\x30\x1f\xb5\x85\x6f\x1e\x7d\xb1\x70\xb8\xf7\x5e\x2a\x72\x87\x92\xa1\x08\x32\x0f\x20\x9b\xd6\x47\x0a\xc3\x92\x50\x10\x59\x58\x56\x69\xd8\x58\x31\x5d\xfb\x35\xb1\xbe\xd4\x83\xa1\x2e\xbc\xab\x27\x71\x72\xaf\xe9\x83\x96\x52\xd7\xd9\x4a\xde\xd1\x5d\x70\x63\x4b\xff\x0b\xd8\xc8\x21\x24\x21\x84\x37\x43\xc1\x02\x6e\xc5\x95\x2c\xd8\x5c\xd4\x57\x80\xe6\x51\xcc\x76\xdf\xa0\xfe\x74\x1b\x3f\x3b\x51\xef\xf4\xc5\xbd\x4f\x06\xb0\xba\xf7\x10\x60\x7e\x5f\x86\x89\xbd\x20\x8b\x98\xf3\x85\x3b\x14\xff\xe7\x38\x01\xec\xcb\x3f\xa0\xc0\x88\x19\xb1\x53\x5f\x9e\x3e\xfd\x8d\xcc\xc5\x69\x37\xae\x07\x27\xf2\xff\xd2\xc8\x1b\x5e\x09\x4c\xbb\xe0\x2a\x80\xae\xeb\xe9\x0a\x9b\x1e\x50\x95\x11\x47\xa5\x82\x79\xe6\xe0\x5a\x2c\x0f\x06\x2b\x07\xe9\x60\xac\x0e\x22\xa4\x4e\x76\x74\x02\x43\x03\x9b\xe4\x01\xfc\x76\xb0\x6f\xce\xfe\x44\xa2\xfd\x0e\xa7\x84\x2c\xef\x67\x15\x47\x4f\xcd\xae\xfe\x90\x76\x3f\xeb\xe0\xb2\x2f\x93\x67\xa2\x27\x8b\x92\x6c\xf6\xee\x38\x80\x64\xcc\xfe\x01\xe1\xbd\x56\xef\x86\x6a\xdd\x75\x87\xd9\x5a\x0b\xff\x0a\x20\x53\x3e\xd5\x36\x43\x31\x88\xb1\x68\x1b\xd6\xeb\x27\x70\xe0\xe8\x29\x7b\x17\x61\xb0\xc1\x04\xef\x98\x36\x25\xdf\x3a\x45\x58\xaa\xa2\x6a\xc8\x77\x03\x4d\xd1\x91\xf0\xf0\x8b\x73\x8f\x43\x15\x3b\xf0\xa7\xc9\xc7\xbe\xad\xe4\x59\xb5\x23\x81\x20\x30\x2c\xc4\xbe\xe0\x5a\xed\x7b\xae\xd3\x2d\x59\x2d\x39\x74\x7a\x91\xcb\x1e\xef\xe4\xa4\x16\xec\x6c\xc6\x95\x12\x55\x82\x4d\x42\xb6\x90\x50\x7c\x14\x04\x12\x2a\x39\x7a\x98\xd7\x1c\xf5\xf4\x4d\x05\x24\x9c\x98\x74\xb6\x27\x98\xfe\x5f\x53\x09\xd0\xcd\x48\xf5\x7d\x8b\x7f\x22\xb0\xf6\x4c\xdf\xb2\x52\xb3\x5b\xa8\x32\x75\xe3\x98\x16\x04\x7f\x19\xcf\xee\x92\x91\x42\x9c\x68\xa1\xe7\x8b\x5a\xcf\x65\x08\x9e\xa2\x6d\xdc\x2b\x90\x47\xd5\x74\x40\x6c\xcc\xf7\xa0\x6a\x54\x5e\xc0\xe7\xdd\x19\xb3\xbc\xbe\x12\xd6\xf5\xc6\x54\x33\x9f\x88\xce\x68\x23\x0f\x81\x18\xfb\x2d\x15\x7c\xdf\x6f\xc9\x52\xdc\x86\x9f\x7f\xfe\xd8\x17\x30\xf7\x30\xb6\xdc\xb4\xb7\xb7\xba\xae\xca\x5b\x59\x7a\x87\xf3\x91\x7b\xf8\xb8\xeb\xf8\xf7\x8c\x9f\xdb\xe3\x84\xdf\xde\xca\xb2\xf7\x72\x40\xa3\x7c\x19\x7c\x18\xb8\x5b\x06\x06\xeb\x40\xf5\x38\x25\x14\x3d\x81\x16\xc7\xec\xad\xc4\x24\x70\x68\x0f\x8e\xeb\xf9\x44\xaa\x08\x04\x10\x97\xd9\x11\x63\x77\x5f\xbc\x6a\x62\x84\xc5\xf4\x5d\xc8\x9c\xd1\x76\xc6\x8c\x9c\x37\x95\xe5\x4a\xe8\xc6\x54\xcb\xce\x47\xe5\x69\x96\x7a\x5a\x89\xaf\x78\xb2\xfb\x30\xb9\xd0\x28\x67\x76\x10\x22\x1b\xd1\x2e\x56\xb8\x5d\x8c\x30\x2f\x4f\x02\xe7\x0b\x59\xe1\xe2\xab\x28\x28\x79\x6b\x51\x35\x57\x72\x4b\x96\xea\x6f\xac\x06\x4d\x2c\xf7\xd1\x18\x11\x71\x95\xba\x56\xe1\x7b\xa4\x92\x31\x4f\xcb\xe1\x3f\xaf\x2f\x17\x53\x8a\x85\x50\x25\x00\xd8\xbe\x8b\x27\x17\x07\xbf\xd7\x95\x23\x30\xd8\xbe\x54\xcb\x63\xc8\x66\x14\x3c\x09\x4f\x98\xe9\xaa\x34\x4c\x7c\xb5\x35\x77\x84\x69\xee\x48\x50\x68\x33\x65\x5c\x75\x27\x32\xcf\xa3\xa0\x03\xdb\x3b\xb7\x7f\xd8\xea\xe6\xcf\xb1\x40\x79\x9c\x7b\xf6\xf5\x9e\x0b\x0d\x21\x21\xa6\xbb\x62\xf2\x04\xa9\x35\x05\x81\x62\x00\xeb\x6a\x26\xea\x8e\x85\x81\xcc\x9a\x12\x28\xad\x51\xbd\x14\x55\xff\x26\xaa\x04\x4d\x01\xbf\xa5\x0f\x64\x26\xb5\x68\x69\xd4\xf4\xa5\x2f\x4e\xdc\x41\x83\xa6\x73\x9b\xf0\x01\xb7\xea\xbe\x23\xca\x3e\x67\xc6\xad\x65\x0c\xf5\x6e\x94\xda\x46\xc5\x1e\xa2\xe6\x0b\xb7\xdc\x08\xdb\xcd\x9a\x92\x8b\x0e\xb1\xa5\xbb\x80\xe9\xf9\xa2\x9f\xb0\xe6\x10\x64\xe5\x79\x4c\x13\x36\xfc\x33\x49\x19\x2a\x7b\xd2\xc9\x17\x7e\x7d\x3c\xa4\xa6\x08\x5e\x64\xec\xa3\x74\xbb\x52\x70\xdb\xb9\x40\x62\x27\xbe\x40\x23\xf8\xf2\xa5\x77\xe5\xfd\xa4\xa5\x97\x43\xe0\xdf\xf9\x22\x8c\x42\x80\x6c\xa3\xe4\x2f\x4d\xaa\x0e\x00\x06\x59\x98\x36\x3d\xbf\xaf\xb9\x5d\x15\x22\x1a\xaf\xce\xa5\xb9\xee\x03\x1d\xbb\xd2\x38\xbf\x12\x3f\x9c\xbd\x65\xf4\x6d\x27\xfb\x52\x1f\x03\xd3\x7d\x21\x29\xaf\x0a\x11\x8d\xb6\xa5\x34\xd7\x7b\x82\x9d\xed\x2e\xd5\x2f\xca\x8f\xdb\x42\x1d\x1f\xcf\xfe\xd5\x96\x7a\x3d\x92\x5e\x02\xf1\xb8\xd4\x0d\xbb\x25\x84\x2a\x92\x9a\x3f\xcb\xc5\xf7\xec\xad\x32\x4d\x2d\xa2\xe7\xb6\xdd\x95\xe3\xba\x9d\x65\x68\x00\x01\x33\xdf\xef\xcd\x56\xb6\xef\x53\xf2\x9c\x8d\x6f\x0b\x5e\x5b\x10\x8f\xfb\x1e\x83\xd0\xd0\xd3\xa7\xe4\x0b\xd5\xe5\x1c\x8c\xa7\x3e\xee\x6e\x40\x50\x3c\x01\x66\xd6\x3f\xe4\x76\x3e\x41\x9f\x4b\xf7\xfa\x5d\x40\x66\x64\x27\xa5\xb8\x39\x31\x25\x7f\x3d\x80\xd7\xf8\xcc\x92\x7c\x4c\xdc\xb0\x83\xd7\x07\x23\x76\x29\xe7\xb2\xe2\x75\xb5\xcc\x0a\x67\xc4\xe7\x1c\xb3\xf0\x1d\x82\x57\xee\xd5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xe1\xd3\xba\xe9\x9e\x2d\x51\x76\x3c\x7e\x6c\xe2\xc2\x1e\xd4\x7e\x89\x74\xa6\xf7\x99\x28\x3d\xc7\x26\x7e\x94\xa1\x0e\x9e\x47\x92\x2e\x95\xa3\xf3\x23\xf6\x85\x08\x34\xf1\x2d\xdc\x34\xb8\x32\xfe\x89\xa7\x5a\xd4\xc7\xd1\xfb\x76\xd2\xe0\x56\xcd\xc1\x4f\xb7\x4c\xdb\xb5\xc4\x2b\x69\x3f\x89\x85\xee\x25\x21\x60\x93\x96\x3d\x4e\x5a\xf7\x85\x36\x12\x60\xe5\xb9\x65\x1c\xaf\x6d\xd1\x54\xdc\x89\xd5\x68\x8d\x1b\xb1\xf3\xb7\x17\x9f\xde\x9e\x9d\x7e\x7e\x7b\xfe\x3d\xfb\x81\x7a\x92\xa9\x84\x37\x62\x9f\x53\xd0\xce\x24\xe0\x97\x90\x11\xc3\xbb\x06\x44\x86\xb8\x8a\x50\xdc\x00\xc5\xc6\x15\x1b\x2b\x69\x63\x31\x0b\x8c\x3b\xab\xb4\x12\xbe\xd6\xfb\x42\x93\x35\xf0\x4a\x5a\x82\x28\xc2\xce\xdc\xcf\x79\x6f\x94\xcb\xe1\x44\x99\x98\x8a\xf1\xe8\xa2\x45\x5c\xdc\x7d\x89\xff\x1e\xad\xbe\xaf\xec\x1b\x6a\x07\xf8\x7c\x63\xb4\xfe\xc7\xef\x91\x19\x84\x32\x3a\x1e\x95\x50\xd7\x59\x95\x1b\xa8\x81\xef\xd8\xcc\xe1\xe8\xd0\x0b\x14\xd5\x4a\xc9\xa4\xd0\x69\x0a\xbc\x9a\x1f\xb6\x11\x63\x3f\xfa\x88\x6e\x40\x5e\x59\x5f\x7d\x09\x41\xbc\x92\x1a\x3e\xad\x23\xeb\x33\x10\x9b\x49\xfa\x52\x42\x6a\xbd\x92\x37\x84\x9f\xb1\x57\x2b\x5e\x7c\x7d\xef\x5a\xb6\x71\xdc\xa4\x7f\x7c\x7a\xbf\xdf\x91\xe1\xfd\xeb\x3d\x2e\xba\xb6\x34\xaa\x42\xcf\xe7\x08\xeb\x39\x0b\xf9\xfe\x31\x65\x3f\x50\x85\xbd\x69\x3e\x08\x50\x3a\xdd\x72\xf8\x5b\xf4\xcc\x37\x6a\x69\x3a\xe1\x6b\xca\x59\x50\x51\xcc\xed\x5f\x35\x83\xb0\x70\x8d\x4f\xc7\x26\xd2\x7e\x12\x5e\x7e\xf2\xe9\xed\xe9\xf9\x87\xb7\xa3\x79\xf9\xe8\xa4\x45\xa8\x72\xa1\xa5\xb2\x66\xbb\x7e\xb3\xad\x46\x60\x77\xf2\x13\x5e\xda\x97\x3b\x87\x86\xfe\x8c\xf9\x2f\x12\xf8\x60\x4a\x27\x4f\xf6\xd0\xea\x85\xae\xf4\xd5\xfa\x62\x19\x3d\x36\xe7\x77\x08\x03\x38\xe4\x43\xb7\xeb\xfb\x15\xf5\xbb\x54\x3d\x6b\x4b\xf9\x58\xe5\xcc\x2d\x43\x9c\x6b\x90\x9a\xa1\x38\xd9\x33\x9d\xee\x83\x08\x67\x2b\x6b\x80\x8a\x24\x5c\x60\x8f\xac\x1c\xa1\x8a\x93\x8a\x83\x5d\xa5\xb6\x87\x5e\xba\xed\x02\x9b\xa3\x3f\xdb\xcb\x4a\xe6\x6b\xe6\xdb\xe4\x04\x6e\x51\x8b\x61\x40\xd5\x84\x42\x78\xba\x4e\x18\x6e\x4a\xef\xbc\xf5\xc6\xdb\x7a\xf0\xa9\x6a\xd9\xb6\xe2\x24\xe9\xe1\xde\xf4\x85\x58\x46\x55\xb5\x8c\x68\xdd\xa4\x45\xf3\x2b\x44\xcb\xac\xc9\x4c\xbc\xa8\xe5\x8d\xac\xc4\x15\x20\xe6\x4b\x75\x95\xe0\x0c\xa4\xc8\x04\x04\x29\x91\x1b\x5d\x3f\xb8\xbf\x92\x12\x29\x70\x2e\x3e\xfe\xf8\x19\x8a\x2f\x80\x83\xeb\xde\x42\xb8\x7b\x21\xdc\xb7\xe1\x70\x08\x26\x83\xa3\xbf\x3b\x79\xb2\xac\x8e\xd9\xcf\x82\xde\xa3\xa1\x3a\x44\x0d\x85\x1b\x67\x3a\x40\xf5\xc3\x58\xe3\xca\xc2\x71\x44\xf7\x3e\x3d\x75\xe2\x9e\x74\xb2\x12\xb2\x9a\xec\x79\xa8\x53\x8f\x08\xdb\xe8\x63\x7a\x7c\xd9\x73\x8f\x64\x7f\x67\x2a\xe7\x4d\xab\xeb\xce\x67\x70\xfc\x78\x7a\xc8\x99\x59\xce\x2b\xa9\xae\x23\x7c\xeb\x54\x13\x82\x89\x60\xee\x07\x7f\x62\x6b\xc1\xab\xcd\x94\x72\x97\xf3\xb1\x57\x2a\x69\x77\xb0\x00\x82\x85\xce\xdd\xb3\xbf\xf8\x6b\x4f\x6e\xe8\x94\xc4\x1d\x1c\x3c\xbb\xf9\x4a\x53\x18\xd9\x87\xac\x41\x83\x8c\xa6\x29\x36\xbe\x3c\xbb\x1c\x3f\xaa\x85\x7a\x13\x4b\x80\xd1\x3d\xa1\x54\x27\x7f\xd9\xe6\x1d\x1e\xb2\xaa\xd9\xfe\x0c\xaa\x77\x17\xba\xb6\xbc\xda\x13\x11\x28\x66\x7c\x71\xda\xd8\xd9\xb9\x34\x00\x56\xd3\x57\x08\x58\x69\x9f\x44\x3a\x63\x89\x0d\x8f\xeb\x2c\xfd\x71\xa0\xe7\xce\xfe\x72\x7a\xc1\x78\xe3\xf6\xd7\x12\x06\xfc\x5e\x1d\xee\x7e\x64\x97\x98\x61\xb0\xe3\xbc\xa8\xf5\x96\x59\xf9\xa7\x1e\x7a\x4e\x0f\x11\x87\xfb\xe2\x8b\x00\x1a\x8a\x14\xec\x19\xfb\x1f\xa4\x92\x56\x72\xab\x3b\x96\x95\xcd\x8e\x40\xd6\x36\x18\x04\x1a\x63\xf5\x9c\x4e\xf0\xd8\x3f\x01\x2e\x64\xe0\xe2\x2b\x8d\xa2\xb5\x00\xa4\x77\x58\xb1\xb1\x72\xb2\x36\x2f\x44\x2b\x00\x72\x00\xd8\xec\xd8\xb7\x0c\xcf\xfc\x2b\x19\xa8\x00\x87\xb4\xfa\xf3\xf7\x59\xc5\x9c\x95\xf2\x63\xde\x4a\x11\x6b\x5b\xed\xd5\xe2\x23\x7f\xe9\x4b\x14\xe4\x2f\xaa\x65\x69\xc3\x09\xfe\x7b\xc3\x2b\x5c\x98\x8f\xfb\x36\x4b\xe5\x8b\xdc\x77\xbc\xf9\x0e\xd1\xd0\xe3\x76\x7c\x0c\x5a\x7a\x63\x10\xe1\x14\xe7\x63\x6b\xae\x8c\xdb\xa3\x5c\x17\x3b\x24\xc7\xd3\x21\x3b\xb2\xc5\xe2\x78\xaf\xf3\xec\x1f\xda\x5e\x35\x2a\x15\x38\x70\xe4\x9f\x71\x5b\xde\x87\xd0\xf6\xae\x83\x7c\x10\xd7\x10\x9c\xf2\xbe\x56\x15\x6a\x15\x76\x2b\x9d\x17\xb2\x7e\xf6\x5e\x1a\xeb\xeb\x66\xc1\x17\xd2\x50\xb9\x07\x90\xbb\x2e\x9c\x22\x27\x17\xff\xc3\xcb\xb2\xfe\x1e\xb9\x14\xc9\xe4\xf0\x6f\x13\x30\x37\xb9\x0a\xbe\xc4\x23\xbb\x5c\x10\xa6\xf1\xe7\xb3\x0b\x86\x75\xec\xfe\xf4\x07\xac\xd3\xff\xff\xfd\xfe\x0f\xaf\x3a\x6f\xf7\xd3\x05\x8f\xef\x68\xc7\xd8\xbb\x8f\xe9\x59\xc4\x0d\x66\xf1\x81\x00\xd7\xe8\x64\x93\x4b\x0c\xc7\x73\x94\x95\xae\x3a\x1e\x2c\xb7\xcb\x81\xde\xef\x26\xc1\xbc\xc4\xd9\x3d\x69\x9c\x1d\x0b\x19\x25\x48\x24\x7a\x1e\x97\xb4\x29\xa4\x18\xae\x92\x1d\xa4\x38\x17\xcf\x8f\xe2\x6c\x5d\x9b\xed\xa7\x28\x3f\x3d\xa9\x33\xde\x57\x29\x8c\x21\xec\xe7\x1f\x2f\xff\xe7\xfd\xe9\x9b\xb7\xef\x61\xa4\xe4\xbf\x77\x47\x43\xaa\x9d\xe3\xa7\xba\x1f\xb5\x2e\xca\xeb\xf6\x05\xe9\xe7\x96\x51\x2d\x87\x8c\x62\x1f\xdf\x5d\xf6\xf5\xc5\xdc\x57\x40\x57\xd3\x4e\x73\x7f\x5c\x6b\x1b\x14\x9f\x13\xf5\xfe\xf2\x47\x76\x36\xca\x25\x38\x5b\x99\xfe\xe5\x76\x0a\x47\x78\x6f\x15\x69\xeb\x0e\xb0\x67\xe0\x77\x70\xf3\xc5\x35\xd8\xbb\xc7\xe1\x81\xd6\xaa\xab\x1c\x50\xf7\x4f\x2c\x3a\xc4\x56\x5e\x04\x70\x97\x14\x69\x5b\xed\x68\xb6\xa3\xd6\xc2\x04\x90\xcc\x67\x7a\x52\x16\xeb\xca\x40\xf4\xa1\x5e\x6b\x3b\xc8\xaa\xca\x66\xbe\x98\x2c\x97\x62\x53\x4d\x17\x1f\xa1\xc0\xe7\x09\x74\xf8\x3e\xf1\x0d\xe2\x57\xf8\x0d\x42\x11\x3f\x3a\x01\x84\xd7\xee\x31\x90\x36\xf4\xd7\xf7\x20\x87\x86\xed\x2c\xb9\x5e\x3b\xc4\xb8\xf1\x2c\x9a\x62\x8e\xd2\x74\xba\x27\xde\x3e\xf6\xb8\xda\xce\xcf\x3b\x2a\x3a\xfb\x56\x72\x16\x33\x6d\xb5\xda\x39\x4a\x7e\x5d\xf3\xfc\x42\x5f\xc0\x13\x67\xb1\xda\x60\x52\x8a\x1b\x22\x28\x83\x33\x02\x6a\xe8\x10\xbb\xd0\xca\xbb\x25\x72\xa7\xc4\xa3\x8b\x20\xe5\xf8\x7c\x4f\x97\xef\xdb\x4d\xf1\xec\x6b\x0c\xde\x6b\x30\x48\xd9\x3b\x27\xc5\x35\xf1\x2b\x36\x3e\x27\xd1\xcc\x27\x9c\x18\x3a\x90\x6c\xf3\x89\xdc\x1b\xeb\xd4\xb5\xbd\xd5\x75\xff\x54\xef\xbc\x61\x2b\x56\x81\x7e\x5b\x49\xc5\x7a\x8e\xb7\x07\xc7\xf8\xc4\x37\xe8\x12\x6e\x50\xab\x92\xc4\xa6\x9b\xf4\x10\x17\xe9\x69\x2f\xd0\x7d\x19\xd5\xc3\x66\xf9\xee\x55\x48\xf7\xc7\xad\xe7\x54\x7d\x33\x32\x26\xb8\x4d\x8a\xd4\x82\x83\xc9\x25\xb9\x71\x7b\xa3\x0e\xb5\xc6\x4a\xe1\x7d\x08\x83\x6f\x83\x06\x5c\xc4\x81\xae\x2a\xb7\xaa\x5a\xa5\x08\xd2\x94\xc6\x3b\x60\x88\xb2\x3c\xe7\x0b\x2a\xa8\x56\xea\x5b\x75\xcb\xeb\x92\x9d\x5e\x8c\xf7\x43\x0d\x7a\xc4\x59\xe3\x49\xea\x86\xe8\x95\x47\x5a\xc7\x96\x54\x50\x4f\x40\x09\x6c\x36\x91\xd6\xc4\xd2\xcb\xc2\xa6\x7a\xa5\xa3\x82\xc1\x97\xe5\xee\xb2\xbb\xb7\xd4\x53\xc2\x30\x15\xd3\x85\xe5\x95\xaf\xd6\x42\xe5\xf8\x5e\xbd\x7a\x85\xa6\xb0\x57\x7f\xfc\xe3\x1f\xb1\xbc\x64\x29\x0a\x39\x5f\x7d\x10\x9e\xfa\x97\xd7\xaf\x47\xec\x3f\x4e\x3f\xbc\xa7\xf2\x3f\x06\x51\x49\xb0\x67\x58\xf7\xb4\xb1\x19\xb0\x7f\xbb\xfc\xf1\x63\x2c\x0d\x92\xff\x0a\xdb\x1a\xa6\x37\x62\xe7\x49\xfc\x53\x6a\xe8\xe2\x76\x46\x55\x1d\x2d\xe3\xd3\x29\x1e\x0c\x5f\x9f\x84\x2e\x9c\xcf\x1e\x97\x57\x33\x5f\x0e\xcc\x1d\x89\x0a\x02\xb3\x9c\x4a\x8e\xa6\x41\x8f\x6c\x80\x71\x66\xd0\x57\x20\x93\x30\x94\x01\xab\xe4\xb5\x60\x53\x03\x45\xc1\x22\xfc\x5f\x2d\x8c\x13\x4a\xa9\x08\x36\x76\x16\x77\xc6\x88\xce\x58\x0f\x0f\xe1\x01\xea\x5c\x86\x28\x37\xdd\xd3\x1d\xf2\xf0\xad\x84\x5d\xec\x63\x49\xf1\x0a\xba\xd5\x7a\x1a\x8f\x4c\x36\xd6\x8b\x30\x1a\xdc\x3a\x42\x09\x88\x74\x82\x57\x1a\xca\x99\x86\x9d\x8e\x5c\xcc\x87\x1c\x2c\x17\x62\xfb\x54\x7a\x83\x2f\xf6\x05\xe0\x45\x42\xf5\x81\x77\xae\xae\x97\xc7\x8b\xf8\xd6\x19\xae\x02\x9f\xe8\xc6\x7a\x1f\x36\xfd\x0e\x09\xd8\x56\xfb\x25\xea\xf8\xb2\x1d\x90\x27\x77\x41\x20\xee\x0d\x62\x9a\xfb\x9b\x81\x27\xe4\xa2\xc4\x80\x09\x5e\xcc\xd8\xb5\x58\x0e\x91\x6e\x2d\x38\x64\xf3\x60\x11\x22\xb7\x16\x59\x85\xa9\xa4\xd6\xda\x59\x58\x32\x1f\x18\x90\x70\x1f\x9f\x0d\xe4\x85\x50\x43\xf2\x12\xc1\x88\xaa\xc4\x52\xe0\xb1\xaa\xa9\xe0\xba\xff\x9a\x6a\x0a\x8c\x57\x92\x54\xdc\x7d\x13\xa5\x6b\x66\xee\x7a\x73\x8c\x86\x70\x74\x90\xb8\x5b\xa3\x56\x5a\x53\x6d\x75\x12\xfe\xe0\x85\xdc\xa3\x33\x27\x11\x15\x50\xcd\x98\x0a\x2b\xd2\xb3\x7e\x95\xc2\x42\x64\x49\x34\x46\xd8\x86\x96\x06\xeb\x92\x36\xaa\x12\xc6\x30\x09\x33\x9c\xf3\xfa\x5a\x78\xc0\x18\x5e\x8d\xd8\x85\x1b\x64\xc0\xaf\x42\x58\xe4\x1b\x2a\x1b\xcb\x97\x59\x76\x90\x7b\xc9\xe1\x68\x74\x88\x04\x7e\x4d\xae\x50\x8f\xf3\xb1\x1b\xa6\xee\x0e\x58\xba\xd9\x41\xfc\xc0\x17\x06\x91\x81\x9d\xc8\x07\xc8\xd7\x1a\xb2\xe0\xec\xcc\x33\x30\xde\x19\x44\x69\x75\x3a\x3b\x00\xc0\xee\x8a\x5b\xbe\x0b\x6a\x79\x27\xbf\x45\xfe\xd9\x1d\xad\x7c\x27\xac\xf2\x4d\x48\xe5\xb4\x53\x74\xdb\xfa\x63\x38\xdf\x03\x62\x7b\xde\x0b\xe6\xd5\x7f\x72\x23\x25\xc8\x1d\x19\x4a\x4f\x27\x19\x91\x40\x9f\x2a\xf1\x4d\x09\x85\xe3\xe9\xba\x22\xb0\x3e\x59\x30\x91\x97\x3d\x0d\xc5\x62\x5b\x4f\x2d\x0d\xf6\xab\xe5\xc2\x7a\x8b\x87\xed\x4f\x1f\x71\xb1\xfd\xe9\xe6\x0c\x6c\x7f\x72\x85\x2d\x49\x4b\x0a\x44\x3f\x8d\xe2\x87\x25\xb5\x1a\x30\xbb\xe3\x15\x1c\xb1\x0f\xc4\x14\xf0\x30\xf2\x89\xd1\x55\x63\x43\x26\xd3\x1a\x8e\x01\x9d\x7a\x84\x6f\x4c\x29\xf5\x8f\x25\xfc\x03\x38\x27\x92\xe5\xbe\xac\x04\x3f\x3b\x5d\xf1\xbe\xc5\xe8\x7e\xb5\xc1\x24\xf7\x58\x43\x2f\x4a\xec\xbc\x8e\xbe\x83\x80\x3b\xe1\x63\xa9\x33\x19\x07\x22\x49\xac\x41\x01\xca\x8b\x2b\x54\x07\xaa\xf7\x14\xbb\x59\x6d\x68\xac\x64\x98\x38\xbd\x18\xef\xa4\x01\x24\xed\x37\xe8\x00\xe9\x13\xbf\x62\x2d\x60\x8c\x5a\x40\x5a\x76\xe7\x3c\xce\x9c\x4c\xca\x8e\xec\x3c\x7b\x31\x72\x65\xd8\xef\x1c\xb1\x4c\x83\x4e\x73\x0c\x3d\x34\xf6\x44\xb2\x9a\xe0\xee\x79\xaf\x23\x5c\xe2\xe7\x2e\x72\x3e\xa2\xf8\x08\xeb\xd1\x29\xba\xb1\xfd\x59\x2d\x76\x07\x93\x65\x97\x50\xda\x06\xf5\xc1\x44\xb1\x5c\xe8\xf2\x7b\xac\x0a\x01\xb5\xe3\xb0\x28\xcc\x00\x6b\xe3\x98\x01\x2a\x8c\x4e\x8a\x48\x7c\xc5\x75\x62\x72\xdf\x59\x6e\xd8\xa9\xca\xd1\x7d\xea\x1c\xb9\x0d\x84\x99\x5f\xf4\xdd\x45\x76\xcf\xb2\x45\x2c\x61\x4d\xbb\x15\x42\xc9\xf6\x94\x7a\xf2\x1b\x68\x8a\x99\x98\x73\xc4\xf0\xf3\xd3\x73\x54\xe6\xb6\x96\xd6\x0a\xc4\x52\x12\x35\xd4\x7c\x1d\x64\x3e\x83\x83\x9b\xd7\x07\xbb\x94\x83\xb9\x67\xc5\x1e\x16\x77\x61\x0f\x8b\x71\x91\x89\x6c\xee\x5c\x83\x2e\x51\x01\xf0\xa6\x6a\x19\x24\x1c\x83\xb9\xc1\xd5\x7b\xf4\x89\xef\x43\x8f\xda\x55\x7f\x1a\x04\x81\xe1\x45\x7f\x7a\xd1\x9f\xf6\xa2\x3f\x25\x8c\xc5\x13\x9c\x35\xba\x54\x1a\x30\xec\x15\xaa\x98\xc8\x94\x00\xf0\xb8\xa3\xe9\x55\xa9\x58\x29\x1d\x2d\x6e\x4e\x1f\x3a\xf4\x0a\x16\x9d\xe3\xc6\x4e\x87\x7f\x62\x42\x15\xba\xc4\xcd\x77\xfd\xd7\xc6\x82\x68\x13\x75\x92\x74\x2c\x73\xff\xae\xd4\x6a\x07\x7d\xef\xba\x75\x3b\xd1\x01\xef\x0a\x7c\xb7\x27\x06\x1f\xd9\x7a\x48\x26\xa6\xe9\x07\xac\x01\xe2\xef\xd1\x09\x89\x55\xa7\x43\x11\x7c\x28\x1d\x7b\x84\x5f\x8e\x8a\x45\x33\xa0\x07\x46\x73\x31\xd7\xf5\x72\x10\x1e\x72\x3f\x66\xad\xe8\x89\x63\x90\x09\x8a\xa6\x76\x1a\x60\xb5\xfc\x56\xa5\x03\xbf\x40\x8f\x2c\x1c\x84\x7d\xea\x57\x34\x28\xfd\xe4\x47\x22\x82\x8a\x81\x7e\x1f\x8b\x28\x4d\x03\xe4\xa1\x19\x44\xb5\xd3\x7d\x2b\xd4\x0d\xbb\xe1\x75\x87\x48\xbc\x75\x9f\x7b\xca\x03\xa5\xbc\x91\x66\xb7\x7a\x87\xad\xa9\x5f\x12\xd3\x40\xbb\x8e\x6e\xec\xa2\xb1\x44\x29\xfd\xad\xf0\x29\xf3\xe1\x36\xb4\x84\xa2\xd7\x07\x3b\x0d\xe3\x9b\xa9\x2f\x8c\x9f\x1d\xab\x0c\xe3\xe7\xbe\xb5\x86\xf3\x5e\x76\x3e\x36\x7b\x2d\x2c\xee\x3f\xfe\x58\xec\xe3\x1e\x46\x16\x19\x71\x1e\xbc\x70\xfa\x48\x17\x0d\xc3\x4d\x76\xb2\xdb\x10\x42\xfd\x7a\x93\x0d\xfd\xf8\x2b\xb6\xd6\xec\xd7\x67\x4b\xf9\x85\xbf\x71\x87\xed\x25\xd5\x33\x78\xf1\xd6\x76\x3a\x82\x2f\xde\xda\x17\x6f\xed\x8b\xb7\xf6\xc5\xda\xf0\x62\x6d\x78\xf1\xd6\xb2\x17\x6f\xed\x5e\xd6\x70\x7f\xde\x5a\x14\xf5\xd6\xf9\x6c\x49\xd8\x8b\x0e\xdb\x47\xf5\xd7\x52\xe1\x9e\xd3\xa2\xd0\x8d\xb2\x9f\xf5\xb5\xe8\xec\x74\x68\xc9\xff\x2b\xfd\x00\x00\xc2\x06\x7d\x60\xf5\xe1\x47\x53\x0e\xfa\x4b\x25\xbd\x64\x8b\x5d\xa4\x0a\xde\x94\xd2\x49\xfe\x3b\x1f\x33\xdf\x41\x0a\x4e\xa4\x4a\x51\xc6\x1f\xe8\x2a\x5b\xb7\xd6\x23\x76\xca\x6a\x51\xc8\x85\xa4\x32\xf2\x1c\xbf\xc7\x83\x17\x6a\x23\x48\x6b\x44\x35\x25\x8c\x7a\x95\xd6\xfa\x89\xf2\x3b\xd1\xc1\xb5\xaf\x41\x0e\xa5\x3d\x92\xb9\xaf\x85\x54\x8b\xbf\x7b\xd6\x46\xa3\xf9\x9c\xf6\x90\x9a\x57\x60\x2a\x59\x89\x21\x78\xd9\x42\x52\x82\xf5\x43\x5f\x7f\xf1\x75\x21\x6b\x38\xbc\x97\xa2\xd0\xaa\x4b\x4d\xd5\x0d\x1b\xb4\xd2\x53\xe4\x4f\x60\x1b\x15\x25\x2b\x9b\x3a\xd4\x4c\xbd\xe1\x95\x2c\xa5\x5d\x06\xaf\x1d\x95\xd7\xe2\x78\x63\xc2\x36\x9a\xb8\x8c\x8c\x2f\x16\xb5\xe6\xc5\x4c\x98\xe4\x6d\x28\xa0\x50\x12\x59\x88\x7d\xc7\x12\x70\x20\xa3\x40\x1b\xc7\x20\xab\x25\xab\xb5\xf5\x8e\xf7\x0d\x2f\xfc\x9c\x74\x06\xcd\x91\xcb\xd9\x7a\x09\xde\x79\x9d\x76\x81\xa3\x92\xd3\xf4\x0f\xc3\x74\x55\x7a\x08\x93\x3f\xbd\x72\x42\x61\x41\x67\xd0\x11\x3f\x00\xb8\xb0\x9a\x55\x8e\x61\x3b\x82\xb8\xb9\xf1\xef\xbf\x63\x33\xdd\xd4\x66\x94\x82\x0e\xbc\x86\xef\x50\xbf\xf3\x42\xa5\x65\x95\xe0\xc6\xb2\xd7\xaf\xd8\x5c\xaa\xc6\xf1\xa9\xde\xc7\xa6\xbf\x1c\x94\x48\x40\x7f\xf8\xae\x73\xbb\xbe\xb2\xcf\x46\xa9\x67\x81\xd8\xc8\x24\xfa\xd0\x4d\xc2\xc4\x38\x44\x16\x6f\x09\x42\x44\x74\xd3\xd5\x56\x56\x3f\xc0\xfd\xfa\xa5\xd1\x93\xa5\xed\x93\x44\x49\x2d\xf2\xec\xc9\x7f\xa7\x2f\xbb\x80\xa7\x44\xec\x94\x3b\x5f\xfa\x20\x15\x2e\xae\xa4\xb1\x5b\xea\x5b\xc4\xfc\xca\x3b\x1f\xeb\xce\x56\xae\x9c\x76\xd0\x33\x57\x06\xda\x78\x89\xd8\xdb\x96\x8a\x42\x60\x31\xcb\xf3\x58\x29\x49\x69\x7c\x76\x6b\xf7\x4f\x0c\x38\xe6\x0f\xc8\x1e\x50\xd3\x3b\x4e\xb5\x9b\xd0\xe5\x8f\x44\xef\xb9\x62\xb3\xfc\x16\x18\xa9\xae\x10\xe4\x7c\xde\x54\x56\x2e\xaa\x38\xef\x4f\xbe\x01\x11\xf2\xd4\xe6\xc6\x13\x33\x11\xc7\xc4\x62\x44\x9b\x02\xfb\xe4\x51\xe8\x4b\x28\x8b\x58\xdd\xb5\xe3\x07\x0b\x5e\xf3\xb0\x78\x50\x49\xd7\x1c\x93\xf9\x8e\x83\x47\x91\xe0\x30\x5d\x2b\x5e\xc5\x11\x27\x5e\xa4\x7d\x1e\x1a\x2b\x14\x57\x1d\x4c\xd5\x39\x3c\x17\x34\x62\xfa\x36\x04\x93\x61\x19\x94\xd6\x69\x21\xa1\xe6\x0d\x2f\xae\x85\x2a\xb1\x68\x14\x4c\xbb\x5c\x2a\x3e\x27\xb4\xad\xa4\x1e\x77\xab\xbd\x19\x90\x61\x02\xd3\xf7\x7c\x9a\x31\x72\xdd\x7d\xae\x41\x63\x7a\x43\xd9\xb8\x26\xdb\xee\xb9\x41\x93\x4d\x2d\x6f\x0a\xe1\xf9\xbf\x6b\xb7\xcf\xa1\xdf\x74\xc8\xa5\x5f\x19\xbc\xdf\x9e\xe4\xfc\x02\xb9\x0f\x96\x73\x00\xd5\xe2\x95\xbb\xda\xcb\x90\x33\xda\xda\xdc\xc9\x72\xbf\x55\x6f\xea\x49\x9f\xcc\xdf\xc3\x7a\x52\xe6\x97\xf8\x13\x2f\xb5\x61\x6f\x2a\x5d\x5c\xb3\x73\x01\x42\xd7\x43\x96\x67\xa9\x27\xe5\x53\x42\x78\xcf\xf9\xd5\x36\x3f\xdb\x90\xcd\xb5\x92\x56\xd7\x77\xd3\x8b\xc7\x2b\x3b\xf9\x02\xf7\xbc\x11\xa1\xca\x9d\xe6\xe7\x0c\xf6\xec\x8e\x5b\xdf\x8d\x87\x46\x41\x3d\x83\xdb\x89\x5f\x51\x15\xb0\x1d\xef\xda\xef\x66\xfa\x76\x68\xf5\xb0\x31\x62\x28\x3b\x38\x74\x7b\x4c\xf3\x5a\x2c\xc1\x8b\xdd\x73\xa2\xd4\x2c\xd3\x19\xac\x06\x0b\x14\x7c\xef\x38\xf7\xa7\x37\xe7\x5f\x8c\xa8\x47\xa9\x0c\x78\x22\x6c\x71\x52\x88\xc5\xec\x84\x7a\x78\x96\x8b\xe2\x89\x48\xdf\x55\xf1\xed\x90\xcd\x14\xba\xaa\x28\x31\x5b\x4f\xd9\x99\x58\xcc\x42\xc7\x8f\x3d\xeb\xa7\x43\x04\x5e\x68\xdd\x17\x08\xf5\xd0\xb5\xc9\x2f\x11\x7c\x83\x77\x28\x39\x4c\xf5\xa4\x5f\x11\x8a\xc7\x3a\x3e\xcf\xba\xd4\xe6\x03\x2e\xce\xc3\xc2\x29\x1f\x66\x78\xca\x69\xbc\x67\x0e\x96\xec\x23\x46\x32\x12\x34\x9e\xa2\xd0\x5d\x8a\x92\xe9\x1b\x51\xd7\xb2\x14\x86\x05\x1a\x94\x6a\xa9\xb2\x7a\xec\x75\x7b\xc1\x6d\x7e\x72\xdc\xe6\x1d\xd4\xa1\x43\xd0\x87\x32\x32\x05\xdf\xac\x90\x29\x5e\xce\xa5\x7a\x76\x84\xca\x14\xbc\x12\xe3\x1f\x7b\xe8\x1f\xd4\x22\x57\x41\x2e\xe9\xcb\x04\x3f\x6d\x0b\x2a\xd9\x5f\xc3\xb9\x61\x4a\x97\xdb\x4c\xaa\x0f\xa0\x48\x5c\x71\x2b\x6e\xb7\xb2\xc3\x61\x24\x54\xdb\x9f\x04\xe1\xf4\x29\x55\x8e\x67\x81\x11\x98\x9c\x79\x04\x3d\xdb\x27\x53\xa5\x5d\xeb\x6b\x9c\xc4\x56\x29\xfc\x6e\x1b\x74\xd7\x9f\xe0\xd3\x8b\x31\xfb\x01\x1f\xdf\x2f\x7a\x61\xad\x2d\x8a\x81\xe7\x7a\xce\x65\xdf\x22\x1b\xed\xe6\x6d\xf4\xd5\x74\x0a\x17\xe1\x59\x46\x0f\x27\x05\x5c\xa6\xf2\xaa\x71\x3a\x1d\xe9\x61\xcf\x0a\x60\x6e\x45\x74\x79\xbe\x00\x73\xf7\xaf\x06\x91\x98\x9c\x7c\x5c\x64\x94\x58\xfc\x56\x02\x2b\x09\x3e\x50\x66\x84\x32\x12\x1c\x32\x89\x57\x9c\x2a\xfd\x61\x69\x49\x0c\x82\x44\x11\x67\xc0\xde\xeb\x2b\xa9\xfc\xed\xd5\xe4\xaf\x9b\x72\x59\x75\x5d\x8c\x17\x99\xe4\xc9\x65\x12\x63\xaa\xb7\x8a\x4f\xaa\x2e\xe1\x06\xf9\x51\x0b\x0d\xd9\xbb\x8a\x5f\x31\x01\x7f\x9c\x94\xd2\xb8\xff\xb3\xcb\xcb\xf7\x60\x84\x6f\x94\x97\x98\xc1\x40\x4d\xb4\x2f\x24\x29\xe0\x45\xdc\xef\xdd\x41\xd2\xb3\x03\xfa\x5f\xd2\x92\x49\x55\xba\x81\x27\xa5\xe0\x30\x48\x0a\x9e\x40\x3c\xc4\x10\xf3\x8b\x61\x03\x13\xc1\x3e\xcf\x64\x71\x7d\x91\xd8\xdd\x75\xed\xbe\x53\xc9\x57\x19\x03\x6b\xff\xb6\x4f\x6a\x49\x43\xbd\xe8\xaf\x1a\x27\x2d\x3d\x1f\xf0\x04\xe3\x92\xe6\x0f\xbf\x71\x63\x74\x21\xa3\xcf\x05\x6c\x34\x91\x39\x94\xc0\x1c\xf6\x3b\x27\x10\x0f\xfa\x4e\x07\xe5\x8f\x35\x1c\xcd\xef\xa6\xaf\x8e\x6b\x52\x0e\x26\x95\x9f\xf5\x5e\xa7\x80\x67\x66\x07\x68\xf4\xd8\x70\x15\x1a\xdd\x0b\xc3\x2d\xc7\x82\x0f\x53\xa7\xcd\xf3\x82\x98\xaf\xcd\xb9\xb2\x7d\x01\x22\x9d\xa0\x09\xf7\x36\xf1\x2e\x69\x1b\xeb\xd4\xf0\x96\x37\x11\xbf\x23\x57\x03\xdc\xb9\x85\x5e\x34\x15\xc6\x73\xdc\x1f\xdf\xdd\xdb\x8c\xf1\x3d\x7b\x72\x3d\x3c\x06\x6a\xe9\x61\x1a\xd8\xdb\x3f\xd2\xf9\xd7\x81\x5d\x9a\x08\x77\xaf\xfe\xf0\xdd\x77\xdf\x3a\x9a\x69\x57\x15\xfc\x21\xe0\x4c\x3b\x9a\x68\xd7\xe4\x17\x8d\x5f\xf2\x8b\x7e\xbb\xf9\x45\x0f\x8f\x42\xbb\xe7\x0c\xa2\x9e\xb1\xb9\xfd\xe2\x72\xbb\xe7\x08\x75\x8e\xde\xed\x1b\xb9\xdb\x23\x0b\x68\xbf\xb9\x3f\xbd\x63\x59\xfb\xe4\xf9\xbc\x64\xf7\xfc\x5a\xb3\x7b\x76\x89\x65\xed\x9f\xc9\xd3\x27\x86\xf5\xd7\x98\xb5\xd3\xe3\x72\x76\xcf\x2e\xb9\x77\x4e\x49\x7f\x10\xc0\xfe\xf6\xb4\x5d\x0a\x52\xc5\x96\x6b\x35\x48\x9f\x54\xee\xb1\xc7\x0e\x0f\x4d\x02\x2d\x66\xb5\xbb\x81\x8f\xa2\x90\xb0\x1e\xda\x18\x76\xaf\xfb\xd4\x86\xa4\x36\x3f\x5e\xb6\x1c\x33\xe1\xeb\xa7\xf1\xc7\xfc\x16\x1c\x1e\x2f\x35\x5d\xbe\x11\x93\xbb\xc9\xd0\x5a\xbc\xb5\x02\x48\x00\x30\x72\x3d\x49\x51\x22\xe3\xd5\x39\xbd\x18\x3b\x1d\x1c\xd2\x88\x78\x65\x46\x6c\x0d\x9f\xf7\xe6\x52\x92\x0b\x3c\x7f\xe7\xd6\x8a\xf9\xc2\x76\xdf\xf5\x17\x8b\xfb\x93\x5b\xdc\xf7\x68\x01\x9c\x35\x73\xae\x86\xee\x46\x81\xcd\x3d\xf3\xd6\xb5\x28\xf3\x88\xd1\xdd\x41\xf6\x04\x16\x10\x48\x2e\xc8\x0b\x1b\xf3\xa4\xcc\xe5\xc3\x98\x3d\xa1\xef\x9d\x67\x8e\x7c\xb5\x75\xd3\x0a\xbd\x12\xf0\x4a\xd3\x09\xab\xe0\x2f\x55\xc2\x9c\x33\x35\xdc\xce\x04\xf2\xf0\x0b\x48\xc8\x89\x4f\xe5\x92\x34\x8a\xd2\xbc\xaa\xf4\x2d\xbe\x3b\xe5\x6b\x6e\xf5\xdd\x58\x28\xd3\x6c\x22\xd8\x5c\x3a\x1d\x9d\x0c\xac\xe9\x70\xd0\x65\xea\x24\x72\x51\xa3\xc0\x5b\x93\xb3\xed\x52\x58\xda\x28\xd8\x68\xa7\xdf\x2a\x0c\x08\x77\xff\xf6\x51\x45\xf0\x6e\x4f\x13\x26\x62\xc6\x6f\xa4\x6e\x6a\x6c\x6d\x35\x3b\xa0\x9f\x80\x37\x2c\x75\x13\xec\x5d\x58\x0c\x33\xcc\xce\xac\x59\xa7\x8f\xf1\x47\x50\x05\x4a\xed\x4d\x13\x43\xf1\x55\x1a\xbb\x3a\x17\xbf\x44\x1e\x06\x6f\x5f\xe7\xe6\xc6\x2c\x1c\x5b\xe8\x5d\xd5\x2e\x6b\x97\xcb\x2b\x37\x97\xf0\xd3\x37\x54\xd3\x6e\x2b\xba\xeb\xa3\x89\x40\xbf\x41\xf1\x27\x78\xc2\x2a\x59\x2c\x7b\x97\x7b\x6b\xb5\xf6\x44\xdb\x04\x1f\x9a\xfb\x9e\xbd\xe1\x46\x94\xec\x03\x57\xfc\x0a\xf5\xbd\xa3\xcb\x8b\x37\x1f\x8e\xdd\xbe\x82\x3e\x39\x3e\x5f\xeb\x68\xbb\x4c\x3b\xff\xb8\xcf\x7c\x91\x95\x89\xef\xc0\xaa\x56\xda\xef\x38\xf9\xbd\x26\xc2\xb0\xc0\x87\xba\x81\xf5\xae\x61\x41\x17\xed\x14\xd6\x76\xcd\xcf\x16\x81\xb9\x99\x97\xf7\xac\xf2\x29\x95\xb1\xbc\xaa\x2e\x2a\xae\x4e\x17\x8b\x5a\xdf\xac\xd7\xc6\xb3\xb1\xfa\x07\xfd\x48\x31\xcc\xc3\x7f\xb9\xc0\xa5\x07\x17\xb6\x62\xe3\xd8\xff\x88\x8d\x6d\xd0\xc2\xb5\x02\x96\x7a\x70\xda\x58\x3d\xe7\x56\x16\x07\x4e\x59\x3f\xf8\xc0\x55\xc3\xab\xb5\x41\x57\x77\x4e\x63\x93\x88\x78\x67\xa3\xcd\xd0\x75\x1d\x9a\xdd\x29\x6b\xdc\xdd\xde\xf2\xda\x51\xa7\xb3\xcb\x9f\x7a\xb5\x35\x96\xdb\x66\x85\x0a\xdf\xc1\x19\x36\xf3\x82\x21\xab\xb8\xb1\x5f\x16\xa5\xbb\xf4\xad\x5f\xef\x22\xf8\x05\xb7\xbc\xd2\x57\x7f\x11\xbc\x5a\x7f\xc2\xb3\x73\x72\x96\x3e\xed\x0d\x50\xe4\xf0\x6f\x26\xe1\xc1\x43\xc3\x9c\x80\xed\x73\xe0\x6b\x51\x89\x1b\xae\xac\x6f\x8e\xc5\xd5\xcd\x21\xcd\x1f\x4e\x91\x8c\xc6\xd7\x52\x58\x51\xcf\xa5\xca\xfb\xbc\x84\x67\xcf\xb4\x2a\x25\x9a\x1d\xc1\xa0\x86\x2d\xf2\x7e\x37\x1f\xb5\x4d\x9e\x86\x3b\x7c\x0b\x39\xba\x66\x32\x9e\x7c\x29\xf0\xb1\x09\xc9\x97\x33\xfc\x12\x3c\xed\xd9\xd8\x56\x56\x8a\x5d\x2b\x27\x18\x02\x8e\xc8\x7a\xb2\xb5\x55\x4e\xd8\x26\x1f\x0c\xfd\x1e\xe3\x10\x36\x07\x8e\x0e\x69\xdc\x9b\x7c\x10\x77\x1d\x31\xfc\x6c\x97\x2c\xda\x43\xd9\x4c\x53\xd7\x9d\xbb\xd0\x0c\x33\x59\x5a\x05\xf9\xb3\x87\x36\xf3\x80\x4e\x82\x57\x37\x19\xa9\x2b\xaa\x7d\x4e\x6b\x23\x06\xfb\x8a\x2a\xdb\x41\x62\xdc\xca\xb4\x3a\x82\xcb\xe7\x8a\xf5\x98\xe2\xff\x6a\x52\x45\x38\x5b\x48\x81\xe0\x27\x5c\xd1\x62\x01\x67\x11\xbc\xa4\x2f\x1d\x07\x73\x2a\x21\xfc\x36\x20\x67\x38\x1a\x97\x29\xd6\xc2\x1b\xa8\x39\x82\x7f\x80\xe3\xe2\xe4\x07\x4d\x46\x5e\x4a\xd2\x75\x34\x00\x38\xf9\x80\x99\xa6\x98\x31\x6e\xdc\xd0\xdc\x81\x76\x37\x5e\x8c\xe6\x5c\xc9\xa9\x30\x76\x14\x50\x82\xcd\x7f\xfe\xfe\xbf\x47\xec\x9d\xae\x19\x05\xaa\x0f\x3c\xaa\x06\x8d\x33\x9e\x0b\x69\x70\x32\xa1\x6d\xd4\x5a\x17\xba\xa4\x41\xdf\xc2\x60\x2d\xbf\x76\x3c\x0c\x07\xdb\x08\x70\x5d\x7c\xcf\x0e\x9c\x98\x98\xbc\xfa\xff\x1c\x5b\xfa\xc7\x01\x3b\xba\x05\xa6\x7d\xe0\xfe\x3c\xc0\x17\x86\xb0\xc9\x54\xa9\x8e\x2f\xc6\x64\xc9\x5a\x5e\x5d\x89\x1a\xd5\x47\x06\x49\x85\xc7\x84\x0a\xa2\x74\xf2\xb0\x77\x4a\x47\x75\xb3\x3d\x90\xff\xfc\xfd\x7f\x1f\xb0\xa3\x7c\x5e\x4c\xaa\x52\x7c\x65\xbf\x47\xeb\xb2\x34\x6e\x8e\xc7\xe4\xcc\x31\x4b\x65\xf9\x57\xd7\x67\x31\xd3\x46\x28\x54\xe5\xad\x66\x33\x7e\x23\x98\xd1\x4e\x03\x16\x55\x35\x24\x5b\x3a\xbb\xe5\x80\xd4\xe2\x97\x12\x12\xeb\xd9\x82\xd7\x36\x3b\x12\x23\xb2\x90\xc0\xdb\xdc\xb6\x5d\x29\xef\x99\x9e\x4a\x45\xfe\x2b\xf2\x9c\xb9\x3d\x87\xc4\x50\xdc\x24\xab\x59\x31\xe3\xea\x2a\xe4\xa6\x4f\x1b\xdb\xd4\x62\x8b\xeb\xa7\xe3\x1d\xb8\x96\xaa\x57\x0a\xf3\x5f\xa5\x6a\x07\x15\xac\xb7\x2b\x5d\x49\xeb\xb3\x22\x28\x56\xd1\x2e\x4f\xdc\x2e\xd4\x72\xd2\x58\x5d\x9b\x93\x52\xdc\x88\xea\xc4\xc8\xab\x21\xaf\x8b\x99\xb4\xa2\x70\xd3\x3a\xe1\x0b\x39\x2c\xb4\x72\x3b\x0e\xa8\x0c\xf3\xf2\x77\x50\xde\x74\xe8\x86\xba\x05\x75\xba\xe3\xa4\xb7\x1b\xd5\x9e\xd4\x98\xb6\xb7\x39\x76\xb0\x07\xad\x4e\x14\x6d\x33\x8f\x30\x5b\x30\x84\x9c\xec\x65\xb2\x1e\x34\xb9\x3f\x8f\x39\x24\x1c\xf0\xa2\xdd\x87\xbb\x76\x18\x40\x02\xb7\x32\xa3\x94\x73\x5e\x22\x29\xe5\x6a\xf9\xe0\x87\xdf\x2d\x29\xc0\xe5\x17\xcb\x21\x74\xa1\xab\x21\x57\xa5\xfb\x37\x26\xec\x14\xcb\xbd\xac\x61\x23\x7b\x11\x82\x2f\xe3\xf3\xc7\xb9\x12\x8d\xdc\xc3\xad\x27\x79\xad\xa3\x10\x85\xa2\x2a\x06\x6a\xd4\x8d\xf0\x4c\x33\x17\x50\xa5\xf1\xbd\xfe\xff\xe4\x7f\x09\x68\x67\xdb\x44\xaa\xbb\xbd\x26\x89\xec\xd8\x71\xbc\xef\x63\x8b\xd4\x26\x07\x81\x57\xdc\x58\x82\xd6\xf2\x18\x04\xd9\x34\xbc\x82\x02\x0c\x66\xb3\x63\xb8\xd3\x19\xf2\xf1\x02\x6e\x20\xc3\xb5\x98\x4b\x45\x50\x4a\xb6\x2b\x50\x51\x7f\xc9\xea\xa0\xe1\xa4\xac\x30\x96\xf1\x1b\x2e\x2b\xb0\xce\xeb\x89\x11\xf5\x0d\x16\xa4\x22\xa8\x41\xde\xd6\xb3\xa8\xe6\x04\x8a\x51\x8f\xa4\xf9\xf8\x39\xac\xee\xca\x5d\x13\x00\x6d\xa8\x35\xfa\x8d\xa3\xde\x8b\xde\x83\xea\xe5\xc6\x9f\xdd\x1b\x76\x54\x63\xdc\xf9\xfb\x8b\xe0\xb5\x9d\x08\x6e\x3f\xcb\xbb\xf8\xee\xca\x91\xce\xda\x85\x52\xee\xe1\x40\xdf\x0a\x76\xa5\xad\x13\xb1\x1a\x38\xfb\x28\x93\x22\xa8\x4f\x38\x68\x0f\x7d\xa2\xe3\x2c\x3f\xd7\x1c\x52\x7c\xb4\xea\x39\xcd\xbc\xe1\xea\x3c\x49\x3a\xa6\x93\x64\xf1\x69\x04\xd2\xd0\x4a\xd0\xde\xa1\x37\x03\x28\xd0\xe3\x4c\x79\x2e\x8c\xb9\x13\x60\x23\x8f\x2e\xc4\xa7\xf1\x2a\xb7\x5c\x6b\x73\xff\x1b\xa6\x85\x38\x01\xba\x14\x96\xcb\xca\x5f\x65\x5c\x8a\xb0\x4a\xdb\xa8\xeb\x9d\x13\xac\x05\x37\x77\x09\x08\xd9\xa8\x3f\xc1\xc3\x38\x68\xad\xc4\xf0\x56\xd7\x25\x3b\xe3\x73\x51\x9d\x71\x23\xa8\xaf\x34\x45\x0f\xf7\xe8\xd0\xec\x75\xc8\xeb\x6d\x5f\x1b\x86\x8c\xc6\x9f\x68\x12\x86\xbf\xa2\x8a\x85\x03\x1c\x78\x13\xe4\xe7\xba\x11\x03\xf6\xce\x71\xaf\x01\xfb\xa2\xae\x95\xbe\xbd\xdf\x58\xed\x9d\x5e\x90\x6c\xa4\x69\xf8\x87\x87\xd5\xc9\x0c\x3e\x61\xb8\x3b\x8e\x88\x08\xfe\x06\x53\x63\xce\x6c\xc2\xa3\x7e\x44\xee\x9f\x2b\x26\x28\xa7\x28\xd6\xfa\xaa\x16\x06\x91\x6b\xd6\x82\x24\x76\x35\x39\xff\x20\x14\x25\xf7\x6d\x1d\xde\x78\x5d\x2b\x3f\x52\xcf\xd7\xae\xe2\x2f\xb4\xdf\xf4\xb2\x45\xb5\x56\xd4\xb8\x3b\x22\x30\x19\xe8\x06\xe3\xd3\xa6\x11\xae\x37\x3a\x25\x5c\x2f\x79\x16\x85\x92\xbb\xac\xa3\x7e\x76\x67\x97\x3f\x6d\x5e\xec\x8d\xbc\x6f\x1b\x7f\xda\x6e\x96\xba\xaf\x41\x6a\xeb\x9d\xd9\x6a\x84\x7a\x31\x3f\xbd\x98\x9f\xbe\x25\xf3\xd3\xd6\x13\x7f\x97\xc9\xe9\xdb\x30\x36\x6d\x9d\xe2\x5d\x06\xa6\x67\x69\x5a\xea\x34\xa3\x3b\xcd\x49\xcf\xd6\x90\xb4\x75\x6a\x1d\x8d\x47\xbf\x1d\xb3\xd1\xd6\x15\xbb\xc3\x54\xf4\x0c\x8d\x44\x5d\x04\x32\x51\x76\x11\x13\xc7\xc9\xc3\xa9\xa0\x18\xcb\x59\x86\xee\x7c\x50\x4e\x2a\xce\xec\x2a\x2d\x3a\x01\x6e\xeb\xd8\x0e\x69\x70\xdd\x65\x2f\x12\x18\xa9\xd8\xe3\xca\x60\xd9\xf9\xdb\x8b\x4f\x6f\xcf\x4e\x3f\xbf\x3d\x6f\xcb\x77\xeb\x56\x7a\x8b\x24\x76\xb7\x0d\x62\x98\x48\x62\x1b\x1e\x70\x04\x79\xc3\x4f\xee\x0c\x6c\xf8\xa9\x69\xe4\xba\x56\xf7\x97\x0b\xef\xc5\xe5\xee\xc5\x3f\xb6\xdf\xce\xae\xd7\xf3\x0b\x06\x4e\x71\x8a\x39\x73\x72\xcf\x4c\x57\xa5\xf1\x71\xab\xe3\xf3\x90\x49\x25\x55\x51\x35\xa5\x13\x2e\xbe\x7c\x19\x9f\x9b\x11\x63\x6f\x44\xc1\x1b\x03\x56\x98\x52\xab\x43\xcb\x7e\xfc\xf8\xfe\x3f\x20\x1e\x1b\x9e\x18\x04\x5c\x13\x40\xe5\x95\x1c\x81\x85\x2d\xc2\xb5\xb1\x37\x02\x05\x15\x78\x73\xc1\x17\x8e\x8a\x19\xac\x5c\x61\x41\x16\x99\x89\x6a\xe1\x28\xe6\xb5\x60\x11\x41\xd5\x75\x1c\x2b\xcc\xfb\xf0\xc9\x2b\x61\x31\xeb\xea\xae\x08\xc9\x3b\x57\x6d\x8b\xc5\xf5\x1e\xb6\xd6\x4c\x7d\x24\x6d\xfc\x96\x1b\xb2\x58\xad\x1d\xed\x96\xfd\xdd\x6e\x9f\xd9\x6c\xe2\xd8\x60\xdc\x40\xf2\x0c\x7f\xad\x8c\xd9\x0d\x36\xda\x31\x30\x88\x44\xda\xce\xd6\xd4\xcd\x61\x40\xeb\xeb\x00\xac\xd8\x32\x44\x7b\x91\xb3\x17\x87\x88\xec\x64\xc8\xdd\xc6\x02\x45\x44\xca\xac\xf6\x27\xc5\xcf\xe5\xdf\x35\x93\x50\xfd\x35\x8e\x97\x2c\x32\xec\xff\xfe\xf1\x4f\xff\xf4\xff\x02\x00\x00\xff\xff\x7d\xa3\x14\xcb\xc4\x98\x0c\x00") +var _olmManifests0270CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x77\x1c\xb7\xb1\x38\xfa\xbf\x3f\x05\x0e\x93\xfb\x48\x3a\x33\x43\x29\xdb\x2f\xe1\x4d\xe2\xc3\x4b\xca\x0e\x9f\x25\x8a\x47\xa4\x9d\x77\x7f\xb6\x6f\x8c\xe9\xae\x99\x41\xd8\x0d\x74\x00\xf4\x90\x93\xeb\x7c\xf7\x77\x50\x05\xf4\x32\x1b\x67\x69\x49\xa4\x0c\xe4\x9c\x58\x9c\xee\xc6\x52\x28\xd4\x5e\x85\x7e\xbf\xff\x19\x2f\xc4\xb7\xa0\x8d\x50\xf2\x94\xf1\x42\xc0\x83\x05\xe9\xfe\x32\x83\xbb\x3f\x98\x81\x50\x27\xd3\x97\x9f\xdd\x09\x99\x9e\xb2\xf3\xd2\x58\x95\xbf\x03\xa3\x4a\x9d\xc0\x05\x8c\x84\x14\x56\x28\xf9\x59\x0e\x96\xa7\xdc\xf2\xd3\xcf\x18\xe3\x52\x2a\xcb\xdd\xcf\xc6\xfd\xc9\x58\xa2\xa4\xd5\x2a\xcb\x40\xf7\xc7\x20\x07\x77\xe5\x10\x86\xa5\xc8\x52\xd0\xd8\x79\x18\x7a\xfa\x62\xf0\xc7\xc1\x8b\xcf\x18\x4b\x34\xe0\xe7\xb7\x22\x07\x63\x79\x5e\x9c\x32\x59\x66\xd9\x67\x8c\x49\x9e\xc3\x29\x4b\xb8\xe5\x99\x1a\xd3\x24\xcc\x40\x15\xa0\xb9\x55\xda\x0c\x12\xa5\x41\xb9\xff\xe4\x9f\x99\x02\x12\x37\xfa\x58\xab\xb2\x38\x65\x4b\xdf\xa1\xfe\xc2\x24\xb9\x85\xb1\xd2\x22\xfc\xcd\x58\x9f\xa9\x2c\xc7\x7f\xfb\xc5\xd3\xb0\x37\x38\x2c\xfe\x9e\x09\x63\xbf\x5e\x7c\xf6\x5a\x18\x8b\xcf\x8b\xac\xd4\x3c\x9b\x9f\x30\x3e\x32\x13\xa5\xed\x55\x3d\xbc\x1b\x2e\xe1\xd6\xe8\x84\x1e\x0b\x39\x2e\x33\xae\xe7\xbe\xfd\x8c\x31\x93\xa8\x02\x4e\x19\x7e\x5a\xf0\x04\xd2\xcf\x18\xf3\x20\xf4\x5d\xf5\x19\x4f\x53\xdc\x16\x9e\x5d\x6b\x21\x2d\xe8\x73\x95\x95\xb9\xac\x86\x72\xef\xa4\x60\x12\x2d\x0a\x8b\xa0\xbf\x9d\x00\x2b\x34\x58\x3b\x43\x90\x30\x35\x62\x76\x02\x61\xec\xea\x2b\xc6\xfe\x61\x94\xbc\xe6\x76\x72\xca\x06\x0e\xc2\x83\x54\x98\x22\xe3\x33\x37\x9b\xc6\x5b\xb4\x4d\x17\xf4\xac\xf1\xbb\x9d\xb9\xa9\x1b\xab\x85\x1c\xaf\x9b\x8a\x7b\x6f\xf3\x39\x10\x68\x6e\x67\xc5\xe2\x14\xe6\x7e\xdc\x74\xfc\xa2\x1c\x66\xc2\x4c\x40\x6f\x3e\x89\xea\x93\x85\x39\x5c\x2f\x79\xb2\x62\x22\x8d\x4e\xc3\x81\x1a\x2c\x1c\x86\x85\x01\xce\xc6\x8b\x6b\x4c\xb9\x0d\x3f\xd2\x4b\xd3\x97\x3c\x2b\x26\xfc\xa5\xff\xd1\x24\x13\xc8\x79\x8d\x0f\xaa\x00\x79\x76\x7d\xf9\xed\x6f\x6e\xe6\x1e\xb0\x36\x74\x5a\x78\xce\x84\x61\x9c\x69\x28\x94\x11\x56\xe9\x99\x83\xd6\xf9\xcd\xb7\xa6\xc7\xce\xdf\x5d\x98\x1e\xe3\x32\xad\x0e\x1e\x2b\x78\x72\xc7\xc7\x60\x06\x0b\x73\x55\xc3\x7f\x40\x62\x1b\x3f\x6b\xf8\x67\x29\x34\xa4\xcd\x59\x38\xf0\x04\x98\xcc\xfd\xec\xe0\xdf\xf8\xa9\xd0\x6e\x4c\xdb\x38\xc8\xd4\x1a\x54\xae\xf5\xfb\xdc\x0a\x0f\x1d\x18\xe8\x3d\x96\x3a\x02\x07\x06\x51\xc0\x9f\x31\x48\x3d\xec\x08\x35\x84\x71\xeb\xd7\x60\x40\x12\xc9\x73\x3f\x73\xe9\xd7\x34\x60\x37\xa0\xdd\x87\xee\xb8\x97\x59\xea\x28\xe1\x14\xb4\x65\x1a\x12\x35\x96\xe2\x5f\x55\x6f\x86\x59\x85\xc3\x64\xdc\x82\xb1\x0c\x4f\xad\xe4\x19\x9b\xf2\xac\x04\x02\x65\xce\x67\x4c\x83\xeb\x97\x95\xb2\xd1\x03\xbe\x62\x06\xec\x8d\xd2\xc0\x84\x1c\xa9\x53\x36\xb1\xb6\x30\xa7\x27\x27\x63\x61\x03\x0d\x4f\x54\x9e\x97\x52\xd8\xd9\x09\x92\x63\x31\x2c\x1d\x39\x3c\x49\x61\x0a\xd9\x89\x11\xe3\x3e\xd7\xc9\x44\x58\x48\x6c\xa9\xe1\x84\x17\xa2\x8f\x93\x95\x48\xc7\x07\x79\xfa\x0b\xed\xa9\xbe\x39\x9c\x03\xdf\x52\x64\x66\x81\x6c\xae\x85\xb5\x23\x9e\x84\x45\xf4\x39\xad\xa5\x06\xa9\xfb\xc9\x41\xe5\xdd\xab\x9b\x5b\x16\x26\x40\x60\x27\x08\xd7\xaf\x9a\x1a\xd8\x0e\x50\x42\x8e\x40\xd3\x9b\x23\xad\x72\xec\x05\x64\x5a\x28\x21\x2d\x1d\xe9\x4c\x80\xb4\xcc\x94\xc3\x5c\x58\x83\x38\x07\xc6\xba\x7d\x18\xb0\x73\x64\x61\x6c\x08\xac\x2c\xdc\x49\x4a\x07\xec\x52\xb2\x73\x9e\x43\x76\xce\x0d\xbc\x77\x50\x3b\x88\x9a\xbe\x03\xdf\xe6\xc0\x6e\x72\xe0\xc5\x0f\x16\xce\x18\x63\x81\x43\x6e\xf4\xf2\xaa\x43\xc9\xe8\x04\x2e\xa3\xc0\x6c\xcd\x59\x74\x8d\xa7\xa9\x06\xb3\xe4\xc1\xc2\x81\xa4\x17\x09\x4f\x26\xca\xb8\xfd\xe3\x96\xbd\x7d\xfd\x86\x25\x5c\xb2\xd2\x80\x3b\x3c\x89\x92\xd2\x21\x84\x55\x8c\x3b\x5e\xd6\x87\x07\x61\x10\x81\x34\x8c\x85\xb1\x7a\x36\x60\x5f\x2a\x9d\x73\x7b\xca\xfe\x14\x7e\xea\x63\x77\x4a\x33\x51\xfc\xe5\xf4\x4f\x85\xd2\xf6\x2f\xec\xad\xcc\x66\xae\xd3\x94\xdd\x4f\x40\xb2\x9b\x6a\x6d\xec\xcf\x8d\x3f\xbe\xd2\x45\x32\x60\x97\x63\xa9\x74\x78\xd3\x61\xd5\x65\xce\xc7\xc0\x46\x02\x32\xc4\x6b\x03\x76\x30\xbf\x83\x6b\x77\x91\x91\xb8\x34\x12\xe3\x37\xbc\x78\x14\x34\xe7\xe1\x4d\x37\x96\x1b\xbe\xc9\xbc\xeb\x87\x56\x21\x2a\xbb\x25\xb9\x7f\xf2\xe4\x8e\x71\x3f\x4a\xce\x8b\xbe\xc1\x63\xd3\x00\xd3\x66\x10\x38\x0f\x1d\x38\xf8\xd5\x3f\x5f\x7a\xca\x35\xd8\x76\xd9\xcd\x95\x6d\xfd\x6d\x2d\x86\x3c\x0a\xb4\x37\xcb\xb8\xc8\x06\x63\x8c\x75\x91\x5c\xab\x94\x96\xfd\xe8\x28\x5f\x35\xdf\x66\xf0\x50\x28\x03\x86\xa5\x62\x34\x02\xed\xe8\x8e\x9a\x82\xd6\x22\x05\xc3\x46\x4a\xe3\x7e\x15\x2a\xc5\x33\x59\xed\x5f\x8b\xd5\x5e\xab\x74\xd3\x8d\x71\x43\x23\xc3\x20\x64\xf4\x68\xb8\x72\xb9\x4b\x4f\x3b\x7b\xe4\xf0\xba\xc6\x47\x28\xfe\xcf\x96\x3f\x9d\x83\xc7\x99\x7f\x39\x60\xaa\x97\xa8\x3c\xe9\x38\x34\x6e\xf9\x87\xa6\xea\x73\xd9\x74\x37\x98\xf2\x26\xd3\x76\x4d\xaa\x14\xce\x1e\x99\xfe\xc2\x12\x2e\xf0\x8f\x21\x18\xfc\xbc\x9a\x2a\x72\xf0\xb4\xcc\x90\xd4\x94\x59\x7b\x47\x57\xad\x63\xc3\xb5\x6c\xba\x1e\x7a\x0f\x46\xa0\x35\xa4\x17\xa5\xc3\xdf\x9b\x6a\x56\x9e\x48\xd1\xcf\xaf\x1e\x20\x29\x57\x9d\xb1\x95\x4b\x77\x42\xb1\x5f\x26\x68\x76\x2f\xb2\xcc\x0f\xe7\x08\x4a\x78\xe0\xd6\x8b\x72\x8c\x03\x8f\x21\x22\x6d\xb8\x15\x66\x34\x43\x70\x54\x00\x83\x07\xc7\xb3\x51\x63\x41\x8c\x17\x23\x01\x29\x1b\xce\x3c\xbb\x76\xc4\xb3\xc7\x86\xa5\x65\xc2\x22\x2f\x4f\x26\x4a\x19\x60\x9c\xe0\x8e\xfd\x4e\x85\x42\x49\x89\x29\x09\x8e\xfe\xe4\x8e\x21\xfb\x83\xd3\xe8\x7e\x80\x33\xaf\x3f\x13\x86\xe5\x8e\xe2\x57\xb0\x0a\xe8\xe8\xba\xb9\x17\x76\x82\x7f\x8c\x9d\xc8\xed\xa4\x30\x53\xe6\xae\xd3\x7b\x10\xe3\x89\x35\x3d\x26\x06\x30\xc0\xdd\x05\x9e\x4c\x1a\xdd\xe6\x00\xd6\x30\x9e\x65\x61\x0a\x4d\x94\x20\xbe\x99\x3b\x11\x85\x1d\x55\x32\x8c\x97\x37\x7a\x15\x5f\x9d\xdf\xb5\xa5\xe0\xea\x31\xb0\xc9\xe0\xb8\xc7\x12\x95\x17\xa5\x75\x30\x71\x73\x1c\xce\x98\xb0\x4e\xce\x26\x79\x49\xab\x72\x4c\x2b\x81\xcc\x0f\x1c\x84\x55\xe2\x4c\x8e\x38\x38\x1d\x51\x8e\xd9\x01\x2d\xee\x20\xc8\x9f\xae\x3b\x41\x8b\xc0\xf5\xe5\xdc\x26\x13\x2f\x02\x27\x4a\x6b\x30\x85\x92\xf8\x25\x3e\x79\x55\xcf\xed\x3f\xab\x8f\x8e\xcc\x71\x0d\xcc\x89\x18\x4f\x02\x2c\xb9\x06\xfc\xad\xbd\x07\xeb\xce\x48\x7d\x4e\xb8\xd6\x2d\x5d\x72\x59\x13\x16\xf2\x47\x4e\xc9\x02\x6a\x9f\x49\x06\x79\x61\x67\x0d\x9c\x68\xec\x9e\x05\x9d\x57\x30\xc0\x0d\xc6\xe3\x6a\x68\x7d\x22\x2f\x32\x91\x08\xeb\x31\x84\xbd\x60\x47\x88\x22\xc2\x3a\x52\xc6\xa4\xea\xab\xe2\x78\xc0\xce\xd0\x7c\xb1\xc1\x00\x52\x55\xfd\xfb\x8e\xdc\xa0\x46\xd5\x7d\x3d\xba\xb6\x0d\x89\x0a\xb5\xd5\x32\xdd\x62\xeb\xfb\xf9\x83\x4c\xe6\xa5\xbc\xe5\xaf\x13\x4c\x1e\x7d\x75\x53\xf2\x16\xde\x0e\x73\xd8\xe4\xed\xf9\xad\x26\x94\x36\x90\x41\xe2\x54\x52\x07\xfb\x1e\xe3\xc6\xa8\x44\x38\x29\xbf\x46\xda\x36\xa6\xd3\x4a\x1e\x87\x3d\xdb\x16\xfe\x6c\xeb\xf5\xbb\x36\x7f\xf0\x36\xfd\x6e\x01\x1a\x99\x70\xc2\xef\x68\x0e\x2a\x2d\x82\x35\x9c\xe1\xd3\x43\xc3\x32\x3e\x84\xcc\x6c\x06\x04\xb6\xd5\xa9\xad\xdb\x86\xe7\x77\xe5\x82\x56\x2e\xc4\xeb\x98\xd5\xc6\x3b\xa2\xed\x74\x33\x2e\xa4\xf1\xfa\x73\x8f\x71\x76\x07\x33\x52\xb5\x9d\x06\x1f\x0c\x17\xf8\xb2\x06\x62\x37\x0e\x39\xee\x60\x86\x2f\x79\xbd\x7b\x8b\xe9\x6e\x8d\x1c\xd4\xb6\x39\xa6\x75\xeb\xbb\x89\x6e\xf9\x45\x58\xf4\x16\x9f\x6d\x8f\xbf\xd4\xee\x60\xad\xe4\xb5\xac\x2d\x88\x24\x88\x93\xb8\x1f\xb8\x49\xc8\xbf\xc2\x1e\xf3\xa2\xc8\x04\xa0\x3e\xbf\xe5\x30\x6b\xb5\x80\x75\x2d\x40\x6f\xaf\x75\xbd\xab\x0c\x1a\x84\x90\x87\x86\x90\xcf\x9d\xf4\x89\x28\x48\xbf\x35\x80\x07\x37\x58\x7e\xbe\xe5\x99\xa8\x4d\x6d\x06\xf9\xec\xa5\xec\xb1\x2b\x65\xdd\x7f\x5e\x39\x4d\xd8\xf4\xd8\x85\x02\x73\xa5\x2c\xfe\x39\x60\x5f\x59\xc2\xf5\xd7\x1b\x52\xb6\x0e\x00\x44\xf3\xdd\x0b\x3c\x67\x92\x68\x8a\x5b\x7e\xd3\x66\x64\x06\xec\x92\xc4\x96\xea\xe0\x0a\xc3\x2e\xa5\x13\x0e\x3d\x18\xd0\x8a\x87\xef\xfa\x2e\xf2\xd2\xa0\x91\x47\x2a\xd9\x47\x19\x60\x69\x1f\x04\x3d\xd7\x4f\x13\x7e\x6b\xba\x5b\xdd\xd5\x57\x68\x6b\x78\xbd\xf2\xe3\x09\x9f\xa2\x48\x27\xe4\x38\xab\x84\xb7\x1e\xbb\x9f\x88\x64\x42\x52\xf7\x10\xc8\x34\x58\x68\x70\x0c\x8b\x1b\x47\xaa\xdc\x2f\x63\xd0\x4e\xd8\x15\xa1\x3f\x32\x4c\x66\x3c\x81\x94\xa5\x28\x5a\x92\x91\x8d\x5b\x18\x8b\x84\xe5\xa0\xc7\xc0\x0a\xc7\x49\x76\xdb\xfd\xed\x08\x3b\xb5\xad\xc9\x7b\x73\xc0\xad\xd0\x0d\x59\xe4\x97\x4e\xd6\xfd\x40\xdc\x11\xe5\xea\xc8\x1d\x23\x77\x9c\x6b\x91\x3b\x56\x2d\x72\xc7\x47\x5a\xe4\x8e\x91\x3b\xbe\x77\xee\x48\xba\xec\x0e\xca\xf3\xdf\xc8\xc4\x31\xaf\x2d\x23\xa7\x0d\x6e\xba\xb6\xda\xec\xf8\xcd\x8d\x27\x38\xb7\xa8\x6a\x0b\x72\x92\x68\x2e\xc7\xc0\x5e\xf6\x5f\xbe\x78\xb1\x8d\x52\xed\x37\x72\xa3\x2f\x46\xde\xd3\x23\xa4\xfd\xcd\xaf\xd7\x7e\xb1\xca\xfe\xd6\x81\xd5\xd4\xe3\x78\x65\xc8\x6b\xc9\x0e\x2b\x0c\x9f\x48\x9d\xa4\xb2\x2c\x07\xcb\xb8\x6d\x99\x8a\x44\x0e\xbd\xca\x55\x80\x08\xef\xbd\x94\xc1\x02\x9b\x32\x25\xbd\x1d\xcf\x01\x7f\xb0\xdb\x0c\x12\xe0\xe4\x52\x1b\x42\x35\x0b\x95\xbb\x51\x85\xb4\xe1\xb8\xb8\x29\x40\x80\x0a\x3b\x82\xc1\x78\xc0\xd2\x12\x3f\xe3\xd2\xbb\x4d\x8f\x69\xb6\x66\x66\x2c\xe4\x68\xc9\x55\x1a\xff\xe3\xa6\x6d\xf5\xcc\xbd\x0c\x53\x90\xb6\xe4\x59\x36\x63\x30\x15\x89\xad\xd6\x87\x5e\x5b\x61\xc9\xd8\xbe\x99\x89\x70\x23\xd1\x61\x73\x71\xa1\xbf\x80\xc1\xe6\x91\x6f\xb6\xe1\xf6\x0b\x7d\x6f\x72\x26\xe7\x78\x21\xad\x64\xb0\x52\x58\xb5\xae\x5f\xb2\x81\xe3\x3f\x11\xb9\xde\xbe\x7b\xdc\xe4\xca\xb6\xa6\x64\x5b\x50\xaf\x79\xb1\xb4\xcc\x32\x87\x18\x64\x85\x5d\x5c\xc0\x12\xeb\x28\x2d\xa9\x85\xcc\x64\x78\x27\x13\xf3\xd9\xd5\x85\x83\x8a\x7b\xe7\x56\x15\x2a\x53\xe3\x59\x13\xd2\x14\x5e\x24\xf2\x22\x18\xc7\x39\x33\xe5\xd0\x0b\x0d\x0e\xfd\xae\xe6\xb6\x26\x5a\xfe\xa2\xe5\x2f\xea\x36\x0b\x2d\xea\x36\x55\x8b\xba\xcd\x23\x2d\xea\x36\x51\xb7\x89\x96\x3f\x16\xb9\xe3\x1a\x98\x44\xee\xc8\x22\x77\x5c\xb9\xae\xc8\x1d\xd7\x82\x27\x72\xc7\xc8\x1d\x97\xb5\x42\xa5\x7b\x04\x3a\x16\x2a\x5d\x13\xe7\x48\x56\x9f\x44\xf5\x33\x95\x70\xeb\xe3\xf2\xdd\x27\xde\xce\x67\x78\x4e\x86\xa8\x1e\xfb\x97\x92\x40\xc1\x6b\x6e\x6f\xd0\x9c\xa4\xec\x04\xb4\x7b\xfd\xc8\x1c\xaf\x0d\x6c\x8a\x71\x92\x31\x4e\xf2\xc9\xc7\x49\x4e\xb8\xa1\x7d\x25\xa2\xb4\x3a\x6c\xb2\x71\x20\x6f\x41\xe7\xcf\x34\x6a\xd2\xa1\x8b\xdf\x6e\xcc\x78\xaa\xb7\x94\x56\x9e\x7a\x7f\x01\xa4\xd7\xed\xf5\x7a\x79\x19\x17\xc5\xd3\x14\x52\x56\x80\xee\x13\x8a\x28\x36\x12\x32\x5d\xb2\xd6\x00\x9f\x8f\x1a\xfd\xd8\x5e\xc7\x47\x0c\x81\x6c\x4f\x64\x07\x9b\x6b\xd3\x70\xdc\xa2\xf0\x4f\x22\x20\x72\x5b\xa9\xbe\xcf\xac\x37\xf2\x7e\xbd\xa1\x5c\xbf\xbd\x68\x8e\x02\x75\x30\x09\xef\xae\x57\xa2\x58\xfe\xcf\x12\xf4\x0c\xf3\x3f\x6a\x81\xb5\xca\xad\xf3\x3e\x32\x61\x58\xc2\x0d\x71\x8a\x6d\x55\xcb\x2d\xd5\xa8\xdd\xf4\x94\xdd\x2d\xd1\x6c\x1e\x2e\xf3\x5d\x91\x4e\x1a\x74\x70\x82\xd9\x52\x25\x7c\x89\x17\xa0\xb6\xfe\x6f\x35\x9f\x5d\x45\xb7\x9d\x04\xb7\xa5\x48\xf1\x84\x95\x73\xb6\xbb\x82\xce\x76\x56\xd2\xd9\x4e\x8a\x3a\xdb\x55\x59\x67\x7b\x28\xec\x6c\x37\xa5\x9d\xcd\xa3\x82\xdb\x21\x2f\x65\xbd\x1f\xfd\x9d\xed\xa3\xa2\xb2\x3d\xf4\x78\x36\xbf\xd4\x0a\x4d\xf5\xfb\x52\xea\x11\xd7\x5b\x7a\xfd\x87\x06\xd6\x6e\x3a\x3d\x9b\x07\x95\x57\x86\x05\x2a\xb4\xcf\x44\xc3\xff\x20\xea\x36\xdb\x4b\xe5\x66\xbb\xab\xdd\x6c\x77\xcc\x40\x56\xf7\x1a\xdd\xa9\xfb\x32\x4c\xea\x85\x58\x04\xe6\xe0\x8e\xd8\xff\x3a\x4e\x80\xfb\xf2\x6f\x56\x70\xa1\x8d\x93\xef\xbc\xcd\xa4\xf9\xcc\x6b\xe7\xcd\x6e\x72\x4a\x21\x76\xa4\x7a\xca\x33\xc7\x7b\x28\x8e\xc3\xeb\x45\xae\xf7\x79\x36\xdd\x63\xf7\x13\xa7\x6d\x3a\x2a\x55\xe5\x3b\x1f\xdc\xc1\xec\xa0\xb7\x80\x48\x07\x97\xf2\x80\x78\xd4\x02\xea\x54\x0c\x4d\xc9\x6c\xc6\x0e\xf0\xd9\x41\xd7\x9c\x7d\x07\xc6\xd5\x2c\xa1\xb2\x2b\x5f\xd8\x01\x4b\x64\x28\xeb\xd2\xbd\xb0\x49\x5c\x84\x1c\x1b\x61\x14\x53\x33\x18\x0c\xb5\x68\x30\x97\x2a\x6a\x04\x71\x0c\x7f\x4f\x83\xf2\x5b\x4a\x5f\xe9\x22\xe4\x9c\xfb\xce\x88\x49\x2d\x86\x34\xf9\x8d\x57\x12\x0c\x0a\x76\x50\x99\x88\x1a\x1f\xe3\xbb\x03\x0a\x07\xa9\xb9\x9d\x4c\xe7\x03\x44\xea\x2f\x50\x46\xcc\x81\x4b\xc3\x0e\x82\xed\xe9\xd0\xd4\x6f\x1c\x0c\xea\xec\xbe\xaa\xc7\xa3\xff\xfd\xf7\x71\x2b\xa3\xaf\xee\x30\x4a\xda\x51\xd2\x8e\x92\xf6\x16\x5f\x45\x49\x7b\x75\x8b\x92\xf6\x16\x2d\x4a\xda\x51\xd2\x5e\x37\x70\x94\xb4\xa3\xa4\xfd\xf8\xe0\xbb\x49\xda\xbb\xc6\x09\x35\xe5\x5e\xef\x9c\xa3\x42\x66\xdc\x8a\xa4\x8e\x21\x0a\x6f\xd1\xbf\xba\x95\xb7\x9b\xb2\xf4\x72\x69\xbb\x29\x91\x2f\xe8\x16\x83\x47\x44\xeb\x4a\xf8\x5e\xf8\x72\xbd\xd4\xfd\xb4\x62\xa1\x76\xc0\x8d\x86\x43\x61\x47\xe4\xb8\x0d\xae\x70\x5f\xf8\x6f\x08\xb5\x9f\x3c\x65\x47\xc1\xe3\x72\xec\x80\x2f\x95\x6d\x3f\x94\x56\xf4\xeb\x37\x2a\x1f\x0c\xba\x17\x5b\xf9\x36\x2d\xb7\x44\xe5\x75\xaf\x3c\xc5\xf5\x7e\x3a\x12\x02\xba\x35\x07\x61\x7c\x79\x43\x8c\x96\xd0\xa5\x94\xae\x57\x25\x83\xfb\x98\x68\x0e\xd5\xe3\xf3\x98\x47\xc2\x12\xce\x07\x25\xa6\x1a\x4a\x0d\x7f\x27\xb7\x54\x02\xd1\x87\xf2\x2b\xe9\x3d\xa2\xee\x97\xe0\xf5\x0d\x48\x89\x2b\x12\xd5\xe8\x03\xf6\x0a\xf1\xb0\xd9\xb1\x30\x08\x1f\x9e\x65\xea\x7e\x1b\x92\xf4\xa1\xd2\xa2\xee\xb7\x4e\x8b\x9a\xf3\xdf\xc5\xac\xa8\x9f\x49\x56\x14\x3e\xa4\x23\xd4\x79\x7a\x14\xfb\x9b\x2f\x40\xa8\x01\x41\x95\x97\x99\x15\x45\x1d\x2b\x65\x68\xa8\x8c\xa4\xcc\x91\x8f\x3c\x69\xe3\xa5\x1b\x8d\x27\x93\x79\xfc\xc4\xfe\x30\xb6\xca\xe0\xa1\xf5\xd1\x1d\x3c\xcb\x7c\x4e\x51\x10\x49\x29\x84\x45\x7c\xec\xc8\x84\x0b\x5f\xb3\xb5\xd2\x66\x90\xc8\x1c\x39\x5a\x98\xb9\x0d\x75\x54\x6d\x0d\x11\x25\xa5\x68\x0a\x81\xf5\x8e\xc5\x14\x64\x4d\x49\x8f\xcc\xf1\x71\xe0\xe1\x9d\x52\xf8\xf7\x42\xa1\xff\xd4\xa0\xa4\x7f\xd9\x84\x46\xe3\x82\x2a\x2a\x5d\x83\xaf\xa6\xd1\x1f\x33\x04\x63\x1b\x3f\xff\x76\x36\x86\x1d\xfc\xfb\x1f\xd0\xb7\xff\x7c\x32\xcb\x3e\xb2\x85\xf1\x63\xc4\xd6\x3f\x79\xab\x62\x0c\xae\xaf\xdb\xbe\xc1\xf5\xef\xdd\x72\xf8\x71\x63\xec\x9f\x81\xb5\xf0\x63\xc6\xd8\x47\x0b\xe1\xda\x4d\x79\x6a\xa1\xef\xed\xb6\x93\x45\x30\x5a\x03\x77\xe6\xc2\x5b\x32\x9c\x7d\xad\x80\x5b\x62\xc4\x8e\x7e\xf6\xe8\x63\xff\x30\x3e\xf6\x28\xf1\x6e\xd8\xa2\xc4\xbb\x12\x28\x51\xe2\x65\x51\xe2\x7d\x6c\x79\x51\xe2\x5d\x0b\x9e\x28\xf1\xae\xdd\x94\x28\xf1\x46\x89\x97\x3d\x37\x89\x77\x97\x2a\x5d\xd1\xd7\xbd\x97\xaf\x7b\x5b\x6a\xb1\x15\x8d\xd8\x12\x0f\xb6\xf6\x6d\x47\xbf\xf6\x53\xf1\x6b\x6f\x9c\xf0\x2f\xad\xd8\x37\xe9\xbf\xb9\x57\xab\x32\xff\xf9\x54\x89\x94\x15\xa5\xf5\xf9\xd4\x31\xfb\xbf\x8b\xec\xff\x16\xe4\x63\x09\x80\x8d\x4a\x00\xac\x82\x59\xac\x03\x10\xeb\x00\x74\xec\x84\x8e\x75\x00\x62\x1d\x80\x58\x07\x20\xb4\x98\x9d\xc4\x62\x76\xd2\x46\x2d\x66\x27\xad\x6e\x31\x3b\xe9\xc9\x5a\x5f\x59\xcc\x4e\x7a\xda\x96\x58\x16\xb3\x93\xa2\x75\x76\xc3\x8d\x7a\x86\xd9\x49\xb1\x0e\xc0\x53\x8d\x51\x60\x51\xd2\x8e\x92\x76\x94\xb4\xa3\xa4\xbd\xbe\x45\x49\x7b\x8b\x16\x25\xed\x28\x69\xaf\x1b\x38\x4a\xda\x51\xd2\x7e\x7c\xf0\x58\x07\xe0\x19\xc5\x46\xb0\x58\x07\x20\xc6\x4b\xc4\x3a\x00\x3f\xdf\x3a\x00\x2d\xdf\xfd\xc7\x2b\x06\xb0\xfd\x34\x62\x45\x80\x58\x11\x20\x56\x04\x88\x15\x01\x42\x8b\x15\x01\xa8\x3d\x25\x5b\x63\xcc\x8f\x5a\x09\x94\x98\x1f\xc5\x62\x7e\xd4\x63\xcb\x7b\x06\x76\xc3\x98\x1f\xf5\x04\x6d\x85\x31\x3f\x2a\xda\x05\xe7\x37\xe7\x99\xe4\x47\xc5\x8a\x00\x4f\xd1\xdb\x1e\x25\xde\x0d\x5b\x94\x78\x57\x02\x25\x4a\xbc\x2c\x4a\xbc\x8f\x2d\x2f\x4a\xbc\x6b\xc1\x13\x25\xde\xb5\x9b\x12\x25\xde\x28\xf1\xb2\xe7\x26\xf1\xc6\x8a\x00\xb1\x22\x40\xac\x08\xf0\x1c\x3d\xdc\x8f\xee\x34\x3c\x58\xcd\x13\x7b\xae\xa4\x05\xb9\xd2\xaf\xdd\xda\xd0\x57\xad\x4f\x1c\x91\x1c\x89\x71\xa9\xbd\x0c\x3e\x7e\x77\x7d\xce\x12\x6e\x79\xa6\xc6\xec\x5a\xe1\x21\xf5\x83\x54\x3f\xe7\x60\x79\xca\x2d\x27\x97\x24\x6e\xa8\x56\x53\x91\xe2\x61\x4d\xe1\x81\x89\x9c\x8f\x01\x0f\x58\x89\xc9\xea\xf7\x90\x65\xfd\x3b\xa9\xee\x25\x9b\x82\x36\x8d\xe3\xfe\xa3\x2a\xf2\x1f\x99\x01\x3d\xa5\x2c\x7a\x78\x28\xdc\x66\x09\x4b\x14\x23\x8c\xd8\xec\xb6\xf6\xc5\x9d\xd3\xd3\x1b\x4a\x23\x17\xa6\x5e\x0b\x4e\xdb\x8d\xfd\xb9\x13\x15\x3e\x77\x48\x5b\x9a\x80\x6b\x23\x91\x41\x7f\xc8\x0d\xa4\xa1\x7f\xe3\x30\x4e\xe9\x94\xe6\x50\x5a\x91\x89\x7f\x81\xa7\x3a\xc0\x6d\xa9\x61\xd5\x76\x6d\xc0\x07\x1e\x57\x32\xfa\x2c\xe1\xc9\x04\x2e\xc4\x6a\xf5\xa0\x1f\xa6\xba\xfa\xa5\x4d\xf4\x85\x30\xce\xc6\x55\x23\xce\xfd\x07\x41\x23\x48\x85\xc6\x23\x3a\x63\xc6\x2a\x1d\x20\x5a\x68\xe8\x27\x3c\x4b\xca\x0c\x0f\xe4\xd9\xf5\x25\x8d\xf4\x78\xdd\x87\x47\x88\x58\xbd\xe8\x2d\x66\x1c\x3e\x59\x3f\xe7\x45\x2c\x40\x79\x01\x15\xf5\x7d\xa6\x9d\x43\xae\xf4\xec\x96\xeb\x31\x6c\x76\x1e\x0f\xde\x34\xbe\x98\x3f\x8e\xbf\xfc\xea\xed\x9b\x57\x6f\x5e\x5f\xbe\xb9\xbc\xf5\x14\x6c\xa4\xf4\xd2\x83\xea\xc5\x60\xd2\xc7\xd5\xc8\xfa\x89\xb0\x4c\xe4\xc2\x56\x5f\xd1\x49\xeb\x79\x4a\x86\xe1\x28\xa5\xb4\x22\x07\x0a\xa6\xe0\xd6\x3a\x66\xe9\x4e\x41\x0e\x60\xb1\xf2\x44\xce\xef\xc0\x91\x2e\x36\x2e\xb9\xe6\xd2\x42\x20\x8e\xc2\xd2\x47\xa9\x62\x46\x79\x81\x5e\x78\xad\xdf\xcd\xc3\x80\x97\xdd\xaf\x43\xac\xc6\x84\x4f\xa9\xc4\xc1\x48\x39\x2a\xe8\xb6\x22\x57\xa9\x18\x89\x84\xd4\x2e\x96\xf3\xb4\xf2\xc3\x7b\xe9\x0d\x74\x45\xd2\xeb\x05\x9c\xb2\xfe\x02\x78\x40\x4e\x85\x56\x12\x65\xca\x29\xd7\x82\x0f\x33\xbf\xaa\x21\x99\xe8\xb0\xdf\x7a\x82\x92\x0d\x67\x16\x8c\xef\xc9\x43\xcb\xd7\xa2\x58\xf3\xdd\xf7\x92\x00\x4d\xe2\x48\xcd\x14\xdd\x9b\x62\xc4\x84\x3d\x74\xec\xc8\x08\x4f\x84\x34\xa4\x65\x12\x16\xad\x6c\xa1\x05\x89\xbc\xbc\xda\x3b\x4f\xfc\xb8\x61\x79\xe9\xb8\x8b\xe3\xb6\xc6\x88\x61\x06\x3d\xc7\x53\x45\xf3\xdd\x21\x38\x38\xe0\x17\xc8\xf7\xa6\xe0\x76\xd8\x61\x0e\x89\x33\x00\x8e\xb1\x2a\x2c\x24\xc1\x89\x89\xa6\x30\xe2\x65\x46\x7c\x87\xc0\x8c\x5b\x35\x53\xa5\x6e\x91\xd5\x09\x77\x98\x83\xa7\x22\x04\xa8\xe0\x19\xee\xb1\x14\x9c\xe0\x26\xa4\xa3\xe4\x63\xa5\x52\x27\xbf\x69\xf5\x20\x72\xec\xcd\xa3\x56\x05\x9f\xe1\x8c\xa5\xaa\x1c\x66\xd5\x86\x39\x52\xea\xa9\x7d\xc1\x93\x3b\x37\x16\x76\xcc\xb8\x65\x27\x36\x2f\x4e\xf0\x2f\xff\xff\xfe\x0d\x33\xf8\x87\x51\x32\xc8\x01\x8d\x69\x0e\xe6\xe0\x2f\x0c\x1b\x82\xb1\x7d\x18\x8d\x94\xb6\xff\xe9\xa0\x55\x4a\x44\x3c\xa9\xaa\xa5\x87\xcd\x2c\xdd\x61\x47\x38\x29\xc4\xc9\xd6\x09\x51\x7a\xc9\x61\x6b\xa0\xc1\xe0\x60\x15\xdd\x75\x87\x46\xcb\x53\xf6\x3f\x47\xdf\xff\xea\xa7\xfe\xf1\x17\x47\x47\xdf\xbd\xe8\xff\xf1\x87\x5f\x1d\x7d\x3f\xc0\x7f\x7c\x7e\xfc\xc5\xf1\x4f\xe1\x8f\x5f\x1d\x1f\x1f\x1d\x7d\xf7\xf5\x9b\xaf\x6e\xaf\x5f\xfd\x20\x8e\x7f\xfa\x4e\x96\xf9\x1d\xfd\xf5\xd3\xd1\x77\xf0\xea\x87\x0d\x3b\x39\x3e\xfe\xe2\x97\x2b\x26\xc4\xe5\xec\xed\x68\x1d\xb7\xd9\x2c\xa0\xac\xbf\x09\x89\x7e\xe8\xdf\x95\x43\xd0\x12\x2c\x98\xbe\x90\xb6\xaf\x74\x9f\x3e\x38\x65\x56\x97\xb0\xf4\x33\x27\x4e\x3d\x66\x85\x6f\x91\xc8\xab\xc6\x07\x73\x16\x47\x5f\x86\xc5\x1b\x04\xdc\x90\x15\xad\x2b\x48\x7a\x19\xb9\xcd\x0d\xc2\xe0\x80\xdd\x2c\xf9\x12\x65\x3e\xff\xc6\xa1\x21\xe9\xd0\xcc\xf7\x33\x17\x64\x46\x34\x10\xfb\xdc\x5d\x36\xd8\x4e\x23\x7c\x74\x3f\x0a\x2d\x94\x16\x76\x76\x9e\x71\x63\xae\x78\x0e\x1b\x41\xf7\x72\x54\x4b\xda\x3d\x77\xd8\x1c\x39\xf6\xfc\x87\xb4\x9f\xd0\x2f\x52\x0e\x27\xc4\x36\xde\x0f\x10\x0a\xef\x54\x67\x26\x9c\x3e\xa5\xd9\xbf\x40\x2b\x5f\x45\x47\x03\x09\xc2\xe1\xf1\x7a\xe0\xad\x59\xab\x81\xa4\xc4\xb5\x3a\xa6\xfd\xe0\xc4\xd9\x91\x18\x6f\xc6\x70\x6f\x96\x7d\xca\x12\x2e\xdd\xb4\xb1\x8a\xd2\x88\xfd\x98\xc1\x98\x27\xb3\x1f\xdd\xf4\x7f\xd4\xe0\x26\xe2\x04\xfd\x1f\x49\x2e\x6d\x49\x9e\x87\xbe\x2c\x96\x61\x20\xb0\xea\x95\x90\xff\x20\xad\xa0\x52\x78\x34\x06\x8f\x16\x2a\x1d\x38\xc8\x0d\xe6\xe6\x8e\x34\xa9\x7a\x58\xf1\xbd\xef\x3e\xff\x61\xe1\x4d\x6f\xdf\xb0\x8a\xf4\x88\x26\x7e\xea\x12\x09\xa6\x23\x6c\x61\x81\xec\x2c\xcd\x05\x9a\x54\xd8\xd1\xf5\xcd\xd9\x71\x6b\x25\x8e\xf5\x12\x8b\x49\x15\x18\x79\x68\x89\xd9\x4d\xc0\xd4\x66\x14\x64\x1b\x18\xc5\x44\xa7\x05\xc3\x98\xc2\x98\x0e\x60\x68\x59\x19\x42\x35\xf8\xcd\x19\xfb\xd1\x09\x55\x99\x90\x40\xb0\x2b\xb4\x98\x8a\x0c\xc6\x6e\xc4\x86\x53\x88\x9d\x97\x5a\x83\xb4\xd9\x2c\x94\x57\x5a\xbe\x2b\xc2\x38\x82\xde\x46\xb7\x80\x59\x95\x4a\x57\x6d\x96\x7b\xdb\x40\x3a\x60\x37\xf8\xc5\x8c\xec\x7f\xfe\x3d\xdc\x1b\xe4\x8b\xab\x36\x97\x69\x30\xae\x63\x21\xe9\x2b\x91\x12\x8b\x03\xad\x95\xf6\x21\x97\xa4\x47\xa8\xcc\x29\x0b\x95\x7a\xe2\x58\x93\x09\x52\x55\x82\x22\x81\x8f\x4b\xf5\x80\x59\x02\xf8\xd5\x6b\x6e\x0b\x15\x56\x55\xf3\x45\xee\x77\xe9\x26\x37\x2a\x9d\x56\x52\x69\x53\x78\xe6\x9a\xa0\x99\x93\x5f\x9a\xc3\xf7\x6a\x3d\x8e\x0b\x8f\x6a\x26\x8c\xa9\x61\x58\x8a\x0c\x4d\x2c\x42\xd7\xea\x11\x22\x32\x6f\x2a\x6f\xaa\xc8\x7d\x6d\xb3\xb2\x28\x94\xb6\xb5\xe2\x9d\xb4\xb4\x32\x52\x8c\x97\x00\xc0\x4d\xab\xd0\x50\x70\x5d\x51\x6c\x03\x2c\x99\x70\xe9\xd8\xbf\x5b\xe8\x1b\x85\x71\xa8\x14\xcc\xec\x86\xe5\x43\x55\x5a\xc4\x31\x7f\x56\x47\xaa\x94\x29\x73\x44\xe5\x94\x4d\xac\x2d\xcc\xe9\xc9\x49\xcd\x8f\x06\x42\x9d\xa4\x2a\x31\x27\x89\x92\x09\x14\xd6\x9c\x84\xd3\x74\x52\xa8\xb4\x1f\xfe\xe8\xf3\x70\x48\x4e\x0e\x57\xf1\xf8\x0d\x38\xa1\x87\xfc\x29\xa3\xbd\x5a\xf1\x16\xc8\x72\x4d\x25\xa7\xfe\xfa\x8f\xdd\x0b\x35\x18\x97\xbe\x64\x55\x86\x75\xcf\xd6\xb8\x37\xdb\xd6\x9d\xfa\xfd\xaa\xfe\x58\x25\x98\x36\xa8\xdb\xa1\x69\x76\xbd\x9e\x68\xaf\xb3\x7a\x3d\x62\xe7\x5a\xa8\x3d\x86\xb4\xcd\x89\x7b\xf5\x44\x51\x00\xb0\x96\x63\xf5\x31\x27\x9b\xd3\x13\x47\xae\xe4\x8c\x39\x7c\xb6\xbe\x14\x5d\xa3\x36\x9b\xd5\x18\x1c\xfd\xa7\xca\x54\xdd\x83\xd1\x08\x12\xfb\x97\x86\x5d\xa0\x32\x48\x55\xe6\xe5\x3f\x85\x7f\xfd\x65\xb5\x4a\xb8\x91\x25\x78\x33\x5f\x1e\x4d\x69\xbd\x8d\xae\x6d\xca\xc1\x0f\xe6\x58\x36\x41\x80\xfa\x42\x45\x0e\xbd\x1d\xde\x20\x45\x96\x4d\x2f\xef\x38\x9a\xd1\x78\xd9\x78\x0a\xd7\xa0\xb6\xde\x58\x55\x9b\xd5\x81\x5d\x29\x9f\x25\x00\x3d\x76\x8d\x85\xdb\xea\x5f\x90\x91\x5d\x29\xca\x17\x58\xab\xfd\x6f\x6c\xc4\x7c\xd4\x9b\xd9\x02\xc8\xd7\xb5\xef\x92\x56\xd6\xf2\x5d\xd6\x18\xdc\x32\x4d\xaf\x83\xcc\x1d\xcc\x6a\x7f\x97\xf7\x8c\xa2\x39\xb9\x57\x63\x49\x10\x3e\xc9\x7d\xf5\x9f\x3e\xe0\x57\xe5\x43\x21\x69\x30\xea\x3a\x6c\x05\xf6\x1e\x00\x2a\x53\xfc\x13\x87\xe9\x02\x5c\x9b\xb9\x48\x5b\x30\x7b\xbb\x85\x43\xb4\x72\xb1\x2c\x77\x85\x36\xfc\x9f\xaf\xfe\x59\xf2\x6c\xc0\x2e\x88\x2a\xe2\xea\xfd\x4f\xfe\xa5\x05\x97\xd0\xbd\xc8\xd2\x84\xeb\x14\xb9\x01\x9d\x51\x66\x14\xed\x1e\xaf\x04\x8e\x70\xda\xeb\x3d\xa2\xc2\x84\xac\xe0\xda\x8a\xa4\xcc\x38\xb2\x2d\x18\x2b\x3d\xeb\x04\xa2\x35\xd2\xdc\x40\xa2\x64\xfa\x88\x95\x7e\x05\x75\xf5\xdf\x36\x61\x8c\x62\x14\x68\xe1\xe3\xef\x45\x0e\xf3\x48\x7a\xd4\x56\x6e\xd4\x28\x9c\xea\xea\x88\xf5\x48\xaa\xb9\x17\x06\x9a\x4e\x12\x61\x98\xa0\x04\x9e\xe3\x06\x79\xac\x4e\xc5\x80\xfd\xd7\x2c\xf0\xab\x1e\x13\x36\x98\xa6\x51\x6f\xf6\x63\x7a\x94\xf5\xc0\xae\x0f\xd4\x48\x69\x98\x82\x66\x47\xa9\xc2\x6f\x30\x47\xe5\x78\xc0\xfe\xaf\x13\xf1\xc9\x06\x31\xa6\x74\x0a\x8f\xe2\x41\x12\xb1\x58\x49\x14\x4d\xf4\x2f\xd8\x11\xa5\xb6\x88\x3c\x87\x54\x70\x0b\xd9\xec\x98\xa2\x9b\x42\x72\xcc\x26\x5b\xb7\x49\x46\x54\x23\x13\xea\xf7\xbf\x5d\xf3\x26\x4e\x76\x8b\x9d\xfd\x36\x18\xb9\x6a\xc8\x90\x94\x39\xb7\x85\x15\x0f\x52\x6b\x3c\xde\x0d\x0f\x77\x43\xf6\x0b\x64\xa6\xda\xe0\x7f\x38\x3c\xe0\x4c\xc3\x18\xb1\x9c\x30\x77\x0f\x1c\x17\xc9\xf2\x8c\xae\x47\x38\xda\x7a\x7b\x76\x9f\x39\xf1\xff\xf7\xbf\x4d\xb9\xe5\x2b\x5e\xa0\x3d\x9f\x15\xcb\x8c\x03\x8f\x31\xca\xba\xf3\x55\x9b\xb5\x81\x81\xd6\x0f\xbf\x53\x0f\x28\xea\x2f\xfb\xb2\xad\x52\xa3\x49\x8d\x82\x28\xc2\x7e\xf7\x35\x8c\x85\xb1\x7a\xd6\xb0\x6c\x7a\x8f\x86\x62\x42\x1a\xcb\xa5\x15\x48\xd9\x58\x78\xb3\xef\x6d\x83\x4e\xfc\x1e\xb0\xb7\x4e\xd7\x42\x1b\xd6\xbd\x63\xd3\x24\x60\xdf\xce\x0a\x60\x7f\x6e\xfc\xf1\x95\x2e\x12\xc4\x35\x4f\x68\x08\xb9\x78\x9a\x6a\x30\x8b\xf4\x61\x19\xfa\xac\x5d\x7f\x50\xf3\x1f\x05\xc1\xe1\x75\x30\x08\x78\xc7\xad\x31\x62\xec\xa4\xcc\x90\x4a\x19\xcc\xbc\x2d\x69\x93\xb4\x02\xfc\x90\x5c\x30\x90\x57\x4c\x40\xd8\x20\xf7\x27\x4a\x9a\x32\x0f\x11\x91\x4e\xeb\x29\x40\xa6\x20\x93\x19\xe6\xde\x64\x53\xd0\x03\xf6\x8d\x71\x3b\xc5\xfe\x2a\xc6\x4e\xef\xf3\x83\x36\x45\xa5\xe0\x46\x9a\x9b\x81\x30\x8d\x82\xb4\x18\xe3\xe9\x64\xa0\xd0\x43\xc3\x5d\xe0\x93\x7c\x42\x9c\xc9\xfc\x24\x4a\xb2\xb5\xde\x56\x29\x9f\xc1\x08\x1a\xe0\x42\x07\xde\x2d\x69\xac\xc8\x95\x56\x28\x23\x42\x2a\x5a\x45\x47\x5b\x69\xa3\x6a\x44\x49\x9d\xd4\x6f\x5b\x11\xc6\x80\xa5\xb9\xc5\xa0\xe2\x56\x4a\x02\x3e\x34\xad\x34\x81\xcc\xbc\x68\x7b\xda\x9a\xdf\xd9\x50\xe5\xbb\x3d\xe5\x9a\xa6\x6b\x2e\xef\x20\x65\x19\x3c\x88\x44\x8d\x35\x2f\x26\x22\xc1\xcc\x45\xf2\xab\x38\x59\xdd\x92\xef\x7c\x70\xb8\x12\xd1\x56\x91\xf1\xa2\x1c\x66\xc2\x4c\x60\xa9\x2c\xb3\x16\x47\x0d\x24\x1a\xec\x52\x0a\xd2\x42\xd1\x1b\x7a\xaf\x66\xca\x21\xdc\xcb\x77\xe0\xc3\x19\x09\xe7\xf0\xe0\x39\x10\x27\x89\x3b\x48\xc1\x43\x51\x57\x93\xae\x60\x38\x60\x97\x36\x18\xa6\xdd\x17\x77\x00\x05\x61\x1a\xc6\x1d\x98\x1c\x6d\x2a\x46\xc8\x04\x28\xff\x92\xf2\x58\x01\x82\x99\xd1\x6a\x01\x24\x06\x01\x1a\xf8\xc3\xde\x80\xb4\xcb\x85\x9a\xf5\x7a\xd7\x1a\x9d\x6b\x3d\x18\x2b\x9a\xf2\x38\x24\x6b\x5a\x14\x78\xa2\xfb\xb7\x03\x25\x3e\xd9\x76\x07\x29\x5d\xf6\x86\xe2\xb6\x1e\xa7\x35\xdf\xb4\x5e\xf7\xd1\x00\x86\x4d\xd4\xbd\xef\x69\xfe\xd0\x7a\x8b\x4d\xd8\xdb\x54\x98\xc4\x9d\x74\x48\xd9\xb9\x92\x26\xe4\xcc\x72\x49\x69\xb0\x53\x9e\x11\x2a\x84\x8e\x0b\x95\xa1\x7f\x23\x2d\x83\x3a\x41\xa1\xad\x90\x0f\x01\x6b\x5d\x9b\x30\x95\x15\x6c\xee\x11\x16\xfb\x18\x17\x0c\xfc\xe1\x5a\x65\xd9\x7a\x2e\xb6\x56\x2f\xdd\x44\x2b\x0d\x00\xd8\xd8\xff\x7a\x19\x20\xe6\x6d\x71\x0e\xa7\x6b\x0f\x12\xa2\x86\x13\x75\x2b\xc0\x0e\xc1\xde\x03\x48\x96\x4c\x20\xb9\x33\x75\x80\x06\x56\x9d\x9f\xdb\x35\x6f\x7f\x6a\x53\xac\x4a\x9e\x72\xbb\x82\x8a\x86\x01\x20\xb7\x99\x84\xfb\xf9\x80\x83\x45\x62\xcf\xa7\x5c\x64\x7c\x98\x51\xae\x78\xf5\x57\xaf\x39\x0f\x11\xf8\x79\x51\x66\x99\x77\x22\xa1\x03\xd6\x6a\x3e\x1a\x89\x04\x63\x50\xd0\xcd\x5c\x87\x35\x2d\x5d\xc2\x4e\xae\x65\x63\xb9\x2d\x17\xf6\x68\xcd\x06\xaf\xdb\x58\xa7\x87\x88\x95\x06\xa2\xb9\xfa\xe1\x2d\x65\xc5\x4d\x03\x48\xd9\x6a\xd9\xbf\x07\xec\x4a\x59\x1f\x97\xf1\x06\x8c\x09\xb1\x1f\xef\x80\x1b\x25\x1b\xd4\x15\xa5\x5f\x2d\xc6\x42\xf2\xcc\x2f\xaa\x69\xdf\xab\x74\x0f\x8e\x26\xe5\x5c\x8c\x35\xb7\x15\x51\xac\xe7\xed\xb9\x8b\xe7\x8b\x64\x09\x1d\xb0\x33\x39\xc3\xfd\xf6\x01\x1b\xae\x67\xab\x55\x5a\x26\xe0\x9d\xcf\xa5\x69\x76\xd2\x29\x19\x6d\xbb\x17\xce\xc3\x20\x75\x00\x62\x0a\x96\x0b\xef\x52\x52\x12\x18\x37\x85\xd3\xe3\x02\x4e\x92\x29\xbc\x06\x30\x32\x8b\xb3\xeb\x4b\xf6\xce\x67\x12\x0f\x58\xbf\xdf\x27\xbf\xa7\xb1\xba\x4c\x90\xbf\xb8\x23\x24\x53\xcf\x29\x08\xfb\x28\xde\xa6\x11\xbb\xeb\x2d\x1f\x24\x82\x15\xdc\x4e\xd8\x80\x00\x3f\x68\x80\x82\xb1\x2f\x1d\xaf\x79\xe0\x79\xe1\xf0\xfe\x7b\x49\xd4\xfb\x4b\xa5\x6e\x68\x93\x68\xcc\xff\x65\x27\x27\xf3\x38\xa1\x86\x4e\x44\xf5\x06\x44\x44\x8d\x91\x52\x87\xa6\xbd\xa4\x81\xfb\xf0\x6b\x0c\xff\x59\x32\x3a\x8e\xc5\x35\x9c\xb2\xef\x0f\xce\xc2\xe9\xfb\xfe\xa0\xc7\xbe\x3f\xb8\xd6\x6a\x8c\x31\xa1\x72\xfc\xbd\x0f\xf2\xfc\xfe\xe0\x02\xc6\x9a\xa7\x90\x7e\x7f\xe0\xba\xfd\x15\x06\xf3\xbe\x01\x3d\x86\xaf\x61\xf6\x67\xec\xac\xfa\x39\x70\x84\x3f\x53\xdc\xaf\xfb\xdd\xb1\x60\xc7\xa7\xfe\x9c\xf3\xa2\xfa\xe1\x0d\x2f\xaa\x8f\xcf\x6b\x3c\xfb\xee\x87\x1c\x2c\x9f\xbe\x1c\xd4\x3b\xfa\xe3\x3f\x8c\x92\xa7\xdf\x1f\xd4\xf3\xef\xa9\x5c\x60\xd0\xc4\xec\xfb\x03\xd6\x1a\xf5\xf4\xfb\x03\x1c\x37\xfc\x1e\x26\x79\xfa\xfd\x81\x1b\xc9\xfd\xac\x95\x55\xc3\x72\x74\xfa\xfd\x01\xc6\x22\xf4\x5e\xf6\x34\x14\x3d\x27\x30\xfd\xb9\x1e\xe1\xfb\x83\x1f\xdd\x9e\x9c\x9c\x78\x17\x86\xbf\x59\xe1\xdf\xcb\x8d\xd5\x8f\xd2\xfd\xc7\xe2\x91\xfa\x2c\xe3\xc6\xde\x6a\x2e\x0d\x8e\x7f\x2b\xf2\xe5\x6e\x5c\xd2\xe5\xf0\xbc\xaf\x7c\xae\x91\x06\xac\x7c\x4c\xd8\xb0\xf2\xf1\x0a\xee\xb9\x09\xe7\x5a\x5c\xc3\x86\x56\xe7\xc5\x0f\xeb\x6c\x08\x27\xcf\x05\x3b\x4d\xb5\x3f\x8e\x07\xf8\xb7\xc1\x57\xe9\x70\x47\xdc\xd3\x37\x8c\x75\xc6\x7d\xf3\x01\x3a\xb5\x82\x7f\xef\x2b\x78\xb0\x52\xa6\xa0\x33\x74\x56\xd5\xbd\x92\x27\x24\x1d\x30\xb2\x1b\xf0\xca\x4a\x83\x71\x74\xc8\x9d\x64\xc3\x78\x4d\x31\x3c\xa1\x47\x47\x3b\x7c\x11\x13\xea\x06\x19\x5d\x92\x40\x61\x91\xd3\xed\xee\x62\x66\x0d\xa3\x8a\x93\xac\xfa\x76\x35\x7a\x78\xe4\xd8\x10\xf0\xfe\x6d\xf2\xef\x4f\xca\x9c\x3b\xd6\xc1\x53\x0c\xe3\xa9\x9e\x91\xfa\x46\xea\x16\x91\x54\x72\x0a\x91\x8d\x3f\xec\x83\x07\xb5\x67\x24\xbc\xca\x56\x7b\xc4\x62\xb2\xd1\xe2\x73\xfe\xf0\x1a\xe4\xd8\x4e\x4e\xd9\x6f\x7e\xfd\x7f\x7e\xff\x87\x15\x2f\x12\x61\x84\xf4\x2b\x90\xde\x16\xb4\x21\x18\x16\x3f\x9c\x37\x1a\x0e\x42\xfc\xe5\x60\x5c\xbf\x53\x19\xb9\x6b\x0c\xba\xe7\x18\x83\xe5\xd9\x65\x59\x38\xb8\x7c\x89\xd1\xb5\xc6\x72\x99\x40\xcf\x09\x49\x4b\x3b\x13\x15\x01\xcf\x66\xec\xe5\xaf\xe9\x06\x22\x1c\x7a\x81\x7c\x7f\xf7\xf0\xc3\x60\xc9\x94\x85\x61\x7f\xec\xcd\xcd\x47\x18\xe6\xb6\x4a\x8d\x10\x71\x48\xc5\xd4\x40\x9c\x30\x18\x03\x16\x39\x21\x54\xf3\x7d\x6c\xe3\x1e\xb3\x07\x6e\x66\x0b\xcc\x85\x14\x79\x99\x9f\xb2\x17\x2b\xe3\x39\x1d\x49\xdb\x70\x37\xe9\xe5\x5a\x10\xe0\x8e\x74\x8d\x35\xcf\x73\x8c\xa3\x17\x29\x48\x2b\x46\x02\x83\x06\x2a\xd4\x46\x75\x9f\x3e\x0c\x31\x28\x15\x14\x31\x3c\xc5\xd1\xa1\x06\xb2\x5f\x93\x9c\xa3\x91\x03\x7b\xef\x4d\xd2\x24\x50\xb3\x02\xe8\x34\x90\x02\xc3\xe0\xa1\x20\x51\xb5\xe1\x86\xc8\x81\x4b\x21\xc7\xa6\x8e\xe7\xf2\xb7\x4f\xb9\x87\xf7\x13\xf0\xde\x73\x68\xfa\x82\x12\xa7\x2c\xa5\xa8\x37\xf1\x3a\x3c\x10\x03\x40\x49\x46\x9f\xb7\x69\x3a\xc9\x31\x87\xec\x9c\x1b\x08\xa7\xb1\x19\xcd\x15\x4a\x21\x55\xa9\x3d\x9d\x1d\xd5\x97\x2f\x7e\xbd\x76\xcb\xab\xf7\x56\xbb\xf0\xaa\x30\xaf\xef\xce\xfa\xff\x97\xf7\xff\xf5\xc3\x91\xff\xc7\x8b\xfe\x1f\xff\xde\x3b\xfd\xe1\xf3\xc6\x9f\x3f\xac\x8e\xce\x5a\x2e\xcc\xaf\x40\x1f\xcf\x44\x82\x9c\x18\x76\xb4\x17\xa2\x54\x6e\x75\x09\x3d\xf6\x25\xcf\x0c\xf4\xd8\x37\x12\x59\xc3\x9e\x40\x5b\xef\xa1\x76\x5c\xf9\xc0\x8d\xba\xca\x53\xee\x5f\xc1\x29\xad\x7f\xc7\x4f\x77\x9d\xfa\xba\x19\x90\x82\xa9\xa1\x41\x69\x64\x03\xcf\x28\x9f\x60\xa4\xd4\xc0\x4b\xb8\x83\x44\xe5\x27\xd5\x73\x12\xad\xdf\x70\x39\x63\x35\x59\x23\xa1\x74\x1e\xd3\x0d\x06\xcc\xf3\x44\x2b\x63\xea\x22\x3f\x2c\x13\x77\xc0\xce\x6a\xbd\xd1\x11\xcb\x21\x24\x1c\x65\x71\x3d\x14\x56\x73\x32\xfa\x06\xb9\xb2\xb6\x28\x8d\xca\x8c\x1d\x39\x75\x75\x80\x81\x64\x0b\xd4\xd5\x17\x0c\xe3\x43\x91\xe1\xbd\x4d\x4e\x95\x4e\x94\x1c\x65\xc2\xab\x00\x79\xa1\xb4\xe5\xd2\x86\xac\xa6\x31\x3c\xd0\x55\x71\xe4\x76\x10\x86\x1d\xa5\xd2\xbc\x7c\xf9\xeb\xdf\xdc\x94\xc3\x54\xe5\x5c\xc8\x2f\x73\x7b\x72\xfc\xc5\xd1\x3f\x4b\x9e\xa1\x97\xf7\x8a\xe7\xf0\x65\x6e\x57\x5f\xba\xb5\x35\x5b\x7c\xf9\xfb\x0d\x4e\xd1\xd1\x77\x74\x56\x7e\x38\xfa\xae\xef\xff\xf5\x79\xf8\xe9\xf8\x8b\xa3\xef\x07\x6b\x9f\x1f\x7f\x7e\x82\x31\x92\xd5\x91\xfb\xe1\xbb\x7e\x7d\xfc\x06\x3f\x7c\x7e\xfc\x45\xe3\xd9\xf1\xb2\xc3\xd8\x0a\x5d\x74\x5a\x40\x3f\xe7\x45\xff\x0e\x66\x2b\x0e\xe7\x4a\x71\x74\xb1\x23\x82\x58\xce\x8b\x65\xda\xf7\x48\x8c\xdf\xf0\xe2\x1d\x8c\x40\x83\x4c\x96\x22\xf9\x9e\x1e\x18\xa7\x3f\xac\x79\x84\x11\x58\x3b\x58\x9d\x1c\xdf\x21\x4b\xdb\x3a\x71\x7a\x03\x6c\xd9\x4c\x7e\x94\x6b\xe2\x17\x1f\x1d\xa4\x5a\xe7\xce\x3d\x84\xf3\xfd\x2d\xd9\x8f\x76\xee\xa7\x14\x2b\x35\xad\xb6\x0d\xf3\xf2\x82\x44\x5f\x24\x3d\x28\xce\x4d\x94\xd3\xf3\x4a\x29\xfe\x59\x02\xbb\xbc\xa8\xf2\xe9\x85\x4c\xb2\x12\x2b\xf8\x7d\xf3\xcd\xe5\x85\xd3\xdf\xff\xcb\x93\x9b\x7b\x60\xa9\x92\x87\x96\xbd\xbd\x7a\xfd\xdf\x68\x0c\xc0\x37\x7a\xc4\xd0\x7d\x52\x6f\x26\x38\x99\xc9\x3c\x03\x66\xff\x05\x14\x27\x87\x23\x27\xbc\xa8\xec\x27\x48\xee\x30\xc2\x2a\x2b\x0c\x26\x02\x30\x53\x6a\x3f\x3b\xd7\x31\x79\x7c\x31\xf5\xcf\xfb\x83\x43\x0e\x03\x66\x82\xec\x14\xdc\x99\x28\x29\x21\x41\xa7\xb9\x93\x02\xdf\xc3\xf9\x70\x88\xfc\xd6\xcb\xac\x38\xc6\x0e\x87\xc1\x3b\xd4\x76\x46\x0b\x37\x87\x73\x5a\xe9\x7b\x3f\x49\x0b\xeb\xdd\x69\x44\xb2\x67\xa2\x67\xf3\xdd\x23\xf6\xe7\x85\x30\xae\xb6\xea\x3c\x97\xb7\x85\xb6\xd5\xca\x39\x3a\xe1\x86\x0d\x01\x24\x9a\x73\xc9\xfa\x07\xd2\x63\x1d\xd4\x86\xd8\xb2\xe8\x5b\xd5\x4f\x97\x6f\xde\x23\x90\x7b\x1c\x6a\x6b\x34\xd7\xb9\xd2\x18\xdb\x2a\xaa\xf7\x93\xd9\x32\x18\x98\xba\x52\x60\x25\x83\x6c\xbb\xb0\xd5\x8a\xc9\x9c\x55\x17\x35\x0b\x6f\xd4\xf0\x7a\xc6\xe2\x94\x9c\xf6\xd8\xb2\x6c\x58\x85\xde\xbc\xb6\x65\x6f\xfb\x39\xd2\x36\xdf\x80\x9e\x8a\x9d\x98\xdf\x63\x07\x33\xa1\x38\x93\xb3\xf7\x7f\xac\x9c\xe8\xb5\xf3\x20\x68\xfa\x4b\xd4\x23\xee\x9b\xb5\xf1\xef\x08\xc1\x75\x51\xfe\xdb\xf4\xb1\x2d\xb3\x24\x6a\xd2\x4a\xf2\x30\x56\x69\x74\xb9\x37\x7f\x2b\x87\x95\xa0\x5c\xf7\xee\x75\x20\xf6\xbf\xff\xfe\xec\xb3\x7e\xbf\xff\x19\x2f\x44\x60\xb3\x8c\x17\x02\x1e\x2c\x48\xba\xb4\xf8\xee\x0f\x18\xc6\x3b\x7d\xf9\xd9\x9d\x90\xe9\x29\x3b\x2f\x8d\x55\x79\x30\x8b\x63\xe5\x57\xc4\xcf\xcf\x82\x19\xc3\x0d\xc2\xa5\x54\xb6\x19\x04\xeb\xd4\x6f\xed\xc8\x89\xee\x8f\x41\x0e\x9c\xb8\x86\x61\xce\xa0\xb1\xf3\x30\xf4\xf4\xc5\xe0\x8f\x03\xa7\xf6\x23\x0e\x79\xeb\x9f\xb1\x3c\x2f\x4e\x31\x53\xfc\x33\x2f\x94\xb0\x24\x2b\x0d\x96\xc7\x45\xf0\xf9\xef\xcd\xa0\x0a\x86\x1b\x24\x4a\x83\x72\xff\xc9\x3f\x73\xfa\xb8\x9b\xc5\x58\xab\xb2\xa8\xcb\x8f\xb4\xde\xf1\xf2\x8a\x9f\x2c\x45\xaf\x35\x10\xbc\xcf\x54\x46\x17\xd1\x7a\x20\xd0\xf0\xfe\x0c\x79\xc8\xe1\x73\x27\x7d\x7e\xbd\xfa\x9d\xd7\xc2\xd0\x91\x2a\xb2\x52\xf3\x6c\xd5\x42\xf0\x15\x33\x51\xda\x5e\xd5\xd3\xc2\x1c\x54\x33\x6d\xfe\xdb\xbf\x28\x24\x06\x24\xad\xe8\xed\x33\xc6\x4c\xa2\x1c\xfe\x54\x68\x96\x7e\xc6\x82\x5b\xce\x77\xde\x6f\x65\xc2\xa0\x6f\xf0\x5c\x65\x65\xde\x74\x52\xf5\x17\xd9\x8a\x83\x5a\x50\x8e\xcf\x6f\xbe\x6d\x60\xef\x3f\x8c\x92\xd7\xdc\x69\x23\x94\x54\x91\x0a\x53\x64\x7c\x76\xd5\x96\x8c\x69\x37\x2f\xe8\xd9\x67\x8f\x1c\x9c\x25\xe3\xcf\xf9\x16\xd7\x4f\x61\xda\xd8\xa7\xe6\xf0\xdf\x2e\xfc\xbe\xe9\xf0\x61\xf9\xdc\x8d\xdc\x08\x68\x51\x12\x42\x15\x14\xb3\x66\x42\x4b\x5e\xa1\x19\xbd\x5b\x7c\xb0\x62\x4a\xcd\x2e\x49\x77\x2d\x26\xdc\x2c\x82\xf8\x7a\xee\xd7\x25\xdd\xd1\x8b\xd3\x97\x3c\x2b\x26\x3c\x98\x61\x4c\x32\x81\xbc\x11\xea\xa5\x0a\x90\x67\xd7\x97\xdf\xfe\xe6\x66\xee\xc1\x7c\x12\xf0\x32\xec\x27\xf1\x9a\x28\x48\xe5\x59\xc3\xbd\x73\x72\xef\x8f\x4b\xbf\xb9\x29\x20\xf9\x71\xb0\x30\xf3\x05\xee\xb4\x5c\xe4\xec\x57\xa9\xf2\x73\x3f\x3b\xf8\x37\x7e\x5a\xc5\xd3\x1a\x74\x71\x8e\x32\xb7\x43\xad\x1c\x48\xfc\x1a\x43\x88\x82\xad\xd1\x13\x52\x0f\xc7\xca\xb5\x58\x19\x94\xc9\x58\x4b\xa1\x0e\xb4\xa6\x01\xbb\xc1\x98\xb3\xca\x51\x91\x28\x39\x05\x6d\x99\x86\x44\x8d\xa5\xf8\x57\xd5\x9b\x99\x73\x74\xe3\xa9\x95\x3c\x0b\xb1\xbb\x68\x54\xe4\x33\xa6\xe1\x1f\xe8\x99\x94\x8d\x1e\x42\x21\xa1\x2a\xc5\xa3\xce\xdf\x18\x0b\x1b\xa8\x7e\xa2\xf2\xbc\x94\xc2\xce\x4e\x90\x80\x8b\x61\xe9\x08\xe7\x49\x0a\x53\xc8\x4e\x8c\x18\xf7\xb9\x4e\x26\xc2\x42\xe2\x14\x96\x13\x5e\x88\x3e\x4e\x56\x92\x5f\x31\x4f\x7f\x51\xb1\x9e\xf9\xe8\xa3\x95\x9c\x11\x09\xec\x5a\x58\x3b\xf2\xea\x73\x10\x1b\x45\x91\x6a\x90\x06\x03\xee\xbb\x57\x37\xb7\x95\x12\xe9\xcf\x25\x42\xb8\x61\xce\xaf\x81\xed\x00\x25\xe4\x08\x82\xe9\x35\x14\x56\x00\x99\x52\xb9\x79\xb4\xff\x65\x02\x25\xaf\x72\x98\x0b\x0c\x5b\xc2\x5c\x65\x0a\x2e\x3d\x47\xa6\x87\x66\x25\x8a\x78\x19\xb0\xcb\x86\x15\xec\xbd\x83\x1a\x6d\xcc\x7d\x07\xbe\xcd\x81\xdd\xe4\xd9\x8b\x1f\x2c\x91\x00\x03\x2f\x5d\xb9\x3b\x2b\xcf\x30\x4b\x21\xc9\x78\xc8\x74\xb1\x90\x65\xec\xed\xeb\x37\x18\x21\x14\xa2\x2f\xb3\x6c\xb1\x3a\x5d\xc2\x25\xcb\xb9\xc4\x88\x86\xa2\x20\xdb\x38\xf7\x15\xe2\x43\x30\xca\xa6\x93\x5f\xa7\x97\xf6\xd9\x72\x06\x15\x9e\xfa\x09\xce\x3d\x59\x27\x0a\x2f\xc8\x40\x6b\xa0\x76\x56\xbf\xeb\x6d\x04\xa5\x24\x97\x3f\x96\xd2\xb8\x83\x10\xab\x98\xf3\x02\xa5\xbc\x90\xda\xc8\x9b\x08\x8e\x19\x37\xb3\x90\x74\x36\x9c\x31\x27\xc6\x21\x41\xb0\x4a\xf9\xc0\x1c\xf7\x2d\x12\x06\x0d\x56\x0b\x98\x36\x0d\xa4\x95\x23\x6a\x7b\x9d\x60\xf3\x34\xda\xb5\x22\x31\x2f\x84\x97\x5d\xd2\x4a\xb0\xdc\x00\x7a\xd7\x97\x1e\xdf\x6a\x71\xd4\x78\x7c\xf3\xc5\x30\xbd\x7c\x50\xc9\xb5\x38\x92\x47\xac\x94\xd5\x15\x15\x31\xa0\xb5\x89\x84\x94\xef\xaf\xb9\x74\x0f\x96\x22\xf7\x0e\xd0\x7a\x4c\x83\x52\xf7\x72\x75\x74\x40\xb7\x29\x5e\x4d\xd8\x55\x3f\x87\x6a\x32\x75\xd8\x8c\x55\x78\x5a\x49\x83\x46\xd8\x55\x05\x67\xa6\x82\x33\x3e\x1e\x6b\x8c\x96\x5d\x19\x69\xb0\x61\x9a\xd6\x26\xf5\x20\xfb\x24\xc9\xaf\x7d\xc3\x91\xc1\xb5\x2f\xac\xb4\xd0\x86\x17\x16\x85\xc5\x76\xdb\x2c\xa1\x8c\xa3\x19\x2d\x80\x56\xe9\x47\x72\x57\x36\x2d\x5a\xb5\x51\xb1\xaa\xf6\x3e\xcf\x4d\xc4\x3f\x1d\x62\x4d\xb1\x8a\x34\x3b\x72\x90\xd4\xde\x6c\xef\x26\x29\x40\x3b\x7d\x9c\xe2\x89\x39\x4b\x48\x7e\xab\x08\x4f\xf0\x0e\x3f\x32\x9d\x2d\x0a\xb6\x6d\x5e\x15\xb4\x8f\x21\x55\x8f\xbc\xb6\x4d\x1d\xcf\x26\xd0\x1e\x7d\x79\xcb\x42\x60\x0d\x0e\xd3\x79\xdf\x0e\x0c\x9d\x77\xba\x41\x4e\x0e\xb5\xb6\x79\x8b\xdf\xbf\x69\x46\x92\x68\x7e\xcf\x40\x26\xca\x11\x8b\xff\xf7\xe6\xed\x55\xc8\x5f\xbb\xb4\x4c\xe4\x85\xbf\x2c\x87\xbd\xe1\xda\x4c\x78\x06\x54\x1b\xf9\x1b\x99\xb7\xfe\x9e\x0b\x01\x4f\x21\xe3\x33\xea\x2c\x85\x44\xa1\x25\x5e\x69\x56\x38\x01\x37\x2f\x4a\x4c\xe1\xc0\xa7\x38\xee\xa3\x49\x3a\x3b\x80\xa6\x36\x51\x0d\x67\x4b\x2d\xa0\xed\xf6\xd0\x4f\x37\xa5\x01\xcd\xc9\x6c\x5a\xbe\x6e\x8b\xe2\x75\x1b\xae\xb2\xca\x90\xb9\x5e\x63\x63\x6b\xf6\xb8\x65\x2e\xd8\xda\x5b\xb1\x52\x28\x32\x35\x73\x78\xf1\xf8\x59\xd9\x70\x3d\x1b\x9f\xeb\x4d\xfb\xdb\xf4\x2c\x6f\xd8\x1f\x19\xa7\xba\xe8\x69\x99\x02\xb5\x53\x47\xeb\xdc\x7f\x5b\x75\xb4\xc4\xfe\xb8\xba\xb7\xf7\xc2\xfc\xae\x2f\x83\xb5\xa1\xf2\xfa\x7a\xda\x54\xfd\x89\xb9\x3b\x5f\x57\x6e\xe4\x86\x5c\x5d\x79\x03\xc9\x5a\x8f\x79\x49\x3a\xd4\xa8\x7b\xb4\x48\xf6\x7b\x62\x7b\x8f\x08\x38\xe1\xb5\x47\xc4\x9c\xf0\xda\x63\xc2\x0e\xb5\x6d\xf8\xe8\xe3\x58\x48\xad\x9d\x3c\xee\x34\x7b\x2f\xaa\x57\x3b\x93\xb6\xb7\xa2\x73\x4a\xfe\x38\x9a\x2f\x99\xe9\x35\x9a\x6f\x5b\xe6\xcf\x55\x13\x66\x47\xab\x4c\xe6\x03\xa7\x17\x0f\xd0\x28\xfb\xdd\x0f\x03\xea\xf2\x38\x64\xc3\x7b\xdb\x86\x78\xa4\xf3\x50\xd3\x72\x5e\x2a\xeb\x1c\x4c\xd3\xf5\x5e\xf8\x95\x90\x3a\xbb\xbe\x0c\x06\xd6\x0f\xb8\xb5\xa6\x80\xe4\x09\x48\xdd\x37\xad\x69\xb4\x64\x6e\x9f\x07\xea\x04\x6a\x37\x59\x36\xcc\x54\x72\xe7\x6d\xc9\xef\x2e\xaa\x94\x4b\xa7\x75\x39\xe1\xc7\x27\x5c\x32\xf1\x18\x11\x89\x62\x76\x14\xb3\xa3\x98\xfd\x5c\xc4\x6c\xf2\xd9\x3c\x05\x4a\x35\x37\x91\x95\xb4\x8a\xe2\x61\x23\xb5\x5a\xd3\x22\xb5\xc2\x16\xa9\xd5\x23\xed\xd9\x51\xab\x8d\x64\xc0\x0d\xe2\x3a\xd7\x1f\xe4\x68\xe0\x8e\x06\xee\x68\xe0\xf6\x2d\xf2\x32\xdf\x22\x2f\x8b\xbc\x2c\x1a\xb8\xd7\x75\x19\x0d\xdc\x5b\x76\x14\x0d\xdc\xd1\xc0\xdd\x6a\xd1\xc0\x1d\x0d\xdc\xd1\xc0\x1d\x0d\xdc\x2b\x5a\x14\xb3\x77\xec\x34\x8a\xd9\x6b\xda\xa7\x2d\x66\x47\x03\x77\xa4\x56\x91\x5a\x45\x6a\xf5\x3c\xa8\xd5\xfe\x06\xee\x24\x03\x2e\x97\x2b\xba\x73\x79\x12\xf8\x5e\xe3\x6a\x5f\xca\x2f\xa1\x5f\x87\x30\xe1\x53\xa1\x4a\x5d\x17\x14\x3b\xbf\xf9\x96\x8d\xc1\x1a\x87\x05\xb0\xfc\xf2\x91\x3d\x93\xf2\x41\xf2\x61\xb6\xb4\xe3\xc7\x48\x89\xff\x72\xbd\x41\x7f\xa8\x94\x5b\xdd\x22\xc4\x50\xae\x0f\x72\xf2\x36\x71\xff\x07\xab\xf4\x8e\xe5\xc1\xff\xe7\xef\x2e\xba\x0a\xf9\xc7\x5b\x80\xaa\x5e\x7d\xc1\x6a\xac\xb0\xe9\x6b\x62\xbe\xbd\x97\x90\x62\x32\x68\x28\xef\xef\x0e\xbd\x48\x84\xcd\x66\xd5\xc0\x4b\x2f\xb4\x7b\x3e\xa9\x03\xe7\xef\x2e\x36\x77\xa9\x84\x0d\xf8\x10\xde\x93\xe8\x1b\x89\xbe\x91\xaa\x45\x31\x68\xc7\x4e\xa3\x18\xb4\xa6\x7d\xda\x62\xd0\x53\xf7\x25\x44\x0f\x00\x8b\x1e\x80\xf0\x5a\xf4\x00\x44\x0f\x40\x37\x60\x8a\x1e\x80\xe8\x01\x58\xff\x52\x14\x26\x77\xec\x34\x0a\x93\x6b\xda\xa7\x2d\x4c\x46\x0f\x40\xa4\x56\x91\x5a\x45\x6a\xf5\x3c\xa8\xd5\x73\x0c\x71\x8f\x86\xd8\x68\x88\x8d\x86\xd8\xc8\x8d\x22\x37\x7a\xa4\x3d\x3b\x6e\x14\x0d\xb1\xdb\x76\x14\x0d\xb1\xd1\x10\xbb\xaa\x45\x43\x6c\x34\xc4\x46\x43\x6c\x34\xc4\xae\x6f\x51\x98\xc4\x16\x85\xc9\x47\xda\xb3\x13\x26\xa3\x21\x36\x52\xab\x48\xad\x22\xb5\x7a\x1e\xd4\x6a\x7f\x43\xec\x23\x27\xa9\x85\x32\x4d\xfb\xa9\x97\x1c\x43\x3c\x30\x56\xf6\xf7\x37\xbe\xd1\x15\x58\xe1\x82\xfb\x1e\xcb\x44\x2e\x42\xdd\x76\xa5\x1d\x76\xf4\x13\x6e\xc0\x2c\xf4\xb1\x64\xfc\xf5\x73\x5f\x7f\x52\xd7\xde\xc3\x52\x05\x32\x0b\x19\xfa\xf1\xb8\xb2\xf5\x34\x44\xb2\x01\xec\xdc\xf8\xee\xc5\xfa\xde\xda\xc7\x97\xbd\xc3\x15\xff\x8f\x92\xef\xc7\xaf\x55\x1f\x72\x03\xbf\xff\xed\xc2\x6d\x20\xcd\x57\x72\x48\x05\xb7\xbb\xdf\x7a\x5e\x0f\xb1\x1a\x73\x37\x38\x01\xd5\x34\x76\xec\xc5\x5f\x57\xf0\xe8\xde\x39\x04\x4b\x2f\xe9\xe5\x70\x6b\xfe\xfc\x6d\xd7\x35\xff\x95\x2b\xae\x75\xa9\x34\xab\xfb\x09\x84\x6b\xe2\xfc\x85\x0e\x26\x74\x2a\x4c\x95\xeb\xb0\xf4\x56\xc2\x3d\x93\x17\xc2\x38\x4b\x1e\x3f\xb6\x69\xcb\xee\xb4\x58\x0a\xac\x00\xa0\x0b\xf2\xab\x5c\x54\x45\x1c\xe6\x21\x56\x70\xed\xf8\x44\xf0\xbf\xa0\xe8\xd2\x78\x7b\x0e\xde\xeb\xef\x68\x5c\x2b\xaf\x3c\x2e\xa7\xf4\x1b\xb5\x26\x56\xf9\x7c\x36\x11\x4f\xfc\xcd\x52\xd7\xa0\x73\x61\xcc\xaa\xf4\x8c\xf6\xd4\x1f\x63\x1e\x1b\x30\x8d\x15\xf0\x0f\x2b\x6a\x4c\xa7\x12\x22\x49\xed\x1f\xf2\x84\xe9\x32\xf3\x57\x6b\xfb\x4b\x25\x18\x4f\x12\x55\x4a\xcb\x24\x40\x4a\x89\x1f\xcb\x70\x75\x03\x96\xb3\x81\x14\xb9\xa9\x0c\xd9\xa7\x79\x3e\xfa\x96\x5f\xc3\x19\x2d\x61\xe9\x35\x25\xcd\xb6\xb9\xcc\x89\xc3\x3f\xce\xbb\xb7\x11\x08\x36\x16\x07\xda\x86\x2e\x95\x89\x64\xf6\xae\xcc\xc0\x5f\xbc\x2a\x24\xf1\xad\xca\x15\xd6\x54\x14\x0a\x7c\x1b\x67\x4f\x37\x3e\xa7\x0a\xc8\x40\xe5\x4b\xbb\xb4\x3e\x0f\x77\x3f\xd2\x85\x49\xee\x23\xc6\x8b\x22\xc3\xc4\x2b\xe5\x78\xf7\xfd\x44\x24\x93\xfa\xd6\xda\x65\xaf\x6d\x2e\xc3\x6d\xa4\x64\xb0\xad\x14\x0d\x16\x8c\xa7\xc3\xc7\x50\x85\x6d\xa9\x71\x30\xba\x78\xe5\x2b\xad\xca\x62\xc3\xd7\x17\xed\x6e\xf4\x75\xb8\xd3\xb2\x29\x8e\x84\x87\xde\x99\x19\xee\xe1\x27\xe3\x9c\x37\xd6\x0f\x18\xbb\x1c\xb1\xbc\xcc\xac\x28\x32\xfc\x84\xea\xc5\xd0\xd5\xdf\x15\xdf\xe8\x31\x2e\x67\xc1\x37\xea\x2f\x5f\x82\x94\xf1\xb1\xeb\xd1\x86\x2b\xd9\xe9\xd6\xa6\x32\x77\x32\x48\xc3\xec\x87\x17\x7c\xba\xef\xab\xde\xd9\xbd\xc8\x32\xbc\x14\x3f\xcb\xd4\x3d\xa4\x03\x76\x70\x30\x4f\xca\x13\xa5\x1b\xf3\x41\x62\x72\xf0\x79\xeb\x2d\x47\x39\xea\x09\x6f\x82\x23\x6c\x6b\xf1\x9a\x6d\x27\x62\xb3\xed\x95\x09\xc6\xa4\x92\xc1\x6c\xfc\xcd\xbb\xd7\xbb\x21\xc2\x55\xbb\x0f\x7f\x4b\x17\x58\xb7\x2d\x05\xd7\x56\xf0\x8c\x95\x3a\x33\x84\x0b\xdc\x09\xcc\x3a\x5c\x73\x36\xe1\xe8\xf7\x4e\xc0\xd0\x7d\x5a\xec\x73\xda\x7d\xbf\x39\x74\xc6\x95\xcc\x66\x8c\xd3\xd6\x8c\xca\x2c\xeb\xb1\x91\x90\xdc\x91\x6e\x28\x42\xee\x9d\xd3\x44\xd9\x8d\x90\x09\xb8\x35\xf5\x2b\xe1\x04\x67\xe4\x7a\x74\x34\xa2\x3a\xe8\xa9\xbf\x9a\xd9\xdb\x1d\x8c\x1f\xc2\x1d\xfa\x04\x2f\x94\x75\x52\xad\x17\x7b\xde\xa9\x0c\xbd\x35\x95\x49\x19\x6f\x09\xe3\xcd\xc7\xff\x25\x24\xaa\x7b\xec\x1d\x32\x1f\xa7\x36\x82\xb0\x13\xa7\x45\x16\x45\x86\x17\xc8\x3b\x64\xa9\x91\xf2\xc8\x94\xc9\xc4\x2d\xe9\xa0\x50\xa9\x39\x70\xa4\xe8\xc0\x40\xa2\xc1\x9a\x83\x63\xf7\xd7\xfc\x1a\x70\x7d\xcd\xef\x4e\x78\x21\x0e\x8e\x7b\x0c\x01\x84\x57\x90\x29\x3b\x79\xbe\x78\x18\xd6\xda\xba\xf9\xf2\xb1\x36\x77\xbf\x6e\xa3\x07\x7f\x9f\x96\x2a\xe8\x7a\x2a\x47\xe7\x2d\x60\x66\xa6\x43\x4a\xba\x39\xbb\xf6\xb8\xcd\x11\x7c\xc6\xce\x24\x03\xf2\x91\x80\x65\x39\x70\xe9\xdf\x86\x29\xe8\x99\x9d\xa0\xdb\xc4\x54\x04\xe4\xd9\x03\x7d\x3f\x80\xfb\x03\x1f\x80\x5b\x23\x39\xdd\x79\x38\x0f\xdc\xc3\xcf\x0f\xe7\x09\x69\xcd\x11\x9e\x2d\x28\x91\x45\xef\x04\xc6\x6f\xdd\x97\x6d\x10\xd2\x4f\x44\x2d\x2b\xfa\xf1\xfa\x35\xdd\x6f\xe8\x61\xf5\xb5\x90\xa9\xa9\xea\xd9\xa5\xd5\x3d\xd6\x0e\xde\x4b\x81\x8c\x33\x7c\x8e\x00\x5e\x14\x81\x37\x15\x5b\x1f\xe9\xbe\xa1\x23\x3d\x05\xb5\x06\xef\x4b\x6c\x49\x4a\x8e\x4e\xf5\xc8\x79\xe7\x44\x90\x8c\x0f\x21\x33\xde\xe0\x02\x8d\xe9\xb3\xb3\xd7\x6f\xaa\x7b\x43\xf1\x1e\xee\x0f\xad\xcc\x6c\x10\x05\xb0\x70\xfb\xea\x62\xdb\x5c\x7e\x45\x50\x6c\x67\x56\x67\x37\x60\xe9\x98\xe5\xbc\x70\xa7\x8c\xfa\x58\x6a\x15\x7e\x8d\x90\x7e\xfc\xb0\x6c\x25\xf7\x6f\x7e\x5b\xe2\xb2\x41\x36\x3a\x2a\x9b\x45\x1a\x6c\x73\xf6\xd6\x58\x49\xea\x36\x67\x54\x6d\x21\xb4\xd7\x0d\xbc\x34\x9f\xf0\xa6\xb1\x35\x05\x43\xa5\x18\xa8\xf0\x85\x0e\xbf\xd7\x5d\x74\xbc\x05\xdb\x28\x5e\x4e\xf7\xce\x20\xb1\x6a\x7d\xf1\xcf\xf0\xb2\x85\xbc\xc8\x1e\x3b\x79\x6c\x6b\x25\x2d\x17\xf2\x1d\xf0\x74\x76\x03\x89\x92\xe9\x86\x04\xb6\xb5\x1f\x6f\x84\x14\x79\x99\x33\x59\xe6\x43\x40\x10\x1b\xea\x0b\x09\x09\x29\xc0\x9c\x49\xb8\xcf\x66\xe1\x12\x7f\x56\xa8\x34\xd0\x93\xa1\x53\xd8\x78\x3a\xc3\x9b\x47\xb1\x4c\xb6\x9c\xb9\x4e\x84\xad\xb9\x8f\x66\x89\xe6\xc6\x89\x45\x3d\xec\x54\x58\xc7\xb1\x86\x80\x5e\x3a\x91\x82\xdb\x63\x3e\xe5\x22\x73\xa2\xf5\x80\x5d\xc0\x88\x97\x19\x5e\xa0\xcb\x5e\xb0\x23\x37\x58\xd0\xc9\x96\x7d\xe0\xc4\x5d\xa3\x9c\x36\x6f\x7c\x55\x0d\x9c\xd0\xf1\x16\x7e\x87\x4d\xaa\xb8\x86\xb6\x69\x35\xd7\xd0\x0a\x5e\x9a\x4d\x55\xf9\xd6\xc6\x5c\xca\xd4\x9d\x87\xa6\x24\xda\x20\xe9\xc2\xf8\x9e\x37\x63\xd9\xeb\xab\xad\x2c\x99\xb5\x56\x63\x0d\xc6\x5c\x00\x4f\x33\x21\x61\x77\xfc\xba\x9d\x00\xcb\xf9\x03\xe2\x98\x15\x39\x38\x49\xa4\x89\x61\xbc\xb9\x2a\xab\x58\xce\xef\xa0\x1a\x9e\x0d\x61\x84\x17\x24\xe3\x82\x1b\xbb\x4f\xf8\x33\xe2\x22\x73\x1a\xfa\x6d\x1b\x36\x78\x57\xb2\xca\x32\xd0\x84\x38\xee\x6f\x21\x4b\x0c\xb1\x2b\xb4\x42\x65\x92\x3e\x6d\xf2\x78\xe4\xa1\xdc\xbd\x4c\x74\x38\xdc\xa5\x7b\x3d\x07\x8a\x57\x0f\x09\x19\x0a\x35\x70\x83\xaf\x11\x6e\x9a\x52\x8f\x9c\xea\x18\x34\xce\xc6\x84\xfc\x25\xec\xec\x4a\x59\x1f\xc9\x57\x2d\x10\xbf\xf6\x57\x44\x83\xb1\x22\xc7\x03\x96\x96\x3a\x5c\x58\x8d\x30\xe3\xcb\xb7\xbe\x75\x54\x7e\xff\xe2\xc5\x86\xf2\xdb\xfb\x47\x7a\x0d\xa8\x29\xef\x82\x2f\x57\x15\x1d\x0a\xe4\xdf\xa9\xc0\x6e\x8f\x85\x17\x83\xf1\xe6\x6d\xd0\xe8\x71\x15\xc6\x0a\x39\x2e\x85\x99\xb0\x21\xd8\x7b\x00\xc9\xe0\x81\x6a\xea\xb0\x7f\x81\x56\xb8\xa9\x0e\xbc\xb5\x9b\xa1\x05\xb4\x97\x4f\x07\x62\x53\x61\x84\x92\x7f\x15\xc6\x2a\x3d\x7b\x2d\x72\xf1\x48\x01\xea\xd0\x16\xdd\x7e\x15\x04\x55\x96\xb2\x77\xb4\x15\x37\x40\x0b\xd6\x80\x56\x50\xab\x48\x3d\x65\xee\x9c\x0c\x79\x72\xf7\xde\x00\xfc\xe2\xa9\x40\x38\xb0\xeb\x1d\xa0\x8a\xf2\x5e\xd5\x01\x92\x2d\x42\xca\x57\x0f\x04\x9f\x16\x94\xef\x27\xca\x00\xbe\x40\x86\x4a\xfc\x2c\x38\x16\x84\xa9\x08\x06\xba\x65\x25\x18\xc6\x47\xa3\xf6\x1b\xf5\x61\x47\xc9\x33\x2f\x8d\x65\x39\xb7\xc9\x84\x4c\x59\x2a\xad\xc4\x89\x43\xe3\xc5\xfe\x6d\xa0\xbc\xb1\x21\x7a\x7b\x93\x31\xa3\x79\xbe\x7a\x70\xba\xe5\xa3\x1e\xa1\x76\x6b\x81\x7c\xbe\x9b\xb6\x06\x9c\xb5\x37\xc4\xcb\x6d\x39\x5d\xde\x7f\x8b\x46\xe4\xfa\x17\xdc\x85\xb3\xab\x8b\xcd\x4d\x31\xbb\x28\xb8\x5b\xab\xb8\xf3\xe6\xf2\x35\x8b\x0a\x26\x53\xff\xa4\x6d\x33\x47\x0d\xc5\xf4\x18\x67\x77\x30\xeb\x11\x17\x9b\xbf\x30\x5f\x43\xe6\x25\x09\xc0\x7b\xe3\xdd\x4b\xf4\xdd\xe6\x20\xd9\x01\x7b\xa8\x6d\xe7\xce\x08\xad\xef\x26\xba\xe5\x17\x61\xd1\x5b\x7c\xb6\x3d\x82\x53\xbb\x83\xd9\x76\x1f\xcc\x6d\xb7\xdb\x05\xaf\xfb\xd0\xbe\xbb\x1f\x2a\x41\xaf\xda\xea\xed\xfc\x4c\xcd\xb6\xb5\x89\x2a\xb4\x00\xc4\xbd\x96\x57\xa1\x5f\xd3\xca\xe4\xd6\x78\x68\x08\x19\xdd\x99\x9e\x88\x82\xb2\x1e\xbc\x33\xc0\x63\x24\xfb\x96\x67\x22\xad\xba\xa0\xf3\x7b\x29\x7b\x4e\x7c\x72\xff\x41\xa2\x4b\xe2\xda\x85\x02\x73\xa5\x2c\xfe\xf2\xc1\x00\x44\xd3\xdc\x0b\x3c\xd4\x85\xb7\x42\x23\x95\x41\xc5\x8b\x22\xee\x03\x18\x2e\xe7\x23\x77\x0c\xbb\x94\x4c\xe9\x00\x07\xf7\xd0\x77\x44\x5d\x20\x9f\x18\x92\x83\x03\xed\xd3\x4b\xfb\xf0\xe0\x53\xba\x05\xbd\x35\xdd\xf9\xae\x50\x3e\xa0\x27\xa8\x63\x15\x19\x4a\xbb\x5e\x54\xe5\xc1\x51\x2e\x12\x96\x83\x1e\xa3\xc7\x25\xd9\xd8\xe3\xd0\xde\x94\xed\xe8\x2e\xb5\xad\xa9\x6f\x73\xc0\xad\xb0\x00\x59\x13\x99\x80\xf6\x61\x6e\xd4\x43\xcb\xe4\xf4\xbf\x8e\x82\xe3\x1e\xfc\x9b\x15\x5c\x68\x33\x60\x67\xcc\x08\x39\xce\xa0\xf5\xcc\x6b\x18\xcd\x6e\x5c\x0f\xc2\x30\x47\x6a\xa7\x3c\xf3\xba\x14\x97\x0c\xc8\x66\xe5\x7a\x9f\x67\xa9\x3d\x2f\xa9\x38\xca\x53\x39\xba\x0e\xee\x60\x76\xd0\x5b\x40\x9a\x83\x4b\x79\x40\xbc\x65\x01\x4d\x2a\x46\x84\x3e\xb2\x03\x7c\x76\xd0\x25\x17\xde\x92\xe1\xec\x6a\x47\x6b\x0f\xba\x31\x46\x84\xf8\x90\x1d\x85\xf5\x96\x96\xe8\xa3\xa2\xac\x62\xa5\x01\x92\xd6\xf1\x94\x31\x08\x72\x26\x4a\x95\xa8\x98\x4a\xb8\x47\xe9\xf1\xc9\x08\x7e\x4e\x93\x10\x72\xfc\x4d\x91\x72\xbb\x51\x78\x2e\xb5\x16\x44\x0e\xdf\x51\x27\xac\xc4\x5e\x1c\x6e\x8d\xc4\x98\x15\x5c\xf3\xdc\x0c\xd8\xb5\xaf\xa7\x8a\x98\x26\x46\x4d\x5b\xa2\x87\xdd\xed\xac\x00\xf6\x67\xf6\xae\x39\x97\x01\xeb\xf7\xfb\xec\xf6\xed\xc5\xdb\x53\x46\xbf\x90\x94\x6d\x15\x1b\x29\x54\x82\x54\xa9\xdd\x50\x53\x90\xa8\xf8\x3b\xf9\x5e\x49\x78\x3b\x72\x27\x84\x5b\x98\x82\x66\xf7\x6e\xab\x12\x91\x42\x65\xbd\x1a\x1c\xbe\x5f\x3c\xde\x4d\x32\xc9\xf9\xc3\x4d\xa9\xc7\x5b\x6c\x00\x5b\xd8\x84\xa6\xc9\xa6\x56\x26\x11\xf5\x9a\xb9\xe7\x26\x99\x40\x5a\x66\x90\x32\x3e\x54\x53\x68\x99\x6c\xdb\x9f\x21\x4b\x2f\x21\x7c\xe8\x78\xde\xd0\xa8\xac\xb4\x95\xb2\x7a\x04\x0f\xa7\xec\x77\xe8\xda\xe6\xac\x00\x9d\x80\xb4\x7c\x0c\xf3\x66\x00\x7a\xef\xe5\x8b\xff\x38\xf6\xfc\xc8\xf5\xe8\xad\x27\x2f\x1c\x46\xbc\xe1\x0f\xdf\xc8\xda\x34\x28\x0c\x7b\x31\x60\x67\x73\x83\xe1\x77\x59\x52\x66\x68\x6b\x41\x77\x7d\x63\xc8\xe1\x8c\x69\x55\xa2\xc3\x9e\x95\x45\x5b\x9b\xfd\xf5\xef\xfe\xc3\x29\x7d\x3c\x2f\x32\x38\x0d\x65\x98\x49\x6d\x76\x32\x8c\x55\xec\x37\x2f\xfe\x83\xa8\xa7\x3b\x9f\xb5\x56\x58\xc3\x8c\x3b\x80\x95\x05\x13\x39\x85\x73\x42\x36\xab\xeb\x39\xeb\x36\xfa\x1b\xcb\xb5\x35\x3d\x86\x5e\xfd\x4a\x38\xb4\xca\xf2\x6c\x4e\xcb\x47\x2d\x1c\xee\x09\x48\xa9\x42\x98\x00\x1a\xaa\xd8\xcb\xdf\xbc\xf8\x8f\x45\x73\xca\x5b\x99\x00\x7e\x89\x5f\x60\x98\xc5\xd0\x29\xf7\x77\x22\xcb\x20\xed\x3d\x3a\xfd\x51\xa9\xed\x04\x74\x8f\x81\x34\xc1\x58\xe5\xe6\x37\x37\x37\xec\x5d\x97\x52\xa2\x8c\x40\xd6\x61\xb4\x68\x35\x2c\x5c\x7e\xb1\x8e\x11\x5a\x96\x2b\x63\x97\x4f\x79\xf3\xe3\xe6\x1a\x97\xb3\xb7\xa3\x6d\xc5\x81\xfe\x0e\x66\x88\xc5\xaf\x77\x10\x29\x1f\xfa\x77\x55\xe2\x6f\x5f\x48\xdb\x57\xba\x4f\xdd\x9c\x32\xab\xcb\xc7\xbd\x06\x75\xcb\x5b\x27\xe0\x03\x90\x81\xb2\x71\xde\x16\x76\xf5\xbd\x9c\xfc\xdd\xcf\x73\xaa\xee\xe5\x6a\xca\x81\x84\xd3\xd3\x8c\x1d\x4f\x7d\xdb\xe2\x36\x77\x6c\xdc\xe8\xee\xed\xff\xb3\x88\xdd\x5b\x90\x03\x7f\x76\xab\xd3\xee\xe4\x2a\xf4\x78\xf4\x36\x18\xbd\x3a\xb6\xc4\xf9\xc8\xe6\xe4\x5e\xa0\x61\x96\x50\xae\x85\x13\xbe\x84\x02\xd1\x3c\x6a\x87\x8c\xc5\x88\x02\x77\xce\xcd\xca\x83\x9e\x01\x37\x76\x19\x28\xe2\x41\x7f\xbc\xad\x4f\x02\x98\x6f\x6d\xa1\xd3\x49\x48\x08\xf2\xda\xc6\x78\x4e\x88\x72\xf0\x0e\xc8\xc3\x47\x01\x67\x2d\x21\xea\xa0\x3a\x12\x6e\xff\xda\xf2\xd5\xfb\x0a\x9b\x09\x46\xce\x5d\x44\x6b\xff\x69\x23\x38\xd8\x9b\x4e\x3d\xf1\xaa\x3c\x8a\xe4\xd2\x24\x7d\x85\xa2\xfc\xfc\xc1\x08\xa3\x0f\x4c\x01\xc9\x40\x03\x9e\x3e\x8a\x46\x26\x05\x08\xf5\xa2\xb3\xec\x9e\xcf\xcc\xc1\x93\x91\xc2\x73\xb0\x7c\x7d\xa2\xc9\x7c\x6b\x13\xfd\x1b\xcb\x65\xca\x75\xea\x67\x79\x78\x68\xaa\x2e\x07\xec\x0d\xfa\xe2\xe4\x48\x9d\xb2\x89\xb5\x85\x39\x3d\x39\x19\x0b\x3b\xb8\xfb\x83\x19\x08\x75\x92\xa8\x3c\x2f\xa5\xb0\xb3\x13\x74\xc0\x89\x61\x69\x95\x36\x27\x29\x4c\x21\x3b\x31\x62\xdc\xe7\x3a\x99\x08\x0b\x89\x2d\x35\x9c\xf0\x42\xf4\x6b\x99\xdb\x0c\xf2\xf4\x17\x61\xa0\xf7\x2c\x58\xb7\xce\x20\x5a\xa7\xf4\x14\xfa\xa5\xbc\x93\xea\x5e\xf6\x51\x13\x36\x5b\x9d\xc6\xcd\xa2\x20\x42\x9b\x83\xf7\x36\x81\x0f\x85\x4a\xdf\xfb\x26\xb8\xc5\xf4\xb9\x4c\xfb\xe4\xb4\x7c\xcf\x7b\xb1\x8b\x6d\xb8\x5f\x07\x16\x6c\x12\xf5\x4e\x6d\x37\x6d\x8a\x27\x56\x4c\x61\x27\x27\x78\x68\xad\xed\x7e\x1b\x02\x4e\xd3\x52\xd3\x8e\x37\xbc\xe1\xc1\xb7\x93\xf3\x19\xca\x4a\x38\x36\x53\x24\x0a\x48\x95\x82\xb7\x9c\x4e\xd1\x34\x70\xe3\xc8\xd1\xad\x13\xa5\xbd\x8f\x1c\xed\xc6\x33\x63\x21\x27\xe2\x46\xdf\x67\x33\x66\xf5\x8c\x1c\xeb\xfa\xce\x29\xaf\xde\xf3\xed\x34\x86\x3b\x7c\xcf\x18\x95\x08\x14\x9d\x6a\xb8\x06\xb9\x2d\xd8\x00\x39\x2b\x94\x11\x38\xb6\xe7\x99\xdb\x59\xf6\x76\x67\xb7\x0d\x37\xdf\xef\x7f\xbb\xcd\xd6\x8d\xb0\xca\xc9\x96\x56\xfa\x76\x04\xc6\xa8\x99\x65\xe0\xb7\xe7\xd0\x04\xc5\xd7\x89\x35\x89\x92\xc6\x6a\x2e\x56\xe7\x51\x2d\x6f\x3b\xba\x52\x76\xf7\x57\x30\xc4\xa0\xb3\x9d\x80\xc2\x96\x27\xc6\x0e\x31\xb3\x26\x85\x0a\xd4\x4d\xc0\x50\x9a\x55\x88\x45\x74\x84\x6b\x47\xd3\xec\x0e\x30\x62\x7b\xc1\x89\xbe\xa6\x2a\x4b\xe9\x05\x4a\xaf\x37\xd5\xba\x2e\xc7\x52\x55\x3f\xbf\x7a\x80\xa4\xdc\x34\x27\x7f\xb1\x2d\xd8\x02\x83\x41\xc5\x87\xad\xd0\x24\xdc\xd1\x0d\x0f\xbc\xfc\xa2\x10\xec\x5e\x90\x31\xdc\x0a\x33\xa2\x9c\xb5\x6a\x23\xa0\xe1\x38\xad\x50\xb8\x72\x2f\x23\x8b\xa3\xd4\x09\x61\x91\xdc\x24\x13\xa5\x8c\x3b\xe5\xb8\x9f\xd8\xef\x54\x28\xf2\x19\x62\x02\x8d\x66\xb9\xa3\x31\x21\x91\xa6\xee\x9e\x04\xa7\xfa\x33\x61\x48\x85\xaf\x20\x18\xbc\x5c\xae\x1b\x34\x5c\xba\x3f\xc6\x28\x75\x19\xcb\x4c\x99\xbb\x4e\xef\x41\x8c\x27\xd6\xf4\x98\x18\xc0\x00\xb1\x06\x78\x32\x69\x74\x9b\x03\xd8\xd6\xbd\x4d\x4d\x54\x6b\x5a\x99\x8f\xaa\xac\x08\x9f\x0a\xd4\xab\x78\xcc\xfc\x5e\x2e\x05\x57\x8f\x81\x4d\x06\xc7\x3d\x56\xa7\xec\xbb\x39\x0e\x67\x4c\x58\x70\x34\x1b\x75\x19\xad\xca\x31\xad\x04\x42\x4c\x28\xce\xab\x4a\x19\x41\x2f\x6c\x8a\x3a\xe7\x01\x2d\xee\xc0\xed\x1b\xce\xbc\xcc\x43\x51\x25\x5c\x1f\x9a\xe5\xa1\x4a\x2c\xd2\x60\x0a\x45\xda\xea\xbc\xc1\xfe\x3f\xab\x8f\x8e\xcc\x71\x0d\xcc\x89\x18\x4f\x02\x2c\xb9\x67\x04\xed\x3d\xd8\xfe\xec\xb1\xbd\x7c\x31\xd4\x76\xf4\xc8\x50\x6b\xfb\xc6\x43\xbe\x45\x8d\x55\x8d\xfd\xb7\xa0\xf3\x0a\x8a\x88\x22\x48\x32\xbc\x9d\x3c\x5c\xb1\xe5\x71\x8c\xbd\x60\x47\x88\x64\xc2\x1e\x1a\x44\xf8\xbe\x2a\x8e\x07\xec\x8c\xc9\xb2\x3a\x73\xeb\x06\x90\xaa\xea\xdf\x77\xe4\x06\x35\xaa\xee\x6b\xc7\x15\xef\x45\xee\xa8\xed\xe6\x69\x6f\xb6\xbe\x87\x00\x3c\x5e\x34\x74\x5d\x27\x04\xeb\x1d\x3b\xd8\x8f\x74\x87\x3e\xc2\x2a\x76\xef\x63\x21\x40\x03\x8f\x6b\x1d\x85\x01\x3a\xef\x35\xa5\xa7\xea\x40\xb6\x4f\x31\xc1\x62\x57\xac\x60\xdd\x60\x06\xeb\x08\xae\x6c\xaf\x08\x9f\xe5\x6d\x3e\x0c\x26\x64\x61\xb5\xa0\xdd\x22\xf2\xc3\x19\x3e\xdd\x32\xf8\x69\x75\xdb\x97\xd2\xd5\x6d\x2f\x9a\x57\xb7\xb5\x88\xf7\xf4\x02\x83\x96\xb7\x8e\xd0\x96\xda\xfe\xa4\xad\x6e\xdb\x87\x16\xad\xea\x67\x87\x80\xa3\xe5\xad\xab\xb3\x49\x6d\x87\xe0\xa4\xe5\x6d\x41\x44\x7d\x3f\xb1\x4a\xcb\xdb\xce\x46\xd6\xe5\x6d\xd7\xb8\xa6\xe5\x6d\x2e\xd5\xf1\x3d\x05\x39\xf5\xda\x11\x4e\xec\x2b\x4b\xe7\xf8\xf5\x5e\xfc\xa4\x6e\x1d\x83\x78\xb7\xc8\xa8\xe5\x6d\x5e\x00\x7c\x26\x51\x52\x4b\xba\xfa\xca\xba\x6e\x5e\xaf\xfc\x98\x72\xdc\x43\x9c\x8f\x57\x28\x7a\x3e\xf5\x26\xd8\xa9\x31\x22\xbb\xd0\x80\xa5\x0d\x30\x6c\x2c\xd8\x61\x3e\x4c\x60\xd6\xf2\xd6\x1d\xe3\xa4\xd6\x11\xfb\xa4\xd6\x19\x72\xa3\xc0\xf3\x25\xd9\x85\x3f\xa2\xac\x43\x96\xe9\x28\xeb\x44\x59\x67\x8b\x16\x65\x9d\x4d\x5b\x94\x75\x56\xb5\x28\xeb\x2c\x69\x51\xd6\x89\xb2\xce\x5e\xed\xe9\xc9\x3a\x64\xa9\xea\xcc\x60\xf6\x37\x32\xb8\xce\x5b\xc8\x50\x9a\x0a\x21\x41\x6d\x53\x99\xe3\xfd\x37\x9e\xc4\xde\xa2\x79\xcd\x47\xba\x6b\x2e\xc7\xc0\x5e\xf6\x5f\xbe\xd8\x30\x9d\x70\x79\xdb\x27\xe8\xa7\xd9\xb6\x4d\x3d\x9c\x6f\xab\x3c\x12\xef\xcd\xbb\xe4\x4f\x6a\xe5\xf0\x68\x49\x98\x2b\x1c\x44\x55\x55\xac\x1c\x2c\xe3\xb6\x65\x10\x17\x39\x54\x0e\xd1\x56\x0a\x73\x1d\x13\xac\xa4\xf7\x77\xb8\x4d\x1d\xec\x36\x83\x04\x38\xc5\xc1\x0f\xa1\x9a\x85\xca\x81\x12\x54\xc3\xa1\x77\x53\x80\x00\x2b\x76\x04\x83\xf1\x80\xa5\x94\xec\xcd\xa5\x8f\x39\x3b\xee\x35\xdd\xe3\xb9\x23\xae\x1a\xff\xe3\xa6\xed\xfd\xe3\x30\x05\x69\x4b\x9e\x65\x33\x06\x53\x91\xd8\x6a\x7d\x18\x50\x28\x2c\x39\x3b\xf7\x71\xa5\xec\x21\x1e\xee\x2b\x12\xf6\x17\xce\xd6\x76\xfe\xea\xd0\xf6\x97\xdd\x16\xe6\xb1\x3b\xbd\x99\x93\x4b\x08\x42\x83\x95\x6a\x95\x75\xa3\x91\xbf\x12\xff\x89\x08\xfe\xf6\xdd\xae\xee\x31\xd6\x11\x4f\xd8\x9b\x0f\xcc\x2b\x50\x65\x96\x39\xf4\x26\x8f\xd9\x22\x08\x96\x78\xb2\x96\x64\xeb\x90\x9b\x35\x6f\x64\xed\xe0\x3b\xb7\xaa\x50\x99\x1a\xcf\x9a\x3b\xe8\xef\x81\xa9\xcb\xe3\x70\x66\xca\xa1\x17\x01\xdd\x21\xba\x9a\xdb\xf2\xe8\x0b\x59\xd9\xa2\x2f\x64\xa1\x45\xfb\xc0\x7c\x8b\xf6\x81\x2d\x5a\xb4\x0f\x2c\x69\xd1\x3e\xb0\xd8\xa2\x7d\x20\xda\x07\xf6\x69\x9f\xbe\x7d\x80\x45\x5f\xc8\xaa\x16\x65\x9d\xba\x45\x59\x67\xf3\x16\x65\x9d\xc5\x16\x65\x9d\x28\xeb\x44\x59\x27\xca\x3a\xbb\xb6\x3d\x90\xbb\x50\x69\xe7\x29\x32\x85\x4a\xd7\x64\xc8\x90\xbd\x3a\x51\xfd\x4c\x25\x55\x65\x12\xf7\x89\xf7\x7c\x18\x9e\x93\x09\xbd\xc7\xfe\xa5\x24\x50\x7a\x02\x95\xbc\xcd\x81\x29\xbc\x44\xa2\x50\xe9\x91\x39\xde\x21\xf0\x3c\x66\xd8\xc4\x0c\x9b\x9f\x41\x86\xcd\x84\x1b\x5f\x38\x09\x49\xeb\xea\x84\x9b\xc6\xf1\xbf\x05\x9d\xff\x6c\xf3\x6d\x1c\xc2\x79\x84\xc1\x7b\xea\x6a\xa4\x20\xd8\xa5\xde\xb7\x0b\xe9\x75\x1b\x62\x5e\x2f\xa3\x2b\x7a\xd2\x14\x52\x56\x80\xee\x13\x92\x29\x36\x12\xbe\x7e\xd8\x1c\xfe\x7a\x08\x3f\xf3\xbc\x99\x36\x24\x9e\x75\xf2\x4c\x7b\x29\x9d\xf9\xa6\x9a\x2e\xba\x16\x57\x7c\x76\xa9\x34\xdd\x68\xa5\x7d\x66\xbd\x3b\xed\xeb\xbd\xf4\xd2\xae\x94\x48\x54\xf2\x6e\xb6\x2a\x93\xbc\xba\x2d\x2d\x6e\xfb\xcf\x12\xf4\x8c\xa9\x29\xe8\x5a\x31\xaa\x6e\xf7\xe9\x55\x97\xd4\x24\xdc\x17\x50\xee\xc6\xc0\xd3\x89\x29\xa2\x4b\x4d\xbd\x6b\xaf\x21\x7b\x62\xd5\x93\x57\xb7\x6e\x15\x87\x0e\xd5\x86\xe7\x56\x8b\x79\x75\xeb\xd4\xfc\xc6\x3a\x36\xc1\xb1\x0e\xcd\x70\xac\x5b\x53\x1c\xeb\xdc\x1c\xc7\xba\x34\xc9\xb1\x0f\x5e\x41\x7a\x75\xeb\xd8\x7c\xc4\x3a\xb7\xd2\xb1\x67\x58\x8f\x7a\x75\x7b\x0f\xe0\xee\xd2\x62\xc7\x62\x75\xeb\xbd\x5b\xd7\x06\x35\xd6\xb5\x51\x8d\x75\x8d\x87\x3b\x55\xd1\x5e\xdd\x62\x7d\xed\xf7\x20\xa7\x75\x26\x44\xec\x5b\x93\xfb\xb1\x89\x76\x80\x93\xd5\xdd\xbf\x1f\x4a\x01\x22\x2e\x5d\x5f\x38\xeb\xc6\x6e\xdc\xf5\x85\xa1\x9a\xcd\x8b\x51\x43\xdc\x2a\x62\x34\xfe\x9e\x06\x83\x57\x29\x1b\xc5\xe3\x1a\x9d\x2d\x5c\x3d\x53\x9b\xce\xaa\xcb\x67\x9c\x52\x50\x5f\x5a\xd5\xf8\x18\xdf\x1d\x50\x38\x69\x2d\x4d\xc8\x74\x3e\xc0\xb4\xfe\x02\xf5\x0b\xba\x0e\xf7\x20\xd8\xb1\x0f\x4d\xfd\xc6\xc1\xa0\x79\x73\xae\xef\xf1\xe8\x7f\xff\x7d\xdc\xaa\xde\x52\x77\x18\xb5\xbf\x8d\x5b\xd4\xfe\xf6\x6a\x51\xfb\x5b\xd9\xa2\xf6\xb7\x47\x8b\xda\xdf\x66\x2d\x6a\x7f\xab\x5b\xd4\xfe\xa2\xf6\xb7\x43\x8b\xda\x5f\xd4\xfe\x76\x6d\x3f\x63\xed\xaf\xdb\xa8\xe6\xa6\x2e\xe6\x83\x44\x50\x7e\xb4\xdc\x8a\xa4\x8e\x78\x0e\x6f\xd1\xbf\xba\xd5\x01\x9b\xfa\xdd\x72\x0d\xb0\xa9\x25\x2e\x68\xc1\x83\x47\xd4\xbd\x4a\x21\x5c\xf8\x72\xbd\x26\xf8\xa9\x45\x6e\x77\x86\x89\x0d\x97\x70\xa7\xa8\x78\x1b\x02\xcb\xea\x8b\xdb\xab\xa8\xb3\x94\x1d\x05\x5f\x3c\x5e\xc4\x22\x95\x6d\x3f\x94\x56\xf4\xeb\x37\x2a\xef\x3c\x06\xd5\xb4\xf2\xf9\x5b\x2e\xe4\x2a\x86\xad\x8a\x8f\xaa\xb1\xc7\x91\x47\xd0\xad\x39\xe0\xc5\xb7\x23\x21\x29\xd2\x31\x5c\x1a\xa4\x64\x08\x9a\x22\x7a\x4a\x57\x2f\x78\x3c\x27\xd1\x17\xe7\x83\xf2\x6f\x0d\xbb\x46\x94\x0f\xc7\x43\xc6\xa5\x4f\x86\x55\x32\xdc\x6a\x4f\x37\xd5\xd7\xf2\x72\x75\x17\x4b\x35\xfa\x80\xbd\x42\xac\x6f\x76\x2c\x0c\xc2\xc7\x5f\x13\xd1\x0d\x22\x3f\xad\xc2\x0d\xf7\x5b\x17\x6e\x98\x8b\x18\x89\x75\x1b\x62\xdd\x86\xbd\xea\x36\xe0\x43\x3a\xdc\x9d\x17\x70\x60\x7f\xf3\xd7\x2b\x69\x40\x50\xe5\x65\x66\x45\x51\x47\x60\x1b\x1a\x2a\x23\x4d\x62\xe4\x23\x41\xdb\xf8\xee\x46\xe3\xc9\x64\x1e\xef\xb1\x3f\x8c\xd8\x36\x48\x4e\x7c\xb4\x25\x5e\x86\x84\x15\x07\x82\xda\x41\x21\xa5\xe2\xf9\x47\x0a\x5e\x20\xc1\x36\xb5\xd6\x4c\x77\x75\x39\x3a\x9f\x39\x94\x70\x14\x7b\x0d\x83\x68\x5e\x68\x81\x51\xab\x62\x0a\xb2\xe6\x12\x47\xe6\xf8\x38\x48\x43\x9d\x72\xaf\xf7\xc2\x7d\xfe\xd4\xe0\x12\x7f\xd9\x84\xff\xe0\x82\x2a\x0e\x54\x83\xaf\xe6\x3f\xcf\x3b\x24\x72\xff\xe8\xb6\x2e\x2c\x72\x9d\x45\xb5\x7d\xf4\x88\xb6\x9f\x53\xed\x8b\x27\xe9\xc3\x78\x72\x5a\xc7\xa7\xe1\xb7\x88\x09\xa3\x9b\xb7\xe7\x90\x30\xfa\x91\x7c\x13\xcf\x27\x6f\xf4\xd9\xfa\x23\x9e\x4b\xde\x68\xf4\x41\x6c\xd5\x3e\xd5\x74\xce\x76\xeb\xd0\xe7\x10\xfd\x0d\x1d\xcb\x54\x9d\x30\xff\xf7\xe3\x67\xe8\x04\xff\x3a\x8d\x2e\x8b\x91\x65\x1f\x33\xb2\x2c\x6a\x61\x51\x0b\x6b\xb7\xa8\x85\x2d\xb4\xa8\x85\x6d\xd1\xa2\x16\xb6\xba\x45\x2d\x6c\xb1\x45\x2d\x2c\x6a\x61\x1b\xb4\xa8\x85\x45\x2d\x6c\xd3\xf6\x33\xd3\xc2\xba\xab\xb7\x1e\x23\xbc\xde\x43\x84\x57\x37\x94\xb0\x03\xfa\xd7\x09\xd6\x75\x14\xd1\x15\xa3\xb9\x9e\x76\x34\xd7\x9e\x65\xe7\xa4\x15\xef\xa7\xf4\x5c\x73\xb7\x57\xd5\x9f\xe3\x53\x25\x52\x56\x94\xd6\x57\xdf\x8a\x35\xe8\x9e\x72\x0d\xba\xd6\x8e\xc6\x42\x74\x1b\x15\xa2\x5b\x05\xb3\x58\x8d\x6e\x45\x7b\x3a\x31\x66\xb1\x1a\xdd\xb6\x2d\x56\xa3\x5b\xde\x62\x35\xba\x35\x2d\x56\xa3\x8b\xd5\xe8\x62\x3d\x82\x3d\x5a\xac\x47\xb0\xa4\xc5\x7a\x04\xbb\xb7\x58\x8f\x60\xa3\x16\xeb\x11\xc4\x7a\x04\xed\x16\xbd\x50\xfb\xb5\x58\x8f\x60\xcf\x16\x3d\x53\xb1\x1e\xc1\x5e\x1d\xc6\x6a\x74\x9f\x54\xcc\x20\x8b\xda\x5f\xd4\xfe\x36\x6e\x51\xfb\x5b\xd9\xa2\xf6\xb7\x47\x8b\xda\xdf\x66\x2d\x6a\x7f\xab\x5b\xd4\xfe\xa2\xf6\xb7\x43\x8b\xda\x5f\xd4\xfe\x76\x6d\x3f\x63\xed\x2f\x56\xa3\x7b\xf2\xb1\x8a\xec\x29\x66\x24\xc5\x6a\x74\x31\x7e\x71\xa7\xed\x8e\xd5\xe8\x1e\x6f\x3f\xfb\x6a\x74\xad\x58\xba\x8f\x57\x92\x6e\xfb\x69\xc4\xba\x74\xb1\x2e\x5d\xac\x4b\x17\xeb\xd2\xc5\xba\x74\xb1\x2e\xdd\xe6\xed\xe9\x7b\x33\x9e\x9c\xfe\xf1\x69\x78\x30\x62\x45\x84\xcd\x5b\xac\x88\xb0\xb2\xc5\x8a\x08\xb1\x22\x42\xf4\x46\xec\xd2\x62\x45\x84\x2d\x5b\xf4\x3c\xc4\x8a\x08\x5b\xb5\x58\x97\xee\x93\x89\x31\x8b\x5a\x58\xd4\xc2\xda\x2d\x6a\x61\x0b\x2d\x6a\x61\x5b\xb4\xa8\x85\xad\x6e\x51\x0b\x5b\x6c\x51\x0b\x8b\x5a\xd8\x06\x2d\x6a\x61\x51\x0b\xdb\xb4\xfd\xcc\xb4\xb0\x58\x97\xee\x49\xc7\x7a\xc5\xba\x74\x4b\x5a\x8c\xeb\x7a\xda\x71\x5d\x3b\xe2\x0a\x2f\xad\xca\x55\x29\xed\x0d\xe8\xa9\x48\xe0\x2c\x49\xdc\x5f\xb7\xea\x0e\xb6\x8c\x25\x6a\xab\xa1\x6b\xba\x65\x42\xa6\x22\x41\x45\xf2\x7e\x02\x58\x56\xce\xc9\xb7\xf8\x1e\xe3\xf4\x22\xb3\xf8\x66\x8d\x5e\x38\x4f\x47\xd4\x30\xc0\x06\xbb\xde\x16\x5e\x04\xa1\xa1\x52\x19\x70\xb9\xc5\x97\x9e\x1b\x82\xde\xf2\x34\xb7\x00\xf2\xda\x93\xe2\xba\x33\x36\x84\x4c\xc9\xb1\x8f\xe7\xf1\x27\x60\xc0\xce\xeb\x17\x12\x2e\xf1\xf0\x94\x5a\x83\xb4\xd9\x0c\xe1\x80\x05\xae\x50\x6b\xc8\xd5\x14\x52\x24\xd9\x18\x46\x44\x72\x24\xb7\x2c\x03\xee\xc6\x92\x50\x0f\xe6\x0e\x0f\x67\xd7\xd8\x3f\x75\x3a\x04\x1f\xda\xb4\x13\x10\xb7\xa7\x8d\x3b\x51\xc3\x39\xcb\x86\x17\x9b\x90\x2f\x25\xa8\x1f\x35\x56\x88\x47\x73\xa6\x4a\x76\xcf\x49\x52\xd2\xa5\xc4\xc3\x8c\x4b\x77\xa0\xdd\x72\xf0\x3d\x64\x92\xdd\xcd\x0f\x7d\xa4\x6a\x5b\x7e\xb6\x8f\x39\x80\xeb\xf1\x4e\x4c\xaa\xb5\x35\x87\x67\x7a\x5c\x92\x48\xe8\x51\x19\xa4\xd5\x33\x8c\xb7\x23\x99\xa2\x81\x89\x39\x1f\xc3\xe1\xa1\x61\xe7\x6f\x2e\x1c\xf9\x2b\x8d\xa3\xd6\xbe\xca\x9e\x27\x87\x85\x56\x53\x91\x3a\xe4\xfe\x96\x6b\xc1\x87\x99\x93\x3b\x47\xa0\x41\x3a\xb1\xe0\x97\x47\xdf\x9e\xbd\xfb\xfb\xd5\xd9\x9b\x57\xc7\x28\x81\xc2\x43\xc1\xa5\x3b\x15\xa5\xa9\x03\x45\xfd\x70\x6e\x20\x90\x53\xa1\x95\x74\xf3\x43\x5d\x8d\xb3\x69\xe8\x35\xa9\x0e\x83\x06\xa3\xb2\x29\xa4\x24\x27\x57\xa3\x05\xae\x23\x64\x51\xda\xa0\x3b\x62\xf8\xa2\x3b\x40\x32\x99\x70\x39\x76\xf3\xbc\x50\xa5\xeb\xef\x97\xbf\xc4\x19\x69\x48\xcb\x84\x24\x27\x1e\xb0\xf6\x97\xbd\xc0\x29\x1c\xad\x37\x54\x12\xd1\x24\xbc\x08\x73\x6e\x2e\xcb\xcc\xa4\xe5\x0f\xa7\x14\xbf\x77\xf0\xcb\xc6\xa3\x83\x50\x4e\x52\xb9\x21\x88\xdf\xd0\xac\x32\xac\x64\x98\xb1\x83\xe6\xdb\x03\xf6\xca\x8d\x01\x69\x13\x80\x14\x7e\x09\x53\xd0\xa8\x79\x7a\xf0\xf5\x98\x86\x31\xd7\x69\x06\x06\x03\x0f\x03\x6d\x26\xed\xc0\x03\x0c\x2a\xbd\x56\x2a\xbb\x8c\x98\xb0\x37\x0a\x83\x10\x47\xea\x94\x4d\xac\x2d\xcc\xe9\xc9\xc9\x5d\x39\x04\x2d\xc1\x82\x19\x08\x75\x92\xaa\xc4\x9c\x58\x6e\xee\xcc\x89\x90\xee\x70\xf5\x53\x6e\x79\xbf\x71\xaa\x4f\x88\x73\xf7\x13\x95\xe7\x5c\xa6\x7d\xee\xb1\xab\x5f\x6d\xeb\xc9\x2f\x3c\x4f\xed\xf3\xea\x2d\x21\xfb\xbc\x6f\x26\x90\x65\x87\x3b\xe0\xf3\x7e\x32\xdf\x1e\xb2\xde\x5e\x32\x9e\x5f\xfb\xfe\x07\xf8\x55\x75\x5e\x09\x06\x03\x76\xa5\xac\x8f\x8f\xf5\xa1\xd8\x48\x47\x11\xbe\x2b\x8f\xf4\xab\xab\xdb\x77\xff\x7d\xfd\xf6\xf2\xea\x36\x9e\xec\x78\xb2\xe3\xc9\xde\xe3\x64\x83\x9c\xee\x7d\xaa\x83\xcc\xd9\x38\x26\xd5\x7e\x23\xa7\x36\x60\xc3\x31\xa8\x36\x60\x6f\x09\x91\xda\x47\x83\x7a\x0b\x02\xaf\xe4\xf4\x5b\xde\xb6\xb0\xcb\xa5\xe0\x60\xfe\x05\x12\x94\x2b\x19\x7c\x9f\xf8\xf8\x3d\xac\x59\xfb\xba\xaf\x76\x92\x22\xa9\xed\xef\x5a\x72\x43\xef\x6e\x68\x68\x6d\xdf\x15\xcf\xeb\x0a\xd5\x4b\x76\x6d\xc0\xde\x04\xb5\x87\x9d\xff\xfd\xf2\xe2\xd5\xd5\xed\xe5\x97\x97\xaf\xde\xed\xae\x47\x77\x60\x71\x41\x9b\x42\x47\x00\x38\xdc\x91\x4b\x16\x1a\xa6\x42\x95\x26\x9b\x55\x56\x90\xe5\x44\x60\xfe\xf4\x7b\xbf\xef\xac\xd2\xc7\x97\x7e\x16\x99\x6d\xb7\xcc\xf6\x02\x46\xbc\xcc\x48\x7b\x3a\x38\x18\xec\xc2\xe5\xa8\x75\x85\xbe\x5f\x6a\xb5\x47\x05\xe6\x16\x0a\xdf\x50\xed\xf6\x91\xd2\x2b\x8f\xf1\xa1\x8f\x3e\x68\xb1\x1e\x2f\x3c\x92\x85\xce\x4b\x8f\xe4\x24\xdb\x13\x3a\x7b\x7a\x19\xba\xf1\xbd\x27\x4a\x8e\xc4\xf8\x0d\x2f\xbe\x86\xd9\x3b\x18\xed\x67\x26\x6e\xc3\x1b\xad\x8f\xde\x95\x8c\xb6\x4a\xc7\xce\x68\xb0\xfd\xdc\x34\x9d\x39\x69\xba\x8a\xce\xd8\x3f\x32\xa3\xbb\x40\x8a\x4e\x82\x28\x16\xea\xe1\x93\x1d\xda\x5b\x94\xbb\x8a\xb1\xe9\xc4\x73\xbf\x1f\x97\x0f\xad\xcd\xec\x9a\xec\xde\xd3\x59\xbb\xa9\xda\x91\x28\x99\x40\x61\xcd\x89\x9a\x3a\xce\x05\xf7\x27\xf7\x4a\xdf\x39\x3d\xc2\xe9\xae\x7d\xc2\x5a\x73\x82\x3e\x83\x93\x5f\x90\x1b\xec\xf6\xed\xc5\xdb\x53\x76\x96\xa6\xfe\x72\x93\xd2\xc0\xa8\xcc\xfc\x75\x02\x03\xc6\x0b\xf1\x2d\x68\x23\x94\xec\xb1\x3b\x21\xd3\x1e\x2b\x45\xfa\xc5\xee\xc4\x39\xb4\x0e\x77\x41\x15\xe4\xea\xec\x78\x27\x6e\xd0\xc7\x32\x6b\xf1\xae\x8a\x88\x38\xae\x25\xac\x41\xdc\x0c\x56\x67\x2f\x64\x74\x04\x9a\xed\x4d\xf4\xf3\x0d\xb7\xb0\x5b\xba\x7a\x58\x13\x56\x72\x71\x7a\x44\x2d\x54\x7a\xca\x4c\x59\x14\x4a\x5b\xc3\x72\xb0\xdc\x29\xbd\x03\x87\x61\xbd\xf6\x9f\xe8\xab\xea\xb1\x1f\xab\x1f\xd1\xe1\x64\xbe\x3b\x3c\xfc\xd3\xd7\xaf\xfe\xfb\x2f\x87\x87\x3f\xfc\xd8\x7c\x8a\xac\x90\xa2\x80\xda\xaf\x98\x02\x92\x81\x54\x29\x5c\xe1\x18\xf8\xa7\x69\xb9\x59\xfc\x03\xcb\x6d\x69\x06\x13\x65\xec\xe5\x75\xf5\x67\xa1\xd2\xf9\xbf\xcc\x1e\x12\x07\x7b\x9a\x8c\x01\xb7\xe8\x9a\xdb\xc9\x13\x61\x0f\x35\x2d\xe9\xf8\xa8\xfa\x5e\x9b\x97\xe8\xe4\x1c\xff\xf9\x65\x00\x81\x93\x9e\xee\xb5\xb0\x16\x5d\x6f\x3e\x15\x5c\x8d\x7a\xee\xd4\xd6\x62\xe7\xf4\xe5\xde\xf5\x51\x3a\x25\x6d\xd5\x0e\x76\x0c\x30\x84\x88\x87\x16\x1d\xe4\x8a\xc1\x2e\xba\x98\xcf\xae\x2f\xd9\x94\x20\xfc\x64\x80\x13\xd2\x7b\xbf\x7c\xaf\x34\xae\xba\x74\xc9\x83\xaa\xd2\x10\x4f\x29\x28\xa8\x4a\x32\x66\x99\xc8\x85\x8f\x35\xf4\x17\x34\x19\x76\x44\x3f\x0e\x92\xa2\xec\xf9\x17\x06\x39\xe4\x4a\xcf\xaa\x3f\xa1\x98\x40\xee\x34\xad\xbe\xb1\x4a\xf3\x31\xf4\xaa\xcf\xe9\xb3\xea\x2f\xfa\xb0\x35\xc0\xe2\xd7\xa4\x0a\xd7\xae\x52\x4f\x91\x21\xfd\xf4\x68\x5b\x00\xfd\x13\x21\x6d\x15\x66\x5c\xbd\x07\x91\xb0\xb2\xc4\x91\xc0\x59\x41\x11\xf5\xc9\xa9\xca\xca\x1c\x4c\xaf\x12\x83\xc8\x1a\x20\xa7\x4e\xb3\x34\x4f\x4a\x50\x4b\xc5\x54\x98\x2e\xc2\x88\x97\xc8\x69\xc2\x47\xe4\xab\xd2\x16\xa5\xf5\xf5\x66\x1a\x17\xbb\x29\x83\x76\x8b\xaa\x28\x40\x8b\xec\xbf\x3c\xd8\x3f\x1a\x9d\x5b\x0b\x5a\x9e\xb2\xff\x39\xfa\xfe\x57\x3f\xf5\x8f\xbf\x38\x3a\xfa\xee\x45\xff\x8f\x3f\xfc\xea\xe8\xfb\x01\xfe\xe3\xf3\xe3\x2f\x8e\x7f\x0a\x7f\xfc\xea\xf8\xf8\xe8\xe8\xbb\xaf\xdf\x7c\x75\x7b\xfd\xea\x07\x71\xfc\xd3\x77\xb2\xcc\xef\xe8\xaf\x9f\x8e\xbe\x83\x57\x3f\x6c\xd8\xc9\xf1\xf1\x17\xbf\xdc\x7b\xea\x5c\xce\xde\xee\x49\x40\xa9\xf5\x3b\x2b\x17\x34\xdf\x63\x47\x71\xd6\x0f\xfd\x5a\x69\xea\x0b\x69\xfb\x4a\xf7\xa9\xeb\x53\x66\x75\xb9\x1f\x31\xa9\x99\x52\xd7\xe7\x3f\xdc\xde\x75\x5a\x33\xa4\x8a\x5d\x3f\x99\x03\x6e\x20\xd1\x60\x3f\x84\x25\x87\x46\x0a\x72\xca\x5c\xcc\xe3\xa7\xc6\xe7\x7e\x0e\xc6\x9d\x2a\x64\x10\xf7\xb5\x96\x44\x47\x5a\xe5\x03\xd6\x70\x6f\x4c\x31\xe1\xc3\xbf\x77\x07\x7b\x58\x41\x43\x8b\xc6\xa0\x68\x0c\x5a\xd1\x1e\x35\x06\xdd\x10\x1e\x3e\x59\x4b\x10\xc8\xe9\xae\x2e\x8c\xa5\x1e\xf4\xa0\xeb\x58\xc5\x0a\x55\x94\x19\xb7\x2b\x3c\x63\x4b\xdc\xe9\xfe\xa8\xd7\xf1\xc8\x75\x30\x0d\x31\xb4\x7c\xb9\x0f\x93\x9d\x65\x19\x13\x92\x0e\x3e\x76\x10\x1c\x66\x1a\x48\xb5\x61\x9c\xfc\xd9\x53\x37\x85\x7b\x5f\x56\xae\x19\x97\x63\x98\xb1\x5c\x5b\x8c\x3d\xc6\xb2\x73\xc4\x4a\xbc\xf7\x49\xc8\xba\xf8\x5c\x25\x1c\x56\xb9\x20\x4b\x6f\xc6\xcc\xb8\xb1\x61\xda\x38\x1b\xcb\xef\xd0\xdb\x98\x40\x0a\x32\x01\x4c\x4c\x2b\xa1\x5e\xeb\xd0\xe9\x6d\xec\x95\x9c\x52\x1f\x9c\xa5\x25\x05\x83\x10\xf9\x5b\xde\xc7\xa7\x15\x80\xe0\x10\xf1\x26\x5c\x60\x5c\xc5\x21\x20\xd5\xaf\x34\xec\x2a\xbf\xaf\xb2\xb2\x9a\x8f\x13\x79\xb0\x3f\xcf\xac\x3c\x5b\x7b\x09\x43\x0b\xcc\xb2\x36\x3f\xb7\x99\xe4\xa7\xe0\x0c\xdc\x9f\x7d\xfe\xec\x58\x67\x47\x6c\xb3\x1b\x96\xb9\x85\xef\xa4\x4b\x36\xd9\x85\xb3\xa4\xd0\x30\x12\x0f\x1d\x9d\xd3\x33\x59\x5b\x62\x44\x0a\xd2\x8a\x91\xa0\x3b\xef\x0b\x0d\x05\xc8\xb4\x2a\x5c\x8a\xc9\xe1\xb2\x0d\x9b\x27\x19\xcc\x43\x02\x77\xb7\xa4\xec\x66\x99\xb0\x1f\xe9\x18\x8b\x74\x6c\xe7\xf6\x81\xe8\x98\xc7\xdc\xa7\x43\xc4\x30\xf2\x7c\xff\xe8\xf7\xf3\x76\x28\x3b\x22\xf2\xd6\x88\x56\x67\x76\x9d\x60\x2f\x86\xb2\x24\xab\x34\xec\x8a\x34\x5a\x45\xc1\x6b\x6c\x22\xc6\x0e\xb2\x19\x4c\x21\xf3\x72\x13\xcb\xb9\xe4\x63\xca\xef\xb6\x2a\x98\x6a\x9d\xa2\xe5\xf0\x58\x8b\x74\x21\xee\x1e\xe5\x78\x87\xdb\x99\xe2\x29\x3e\xd4\x2a\xcb\x40\x1b\x96\x89\x3b\x60\x17\x50\x64\x6a\xe6\xd3\xb5\x65\xca\x6e\x2c\xb7\x0e\xab\x6f\xc0\xee\xe6\xf6\xdd\x0b\x63\x71\xc6\xd7\x65\x96\x5d\xab\x4c\x24\x3b\x19\x55\xda\x3b\x77\x89\xfb\x55\x94\x59\xc6\x0a\xec\x72\xc0\xde\x4a\x24\x1a\x67\xd9\x3d\x9f\x99\x1e\xbb\x82\x29\xe8\x1e\xbb\x1c\x5d\x29\x7b\x4d\xd2\x77\x3b\xe0\x8e\x5e\x64\x62\xc4\x4e\xb1\xba\x8d\x65\x96\x8f\x51\x77\x0a\x6e\xc0\x9e\x83\x7f\xb3\x03\xa2\x0f\xf7\xc2\x2c\x55\x56\xf6\x46\x9c\x5f\x60\x4f\x8e\x56\xd1\xdf\x1f\x7c\x9b\x32\x31\x82\x64\x96\x64\xfb\x1f\xad\xb3\x04\x03\x18\xea\x8c\xf3\x06\x7e\xfb\x6a\xea\x3e\xc7\x13\xb5\x40\x21\x19\x95\x39\xa7\xfa\xed\x35\xaa\x57\x33\x22\x6d\xd7\x74\xaa\x24\xee\xcc\x3c\xf7\x65\x9b\x85\x32\xf6\xc6\x69\xe8\x9d\x14\x43\x3f\xbc\x0e\xdd\x31\x2c\xf9\x9c\x65\x90\x32\x91\xe7\x90\x3a\x2d\x3e\x9b\x31\x3e\xb2\x98\x6b\xdb\xb2\x10\x24\x1a\x08\x6b\x7d\x15\x93\x09\x97\x69\x06\x9a\x8d\xb8\xc8\xbc\x3d\xa0\xf5\xbe\x05\x9d\x0b\x89\x66\x01\xf2\xc8\xa2\x89\xc1\xfd\x95\x24\x4a\x87\xf2\xf4\xc2\x9a\xf0\xa8\x3e\x98\xc8\x47\x1a\x08\x30\xef\x5a\x66\xc3\x4c\x25\x77\x86\x95\xd2\x8a\x8c\x26\xa3\xd4\x1d\x4b\x54\x5e\x64\x78\x74\xf6\x38\x59\xd5\x3f\xfb\x15\x2a\xf5\x5d\xef\xe6\xe4\x17\xf5\x23\xfc\x61\x57\x86\xde\x81\x20\xd6\x85\x18\x06\x0f\x90\x74\x96\xe7\xff\xea\x01\x92\x46\x61\x09\xbc\x8f\x01\x4f\x34\xe6\x79\xf2\x3b\xf8\x84\x2a\xd9\xed\x91\x4b\xd7\x6c\x2d\xf8\x9d\x53\x9f\xa1\x10\x96\x1f\x82\x65\x42\x22\x7d\xf3\xf9\x75\x4c\x48\xe3\x38\x7b\xeb\x30\xd0\xd1\xf3\x42\x2b\x4b\x85\xc6\x2a\x08\xb3\x2a\x90\x3a\xf4\x85\x05\x06\x94\xb2\xec\xe8\xf0\xe4\xf0\x78\xc1\xfe\x78\xe8\x24\x90\x0c\x88\xd6\x86\xc4\xbd\x6a\x52\x46\xe4\x45\x36\xc3\x79\x1c\xa6\x3d\x26\x6c\x88\xb4\xd6\xa5\x0c\xb3\xf2\x49\x7f\x3d\x66\x14\xb3\x9a\x87\xea\x2a\xf4\xab\x7b\xc9\xea\xd2\x53\xf9\xa3\xc3\x9f\x0e\x7b\x0c\x6c\x72\xcc\xee\x95\x3c\xb4\x38\xfd\x01\xbb\x55\x4e\x94\xae\x3b\x9a\xa9\x92\x49\xa0\xc0\x7e\x78\x28\x32\x91\x08\x9b\xcd\x90\x62\x31\x55\x5a\xca\x21\xe6\x36\x24\x1b\xbe\x7a\x10\xd6\xc7\xab\x39\x92\xf1\x02\xa1\x49\x54\x8b\x71\x27\xe6\x4c\xe1\x64\x02\x3c\xb3\x13\x0a\x12\x91\x4a\xf6\xff\x05\x5a\x61\x0e\xa2\xf4\x4f\x3e\xb9\xaa\x7f\x9d\x68\x0e\x8e\x88\x7e\x05\xdd\x5d\xe2\xf3\xd7\xdb\xdb\xeb\xaf\xc0\xce\x91\x0c\x37\x4a\x08\xdd\x41\x6b\x00\xe8\x91\xd2\xf9\x13\xa0\x1d\xdd\x38\x2b\xfb\xac\x50\xfa\x29\x90\xb0\x89\x32\x7b\xed\x25\x5b\xd8\x4f\x65\x2c\x6a\x43\x5e\x1a\x93\x90\xb8\x1d\x6c\xc7\x90\x84\x7b\x6e\x2e\xaf\x07\xec\xbf\x55\xe9\x56\x33\xe4\xc3\x6c\x56\x55\x62\x30\x60\xd9\x81\xeb\xea\xc0\x91\x27\x87\x0d\x7f\x05\x9e\x3a\x15\xc5\x51\x0f\xe0\x4f\xe3\x3e\x2b\xe6\xcf\x83\x9f\x5b\xb7\x7c\xa0\x34\x56\xe5\x6c\xe2\x97\xdd\x4e\xbd\xf4\x27\x63\x80\xa7\x27\xe4\x35\x69\x28\x88\xc2\xf9\x6f\x3e\x39\xfa\xb5\x40\x37\x08\xee\xfe\xf7\x21\x96\xb1\x4a\x9a\x60\xf3\x17\x3a\x51\x62\x90\x24\x60\x39\x54\x83\xdd\x5c\x25\xcd\xf6\x84\x6b\x8f\xee\x9c\xc8\x39\xdf\x11\x3a\xf5\xf6\x8f\xf5\xea\xb4\xf2\x68\x37\x71\x03\x6c\x99\x91\xd5\xe3\x0c\x59\x5f\xc8\x9e\x83\xe6\x98\xe0\x43\x4d\xb8\x54\x52\x24\x3c\x13\xff\x82\x94\x95\x85\x92\x3e\x7e\x0e\xe5\x9c\x84\x1b\xe8\xa3\x53\x57\x5a\x5f\x33\xad\xce\x56\x74\xc7\xd1\x2a\x85\xc2\x07\xba\xf1\x1c\x7d\xa4\xf1\x9e\x6e\x81\xcd\x0f\x01\xe6\x6e\x50\x8c\x75\x09\x81\xa2\x83\x00\xf2\xc5\xf0\x71\xab\x9c\xb6\x8b\x09\x9e\x44\xc2\x91\x18\x19\xd0\xd3\xfd\x51\xa0\xbb\xa5\xab\xdd\xed\x0a\xa1\x2d\xc9\xc6\xd6\x4c\x96\xf9\x10\x74\x9d\xff\xa2\xed\x22\x40\x1a\xf1\x0f\x57\xf4\x7a\x30\x1a\xb7\x2f\x69\x74\x5f\xfe\xfe\x77\xbf\xfb\xcd\xef\x06\xd4\x7d\x15\x0b\x21\xd9\xe5\xd9\xd5\xd9\xdf\x6f\xbe\x3d\xc7\x14\xdc\x7d\xa1\xda\x51\xa0\x67\xd7\x61\x9e\x9d\x06\x79\xbe\xd7\x10\x4f\x4c\x2c\xd9\x9b\x8a\xb4\x3d\x0c\xd8\xa5\xc3\x00\xa7\x1d\x3a\xbd\xd6\x4b\x98\x8d\x92\x68\x4e\xa2\x6d\x9b\x6b\xdd\x51\x7b\x12\x67\xcc\x26\xc5\x8d\x4a\xee\x3a\xd4\x9e\x2e\xa0\xd0\x90\x90\x35\xee\xf6\xfc\x9a\x7a\x77\x5a\xec\xd5\xdb\xdb\x3a\xa1\x01\xa3\x7e\xd8\xeb\x60\xc5\xfa\xab\xb7\xd7\x39\xcd\xf7\x0e\x0a\x5b\x19\x08\x86\x3c\xb9\xbb\xe7\x3a\x45\xfb\x19\xb7\x62\x28\x32\x41\x25\x86\xc3\xd5\x93\x52\x51\x58\x21\x95\x52\x53\xa3\xf9\x02\x9e\xb5\xd1\x15\x0d\x63\xc4\x02\x47\x5c\x64\x68\xa7\x2d\xa5\x15\x39\xf8\xb8\xa3\xa4\xa8\x0c\x87\x4d\xcb\x79\x54\xf1\x42\x7b\xb2\x2a\xde\xe1\xdb\xe0\x3b\xdc\x5a\xdb\xdb\x37\xfa\xf1\x09\xb3\x3a\xcf\xe2\x28\xed\x24\xb2\xba\x9f\x05\xab\x2b\x34\xdc\x58\x55\x74\xe4\x8b\xa1\xce\x56\x78\x62\x86\x30\x52\x8e\x08\xaf\x74\xad\x84\x9b\x88\x25\xa6\x20\x06\xdb\x99\x6a\xb9\x4f\x28\xee\xd3\x94\xc9\x24\x98\x41\x25\x18\x73\x82\x4e\x97\xb2\x20\xdd\x18\xc9\x75\xa9\xa1\xe7\x56\x07\x39\xce\xae\x57\xe7\x52\xb8\xe1\x41\xd2\x8f\x60\x13\xb2\x0f\x37\x08\x39\x96\x1f\xf5\xd3\x9f\x77\xd6\x24\x9a\x9b\x09\x60\x11\x13\x78\x10\xe1\xce\x95\x6b\x95\x1e\x1e\xd6\x4b\x71\x8c\x65\xac\x79\x02\xac\x00\x2d\x94\x63\x46\xa5\xb4\xa9\xba\x97\x6c\x08\x63\x21\x4d\x00\x85\xeb\x3b\xc0\x0c\xbd\x3e\xc2\x54\xe5\xe7\x06\xec\x5d\xab\xa4\x8a\x4f\x76\x4a\x54\x7d\x34\xfd\x9c\xe7\xfd\x55\xc8\xb1\x1a\x17\x33\x57\x10\x0e\x41\xb8\x76\x83\x29\x1f\x95\x12\x47\x4e\x21\xe3\x33\x8a\x69\x1d\x09\x89\x9a\xa3\x36\xc7\x1d\xf8\xb5\x1c\x08\xeb\x67\x2b\xe7\x81\x17\x02\xf0\x64\xb2\x9f\x8b\x39\x3a\xc2\x36\x6c\xd1\x11\xb6\x4f\x27\xd1\x11\x16\x1d\x61\x8f\xb4\xe8\x08\x8b\x8e\xb0\xb9\xf6\x64\xb5\xa4\xe8\x08\xdb\xb9\x45\x47\xd8\xfa\x16\x1d\x61\x1b\xb4\xe8\x08\xdb\xb0\x45\x47\xd8\xea\x16\x1d\x61\xfb\x4d\x26\x3a\xc2\xa2\x23\xcc\xb7\x9f\x9f\x75\x30\xb4\xe8\x08\x5b\xe8\x24\x3a\xc2\xa2\x23\x6c\xe3\xf6\x64\x55\xbc\xe8\x08\xa3\x16\x1d\x61\xed\xf6\xf3\x62\x75\xc1\x8d\x74\xed\x14\xca\xfd\xf3\xf3\xae\xd1\x75\x21\x12\xef\x8d\x6a\x5e\x80\x57\x0d\xd5\xb8\xf3\xae\x51\xe2\x24\xa4\x15\x79\xbf\x53\xed\xcd\x5a\x9a\xfb\xb5\xad\x43\x24\x24\x4c\x9a\x93\x42\xd1\xff\xd5\xee\x90\x86\x1f\x84\xd4\xea\xdd\xf3\xef\x3e\x5a\x66\xd9\x3e\xce\x8f\x0f\xe3\xf8\x78\x22\x5e\xa2\x0e\x9c\x1d\xd1\xd1\xf1\xc9\x39\x3a\x3e\x9d\x1b\x80\xbd\xff\xff\x76\xa2\xc1\x4c\x54\xb6\x33\xa2\xb7\x90\xfc\x8d\x90\x22\x2f\x73\x87\x73\xc6\xe1\xb3\x98\x56\x81\x06\xa6\x42\x57\xa2\xd8\x64\xab\x74\x2f\x8a\x14\xb0\x70\x2b\x17\x99\xdb\x46\xcc\x45\x9d\xf0\xa9\xc3\x75\x53\x26\x09\x00\x5e\x0b\xd7\xd4\x70\x7e\x33\xa8\x46\xaa\xae\x01\x79\xb9\x1f\xbd\xd9\x8f\x89\x53\x69\x55\xec\xe5\x37\xbf\xde\xa9\x8f\xb1\x2e\xba\xa1\xcb\x5f\xbd\xbb\x3e\x6f\x5e\xf9\x2d\x03\x59\x16\x72\xaa\x32\x84\x2a\xa7\x97\x9c\xb0\xf6\x11\x89\xf4\xfe\x6a\xc7\x5e\x2a\x47\x17\x3c\x62\x5f\xa9\xba\x6d\x37\x73\xb2\x73\xdb\x72\x34\xc6\xbd\xa4\x0a\xfe\x1b\xcb\xce\x7b\x53\xb7\xfd\xe5\xd9\xfd\x8f\x03\xc3\x12\x3b\xb8\xf0\xce\x00\x7c\xe0\xaf\x9c\x0e\x2c\xb8\xa9\xb8\x84\x5b\xad\xac\x62\x45\xc6\xeb\x7b\xa9\x70\x07\xfe\x8a\x7c\xe3\x7c\x02\xc9\xdd\x3b\xef\xa3\x3d\x32\x00\x95\x3c\x39\x16\x76\x52\x0e\x07\x89\xca\x4f\xdc\x31\xa6\xff\x1b\x66\x6a\x78\x92\x73\x63\x41\x3b\x11\xd3\xb3\xa5\x7e\xe2\x7a\x11\x72\x3c\xc8\xd3\xe3\x01\xfb\x5e\x52\x76\x7d\x7d\x0f\x66\xa3\xb6\x84\x1b\x3f\xd4\xf9\x18\x82\xa3\x88\x4a\x37\xaf\x2f\x1f\xce\x70\x7a\x83\x7d\x0a\x35\xef\xcd\x46\xf6\xf4\x8f\x7f\x78\xdf\x78\xa4\x5c\xac\x03\x23\xc9\x73\xf3\x81\x77\x16\x0b\xd2\x81\xef\xfb\x09\xf9\xbd\x9f\x8c\x38\xfb\x54\x7c\xdd\x4f\xb0\xda\x75\x07\xfe\xed\x2e\x7c\xdb\xdd\xf9\xb5\xdf\x43\x51\xe8\xe7\xec\xcf\xee\xd0\xe8\xd7\x91\x1f\xfb\x43\xf8\xb0\x3b\x59\xf5\xbe\xbe\xeb\x0f\xe7\xb7\xee\x66\xb9\x5d\xaa\x1b\xcf\xd5\x57\xdd\x81\xf1\xbe\x4b\xc3\x7d\x67\x46\xfb\xf7\xe6\x9b\xde\xdf\x2f\xfd\x04\x7c\xd2\x7b\x03\x59\x48\x61\x05\xcf\x2e\x20\xe3\xb3\x1b\x48\x94\x4c\x77\xe6\x63\x73\xb5\x48\xab\xf3\x63\xa8\x5b\x6f\xc1\x6a\x27\x7a\x4c\xb8\x2f\xb9\xee\xf4\x36\x4a\x6c\x09\x5e\x0e\x2f\xb6\xa0\xbf\x99\x66\xf9\x24\xfd\x16\xec\xc9\x98\xca\x28\xeb\xa5\xcb\x4d\xfc\xab\xba\x67\x6a\x64\x41\xb2\x23\x21\xc3\x3e\x1e\x37\x94\xcd\xda\x6e\x59\xa1\xb5\x7b\xfa\xf2\x45\x78\xf9\xd3\x33\x48\xa2\xe9\xd5\x98\xf7\x6f\x1f\xf6\x03\x3d\x6e\x20\xf6\x2f\x8e\xca\xac\x6d\x24\x26\xc3\x71\x9b\xde\xbc\xac\x8b\x46\xbf\xc4\x7e\xab\xd3\xc6\x65\xca\x7c\x26\xdc\xa7\xb7\x69\x7b\x47\xdc\xb4\x45\xbf\x2a\xc2\xe6\x31\x7b\xf2\xed\xf9\x75\x34\x27\x3f\x2d\xa3\xcc\x47\x8a\x5a\x79\x82\x82\xee\x33\x8d\x54\x89\x82\xee\x16\xad\x91\x1b\xfb\x95\xe6\x09\x5c\x77\x2e\x23\x84\xe3\xc4\xd2\x52\x73\x4f\x00\x2b\x91\x2f\x1c\x1e\x09\x90\xd2\x69\xaa\xf2\x89\x31\x53\x77\x54\x66\xd9\x8c\x6c\x0e\xad\xec\x6b\xf2\xc2\xcf\x27\xf3\xa2\xe1\x7f\xc9\x28\xb5\x60\x59\x68\xe5\x79\xa6\x2e\xa5\x74\x34\xb8\xbe\xf9\x0d\x05\x49\x2c\x46\xcd\x5b\x29\xc3\x46\x8c\xdd\xf4\x1d\xff\xc3\x6c\xe2\x3a\x34\xb1\xd5\xa1\xfb\x7a\xa4\x74\x22\x86\xd9\x8c\x4d\x78\x56\x5d\xf3\xc3\xd9\x9d\xc8\x32\xdf\xcd\x80\xdd\x80\x25\xc7\x05\xf1\xce\x4c\xc9\x31\x4e\x8e\xcb\x70\xbd\x24\x24\xee\xdb\x24\x03\x2e\xcb\x82\xc6\x73\x9c\x78\xa6\x4a\x1d\xc6\x1b\x54\xee\x8f\x8a\x03\x4b\x91\xf5\x1a\x97\xd8\xad\xdd\xd8\xda\x44\x63\x9c\x00\xf0\x36\x14\xdf\xee\x35\xfb\x0c\xf5\xd1\x4d\xe3\x0a\xa3\x42\xab\xa9\x48\xc9\x87\x12\xc0\x86\xd7\x65\xd3\x35\x45\xd5\x79\x96\x4a\xf6\x25\x8c\x39\x0a\x2a\xfe\x14\xd1\x9e\x51\x3f\x14\x5b\x20\x53\xbc\xb8\xc8\x49\xf8\xaa\x68\xa5\xf3\x4f\x05\x5d\xb9\xdc\x80\x1c\x3b\x92\x8a\x29\x8c\x54\x2d\xa5\xb0\x74\x8d\xff\xa4\xb4\x2c\x55\xf7\xf2\xd8\xdb\xac\x84\x61\x9c\x0d\xc1\xf2\x46\xac\xa9\x67\x70\x86\x81\xe4\xc3\xcc\xed\x39\x86\x62\xdd\x2e\x05\x10\x1b\x01\xb7\xa5\x06\x36\xe6\x16\x96\xca\x39\xb4\xde\xf5\xe0\x15\xc6\x1b\x58\x47\xac\x94\x06\xf6\x64\xef\x9d\x09\x47\xbf\xff\xed\x6e\x34\x42\xe4\xa0\x4a\xfb\x41\xb4\xbf\xfb\x89\x48\x26\x4d\x61\x56\xe4\x60\x98\x2a\xe7\xd4\xe2\x97\xfe\xb3\xe5\x3b\x14\x55\xc0\x65\x6d\x57\xf3\xf1\x12\xeb\xd7\x7c\x39\x86\xfa\x7e\x6f\x8c\x20\xbf\xb8\xba\xf9\xfb\xeb\xb3\xff\x7a\xf5\x7a\xc0\x5e\xf1\x64\xd2\xac\xc9\x21\x19\x47\xa2\x81\x84\x62\xc2\xa7\xc0\x38\x2b\xa5\xf8\x67\xe9\xdd\xca\x47\xd5\xb7\xc7\x9d\x56\xa4\xdf\x91\xfb\x3a\x6a\xb3\x13\xc6\x2f\xbd\xf4\x0e\x7b\xf3\x11\x5b\xca\x00\x5e\x53\xb3\x20\x3e\x55\xbe\xec\x19\xa9\x08\x28\x70\x61\x60\xfd\xc5\xdb\x57\x37\x18\xb0\x5f\x68\xaa\x54\x82\x11\x5e\xf8\x1c\x7b\x1a\x82\xfb\xc2\xdf\x4f\x3c\x60\x67\x72\x46\x0f\xe9\x4c\x09\xc3\x32\x61\x2c\x20\xd7\xf3\x62\x5b\xf0\x92\x1f\xbc\x18\xe0\xff\x0e\x18\x4f\x53\xed\xe4\xba\x2a\x70\x2d\x59\x88\x24\x25\xc9\x4f\x0c\xb3\xc6\x02\x24\x58\x8a\x53\x7b\xa3\x52\x3f\x73\xe4\x24\xe8\x21\x23\x36\x68\xac\xe6\x16\xc6\x22\x61\x39\xe8\x31\xb0\x82\xdb\x64\xc2\x72\x3e\x63\x89\xd2\xba\x2c\xe8\x36\x83\x94\x5b\x3e\x60\x5f\x2a\xcd\xf2\x70\x88\x1d\xce\x3b\x3e\x7c\xb3\x3c\x72\xa0\x3e\xd9\xcd\x7f\x0a\x63\x4a\x30\x27\x2f\x5f\xfc\xe1\xd7\xbf\xfb\xdd\x27\x75\x01\x5e\x15\xda\x8b\x71\x2f\x8d\x0b\xf0\x78\xd8\x05\xda\x75\xba\x10\x51\xc8\x71\xd6\xc4\xaf\xdd\x18\xc0\xbe\x5a\xe6\xbe\x3a\x66\xbf\x5e\xc1\xf5\xae\xaa\x66\x27\x17\xf1\xd5\x73\xe8\xe8\xfa\xaa\x9a\x0f\x06\xc5\xca\xd3\x06\xd5\xbc\x91\xf8\xf2\x3a\x1c\x4c\x2f\xe7\xe4\x73\xd7\xd8\x16\x75\x0c\x54\x8f\xbd\x60\x7f\x62\x0f\xec\x4f\xa8\x68\xfd\x7e\xdf\xcb\xbe\xf6\x55\x81\xba\x08\x69\x72\xfa\xfd\xe5\x75\x47\x10\xff\x9b\x23\x9a\xae\x47\x07\x55\xab\xd8\x50\x78\xc1\x1e\x1e\x2c\x68\x27\x68\xfa\x9d\xf8\xa8\xd7\xa4\xb9\x09\x7e\x40\x34\x23\xc7\xc3\xe5\xa8\x1d\x46\xb5\x1d\xa2\xb9\xcf\xff\xaa\x8c\xbd\xf2\x54\xa8\x7d\xe1\x4f\xdd\x5b\x8e\x84\xbf\x45\xc6\x1c\xdf\x30\xb6\x3e\x60\x86\xa5\x0a\xa3\xba\x28\xc4\x79\x22\xf6\x08\xd6\x78\x3a\x68\xbc\x9f\xff\xbe\xb5\x9f\xeb\x76\x6a\xce\x94\x82\x3a\x90\x17\xb1\x1a\x35\xba\x0a\x95\x7a\xe9\xcc\x4d\x2b\x6d\xf0\x8c\x35\xe2\x99\xb7\xda\x54\xf6\x66\xc4\x25\x77\x9e\x12\x2e\x29\xc9\x64\x04\x5a\x53\x54\xfa\x70\x16\x82\x03\xf7\xde\xbc\xbd\x4e\x52\xa1\x95\x55\x89\xda\xe3\x26\xb7\xb6\xb7\xdb\x77\x87\x40\x28\x08\x77\x3d\xe4\xbf\xb9\xb8\xee\xb1\xdb\xf3\x6b\xbc\xdd\xea\xe6\xfc\xf6\xba\xad\xb3\x1c\xdc\x9e\x5f\x1f\x7c\x54\x50\xb0\x20\xf0\xa1\x89\x7a\x87\x4e\x5a\x26\x28\x27\x4d\xf6\x73\x5e\xf4\xef\x60\xb6\x23\x4f\xed\x82\xaf\xf7\xab\x1d\xee\x64\x41\x04\xe6\x9c\x17\x5b\xf7\xa6\x81\xa7\xe2\x03\x65\x7a\x85\xb0\xdb\x6a\xcc\xe5\x29\x5f\xb9\x9a\x42\x4a\x52\x7a\xf8\x02\x64\x5a\x28\xe1\xe4\xc5\x98\x07\xb6\xfd\xd7\x31\x0f\x6c\xe3\x16\xf3\xc0\x62\x1e\xd8\x62\x7b\x32\x81\xb3\x31\x0f\xec\xd3\xf2\xe0\xc7\x3c\xb0\xed\xdb\x47\x77\xdc\xc7\x3c\xb0\xe5\x2d\xe6\x81\xc5\x3c\xb0\xcd\x5a\xcc\x03\xdb\xbe\x3d\xb9\x90\xa3\x98\x07\xb6\x55\x8b\x79\x60\x8b\x2d\xe6\x81\xad\x68\x31\x0f\x6c\x45\x8b\x79\x60\x8b\x2d\xe6\x81\x6d\xd7\x62\x1e\x58\xcc\x03\xfb\xa4\xc3\x63\x59\xcc\x03\xf3\x2d\xe6\x81\x7d\x12\x41\x80\x2c\xe6\x81\x6d\xd4\x62\x1e\x58\xcc\x03\xdb\xa5\xc5\x3c\xb0\x4f\xc5\x28\x13\xf3\xc0\x62\x1e\xd8\xcf\x47\xd0\x8d\x79\x60\x31\x0f\x2c\xe6\x81\xc5\x3c\xb0\xb5\xb3\x88\x79\x60\x9f\x82\x0a\xa8\xc1\x88\x7f\xc1\xb5\xca\x44\x32\xdb\x3b\x4a\xf1\x9d\xbf\xf8\xd8\xf8\x6e\x59\x81\xfd\x36\x42\xab\xf6\xc8\x3c\x79\x62\x09\x37\xef\x1a\x80\x6b\x26\xde\x54\x97\x3f\xbf\x07\x10\x3c\x89\xe4\x9b\xb0\xc0\xab\xdd\x3d\x29\xfd\x70\x01\x01\x81\x6f\x37\xbb\xc5\xde\x2a\x42\x73\x21\x1d\xc5\x83\x1f\x36\x33\x22\x2b\x4c\xb0\xaa\xa2\x60\x62\x25\x82\xf0\xa2\xc8\x04\x98\x01\xbb\xa9\x2e\xe0\x41\xea\x65\x4e\x59\x52\x94\x3d\x96\x43\xae\xf4\x6c\x0f\x6d\xa2\x03\x81\xb3\xb5\x6b\x1d\x81\xec\x1d\xf5\x19\xc0\xe0\x94\x88\xa2\xc8\x66\x24\x4c\xd5\xa9\xa4\x15\xd4\x44\x20\x2e\x29\x8a\x3b\x73\x51\x1e\xc2\xb6\xd4\xb0\x2b\x65\xdf\x79\x84\xff\x68\xb1\xf6\xab\xa2\xca\xb9\x55\xb9\x48\x76\x21\xd8\x44\x63\xf7\x8f\x29\x3f\x57\x79\x51\x5a\x68\x91\x6d\x02\x16\x49\x72\xc2\x34\x55\xb8\xfd\xa3\xc1\x13\x25\x47\x62\xec\x45\xf1\x13\xba\xd1\xbd\x5f\xad\xa7\xdf\xb8\x45\xfd\x19\x86\x82\x27\x19\x17\xbb\xfb\xed\xdb\xa1\x55\xe7\xd8\x17\x66\xe8\xd6\xc1\x55\x18\xa3\x5b\x41\xab\x57\x05\x2e\x09\x3a\x26\x83\xf0\x88\x3e\xee\x51\xa4\xaf\xd3\x3f\x50\xe8\x5c\xb2\xa1\xdf\xcb\x5a\x3c\x96\x8c\x67\xc5\x64\xbd\x80\xec\x26\x72\x31\x93\x3c\x17\x49\xc0\x98\xb3\x2c\x53\x09\x29\x44\x6d\x11\x39\xf4\x4d\xfd\xb9\x41\xf2\xbc\xb4\x7c\x98\xc1\x80\x5d\x52\x86\x90\x92\xd9\xcc\x61\x93\x01\x1b\x1c\x1f\x7e\xfb\x77\x8e\xc1\xda\x3f\x00\x63\xcf\xe0\x8b\xa5\xd2\x10\x6e\x08\x65\x43\x81\x74\xa7\x4c\x49\x60\x20\xad\x9e\xb9\xbd\xbb\x56\xe9\x8d\xdb\xbe\xd6\xdb\x7b\x27\x49\xed\x19\x73\xd1\x45\xbc\xc5\x9e\xb1\x16\xdd\x44\x48\xec\x1f\x1d\xb1\xe8\xe6\x6d\xe4\x2d\x36\x03\x1f\x5b\xbb\x5a\xa8\x74\xb0\xe4\x54\x06\xd1\xe0\x5a\xa5\x8e\xc1\x69\x68\x5e\x85\xe7\xf5\x43\x3c\x20\x39\xbf\x43\x15\x9b\xdb\x9a\xf3\xf1\x29\x17\x99\x3b\x42\x4b\xf2\xf1\xf7\x0b\x9c\xe8\x40\x34\xe8\x3a\x19\x8c\xed\x8b\x41\x5d\x26\x73\x31\xbc\xb9\x2b\x17\xbb\x55\x7f\x60\x0b\x8c\xf7\x35\xf6\xd5\x08\xc7\x72\x38\x91\xf3\x07\xd4\x59\x79\xae\x4a\x69\x29\xc3\x8b\xf8\x73\x45\xf4\x29\x68\xed\xc9\x71\x5e\xd6\x0d\xd9\xe1\x69\x48\x81\xb9\xee\x22\x9a\x9c\x5b\x0b\x5a\x9e\xb2\xff\x39\xfa\xfe\x57\x3f\xf5\x8f\xbf\x38\x3a\xfa\xee\x45\xff\x8f\x3f\xfc\xea\xe8\xfb\x01\xfe\xe3\xf3\xe3\x2f\x8e\x7f\x0a\x7f\xfc\xea\xf8\xf8\xe8\xe8\xbb\xaf\xdf\x7c\x75\x7b\xfd\xea\x07\x71\xfc\xd3\x77\xb2\xcc\xef\xe8\xaf\x9f\x8e\xbe\x83\x57\x3f\x6c\xd8\xc9\xf1\xf1\x17\xbf\xdc\x79\xca\x7b\xdb\xa8\xbb\xb3\x50\x77\x64\x9f\x7e\x2f\xd6\x69\x1f\xc7\xd9\xd1\x59\xf4\x31\xe8\x0b\xa7\xd1\x5b\x90\xd6\x9d\xc6\xc0\x25\x51\x11\xa9\xfa\x11\x86\xa9\x5c\x58\xa7\xc0\x39\xb1\x86\x37\x33\xcf\xe6\xd4\x13\x4f\x07\x30\xf7\x92\x63\x8a\x58\x23\x6b\xab\xa1\xd5\xa8\x60\x8a\x45\xf5\x48\x32\x91\x17\x19\xe4\x20\x2d\x9e\xe7\x7e\x90\x04\x51\x5f\x1c\xd4\x33\x49\x48\x62\x87\x87\x04\x20\xf5\x83\x45\xd2\xf1\x78\x8b\xa4\xe3\x53\x24\x1d\x7b\x1b\x2f\xe6\xe9\x46\xa3\x3b\xaf\x8c\x99\x60\xf7\x41\x8b\x46\x95\x65\xa2\x46\xe8\xd5\x98\x8a\xb4\xe4\x59\xb3\xae\x45\xa8\xb0\x30\x68\x2a\x4b\x39\x9f\x2d\xe8\x46\x42\x8a\x66\x41\x8c\x5e\xe5\x77\xc2\x17\xbd\x54\x50\x5b\xbb\x0f\xce\xb2\x7b\x3e\x33\x07\x54\x3b\x49\x2a\xd9\x9f\xeb\x80\x29\x1d\xbc\x55\x4d\xf1\x73\x49\xca\xcc\xc2\x62\xda\x29\x33\x5e\x98\x3d\x3c\x34\xd5\x9b\xc1\x9e\xe5\x67\x58\x47\x6d\x39\xb4\x40\x4f\x97\x0d\xda\x64\x1b\x86\xbc\x9e\x78\x65\x2e\x6d\xcf\x9b\x3c\x54\x58\x89\xc2\x3d\x1c\x29\xb7\x70\x2c\x73\x35\x1a\x41\x62\x4f\x7d\xee\xcf\x92\x6f\x28\xf6\xc5\x0a\x59\xf2\x2c\x9b\x35\xee\x3f\x55\x92\xc1\x83\xb0\xac\x94\x56\x64\x0e\x92\x4c\xc3\xb8\xcc\x78\x53\x1f\xf5\x23\x06\x27\x64\x3a\x60\x6f\xa5\x93\xc7\xd7\xbc\xec\x98\x45\x06\xd6\x41\x91\x63\x32\x6f\x1b\xfc\xe8\x02\x6c\x21\x64\xbd\xf4\x30\xdf\xca\x8d\xe5\xb1\xa3\xbe\x25\x3b\x15\xa3\x91\xeb\x05\x53\xf9\xa5\xd2\x39\x5f\x1c\xc1\xe7\x21\x53\x1c\x56\xb3\x12\x07\xd6\x64\x3b\x70\xfa\x43\xc2\xf5\x41\xd3\x1e\x70\x96\xd9\x89\x2a\xc7\x93\xa5\x50\x34\x16\x9d\x6e\x6e\xc2\x26\xb8\x47\xe7\x5f\x71\x7c\x47\x26\x40\x6c\x4e\x01\xe1\xd3\x3d\x17\x76\xd1\xfa\x4d\xb1\x13\x04\xa3\x10\xc2\x87\x5e\x4c\x48\x1b\x91\x8f\x12\x1e\xec\xdc\x28\x03\x76\x49\xf9\x2b\xbd\x55\x6f\x54\x93\x6c\x78\x0e\x83\xaf\x77\x71\x5d\xa2\x8a\x24\xc4\x42\x1d\xf4\x22\x97\xb3\x10\xd5\x84\x5e\x41\x0a\x38\xac\x02\xa6\xb2\x59\xbd\xbf\x3b\x19\x64\xf7\x22\x90\x06\x92\x52\x0b\x3b\x3b\x57\xd2\xc2\xc3\x4e\x91\x1d\x6d\x4a\x76\xd3\xee\xb0\x45\xcb\xc2\x60\x4c\x15\x94\x89\x3e\x57\xea\x6f\xa2\xca\x2c\xc5\xf2\x12\xa5\x44\xac\xa6\xba\x41\x60\x69\x7b\x90\xb2\xa0\xd6\x3b\x3f\x48\xf0\x23\x93\x7b\xfb\x9f\xa5\x98\xf2\x0c\xa4\x6d\x7c\x71\x8d\x9e\xd3\xe6\x47\x9b\xca\x2e\x96\x9b\xbb\x5a\x70\x81\x7e\xa1\xd2\x5a\x4e\x39\x09\x4b\xc2\x9f\xe0\xc1\x3e\x47\x63\x23\x52\xfc\x6b\x2d\xa6\x22\x83\x31\xbc\x32\x09\xcf\x50\x3e\xeb\x46\x24\x3e\x5b\xd1\x3b\x6e\xbc\x56\x99\x71\xbc\xc3\x89\xa4\x8e\x7b\x51\xe8\x01\x5a\xf4\xc6\x5c\x48\xaa\xd4\x57\x84\x8f\x0d\xc5\x30\x38\x29\xb7\xe0\xda\x6d\x70\x15\xab\x80\x44\x6d\xa8\x54\xe6\x6b\x30\xe0\xa9\xf2\xfd\xfb\x6a\x24\x52\xfd\x5d\xc2\xfd\xdf\x5d\x6f\x86\x8d\x32\x3e\xae\x89\x23\xd8\x85\x28\xa3\xba\xeb\x95\x0b\xc0\x02\x07\xa5\x23\xdd\x8e\xd6\xd6\x01\x1b\x4d\x7a\x70\xca\x5e\x1e\x23\x3a\x73\xc3\xaa\x3e\x52\xf6\xeb\x63\xa4\x02\xe7\x67\xd7\x7f\xbf\xf9\xef\x9b\xbf\x9f\x5d\xbc\xb9\xbc\x62\x57\xca\x02\xc9\xee\x0d\x46\x9a\x54\x86\x72\x37\xcb\xca\x8f\x31\x50\x66\x80\xb6\x22\xcc\xa2\x91\xa9\xba\x37\x3b\x7b\x73\x08\xfd\x1c\xf0\x80\xcb\xdd\xcc\xd5\xbc\xe0\x43\x91\x89\x7d\x24\xe5\x85\xcc\x96\x66\xa7\xc8\x6b\xd2\xf4\x24\xd5\xaa\x20\x20\x84\xe0\x9a\x86\xa1\xb7\xe5\xbe\x6f\x66\xe8\xe2\xfe\x8e\xda\x1d\x8e\x35\x97\xb6\x16\x3b\xea\x3d\xd3\x8e\x79\x63\x3d\xaa\x3d\xb7\xe3\xe3\x29\x30\x5d\x58\x3b\x79\xda\x5d\x7d\x95\xb3\x34\x85\xb4\x05\xfe\xbd\xa3\x18\x9f\x5a\x5e\xe4\x79\x58\x5c\xc3\x7d\xcf\xae\xdf\xde\x5c\xfe\x7f\x73\x78\x3c\x2b\xf6\x4b\xd0\xea\xa6\x56\x97\x56\x45\x67\xbb\xfb\xce\xd7\x82\x8a\xfb\xfb\x24\xf6\xb7\xe2\x96\xdd\xa4\x05\xbc\x2b\x65\xbb\xc8\x72\xdd\x3f\xcb\x55\x0a\x03\x76\x5d\xc5\x27\xb6\x9f\x36\xf5\x07\x0d\xcc\xbd\x22\xad\x40\x8d\xa9\x21\xa2\x59\x45\x75\x91\x5a\xd5\x22\x9b\x84\x7c\xc4\x33\xf3\xb1\xa9\xf1\x3e\xbc\xd1\xc9\x11\x6f\x54\x29\xbb\x89\xfb\xaf\x7a\x63\x29\x48\x65\xbd\x60\xed\x66\x89\x15\x38\xb5\x4a\x18\xd9\x18\x1b\x49\x60\x2d\xfe\x66\x28\x46\x32\xb0\x46\x61\x02\xb0\xaf\xab\x9e\x29\xbc\xa4\x34\x30\x2f\xa0\x7b\xd6\x58\x5b\x1d\x5d\xef\x1a\x78\x8a\x86\x83\x82\xdb\x09\xa9\x8a\x39\x37\x77\x90\xd2\x0f\x5e\x34\xab\x1c\xc0\xa8\xe3\x87\xa1\x6e\xdd\xbc\x83\xaf\x17\x45\x32\xca\x2c\x41\x2f\xb1\x53\x8d\x3f\xea\xae\xef\x71\x08\x1d\x50\xde\xca\x6c\xf6\x4e\x29\xfb\x65\x55\xd8\xab\x13\x0c\xf8\x9b\x97\x96\xdb\x0e\x78\x14\x27\x39\x8e\xdb\xc7\xdd\xc0\x43\xd5\xac\x29\x76\x51\xef\xf8\x73\x3f\x52\xba\x94\x67\xe6\x2b\xad\xca\x9d\x99\xd8\x82\xb0\xf9\xd5\xe5\x05\x92\xa2\xd2\x87\x48\x4b\xab\x67\x58\xcc\x70\xb1\x22\x7d\xa5\x18\x7c\xe3\x83\xbc\x9b\x67\xa2\x8e\xc7\x65\x6f\xf8\x8c\xf1\xcc\xa8\x00\x4b\xef\x9e\x9f\xd7\x42\xbd\x8a\xeb\x1e\x0f\x95\x9d\x2c\xe8\xb6\xee\x40\x2d\x7e\xd7\x6b\x44\x4c\xd7\x71\x4d\x42\x2e\x7c\x6e\xd1\xf7\x5b\x68\x48\x20\x05\x99\x7c\xec\x6d\xff\xd8\x81\xc6\x88\x3a\x57\x4a\xba\x83\xd9\x09\xf2\x5c\x56\x11\xe6\x1e\xa4\x4d\x54\x41\xe7\xbe\xd7\xfe\x38\x9a\x4e\xf1\x58\x96\x06\x4d\x4f\x23\x54\x1f\x69\x27\xbf\x2e\x87\x90\x39\xc8\x3b\x95\x14\xeb\x21\x73\x4b\xe6\x0c\x91\xf3\x31\x30\x6e\x2b\x4c\xb3\x8a\x81\x34\xa5\xf6\x9b\xd8\x34\x8f\xf9\xa1\xbe\xb9\xbc\x60\x2f\xd8\x91\x1b\xeb\x18\xf1\x67\xc4\x45\x86\xc1\xec\x68\x53\x9d\xd3\x51\x47\xa1\x0b\x9c\x12\x22\x2f\x53\x9a\x88\x44\x8f\x49\xc5\x4c\x99\x4c\xc2\x9c\x9c\xde\x1b\xd4\x66\x9f\x80\x89\x1e\xe4\xa7\x89\xeb\x1f\x97\x42\x7d\x63\x40\x77\x46\xa0\xbe\xd9\x81\x40\x35\xc5\x28\x87\x73\x6d\xe8\x11\x62\xe5\x60\x79\xca\x2d\xf7\x84\x2b\xbc\xf0\x64\xb7\xf4\xe7\x4d\xbe\x0c\xbc\x16\xb2\x7c\xa0\x84\xa7\xee\x4c\x2d\x37\xaf\xb0\x5b\x96\x04\xa8\xe3\xae\x53\x10\x71\x1a\xac\x29\x4d\xab\x79\x0b\x57\x7a\x2b\xc4\x44\xa4\x13\x9c\x82\xfa\xc0\x09\x27\x5c\xa6\x2a\x5f\x18\xcc\x09\x91\xd0\xba\xcb\x65\xc0\x22\xf6\xb5\xdb\x13\x31\x0a\x65\x30\x85\x3d\xaa\x9d\xcf\xdf\x5d\xe3\x7a\x73\xc0\x09\x18\x81\xdd\xb3\x8c\x0f\x21\xf3\x01\xa7\x14\xc6\xbe\x88\x81\x1f\x3b\x0b\x56\xab\xac\xbb\xb2\x1d\xef\x54\x06\x94\x56\x16\x00\xe1\xba\x7f\x16\x70\xc0\x4e\xba\x82\x03\x6a\x83\x2d\x38\xa0\x5e\xfb\x1c\xe0\x50\xee\xc1\xea\xd9\x3c\x1c\x9c\xdc\xd0\x86\x03\x32\xef\xa7\x0e\x07\x03\x49\xa2\xf2\xe2\x5a\x2b\xa7\x76\x76\xc6\x9b\x7c\xb7\xb5\xcf\x90\x0c\x1b\x4b\x42\xd0\x91\x17\xb4\x5f\xe6\xba\x91\x50\xca\x2d\x31\x89\x90\x55\xfa\xff\x34\x78\x16\x92\x9e\x79\x46\x16\x7a\x69\xb9\x17\xdd\x97\xfe\xc1\x73\x66\x07\x5d\xd4\x64\xd8\xc3\xd8\xd9\x09\x37\x52\x09\xcf\xf0\x36\x9b\xfd\x50\x8e\xcd\xa3\xdd\x7c\xc7\x8d\x34\x62\xf4\x51\xe2\x6f\x8d\x8c\x09\x8e\x86\x96\x60\xc2\x94\x2a\x85\x86\x2f\x9b\xa2\xb0\x6f\x29\xdd\x14\xdf\x0b\x19\xcc\x4e\xae\x08\x6e\xe5\xb4\xf5\xb5\x55\xbe\x26\xfb\x9b\xea\x8e\x1c\x37\x41\x90\x18\xcf\x50\x70\x3b\xe9\x31\x0d\x19\xe5\x3e\x7b\x22\x70\x47\x1a\xe4\x21\x1e\x89\xd0\x69\x38\x0f\x61\xe8\x90\x60\x51\xf7\x8c\xd2\xd3\x88\x28\xad\x30\xec\xe0\x75\x58\xfb\x81\x7f\xe7\xea\xed\x6d\x33\x78\x88\xcb\x19\x45\x10\x52\x04\xce\xc7\x26\xbc\x9d\x32\xa0\x03\x82\x42\xb5\xd9\x64\x08\xbd\x13\x32\xf5\x59\xc4\x2d\x58\x56\x97\xd6\x91\x98\x8c\xf9\xe9\x22\x6d\x92\x9e\x53\xf6\xbd\x64\x15\x40\x59\x7f\x67\xec\x79\x47\x12\x75\x30\xe1\xf5\xd7\xdb\x65\xab\x41\xe6\xbb\xf9\x46\x22\x6a\xb8\x71\xfb\x4e\xb1\x5f\x7c\x2f\xac\xe5\xa3\xd6\x2d\xf6\xc4\xb1\x6b\x25\xe7\x6f\xd4\x6d\x90\xf8\x13\x87\xd2\x56\xc8\xb1\x69\x2a\x3a\x3c\xcb\x5a\xb6\xf2\x65\x9a\x4e\xd8\xe1\xea\x8a\xc2\x45\x0d\x63\xae\xfa\xc1\x73\xd1\x52\x32\x27\x6d\x3c\x73\x1d\x65\x9c\x1b\x7e\xae\x1d\x24\xac\xe0\xd9\x4d\xb1\xfb\x9d\x2a\x6c\xa1\x7e\xff\x9b\x9b\xb3\x76\xd7\xc8\xcb\x7d\xea\x0d\xe0\x73\xc6\xd3\x5c\x18\x83\x76\x32\x18\x4e\x94\xba\x63\x47\x6b\xaf\x96\xec\x1b\x31\x36\x27\x1e\xe7\xfb\x6e\xf6\xc7\x4c\xc8\xac\x0a\x9a\x42\x35\x59\xda\x2a\xdb\x07\x07\x49\xaa\x59\xe0\x1e\xfa\x8b\xb6\x7c\x2c\xc3\xe2\x34\xe9\x6a\x2d\x87\x05\x1f\x9d\x60\x2f\x6e\xcf\x7e\x19\xd3\x8f\x6e\xd1\x95\xc7\xed\xf9\xb2\xf2\x4b\xe1\x48\xc2\xe5\x47\x07\x92\x97\x3d\x12\x30\xdd\x55\xb3\xfe\x6b\xdd\x27\x4b\x81\xe2\x4f\x01\x83\xa3\xf8\xca\x18\x3c\x34\x5b\x1f\x62\x8d\x2a\xff\xe9\x61\x3b\xc6\x33\x73\xd0\xe4\x18\xb4\x6b\x9a\x0e\xdf\xfa\x92\xb7\xaa\x26\x2f\x45\xd5\x3a\x81\xa5\x39\x13\x22\x6f\x47\xf5\x95\x36\x21\xfc\xd8\xaa\x70\x49\x5c\x2e\x1e\xdc\x28\xcd\xaf\xe6\x42\x53\xa5\x92\xfd\xe5\x8f\x8f\x07\xec\x52\x56\x01\xfd\x3d\xb7\xda\xe6\x8b\x21\x82\xcb\x3a\x62\xd8\xbc\x60\x10\xe7\xdf\xb4\x3f\x39\x21\x4b\x97\x1d\x60\xc6\x3e\x56\x65\xd6\xb4\x2c\x77\x7a\x6c\xd0\xc2\xec\x3b\x75\x2c\x26\xf0\xca\x7d\x2c\xce\xee\x95\xf7\x65\x75\x7e\x1e\x7e\x04\xb6\x77\x74\x6e\x23\x6c\xb8\x83\xd0\xdc\x66\x10\xb2\x58\xf4\x5b\x5d\xab\x74\x31\x36\xd9\x17\x67\xad\x4a\x24\x34\x64\x21\xa9\xbc\x26\xd0\xa8\x92\xea\xef\xca\x4a\x7d\x08\xbc\x57\xd1\x29\xbc\xb9\xdd\x73\x5d\x5f\xaa\x71\x4d\x5c\xaf\x4e\x68\xad\x6e\x9a\xab\x22\xaa\xff\x81\x87\xb2\x8a\xe7\x0c\x65\x23\xaf\xab\xcf\x21\xe4\x3e\xf8\x3b\x23\x31\x57\xdd\xaa\x60\x01\xf0\xa1\xee\x3e\x6e\xd4\x29\x60\x5c\xf3\xdc\x91\x42\xc3\x3c\x08\x86\x30\x16\x14\x57\x58\xd1\xb5\xc3\x46\xb0\x7c\x8f\xc4\x26\x61\x59\x2e\xc6\x13\x42\x14\xc6\xb1\xc0\x16\x0b\xbe\xb9\x4c\xf1\x14\xef\x9a\xc6\xb4\x08\xae\x73\x47\x5f\x79\x32\x41\x47\x1f\x97\x2c\x2d\x35\x5e\x9f\x64\x81\xa7\xb3\xbe\xb1\xdc\x3a\x89\x12\xb4\xd7\xcb\xc2\xfc\xe3\x5d\x79\x6b\x5b\xbc\x2b\x6f\xc3\x16\xef\xca\x8b\x77\xe5\x2d\xb6\x27\x13\x64\x19\xef\xca\xfb\xb4\xaa\x1c\xc7\xbb\xf2\xb6\x6f\x1f\xbd\xb8\x71\xbc\x2b\x6f\x79\x8b\x77\xe5\xc5\xbb\xf2\x36\x6b\xf1\xae\xbc\xed\xdb\x93\x2b\xcb\x1e\xef\xca\xdb\xaa\xc5\xbb\xf2\x16\x5b\xbc\x2b\x6f\x45\x8b\x77\xe5\xad\x68\xf1\xae\xbc\xc5\x16\xef\xca\xdb\xae\xc5\xbb\xf2\xe2\x5d\x79\x9f\xf4\x15\x22\x2c\xde\x95\xe7\x5b\xbc\x2b\xef\x93\xb8\x28\x81\xc5\xbb\xf2\x36\x6a\xf1\xae\xbc\x78\x57\xde\x2e\x2d\xde\x95\xf7\xa9\x18\x65\xe2\x5d\x79\xf1\xae\xbc\x9f\x8f\xa0\x1b\xef\xca\x8b\x77\xe5\xc5\xbb\xf2\xe2\x5d\x79\x6b\x67\x11\xef\xca\xfb\x14\x54\x40\x63\x53\xb1\x53\x89\xcd\x4d\xaa\x01\xf9\x30\xee\x46\xf2\xfd\xb0\x1c\x8d\x40\x23\xe5\xc2\x91\x17\xc2\xaa\xea\xc2\x87\xf3\xae\x5c\xb0\x3d\x2c\x2c\xe4\x33\x5e\x56\x7c\xee\xb3\xfd\xb1\x14\xa6\x06\x83\xb5\x70\x24\x7b\xf5\xf6\xcb\x25\xa5\x87\x76\x8e\x37\xdc\x35\x7a\x1a\xe7\xfc\x56\xee\xe6\x85\x5f\x01\xf0\x65\x19\x58\x1e\xee\x49\xa6\x8c\x0f\x7d\x47\x60\x25\x13\x2e\x25\x04\x7d\x4f\x58\xb4\xa3\x0c\x01\x24\x53\x05\x78\x1f\x38\x67\x46\xc8\x71\x06\x8c\x5b\xcb\x93\xc9\xc0\x8d\x24\x03\xb0\xeb\x38\x75\xff\x8b\xb1\x1a\x78\x4e\x40\xd7\x90\x73\x41\x5d\x31\x9e\x68\x65\x0c\xcb\xcb\xcc\x8a\xa2\xea\x8c\x19\xc0\x94\x14\x62\x54\x15\x30\x30\x5e\xae\x0e\x6e\xef\xd5\xa3\xf9\x69\x29\x39\x5f\x09\xb9\x87\xf7\x0a\xe4\x85\x9d\x55\x11\xbe\xc0\x46\x42\x1b\xcb\x92\x4c\x20\xb7\xc6\x11\x29\x39\x19\xfb\xab\xea\x8b\x4b\x3f\x53\xe3\xa7\x2a\x53\x14\x5b\x0b\x6b\x28\x5e\xb6\xee\xd0\x77\x95\x0a\xe3\xc5\x7c\xd3\x63\x3c\x14\x26\x23\x40\x87\x99\x22\xa8\x03\x67\xa1\xde\xfd\x4f\x8d\xee\x9a\x05\x9a\xab\x80\xe2\x1a\xd1\xb1\xf2\x58\x40\xce\x5e\x2b\x1f\xa2\x16\x28\xfc\xf5\x39\x73\xc7\x00\x37\x40\xc2\xd4\xe1\x00\x24\xe0\xf8\x2b\x5f\x81\xf5\x1f\x1c\xe9\x1b\x4c\xf1\x0d\x18\xc3\xc7\x70\xbd\xa3\xa3\x61\x95\x46\x86\xbe\x86\x7a\x63\x10\x15\xb2\xd6\x15\x85\xcd\xb8\xcd\xb6\x18\xc4\x72\x9a\x53\x25\xfc\xdc\x6b\x61\x2d\xe0\xa6\x62\x09\x3b\xf4\x88\xce\x67\xb8\x1f\xce\x45\x7f\xbe\x09\x9d\xd4\x1f\x3b\xa2\x2e\x53\x8a\xc5\x1c\x02\x1b\x6a\x01\x23\x36\x12\x18\xe0\x89\x21\x97\x3d\xaa\x68\xc4\xc9\x0a\x60\x8c\xd3\x77\x95\x0c\xb2\x6c\x98\xd7\x80\xfd\xcd\x4f\xcc\xea\x52\x26\xbc\x51\x2c\x16\x73\x34\xc5\x88\x8d\x31\x64\xd3\x4b\x8b\xbf\x7d\xf1\xc7\xdf\xb3\xe1\xcc\xb1\x34\x94\xac\xac\xb2\x3c\xab\x16\x99\x81\x1c\x3b\x58\xd1\xf1\x6c\x67\x19\x56\x10\xc0\x5b\x81\x68\xe2\x2f\x7f\x7d\x37\x6c\xf3\xd8\x93\x14\xa6\x27\x0d\xf8\xf5\x33\x35\x5e\x76\x8f\xde\x07\x2f\x21\xbe\x04\xcd\xba\xb9\x15\x21\x94\xd6\x62\x13\x75\x4f\xb2\xfe\x12\xec\xa9\x13\x96\x0a\x55\x94\x19\x19\x9d\xbf\xac\xf2\x73\x4b\x03\x8b\x59\x74\x4b\xcf\x05\x9a\x49\x7d\x17\xf3\x85\xc9\x29\x52\x37\x0c\xa9\x7c\xd6\x89\x37\xe4\x55\x15\xb6\x50\x11\xfa\x92\x67\xd9\x90\x27\x77\xb7\xea\xb5\x1a\x9b\xb7\xf2\x95\xd6\x4a\xb7\xe7\x92\x71\x47\x2d\x27\xa5\xbc\xa3\x9b\x60\xaa\x1a\x04\x6a\xec\x5d\xb9\x21\xc5\x61\xd9\x82\x29\x21\x3d\x10\xe1\xc5\x8b\x11\xe0\x41\xd4\xba\x8e\x64\xe0\xc6\x27\x8c\x6c\xf6\x6f\x9a\xc8\xf6\xeb\x17\xbf\xfd\x03\xa1\x2e\x53\x9a\xfd\xe1\x05\x46\x73\x9b\x1e\x1d\x62\xa4\x6d\x8e\x51\xe4\x3c\xcb\x9c\xda\xd0\x44\x4a\x07\xe8\x65\x48\xf8\xc1\x71\xd0\xee\x8f\x6e\x1b\x8b\x52\xb7\xb7\xff\x4d\xf7\x68\x58\x03\xd9\xa8\x47\xf9\x4a\x95\x5a\x73\x88\x8c\xe1\xd0\x53\x1f\x4c\x1a\x7b\x02\x02\xd0\x54\x65\x65\x0e\x17\x30\x15\x5d\x5c\xf6\xd9\xea\x2d\xa8\xfa\x99\x30\x98\x1a\x36\xcc\x54\x72\xc7\x52\xff\xb0\x11\xdf\x32\x5f\x6a\xfb\xf9\xde\xdb\xdc\x5c\x7f\x2b\xb6\x27\xe7\x45\x51\x65\x0f\x69\x7e\xdf\x02\x06\x9e\x49\x4c\xf8\x7f\xfe\xf7\x36\xd3\x8a\x1c\xdd\xdc\xb9\x8b\x9d\x03\x82\xf6\xb7\x51\xd7\xb3\xef\xe8\x76\xce\xba\xc3\x70\x1a\x0a\xfc\x37\xe5\x9b\x2c\xe4\x4b\x56\x29\x77\x15\x62\x90\x00\xe0\xd0\x07\x49\xf2\x47\xbb\x5f\x98\xed\x1d\xd8\xd4\x82\x8b\x5c\x73\xc5\x25\x67\x05\x68\x23\x8c\xe3\xcb\xdf\xe2\x81\xa2\xbb\x4d\x6b\x13\xe0\xc7\x01\x02\x1d\x6e\xac\x4f\xbc\x3f\xa5\xbc\x56\xa9\xef\x10\x49\x21\xd5\x66\x5e\x22\xd6\xb6\xa5\xda\x0e\x19\xea\xc7\x26\x95\xdf\xd6\xd0\x6c\x53\x4a\xf7\x4b\x45\x2a\xe9\xad\x4f\x89\x40\xe2\xfa\x9e\x2b\x7d\xac\x26\xdf\x11\x19\x40\xc2\xe8\x37\xb7\x4d\x09\x5b\xca\x23\x1d\x94\x86\x48\xef\xf5\xc0\x01\x23\x2f\xb8\x3b\x13\xfe\x53\x76\x78\x7a\xf8\x51\x89\x24\x81\x48\xab\x82\x8f\xf7\xba\x2c\x67\x0e\x52\xf3\xdd\x36\x4b\x35\x38\x35\x08\x9f\x57\x75\xcd\xf0\x2d\x48\xeb\x4a\x34\x58\x67\x88\xbc\xa3\x01\xc0\xe1\x6e\x37\x94\x6d\xef\xf9\x8c\x71\xad\x4a\x99\x7a\xfb\x52\x65\xe0\x7b\x33\x37\xf0\x95\x92\x50\x5f\x22\xdc\xbe\x7e\x1b\x2d\xfa\x42\xb2\x97\x83\x97\x2f\x3e\x15\x4e\x85\x2b\x9c\xe3\x54\x57\x15\xa7\x22\xfa\xf4\x51\xd7\x1a\x4a\xca\x77\xb4\xde\x37\xde\xc4\x52\x57\x8c\x17\xa1\x1e\x35\xfe\x74\xaf\x85\x85\xc6\x5d\xa1\x47\xa8\xb8\x38\xfd\xb0\x51\xaf\xe1\x78\xd9\x55\x0d\x7b\x02\x69\xbf\x02\x19\xa6\x1c\xbe\x47\xba\xe5\x09\x14\x1e\xb7\x65\x16\x2e\xb3\x86\x84\x35\x01\x75\x70\xc0\x8e\xe8\xcd\x43\x4a\x75\x3e\xfe\xa8\xa8\xe5\x81\xf6\xea\xa1\xd8\xa3\x88\xe5\x5c\x56\x7d\xc1\xd1\x06\x57\x74\x08\xc1\xff\x82\x09\x9f\x02\xa6\x78\x8b\x8c\xeb\x0c\x7d\x8e\x37\x34\x77\x36\x2c\x2d\x03\x39\x15\x5a\xc9\x1c\xa4\x65\x18\x03\x3f\xcc\xa0\x79\x55\xfe\x2f\x8f\xbe\x3d\x7b\x87\x01\x0d\xc7\xbe\x58\x85\x9f\x65\x69\xc2\x25\x92\xcd\x99\x34\xba\x7b\x74\xfb\xc2\x3c\x1c\x0c\x91\xe6\x86\x79\xb9\x71\xf2\xd2\xd2\x4d\x91\xf0\x90\x64\xa5\x11\xd3\x8f\x45\x49\x7c\xee\xfd\x85\xd8\x69\x9f\xe7\xea\x00\xd4\x80\x5a\x48\xe9\x47\xd3\xfa\x92\x34\xc0\x05\x87\xc9\xa1\xa9\x52\x03\x9b\x3e\x70\x6f\x7a\xf2\x55\x36\x28\x7c\x2e\x94\x34\x5c\x10\x21\xb0\xa2\xcc\xc7\x35\x42\xa5\xd2\x9c\xe3\x0c\xb7\x03\x6b\x3b\x20\xb9\x95\x2d\x78\x71\x75\xd3\x2c\x4f\x42\xea\x92\x4a\x07\xec\xba\xfe\xb1\xae\x61\x83\x15\xc8\x2a\x25\x12\xf4\xb8\xae\xda\x3d\x06\x09\x1a\x85\x04\xd7\x65\xeb\xfe\x65\x36\xe4\x86\x9c\x3c\x17\x57\x37\x64\xb3\xdd\x0e\x66\x3b\x8b\xd9\xbb\x4b\xa8\x98\xd2\x82\x69\x0c\x3b\x08\xb7\xed\x4b\xc9\x2a\x83\x95\x03\x0c\x2a\xa5\xd4\x31\xbb\xbc\x66\x3c\x4d\x35\xba\x7d\xe6\x92\x6f\x9c\x7e\x1e\x7c\x0b\x58\x2f\x86\x1b\x68\xce\xa9\x01\x6e\x24\x71\x35\x60\xd9\x45\x59\x64\x82\xdc\x08\xcd\x0f\xea\x3a\x37\x78\x8b\xd6\xf6\x48\xbb\x8f\x9a\xb7\xb3\x92\xb7\x07\x15\x52\xbb\x96\x75\x5c\xb3\x7b\x1a\x8c\xca\xa6\x75\xc5\xde\xb9\x5d\xf3\x27\x02\x4d\xe2\xd5\xae\x85\x2a\x8e\x1b\xed\x18\x48\xab\x05\x2c\xee\x16\x7b\xe7\x46\x2e\xf1\x34\x55\x1d\x8a\x29\xa0\x7f\xdc\x17\xb0\xa4\x8f\x1a\x35\x84\xc9\x37\x4c\x65\x9c\x81\xeb\x40\xd1\x70\x56\x3b\x9e\x44\xf6\xb1\x10\x61\xde\xd8\x71\x71\x75\x43\x94\x90\x16\x5f\x5d\xff\xba\x6c\x97\x6a\xaa\xb6\x33\x06\x7e\xb4\xfa\x43\xfb\x68\x1e\x73\xb7\xe7\xf9\x6b\xff\xf7\x0a\x64\xd9\x43\xfc\xdb\x2b\xd9\x6e\x8f\xd1\x0d\x70\x9d\x4c\x76\x81\xff\x1a\x42\x40\x9d\xb2\x54\x51\x24\xc0\x48\x69\x54\x89\xfb\x48\xde\x33\xa5\xee\xca\x62\x13\x8a\xee\xbb\xa1\x1b\xcd\x36\x22\x10\xad\x2f\x7e\x56\x34\x3d\x95\x66\x17\x7f\x6f\x5b\xf6\x01\x4b\x12\x0f\xdd\x5e\x5e\x25\x50\xa8\x79\xbd\xe9\x3c\x2b\x8d\x05\xfd\xa5\xd0\x58\xa0\x9a\x2a\x2e\x23\x06\x93\x4d\xe4\xb0\xf9\xc2\xdf\x84\x9d\xf8\xa2\x8e\x87\xbd\xf6\x23\xf7\xb7\xef\xf8\xd0\xe9\xb4\x87\x57\x4a\xc2\xe1\x60\x5e\xec\xaa\x48\x79\x45\xd6\x56\xf2\x14\x3f\x75\x03\x19\xc5\x8b\xe2\x83\x06\xae\xdc\xfa\x7a\x96\x6e\x84\x40\xff\x0c\x58\xc6\xb1\x78\x1c\xbe\x3d\xa9\x0b\x50\x52\x45\x29\x2a\xa0\xa9\xbc\xa0\x37\x6b\x82\xa8\x51\x64\xca\xaa\xd5\xcb\xde\x45\x9e\xdb\x1a\x03\xe8\xb6\x3e\x5f\x95\xe4\xb5\x90\x77\x5b\xa2\x5f\x3b\xba\xe4\xd5\x42\x6f\xad\x8a\xdc\xe4\xa3\x15\x92\x82\xef\x1c\x8b\xe1\x43\x55\xda\x50\xf9\xc4\x34\x14\x47\x21\xff\x41\x7b\x81\xf6\xf6\x82\x6a\xf9\x2d\xd3\x11\x4d\x8f\x8c\x3e\x41\x09\x34\x33\x69\x39\x16\x1d\xbd\x50\xc9\x1d\x68\x96\xb9\x69\x0c\x58\x1d\xf8\xd2\xaa\x73\xa9\x4b\xd8\x32\xea\x62\x57\x4b\x07\x14\x13\xc8\x41\xf3\xac\xd2\xbe\xf6\x01\xf5\x6b\x4f\x38\xab\x5e\x9b\x31\x29\x54\x2e\xcd\x17\x68\x74\xe7\xf0\xd5\xb2\xb7\x72\x3e\x0b\xb5\x62\x85\xc4\x70\x83\x07\x61\xd0\xac\x5f\xa8\xb4\x99\x78\x56\x1a\xd0\xfd\x2a\x2d\xd0\xe7\xde\x98\x2a\x10\x27\x85\x61\x39\x1e\x0b\x39\xf6\xd4\x19\x69\x7a\xa3\x60\x75\xa5\xe9\x60\xa4\x77\xa2\x81\x5b\xca\xd8\x29\x54\x4a\xf1\x65\xa2\xf9\x7e\xae\x52\x7a\x7d\x38\x23\x6d\x30\xec\x6c\x1d\x20\x7d\x29\x99\xd2\xbe\x00\x03\x4f\x53\x9c\xfb\xe2\x0a\xf1\x69\x7b\x55\xbd\x2a\x8e\x83\x22\xbb\xab\xaf\x1a\x60\x31\xe5\xd0\x09\x3b\xa5\xde\xb6\x76\xe8\xae\x84\x7f\x27\xa2\xdf\xae\x2a\x74\x26\xeb\x2d\x3e\x6f\x06\xcc\x71\x66\x21\x2f\x94\xe6\x7a\x36\xef\xc2\x74\x44\xca\xa1\x80\x03\xe0\x1c\xa4\xae\x55\x8a\x74\x7c\xc9\xc6\x4f\xe9\xaa\xdc\x25\x7b\xbf\x14\xc7\x90\x0a\x4a\xc5\x02\x44\x1d\xbd\x36\xc9\x04\xd2\x12\xa3\xc7\xc7\x25\xc7\xab\xbc\xdd\x29\xf6\xc6\xee\x99\x0f\xcb\x23\x64\xa8\x02\xfe\xaa\x34\x81\x19\x06\xc9\x60\x7d\x4e\xf7\x0b\xd6\xf9\xa4\xd0\x40\xba\xc9\x18\x6f\x35\xad\xa2\x04\x6f\xeb\xcb\x15\x70\xb1\x30\x15\x89\x0d\x1f\x8d\x56\x21\x4e\xc2\xab\x0b\x54\xaf\x95\xaf\x0b\x98\x80\x23\x46\xd6\xd4\x4b\xf1\x51\x25\x58\xf9\xf3\x7b\xe9\x98\xc4\x6a\x5c\xac\x11\xef\x11\x94\x43\xb9\xba\xbd\x15\x6b\x8e\x6f\x05\xa5\x25\x6b\xdf\xb6\x24\xd3\x1e\x42\xf9\xee\x1e\xb7\x9d\x3c\x65\xfb\xc8\xff\x5c\x8f\xf7\xd7\x95\xfe\x7f\xf6\xfe\xc7\xb9\x6d\x1b\xeb\x17\xc6\xff\x15\x8c\xb7\x73\x6d\x6d\x25\x39\x69\x77\x77\x76\x73\xfb\xdd\x8e\xd7\x76\x5a\x4f\x13\x47\xd7\x76\xda\xdb\x6f\xd2\xa7\x0f\x44\x42\x12\x1e\x93\x00\x97\x00\x65\x6b\xdf\xbc\xff\xfb\x3b\x38\x07\x00\x41\x4a\x76\x6c\x92\xb1\x65\x97\xdc\x99\x6d\x2c\x51\x20\x78\x00\x9c\xdf\xe7\x73\x76\x0f\xf2\x79\x91\x42\x4a\x9a\xd5\x3c\x4b\x80\x65\xdc\x73\xe0\xd7\x32\x22\xeb\xf0\xed\x51\x58\xc2\x10\xe6\x66\xbb\x02\x10\xa3\x0a\xb5\xf4\x77\xd6\x1d\x9e\x27\xc6\x38\xf3\x5e\xd4\x92\xb7\x5a\x2b\xce\x7a\xf4\xfc\xd3\x9c\x15\xcb\x45\x66\xa4\x31\xe8\x10\x01\xf4\x48\xb4\xa0\x62\x0e\x6e\x70\x59\x98\xf1\xbe\xfa\x0a\x66\x94\xb3\xb8\x88\x6c\xe7\x05\x97\xff\xfc\x95\xf3\xfe\x59\xa0\x20\xe8\x0f\xa7\x22\x9a\xb9\x39\x87\xaf\x85\xa2\xfa\x15\xe1\x63\x36\x26\x3b\x5f\x05\x5f\xed\xe0\xd3\xb3\x5c\x9a\x47\xd8\xd4\x69\x98\x55\xc2\x35\x1c\x84\x9d\xf0\xee\x31\x39\x36\xcf\x80\x88\x88\x27\x60\x90\xdd\x3b\x2d\xc9\x37\x24\x39\x9b\xd3\x3c\x4e\xa0\xe2\x6e\xe6\x95\x12\xac\xcb\xb1\x04\x83\xd3\x07\xf9\x74\x42\xea\x4d\xde\xc9\x3b\x96\x45\x68\xaa\x2e\xd5\x3e\xaa\x32\xa3\x98\x6a\x3a\x82\x6e\x15\xc8\x34\xf6\xd1\xbc\x1e\x59\xfc\xd3\x11\xb5\x7b\x6a\xe4\x97\x75\xff\x4f\xb6\xb2\x6a\x44\xfd\x5d\x5c\x8c\xe8\x08\x90\x48\x9b\xe7\x8a\x3e\x42\x5a\x41\x2b\x4b\xb7\x05\x0c\x6e\x5d\x3d\xf5\x30\xe8\x40\x03\x68\xb6\x51\xc2\x5e\xfb\x0c\x06\x8b\xf4\x5a\x39\xc8\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\xe7\xb9\x3f\xcf\xfd\x79\x6e\x71\x9e\x99\x58\xb6\x3e\xcb\xde\xfe\xd9\x64\x12\xd6\x20\xec\x82\x8a\xea\x67\x94\x9c\x75\x2c\x96\x3f\x53\xa3\xf0\x65\x39\x53\xa0\x8b\x18\xbd\x71\x53\x14\xd5\xde\x80\xfd\xaa\x0e\x9f\x7c\x76\xd6\x23\xe6\x56\x75\x98\xb3\x72\x1a\x00\x01\x6c\x5a\xb5\xb0\x7f\xdc\xe1\xef\x27\x47\xc7\xa7\x17\x27\xaf\x4f\x8e\xcf\x1e\x35\xd9\xa0\x25\xb8\x5b\x55\x1a\x37\x94\x92\x59\xce\x96\x5c\x16\x2a\x59\x79\x14\xda\xcd\x4c\x60\x3d\x5f\x4d\xc4\xd0\x02\xcf\x01\xed\x6e\xfc\x59\x2f\x6c\xbb\x15\xb6\xd5\xdc\x8b\x16\xb8\x1e\x5d\x6d\xdf\xd7\xb9\x4c\x3b\xda\xc2\xe7\x68\xb2\x3b\x97\xf7\xa6\xfd\xb4\x6b\x21\x00\x2a\xa2\xc7\x2a\x8f\x25\xde\x80\xd1\x42\xd3\x4c\xb7\x68\x0b\xd0\x09\x68\x68\x37\xf8\x9a\x98\xa7\xf0\x96\x66\x3f\xb1\xd5\x19\x6b\x09\x1f\x52\x0b\x35\x24\x2c\x32\x82\x8e\x5c\xb2\x15\x46\x20\x0f\xdd\xc3\xda\x81\x60\x6e\x21\xe6\xea\x25\x6b\x83\x87\xdb\x25\x58\xea\x25\x6b\x91\xb8\xe8\xae\x35\x40\x4f\xb3\x84\xa0\xa7\x99\x35\xdd\x2a\x08\xd3\x2f\x00\x0e\xbb\x1b\x8a\x7b\xcb\x67\xf5\xbd\xd1\x15\xe4\xd2\x48\x2e\x76\xb5\x6f\x93\xb6\x46\xc6\x62\x1d\xe1\xae\x55\xfb\x90\x99\xb2\xff\x27\x04\x8e\xbd\x78\x77\xf4\xee\x15\x39\x88\x63\x9b\x3c\x5c\x28\x36\x2b\x12\x4c\x03\x56\x63\x42\x33\xfe\x33\xcb\x15\xf4\x55\xbb\xe4\x22\x1e\x92\x82\xc7\xdf\xb7\x01\x5d\xc2\xab\xc3\x55\x90\x2e\x60\xd3\xed\x4a\x9c\xdb\x78\x5c\x28\xbb\x3c\x13\x21\x58\x19\x08\x7b\xd3\xe1\xaf\x58\x25\xa3\x23\xd2\xb4\x6d\x21\x47\x70\x09\xbb\xe5\xab\xbb\x25\x63\xc5\x3c\x71\x0f\x50\x15\xbf\x22\xaa\x00\xa0\x18\xe5\xfb\xbe\x41\xc7\xd1\x61\xf5\x4f\x95\xd1\x88\x0d\xc9\x7f\xfb\x0f\xa1\xe1\xb9\xfa\xb0\xbb\xfb\xdd\x4f\xc7\xbf\xfe\x73\x77\xf7\xb7\xff\x0e\xbf\x05\x51\x08\x56\x73\xed\x16\x88\xef\x08\x19\xb3\x53\x78\x06\xfc\x69\xd5\xb5\x83\x28\x92\x85\xd0\xf6\x0b\xa8\xea\x1d\x2f\xa4\xd2\x27\x13\xff\x67\x26\xe3\xfa\x5f\xaa\x15\x92\xd8\x56\x0a\x06\x58\xa2\x16\xd5\x29\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\xfe\x18\xd1\x82\xa5\x88\x65\xf4\xda\x91\x00\x7a\xb8\x3a\xf8\x00\x01\x35\xd7\x46\x33\xad\xc2\xca\xed\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\x75\x56\x4a\x19\x8d\x3d\x98\x9c\x90\x25\x52\x78\x6b\x88\xe3\xa2\x60\xaf\xbf\x28\x8f\x0b\x63\x6d\x15\x0b\xf1\x15\x81\x62\x0a\xf7\xbd\xad\xb3\x57\x1e\xfa\x8a\x19\xc3\x66\x0f\x3f\x1c\x47\x59\x31\xb4\x37\x8c\x53\x96\xca\x7c\xe5\xff\xf4\x31\xbe\x91\xd2\x32\xa7\x73\xa8\xcb\xc0\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x54\xe4\x46\x69\x48\x56\x8e\x23\x37\xc4\x8b\x28\xaf\x2d\xe4\x6d\x8e\xf4\x5b\xc2\xda\xfc\xce\x68\xdb\xb0\x15\xaf\xea\x86\x2c\x03\xf5\xa0\x70\x7a\x2a\x82\x3d\x69\xeb\x4e\x87\x5e\x0d\x42\x6f\x80\x58\x1a\xcb\xb2\x31\x72\x56\x79\x75\xc8\xcd\x62\xbe\xe4\x4a\xb6\xa8\x3e\xf1\x03\xdd\x9c\x52\x6f\xa1\x2f\x30\x71\xc8\xbb\xcd\xae\x33\x00\x0b\xf2\xe7\xb5\xc6\xf6\x5f\xb6\xe9\x4a\x84\x57\x46\xb5\x66\xb9\x78\x45\xfe\x6b\xef\xe3\xd7\x9f\x46\x83\xef\xf7\xf6\x3e\xbc\x18\xfd\xe3\xb7\xaf\xf7\x3e\x8e\xe1\x1f\x7f\x1e\x7c\x3f\xf8\xe4\xfe\xf8\x7a\x30\xd8\xdb\xfb\xf0\xd3\xdb\x1f\x2e\x26\xc7\xbf\xf1\xc1\xa7\x0f\xa2\x48\x2f\xf1\xaf\x4f\x7b\x1f\xd8\xf1\x6f\x77\x1c\x64\x30\xf8\xfe\xab\xd6\x53\xef\x00\xbb\x13\xaf\x2e\x11\x3c\xab\x23\x76\xb2\xfd\xbe\x20\x6c\x3d\x5e\x6e\x7b\x75\x7d\xfe\x5d\xf6\xf0\xab\x52\x20\x79\x71\xbd\x35\x07\x5c\xb1\x28\x67\xfa\x21\x3c\x39\xf8\xa4\x00\x41\x60\x57\x11\x6f\x5a\x3c\x37\x39\xf7\x47\x70\xee\xf8\xb6\x76\xb0\xae\xa5\x26\x3a\xcb\x65\xea\xaa\xc2\x21\xbc\xb1\x84\x4c\x60\x7b\xdf\x25\x6b\xd5\x1c\x15\xaf\xde\x19\xd4\x3b\x83\x6e\xb8\x3e\xeb\x0c\x3a\xc7\x7d\xb8\xb5\x9e\x20\x26\x96\x4d\x43\x18\x1b\x23\xe8\xce\xd6\x09\x21\xd4\xee\x16\x50\x1b\xbb\xa3\x5e\xf6\x83\x2c\x53\x68\x50\xa0\xa5\x9b\x63\x98\xe4\x00\x7a\x35\xe3\xc1\x87\x01\xca\xb2\x0b\x34\x6d\x2c\xc2\x1f\x5b\x9a\x29\x78\x88\xe8\x0a\x18\x24\x24\x3a\x42\xea\xe9\x2f\x98\x09\x7a\x89\xc9\xa1\xc6\x48\xe3\xa2\x84\xd1\xf4\xca\x61\x89\xbd\x4c\x95\x92\x11\x26\xb5\xfa\x22\x00\x40\x76\xb3\xd3\x86\xd9\x40\x83\xf8\x2c\x67\x11\x8b\x99\x88\x98\xc5\x65\xae\xf4\xbe\xa4\x82\x1c\x8b\xa5\xc3\xa6\x8e\x5d\x49\x09\xcc\x64\xf3\x18\xcf\x2b\x01\xc1\x6c\x44\x1b\x04\x0b\xf2\x10\x80\xeb\x97\xd9\xac\x90\x8a\x21\x67\xa5\x97\xb5\x59\x7b\xbc\xd6\x52\xbc\xbd\xcc\xf4\x91\xad\x56\xca\xd0\x9a\xb0\x2c\xdd\xcf\x55\x21\xf9\x1c\x82\x81\xed\xc5\xe7\x1f\x4e\x74\x76\x24\x36\xbb\x11\x99\xf7\x88\x9d\x74\x29\x26\xbb\x08\x96\x64\x39\x9b\xf1\xeb\x8e\xce\xe9\x81\x28\x3d\x31\x3c\x66\x42\xf3\x19\xc7\x12\x93\x2c\x67\x19\x13\x58\x25\x40\xa3\x05\xf0\x7e\x2b\x29\xcb\xe0\xf4\x36\x26\xf3\xa0\xc2\xdd\x2d\x2b\x3b\xdf\xa4\xec\xf7\x7c\x8c\xf4\x7c\xac\xf1\xf5\x40\x7c\xcc\xee\xdc\xed\x61\x62\x90\x79\xde\x3e\xe7\xfd\xb0\x8a\xb5\x62\xbb\xd2\xde\x73\xa3\x95\x65\x47\xfb\x30\x4a\x23\x07\x74\xab\xfd\x00\x8f\x9d\x14\x49\xd2\x11\x3e\xf5\xee\x09\x50\x23\x2b\x92\xc4\x96\xe5\x8e\xc9\x3b\x01\x47\xf2\x00\xfa\x20\x0c\xc9\x29\x5b\xb2\x7c\x48\x4e\x66\xa7\x52\x4f\x50\xb7\xad\xa6\xb3\xe1\x8d\x84\xcf\xc8\x2b\x63\x35\x29\x4d\x34\x62\xd1\x07\xc8\x39\x32\xaf\x0c\x50\x82\x72\xb5\x48\x43\xbf\x79\x59\xfe\xe4\x0a\x26\x47\x8f\xb4\x4c\xbe\xd9\x47\x07\xe6\xa9\x1d\xc9\x25\xc8\x41\x52\xa4\x8d\x8e\x6c\xaa\x7a\x7d\x82\x40\x14\x99\x54\xfa\xdc\x58\xb1\xdd\x34\x82\x99\xb8\xe1\xa0\xb7\x02\x4d\x12\x16\x57\x3a\x01\x61\x07\x0b\x5a\xb5\xa2\xa1\x1e\xd7\x37\x54\x60\x64\x41\x45\x9c\xb0\x1c\x40\xd1\x55\x1d\xf9\x89\x97\x5d\x00\x7c\xdf\x06\x57\xa0\x49\xa3\x48\xe6\xb1\xed\xc0\x6a\x0b\x25\x61\x32\xfe\x78\x01\xaf\x4d\xa9\xa0\x73\x06\x9e\x85\x35\x68\x5d\x00\x5c\x56\x41\xf3\x87\x85\x94\x97\x24\x92\x69\x96\xc0\x01\x68\x71\x3e\xca\xde\x33\x7e\x8b\x8e\xcc\xe8\x6a\x3f\x68\x4b\x03\x1f\xb4\xeb\x4a\xd3\x4a\x59\xe9\x42\x55\x61\xd7\x2c\xea\xac\x6f\xdd\xf1\x35\x8b\x82\xc6\x8b\x66\x49\x6c\xe7\x45\x2d\xc1\xb7\xd1\xbe\x9f\x6e\x6b\xb7\x7c\x57\xae\xf0\x16\x55\x66\xe1\x55\x03\x5a\x83\x31\x1d\xae\xb4\x7d\x04\x40\xf4\x63\x55\x31\x54\x9e\x39\xa8\xe9\xca\x61\xc0\xa3\xb7\x86\xce\xe6\x93\x8d\xdd\x58\x50\xfb\x2c\xa5\x26\x7b\xbb\xfb\xbb\x83\x35\x1f\x5d\x0d\x9c\xf8\x22\xf8\x25\x07\x34\xbe\x0c\xa0\xed\x58\xb4\x1b\x0f\x09\xd7\x8e\xd9\x22\x28\x00\xcc\xca\x96\xc3\x41\x87\x7a\x9d\xd3\x98\x5b\x2b\x08\x3e\x35\x37\xe9\xbc\xb0\x88\x00\x7b\xbb\x9f\x76\x87\x84\xe9\x68\x40\xae\xa4\xd8\xd5\x30\x7d\x80\xcf\x28\x54\x30\xd0\x4a\x16\xd0\xa5\x0e\x49\xe0\xb1\x30\x0c\xc7\x22\xb2\xc0\x96\x36\x0b\xaa\x5d\x19\xde\xf1\x35\xd7\xae\x8d\x83\x9c\x91\x17\xd8\x51\x87\x51\xeb\x25\x4c\xf8\x92\xed\x2f\x18\x4d\xf4\x02\x13\x29\x84\x14\x23\x6c\x8a\x66\x58\x89\xfd\xa6\x6d\x4c\xa1\x9d\xcb\x2d\xbc\x5a\xb8\xdf\xd6\x27\xd4\x52\xbb\x36\x4c\xf4\x87\xe6\x9d\x5a\xc9\x5a\x13\xe3\x8b\x8b\xc9\x0f\x95\x5e\xad\xc0\xc5\xb5\xce\x5c\x7a\x4b\x80\x2b\xb1\x05\xbc\xa3\x9b\x80\x5e\xab\xa6\xad\xa4\x43\x16\xd6\xb6\x79\x2b\x59\x6f\x4a\x7d\xbf\xae\xad\xe4\x57\x59\x40\xb7\x39\x3a\x4d\x56\xe4\x8a\x0a\xed\x4a\xf1\x76\xcc\x50\x3b\x86\x3d\x99\xdd\xf0\x23\xa3\x31\xcb\x15\x70\x0f\x46\x1b\xe3\x67\xb9\xab\xb3\x40\x53\x30\xb7\x6e\xe5\x40\xa1\xb4\x4c\xc9\xc2\xbe\x76\xb5\x3c\xd1\x9e\x8c\x31\x9c\x1e\x57\xfb\x93\xb3\x0c\x39\x9c\xfd\xcd\xb3\xe3\x5f\x6b\x7c\x03\xe9\x5e\xc1\x99\x8f\x42\xb2\x85\xdd\x48\xb8\x40\x62\x61\x1f\xc1\x8e\x78\x69\x07\x09\x02\xa4\xc3\x24\x01\xd2\xae\xd8\xb1\x3e\x10\x04\xbe\xda\xe7\x43\x75\x96\x77\x40\x3a\x8b\xad\x93\x4d\x8e\x48\xbb\x67\x30\x0b\x16\x7d\x1e\x15\xe8\xb8\x88\x0a\x29\x78\x44\x13\xfe\x1f\x16\x63\x57\x5c\xcc\x31\x03\x3d\x27\xa2\x8a\x8d\x20\xf0\x29\x90\xff\x05\x6d\x5e\x85\x39\x8e\x5a\x4a\x50\x3e\x20\xd4\x65\xf8\x23\x3e\xaf\x7d\xe6\x02\xe9\x36\x6e\x4e\xda\x17\x6d\x86\xd7\xed\x64\xee\x66\x8b\x91\x2e\x29\x90\x75\x90\x64\xbd\x9e\x62\xbd\xd6\xb3\x1b\x98\x11\xa2\xc2\x6e\x8d\x2c\x6b\xdb\xc0\x9c\x6c\xae\x58\xce\x89\xf0\xfd\x66\x9f\x46\x13\x73\xd2\x5d\x32\x64\xd7\xa9\x90\x9d\x26\x42\x7e\xd1\x34\x48\x28\xbe\x68\xcd\x45\xaa\x5e\x78\x18\xd2\xec\x00\x63\x1d\x1a\xbb\xd6\x6a\x98\xd6\x87\xe4\x7a\x62\x54\x9d\xae\xe6\xa8\x6d\xc5\x19\xd3\x51\x76\x2e\xa3\xcb\x0e\xad\xa7\x23\x96\xe5\x2c\x42\x6f\xdc\xc5\xe1\x04\x47\x37\x56\xec\xe9\xbb\x8b\x32\xe9\x1f\x32\x63\x4a\xf7\xe8\x8f\xd6\x5f\x67\x2c\xdf\x4b\x96\x69\xef\x20\x98\xd2\xe8\xf2\x8a\xe6\x31\xf8\xcf\xa8\xe6\x53\x9e\x70\xbd\x02\x17\x40\xce\xa0\xa2\x40\x48\x4c\xbd\x43\x28\x46\xe9\x1a\xaa\xfa\x6e\xdf\xde\x53\x06\x7e\x38\x2b\x02\x67\x94\x1b\xab\xdf\x77\xcd\xc5\xdc\x9c\x28\xf3\x8e\xc3\xd0\xff\xdd\x9b\x78\xee\xda\x5a\x13\x2f\xe8\x08\x7b\x5f\x6b\xaf\x6d\x86\xe0\x16\x8b\x3a\x2b\xe2\x72\xdf\xf0\xac\x17\x75\x1d\x8d\xb7\xbd\xa2\x2e\xcb\xd9\xb9\x96\x59\x47\xb1\x18\x1c\xec\x86\x48\xcc\x94\xcd\xa4\x61\xc2\x37\x86\x56\xe2\x82\x59\x50\xce\x83\xc9\x89\xf7\x9d\xc9\x4a\xf8\x04\x73\x23\x1d\x12\x67\xc2\x97\x4c\x30\xa5\xf6\x21\xe8\x52\x64\xb6\xe9\xbf\xed\x6d\x3b\x34\x6f\xc7\x52\x98\xdd\xb0\xac\x37\xb0\x9d\x75\xe1\x43\xa6\x23\xf4\x0f\x07\x8c\x1c\x9a\x76\xd9\xe9\xd7\x83\x35\x51\x4e\xd5\x02\xbb\xce\xb2\x6b\xae\x6d\xe7\xe4\x09\x22\xf5\x86\xcd\x6f\xe7\x39\x8d\x18\xc9\x58\xce\xa5\x11\x46\x85\xd0\xb1\xbc\x12\x64\xca\xe6\x5c\x28\x47\x0a\xc0\xda\xb4\x34\x83\xa8\x0f\x57\x1e\x98\x6d\x4c\xce\x2a\xb0\x23\xb6\x20\x28\x92\xe5\xd1\xb4\x73\xae\xc7\xab\x40\x62\x01\x9d\xb0\x87\x8b\xa7\x70\xd8\xd6\xe6\x73\x53\xde\x2b\x04\x3c\x39\x66\x09\x5d\x61\xde\x27\x74\xa4\xe6\xff\x61\xb9\x1a\x74\x10\xd7\xc2\xc6\x4c\xee\xbb\x1b\xe7\x01\x20\xa7\x34\x5a\xb4\x0b\x14\xf7\x81\xb0\x3b\x5e\x7d\x20\xac\xcd\x20\x7d\x20\xac\x0f\x84\x7d\xe6\xea\x03\x61\x7d\x20\xac\x76\x6d\xad\x95\xd4\x07\xc2\x1a\x5f\x7d\x20\xec\xf6\xab\x0f\x84\xdd\xe1\xea\x03\x61\x77\xbc\xfa\x40\xd8\xcd\x57\x1f\x08\x6b\x37\x99\x3e\x10\xd6\x07\xc2\xec\xf5\xc7\xf3\x0e\xba\xab\x0f\x84\xad\x0d\xd2\x07\xc2\xfa\x40\xd8\x9d\xaf\xad\x35\xf1\xfa\x40\x18\x5e\x7d\x20\xac\x7a\xfd\xb1\x44\x9d\x0b\x23\x4d\x8c\x41\xd9\xbe\xa9\x30\x98\xa5\x96\xc7\x3e\xcb\x12\xae\x36\x51\x86\x87\x89\x30\x6c\x49\x38\xa6\x83\xa8\x42\x1f\x51\x78\x76\x11\x85\x6e\xbc\x71\x1d\x78\xe2\x5a\xf3\x64\x1b\x68\xbf\x58\xe4\x4c\x2d\x64\xd2\x78\xa3\x57\x36\xf9\x5b\x2e\x78\x5a\xa4\x66\xcf\x29\xb3\x9f\xf9\xd2\x47\xf4\x55\xd9\x69\x19\x02\xfd\xe8\x14\x34\x37\xf2\x98\x01\x8a\x28\xe5\x89\x59\x46\x28\xfa\x5c\xd0\xa5\xd9\xeb\xaa\x88\x22\xc6\xa0\x47\x59\x68\x4a\x7c\x3b\xf6\x4f\xf2\x3d\x29\x5e\xb6\xe3\x37\xed\xa4\x25\xe2\x7c\xc2\x28\xdf\x7e\xd3\x68\x8c\x79\x9e\x75\xc3\x97\x7f\x38\x9b\x1c\x06\x7c\x99\x0a\xc7\x96\xb9\x58\xca\x64\x89\x9d\x6c\xe1\x26\xa3\x15\x3d\x22\x93\x6e\xaf\xdf\xb7\xd2\xed\xbb\x90\x11\x6d\xd5\xd7\xaa\xee\x61\x94\xd4\xaa\x8b\x66\x0e\x6b\x89\x70\xf2\x77\x56\x52\x5b\x73\xb7\xf6\x8a\x63\xfb\xe3\x40\x00\xef\x05\x5e\xbc\x33\x02\xef\xd8\x3e\xdf\x4e\x04\x87\x16\x82\x6b\xb1\xa4\x25\xc9\x12\x5a\x36\x49\x82\x15\xf8\x11\xe4\xc6\xe1\x82\x45\x97\x67\x36\x18\xba\xa7\x18\xf3\x99\x2c\x73\xae\x17\xc5\x74\x1c\xc9\x74\xdf\x1c\x63\xfc\xbf\x69\x22\xa7\xfb\x29\x55\x9a\xe5\xfb\xb1\x8c\xac\x58\x1a\x45\x66\x14\x2e\xe6\xe3\x34\x1e\x40\x1b\xde\x93\x6a\x53\xc6\x00\x8a\xc1\x3c\xdf\x1a\x70\x64\xca\x0c\x47\x94\x60\xa4\x07\x78\x6e\x66\x7a\xf7\x6e\x9c\x1b\x5e\xad\xc5\x48\xcb\x40\xf4\xc3\x07\xa1\x7b\xce\x45\x3a\xf0\x46\x3c\xb5\x60\x73\x67\x49\x17\x1d\x04\x99\xb7\x28\xc0\xbc\x35\xea\xec\xb6\x04\x95\xb7\x10\x7a\xb9\x83\x40\x72\x17\x41\xe4\xee\x02\xc8\x5f\x00\xa1\xf8\x29\x07\x8e\x3b\xf4\xae\x75\x14\x30\x7e\x88\x60\x71\x27\x6f\xdd\x36\x48\xfc\x70\x01\xe2\x6e\x5e\xb7\x4b\x73\xe3\xa9\x06\x85\x3b\xf0\x92\x77\xe9\x21\xef\xcc\x3b\xfe\xc5\x82\xc0\xed\x03\xc0\x5b\x10\xfc\x6d\x4d\x64\x2e\xb8\xe6\x34\x39\x62\x09\x5d\x9d\xb3\x48\x8a\xb8\xb1\x1c\xab\x01\x63\xfa\xf3\xa3\x70\x58\xeb\xc1\xaa\x56\x54\x2c\xa8\xc5\xff\x36\x76\x1b\x56\x90\xb8\xc8\x85\x55\x5b\x20\xe8\x80\xb3\x6c\x02\xad\x77\x25\xf3\xcb\x44\xd2\x58\xed\x67\x12\xff\xaf\xac\x97\x08\x0a\x25\xf0\x59\xed\x2a\x25\x1e\xdb\x55\x86\xe5\x25\x5d\x2e\xe2\x8f\xf2\x8a\xc8\x99\x66\x82\xec\x71\xe1\xd6\x71\x10\x18\x9b\xa5\xdf\xd2\x6f\x6b\xf3\xed\xcb\x17\xee\xe6\xe7\xe7\x90\x04\xd7\xab\x52\x5f\xde\x3f\x6c\x1f\xf4\x79\x07\xb1\xbd\x71\x56\x24\x55\x27\x31\x3a\x8e\xab\xfc\xe6\x65\x89\x60\xfc\x12\xc6\xf5\xa7\x8d\x8a\x98\xd8\x92\xb3\xe7\xb7\x68\xad\x53\x5b\xaa\xaa\x9f\x4f\x65\xf9\x9c\x3f\xf9\xe2\x70\xd2\xbb\x93\xb7\xcb\x29\xf3\x48\xe9\x21\x5b\xa8\xe8\x3e\xd1\x94\x90\x5e\xd1\xbd\xc7\x15\x14\xa1\xfe\x90\xd3\x88\x4d\x3a\xd7\x11\xdc\x71\x22\x71\x91\x53\xcb\x00\xbd\xca\xe7\x0e\x8f\x60\x2c\xc6\xd3\xe4\x0b\x77\xa1\x24\x76\x56\x24\xc9\x0a\x7d\x0e\x95\x32\x67\x8c\xc2\xd7\xab\x66\xc1\xf1\xbf\xe1\x29\xa5\x62\x99\xe5\xd2\xca\xcc\xbc\x10\xc2\xf0\xe0\xb2\x0d\x19\x28\x92\x80\xdd\x4c\x2b\xb5\xb9\x8a\xcf\xcd\xf4\x8d\xfc\x83\xb2\xdd\x32\x07\xb0\x32\xa0\xf9\xf5\x4c\xe6\x11\x9f\x26\x2b\xb2\xa0\x89\xef\x39\x43\xc9\x25\x4f\x12\x3b\xcc\x98\x9c\x33\x8d\x81\x0b\x94\x9d\x89\x14\x73\x98\x1c\x15\xae\xd7\x21\x8b\xcc\x6f\xa3\x84\x51\x51\x64\xf8\x3c\x23\x89\x57\xb2\xc8\xdd\xf3\xc6\x3e\xfc\xe1\x25\xb0\xe0\xc9\x30\xe8\xa8\x76\xeb\xc2\x96\x2e\x1a\x65\x14\x80\x77\x0e\xab\x7a\x18\x8e\x29\x97\x2c\xcf\x79\x6c\xa3\x09\xf8\x59\x96\xcb\x25\x8f\x31\x86\xe2\xc8\x06\xbd\x9b\xb1\x67\x8e\x3f\xcf\x42\x8a\x91\x60\x73\x0a\x8a\x8a\x3d\x45\xb8\x66\x38\x0e\xe6\x16\x88\x18\xba\xe8\x18\x0d\x5f\x66\x95\xba\xf9\x25\xc7\xfe\xbf\x01\xe5\xc8\x9e\x90\x44\x42\x4a\x68\x21\xb8\xc6\x9e\xf2\x8b\x42\x93\x58\x5e\x89\x81\xf5\x59\x71\x45\x28\x99\x32\x4d\x83\xa4\x4e\x2b\xe0\x14\x61\x82\x4e\x13\xb3\xe6\x90\xad\x74\xb1\x91\x40\x64\xc6\xa8\x2e\x72\x46\xe6\x54\xb3\x8d\x7a\x0e\xbe\xef\xed\xe4\xe5\xca\x3a\x58\x67\xa4\x10\x8a\xb5\x14\xef\x9d\x29\x47\x7f\xfb\x4b\x33\x1e\xc1\x53\x26\x0b\xfd\x20\xd6\xdf\xd5\x82\x47\x8b\x50\x99\xe5\x29\x53\x44\x16\x35\xb3\xf8\xa5\xfd\xd9\xe6\x15\xea\x4d\xc0\x4d\x57\x53\xf7\xf1\x06\xef\x97\x6d\xcb\xba\x9e\xd9\x17\xb4\x9d\x86\xa4\xed\xa3\xd3\xf3\xdf\xdf\x1c\xfc\xeb\xf8\x8d\x3d\x9f\x22\x14\xfa\x85\xe0\xff\x2e\x18\xa1\xa9\x34\xba\x70\x12\x26\x08\x0e\xc1\xa2\x0f\x3e\x80\x93\xdc\x6d\x2a\x61\x43\x81\x0c\x3d\xf2\xdb\x27\x4c\x42\xa7\xfd\x2f\x9f\x2f\xf9\xd8\xbd\xc3\x7c\x57\x0a\xc8\xd2\x08\x7a\x87\x51\x22\x98\x36\x27\x0f\x35\x4a\xec\x25\xc7\xc5\x3c\x09\x95\xc9\x66\xec\xaa\xad\x4d\xd4\xd6\x22\x1a\x95\x6f\x30\x69\x6a\x18\x75\xd2\xc3\xac\x9c\x43\x47\x9d\x7f\x4a\xae\xed\xcc\x00\x6c\xcd\xec\xcc\x00\x54\x3d\x4e\x26\x84\xc6\x71\x0e\x6a\x0a\x9c\xfa\xb4\xd6\x01\x34\x2b\x33\x76\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\x2c\xf8\x5b\xdb\x3e\x49\x6d\x15\xf6\x2e\x12\x70\x8c\x35\x7a\x32\xe9\x88\xe2\xbf\x2c\xa8\x86\x11\x0d\x55\xb5\x24\x53\x6e\xd5\x50\x76\xad\x59\x6e\xd4\x22\xbb\x12\x8f\xda\x61\xca\x4c\xf0\x01\xb7\x19\xba\xc9\x4f\x66\xd5\xa4\x9f\xfb\x6d\x34\xf3\x73\x63\xdf\x9f\x5a\x2e\x54\xed\xe6\x52\x8e\x96\x52\x1d\x2d\xaa\x6c\xcc\x28\x18\xaa\x22\x9c\x62\x09\x6c\x1c\x13\x72\x17\xbc\x45\x6a\xc1\xf6\x6c\xe3\x76\xd1\xe6\xca\x7a\xde\xb6\x52\x35\xc3\x1f\xe4\xbc\x55\x0c\x02\xe8\xa6\x4c\xc6\x63\x72\x4c\xa3\x05\x4c\x2b\x0e\x64\x86\xb1\x40\x60\xb0\x05\x5d\x9a\x85\xb7\xbf\xc5\x38\x36\x68\x2b\xde\x3b\x0a\x7b\xc9\x9c\xa7\x88\x0a\x6c\x41\x3a\x63\x79\x8e\x39\xd4\xd3\x95\x4b\x65\x6b\xbd\x78\xad\x4e\x52\x96\x4b\x2d\x23\xd9\xa2\x09\x56\xbd\x2e\x03\x86\x03\x22\x64\xb8\x77\x2d\xe5\xdf\x1f\x4d\x86\xe4\xe2\x70\x02\xad\x8b\xce\x0f\x2f\x26\x55\x0d\x7b\xe7\xe2\x70\xb2\xf3\xa8\xa4\x20\xce\xcd\x06\x0e\xd5\x06\x83\x54\x1c\x26\x09\x57\x7a\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\xef\x0b\x80\xee\x7e\xf5\x05\x40\x77\xbc\xfa\x02\xa0\xbe\x00\x68\xfd\xda\x9a\x8c\xc9\xbe\x00\xe8\x79\x85\x6e\xfb\x02\xa0\xfb\x5f\x8f\x1e\xb1\xed\x0b\x80\x36\x5f\x7d\x01\x50\x5f\x00\x74\xb7\xab\x2f\x00\xba\xff\xb5\x75\xb9\x26\x7d\x01\xd0\xbd\xae\xbe\x00\x68\xfd\xea\x0b\x80\x6e\xb8\xfa\x02\xa0\x1b\xae\xbe\x00\x68\xfd\xea\x0b\x80\xee\x77\xf5\x05\x40\x7d\x01\xd0\xb3\xce\x8b\x24\x7d\x01\x90\xbd\xfa\x02\xa0\x67\x91\xfd\x45\xfa\x02\xa0\x3b\x5d\x7d\x01\x50\x5f\x00\xd4\xe4\xea\x0b\x80\x9e\x8b\x53\xa6\x2f\x00\xea\x0b\x80\xfe\x38\x8a\x6e\x5f\x00\xd4\x17\x00\xf5\x05\x40\x7d\x01\xd0\xad\xb3\xe8\x0b\x80\x9e\x83\x09\x98\x33\xc5\xff\xc3\x26\x32\xe1\xd1\xaa\x75\xc2\xdf\x99\x6d\x2d\xab\xec\xb0\x24\x83\x71\x83\xd4\xaa\x16\x45\x1c\x5b\x56\xbb\x72\x16\x10\x2e\xac\x61\xf1\xed\x75\xbf\x00\x09\xb6\xa2\x8e\xc5\xbd\xe0\x69\xf3\x48\x0a\x0c\x62\xac\x46\x24\x5f\x33\xbf\x45\x6b\x13\x21\x7c\x91\x8e\x52\xab\x77\xc3\x52\x38\xbf\x13\xb4\xf4\x1c\x8c\xdf\xb8\x41\x68\x96\x25\x9c\xa9\x31\x39\xf7\x2d\x4e\x80\x7b\xa9\x57\x24\xca\x8a\x21\x49\x59\x2a\xf3\x55\x0b\x6b\xa2\x03\x85\xb3\xb2\x6a\x1d\x91\xec\x0c\xc7\x74\x64\x30\x46\x44\x96\x25\x2b\x54\xa6\xca\xca\x41\x4f\x35\xee\x98\x4b\x0c\xea\x4e\x2d\xcb\x83\xeb\x8a\x19\x76\x2a\xf5\x99\xdd\xf0\x8f\x96\xb6\x7e\x53\x82\x36\xd5\x32\xe5\x51\x13\x86\x8d\x3c\xb6\x43\x6e\x7d\xe7\x0c\x6d\x72\xbc\xe1\x53\x70\x5d\xab\xcc\x0c\x92\x97\x43\x26\x39\xa3\xf1\x0a\x86\x84\x66\x3e\x81\x55\xfc\x04\x13\xbd\xa3\x84\xf2\xe6\x51\xf9\x6a\xe2\xd4\x21\x8c\x45\xcc\x56\x28\x53\xa7\x20\x03\xd7\x93\x6f\xe8\xd3\x92\x38\x1e\x82\xb1\xfb\x0a\x7f\x3c\xc4\x3c\x5e\x43\x72\x50\x29\x41\xf1\xe6\x2a\xb4\xb8\x3f\x8a\x52\xf9\x15\x84\x26\xd9\xe2\x76\xf5\xd7\x4c\xe4\x68\x25\x68\xca\x23\xb7\x31\x0e\x70\xed\x8c\xb9\x53\x55\x80\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x4a\x23\x05\x74\xba\x87\xfc\x0b\x1b\xd6\x70\x9b\xa8\x69\x86\x55\xfb\xf4\x8a\x96\xa9\x15\x1b\x4f\x0f\x2c\x08\x96\x0d\x31\x61\x76\xbe\x14\x8c\x30\xa1\xf3\x95\x59\xbb\x89\x8c\xcf\xcd\xf2\x55\xee\x6e\x5d\x4d\xd4\x32\xa3\xa2\x8b\x6c\x8a\x96\x99\x14\xdd\xe4\x3f\xb4\xcf\x7d\x58\x0f\xe2\x06\x05\x7e\x61\x5a\x63\x65\x55\x0d\x0f\xdb\x70\x2a\x9d\xe0\x9f\xc8\xd8\x88\xaf\x9c\x85\xad\xc4\xac\xf5\x07\x07\x24\xa5\x97\x60\x40\x53\x5d\xca\x35\xba\xa4\x3c\x31\x47\xa8\x2c\x0f\x68\xa9\x2b\xba\xab\x03\xc1\xdf\x75\xd5\x14\x69\xbb\x83\xba\xac\x7a\x22\xd0\xf9\x28\xe5\xcd\x2a\xf8\xc9\x9a\x0e\xf8\x06\xc6\x0a\x92\xad\xcc\x9e\x48\xe9\x35\x58\xa4\x34\x95\x85\xd0\x66\xa7\x44\x32\xcd\x0a\x5d\x95\x99\x20\x7e\xef\x6d\xaa\x46\x52\xcc\xf8\xdc\xba\xb8\xf6\x53\x2a\xe8\x9c\x8d\xfc\xb0\xa3\x92\xf5\xee\xb7\xb3\x53\x5b\xb1\x1d\x1a\xbb\x02\x97\x49\x17\xb9\xe2\x54\x6b\x96\x8b\x57\xe4\xbf\xf6\x3e\x7e\xfd\x69\x34\xf8\x7e\x6f\xef\xc3\x8b\xd1\x3f\x7e\xfb\x7a\xef\xe3\x18\xfe\xf1\xe7\xc1\xf7\x83\x4f\xee\x8f\xaf\x07\x83\xbd\xbd\x0f\x3f\xbd\xfd\xe1\x62\x72\xfc\x1b\x1f\x7c\xfa\x20\x8a\xf4\x12\xff\xfa\xb4\xf7\x81\x1d\xff\x76\xc7\x41\x06\x83\xef\xbf\x6a\x3c\xe5\xd6\x1e\xe8\xee\xfc\xcf\x1d\x79\x9f\xbf\x88\xef\xd9\x66\x69\x76\x74\x16\x6d\x86\xf9\xda\x69\xb4\xfe\xa1\xdb\x4e\xa3\x93\x92\x60\x66\xf8\x71\xb8\x22\x32\xe5\x5a\x5b\x2d\x99\x86\x75\x65\x35\xe3\xc3\xf2\x01\x3e\x43\x4e\xcf\x55\x58\x93\x15\xd8\x2c\xd2\x39\x5a\xc1\xf8\x11\x84\xa7\x59\xc2\x52\x26\x34\x9c\xe7\x91\xd3\x04\xc1\x1a\x1c\x97\x33\x89\xa8\x30\x3a\x3b\xbb\x8e\x18\x8b\xed\xc3\x7a\xd6\xf1\xf9\xab\x67\x1d\xcf\x91\x75\xb4\x76\x4d\xdc\xe6\x94\x58\x73\xde\x99\x93\x8a\x87\xc5\x79\x7a\xe0\x76\x5f\x57\x22\x67\x84\xd1\x68\x11\xfc\xc0\xe2\x16\x50\x44\x2d\x40\x04\x14\xba\x5a\x33\x93\x6a\x08\x47\x98\xdc\x6f\x4f\xba\x72\x31\x22\x54\x28\xa5\xd8\x0e\xec\x23\xc5\xa2\x22\xe7\x7a\x75\x28\x85\x66\xd7\x8d\x22\xcd\x37\x85\xda\xcf\xab\x43\x5b\xa3\xd8\x66\x0d\xdb\xef\x88\xcc\xb0\x46\xf6\x46\xf4\xa9\x85\x2c\x92\x18\xb0\x1d\x0a\x01\xeb\x80\x30\x21\x4c\x63\x64\x0c\xa8\x09\xba\x7b\xfd\x71\x2e\xd6\x85\x43\xff\xbb\xe0\x4b\x9a\x30\xa1\x83\x5f\x4c\x20\xba\x13\xfe\xa8\x91\x83\xee\x91\x9d\x1b\xa0\x77\x4e\x72\xbe\xe4\x09\x9b\xb3\x63\x15\xd1\x04\xe4\x41\x37\x22\xf8\xe0\x86\xd1\x61\x89\x72\x99\x28\x63\x2b\x19\x11\x68\x0e\x07\x06\x32\xc1\x83\x30\xa7\x5c\x90\xd4\x88\xb3\xcc\xfd\x58\x61\x44\xd4\x48\xd5\x8c\xe6\x66\x29\x7c\xe4\x13\x4e\xd4\x54\xca\xc4\x56\x74\x27\xab\x72\x7c\x8e\x66\x99\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xe0\x69\x4e\x56\x3d\x67\xa1\x1c\xfa\xc6\x17\x80\x72\xe9\x82\x11\x9a\x5c\xd1\x95\x2a\xc3\xbf\xe5\x18\x5c\xbd\x22\x2f\x07\xb0\xf1\xa8\x22\x7e\x8c\x98\x7c\x33\x80\x24\xc6\xc3\x83\xc9\xef\xe7\xbf\x9e\xff\x7e\x70\xf4\xf6\xe4\x94\x9c\x4a\xcd\x50\x57\x08\x8e\xb9\x3d\xfc\x76\x96\xde\x2b\x3a\x96\x6a\x0c\xb6\x29\xe4\xe4\x8b\x58\x5e\xa9\xc6\xbe\x61\xdc\x7e\x86\x78\x8c\x8a\x66\xee\x31\x9a\x51\xe8\xac\xdd\x42\x32\xaf\xe5\xc9\x87\x83\x82\x6a\x14\xc7\xfb\x71\x2e\x33\x24\x82\x0b\xd5\x87\xcc\xf2\xa8\x96\x81\xe3\xea\xfd\x60\x7d\x67\xd5\x01\xe7\x39\x15\xba\x8c\x59\x97\x6b\x66\x5b\x7a\x8f\x5b\x2f\xc7\xe3\x29\x4c\x5d\x78\x57\x68\xdc\x1d\x5a\xc3\x41\x1c\xb3\xb8\x42\xfe\xd6\x39\x51\xdb\x56\x65\x75\xe8\x5e\x2e\x08\x06\x92\xc9\xbb\xf3\x93\xff\x5b\xdb\xc7\xab\xac\x5d\xb9\x47\x37\x20\x3a\xb9\xcc\x3a\x5b\xdd\x33\x96\xca\x65\xbf\xbe\xdb\xb2\xbe\x5e\x5a\x76\x93\x64\x7c\x56\x88\x50\xa0\x89\x60\x7c\x92\xca\x98\x8d\xc9\xc4\x67\x3b\x55\xbf\x0d\x81\x3a\x73\x46\xcc\x2d\x42\x73\x9a\x24\xab\x50\x99\xd2\x12\x51\x56\x2a\x30\x6e\x21\x23\x9f\xd1\x44\x3d\x36\x37\x6e\x23\x1b\x8d\x1e\xf1\x56\x16\xa2\x9b\x2c\x62\x3f\x1a\x89\x99\x90\xda\x2a\xc3\x66\x96\x00\x8d\x97\xcb\x88\xa0\x4f\x23\x28\x29\xa9\xc8\x37\x85\x19\x57\x4e\x34\x72\xe5\x88\x3d\xf1\x23\x63\xb0\xba\x50\x4c\x6d\x16\x8d\xa5\x97\xc3\x8c\x9e\x33\x1a\x83\x19\x93\x51\xbd\xc0\x8c\xf0\x94\xaa\x4b\x16\xe3\x07\x56\x35\xf3\x01\x27\x70\x90\xbb\x47\x5d\x98\x79\xbb\xd8\x12\xa8\x64\x98\xa7\x0e\x51\x29\x16\x3f\xf2\xaa\xb7\x38\x84\x86\x28\xef\x44\xb2\x3a\x93\x52\xbf\xf6\x30\x41\x9d\xec\x80\x5f\xac\xb6\x5c\x0d\xf8\x81\x3a\x49\xe1\xb9\x23\x58\x0d\x38\x54\x21\x42\xd1\x51\xb9\xe2\x4f\xfd\x48\xe5\x85\x38\x50\x3f\xe4\xb2\x68\x2c\xc4\xd6\x94\xcd\x1f\x4e\x8e\x80\x15\x15\x36\xe1\x52\xe8\x7c\x95\x49\x8e\xce\xc1\x1b\x0c\x83\xf7\x36\x65\x34\x3c\x13\x65\x76\x1f\x79\x4b\x57\x84\x26\x4a\x3a\x5a\xda\x70\x60\xcd\x5e\x24\xd6\x18\x35\x5f\x4f\xa5\x5e\xac\x59\xa1\xe6\x40\xad\xff\x6e\x18\xe4\x5f\x96\x59\x12\x5c\xac\xfd\x5c\x43\xac\x29\xcb\x59\xc4\x62\x26\xa2\xc7\x5e\xf6\xc7\x4e\x5b\x84\xad\x73\x2a\x85\x39\x98\x9d\x6c\x9e\x13\x9f\xaf\x6a\x49\x1a\x6e\x15\x08\x26\x5a\xeb\x8f\x42\xfe\x2b\x1c\xcb\x42\xb1\x1c\x93\x75\xf3\x82\xe1\x4a\xfe\x54\x4c\x59\x62\x28\x6f\x4c\x52\x00\x2a\xa5\x1a\x1d\x0f\x3c\xa5\x73\x46\xa8\xf6\x3b\x4d\x4b\xc2\x84\x2a\x72\xbb\x88\x5c\x93\x58\xb2\x12\x5d\x8c\x2a\xf2\xfe\xe4\x88\xbc\x20\x7b\xe6\x59\x03\xd8\x3f\x33\xca\x13\x48\x8d\x05\x37\x55\xcd\x46\x9d\xb9\x21\x60\x4a\xb0\x79\x89\xcc\x91\x49\x0c\x89\x90\x44\x15\xd1\xc2\xcd\xc9\xd8\xbd\xce\x6c\xb6\xe5\x5c\x10\xb1\xda\xce\xbd\xfe\xb8\x1c\xea\xbd\x62\x79\x67\x0c\xea\x7d\x03\x06\x15\xaa\x51\x66\xcf\x55\xa9\x87\x1b\x2b\x65\x9a\xc6\x54\x53\xcb\xb8\xdc\x0d\x5b\xbb\xa4\x7f\x6c\xf6\xa5\xd8\x1b\x2e\x8a\x6b\x74\x91\x76\xe7\x6a\x39\x3f\x86\x61\x61\x0f\x01\xd5\x61\xd5\x31\x25\xd1\x67\x6e\x05\xc9\x45\x27\x95\xbd\x32\xbc\x41\x4d\x04\x3e\xe1\x12\xc0\x8c\x72\x42\x45\x2c\xd3\xb5\x87\x41\xb6\x59\xc5\x5b\x3e\x26\xfd\xee\xab\x5e\x5b\xe2\x14\x4a\xd8\x92\xb5\x80\x21\xae\xed\xbc\x37\x66\x34\x43\x1c\xb7\x23\x60\x78\x92\xd0\x29\x4b\x6c\x82\x1b\x26\xc5\xae\xef\xc0\xc7\xae\xa9\xcb\x65\xd2\x1d\x08\xc0\x99\x4c\x18\x16\xa9\x38\x42\x98\xe1\x9f\x04\x1d\x60\x90\xae\xe8\x00\xd6\x60\x85\x0e\x60\xd7\x3e\x05\x3a\x14\x2d\x44\x3d\xa9\xd3\xc1\xe8\x0d\x55\x3a\x80\xf0\xde\x76\x3a\x28\x16\x45\x32\xcd\x26\xb9\x34\x66\x67\x67\xb2\xc9\x0e\x5b\xc6\xf9\xd0\xb1\xb1\x21\xe5\x15\x64\x41\xf5\x66\x9a\x07\xe5\x69\x54\xa3\x90\x70\x35\x6a\xff\x2b\x90\x59\xc0\x7a\xea\x82\xcc\x8d\x52\x09\x04\x9a\x5f\xda\x2f\x9e\xb2\x38\xe8\xa2\xc2\xbb\x85\xb3\xb3\x13\x69\x24\x23\x9a\x40\x9b\x89\x76\x5b\x8e\xd4\xb7\x5d\x7d\xe0\xa0\x28\x11\x62\x94\xf0\x59\x90\xa1\x4d\xc1\xd1\xe2\x5c\x98\x42\xc6\x2c\x88\x3a\x63\xd6\xe7\x05\x16\xaf\xc1\x7d\xae\x1e\xd2\xe8\x15\x36\xff\x86\xc5\x95\x5f\x6b\x69\x11\x9e\xdf\xfa\xe6\x15\x66\x82\x4c\xc4\x5c\xcc\xc1\xaf\x36\x24\x39\x4b\xb0\x92\xd2\x32\x81\x4b\xb4\x20\x77\xe1\x48\xb8\x41\xdd\x79\x70\x8f\x76\x09\xdd\xe5\xc8\xa0\x3d\xcd\x90\xd3\x72\x45\x76\xde\xb8\x77\xdf\xb1\xf7\x9c\xbe\xbb\x08\x33\x14\xa8\x58\x61\xc6\x12\xfc\xe4\xd1\x19\x6f\xa7\x02\x68\x07\xa9\xe0\x17\x1b\x1d\xa1\x97\x5c\xc4\xb6\x26\xb1\x42\x4b\x67\x06\x5b\x35\x19\xaa\x5d\x79\x1c\xb2\x9e\x57\xe4\xa3\x20\x9e\xa0\x64\xd4\x78\xf7\x9c\xa1\x46\xed\x5c\x78\xa3\xdb\xfd\xb2\xfe\x21\xf5\x61\xde\x0b\xd8\x1a\xe6\xb9\x23\x63\xd8\xaf\xdf\xe7\xde\xe5\x51\x51\x50\x2d\x73\xec\xda\xc8\xf9\x05\x87\x75\x1a\x7f\x64\xb6\xb4\xe6\x62\xae\x42\x43\xa7\xda\x72\x6c\xb3\xa5\xe3\x56\x78\x96\xcb\xd4\x25\x7c\xd7\x2d\x87\x6a\x2d\xf5\x53\xb1\x52\x12\xa3\x6d\x3c\x71\x1b\x65\x9e\x2a\x7a\x98\x1b\x4a\x68\x4e\x93\xf3\xac\x79\x87\x06\xb2\x86\x06\xfe\xf6\xfc\xa0\x3a\x34\xc8\x72\x9b\xea\xcf\xe0\x7b\x42\xe3\x94\x2b\x05\x7e\x32\x36\x5d\x48\x79\x49\xf6\x36\x40\x1b\x07\xe9\x6f\x8a\xcf\xd5\xbe\xdd\xf3\x23\x33\xfb\x01\xe1\x22\xf1\x89\x4e\x60\x26\x0b\xed\xab\x0b\xe0\x21\x91\x9f\x05\xac\xa1\xed\x80\x63\x73\x19\xd6\xa7\x89\x3d\x6f\xcc\x2e\x78\x74\x86\xbd\xbe\x3c\xed\xea\x2f\x3f\xbb\x44\xa7\x76\x6f\xd7\x41\xaa\x37\xd2\x11\x95\xcb\x47\x27\x92\xd5\x3d\x22\xa6\xba\xc3\xc6\xfd\xb1\x1c\x93\xc4\x0c\xa1\x0a\x18\x24\x47\xd1\x1b\xb3\xe5\xc0\x6d\xbd\x0b\x88\x37\xf6\xa7\xbb\xa1\xc2\x7d\x90\x24\x86\x9a\xd4\x30\xaf\x5d\x15\x06\x7c\xcb\xee\x4b\x1e\xe1\x93\xcd\x66\x2c\x02\x85\x25\x9c\x09\xb2\xb7\xbd\xb2\x41\x86\xab\x41\xd4\xd2\x75\x6f\x4a\xf9\xb5\x79\x4a\xf8\xab\x5a\x0f\x48\x21\xc5\x68\xf3\xd7\x83\x31\x39\x11\x3e\x81\x78\x68\xde\x36\xbc\xd1\x65\x70\x69\xc3\x0c\xc3\xce\x5f\x30\xff\xd0\xff\x64\x94\xac\xbc\xe8\x60\x67\xb4\xf1\x2a\x93\xd0\xb3\xdc\xe9\xb1\x01\x0f\xb3\x1d\xd4\x88\x18\x27\x2b\xdb\x78\x9c\xcd\x2d\x5f\xca\xeb\xfc\x34\xe2\x08\xa4\x75\x6e\x2d\x42\xab\xf5\xed\x98\xee\x76\xf5\xed\x98\xee\x78\xf5\xed\x98\xfa\x76\x4c\xeb\xd7\xd6\x64\xde\xf5\xed\x98\x9e\x17\x90\x66\xdf\x8e\xe9\xfe\xd7\xa3\xe3\x67\xf6\xed\x98\x36\x5f\x7d\x3b\xa6\xbe\x1d\xd3\xdd\xae\xbe\x1d\xd3\xfd\xaf\xad\x43\xfe\xed\xdb\x31\xdd\xeb\xea\xdb\x31\xad\x5f\x7d\x3b\xa6\x1b\xae\xbe\x1d\xd3\x0d\x57\xdf\x8e\x69\xfd\xea\xdb\x31\xdd\xef\xea\xdb\x31\xf5\xed\x98\x9e\x35\x4a\x3d\xe9\xdb\x31\xd9\xab\x6f\xc7\xf4\x2c\xb0\xb8\x49\xdf\x8e\xe9\x4e\x57\xdf\x8e\xa9\x6f\xc7\xd4\xe4\xea\xdb\x31\x3d\x17\xa7\x4c\xdf\x8e\xa9\x6f\xc7\xf4\xc7\x51\x74\xfb\x76\x4c\x7d\x3b\xa6\xbe\x1d\x53\xdf\x8e\xe9\xd6\x59\xf4\xed\x98\x9e\x83\x09\xa8\x74\xcc\x1b\xe1\x2e\xde\x05\x22\xc6\xe6\xf6\x06\x15\xd9\xd3\x62\x36\x63\x39\x70\x2e\x78\xf2\x5a\x5a\x55\x89\x86\x57\x0f\xe5\x32\x3d\x04\xb4\x19\x5b\x06\x71\xc3\xcf\x6d\x09\x38\xe0\x23\xe6\x4c\x01\x40\x8a\x20\xc7\xef\x5e\x6f\xc0\xa3\x69\x9c\x6f\xd8\x34\xa5\x16\xe6\xfc\x4e\x34\x8b\xc2\xdf\x40\xf0\x4d\x65\x39\x96\xee\x51\x22\x95\xcd\x87\x06\x62\x45\x0b\x2a\x04\x73\xf6\x1e\xd7\xe0\x47\x99\x32\x26\x88\xcc\x98\x8d\x81\x53\xa2\xb8\x98\x27\x8c\x50\xad\x69\xb4\x18\x9b\x27\x09\x47\xec\x32\x79\xd9\x7e\xa2\x74\xce\x68\x8a\x44\xcf\x59\x4a\x39\x0e\x45\x68\x94\x4b\xa5\x48\x5a\x24\x9a\x67\x7e\x30\xa2\x18\xd4\x29\xa0\xa0\xf2\xc4\x80\x7c\xb9\x32\xe3\x79\x58\x3e\xcd\x4e\x4b\x86\x80\x60\x60\x6d\x0e\x01\xdc\x3a\xcd\xf4\x8a\x98\x57\x4e\x2c\xae\x6a\xae\x34\x89\x12\x0e\xd2\x1a\x9e\x88\x15\xab\x30\xde\xd0\xc9\x6a\x61\x67\xaa\xec\x54\x45\x0c\x6a\x6b\xa6\x15\x81\x04\xe1\x72\x40\x3b\x54\xcc\x95\x55\xf3\xd5\x90\x50\x87\x56\x85\x84\x76\x33\x05\x52\x3b\xc9\x82\xa3\xdb\x8f\x82\xe1\x02\x94\x4e\x87\xe0\x6b\x6b\x75\xb0\x68\x26\xa1\x73\xbf\x39\x87\x95\x24\xf9\x52\xa1\xb0\x3d\x1c\x6a\xc7\x00\x16\x40\xb0\xa5\xd9\x03\x2c\x62\x46\xbe\xd2\x1b\x76\xfd\x83\x6f\x7a\x4d\xf3\x39\xd3\xbe\x8d\x59\xd3\x2c\xf2\x6a\xf2\x49\x88\xa7\x1b\x1a\x22\x25\xc9\x80\x3a\xb6\x1b\x4a\x50\x99\xb4\x09\xb0\x17\x67\x68\x71\xca\x36\xdd\xe0\x14\x23\x4c\xde\x2c\x5b\xe8\x64\x34\x62\x8a\xec\x9d\x4c\x0e\x87\x64\x72\x72\x64\x33\x34\xe5\x6c\x53\xa1\x70\x09\xa8\x6c\x95\xc4\x4d\x0f\xf2\x10\x68\xc1\xf0\x41\x71\xa5\x7d\xf6\xc4\xeb\x57\xd0\x17\x67\x13\x07\x00\x95\xcb\xe3\xba\x13\x85\x2d\xbe\xac\x4f\xc8\x6c\x05\x54\x68\xec\xe6\x63\x65\x41\x9f\x03\xf6\x71\xbf\xf0\x13\xb1\x54\xb2\x9d\x7b\x5c\x44\x1d\x18\x2c\xc8\x6b\x6d\xbf\xaa\xf4\x1f\x11\x36\xbb\xa6\x51\x56\x4d\x2b\x0b\x29\x50\xc5\xde\x32\xa5\xe8\x9c\x4d\x1a\x86\xb7\x6e\xf2\x03\x40\x84\xab\x64\x07\xc0\x80\x92\x4a\xef\xb5\x30\x5b\xb8\xaa\x7c\x93\x14\xe7\xe4\x77\xd6\x55\xce\xb5\x66\xc0\x4a\x00\x4d\x0f\x16\xbb\x5e\x6c\xbf\x5b\xcb\x39\x7e\xeb\x06\x29\x7f\x6c\x54\x09\x11\x63\x06\xf0\x94\x91\x69\xce\xd9\x8c\xcc\x38\xa4\x15\x43\xa2\xef\x10\xc1\x95\x28\xfa\x9e\x94\x62\x39\xb6\x5b\x42\x0b\xca\xcd\x6b\x4c\x7e\xb1\x13\xd3\x79\x21\xb0\x9d\x96\x55\xee\xa1\x5c\x94\xcf\xc8\x1c\x12\x85\xad\x8d\xf2\x97\x17\xff\xf8\x1b\x99\xae\x8c\x22\x05\x1b\x52\x4b\x4d\x13\xff\x92\x09\x13\x73\x43\x2b\x14\x0a\xd5\x82\x47\x4f\x01\x68\x88\x82\x13\x7f\xf9\xcd\xe5\xb4\xaa\xd9\xed\xc7\x6c\xb9\x1f\xd0\x6f\x94\xc8\xf9\x98\x1c\xfa\xfa\xc2\x22\x8b\xc1\xcf\xdf\x1c\x0b\xbb\xbb\x6d\xd6\x0d\x20\xbc\x43\xf9\x22\x0b\x79\x85\x16\xe6\x86\xdd\x53\xd6\x4e\x65\x32\x2b\x12\x0c\x75\xbc\xf6\xa5\xc2\x85\x62\xeb\x05\x7d\x1b\xcf\x05\x38\xe7\xed\x10\x35\x3e\x6a\xf3\xc3\xdd\x23\xa5\x2d\x80\xb1\xee\x63\x0f\xf6\x05\xcc\xe4\x35\x4d\x92\x29\x8d\x2e\x2f\xe4\x1b\x39\x57\xef\xc4\x71\x9e\xcb\xbc\x3a\x97\x84\x1a\x19\xbd\x28\xc4\x25\x36\xc1\xf0\x70\x08\x72\x6e\x13\x08\x1c\x7a\xf6\xa6\x17\xc6\xda\x78\x27\xfa\x9d\xf1\x5d\x8e\xc2\xae\x79\x69\x61\x0b\xc2\xcc\xf3\x71\x47\x86\xe3\xab\x70\xb3\x7d\xf3\xe2\x2f\x7f\xc7\xad\x4b\x64\x4e\xfe\xfe\x02\x6a\x08\xd4\x10\x0f\x31\x48\x54\xa3\x9e\xa4\x34\x49\x0c\x23\x0f\x37\xa5\x21\xf4\xa6\x4d\xf8\xe0\x7b\x50\xb7\xdf\x6e\x77\x56\xe0\x2f\x2e\x7e\xc5\xbe\x01\x5a\xb1\x64\x36\xc4\xd2\x29\x6f\x4c\xef\x82\x3a\xb2\x6b\xb9\x0f\xd4\xaf\x6d\x81\xda\xbd\x94\x49\x91\xb2\x23\xb6\xe4\x5d\x74\x31\xac\x8c\xe6\x1c\x4c\x09\x57\x20\x07\xa7\x89\x8c\x2e\x49\x6c\xbf\x0c\xb2\xaa\xea\xa8\xdf\x4f\xb7\x21\x6d\xf8\xfe\x95\x8c\xb2\x94\x66\x99\xd1\x01\xa0\x40\x33\xa7\x57\x15\x62\x94\xfd\x28\x9e\x7e\x43\x5a\x7c\x23\xc3\x37\x1b\x0f\xd1\x38\x0d\xad\x7d\x64\xa4\x9c\x7d\x47\x8d\x09\xcb\x01\xdd\x69\xc8\xe0\xdf\x58\xe5\xb4\xa6\x98\x7b\xd4\x4a\xbf\x31\x50\x01\x30\xdb\x07\x58\xf2\xa3\x35\x4e\x25\xad\xd3\xe9\x2a\x74\x11\xb7\x74\xf7\xa3\x24\x63\xb9\xe2\xca\xc8\xe5\x9f\xe1\x40\x61\x5b\xc7\xd2\xf1\xfc\x38\x44\xc0\xc3\x0d\x50\xc9\xed\x39\xa5\xb1\x53\x70\x40\x60\x85\x08\x13\xbd\x41\xad\xad\x6a\xb5\xe7\xc5\x14\xf6\x0f\xdc\x7e\x9f\x56\xb1\x1d\x4a\xe2\xc7\xe6\xb1\x3f\x97\xcb\x50\x65\xb1\xe6\x13\xcf\x63\xf1\xae\xe7\xc4\x59\xe1\xfd\x9e\x2a\x63\xf5\x93\xef\x88\x7f\x00\x47\xb5\x8b\x5b\x65\xa1\x15\xab\x13\x4f\x58\x60\x0b\x58\x03\x72\x4c\x30\x69\xc3\x9c\x09\xfb\x53\xb2\xfb\x6a\xf7\x51\xb9\x2b\x92\x28\x97\x19\x9d\xb7\x6a\xf8\x53\xa3\x54\x7d\xd8\x10\x6e\xc2\xd8\x4f\x01\x2b\xc9\xec\x5d\x86\x93\x38\x34\x1d\xc0\x4a\xc2\x60\xbe\x23\xb0\xb5\x2c\x10\x77\xea\x8a\xae\x08\xcd\x65\x21\x62\xeb\x0e\xf5\xfe\xe8\xb7\xb5\x07\x9f\x4a\xc1\xca\xc6\xab\xd5\x96\xc5\x10\x80\xe2\x82\xbc\x1c\xbf\x7c\xf1\x5c\x44\x1c\xb6\x15\xab\x8a\xb8\x53\x2f\xe2\x90\x3f\x3d\xea\xbb\x3a\x58\xfc\x8e\xde\xf7\xad\xf5\xcd\x94\xa8\xf7\xdc\x61\x6a\xc3\x47\x57\x39\xd7\x2c\xe8\xaf\xb8\x07\x16\x8f\x31\x2c\x03\xcc\x89\xc1\xa6\x76\x13\x2d\x89\xd4\x0e\xe4\x43\x15\xd3\x2f\xc8\xb7\x2c\x83\x82\xe3\xb6\xc9\x35\xa6\x6e\x61\x61\x21\xa1\x76\x76\xc8\x1e\xde\xb9\x8b\x95\xf9\x83\x47\xdd\x5a\x96\x68\xc7\xd7\x59\x0b\x20\xce\x1a\x08\x44\x46\xc1\x79\x97\x75\x48\xc1\x7f\xb1\x05\x5d\x32\x40\x24\xe0\x09\xcd\x13\x08\x91\x9f\xe3\xdc\xc9\xb4\xd0\x84\x89\x25\xcf\xa5\x00\x3f\x31\x94\x6c\x4c\x13\x16\xb6\x17\xff\x6a\xef\xe7\x83\x33\xc8\xbf\x19\x60\x5b\x15\x37\xcb\x42\xb9\x36\xee\xe1\x4c\x82\xe1\x3e\xbb\x7c\x6e\x1e\x86\x86\xc0\x73\xdd\xbc\xcc\x73\xd2\x42\x17\xd8\xbb\xe5\x3a\x4a\x0a\xc5\x97\x8f\xc5\x49\x2c\x54\xc4\x11\x6f\xb4\xce\x35\xd8\x8a\x92\x50\x6b\x08\x14\x65\x98\xe0\x33\x38\xd7\xbb\xca\x57\xb2\x86\x29\x1b\xd6\x67\x45\x52\x3e\x5f\x68\x9b\xed\x59\x8b\x1c\x04\x21\xa8\x14\xdc\xbc\x8f\xe9\xbd\x32\x62\xf7\x20\xe1\x54\xdd\x57\xe5\x5a\x2b\x97\xb4\xa3\x40\xa2\x87\xb0\x68\x79\x34\xf1\x4e\x19\xf3\x20\xf4\x54\x9e\x4c\x6c\x04\xcd\xd1\x8d\x8b\xff\xc1\xc4\x1a\x6f\x96\x60\xa2\x0c\xfe\x04\xdd\x8d\x33\x12\xc0\x05\xb9\x84\x12\x60\xfe\xd0\xa2\x00\x2c\x12\x21\xc5\x68\x11\xc0\x39\x65\x32\xbe\x67\x29\x61\x53\xc3\xa3\x91\xc9\xb1\x99\x82\x64\x21\x93\xd8\x75\x0f\x47\x5f\xce\x94\xe9\x2b\xc6\x04\x39\x99\x00\xfd\xcc\x2b\x62\x39\xd7\x66\x2a\x62\x58\xc1\xb7\xad\xdf\x44\xcf\xfb\x6e\xb0\x16\x56\x49\x1b\x95\xde\xbf\x69\xeb\x33\xff\xa3\xa7\x99\xcb\xc8\xa6\x53\xb9\x64\x40\xd2\x38\xce\x99\x6a\x01\x7c\xf4\x08\x76\x6a\x2b\x56\xca\x1b\xf5\xcf\xa9\x06\x46\x3c\xd9\x9c\x6b\x09\xd4\x77\x38\xaa\xb0\xf1\x1e\x98\x83\x9d\x4c\x0e\x5b\x70\xaf\xdd\xf7\x36\x2e\x62\x86\xda\xdd\x55\x84\x67\x51\x19\x73\x1d\x93\x32\xdc\x18\x14\x4a\xa0\xc6\x78\xbf\x58\x57\x53\x35\x31\x60\x6a\x2d\x99\x34\x11\x38\x8c\x61\x2b\xb6\x14\xdb\xba\x73\x20\xe8\x00\x6d\x8a\x2b\xd4\x50\xee\x17\x21\x41\x5c\xb2\x04\x32\x79\x9b\x3a\x32\xf4\x49\xc8\x35\xc6\x04\xae\x77\x97\x7e\x18\x70\xf1\x35\x62\x3e\x18\x2d\x27\x27\x47\x5d\x6e\x97\x8c\xc7\x5b\xb7\x5d\xde\xab\x7b\x97\xf4\xdf\xfe\x92\x80\xe9\xf7\xb9\xb7\xc4\x60\x93\x85\xe9\xb3\x7f\x43\x9a\xba\xd4\xc4\xb6\x4f\xf4\x99\xb0\x9b\x12\x3a\x80\x8b\x54\x9f\x34\x34\x7f\xcf\x8a\x04\x36\x69\x99\xdc\xeb\x33\x93\xa9\xcf\x0b\x05\x6d\x80\x2e\x29\x4f\x40\x7b\x0e\x0a\xf7\xd6\x86\x74\xe1\xf7\x44\xd2\x18\xcb\x3d\x2e\x59\x2e\x58\x42\x52\x19\x17\x09\x7a\xf3\x7c\x9b\xde\xb7\xef\x8e\xde\xbf\x39\x76\x49\x58\xac\x5c\xce\x21\xa1\x44\xb0\x2b\x18\x5d\x80\x42\x12\x59\xe0\x2e\x5f\xf6\x63\xce\xd3\xb9\x4d\xcb\x40\x33\x14\x1d\x13\xee\x85\x52\xae\xf9\x9c\xea\x4a\x4b\x5b\x32\xcd\x19\xbd\x94\x85\x26\xcb\x22\x11\x2c\x2f\xdb\x4c\xb2\x25\x13\xe8\x83\x35\x3f\x30\x8f\x0d\xb1\x1a\x79\x5e\x41\xc8\xb4\xc0\x69\xe6\x55\xcc\x58\x34\xb2\x9a\xbc\x2d\x31\x82\x2f\x83\x1e\xcb\x95\x4e\x8c\x55\xa7\x09\x4d\xb2\x05\x1d\x61\x9b\x0e\x0b\xad\x06\xb4\x5e\x48\x21\x73\x0c\xab\x61\x39\xb1\x3d\xf8\xd8\xc7\x0f\x86\x73\xe8\x92\x98\x46\x73\xee\x32\x60\x6c\xe2\xcb\xc3\x1d\x87\xfb\xbb\x5b\xaa\x15\xa2\x55\xf8\x16\x3b\xa0\x93\x7d\x13\x19\xdf\x60\x35\x94\x7a\x17\xdc\x1f\x76\x9e\xd6\x92\x50\x82\xee\xf6\x91\x83\xbf\x81\x4c\xd9\x26\x6c\xf0\xde\x42\x13\x2c\x8f\x49\x91\x24\xe7\x2c\xca\xd9\x7d\xc3\x0c\x55\x4e\x71\x52\x1b\xeb\x26\x0b\x20\x30\x67\x01\x13\xc4\xde\x2c\x4a\xfc\x81\x20\xcf\xa9\xac\xc5\xcd\x8a\x04\x52\xc3\x01\x82\x1e\x09\x0e\xb3\x57\x41\x4c\x97\x2b\x97\x65\x86\xdc\xa7\xb2\x0a\x8a\xf9\x87\xf9\x1e\x66\x54\x29\xcc\x3c\xe0\x22\xe6\x4b\x1e\x17\x34\x81\x07\x81\x51\x66\x13\xb6\xa8\xc5\xfb\xc6\xb3\x9c\x3a\x94\xe0\xfb\xe6\x30\x97\x67\x72\x1f\xe7\xfd\x27\x9c\xde\x8a\x8b\xf9\x08\x3e\x31\x0f\xb6\x33\x1c\x49\x31\xa2\x23\xb3\x6d\x9e\x88\xdd\x02\x38\xf7\xef\xc0\x30\x38\x73\xeb\xeb\xd8\x90\x22\x4c\xc8\x62\xbe\x00\x62\xe5\x29\x75\x50\x9a\x09\xd3\x80\x92\x68\xf3\x19\x30\x89\xcd\xfe\x36\xb6\x56\x46\x88\x1a\x59\xdd\x1b\x4f\xc4\x76\x69\xea\xe0\xad\x25\xe3\x07\x6c\xc6\xd2\x48\xdf\x7b\x07\xca\x25\xcb\x97\x9c\x5d\xed\x5b\xcd\x6f\x64\x64\xc2\x08\x29\xa2\xf6\x81\xb0\xfb\x7f\x42\xeb\xe8\xe2\xdd\xd1\x3b\xe8\xdc\x6d\xbd\xee\x4e\x54\x19\x51\xa0\xc6\x84\x66\xfc\x67\x96\x2b\x00\x55\xbe\xe4\x22\x1e\x92\x82\xc7\xdf\x3f\x60\xc2\x17\x17\xbc\xcc\x62\x6d\xc5\xb5\xde\x58\xae\x64\xab\xe8\xf9\x7f\x70\x7b\x06\x12\x74\xca\x12\x29\xe6\x01\x06\x00\x48\xf3\x13\xc1\xf5\x5a\x93\x63\x44\x3a\x05\x0f\x8f\xcc\x63\xc8\x15\xe6\x32\xaf\x84\x33\xcc\x78\x80\xff\x18\x64\x1c\x1b\x96\xc6\x2b\xe3\x41\x1a\x97\x2a\x75\x24\x4c\x04\x72\xe5\xc2\x0e\x1d\xdb\xe1\x4a\xa2\x2c\x5e\x50\x11\xc3\x9f\x51\x24\xf3\xd8\xce\x97\x6b\x9f\xde\x8c\xc9\x70\x98\x81\x05\x62\x08\x1b\x7a\xd4\x9f\x0c\x6a\x5a\x9e\x56\x52\x61\x9d\xd6\x5e\x08\xfe\xef\x82\x11\x9a\x4a\xc3\x88\xeb\xcd\x12\x6a\x14\x49\xe9\x0a\x64\x21\x4c\xf5\x8d\x2b\xd7\xb0\x35\xb6\x6a\x48\xce\x98\x51\xba\x4a\x98\x80\x21\x79\x53\xc5\x0d\x18\x9a\xb9\x9c\x63\x41\xb3\xfd\x08\x67\x9f\x33\x25\x8b\x3c\x62\x67\x18\xe3\x4c\x5d\x3e\xdd\xfa\xcb\x98\x55\xd1\xf4\x92\x09\xf4\x29\x19\xd2\x40\x18\xb7\xc8\x61\x0d\xa2\x05\x8b\x0b\x90\x2a\xd3\x15\x99\x71\x6c\xb0\x02\xa2\x9d\xcf\x17\x4c\x69\x67\x1b\xed\x43\x8e\x5a\xd9\xab\xce\x4d\x00\xb6\x6f\x90\xcc\x5e\x7a\x61\x53\x0a\xb0\xe5\x70\x64\xa9\x76\xf5\x5a\xa8\x0d\xaa\x22\x75\x67\xb9\x4e\x69\x35\x26\x6f\xcc\xa3\x70\x3f\x05\x9d\x29\x78\x8d\xb8\x10\x63\xb6\x6e\x64\x32\xa3\x6a\x01\x6d\x5d\xea\x4b\x60\x9b\x3e\x44\x45\x6e\x18\x46\xb2\x82\x42\x4e\x68\xc7\x0f\xad\x9b\xa1\x73\xfb\x26\xbf\x63\xcb\xfa\x1c\x33\xd9\x51\x20\xef\x9e\x8a\x10\x3b\xf0\xf5\x16\x86\xf0\x51\x8d\x13\xe0\x4a\x1a\x81\xe5\x70\xdd\x8c\xc2\xed\x03\xfe\x86\x2b\x3c\x9c\x48\x6a\x1e\xde\x6f\x14\x96\x6f\x23\x01\x69\x3e\x6f\xef\xb8\xdb\x3d\xc8\xe7\x05\x1e\x74\xcb\x85\x4b\x44\xfa\x71\x2d\xef\x1e\x94\x29\x63\xab\x1e\xbe\x3d\x0a\x0b\xfd\xc2\x0a\x26\x57\x26\x39\x26\x3f\xb7\x0d\xb3\xd4\xe3\x2c\x86\xa1\x97\xc1\x9b\xb2\xef\x8a\x61\x1a\xc9\xd2\x99\x04\xfe\x69\x4e\xf3\xe5\x22\x2b\xb4\x95\x84\x01\x40\x57\xb4\xa0\x62\x0e\x6e\x12\x59\x98\xf1\xbe\xfa\x0a\x66\x94\xb3\xb8\x88\x6c\xd3\x1a\xb7\x6b\xbf\x72\x41\x07\x0b\xa7\x07\xec\x4a\x45\x34\x73\x73\x0e\x5f\x4b\xad\x84\xa6\xd7\xaf\x08\x1f\xb3\x31\xd9\xf9\x2a\xf8\x6a\x07\x9f\x9e\xe5\xd2\x3c\xc2\x16\x18\xc1\xac\x12\xae\x21\xd1\x67\x27\xbc\x7b\x4c\x8e\xcd\x33\x20\x10\xeb\x09\x18\xd4\xc0\x4c\x4b\xf2\x0d\x49\xce\xe6\x34\x8f\x13\xeb\x30\xbc\x0a\x0a\xa7\x3c\xc1\xd8\x35\x57\x5a\x59\x6f\x41\x0b\xe6\xa4\xa9\xba\x34\xac\xc8\x1c\xae\x51\x4c\x35\x1d\x05\xa7\x7a\x1f\x4d\xad\x91\x45\x09\x1f\x51\xbb\xbb\x4a\xae\xb5\xff\x27\x5b\x7f\x3c\xa2\xfe\x2e\x6e\x94\x72\xc0\xeb\x6e\xae\xea\x3c\x35\x2f\x71\x0b\xb0\xf8\xea\x01\x3e\x2e\x3b\x48\x00\x0d\xa0\x4f\x51\xa9\x32\x79\x3e\x6a\xf1\xd0\x6f\x38\xd2\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\x27\xbb\x3f\xd9\xfd\xc9\x6e\x71\xb2\x99\x58\xb6\x3e\xd5\xce\x7a\xda\x94\xb7\x50\x87\x7c\x0d\x4a\xf0\x9e\x51\x76\xe8\xb1\x58\xfe\x4c\x8d\x32\x6d\xfd\xda\x36\xe8\xba\x21\x8d\xc3\xde\x80\xaa\xfb\xe1\x93\x4f\x0f\x7d\xc4\xe4\xce\x0e\x93\xe6\x42\xc7\xca\xa6\x55\x0b\x9b\x70\x1e\xfe\x7e\x72\x74\x7c\x7a\x71\xf2\xfa\xe4\xf8\xec\x51\xb3\x9d\x5a\x82\xa1\x56\xe5\x72\x43\x29\x99\xe5\x6c\xc9\x65\xa1\x92\x95\x47\x6d\xdf\xcc\x04\xd6\x13\x66\x45\x0c\x1e\x0f\x07\x4c\xbf\xf1\x67\xbd\xb0\xed\x56\xd8\x56\x93\xbf\x5a\xe0\x60\x75\xb5\x7d\x5f\xe7\x32\xed\x68\x0b\x9f\xa3\x2f\xc6\x05\xdb\x36\xed\xa7\x5d\x0b\x99\x53\x11\x3d\x56\x79\x2c\xf1\x79\x8c\x3e\x9a\x66\xba\x45\x1b\x9d\x4e\x40\xb6\xbb\xc1\xa3\xc6\x84\xb3\xb7\x34\xfb\x89\xad\xce\x58\x4b\xb8\xad\x2a\xbd\x59\xc2\x22\x23\xe8\xc8\x25\x5b\x61\x76\xf1\xa1\x7b\x58\x3b\xd0\xe8\x2d\xc4\x28\xbf\x64\x6d\xf0\xe3\xbb\x04\x17\xbf\x64\x2d\x32\xa7\xdd\xb5\x06\x80\x6d\x96\x10\xf4\x34\xb3\xa6\x5b\x05\xf9\xfd\x05\xc0\xd4\x9f\x6f\x1c\xa5\x7a\x75\xb8\x0a\x2e\x7c\xdb\xf1\x4a\x60\x24\x7d\x55\x91\x5d\x9e\x89\x10\xac\x69\x86\xbd\xe9\x42\x0f\x56\xc9\xe8\x88\x34\x6d\xfb\x70\x12\x5c\xc2\x6e\xf9\xea\x6e\xc9\x58\x31\xe7\xc2\x03\x3a\xc6\xaf\x1c\x06\x88\xf2\xcd\x33\xa1\x6d\xf3\xb0\xfa\xa7\x4d\x6b\xf9\x6f\xff\x61\x42\xa7\x2c\x51\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\x31\xbc\x5d\xbd\x05\x00\x4d\x84\x8c\xd9\x29\x3c\x03\xfe\xb4\xea\xda\x01\x86\x50\xec\x17\x80\x47\x30\xc6\xd4\x3b\xff\x67\x26\xe3\xfa\x5f\xaa\x15\xf2\xe6\x56\x0a\x06\x58\xa2\x16\xe5\x71\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\x7e\x52\xd1\x82\xa5\x88\xfd\xf7\xda\x91\x00\x1a\x61\x3b\xe0\x13\x01\x68\x11\x46\x33\xad\xc2\xb0\xee\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\xf5\x69\x2e\xbe\x01\xed\xc1\xe4\x84\x2c\x91\xc2\x5b\x43\x1c\x17\xde\x7c\xfd\x45\x79\x9c\x0f\xa2\xd6\xab\xd2\x5f\x61\x5a\x99\xfb\xde\x22\x84\x28\x0f\x15\xc9\x8c\x61\xb3\x87\x1f\x8e\xa3\xac\x18\xda\x1b\xc6\x29\x4b\x65\xbe\xf2\x7f\xfa\xca\xe4\x91\xd2\x32\xa7\x73\x28\x0c\xc3\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x19\x4b\xb5\x1c\xb9\x21\xd2\x4d\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\x16\xb5\xc5\x2b\xab\x5e\xd5\x0d\xe9\x3d\x71\xa8\x70\x7a\x2a\x82\x3d\x69\x2b\xe6\x87\x65\x16\x1b\x78\x03\xc4\xd2\x58\x96\x8d\x91\x26\xcb\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf9\x9b\x1f\xe8\xe6\x8c\x47\x0b\xda\x83\x59\x5c\xde\x6d\x76\x9d\x01\xb8\x9e\x3f\xaf\x35\xb6\xff\xb2\x4d\x17\x3f\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfe\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xbd\xf7\x71\x0c\xff\xf8\xf3\xe0\xfb\xc1\x27\xf7\xc7\xd7\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x5f\xb5\x9e\x7a\x07\x58\xd7\x78\x75\x89\x78\x5d\x1d\xb1\x93\xed\xf7\x05\xdb\xbc\xe0\xe5\xb6\x57\xd7\xe7\xff\xcc\x71\xcd\x20\xab\xc7\x89\xeb\xad\x39\xe0\x98\x16\xfa\x10\x9e\x1c\x7c\x52\xb5\x60\xcc\x9b\x16\xcf\x4d\xce\xfd\x11\x9c\x3b\xbe\x0d\x2c\xac\x6b\xa9\x89\xce\x72\x99\x3a\x58\x0a\x08\x6f\x60\x01\xa5\xbd\xef\x92\xb5\x6a\x26\x8e\x57\xef\x0c\xea\x9d\x41\x37\x5c\x9f\x75\x06\x61\x11\xc1\xf6\x7a\x82\x98\x58\x36\x0d\x61\x6c\x8c\xa0\x3b\x5b\x27\x04\x7f\xbc\x5b\x40\x6d\xec\x8e\x7a\xd9\x3f\xb9\x4c\xa6\x41\x81\x96\x6e\x8e\x61\x92\x83\x24\x21\x5c\xe0\xc1\x87\x01\x7c\x2d\x16\x43\xd3\xc6\x15\x11\x2f\xcd\x14\x7c\xd5\x55\x05\x3c\x19\x72\x8b\xb9\x98\xdb\xc2\x28\x14\x25\x36\xfa\xc4\x45\x09\x3b\xed\x95\xc3\xb2\x57\x01\x55\x4a\x46\xd0\x14\x0c\x2b\xad\x3c\x26\xa5\x9d\x36\xcc\x46\xd3\x4b\x88\x36\x46\x2c\x66\x22\x62\xb6\x8f\x41\xa5\x57\x34\x15\xe4\x58\x2c\x5d\x2f\x87\xb8\xc0\x64\x10\x64\x7f\x9b\xc7\x78\x5e\x09\x08\x66\x23\xda\x20\x58\x90\x87\x00\x5c\xdf\x5b\xd8\x14\x52\x31\xe4\xac\xf4\xb2\x36\x6b\x27\xdb\x5a\x8a\xb7\x97\x99\x3e\xb2\xd5\x4a\x19\x5a\x13\x96\xa5\xfb\xb9\x2a\x24\x9f\x43\x30\xb0\xbd\xf8\xfc\xc3\x89\xce\x8e\xc4\x66\x37\x22\xf3\x1e\xb1\x93\x2e\xc5\x64\x17\xc1\x92\x2c\x67\x33\x7e\xdd\xd1\x39\x3d\x08\xea\x09\x79\xcc\x84\xe6\x33\x8e\x1d\xb3\xb3\x9c\x65\x4c\x80\xab\x15\x4a\x34\x0c\xef\xb7\x92\xb2\x0c\x4e\x6f\x63\x32\x0f\x2a\xdc\xdd\xb2\xb2\xf3\x4d\xca\x7e\xcf\xc7\x48\xcf\xc7\x1a\x5f\x0f\xc4\xc7\xec\xce\xdd\x1e\x26\x06\x99\xe7\xed\xb3\xdf\x0f\xab\xa9\xec\xb6\x8b\x7b\xdb\x12\xe2\x5a\x81\xbe\x67\x8d\x5a\x62\xf2\x1a\xd6\xb1\xe5\x04\x6b\xf6\x51\x6f\x22\x29\x15\x74\x8e\xad\x28\xb4\xf4\xe0\x55\x32\xf7\xed\xc4\xea\x79\xf7\xa0\xc7\xbb\x12\x2f\xf8\x32\x97\x49\xc2\x72\x45\x12\x7e\xc9\xc8\x11\xcb\x12\xb9\x4a\x6d\xee\x6b\x4c\xce\x35\xd5\x66\x57\x9f\x33\xdd\x2c\xec\xdb\x0e\xd5\xc6\x55\xa1\x77\x84\xfd\x8f\x65\xed\x50\x14\x4e\x32\x5b\x41\xf9\x4e\x00\xd3\x38\x80\xce\x46\x43\x72\xca\x96\x2c\x1f\x92\x93\xd9\xa9\xd4\x13\xd4\xbe\xab\x09\x77\x78\x23\xe1\x33\xf2\xca\xd8\x75\x4a\x13\x8d\xdd\x65\x82\x02\x75\x99\x57\x06\x28\x71\x0b\xbb\xa8\xcf\x5b\xaf\x3d\x87\x91\x7c\xe5\x79\xa3\x48\x46\xab\x65\xf2\xed\xbb\x5a\x2f\xd0\x01\xd6\x93\x96\x50\xd6\xc1\xfe\x46\x5c\x05\x87\xc4\x07\x56\x20\x17\x24\x67\x2a\x93\x42\xb1\x2a\xcc\xa8\x9f\x11\x5a\xbb\xdd\x62\x18\x37\x16\x9e\x6d\xc5\x66\x26\x95\x86\x12\xda\x6e\x9a\xc2\x4d\xdc\x70\x50\x91\x4c\x93\x84\xc5\x95\xae\x80\xd8\xcd\x8a\x56\x3d\x04\x16\x0d\xc5\xf7\xb7\xc1\x42\xe5\x4a\x8d\x73\xe5\x7e\xdf\x61\xd2\xf5\x70\x72\xed\xc5\x6f\xaa\x6c\x2e\x0f\x26\xc8\x91\x60\x03\xac\x01\x9e\x03\x0c\xbe\x0a\x1a\x41\x2d\xa4\xbc\x24\x91\x4c\xb3\x04\x8e\x4e\x8b\x93\x55\xf6\xa1\xf3\x5b\x69\x64\x46\x57\xfb\x41\x8b\x3a\xf8\xa0\x5d\x87\xba\x56\x8a\x58\x17\x6a\x18\xbb\x66\x51\x67\x3d\x6c\x8f\xaf\x59\x14\x34\x61\x06\x48\xb6\xc8\x21\x44\x98\x13\xdb\xbe\xb7\x7e\xeb\x90\x43\x57\x6e\xfe\x16\xb5\x74\xe1\x55\x43\xb1\x84\x31\x1d\xda\xbf\x7d\x04\x34\x4e\x01\x5b\x08\xeb\xeb\x42\x18\x0d\xbf\x19\xf1\xe8\xad\x41\x5f\xfa\x44\x6a\x37\x16\xb4\x48\x93\x52\x93\xbd\xdd\xfd\xdd\xc1\x9a\xff\xb1\x06\x19\x7f\x11\xfc\x92\x03\xd4\x69\x06\xb8\xa1\x2c\xda\x8d\x87\x84\x6b\x97\x69\x8d\x70\x4f\x30\x2b\x5b\xf4\x37\x24\x4a\x12\x9d\xd3\x98\x5b\x35\x06\x3e\x35\x37\xe9\xbc\xb0\x5c\x7e\x6f\xf7\xd3\xae\x6d\xed\x75\x25\xc5\xae\x86\xe9\x8f\xc9\x05\xe2\xc4\xf8\x81\x56\xb2\x00\x5c\x28\x24\x41\x96\xf0\x88\xeb\x64\x05\x1c\x8b\xc8\x02\x31\xa9\x8c\xbc\xb0\xc5\x86\xc7\xd7\x5c\xbb\xe6\x3a\x72\x46\x5e\x60\x77\x3d\xc4\x70\xa2\x0a\x3a\xac\xef\x2f\x18\x4d\xf4\x02\x93\x44\x84\x14\x23\x6c\x90\x6a\x58\x89\xfd\xa6\x6d\xbc\xa4\x9d\x3b\x31\xbc\x5a\xb8\x16\xd7\x27\xd4\xd2\x72\x30\x4c\xf4\x87\xe6\x5d\xdb\xc9\x1a\x7a\xdd\xc5\xc5\xe4\x87\x4a\xdf\x76\xe0\xe2\x5a\x67\x2e\x75\x07\xbc\x01\x2c\x9f\xc9\x3c\xdd\x02\xde\xd1\x4d\xb0\xb2\x55\x03\x77\xd2\x21\x0b\x6b\xdb\xc8\x9d\x6c\x46\x23\xbc\x7b\x07\x77\xf2\xab\x2c\x00\x0c\x84\x4e\x93\x95\x47\x62\x50\x4c\x93\x1d\x33\xd4\x8e\x61\x4f\x66\x37\xfc\xc8\x68\x8c\x40\x19\x4a\x33\xda\x48\x75\x0b\xaf\xce\x82\x68\xc1\xdc\xba\x95\x03\x85\xd2\x32\x25\x0b\xfb\xda\xd5\xd2\x4b\x7b\x32\xc6\x70\x7a\x5c\x5d\x53\xce\x32\xe4\x70\xf6\x37\xcf\x8e\x7f\xad\xf1\x0d\xa4\x7b\xa5\x89\x47\x14\x92\x2d\xec\x11\xc5\x05\x12\x0b\x71\x67\x3a\xe2\xa5\x1d\x24\x3f\x90\x0e\x13\x20\x48\xbb\x42\xce\xfa\x40\x10\xd4\x6b\x9f\xeb\xd5\x59\x4e\x05\xe9\x2c\x6f\x80\x6c\x72\xb2\xda\x3d\x83\xde\x17\xf4\xe7\x80\x3b\xc6\xc5\x50\x23\x2a\xa4\xe0\x11\x4d\xf8\x7f\x58\x8c\x1d\xf2\x31\x7f\x0e\xf4\x9c\x88\x2a\x36\x82\xa0\xae\xb0\x8d\x3d\x83\x6a\x45\x73\x1c\xb5\x94\xa0\x7c\x78\xe4\x33\x7c\x5e\xfb\xac\x0c\xd2\x6d\x4e\x00\x69\x5f\x90\x1a\x5e\xb7\x93\xb9\x9b\x2d\x46\xba\xa4\x40\xd6\x41\x02\xf9\x7a\xfa\x38\x82\x55\x41\x81\x27\xb2\x70\x60\x46\x08\xaf\xb9\x35\xb2\xcc\xe8\x24\x9d\xbe\x3a\xba\xe3\x73\x22\x7c\xef\x79\x87\x25\xbc\x4e\x90\x20\xff\xc1\xb6\xaa\x77\x4e\x63\x27\xf4\xa8\x98\x33\xf2\xd2\xfc\xf2\x6f\x7f\xfd\xeb\xb7\x7f\x1d\xe3\xf0\x3e\x17\x42\x90\x93\x83\xd3\x83\xdf\xcf\x7f\x3e\x84\x12\xdc\xb6\x54\xed\x28\xd1\xb3\xeb\x34\xcf\x4e\x93\x3c\xbf\x68\x8a\x27\x14\x96\xb4\xe6\x22\xd5\x08\x03\x0c\x19\xa2\x88\x5a\x0d\x33\x40\xf3\x43\xa4\xdb\xd0\x5d\x6b\x8e\xda\x56\x9c\x31\x1d\x65\xe7\x32\xba\xec\xd0\x7a\x3a\x62\x59\xce\x22\xf4\xc6\x5d\x1c\x4e\x70\x74\x63\xc5\x9e\xbe\xbb\x28\x0b\x1a\x20\xeb\xa7\x84\xec\xfb\xd1\xfa\xeb\x8c\xe5\x7b\xc9\x32\xed\x1d\x04\x53\x1a\x5d\x5e\xd1\x3c\x06\xff\x19\xd5\x1c\x00\x8a\x11\x61\x30\x67\xb6\x59\x1c\xa6\x15\x22\x94\x9a\x6b\xc6\x8d\xbc\x1c\xdd\x14\xce\xe9\x0a\x8e\x31\x14\x81\x33\xca\x13\xf0\xd3\xda\x3e\xd8\x98\x77\x14\x65\xde\x71\x18\x7a\xce\x7b\x13\xcf\x5d\x5b\x6b\xe2\x05\x7d\xba\xef\x6b\xed\xb5\xcd\x7e\xdc\x62\x51\x67\x45\x5c\x5e\x69\x99\xdf\x8b\xba\x0e\xc6\xdb\x5e\x51\x97\xe5\xec\x5c\xcb\x46\x7d\x37\xc8\x7a\x2c\x06\x07\xbb\x21\x12\x33\x65\x33\x69\x98\xf0\x8d\xa1\x95\xb8\x80\x43\x48\x05\x94\x20\x3a\xdf\x99\xac\x84\x4f\x30\xef\xd3\xa3\xe4\x5b\x78\xd6\x7d\x15\x62\xb2\xba\x8e\xe3\x43\xf3\x76\x2c\x85\xd9\x0d\xcb\x5a\x0a\xdb\xef\x1c\x3e\x64\x3a\x42\xff\x70\xc0\xc8\x01\x9f\xd4\x4e\xbf\x1e\xac\x89\x72\xaa\x16\xd8\x0b\x9c\x5d\x73\x6d\xd1\x5f\x27\x32\xae\x77\xf0\x9f\xe7\x34\x62\x24\x63\x39\x97\x46\x18\x15\x42\xc7\xf2\x4a\x90\x29\x9b\x73\xa1\x1c\x29\x00\xa2\xdd\xd2\x0c\xa2\x3e\x5c\x79\xf8\xb9\x31\x39\xab\x40\xaa\xd8\x62\xa7\x48\x96\x47\xd3\xce\xb9\x1e\xaf\x02\x89\x05\x74\x42\x58\x7d\x4f\xe1\xb0\x67\xd8\xe7\xa6\xbc\x57\x08\x78\x72\xcc\x12\xba\xc2\x9c\xd6\x19\x17\x60\x39\xe6\x6a\xd0\x41\x5c\x0b\xbb\xde\xb9\xef\x6e\x9c\x07\x57\x24\x67\x34\x5a\xb4\x0b\x31\xf7\x81\xb0\x3b\x5e\x7d\x20\xac\xcd\x20\x7d\x20\xac\x0f\x84\x7d\xe6\xea\x03\x61\x7d\x20\xac\x76\x6d\xad\x95\xd4\x07\xc2\x1a\x5f\x7d\x20\xec\xf6\xab\x0f\x84\xdd\xe1\xea\x03\x61\x77\xbc\xfa\x40\xd8\xcd\x57\x1f\x08\x6b\x37\x99\x3e\x10\xd6\x07\xc2\xec\xf5\xc7\xf3\x0e\xba\xab\x0f\x84\xad\x0d\xd2\x07\xc2\xfa\x40\xd8\x9d\xaf\xad\x35\xf1\xfa\x40\x18\x5e\x7d\x20\xac\x7a\xfd\xb1\x44\x9d\x0b\x23\x4d\x8c\x41\xd9\xbe\x3e\x6f\x02\xa1\x0b\x1e\xd9\x68\x94\x9c\x55\x6a\xba\xf0\x51\xe3\xb2\xdf\x46\x00\x71\xe2\xca\x8a\x6c\xdc\xa9\x8c\x66\x6d\xac\xfd\x6a\xd9\x13\x2f\x93\x71\x19\x0e\x09\xe2\x20\x68\x56\x37\xaf\xbf\x7b\xb4\xca\xb2\x36\xc1\x8f\x87\x09\x7c\x6c\x49\x94\xa8\x83\x60\x47\x1f\xe8\x78\x76\x81\x8e\x6e\x9c\x84\x1d\x38\x08\x5b\x8b\x0a\x1b\xff\xbf\x58\xe4\x4c\x2d\x64\xd2\x78\xa3\x57\x36\xf9\x5b\x2e\x78\x5a\xa4\xd0\xf5\xd6\xec\x67\xbe\xf4\x89\x06\xaa\x6c\xab\x0f\x1c\x1b\x7d\x95\x41\x7b\x5c\xd7\x16\x17\x6a\x51\x6d\x9b\x7b\x55\x44\x11\x63\xd0\x16\x2e\xb4\x70\xbe\x1d\xfb\x27\xf9\x36\x20\x2f\xdb\xf1\x9b\x76\x42\x1c\xa1\x55\x61\x94\x6f\xbf\x69\x34\xc6\x3c\xcf\xba\xe1\xcb\x3f\x9c\x4d\x0e\x03\xbe\x4c\x85\x63\xcb\x5c\x2c\x65\x02\x54\xa5\x78\x93\x51\xd6\x1e\x91\x49\xb7\x37\x3b\x5a\x99\x1c\x5d\xc8\x88\xb6\x5a\x75\xd5\x6f\x66\x74\xe7\xaa\xe7\x68\x0e\x6b\x89\x08\xfe\x77\xd6\x9d\x5b\x73\xb7\xf6\xfa\x6c\xfb\xe3\x40\x00\x62\x07\x5e\xbc\x33\x02\xef\x9c\xdb\xd6\x55\x56\x04\x87\x86\x8b\xeb\x6a\xa5\x25\xc9\x12\x5a\xf6\xa5\x82\x15\xf8\x11\xe4\xc6\xe1\x82\x45\x97\x67\x36\x46\xbb\xa7\x18\xf3\xfa\xe4\x9c\xeb\x45\x31\x1d\x47\x32\xdd\x37\xc7\x18\xff\x6f\x9a\xc8\xe9\x7e\x4a\x95\x66\xb9\x51\x31\xad\x58\x1a\x45\x66\x14\x2e\xe6\xe3\x34\x1e\x8c\xc9\x47\x81\xd5\xf5\x65\x1f\xcc\x00\x5b\xc2\x3c\xdf\xe1\x7c\x4c\x99\xe1\x88\x12\x7c\x07\x01\x84\x9e\x99\xde\xb8\x0d\x50\x73\x6b\x31\xd2\x32\x3e\xfe\xf0\xb1\xf1\x9e\x73\x91\x0e\x9c\x24\x4f\x2d\x06\xde\x59\x2e\x48\x07\xb1\xef\x2d\x8a\x7b\x6f\x8d\x3a\xbb\x2d\xb1\xee\x2d\x44\xbb\xee\x20\xbe\xdd\x45\x6c\xbb\xbb\xb8\xf6\x17\x00\x85\x7e\xca\xf1\xec\x0e\x9d\x7e\x1d\xc5\xb1\x1f\x22\x86\xdd\xc9\x5b\xb7\x8d\x5d\x3f\x5c\xdc\xba\x9b\xd7\xed\xd2\xdc\x78\xaa\xb1\xea\x0e\x9c\xf7\x5d\x3a\xee\x3b\x73\xda\x7f\xb1\xd8\x74\xfb\xb8\xf4\x16\xc4\xa4\x5b\x13\x99\x0b\xae\x39\x4d\x8e\x58\x42\x57\xe7\x2c\x92\x22\x6e\x2c\xc7\x6a\x58\xa4\xfe\xfc\x28\x1c\xd6\x7a\xb0\xaa\x85\x1e\x0b\x6a\x21\xd7\x8d\xdd\x86\x85\x2d\x2e\xca\x61\xd5\x16\x88\x37\xe3\x2c\xb7\x32\x6e\x41\xb6\xc6\x55\x86\x55\x2f\x5d\x2e\xe2\x8f\xf2\x8a\xc8\x99\x66\x82\xec\x71\xe1\xd6\x71\x10\x18\x9b\xa5\xdf\xd2\x6f\x6b\xf3\xed\xcb\x17\xee\xe6\xe7\xe7\x90\x04\xd7\xab\x52\x5f\xde\x3f\x6c\x1f\xf4\x79\x07\xb1\xbd\x71\x56\x24\x55\x27\x31\x3a\x8e\xab\xfc\xe6\x65\x09\x1a\xfd\x12\xc6\xf5\xa7\x8d\x8a\x98\xd8\x4a\xb8\xe7\xb7\x68\xad\x33\x6e\xaa\xaa\x9f\xcf\xb0\xf9\x9c\x3f\xf9\xe2\x70\xd2\xbb\x93\xb7\xcb\x29\xf3\x48\x59\x2b\x5b\xa8\xe8\x3e\xd1\x4c\x95\x5e\xd1\xbd\xc7\x15\xd4\xc6\xfe\x90\xd3\x88\x4d\x3a\xd7\x11\xdc\x71\x22\x71\x91\x53\xcb\x00\xbd\xca\xe7\x0e\x8f\x60\x2c\xc6\xd3\xe4\xeb\x89\xa1\x52\x77\x56\x24\xc9\x0a\x7d\x0e\x95\xea\x6b\x8c\xc2\xd7\x8b\x79\xc1\xf1\xbf\xe1\x29\xa5\x62\x99\xe5\xd2\xca\xcc\xbc\x10\xc2\xf0\xe0\xb2\xf3\x1b\x28\x92\x00\x46\x4d\x2b\x25\xc3\x8a\xcf\xcd\xf4\x8d\xfc\x83\x6a\xe2\x32\x35\xb1\x32\xa0\xf9\xf5\x4c\xe6\x11\x9f\x26\x2b\xb2\xa0\x89\x6f\xf3\x43\xc9\x25\x4f\x12\x3b\xcc\x98\x9c\x33\x8d\x81\x0b\x94\x9d\x89\x14\x73\x98\x1c\x15\xae\xbd\x24\x8b\xcc\x6f\xa3\x84\x51\x51\x64\xf8\x3c\x23\x89\x57\xb2\xc8\xdd\xf3\xc6\x3e\xfc\xe1\x25\xb0\xe0\xc9\x30\x68\x62\x77\xeb\xc2\x96\x2e\x1a\x65\x14\x80\x77\x0e\x7c\x7b\x18\x8e\xe9\xf0\xd1\x55\xd0\xc2\x28\xcb\xe5\x92\xc7\x18\x43\x71\x64\x83\x76\xd9\xd8\xa6\xc8\x9f\x67\x21\xc5\x48\xb0\x39\x05\x45\xc5\x9e\x22\x5c\x33\x1c\x07\x73\x0b\x44\x0c\x8d\x8b\x8c\x86\x2f\xb3\x4a\x39\xff\x92\x63\xcb\xe5\x80\x72\x64\x4f\x48\x22\x21\x53\xb5\x10\x5c\x63\x1b\xff\x45\xa1\x49\x2c\xaf\xc4\xc0\xfa\xac\xb8\x22\x94\x4c\x99\xa6\x41\xae\xa9\x15\x70\x8a\x30\x41\xa7\x89\x59\x73\x48\xc5\xba\xd8\x48\x20\x32\x63\x54\x17\x39\x23\x73\xaa\xd9\x46\x3d\x07\xdf\xf7\x76\xf2\x72\x65\x1d\xac\x33\x52\x08\xc5\x5a\x8a\xf7\xce\x94\xa3\xbf\xfd\xa5\x19\x8f\xe0\x29\x93\x85\x7e\x10\xeb\xef\x6a\xc1\xa3\x45\xa8\xcc\xf2\x94\x29\x22\x8b\x9a\x59\xfc\xd2\xfe\x6c\xf3\x0a\xf5\x26\xe0\xa6\xab\xa9\xfb\x78\x83\xf7\xab\x0e\xc7\x50\xf6\xf7\x86\x0c\xf2\xa3\xd3\xf3\xdf\xdf\x1c\xfc\xeb\xf8\xcd\x98\x1c\xd3\x68\x11\x62\x72\x08\x42\x81\x69\x00\xa3\x58\xd0\x25\x23\x94\x14\x82\xff\xbb\xb0\x61\xe5\x3d\xff\xdb\x41\xa7\x88\xf4\x0d\xa5\xaf\xe1\x36\x8d\x76\xfc\xc6\xa6\x77\x30\x9a\xcd\xd8\x92\x8a\x41\x9b\x9a\x35\xf5\xc9\xc7\xb2\x57\x68\x22\x80\xc2\x05\x89\xf5\x47\xef\x8e\xcf\x21\x61\x3f\xcb\x11\xa9\x04\x32\xbc\xe0\x7b\x18\x69\xca\xcc\x2f\x6c\x7f\xe2\x31\x39\x10\x2b\xfc\x12\xcf\x14\x57\x24\xe1\x4a\x33\x90\x7a\x56\x6d\x73\x51\xf2\x9d\x17\x63\xf8\xdf\x0e\xa1\x71\x9c\x1b\xbd\xce\x27\xae\x45\x6b\x99\xa4\xa8\xf9\xf1\x69\x12\xbc\x80\x60\x1a\xf3\xd4\xde\xca\xd8\xce\x1c\x24\x09\x44\xc8\x50\x0c\x2a\x9d\x53\xcd\xe6\x3c\x22\x29\xcb\xe7\x8c\x64\x54\x47\x0b\x92\xd2\x15\x89\x64\x9e\x17\x19\x76\x33\x88\xa9\xa6\x63\xf2\x5a\xe6\x24\x75\x87\xd8\xec\x79\x23\x87\xcf\x37\x67\x0e\x94\x27\x3b\xfc\x27\x57\xaa\x60\x6a\xff\xe5\x8b\xbf\x7f\xf3\xd7\xbf\x3e\xab\x06\x78\x3e\xb5\x17\xf2\x5e\x82\x06\x78\xd4\xad\x02\xae\x3a\x36\x44\xe4\x62\x9e\x84\xfb\xab\x99\x00\x68\x6b\x65\xb6\xb5\x31\x47\xe5\x1b\x4c\x9a\x9a\x9a\x9d\x34\xe2\x2b\xe7\xd0\x51\xfb\xaa\x52\x0e\x3a\xc3\xca\xf2\x06\x19\x76\x24\x3e\x99\xb8\x83\x69\xf5\x9c\xb4\xd6\xc6\x36\x2b\x73\xa0\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\xd0\xfa\x5b\xdb\x66\x5f\x6d\x4d\xa0\x2e\x52\x9a\x8c\x7d\x7f\x32\xe9\x88\xe2\xbf\x18\xa6\x69\x46\x34\x54\xd5\x92\x4c\xb9\x55\xec\xd9\xb5\x66\xb9\x51\x34\xed\x4a\x3c\x6a\x9b\x34\x33\xc1\x07\xdc\x66\x18\x78\x38\x99\x55\xd3\xa8\xee\xb7\xd1\xcc\xcf\x7f\x94\x4a\x9f\x5a\x2e\x54\x6d\xf8\x53\x8e\x96\x02\xe3\xaf\xb0\x31\x23\x37\x94\x2e\x0f\x98\x22\xb1\x84\xac\x2e\x4c\x71\x5e\xf0\x16\xc9\x1a\xdb\xb3\x8d\xdb\xc5\xef\x2b\xeb\x79\xdb\x4a\xd5\x5c\x29\x60\x03\x59\x15\x2b\xc0\xe8\xca\x64\x6c\xb5\x33\x33\xad\x38\x90\x19\xb7\xa8\x67\xd6\x6b\xe3\xfd\xcd\xb0\x97\xcc\x79\x8a\xa8\xc0\x22\x93\x19\xcb\x73\xcc\x4a\x9f\xae\x5c\x72\x60\xeb\xc5\x6b\x75\x92\xb2\x5c\x6a\x19\xc9\x16\x9d\xdc\xaa\xd1\x6e\x3b\x1c\x10\x21\xc3\xbd\x6b\x29\xff\xfe\x68\x32\x24\x17\x87\x13\xe8\x6e\x75\x7e\x78\x31\xa9\xda\x2c\x3b\x17\x87\x93\x9d\x47\x25\x05\x71\x0a\x1f\xb8\xa8\x1b\x0c\x52\x71\x41\x19\x6d\x72\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\x7f\xa0\x4a\x2f\x97\x76\xeb\x9f\xb9\xb9\xe4\x2b\x95\x4b\x16\xa3\x96\xee\x7e\xc1\x44\x9c\x49\x6e\xf4\xc5\xbe\x0e\xec\xfe\xbf\xee\xeb\xc0\xee\x7c\xf5\x75\x60\x7d\x1d\xd8\xfa\xb5\x35\x89\xb3\x7d\x1d\xd8\xf3\x8a\xe0\xf7\x75\x60\xf7\xbf\x1e\x3d\x70\xdf\xd7\x81\x6d\xbe\xfa\x3a\xb0\xbe\x0e\xec\x6e\x57\x5f\x07\x76\xff\x6b\xeb\x52\x8e\xfa\x3a\xb0\x7b\x5d\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\x70\xf5\x75\x60\x37\x5c\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\xef\xea\xeb\xc0\xfa\x3a\xb0\x67\x9d\x1e\x4b\xfa\x3a\x30\x7b\xf5\x75\x60\xcf\x22\x09\x90\xf4\x75\x60\x77\xba\xfa\x3a\xb0\xbe\x0e\xac\xc9\xd5\xd7\x81\x3d\x17\xa7\x4c\x5f\x07\xd6\xd7\x81\xfd\x71\x14\xdd\xbe\x0e\xac\xaf\x03\xeb\xeb\xc0\xfa\x3a\xb0\x5b\x67\xd1\xd7\x81\x3d\x07\x13\x30\x67\x8a\xff\x87\x4d\x64\xc2\xa3\x55\xeb\x2c\xc5\x33\xdb\xf8\x58\xd9\x61\x49\x06\xe3\x06\xa9\x55\x2d\x2a\x4f\xb6\xac\xe0\xe6\x2c\x20\x5c\x58\x78\xe3\x9b\x3f\x7f\x01\x12\x6c\x45\xf1\x8d\x7b\xc1\xd3\xe6\x91\x94\x91\x6b\x40\x80\xe4\x6b\xe6\xb7\x68\x6d\x22\x84\x2f\xd2\x51\x3e\xf8\x6e\x58\x11\xe9\x77\x82\x96\x9e\x83\xf1\x1b\x37\x08\xcd\xb2\x84\x33\x35\x26\xe7\xbe\x01\x0f\x70\x2f\xf5\x8a\x44\x59\x31\x24\x29\x4b\x65\xbe\x6a\x61\x4d\x74\xa0\x70\x56\x56\xad\x23\x92\x9d\xe1\x98\x8e\x0c\xc6\x88\xc8\xb2\x64\x85\xca\x54\x59\x4a\xea\xa9\xc6\x1d\x73\x89\x41\xdd\xa9\x65\x79\x70\x5d\x31\xc3\x4e\xa5\x3e\xb3\x1b\xfe\xd1\x72\xed\x6f\xca\x2a\xa7\x5a\xa6\x3c\x6a\xc2\xb0\x91\xc7\xb6\xcf\x29\x3f\x94\x69\x56\x68\x56\x61\xdb\x48\x2c\xd4\xe4\xb8\x0a\x4d\xb8\xf6\xd9\xe0\x91\x14\x33\x3e\xb7\xaa\xf8\x3e\x76\x74\x1f\xf9\xf7\x19\x05\x5d\xd4\x9f\x60\x2a\x78\x94\x50\xde\x3c\x6e\x5f\x4d\xad\x3a\x84\xb1\xa0\x42\xb7\x4c\xae\x82\x1c\x5d\x4f\xad\xa1\x4f\x5c\xe2\x78\x4c\xc6\xee\x2b\xfc\xf1\x10\x33\x7d\x8d\xfd\x01\x4a\xe7\x86\x05\xfd\x28\x4a\xf5\x58\x10\x9a\x64\x8b\xdb\x15\x64\x33\x91\xa3\x95\xa0\x29\x8f\xdc\x8e\x39\x48\x12\x19\xa1\x41\x54\x55\x91\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x21\x24\x45\xb2\x32\xbb\x49\x31\xed\x02\x1f\x76\xf9\x1b\xe7\x60\xb5\x4f\xc0\x68\x99\x7c\xb1\x51\x1b\x82\x05\xc1\x6a\x28\x26\xcc\x29\x93\x82\x11\x26\x74\xbe\x32\x6b\x37\x91\xf1\xb9\x59\xbe\xca\xdd\xad\x8b\xa4\x5a\xe6\x5c\x74\x91\x6f\xd1\x32\xd7\xa2\x9b\x0c\x89\xf6\xd9\x11\xeb\x61\xde\xa0\x6e\x31\x4c\x7c\xac\xac\x6a\x26\xe3\xf1\x86\x53\xe9\x54\x83\x89\x8c\x8d\x80\xcb\x59\xd8\x0a\xcf\xda\x87\x70\x40\x52\x7a\x09\x26\x36\xd5\xa5\xe4\xa3\x4b\xca\x13\x73\x84\x36\xd4\xe3\xb7\x4b\x9c\xe8\x40\x35\xe8\xba\x18\x8c\xb4\xdd\x41\x5d\x16\x73\x11\xe8\xdc\x95\xf2\x66\xe8\x0f\x64\x4d\xf0\xbe\x81\xb1\x82\x74\x2c\xb3\x27\x52\x7a\x0d\x36\x2b\x4d\x65\x21\x34\x56\x78\xa1\x7c\xf6\x4c\x1f\x93\xd6\xb6\x4e\xf2\x92\x6e\xd8\x0e\x8d\x5d\x09\xcc\xa4\x8b\x6c\x72\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfe\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xbd\xf7\x71\x0c\xff\xf8\xf3\xe0\xfb\xc1\x27\xf7\xc7\xd7\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x5f\x35\x9e\x72\x6b\x1f\x75\x77\x1e\xea\x8e\xfc\xd3\x5f\xc4\x3b\x6d\xf3\x38\x3b\x3a\x8b\x36\x07\x7d\xed\x34\x5a\x0f\xd2\x6d\xa7\xd1\x49\x49\x30\x44\xfc\x38\x5c\x11\x99\x72\x6d\x0c\x38\xa3\xd6\xd0\xb0\xf2\xac\x66\x9e\x58\x3e\x00\xb5\x97\x14\x4a\xc4\x82\xaa\xad\xc0\xaa\x91\xce\x15\x0b\xe6\x91\x20\x3c\xcd\x12\x96\x32\xa1\xe1\x3c\x8f\x9c\x26\x08\xf6\xe2\xb8\x9c\x49\x84\x1a\x3b\xbb\x8e\x18\x8b\xed\xc3\x7a\xd6\xf1\xf9\xab\x67\x1d\xcf\x91\x75\xb4\x76\x5e\xd4\xf9\x46\x30\x9c\x35\xc6\x94\xf3\xfb\x80\x47\xc3\x57\x99\xc8\x19\x44\x35\x96\x3c\x2e\x68\x12\xe2\x5a\x38\x84\x85\x71\x68\x2c\xa5\x74\xb5\x66\x1b\x71\xc1\x43\x40\x8c\xa1\x8f\x3b\xc1\x8d\x56\x2b\x28\xbd\xdd\x3b\x07\xc9\x15\x5d\xa9\x1d\xc4\x4e\x12\x52\x8c\x6a\x03\x10\x99\xbb\x68\x55\xa8\x7e\x6e\x28\x99\x59\x7b\x99\x6a\xc9\x8c\x55\x66\x77\x77\x95\xbf\xd3\xf9\xb3\xec\x0c\xcb\xac\x2d\xb3\x2d\x20\xd2\xa5\x9d\x35\x59\xa5\x21\x2d\x27\xee\xdd\xa5\xd5\x79\x63\x84\x0a\x90\x28\xcc\x97\x33\x69\x5e\x1c\x60\xae\x66\x33\x16\xe9\x57\xb6\xf6\x67\xc3\x6f\x30\xf7\x45\x73\x51\xd0\x24\x59\x05\xfd\x4f\xa5\x20\xec\x9a\x6b\x52\x08\xcd\x13\x43\x49\x92\xb3\x79\x91\xd0\xd0\x1e\xb5\x4f\x74\x41\xc8\x78\x4c\xde\x09\xa3\x8f\xdf\x72\xb3\x11\x16\x09\xd3\x86\x8a\x14\x8a\x79\xab\xe4\x87\x10\x60\x65\x43\x96\xaf\xee\xe6\xeb\xc3\x58\x76\x77\x94\x5d\xb2\x63\x3e\x9b\x99\x51\xa0\x94\x5f\xc8\x3c\xa5\xeb\x4f\xb0\x75\xc8\x98\x87\x15\x22\x71\x00\x26\xdb\x8e\xb1\x1f\x22\x9a\xef\x84\xfe\x80\x83\x44\x2f\x64\x31\x5f\x6c\xa4\xa2\xd2\x10\x74\x33\x13\x56\x2e\x3c\x5a\xbf\xc5\xc8\x1d\x11\x31\x14\x73\x92\xe1\x7e\xba\xa2\x5c\xaf\x7b\xbf\x31\x77\x02\x69\xe4\x52\xf8\x20\x8a\xc9\xe2\x20\xf3\x51\xb0\x6b\x5d\x7b\xca\x98\x9c\x60\xfd\xca\xf0\xa6\x3b\xfc\x24\x83\xc8\xa1\x8b\xf5\xae\xbf\x17\xf7\x99\x84\x00\xd4\x81\x37\x52\xb1\x72\x59\x4d\x10\x15\xc4\x84\x43\x9f\x30\x95\xac\xca\xf5\x6d\xe4\x90\x6d\xc5\x20\x15\x8b\x8a\x9c\xeb\xd5\xa1\x14\x9a\x5d\x37\xca\xec\xa8\x72\xb2\xf3\xea\x80\x15\x5e\xe6\x1e\x46\x64\x86\x95\xe8\x35\xa8\xbf\x85\x2c\x92\x18\xe0\x25\x0a\x01\xbb\x1a\x71\x83\x98\xc6\xe5\x01\xce\x02\x56\x6f\xfd\x21\x2e\x8e\x8c\xe1\xed\x7f\x17\x7c\x49\x13\x26\x74\xf0\x8b\x09\x44\x4e\xc3\x1f\xdd\x55\x77\xd1\x54\x5d\x96\x8a\x0b\x1b\x65\x32\x2e\xf5\x94\x7d\xf7\x4a\xf0\x11\xbb\xd6\x4f\xd1\xd9\x08\x1c\x7f\x92\xf3\x25\x4f\xd8\x9c\x1d\xab\x88\x26\xa0\x9f\x75\xa3\x12\x1f\xdc\x30\x3a\x2c\x7c\x2e\x13\x65\x64\x87\x51\x49\x8d\xf4\xc2\xd4\x03\xf0\xe8\xcd\x29\x17\x88\xd4\x97\xb9\x1f\x2b\xcc\x61\x30\x5a\x6e\x46\x73\xb3\xc0\x3e\x57\x01\x98\xda\x54\xca\xc4\x62\x30\xc0\xa9\xb2\xe3\x5b\x34\x12\x21\x7f\x17\xec\xea\x77\x33\x9a\x22\xb3\x84\xce\x4b\xe6\xc8\xf4\x5a\x96\x51\x39\xf4\x8d\x2f\x00\x00\x07\x85\x61\xdd\x86\xd7\x96\x09\x1b\x21\x3f\x78\x45\x5e\x0e\x60\x3b\x53\x45\xfc\x18\x31\xf9\x66\x00\x5c\xe0\xf0\x60\xf2\xfb\xf9\xaf\xe7\xbf\x1f\x1c\xbd\x3d\x39\x25\xa7\x52\x33\xd4\xdd\x03\x41\x1a\x79\x47\xb9\x99\xa5\x8f\x63\x8c\xa5\x1a\x83\xaf\x08\xaa\x68\x44\x2c\xaf\x54\xe3\x68\x0e\x6e\x3f\x43\x3c\x46\x45\x33\x77\x35\xcd\xe8\x94\x27\xbc\x8d\xa6\xbc\x56\xd9\x12\x0e\x0a\xb2\x26\x8e\xf7\xe3\x5c\x66\x48\x04\x97\x5c\x13\x38\x7a\x2b\xe1\xfb\xb0\x42\x17\xd6\x77\x56\x1d\x70\x9e\x53\xa1\x4b\xb5\xa3\x5c\xb3\xdc\x08\x6f\xc0\xa3\x6a\xb9\x1c\x8f\x67\xc0\x74\xe1\xed\xa4\x71\x77\xf8\x2a\x07\x71\xcc\xe2\x0a\xf9\x5b\x67\x31\x6e\x5b\x5d\xe4\xa1\x7b\xb9\x20\x7c\x4f\x26\xef\xce\x4f\xfe\x6f\x6d\x1f\xaf\xb2\x76\x05\x5a\xdd\x60\x75\xe5\x32\xeb\x6c\x75\xcf\x2c\x16\x54\xbf\xbe\x5b\xb1\xbe\x5e\x5a\x76\x53\x16\x70\x56\x88\x2a\xc8\x72\x39\x3e\x49\x65\xcc\xc6\x64\xe2\xf3\x13\xab\xdf\x86\xf6\x43\xce\x88\xb9\x45\x68\x0e\x16\x53\xa0\xa2\x69\x89\xb8\x48\x15\xb4\xc8\x90\x91\xcf\x68\xa2\x1e\x9b\x1b\xb7\x91\x8d\x46\x8f\x78\x2b\x0b\xd1\x4d\xde\xbf\x1f\x8d\xc4\x4c\x48\x6d\x15\x6b\x33\x4b\x40\xe0\xcc\x65\x44\xd0\xc7\x18\x14\x81\x55\xe4\x9b\xc2\x1c\x49\x27\x1a\xb9\x72\xc4\x9e\xf8\x91\x31\xbd\xa4\x50\xac\xae\xa0\x5b\xd1\x58\x7a\x1d\xcd\xe8\x39\xa3\x31\x38\x0e\x32\xaa\x17\x68\x2a\xa6\x54\x5d\xb2\x18\x3f\xb0\xaa\x99\x0f\x00\x83\x8d\xef\x1e\x75\x61\xe6\xed\x62\xbd\xa0\x92\x61\x65\x09\x44\x89\x8d\x69\xfc\xa8\xab\xde\xe2\x10\x1a\xa2\xbc\x13\xc9\xea\x4c\x4a\xfd\xda\x03\x7b\x75\xb2\x03\x7e\xb1\xda\x72\x35\x00\x0f\xea\x24\x85\xe7\x8e\x60\x35\xe0\x50\x85\x98\x62\x47\xe5\x8a\x3f\xf5\x23\x95\x17\xe2\x40\xfd\x90\xcb\xa2\xb1\x10\x5b\x53\x36\x7f\x38\x39\x02\x56\x54\xd8\x14\x69\xa1\xf3\x15\x80\x19\xae\x23\xd2\x7b\xc3\xe0\xbd\x4d\xf2\x0e\xcf\x44\x99\x8f\x4b\xde\xd2\x15\xa1\x89\x92\x8e\x96\x36\x3c\x5f\xb7\x42\xad\x89\x6b\xbe\x9e\x4a\xbd\x58\xb3\x6d\xcd\x81\x5a\xff\xdd\x30\xc8\x98\x2e\xf3\x9a\xb8\x58\xfb\xb9\x86\xd8\x6f\x96\xb3\x88\xc5\x4c\x44\x8f\xbd\xec\x8f\x9d\x68\x0c\x5b\xe7\x54\x0a\x73\x30\x3b\xd9\x3c\x27\x3e\xc3\xdc\x92\x34\xdc\x2a\x10\xdc\xb7\xd6\x1f\x05\xd7\x29\x1c\xcb\x42\x81\xeb\x69\x06\xe6\x23\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\x3c\x64\xaa\xd1\x9d\xc1\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\x18\xba\xc7\xec\xa3\xde\x9f\x1c\x91\x17\x64\xcf\x3c\x6b\x00\xfb\x67\x46\x79\x02\xc9\xec\xe0\x53\xad\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\x00\x13\x22\xc8\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x05\x4f\xdd\xb9\x5a\xce\x8f\x61\x58\x12\x39\xaa\xc3\xaa\x63\x12\x71\xec\xbc\x29\xa1\xd7\xbc\xb2\x57\x86\x37\xa8\x89\xc0\x27\x28\x26\xf5\x31\xa3\x9c\x50\x11\xcb\x74\xed\x61\x46\x89\x64\x95\x5e\x2e\x63\xd2\xef\xbe\xea\xb5\x25\x4e\xa1\x84\x2d\x59\x0b\xb4\xf3\x7a\xef\x1a\x33\x9a\x21\x8e\xdb\x11\x30\x3c\x49\xe8\x94\x25\x36\xe1\x14\xd3\xd8\xd7\x77\xe0\x63\x57\xc1\xe6\x32\xe9\x0e\xb6\xe3\x4c\x26\x0c\xcb\xca\x1c\x21\xcc\xf0\x4f\x82\x0e\x30\x48\x57\x74\x00\x6b\xb0\x42\x07\xb0\x6b\x9f\x02\x1d\x8a\x16\xa2\x9e\xd4\xe9\x60\xf4\x86\x2a\x1d\x40\x78\x6f\x3b\x1d\x14\x8b\x22\x99\x66\x93\x5c\x1a\xb3\xb3\x33\xd9\x64\x87\x2d\x63\x86\xe8\xd8\xd8\x90\x82\x0e\xb2\xa0\x7a\x33\xcd\x83\x82\x52\xaa\x51\x48\xb8\xaa\xd2\xff\x15\xc8\x2c\x60\x3d\x75\x41\xe6\x46\xa9\x84\x17\xcd\x2f\xed\x17\x4f\x59\x1c\x74\x81\xc9\xd0\xc2\xd9\xd9\x89\x34\x92\x11\x4d\xa0\x9b\x4d\xbb\x2d\x47\xea\xdb\xae\x3e\x70\x50\x46\x0c\x31\x4a\xf8\x2c\xa8\x98\xa0\xe0\x68\x71\x2e\x4c\x21\x63\x16\xc4\xb2\x31\x0b\xfb\x02\xcb\x4d\xe1\x3e\x57\xc1\x6c\xf4\x0a\x17\x56\x8e\x2b\xbf\xd6\xd2\x62\xb2\xbf\xf5\x3d\x72\xcc\x04\x99\x80\x7c\x86\x8c\xea\xc5\x90\xe4\x2c\xc1\xda\x67\xcb\x04\x2e\xd1\x82\xdc\x85\x23\xe1\x06\x75\xe7\xc1\x3d\xda\x15\x58\x94\x23\x83\xf6\x34\x43\x4e\xcb\x15\xd9\x79\xe3\xde\x7d\xc7\xde\x73\xfa\xee\x22\x4c\x1e\xa2\x62\x85\x19\x84\x98\x81\xf3\xd8\x8c\xb7\x53\x01\xb4\x83\x54\xf0\x8b\x8d\x8e\xd0\x4b\x2e\x62\x5b\x45\x5c\xa1\xa5\x6f\x5a\x87\x6a\x32\xd4\xa7\xf3\x38\x64\x3d\xaf\xc8\x47\x41\x3c\x41\xc9\xa8\xf1\xee\x39\x43\x8d\xda\xb9\xf0\x46\xb7\xfb\x65\xfd\x43\xea\xc3\xbc\x17\xb0\x35\xcc\x73\x47\xc6\xb0\x5f\xbf\xcf\xbd\xcb\xa3\xe2\x16\x5b\xe6\xd8\xb5\x91\xf3\x0b\x0e\xeb\x34\xfe\xc8\x6c\x69\xcd\xc5\x5c\x85\x86\x0e\x4d\x92\x8a\xaf\x7c\x93\xa5\xe3\x56\xd8\xb7\x28\x5c\xb7\x30\x6a\xe8\x07\x4f\xc5\x4a\x49\x8c\xb6\xf1\xc4\x6d\x94\x79\xaa\xe8\x61\x6e\x28\xa1\x39\x4d\xce\xb3\xe6\x3d\x55\xc8\x1a\x7e\xff\xdb\xf3\x83\xea\xd0\x20\xcb\x6d\xe9\x0d\x83\xef\x09\x8d\x53\xae\x14\xf8\xc9\xd8\x74\x21\xe5\x25\xd9\xbb\xb5\xb5\xe4\x48\xf1\xb9\xda\xb7\x7b\x7e\x64\x66\x3f\x20\x5c\x24\x3e\x69\x0a\xcc\x64\xa1\x7d\xb5\x0f\x3c\x24\xf2\xb3\x80\x35\xb4\x8d\xb6\x6c\x2e\xc3\xfa\x34\xb1\xb5\x96\xd9\x05\x8f\xce\xb0\xd7\x97\xa7\x5d\xc5\xf4\x67\x97\xe8\xd4\xee\xed\x3a\xac\xfc\x46\x3a\xa2\x72\xf9\xe8\x44\xb2\xba\x47\xc4\x54\x77\x68\xd6\x3f\x96\x63\x92\x98\x61\xfe\x29\x83\xe4\x28\x7a\x63\x0e\x1e\xb8\xad\x77\x01\xa3\xca\xfe\x74\xb7\x9a\xe3\x99\x18\x6a\x52\x48\xda\x55\x61\xc0\xb7\x6c\xf2\xe6\x31\x79\x31\xab\xd6\x28\x2c\xe1\x4c\x90\xbd\xed\x95\x2d\x6d\x5c\xfa\xb1\x96\xae\x49\x5c\xca\xaf\xcd\x53\xc2\x5f\xd5\x52\x53\x85\x14\xa3\xcd\x5f\x0f\xc6\xe4\x44\xf8\x84\xfe\xa1\x79\xdb\xf0\x46\x97\xc1\xa5\x0d\x33\x0c\x1b\x0c\xc2\xfc\x43\xff\x93\x51\xb2\xf2\xa2\x83\x9d\xd1\xc6\xab\x4c\x42\xcf\x72\xa7\xc7\x06\x3c\xcc\x76\x50\x23\x62\x9c\xac\x6c\xe3\x71\x36\xb7\x7c\x29\xaf\xf3\xd3\x88\x23\x90\xd6\xd9\xb9\x41\xda\x70\x07\xa9\xb9\x61\x12\x32\x5f\x8f\x5b\x4d\x64\xbc\x9e\x9b\x6c\xc1\x59\x3d\x44\x42\xa0\x0b\x09\x69\x2d\x81\x00\x25\xd5\xf6\xca\x8a\x6d\x0a\xbc\x35\xd1\x31\xbd\xb9\x3a\x72\x89\x2f\x15\xb4\x89\x1b\x96\x05\xad\xbe\xd3\x9c\xcf\xa8\xfe\x1f\x38\x94\x3e\x9f\xd3\xc1\x46\x4e\xfc\xcf\x99\xab\x7d\xb0\x3d\x23\xa1\x56\x5d\x4b\xe7\x01\xb0\xa9\xee\x36\x6f\xd4\x18\x60\x34\xa7\xa9\x61\x85\x8a\x58\x12\x4c\xd9\x9c\x63\x5e\xa1\xe7\x6b\xbb\x41\xb2\xfc\x10\xd5\x26\xae\x49\xca\xe7\x0b\xdc\x28\x84\x02\xc0\x16\x71\xb1\xb9\x44\xd2\x18\x7a\x4d\x43\x59\x04\xcd\x53\xc3\x5f\x69\xb4\x80\x40\x1f\x15\x24\x2e\x72\x68\x9f\xa4\x19\x8d\x57\x23\xa5\xa9\x36\x1a\x25\xcb\xad\x5d\xe6\xe6\xdf\xf7\xca\xbb\xf5\xea\x7b\xe5\xdd\xf1\xea\x7b\xe5\xf5\xbd\xf2\xd6\xaf\xad\x49\xb2\xec\x7b\xe5\x3d\x2f\x94\xe3\xbe\x57\xde\xfd\xaf\x47\x07\x37\xee\x7b\xe5\x6d\xbe\xfa\x5e\x79\x7d\xaf\xbc\xbb\x5d\x7d\xaf\xbc\xfb\x5f\x5b\x07\xcb\xde\xf7\xca\xbb\xd7\xd5\xf7\xca\x5b\xbf\xfa\x5e\x79\x37\x5c\x7d\xaf\xbc\x1b\xae\xbe\x57\xde\xfa\xd5\xf7\xca\xbb\xdf\xd5\xf7\xca\xeb\x7b\xe5\x3d\xeb\x16\x22\xa4\xef\x95\x67\xaf\xbe\x57\xde\xb3\x68\x94\x40\xfa\x5e\x79\x77\xba\xfa\x5e\x79\x7d\xaf\xbc\x26\x57\xdf\x2b\xef\xb9\x38\x65\xfa\x5e\x79\x7d\xaf\xbc\x3f\x8e\xa2\xdb\xf7\xca\xeb\x7b\xe5\xf5\xbd\xf2\xfa\x5e\x79\xb7\xce\xa2\xef\x95\xf7\x1c\x4c\x40\xa5\x63\xde\x08\x62\xf3\x2e\x68\x40\x36\x8d\x3b\x28\xbe\x9f\x16\xb3\x19\xcb\x81\x73\xc1\x93\xd7\xd2\xaa\x4a\xe0\xc3\x7a\x28\x97\xe9\x21\x00\x0b\xd9\x8a\x97\x1b\x7e\x6e\xab\xfd\x01\x0a\x33\x67\x0a\xb0\x70\x04\x39\x7e\xf7\x7a\x03\xf4\x50\xe3\x7c\xc3\xa6\xd9\xd3\x30\xe7\x77\xa2\x59\x14\xfe\x06\x82\x6f\xaa\xc0\xb2\x74\x8f\x12\xa9\x6c\xea\x3b\x10\x2b\x5a\x50\x21\x98\xb3\xf7\xb8\x06\x3f\xca\x94\x31\x41\x64\xc6\x6c\x0c\x9c\x12\xc5\xc5\x3c\x61\x84\x6a\x4d\xa3\xc5\xd8\x3c\x49\x38\x62\x97\x79\xea\xf6\x13\xa5\x73\x46\x53\x24\x7a\xce\x52\xca\x71\x28\x42\xa3\x5c\x2a\x45\xd2\x22\xd1\x3c\xf3\x83\x11\xc5\xa0\x24\x05\x05\x95\x27\x06\xe4\xcb\x95\xc9\xed\xc3\xf2\x69\x76\x5a\x52\xd4\x91\x90\x87\xd0\x57\x20\xcd\xf4\xca\x67\xf8\x32\x32\xe3\xb9\xd2\x24\x4a\x38\x48\x6b\x78\x22\x16\x27\xc3\x78\x1e\x5f\x5c\xd8\x99\x2a\x3b\x55\x11\x83\xda\x9a\x69\x85\xf9\xb2\xe5\x80\x76\xa8\x98\x2b\xab\xe6\xab\x21\xa1\x0e\x98\x0c\x09\xed\x66\x0a\xa4\x76\x92\x05\x47\xb7\x1f\x05\xc3\x85\x00\xcd\x3e\xa1\xb8\xdc\xe8\x80\x3c\xe6\x36\xe7\xb0\x52\x0f\x51\x2a\x14\xb6\x7d\x4e\xed\x18\xc0\x02\x08\xb6\x34\x7b\x80\x45\xcc\xc8\x57\x7a\xc3\xae\x7f\xf0\x4d\x1f\x08\xc5\xb7\x4c\x29\x3a\x67\x93\x86\x81\x86\x9b\x2c\x32\x88\x35\x94\x0b\x03\x5b\x21\xa9\xb4\x28\x0c\xf3\x36\xab\x6a\x10\x49\x71\x4e\x5e\xf9\xb9\xca\xb9\xd6\x0c\x16\x15\x20\xec\x20\x22\x5a\xaf\x70\xdf\xad\x65\x7f\xbe\x75\x83\x94\x3f\x36\x4c\x5d\xc4\x98\x8b\x39\x65\x64\x9a\x73\x36\x23\x33\x0e\x09\x9e\x90\x72\x39\x44\x44\x23\x8a\x5e\x00\xa5\x8c\xbd\x2b\x85\xd3\x65\xdd\xbc\xc6\xe4\x17\x3b\x31\x9d\x17\x22\xa2\x01\x58\x2c\xd4\x68\xf2\x19\x99\x43\xca\xa6\xd5\x16\xff\xf2\xe2\x1f\x7f\x23\xd3\x95\x11\x69\xa0\x59\x69\xa9\x69\xe2\x5f\x32\x61\x62\x6e\x68\x85\xc7\xb3\x5a\x65\xe8\x29\x00\x5d\x81\x70\xe2\x2f\xbf\xb9\x9c\x56\x65\xec\x7e\xcc\x96\xfb\x01\xfd\x46\x89\x9c\x6f\xea\xa3\xf7\xe0\x10\xe2\x1b\xb6\x59\x37\x5d\x11\x1c\xb4\x16\x59\xc8\x2b\xd4\xf5\x37\xec\x9e\xb2\x60\x29\x93\x59\x91\xa0\xd3\xf9\xb5\xaf\xcf\x2d\x14\x5b\xaf\xa2\xdb\x78\x2e\xc0\x4d\x6a\x87\xa8\x03\x93\x63\xa6\xae\x7b\xa4\xb4\x55\x27\xd6\x91\xe7\x11\xb6\xc0\x10\x7a\x4d\x93\x64\x4a\xa3\xcb\x0b\xf9\x46\xce\xd5\x3b\x71\x9c\xe7\x32\xaf\xce\x25\xa1\x86\x5b\x2e\x0a\x71\x89\x9d\x60\x3c\x06\x81\x9c\xdb\x50\xae\x2b\x71\xd8\xf4\xc2\x58\x90\xee\x98\xf0\x7a\x63\x04\x76\xcd\x4b\x5b\x47\x10\x66\x9e\x8f\x3b\x32\x1c\x5f\x85\x9b\xed\x9b\x17\x7f\xf9\x3b\x6e\x5d\x22\x73\xf2\xf7\x17\x90\xcd\xad\x86\x78\x88\x81\xb7\x19\x41\x91\xd2\x24\x31\x66\x43\xb8\x29\x0d\xa1\x37\x6d\xc2\x07\xdf\x83\xba\xfd\x76\xbb\xb3\x2a\x75\x71\xf1\x2b\xf6\xd1\xd0\x8a\x25\xb3\x21\xd6\x2b\x79\xb3\x66\x17\x04\xc3\xae\xe5\x3e\x50\x34\xb6\x05\x0a\xd0\x52\x26\x45\xca\x8e\xd8\x92\x77\xd1\xec\xb3\x32\x9a\x33\xf5\x13\xae\xa0\x34\x6c\x9a\xc8\xe8\x92\xc4\xf6\xcb\x20\xbf\xa5\x0e\xb5\xfd\x74\xfb\x36\x87\xef\x5f\xc9\xed\x49\x69\x96\xf9\xea\xa1\x9c\x5e\x55\x88\x01\x67\x12\x0a\xfe\x9f\x7e\xdf\x66\x7c\x23\xc3\x37\x1b\x0f\xd1\x38\x21\xa8\xbd\x8f\xba\x9c\x7d\x47\xdd\x39\xcb\x01\xdd\x69\xc8\xe0\xdf\x58\x6f\xb2\x56\x2f\xe9\x4b\xee\xfc\xc6\x40\x05\xc0\x6c\x1f\x60\xc9\x8f\xd6\x5f\x98\xb4\x4e\x6c\xaa\xd0\x45\xdc\xd2\xe2\x92\x92\x8c\xe5\x8a\x2b\x23\x97\x7f\x86\x03\x85\xbd\x4d\x4b\x17\xe0\xe3\x10\x01\x0f\x37\xe0\x13\xb7\xe7\x94\x13\x19\xdb\x01\x81\x15\x22\x36\xf3\x06\xb5\xb6\xaa\xd5\x76\x28\x50\x1f\x9b\x55\xfe\x5c\x52\xb3\xca\x29\xcd\x27\x9e\x55\xe2\x5d\xcf\x89\x41\xc2\xfb\x3d\x55\xfe\xe8\x27\xdf\x11\x1b\x00\xc6\x68\x17\xb7\xca\x09\x2b\xc6\x23\x1e\x94\x40\xa5\xb7\x76\xe0\x98\x60\x14\xdc\x9c\x09\xfb\x53\xb2\xfb\x6a\xf7\x51\x99\x24\x92\x28\x97\x19\x9d\xb7\x6a\x96\x53\xa3\x54\x7d\xd8\x10\xaa\xc1\x98\x41\xf0\xbd\xc7\x35\x83\xbb\x58\x5c\x22\xd1\x00\xce\x10\x46\x47\x1d\x81\x5d\x6f\x37\xd0\x6d\xaf\xe8\x8a\xd0\x5c\x16\x22\xb6\xfe\x25\xef\xe0\x7b\x5b\x7b\xf0\xa9\x14\xac\x6c\x22\x5c\x6d\xbf\x0d\x1e\x7d\x2e\xc8\xcb\xf1\xcb\x17\xcf\x45\x52\xc1\x1b\xd6\x24\xd5\xa9\x97\x54\xc8\x9f\x1e\xf5\x5d\x1d\xa4\x7c\x47\xef\xfb\xd6\xba\x58\x4a\xc4\x78\xee\xf0\xa8\xe1\xa3\xab\x9c\x6b\x16\xf4\x0a\xdd\x03\xc3\xc5\xd8\x87\x01\x5e\xc3\x60\x53\xab\x86\x96\x44\x6a\x07\x90\xa1\x8a\xe9\x17\xe4\x5b\x96\x41\xc1\x71\xdb\xe4\xe1\x52\xb7\xb0\xb0\x90\x50\x3b\x3b\x64\x0f\xef\xdc\xc5\x52\xe7\xc1\xa3\x6e\x2d\x4b\xb4\xe3\xeb\xac\x05\x88\x65\xad\xaa\x3e\xa3\xe0\x83\xcb\x3a\xa4\xe0\xbf\xd8\x82\x2e\x19\x94\x78\xf3\x84\xe6\x09\xc4\x1c\xcf\x71\xee\x64\x5a\x68\xc2\xc4\x92\xe7\x52\xa4\x4c\x68\x02\x39\xf0\xd3\x84\x85\xad\xf2\xbf\xda\xfb\xf9\xe0\x0c\x12\x1a\x06\x16\xac\xc2\xce\xb2\x50\xae\x89\x64\x38\x93\x60\xb8\xcf\x2e\x9f\x9b\x87\xa1\x21\xf0\x5c\x37\x2f\xf3\x9c\xb4\xd0\xd8\x29\x92\x5d\x47\x49\xa1\xf8\xf2\xb1\x38\x89\xad\xbd\x3f\xe2\x8d\xd6\xb9\x86\x03\x50\x12\x6a\xad\xa4\x1f\x5c\xeb\x1b\xca\x00\xd7\x02\x26\xbb\xca\x97\x06\x86\x31\x70\xeb\x7a\xb2\x28\x1b\x98\x3e\xe7\x20\x0d\xd7\x54\x08\x40\x94\x79\x5c\x27\x94\x90\x31\xbb\x3f\x1e\x4f\x35\xbd\xc7\x0e\x81\x31\xf3\xa0\x4e\x50\x45\x0b\x16\x17\x89\x6d\xee\x0f\xe8\xa3\xc6\x7c\xa0\x25\x8e\x9d\x80\x36\x3c\x27\x33\x0f\x76\x20\x46\xe0\x1c\x44\x9a\xbb\xdf\xe7\x0e\x1a\xc1\x7d\xa0\x6a\x23\x82\x51\x6a\xc6\x1a\x12\xaa\x54\x91\xe2\x91\xc0\x0e\x03\x33\xae\x95\xef\x55\xed\xb4\x63\x73\x30\xee\x59\xb6\xd5\x82\xbe\xe7\x2c\x81\xcd\xd5\x82\xc6\xbb\xa7\xc1\x38\x48\x68\xe5\xfe\xb2\x1b\xce\x26\x4c\x40\xb4\xcd\xe7\x71\x4a\xf0\x92\xce\x38\x74\x29\xa2\x96\xde\xe7\x1b\x7e\x89\xaa\x03\xde\x01\xc0\x31\x74\xca\x12\x55\x1f\x68\x5a\x2e\x8a\x85\xfd\xb4\x84\x6f\xd9\x4e\x9b\x2a\xc5\xe7\x02\x1a\x54\x9a\xd1\xee\xd9\x8a\xb2\xb1\xcd\xd4\x45\xbb\xec\xc6\x5c\xad\x92\x85\x95\xd2\x6c\x64\xad\x5e\x2d\x53\x1e\xdd\x63\x24\x79\xcf\x29\xd7\x2a\xb2\x2b\x95\xbe\xef\xce\xd7\x3c\x3e\x2a\xf0\x6a\x8c\xc9\xb9\x4c\x6d\x8a\x93\x08\xda\x64\xb9\x6e\xa5\x46\x62\xe4\xcc\xd0\x02\x12\x8f\x78\x19\x8d\x87\xb6\x32\xae\xd6\x1a\x9e\xe3\x55\x72\x1b\xc6\x05\x00\x47\xdb\x2d\xd5\xf7\x33\xb6\xe3\xba\xbd\x0d\x29\x30\xaf\xc8\xa8\xd6\xfa\x75\x5c\x85\xdd\xbc\xfd\x39\xf6\xde\xe1\xe7\x9f\x82\xf9\x39\x00\x68\x77\x72\x14\xfe\x79\x32\x39\x0c\xff\x7c\xaf\x0c\x95\xec\x07\xf5\xa9\x55\xdb\x1e\xdc\x7c\x57\x08\x40\x7d\xd3\x5d\x33\xec\x1c\xf4\x99\xaf\x0f\x17\x54\xb8\x40\xd6\x8d\xcf\x5b\xa9\x48\x27\xe5\x74\x16\x34\x67\x16\x59\xce\x70\x72\x95\xd1\xe8\xc6\x59\x78\x18\xb7\x5b\x6f\xb8\x75\xa6\xaa\xc8\x5c\xe3\xfe\x04\x6e\xf4\x33\x29\xb7\xdd\x87\x3f\xff\x76\x47\x62\x7e\xee\x37\x9b\x48\x7b\xfb\x6f\x2a\x7d\xf1\xee\xf4\x8b\xcd\x5d\xb3\xee\xf6\xdb\xa0\xf1\xdc\x9d\xee\xbf\xa9\xe9\xed\x5d\x9f\xe6\x9a\xa5\xdd\xed\xc5\xea\xab\x7d\x87\xdb\x61\x49\xef\x87\x89\xd0\x98\x85\x37\x75\x77\x35\x70\x52\x35\x77\x4e\x35\x33\xf6\x6b\x0a\xc0\x0d\x60\xa0\x16\x80\x4d\xcc\x49\x05\x56\xaa\xc8\x73\x26\xb4\xd1\x99\x0a\xc8\x74\x74\x6d\xf1\x91\x49\x03\xb3\x05\x1e\xee\xe0\xdc\xc9\x81\x97\x85\x36\x03\x2e\xa5\xd0\x7a\x3f\x80\x7b\x9e\x15\x90\xd0\x08\xac\x1f\x61\xea\xa4\x30\xf3\x78\xb5\x09\x87\x43\x66\x4c\x94\x7b\x65\xdf\x6a\xcd\x23\xb3\x87\x2a\xc8\x1c\xa8\x08\x8c\xd3\xf8\x4f\x59\x42\xf5\x4c\xe6\xe9\xc8\xa9\x87\xa3\x8a\x92\x40\x0e\x21\xb5\x46\x39\xfb\x0a\xf3\x5b\x11\x6d\x53\xc4\x09\x0b\xa4\xb9\x7f\x55\x11\x23\x38\x15\x29\x44\xce\x22\x39\x17\x50\x79\x6c\xbf\xe5\x95\xb6\xff\x54\x19\x49\x4a\x44\x91\x24\xf7\xcf\x43\x68\xa8\x04\xc8\x25\xcb\x17\x8c\xde\x73\xf3\xd6\x52\x5a\xec\x18\x65\x73\x4f\x65\x91\x0b\xac\xca\xeb\x1e\x62\x54\x63\x19\x41\x6d\x9b\xed\xbb\x6f\x13\x97\x29\x08\x74\x40\x48\x27\x73\xbe\x64\xc2\x81\x76\x1f\x26\xd4\x37\xa8\x46\x22\x79\xe0\xf0\x42\x4b\x9f\xb4\x40\xa8\x0e\xa0\x83\x21\xc7\xc9\xc6\x4b\xc3\x71\x82\x5b\x6c\x7b\xeb\xc4\xb5\x12\xbb\xcb\x9d\x90\x37\x80\xbd\x15\x87\xe5\x2b\xa5\xce\xb7\x5a\xc1\xdc\x24\x11\x64\xb7\x38\x53\xc4\x66\xb5\x7c\xfe\x11\x36\x25\xcd\xf0\xa0\x4d\xc3\x58\x75\xd9\x63\xc3\x96\x84\x4d\x0c\xfb\x5f\xa1\x92\x73\x32\xab\x3e\x89\x57\x50\xed\xa1\xf6\x09\xd4\xef\xd2\x1e\x9c\xc8\xd8\x68\x61\x43\xe2\x97\x32\xec\xee\x6d\xe3\x2d\x78\x26\x83\xc3\x88\x4a\x5a\x9e\x33\x95\x49\x04\xd7\x0f\x1f\x3b\x0c\xfc\x5f\x5c\x57\x92\xed\xb0\x4d\x9a\x3f\x1a\x88\xdb\xf6\x1f\x96\xcb\x8d\x3a\xfc\x9c\xeb\xf1\xe5\xdf\x41\x81\x67\x62\x41\x45\x84\xb6\xd3\xfe\x25\xcb\xd4\xbe\xe2\x73\xd4\xd7\xff\xf6\xf7\xbf\x83\xf2\xee\x48\xb2\x7f\x76\x7c\x70\xf4\xf6\x78\x9c\xc6\x4f\x48\x93\xcf\xa8\xd6\x2c\x17\xaf\xc8\x7f\xed\x7d\xfc\xfa\xd3\x68\xf0\xfd\xde\xde\x87\x17\xa3\x7f\xfc\xf6\xf5\xde\xc7\x31\xfc\xe3\xcf\x83\xef\x07\x9f\xdc\x1f\x5f\x0f\x06\x7b\x7b\x1f\x7e\x7a\xfb\xc3\xc5\xe4\xf8\x37\x3e\xf8\xf4\x41\x14\xe9\x25\xfe\xf5\x69\xef\x03\x3b\xfe\xed\x8e\x83\x0c\x06\xdf\x7f\x75\xcf\x89\x36\xac\x4b\x69\x5b\x8b\xd2\xaa\xfe\xa4\xc3\x9a\x93\x2c\x67\x2c\x05\xf6\xd7\x24\x5b\xab\xea\x25\xad\x0d\xe5\x04\xac\xfd\xcb\xf0\x44\xf7\x34\x31\x37\x6c\x52\x21\xeb\x4c\xe4\x15\x64\x58\x72\x69\x94\x9f\x31\x79\x07\x72\x90\x9c\xb2\x25\xcb\x87\x6e\xd4\x37\xe6\xa6\x89\xbf\x27\x74\xc3\x6d\xba\xa3\x61\x8e\x7f\xc3\x35\x71\x73\x6f\x41\x3c\x6c\x0c\x62\x27\x0f\xfc\x69\x4c\x7e\xa6\x39\x97\x85\xb2\xba\x08\xe0\xe7\x4a\x01\x32\x09\x53\xc8\xbc\x24\x01\xaf\x84\x0d\xf0\xf8\x41\x7c\x65\x98\x8b\xf1\x78\xda\x1c\x78\x7e\x7d\xb8\x59\x24\x70\x6d\x56\x6a\xe9\x1e\x95\xbb\x54\x57\x6c\x94\x10\x3c\x19\x85\xc1\x46\xfe\xef\x24\x9a\x0a\x27\x0a\xc3\xb8\x79\x00\x6f\x3d\xb5\xc8\x26\x8c\x2c\xf8\xdc\x25\x54\xc3\xfb\xa3\xf9\x1a\x7c\xea\x77\x48\x83\x25\x6d\x72\x4c\x9b\xe6\xf5\x67\xf5\xf7\x6b\xb1\x2d\xaa\x48\xcb\x21\x58\xb3\xab\x28\x2a\xcf\xcd\x0e\xee\x13\x10\x22\xa3\x28\xe7\x9a\x47\x34\xd9\x01\xe1\xe4\xbe\x8a\x92\xc2\xe8\x89\xe1\xb7\x39\x23\xfa\x4a\xe2\x53\x68\x42\x2e\xd9\xea\x4a\xe6\xb1\x93\xcf\xee\x89\xe5\x5a\x28\xed\x1e\xc9\x99\x3d\xc0\xe8\x66\xc8\x53\x96\x93\x29\x73\x1e\xf4\xda\xcd\xab\x31\x39\xf0\x2d\x63\x44\x58\x64\x18\xe0\xbf\x81\x8e\x80\x5a\x54\x65\x93\x58\x21\xe6\x9e\x46\xb5\x05\xc4\xd9\xec\x5d\x36\x0a\x98\x3f\x05\x4e\xfa\x3b\xf7\xb2\xcc\x6d\x95\x13\x9c\x8e\x1c\x6b\xb4\xa4\xfb\xfa\x41\xb8\x85\xd1\x6f\xb8\x60\x4a\xfd\x60\x96\xb2\x8d\xba\x5a\xdd\x1d\x14\xd4\x12\x3b\x36\x54\x4a\x95\x29\xc5\xcc\x1c\x29\x8c\x11\x1b\x36\x2c\xe3\xf2\xce\x31\x39\x80\x0f\x20\x27\xde\x68\x5e\x50\x45\x67\x06\xe3\x5a\xd5\xbb\xb7\xe3\x1d\x07\xa7\x47\x2e\x77\x19\x35\x05\x55\x05\x52\x47\x95\xb9\x3a\x13\xd0\xf4\x6c\x06\x2d\xfb\x77\x41\xa1\x11\xed\xce\x45\x5e\xb0\x9d\x66\xaa\x12\x42\xf4\xef\xff\xf5\xef\x2f\x40\x5b\xf2\xcf\x1b\xc1\xf3\x9a\xa8\x4a\xf7\xcf\x91\x69\x94\x1d\x53\x4f\x0c\x3a\x0b\xf7\x83\x23\xb8\xb3\x3b\x6c\xd0\x0a\x6a\x7b\x61\x99\x3c\xcd\x1b\xb9\x56\x1b\xe5\xc2\x34\xcf\x82\x19\x95\xd3\xbd\xb8\x7f\x93\xb0\x36\x09\x2c\x95\xe7\x76\x11\xe5\x2a\x47\xc3\x55\x51\xb8\x24\xfe\x39\x81\x67\x17\x7b\x60\xd8\x8f\x21\x1d\x16\x18\x17\x44\x05\x80\x3d\x36\xec\x98\xd5\x98\xdf\xa0\xf1\x0a\x69\x75\xad\xfc\xdb\x67\x95\x91\x2c\xe7\x76\xa2\xa2\xf6\xa5\xaf\x21\xb7\x09\xd3\xae\x36\x07\xc0\xa7\x3c\x6a\x8c\x83\xf9\xe7\x2a\xec\xf8\x01\x95\x39\xa8\x15\xb8\xc9\xab\x20\x39\x32\x66\x84\x2e\x29\x4f\x20\xae\x0b\x26\x9d\x54\x15\x27\x3b\x4e\x28\x92\x42\x15\x29\x3c\x23\x35\xd2\x05\x65\xc6\x47\x51\xd6\xa4\x1a\x36\x97\x2d\x6e\xaf\x4a\x35\x33\x3c\x5a\x09\x9a\xf2\xc8\xbd\xe1\x41\xe2\xfa\xa7\xd5\xea\x52\xdd\xd8\xde\x4d\xce\xd3\xb4\xd0\x66\x9a\xf7\x44\x35\x7d\x64\x7e\x14\x2c\x64\x18\x37\x67\xd7\x34\xd2\xc9\x0a\x1c\x55\xd5\x9b\xf4\x22\x97\xc5\x7c\x41\x28\x81\xbf\xcf\xe1\xab\x31\x39\xd1\xc6\x96\x84\x9e\xe7\x16\xae\x81\x6b\x94\xdf\x85\xe0\xff\x2e\x58\xb2\x22\x1c\xfa\xee\xf8\x98\x49\x75\xd8\x00\x3d\x7e\x62\xd4\xd8\xc3\x72\x89\x51\x0b\x60\x2c\x76\x90\x07\xd6\xb4\xbf\x61\xf2\x68\xb7\x83\xf6\x60\x04\x3e\xbd\x7f\x12\xcf\x23\xf1\xcf\x06\xd9\x7f\x6d\xd8\x66\xd3\x4c\xaa\x75\x2c\xb6\xcd\x2b\xcc\x83\xf0\x71\x54\x5f\x63\x30\x55\xca\x04\x2c\xe8\x77\x78\x74\x7a\xfe\xfb\x9b\x83\x7f\x1d\xbf\x79\xf0\x5a\x12\x9c\x65\x6b\x62\xe0\x59\x08\x72\x5e\x6d\x9f\xb0\xc0\x64\xab\xec\xd9\xe6\xef\xf9\x68\x4d\x38\x2a\x02\xa6\x4d\x3f\xa2\x6a\x3b\xe4\xfa\xa8\x75\x87\x3d\xad\x1d\x76\x6b\x24\x58\x39\x0c\xa0\x96\xc2\xc7\xdf\x68\x99\xe6\xd0\xae\xec\xbf\x45\x86\x55\x85\x4e\x17\x2c\xcd\x8c\x7d\xdc\x19\xbd\xaa\xd2\x39\x1c\xfe\x33\x84\x73\xb7\xde\x9d\x80\x28\xe8\x18\xd1\xee\x97\x61\xd2\x0e\xe4\x9d\xa2\xb3\x97\x12\xc1\xae\xaa\x0f\x73\x29\x3d\xee\x17\x53\x59\x08\xdb\x5a\xde\x0d\xfe\x0b\xa2\x78\xd8\x9c\x14\x40\x08\x4f\x98\x76\xd6\x5d\x75\xcd\x6d\xb5\x39\x36\x8a\xb2\xf7\xd9\x2e\xab\x12\x61\x53\x9d\xda\x81\xc7\xd0\x7c\x62\x2c\x25\x29\xe6\x0e\x06\x64\xce\x04\xcb\x41\x41\xf1\x0e\x96\xe1\xda\x0b\x01\x6a\x1a\xb5\x4c\x0d\xc7\x75\xd9\x1c\xb7\xbe\x5e\xce\x22\x99\xc7\x68\x15\x99\x97\x43\x03\x68\x5c\xd9\x09\xe7\xf0\x19\x53\xb7\xe9\x0f\xb6\xfd\x07\x54\x90\xcf\xeb\xca\x90\xaf\x22\xa8\x38\xb0\x2b\x74\x0a\x6a\xae\x72\x99\x90\x2c\xa1\x82\xd9\x32\x74\x6f\x74\xaf\xb3\xa2\xa6\x50\xec\xdd\xa4\x71\x18\xcd\x19\x72\x39\x2e\xd9\xea\xde\x9c\xa9\x81\xe4\x5c\x7f\x38\xbe\x47\x4a\xb3\xfb\x69\xdb\x46\x7b\x6d\xed\x4d\xdd\x3d\xc3\x81\x48\x56\xba\x4f\xd7\xea\x85\x7d\x3e\x25\x1c\x1c\xeb\x38\x3d\x00\xf0\x85\x21\x79\x27\x5e\x63\x35\xea\x10\x7d\xa9\xd0\x03\x4f\xc9\xd4\x56\xc1\x5e\x6b\x35\x24\x90\xf1\x4b\x89\x2a\xa6\x8a\xd9\x86\x6e\x46\x97\xb6\x41\x3d\x1b\xb5\xcc\x58\x9e\x72\x1d\x66\xaf\x9a\x2d\x87\x8f\xe9\x14\xd6\x63\xff\x4f\x96\x7a\x23\x7c\xe9\x26\x46\xfc\xfd\xcd\xa3\x20\xd2\xd3\xd2\x5b\xb7\x7b\x56\x1b\xab\x62\x2a\x56\x22\x59\x55\x5e\x0b\x59\x5f\xe8\xee\x20\xf3\x5c\x16\x99\xe3\x23\xd5\xd6\xbd\x65\x1f\x3e\xc7\x2b\xd1\x05\x56\x1d\xda\x33\x3b\x30\x38\x59\xc9\xfb\x63\xa3\x72\x29\x55\x7a\xc9\x10\xb5\x00\x23\x7e\x79\x21\x5c\x9b\x5b\x06\x6e\xb2\x20\x77\x70\x27\x61\x73\x1a\xad\x76\xaa\xcf\xd9\x94\xa9\x89\x56\x15\x4f\xb1\xf5\x11\x3e\xaf\xac\x41\x86\x52\x65\xb0\x1a\xd1\x36\x46\x53\x40\xd9\x29\x3a\x17\x9d\x03\xd1\xc0\x48\x74\xde\x22\x92\xf6\xd7\xbf\xff\x75\xe4\x62\xe5\x30\x95\x07\xd9\x50\x3e\xd3\xb2\x53\xdf\x6f\x65\xcd\x8c\xb0\xe3\x2a\x83\xf5\x05\xcf\x69\xe9\x7e\xf3\x4f\xbf\xcd\x3d\xba\x79\x10\xb7\x00\xe5\x10\x0f\x48\x2e\x2e\xe6\x6d\xfd\xa1\x3b\xe7\xd5\xa1\xec\x6e\x94\x19\x35\x42\xdb\xd5\x25\x5b\xde\x86\x29\xad\x01\x89\x2d\x51\xa0\x50\xb7\x9c\x53\xc9\x5d\xcd\x72\xac\x8f\x6f\x08\x1c\x9c\x14\x4f\x5c\xa5\xe9\xca\x9d\xee\xea\xb4\x00\xaf\x53\x33\x5f\x91\x53\x26\xe6\xfa\xe3\x48\xb5\xd1\xac\xea\x69\xbf\xcc\xeb\x5e\xf5\xf7\x8c\xcc\x5b\x1a\x4e\x6e\xc3\xdc\x54\xa3\xab\x10\x24\xbb\x4d\x23\x40\xf8\x15\x50\x49\x52\xb9\x84\x8c\x53\xc3\xfa\x8d\x0a\x70\x45\xf3\x58\x55\x3d\x23\x16\xad\xcb\x7a\x37\x6c\x60\xc8\x69\x11\x13\x19\x97\x33\xf0\xde\xcb\xaa\x2f\xe4\x09\xf9\x3b\xaa\xd4\x84\xd7\x2f\x93\x3b\x80\x73\x4f\x30\x61\x77\x5e\xd0\x3c\x06\xaf\x78\xb9\x11\x7a\x37\xc2\xa6\xab\x3b\x37\x82\x6b\x68\x54\x1e\x48\x74\xb5\x1d\x03\x9c\x51\xf5\xd3\xa0\xdd\x70\x4d\x55\x6f\xda\xf2\xfa\x8f\xac\xc8\xd6\xb2\x11\xdb\xa8\x45\xf5\xc6\xba\x0b\x99\xc4\xa0\xc0\x8c\x12\xb6\x64\x89\x7f\x94\x61\x7c\x39\x9f\x16\xda\xa6\x9b\x45\x32\x4d\xab\xd8\x53\xb6\x55\xff\x98\x94\xe0\x43\x61\x2a\x00\x70\xe2\x31\x21\xe7\x8c\xc1\xda\x85\xf3\x00\x0d\xda\x89\x38\x2b\x04\xe4\x8c\x30\xb3\x91\x70\x83\x3c\x50\x7a\x4d\xf3\x83\x65\x93\x92\x5b\x66\x3f\xee\x1c\xf8\x68\x6f\x98\x3b\x8c\x8a\x27\xca\x45\x9a\x65\x09\xc7\x52\xf5\x9a\xcd\x01\x65\xd9\x65\xf6\xba\xad\xd2\x32\xb4\xb0\x1e\x7c\x38\xae\x3f\x15\x53\x63\x8b\x83\x2b\x00\x2c\x56\xcc\xf1\xba\x32\x43\x2c\x78\x86\xa7\x9a\x6a\xff\x73\x30\xdf\xcd\xd7\x21\x84\xe5\x2b\x23\x91\x5e\xa2\x35\x2f\xaf\x20\xbb\xee\x87\x93\x23\xaf\xbb\x98\xbb\x5e\x9f\x63\x6a\xf4\x37\x78\x97\x62\x7a\xce\x63\x32\xc5\x02\x18\x23\x09\xf7\x04\xbb\xc2\x92\x7a\xeb\x93\xf0\xf1\xc9\xa5\x2b\x35\xc7\xd1\xfc\xc3\xed\x90\x03\xf2\xad\xf5\x23\x18\xe3\x07\xb3\x1b\xa6\xdc\x96\xdc\xbe\x3b\xdb\x75\x69\x7f\x57\xa3\xfc\x6a\x34\x1a\x8d\x6c\x9e\x3c\x68\xcf\xc3\x0a\x0d\xbc\x54\x4f\x65\xcc\x67\xab\x1a\x25\xcc\x36\x2f\x1f\x01\x3b\x92\x8a\x95\x9d\xdd\x98\x9c\x4a\x88\xbd\x53\x1d\x66\x51\x94\x6d\x81\xcd\x2b\x42\xb8\x16\xb2\x89\xa5\x1a\x0b\xeb\xee\x71\x99\xa8\xf7\xb7\xe0\xdb\xa5\x35\xb5\x81\xb5\xdc\x90\x72\xdf\x36\xcf\x77\x53\x16\xbf\x8b\x5a\xf9\x1e\x74\x72\x86\x9b\x14\x50\x08\x6e\x58\x18\x27\x87\xec\xae\xb1\xd1\x2b\xcc\x76\x60\xd7\x99\xc4\xbe\x4d\xe0\xc9\x9e\xc8\x78\x3d\xcd\x13\x95\xad\x2c\xc3\x62\xc5\xca\xa9\xb1\x86\x1e\x66\x16\x3b\x22\x90\x29\x35\x43\xfa\xe9\xec\xd5\xf6\xc9\x00\x82\x2b\x30\x34\xc8\x3b\x21\x6d\x63\x7d\x22\x05\x61\xd9\x82\xa5\x2c\xa7\x49\xf5\x41\x16\xed\xec\x95\x61\xb7\xb9\xd9\xa5\x98\x4a\x99\xd2\x0c\xb9\x2d\x30\xcf\x98\xe7\x80\x1a\xcb\x2b\x29\xce\x3b\xef\xc4\x99\x94\xfa\x2d\x57\x60\x53\xda\xa4\x12\xf4\x00\xec\x6c\x32\x34\xdc\x77\x65\xe9\x78\xdb\x9d\xfc\x60\x79\xc4\xc4\x75\xd7\xef\x82\xd7\x1a\x0e\x62\x98\xd6\x7d\x1b\xe8\xbf\xb7\x60\xc8\x60\x08\x3b\xa1\xe5\x73\xda\x36\xb5\xc7\x5f\xeb\x8d\xff\xc0\xcd\xf1\xad\x3f\x94\xea\x0a\xea\x78\xcb\x45\x7f\x42\xdc\x0b\xb6\xcc\xa9\x84\x73\xd2\x72\xd3\x9c\xac\xf7\xe4\x2f\xb7\x08\xe8\xb8\x66\x2f\x51\x88\xab\x4a\x31\x82\x1e\xd9\x85\x72\x09\xe0\xb9\x4b\x9d\xab\x08\xa0\xa5\x39\xd2\x2e\x91\x0b\x4a\x65\x8d\x95\xe8\x76\x98\x51\x9d\x84\x2a\x72\xe6\x2b\x3d\x63\xc9\xca\x7e\xd9\x54\x91\xf7\x27\x47\xe4\x05\xd9\x83\x2a\x67\x8f\x74\xe7\x63\xf5\xf5\x52\xdc\x99\x1b\xa2\xea\x52\xb2\xc0\x9a\x42\x22\x2f\xb2\x73\x32\xec\xd5\x89\x61\xdb\xa0\x04\x3a\xc6\x6c\xdf\x1e\x6f\xba\x1f\x9b\x61\x19\xf8\x6a\xa1\x0e\x78\xd0\xfb\x06\x3c\x28\x54\xac\xcd\xf6\xaa\xd2\x0a\xf7\x50\xca\x34\x05\xd0\x56\xe4\x4d\xee\x86\xad\x5c\xbd\x3f\x3a\x87\xaa\x16\xfc\x75\xb0\xa9\xce\x8f\x61\x40\x17\x4e\xb0\x6a\x3c\xda\x0e\xf1\xba\xed\xe0\x78\xc1\x67\xb0\x00\x5c\x4c\xcf\xe3\x2c\xe6\x54\xc4\x32\x5d\x7b\x9a\x59\x4d\x30\xde\x82\xd5\xec\xb7\xdd\x4d\x57\xab\x14\x81\x76\x09\x02\x60\xe3\x77\x00\x21\xf6\x06\x7c\x05\x5c\xf9\x9d\x80\xce\x03\x28\xae\x5f\x33\x5b\x5b\x23\x4c\xb6\x8e\xf7\xe7\x32\x69\x18\xd8\xaf\xa6\x41\xc8\xc4\x82\x41\xb8\xd7\x36\x03\x6f\xed\x5b\xeb\x86\xe9\x96\x75\xf6\xb2\xca\x6a\x6f\x0d\xee\x9c\x6d\x7d\xeb\xa2\x91\x94\x26\xf5\xb7\x86\xd2\xe0\xca\x5b\x83\xdc\xdd\xc6\xb7\xae\x56\x82\x77\x20\x4c\xec\x80\x44\xda\x7a\x74\xdb\x91\xb1\x0e\x16\x5b\x56\x9a\x82\x13\xea\x69\xf1\xd1\x36\x70\x82\x58\x30\xf6\xd0\xac\x5b\x46\x34\x01\xd0\x86\xa6\xeb\x4c\xea\x6b\x5d\x1f\x32\x28\x6a\xa1\x66\xb6\xf0\x59\x50\x9a\x49\x11\xe9\x5a\x96\x81\xf2\x5a\x50\xdc\xba\xe9\xec\x2f\x5d\xe6\xa0\x91\xbf\x65\xa5\x68\xf8\x6b\x2d\x01\xa8\xa8\xec\xa8\x47\x61\x82\x0c\xd3\x66\x32\xaa\x17\x43\x92\xb3\x04\x9b\xe4\xd8\x73\x76\x89\xa6\xd4\x6e\xa5\xfc\xd4\xed\x58\xf7\x68\x97\x14\x5c\x8e\x0c\x5a\xc6\x0c\x59\x17\x57\x64\xe7\x8d\x7b\xf7\x1d\x7b\xcf\xe9\xbb\x0b\x77\x1f\xe4\x77\xf8\x0a\x99\xa6\x29\xe2\xdb\xc2\xbf\x77\xf0\x9d\xfd\xd2\xa2\x93\xeb\x92\x8b\xd8\x36\x97\xa9\x50\xce\x57\x42\xa3\xea\xe8\x1c\x50\x8e\x15\xd0\x9c\x81\x2f\xd8\x93\x8f\x8c\x1a\xef\x15\x9b\xc1\xe0\xf2\x58\x46\x37\xe8\xa0\xce\xe5\xe2\x1e\x52\x1f\xe6\xbd\x80\x8d\x20\x00\x66\x42\xc8\x0d\xf7\xb9\x77\x69\x96\x43\xd5\x86\x33\xaf\xe1\x81\xb4\xe4\xce\x07\x3e\x74\x3e\x47\x78\x91\x40\xc3\x2f\xdb\x7e\x58\xb3\x11\x4c\x4c\x2e\x6a\x9a\xf9\x10\x56\xc7\x96\x15\xaf\x09\x2f\xac\x62\x4b\x69\xbe\x22\x3f\x9c\x1c\x59\xd8\x1a\xeb\x07\xdd\x0b\x43\xf4\x03\x0c\x62\x63\xa0\x22\x65\xe9\x14\x9d\xa3\x6a\xbd\x94\xbb\x02\x0a\xe6\x53\xf5\x0a\x1e\xdf\x62\xef\xd6\xad\x13\x21\x43\x14\x04\xf7\xee\x39\x60\x23\x58\xfb\x46\xac\x36\x2b\xf5\x5f\x64\x86\xd8\x09\x4d\x9b\xb3\x82\xbe\x5e\xbe\x64\x43\xc2\x96\x4c\xd8\x6a\xb6\x15\xdc\x61\x44\x1f\x17\x51\x52\xc4\xee\x71\x80\xf2\xaf\xf4\xa3\x49\xcb\x66\xd8\xc3\x8d\x91\x87\xdb\xf6\x74\x6a\x65\x63\x23\x16\x50\xcb\x13\x77\x6e\x11\x85\x16\x32\x89\x09\xf5\xc7\xcf\x27\xe3\xc6\xee\x39\x98\x15\x16\xe0\x8a\x8d\x8d\xe5\x6a\x33\xae\x0a\x51\xc2\x95\xb8\xfb\xf7\xea\xfa\x94\xe3\x78\x03\x0b\xb2\xe7\xdc\x7a\x09\x2d\x44\xb4\xf8\xa3\x6c\x99\x0d\xd4\xf7\x71\x22\x4a\x2e\x59\x2e\x58\x42\x32\x9a\xd3\x94\x41\xa3\x17\xe7\x5f\x78\xf8\x5c\xfd\x76\x88\xd4\x2d\xd0\xa4\x47\xe8\xfb\x78\x84\xf2\x82\x36\xe8\xbe\x1b\x13\x4a\xa8\x9b\x12\x76\x2b\x6c\xb4\x8c\xa4\x8b\x82\x00\xa0\x68\x27\xaf\x86\x7d\x1e\xb7\xe3\xdd\xaa\x00\x72\x1d\x98\x86\xbf\xe0\x80\x25\xd2\xa5\x4b\x03\xb9\xaf\xaf\xd1\x29\x94\xeb\xf8\xf2\xbb\x6a\xcd\x8f\x57\x6d\xc6\xf9\xc0\x81\x86\xc6\x7c\x17\xc0\xa8\x9e\x94\x7b\x70\x9e\x2a\x7a\x98\x33\xa8\x12\xa3\xc9\x79\xc6\xa2\x0e\xec\x8f\x1f\xde\x9e\x1f\x54\x07\x05\xa1\x84\xa5\x57\x0b\x06\xdf\x07\xb8\x15\x57\x6c\xba\x90\xf2\x92\xec\x6d\xc0\xde\x0a\x72\xa9\x14\x9f\xab\x7d\xbb\xbd\x47\x66\xde\x03\xc2\x05\x34\x49\xf2\x42\xd5\x37\x97\x72\x0f\x89\xfc\x2c\x60\xad\x6c\x22\xb6\x15\xc3\xeb\xd3\x3c\x6d\x95\xaf\xd6\x9a\x27\xad\x2f\x46\xf3\xfa\xa4\xcf\x2c\xc8\x4d\x18\x6c\x1b\xa9\x86\xde\xa0\x47\x21\x89\xf5\x55\x18\x0d\xbc\x03\x3a\xfc\x58\x8e\x16\x62\xfa\xf3\x59\xa5\xdd\x60\x69\x46\xfa\x48\xef\x2e\xb4\x3d\xb7\x3f\xdd\x0d\xcd\x8e\x83\x24\x41\xce\x3f\x71\xa5\xe7\xce\x55\x56\xe6\x43\xfa\x82\x2e\x6f\x39\x54\x66\x82\x2c\x6a\xcf\x01\x07\xeb\xb0\x18\xdb\xe6\x53\xa6\xfc\xda\x3c\x25\xfc\x55\x88\x0d\x01\xe5\x49\x62\xb4\xf9\xeb\x01\x94\x9e\x38\x63\x6a\x68\xde\x36\xbc\x31\x68\x6b\x29\xe0\x8b\x53\xc4\x76\xc0\xf9\x87\xe1\x1c\xdb\xa1\xb2\xcd\x3e\x68\x8e\x2b\xef\xe3\xb1\x1d\x1d\x09\x88\xcb\xda\xe1\x8c\x50\x70\x62\xae\x4d\x9c\x16\x6c\xc8\x0e\x62\xb5\xeb\xb2\xec\xc1\x45\xe0\x43\x9e\x75\xc5\xf2\x25\x8f\xd8\x41\x14\xc9\x42\xb4\x4a\x75\x3d\x62\xe6\x15\xa8\x66\xf1\x79\x65\x4c\x74\xeb\xc7\xf0\x2d\x66\x96\xd3\x84\x53\xc4\x84\xae\xde\x89\x88\x48\xe5\x38\x10\x16\xa8\xcd\xd0\x6e\x19\xa5\x19\x6d\x96\xb6\xda\x92\x42\x6d\xeb\xa4\xd6\xdf\x78\x93\x24\xa8\x51\xd0\x46\x04\xd6\x6a\xa0\xee\x56\x80\xa6\xa9\xba\x2c\x91\xb2\x19\x60\xc6\xf8\xc3\x14\x7c\x6e\x5f\x74\x44\xf1\xa9\x8d\xd0\xb3\x1b\x50\x57\x1b\xbe\x67\x5e\xfe\x40\xbd\xfe\x3f\x47\xa7\xed\xca\x86\x7c\x93\x60\x04\x23\x59\xd8\xa1\xbd\x4a\x1b\x62\x28\x86\x58\x52\xe6\xc9\x43\x92\x53\xdb\xff\xd0\xf6\xbe\x4f\x18\x45\xdf\x03\xd9\x0b\xca\xb4\x90\xa7\x97\x21\x79\xe4\xf4\xb6\x55\x7d\xca\xa8\x50\x01\x5e\x18\x83\xa1\x9d\xf3\xcb\xcf\x07\xb5\x5a\xbb\xda\xd6\xca\xde\x73\xae\xdb\xea\x1d\x4a\xe7\x45\xa4\x49\xa1\x95\xf9\x1c\x1f\xee\x18\xe6\x1d\x1e\x9f\xb3\x39\x57\x3a\x5f\xb9\x26\xfa\xb3\x60\x12\xd6\x7b\xe2\x6f\xb9\x64\x2b\xf2\xe3\x4f\xc7\xbf\xfe\xfe\xe6\xdd\xe1\xc1\x9b\xdf\xdf\x1e\x1c\xfe\x78\x72\x7a\xfc\xf1\xe3\xf9\xaf\xe7\x17\xc7\x6f\x3f\x7e\x3c\x44\x38\x58\x8b\x9d\x76\xce\xf4\xc7\x8f\x76\xa7\xaa\x8f\x1f\x2f\xa2\x8c\x67\x1f\x3f\x4e\x9c\xaf\x00\xdb\x63\xfe\x9f\xa3\x53\xe0\x9f\x08\xe1\xe3\x73\xab\x40\xb4\x22\xd1\x61\xde\x0b\xaa\xca\x4c\xce\x4a\xb1\x65\x83\x96\x2a\x4d\xc5\xdd\x46\xfc\xea\x56\x87\x7d\x01\x4e\x53\xd7\xd7\xda\x79\x33\xcb\xd2\xf2\x29\xd3\x57\xcc\x62\x4e\x6d\x44\x4c\xa7\xf5\xc2\x70\x9b\xdd\xbd\xa1\x77\xae\xc3\x84\x59\x72\x76\x85\x00\xa1\x7c\x2e\x68\x12\x34\x70\x06\x0c\x3a\x8c\xb2\xac\xe3\xb2\x83\x8e\x94\xc9\xd8\x37\xab\xae\x79\xb7\xd7\x3c\xdb\x95\x1a\x4a\x44\xde\x67\x31\x99\x9c\x1c\x91\x97\x63\x54\x72\x4e\x8e\xb0\x11\xc8\x46\x58\x70\x67\xd1\x19\x81\x8a\xd2\x77\x43\x69\x43\xb9\x01\x9a\x30\xa3\x06\x3b\xa0\x98\xc6\x32\xa5\xf7\x6d\x4b\xff\x99\xe2\xc5\x59\x91\x24\x2b\xf2\xef\x82\x26\xa8\x03\x4c\x64\xbc\xce\x99\x76\xbe\x73\x1f\xfd\x73\xfc\x9d\x9f\xc7\x3f\xc7\xdf\xb9\x72\x7e\x20\xdb\x3f\xc7\x6a\x19\x8d\xbf\xb3\x68\x76\xc4\xde\xb4\x31\x11\x79\xad\xd4\xd5\xaa\xb3\xf8\x1b\x04\x08\x00\x75\xf7\x41\x6a\x1d\x83\x46\xbe\x3f\xe4\x34\x62\x13\x96\x73\x50\x99\xa4\x88\xdb\x54\x3e\xba\x2d\x43\x62\x87\xef\xcc\x05\x51\x38\xac\x27\x81\x60\x2c\x46\x25\xd1\xce\x82\x91\xb9\x99\x04\x2c\x0c\x6a\x81\x00\xa2\x10\xe5\x8c\x62\x3e\xbb\x45\x54\x70\xa0\xbd\x63\xeb\x66\x72\x31\x56\xa3\xf0\x0b\x36\xc7\x48\xa9\xf5\xb7\x63\x34\x16\xb9\x2c\x02\xed\xf9\x18\xa0\xd2\x32\x23\x3c\x4d\x59\x6c\x14\xa0\x64\x45\x96\x9c\x22\xe7\x87\x82\x49\x3c\xa7\x7b\x42\x12\x09\x5e\xeb\x42\x70\xeb\xc4\x5a\x14\x9a\xc4\xf2\x4a\x0c\xca\x56\xed\xf8\x00\x63\xac\xf0\x64\x58\xa9\x1e\x86\x57\x22\x19\x10\xb6\x0a\xe3\xe0\xf4\x25\x98\x61\xe5\x36\xab\x7b\x6c\x22\x1e\x62\x24\x20\xfc\xa4\xe3\x20\x0e\xeb\xb9\xac\xbd\xc7\xd0\x0c\xb4\xbd\xaf\x34\x6b\xb6\x2f\xe5\x78\x09\xa6\xb7\x21\x17\x0b\x07\x34\xbf\x9e\xc9\x3c\xe2\xd3\x64\x45\x16\x34\x29\x1b\x37\x87\xb4\x19\x93\x73\xa6\xc3\xd7\x4f\xa4\x98\x87\x82\x1a\x41\xbc\xa1\xcc\x9b\x51\x51\x64\xf8\x3c\x23\xdf\x56\xb2\xb8\xc1\x60\xf8\xf6\x85\x7b\xd5\x47\x80\xd5\xbc\x57\x78\x45\xcb\x84\xe1\xfa\xb4\x39\x29\x1b\x8b\xaa\x77\x55\x38\x7a\x13\x42\x3c\x46\xe9\xaa\x43\x39\x81\x1d\x71\xe1\xe7\x0f\x96\x86\xd6\x14\xaa\xba\xcd\x69\xc7\x6f\xa0\xa4\x6e\x45\x8c\xd4\xb2\x18\x5c\x21\x3c\x80\xce\x79\x96\x30\xf2\xdd\x25\x5b\x0d\x11\x7d\x15\x95\x90\x7f\x06\x3d\xb1\x3c\x7e\x1d\xa2\xe4\xcb\x9c\x7c\xe7\xfe\xf5\xcf\x07\x2c\x83\x6d\xe3\x6d\xc4\x97\x6a\x1d\x21\x3a\xc6\x52\x9b\x2a\x1c\x2b\x52\xd6\x56\xe1\x68\x89\xe4\x1a\x93\x63\x00\x3d\x40\x8d\xd4\xf6\x05\x4a\x92\xca\xcd\xca\x6a\x36\x55\x28\x4f\x70\xbf\x04\x25\x38\xa7\xd2\xd6\x29\x33\xc0\x44\x9e\xb1\xbc\xfc\x04\x18\xcc\xa9\x3c\xbe\x66\x51\xa1\x1f\x12\x5a\x10\xaf\x4b\xd6\xbe\xeb\xfa\x4f\xcc\xe3\x45\x23\x6d\x8c\x16\xee\xcb\x1f\xca\xd3\x19\x64\xc0\xdd\x4e\xdb\x4b\xb6\x52\x1e\x11\xff\x12\x47\xb7\x85\xfa\x7e\xff\x3a\x41\x76\x7c\xcd\x95\x56\xff\xdb\xb5\x7c\x4f\xa7\x65\xb3\x7d\x8a\xa9\x68\xe5\xe8\x41\x37\x04\xf3\x27\x3c\xe6\xa1\x09\xee\x5e\xa0\x35\xd5\xdf\x39\x4a\x04\xfd\x0e\xa8\x79\xa7\x5d\x65\x73\xa0\xa4\x80\x6a\xb8\x10\x38\xbf\x4c\xcf\xc1\x1f\xe3\xfe\x44\x1a\x02\x5d\x8e\x8d\x92\x57\x15\x33\xf6\x23\x7b\x13\x07\x08\x58\xbe\xa4\x09\x13\xb6\x8f\x50\x12\x47\x34\xc7\x50\xb6\x45\x7f\x56\xb6\x15\x99\x85\x3d\x35\x32\xce\x72\xb2\x72\x95\x95\x0d\x79\xd1\x5c\xf3\xa8\x48\x68\x4e\xcc\x79\x9c\xcb\xfc\x9e\x20\xd1\x78\xb5\x5a\x93\x72\x8b\x36\x52\xe7\xf0\xaa\xf2\xf7\xfa\x88\xf5\xae\x14\x56\x7b\x31\x26\x13\x47\x9c\xcb\xf0\xa0\xec\x55\x5b\x99\xc9\x99\xe3\x4d\x9e\x51\x84\x7d\x0d\x74\x15\x77\x6a\x2e\x64\xce\xe2\x41\x20\x3c\xfc\xc9\x1c\x93\x7f\x79\xa8\x90\x21\x29\x5d\xc6\x50\xf8\x6a\x9f\x69\x8f\x8d\x5d\xae\xf2\x50\xcf\x64\xce\x96\x2c\x27\x7b\xb1\x44\xe4\x8c\x25\x8f\xf4\x60\x4c\xfe\xff\x46\x53\x04\x1f\xb2\x53\x27\xed\x31\xf3\xc5\xbe\x65\x77\x85\x17\x64\x0f\x7e\x16\xaa\x92\x03\x17\x50\xb1\x6d\x5b\x9e\x58\xd6\x48\x8b\x48\xf0\x86\x28\x70\x85\x8d\xa2\xa6\x58\xdb\x1a\x5e\xf2\x4b\xcf\x21\x3d\x4f\xe4\xca\x9e\xd2\x8a\xe7\xd6\xc7\x23\x1c\x0b\xf5\x1b\xe7\x7f\xc0\x47\x4f\x72\x36\x87\xf3\x87\xa7\xe7\x01\x4f\x9f\x96\x99\x4c\xe4\x7c\x75\x9e\xe5\x8c\xc6\x87\x52\x28\x9d\x03\x6b\x68\x03\xc6\x7f\xd3\x98\x01\x8c\xe3\x42\x5e\x11\x6a\x13\xbd\xe4\x0c\xdb\x19\xc8\x62\xbe\x40\xd4\x16\xf8\x21\xa1\x51\x2e\x01\x9a\x14\x87\xb3\x46\xa7\x1a\x3b\x00\x17\xe7\x3e\xf0\x20\x2f\x30\x0a\x38\x3c\xae\xe8\xca\x1e\x26\x3a\xe5\x31\x53\x41\x22\xb4\x9b\x0c\x46\x7e\x6e\x7c\x7f\xe0\xca\x07\xa7\x47\xf7\xed\x80\xf9\x88\x0a\xed\x0d\xaf\xe2\x35\x23\xa4\x7a\x49\x5f\xaf\x91\x02\xdd\x68\x2a\xad\xa6\x8a\x8d\x77\x1c\x65\x9e\x08\x44\x4b\x4a\xaf\xcf\x2f\xd9\x55\x83\x5f\xba\x17\xfd\x89\xdd\x3f\x65\x6a\x04\xf6\xe8\x7b\xa1\xa8\xe6\x6a\x06\xad\x72\x1f\x50\x1f\x87\xca\x86\x66\x1d\x3d\xf1\xaa\x16\x08\x85\xa3\xb9\xca\x73\x8f\xb4\x5a\xd9\x2c\x36\x4f\xae\xb4\x83\x6c\x9a\x24\x54\x5a\xf8\x66\xa0\xe6\x04\x45\xb6\x41\xb6\x96\x65\xbc\x16\x23\x15\x45\x3a\x65\xb9\x3f\xfb\xe8\x0c\xe0\x79\x0d\x86\xb1\x76\xf6\x9f\x20\xba\x2b\x90\xe7\xf8\xda\x68\x1e\xaa\x59\x42\x0f\x5e\xd5\xfe\xf6\xb5\x41\x31\x3c\xe6\x12\x1d\x6b\xcb\x50\xe9\x33\x6b\x51\xc1\xcb\x4f\x9a\xf2\xb9\xf2\x6a\x93\x72\x88\x57\xe3\xc4\x43\xbc\xea\xe9\xd6\x37\xbe\x7e\xad\x59\x6d\x58\x55\x68\x9d\x42\x6a\x88\x0a\x3c\x3a\xb0\x01\xfd\xcc\x0a\x76\xb8\x19\x94\x7a\xab\xcd\x19\xa3\xc8\xdc\x84\xbf\x6b\xdb\x8a\xba\xf1\xfe\xc4\xab\x5d\x5e\x23\x5e\x23\xf3\x4a\xad\x7e\xef\x88\xd5\x78\x90\xb6\x87\x0d\xaf\x86\x06\x75\x79\x55\x36\xd4\x65\x69\x5a\xe3\xce\xaa\x98\xd6\x25\xb3\x2b\x0d\xeb\x56\xcf\xee\xa0\x11\x3d\x69\x69\xe3\x96\x57\x85\x10\xf2\x1e\xd6\x2e\x25\x16\x10\xd5\x9e\x8e\x8d\x36\xef\x89\x18\x92\x53\xa9\xcd\x7f\x02\xf3\xf7\x48\x32\x75\x2a\x35\x7c\xb2\x15\xa4\xc4\x57\xe8\x90\x90\xae\xe7\x23\xb6\x50\x30\x7c\xd3\x86\x68\x8d\xc4\x73\x04\xdb\x60\x58\x9c\x08\x22\x73\x47\x31\x6f\x5d\x28\x3b\x44\x18\x56\xb0\x40\x5e\x37\x1a\x27\x66\x9c\x90\xce\xb7\x0c\x67\x87\x02\x44\x1e\xfc\x06\x40\xe8\xb3\x04\x12\xe9\xe3\x22\xc7\x86\x43\x46\xd7\xd4\x6c\xce\x23\x92\xb2\x7c\xce\x08\xe0\x62\x76\xb1\x7c\x6d\xe4\x0a\x5e\x2d\xa5\x4b\x38\x99\x16\x7b\x09\x44\x36\xa8\x58\x1d\xaa\x00\x38\x1e\x8a\xb5\x94\x82\x25\xf5\xff\x78\x1f\xf4\xff\x4b\x32\xca\x73\x68\x50\x64\x63\xc7\xe1\x77\x36\xfa\x12\x0e\x63\x46\x58\xf3\x2d\x51\x41\x18\xd6\x43\x99\xd1\xeb\x8a\xc7\x90\x5c\x01\xe2\xb1\xe1\x89\xde\xfd\xb1\x73\xc9\x56\x3b\xc3\xb5\xad\xb7\x73\x22\x76\xca\xc0\x70\x65\xb3\x79\x21\x0c\x40\x4f\x3b\xf0\xdd\xce\x97\xd3\x55\x5a\x09\xdb\x2e\xda\x3b\xd6\x27\xd4\x70\x5f\x95\x8b\xf7\x53\x03\x68\x44\xb2\x56\x75\xf8\xb6\x32\x9e\xd3\x96\xb4\x55\xd2\x4b\xf1\xa7\x30\x39\x3e\x01\x57\xfd\xc2\xda\xdd\x72\xc9\x5c\x17\x7f\xb4\x2f\x39\x80\xc4\xdb\x94\x19\x9a\x44\xd8\xa1\x15\x57\x15\x06\x31\xab\xe9\x6c\x8c\x44\xca\xcb\x22\x73\xbb\x02\x92\x0c\x00\x6a\x47\x44\x32\xb5\x56\x07\x3e\x1f\x1c\x2b\x76\xcb\x8d\x6c\x20\x0f\xb7\xaf\xdf\x1c\xb6\x2f\x62\xc5\x9c\xa9\x4e\xd8\xfb\x1d\x98\xe1\x7e\xde\x04\xbe\xe3\x2b\xf8\x9c\x97\x70\x76\x16\x42\x8f\xa6\xde\x5d\x3e\x93\xf9\x94\xc7\x31\x98\xd2\xf8\x20\x9f\xfc\x57\x23\xb4\x39\x13\x15\xeb\x6b\x5c\xbf\x63\x43\xea\x7a\xdd\x5c\x13\xbb\x1a\x13\x20\xe0\x07\xa0\xa0\xc4\xd2\x7c\xe8\x1f\x7d\x03\x41\xfd\x1b\x5a\xb7\xa5\x61\x18\xa2\x48\x12\x8f\x62\x8d\x86\x05\x7a\x25\xe1\x80\x5a\x77\xfe\xdc\x1c\x59\x5d\x25\xf4\x46\x1c\xdc\xf5\xfe\x40\x66\x2a\xd5\x57\x3c\x11\x13\x19\x57\x5d\x18\x15\x48\x5c\x5b\x35\xe4\xb0\x74\xf7\x02\x50\x5d\x9f\x52\xd5\xa4\x58\xb4\x9d\x94\x69\x21\x5b\x5a\x4a\x94\x9b\x50\x4a\xa9\x96\x29\x8f\x1a\xb0\x12\x70\x9f\xb4\xe6\x21\xbb\x6f\x71\xa0\xc0\xd5\x87\xe9\x05\xf3\x9c\x61\xf1\x38\x1c\x2f\x38\x6e\x16\x1f\xbf\x10\x6c\xc9\xcc\xb6\x8a\xb9\xb2\xf8\xa5\x2e\x5b\xe9\xbf\xd7\xbc\x2b\xff\xbf\x23\x79\x2a\xb5\x73\x00\xfe\xb7\xf3\xa0\xa3\x28\xbb\xe6\x69\x91\x96\x78\xfb\x24\xe6\x33\xd7\xc0\xc8\x25\x49\x55\x5d\x0f\x55\x0f\x98\x3d\x22\x9a\xe6\x73\x48\x96\xb6\xae\x07\x27\xb1\xe6\x89\x9c\xd2\x84\xa4\x5c\x98\xc7\xd8\x3c\x88\xca\x67\x7e\x26\xf6\xcf\x5b\x1e\x04\x62\x95\xcf\xf9\x34\x61\xd6\xb7\x51\xeb\xad\x18\xfc\xb8\x76\x23\x1c\xad\x04\x9a\x36\x2d\xa8\x20\x6f\xb9\x38\x72\x8e\xd1\xd7\xe6\xc8\x5e\xd3\x34\x4b\x18\xd6\x0c\x93\x6f\x47\xff\x91\x82\x11\x9b\xeb\x33\x24\x6e\x79\x6c\x0a\x98\x96\xe4\x25\xca\xe4\xb2\xa1\xac\x4f\xe4\xaa\x72\x50\xe7\x94\x55\xe4\x9b\xfd\x6f\xf6\x5f\xbe\x32\xea\x28\x46\xfc\xa8\xb2\x90\x69\xeb\xd4\x78\x39\x26\x9f\x88\x99\xc1\x4b\xfb\xdf\x6f\xec\x7f\xbf\x25\x9f\xc8\x27\x42\x26\x64\x42\xc2\xff\x9a\xff\x90\x4f\x64\x64\x88\x10\x4c\xf5\xe5\xb0\xca\xb8\x2a\x88\xdd\x76\x2f\x80\x18\xc1\xa1\x81\x55\x44\x32\x65\x30\xd5\x6f\xfe\x77\x88\x74\xcc\x35\x91\xc2\xde\xf9\x72\x0f\xa6\x34\x20\x57\xe0\x9f\x4f\xe9\x25\xfa\xa6\x0e\x22\x5d\xd0\xc4\x3c\x7c\xef\xdb\xd1\xcb\x01\x91\xa2\x7a\xfb\x92\x4b\xe8\xdb\x62\x67\xb8\xf7\x72\x30\x5e\x9b\xf2\x37\x1b\xa6\x5c\x99\x2d\xcc\x82\x8a\x15\x0c\x7d\xf3\x7e\x77\x5b\xfd\x40\xac\xae\xe8\xca\x6f\x78\x27\x37\xe7\x7c\xe9\xbb\xbc\x06\xa0\x49\x90\xb8\x00\xfb\x97\x3b\x1c\x3c\x1c\x74\x45\xb8\x1e\x93\x13\xbd\xbb\xab\x20\xec\x80\x6e\x03\xd7\x8e\xf6\x28\xc4\xf7\x05\xc2\xc3\xde\x78\x51\xab\x6b\x68\x80\x26\xd9\x69\x84\xe8\x5e\xfd\x64\xf1\x4a\xfd\x29\xe9\x40\x4d\xf2\x63\x55\xd0\x37\xd6\x4f\x7d\xfd\xe0\xfa\x1c\xcc\x5b\x4f\x77\xad\xdb\xa1\x63\x43\x97\x56\x25\x2b\x4f\x7e\xf9\x4e\x43\x48\x07\x74\xd2\x93\x58\xf1\x09\x51\x3f\x45\x3e\xee\x54\xcf\xe5\xc7\x1d\x88\x03\x7a\x55\xdc\x96\xd4\x5b\xf5\xc6\xa2\xb5\xba\x6d\x1c\x20\x0a\x1e\x88\xb8\xcc\xbe\x6a\x38\x7f\x68\x5d\x0a\xe6\xe7\x1c\x42\x92\xf9\xfa\x9b\x04\x19\x5a\x95\x84\x5e\x73\x0a\x03\xe0\x78\x72\x80\x1b\x58\x41\x1c\xf5\x2e\xf3\xba\x91\x76\x41\x0b\x01\x50\x98\x7c\x3c\x29\xc5\x1e\x8b\xe6\x76\x7b\xb0\xd1\xed\xed\x7a\x26\xfa\x65\x3d\x99\x6d\x48\xa9\x2b\x63\x4d\x08\x96\x6b\x36\x09\x94\x2a\x85\xfb\x27\xe8\xe6\xfa\x72\x03\x72\xac\x3d\x2e\xaa\x4a\xae\x17\x76\x23\x95\xcf\x94\x1a\x9f\xfb\x4b\x9d\x7f\x78\x3b\xbe\x22\x37\x41\x4b\x6b\x22\x2c\xbe\x19\xd6\x66\x6f\x3f\xff\x6b\x13\x19\xf2\xcd\xab\xfb\x09\x07\xfb\xdf\x8b\xca\x32\x6f\x5c\xdd\xbf\xee\x95\xb3\x1c\x40\x2e\xc4\x86\x43\x00\x75\x53\x65\x5c\x7c\xec\x05\x9a\xe2\xba\xa0\x58\x6a\x25\xd8\x95\xcd\x7f\xbd\xf9\xa5\x02\xdd\xdc\x31\xf7\xa1\x91\x3f\xb4\x80\xb6\x9a\x69\x56\x00\x84\x80\x21\xa4\xd3\xb4\xbf\xdd\xfb\x96\x8c\xc8\x8b\x81\xd9\x0d\x02\xb7\x15\x10\x33\x14\x65\x80\x66\x83\xaa\x80\x5e\x18\xe5\xc9\x50\x46\x0d\xb1\x15\x63\x92\xd4\x85\xd0\x7d\x14\x6f\x4f\x9b\xc7\x55\xba\x1f\x4b\x16\x08\x19\xb3\x83\x19\xb4\xd1\x59\x35\x05\xca\xae\xcb\x84\xd3\xb5\x31\x03\xd9\xb0\x90\x57\xe4\xca\x66\x69\xc3\x96\xb3\xb5\x86\xe1\x44\xf6\xcd\x1f\x7e\x4f\x01\x3f\xf3\x2c\xd9\xaa\x10\x9e\x95\xda\x63\xa4\x60\xd9\xdf\x85\x30\x3f\x23\xf2\xa3\x14\x32\x7f\x85\xda\x91\x19\x52\x95\xac\xf8\xe6\xc7\x21\xab\x09\x41\x4f\x2a\x02\x41\x19\xf5\xe6\x04\xac\xc3\x57\x9f\x1b\xc5\xdb\x90\x90\x30\x1e\x7b\x3e\x76\xdb\xe0\x08\xfe\x7e\x43\x66\xb2\x07\x1a\x5f\x73\x4d\x99\x6f\xe1\x75\x6d\x93\xaf\x71\x6d\xff\xdb\xf6\x08\x6e\x43\xbb\x14\xe7\x5a\x3b\x16\xb3\x72\x27\x66\x7a\x8a\x4b\x81\x4b\x77\xdb\xb1\x98\x25\x74\xde\x62\xcf\x37\xb4\xf7\x0c\x25\x2f\x20\x2f\xa1\xcb\x0d\x1b\x8e\x78\xeb\x76\x45\xe4\x2f\xcc\x8b\x68\xbd\x35\x71\x57\x18\x8e\x2a\x0b\x6d\x47\xad\x34\x15\x84\x8f\x58\x6c\x6f\x9c\x49\xe7\x93\x59\xf3\x5f\x2c\xa0\xb4\xb7\xcc\xcc\x19\x56\xf6\x5a\x7d\xd3\xba\x17\xb8\xc3\x36\x6d\xb5\x25\xf1\x99\xcf\x7f\x4f\x06\x79\x13\x1d\x24\xeb\xf9\xb1\x9c\x11\x7d\xc9\x40\xfe\xc1\xca\xa1\xa3\x6a\x0c\x74\xb1\xe6\x8c\x2d\x44\x41\x9f\x64\xd9\x9b\xd8\x45\x65\xb1\x6d\x6e\x44\x93\x50\x9b\x32\x1a\x19\x8f\x59\x8e\x02\x76\xca\x2a\x65\x4b\x3e\xdf\x85\xfc\x52\xde\x89\xe5\x4a\x90\xd7\x8d\x03\xfd\x13\xcb\xc9\x77\xa6\x45\x74\xc9\xb4\xf3\x67\xe7\x50\x69\x91\x15\x9a\x4c\x69\x42\x45\x64\x36\x6f\x3d\xbf\x41\x4b\x1c\x0c\x7f\x09\x4f\x41\x8c\x1c\x5f\x4e\x83\x43\x07\xd9\x98\x5c\x28\x6d\x46\xc3\x34\xcd\x72\x82\x07\x89\x92\x43\x73\x44\xdd\x00\xeb\xce\x04\x18\xca\xfe\x1b\x5d\xf4\x56\x18\x30\xa6\x6d\xbd\x5e\xe0\x57\xb7\x74\xae\x09\x30\xac\x4a\xaf\xb2\x89\x31\x61\xe3\x39\x28\xbc\xb5\x25\xdb\xa9\x16\x8d\xba\x3a\xa4\x9d\x21\xbe\xb5\x59\x39\x5b\xc4\x6b\xbd\x1d\xb6\x87\x49\xf0\x56\x22\x86\xda\xf6\xfa\xc0\xfe\x8e\xea\x13\x8c\x3a\xe4\x46\x07\xb5\xf5\xf6\xd1\x4f\xf4\x26\x8b\xf7\xa1\xcf\xcc\x9a\x7d\xdf\xde\xe1\xb6\xae\xf2\x57\x39\x39\x64\xde\xd0\xc4\x55\xc4\x40\x53\x58\x0f\x30\x2f\x76\x77\x4b\xcf\x00\x1c\x05\xe4\x2c\xa5\xed\x62\xb8\x68\xc5\x76\x20\x7b\x4e\xf5\x23\x9a\x25\x09\x1e\xd6\xd2\x84\x32\xaa\x70\xd8\x78\x8d\xc3\x08\x55\x2f\xc6\xc6\x1f\x6e\xe8\xd6\x86\x8e\xb2\x95\x87\x86\x1c\x92\x69\xa1\xc9\x9c\x2f\x8d\x00\xb8\x93\xd3\x03\x1d\x3b\x0b\x96\x64\x24\x67\x71\x11\x59\x28\x07\x90\x4e\x07\xa1\x85\x06\x99\xeb\x9e\x3b\xec\x54\x08\xba\x63\xd1\x25\xab\xc2\x87\xcf\xe0\x80\x80\xa2\xc5\x67\x84\x2d\x59\xbe\x22\x99\x54\x0a\x8e\x21\xb0\x2d\x2c\x68\x84\xd8\x99\x47\xb1\x06\x6b\x02\x66\xe5\x14\xf8\x1d\xab\xc1\xef\x80\x85\x2b\x2b\xac\xe8\x61\x1c\x7a\xdf\xee\xbf\xdc\x7f\x79\xbb\x31\x36\x81\xff\x95\x1e\x3a\xf7\xdf\x93\xd9\x06\x9b\xb3\x9c\x4b\x65\xe7\xdc\xc7\x89\xf7\x0d\xf8\xda\xbe\x1d\x04\xbe\xbc\x6f\xf7\xbf\xd9\x7f\xb9\x67\xe6\xfa\xcd\xc0\xcc\x3a\xf0\xd2\x7d\x13\x78\xe9\xfc\x2f\xed\x8c\x98\xaa\xf8\xe9\x4e\x84\xad\x5e\xbd\x92\x79\x6c\xb3\x74\x5d\x25\xa4\x99\x11\x22\x04\x1a\xd9\x90\x3a\x5e\x8e\xdb\xae\xea\x25\xd8\xd5\xe8\x2e\xe4\x9a\xfc\x39\x95\x39\xfb\x73\x70\xff\x8d\xfe\xb5\xe6\x6e\xb3\x47\xee\xa1\xd6\x3c\x45\xb2\x6d\x82\x64\x37\xcd\xd8\xb0\x91\x4f\x9b\x9c\xe6\xdd\x37\xae\xff\x25\x0e\x65\x93\xc7\xd0\xa9\x9b\xda\x24\xc7\xe9\x2a\xac\x89\x9e\x32\xa3\xd2\xa2\x0f\xac\x04\x18\xbc\x67\xbf\x5f\xa5\x65\x4e\xe7\x6c\xdf\x3e\xb6\x49\x05\xf3\x63\xe4\x22\xff\x8c\x9d\x93\x2a\x99\x42\x08\xdd\x64\x7b\x2a\xb9\xb2\x74\x97\x43\x0a\x5c\x80\x46\x50\xd1\x09\x84\xac\x80\x83\x06\xb5\xa2\x4f\x24\x1d\xf9\x81\x3b\x46\xd2\x2b\x75\x9c\x50\xa5\x79\xf4\xaf\x44\x46\x97\xe7\xda\x58\x3d\xad\x55\x8b\x4d\xa3\x56\xd6\x54\x90\x83\x5f\xce\xc9\x11\x57\x97\x65\xdb\x64\x6c\x81\x53\x2d\xa2\xa4\x1e\x02\xda\xe2\x69\x90\x94\x46\x0b\x54\x5d\xad\x0f\xda\xb5\x01\xeb\xee\xac\xfc\x89\x5e\x29\x86\xd3\x87\xb6\xb4\xe6\x6b\xd6\x9c\x05\x3f\x1a\xe6\x24\xbe\xce\xc9\xd1\x23\x24\x2f\xcf\xd4\x45\x63\x40\xeb\xf5\x66\x72\xae\x2b\x01\xe2\x42\x24\x0c\xab\x8d\x10\xdf\xbb\xda\x20\x0e\xf6\xd0\x4a\x16\xe4\x8a\xa2\x5d\x0d\x1c\x76\x4c\x2e\x78\xf6\x8a\x1c\x07\xad\x96\x36\x0d\x65\xb4\x0f\x8f\xdc\x6a\x0d\x6a\xd8\x73\x98\x8c\x64\x18\xb2\xad\x73\x22\xc7\xa8\x5a\xa9\x57\x64\x87\x5d\xeb\xbf\xec\x0c\xc9\xce\xf5\x4c\x99\xff\x08\x3d\x83\xd6\x6c\xb6\x15\xb7\xd1\xf1\xc4\x8c\xe5\xa5\xe9\x88\x3f\x58\x07\x83\xea\x7e\xcb\x92\x8b\x77\x47\xef\x5e\x81\x2e\x1f\x4b\x63\xf5\x65\x39\x5b\x1a\x9d\x92\xe5\xb9\x2c\xb1\x37\x02\x32\x40\xfa\x4c\x24\xd3\x2c\x97\x29\x0f\x0a\x90\xe1\xc8\x35\x39\x01\xa4\x8b\x0c\x38\x30\x6c\x61\x33\x74\xb2\x9f\xfc\x70\x6e\x4b\x05\x1f\x88\xbb\x6c\xa6\x93\x19\x91\x98\x28\x50\x85\x40\xe0\xca\xdf\x64\xb6\x8f\x1d\x45\x00\xae\x54\xb9\x61\x8c\x66\x6e\xbf\xda\x8f\xd9\x72\x5f\xc5\xf4\xe5\x10\x1e\x83\xbb\x61\x55\x9b\x13\x55\x64\xe7\xe5\xce\x98\x9c\xf3\x94\x27\x34\x4f\x6c\xc7\x6b\x3b\x44\x79\x9f\x31\x14\xdc\x80\x60\xfe\xbe\xd8\x21\x7b\x88\x41\x00\xea\x46\xc2\x1c\x20\x9d\x47\x2a\x85\x24\x9d\x41\x23\xed\x92\x74\xe0\x8c\x27\xad\x1d\xf2\x04\xb8\x24\x8d\xdf\x89\xa4\x71\xe6\x76\x75\x73\xb8\xd1\x5c\x01\x5f\x5e\x58\x7f\xe6\x4c\xe6\xd6\x08\xf4\xb7\x38\xa0\x23\x2e\xac\xda\xf2\xd6\x2c\xbd\xda\x1a\xf1\x43\x3a\x00\xdf\x23\x5e\x8a\x74\x43\x5f\x37\x1a\xa4\x22\x60\xab\xe8\x93\x23\xc7\xc4\x33\x96\x2b\xae\xb4\x61\x51\x71\x45\x35\xe0\xa8\x2f\xec\x1d\xa4\xf4\x3f\x52\x90\xe3\x7f\x9d\xdb\x69\x0d\xb6\x90\xd8\x0d\x39\x1d\xfd\x4f\x91\x33\xa3\x11\xb5\x56\xbf\xfc\x48\x75\x95\xcb\x7c\x4e\x8e\xa8\xa6\xa8\x79\x21\xa7\x92\x25\x38\x18\xb6\xaa\x87\xa2\x2d\x87\xfc\xd6\x50\x79\x26\x8f\xaf\xfd\x98\x1d\x74\xda\x1c\x75\xdb\xfc\xfc\xfd\xd9\xc9\x23\xe8\x4e\x11\x88\xdb\xf9\x5b\x19\x77\xa4\x40\x05\x03\x3a\x91\x07\xa0\xa6\x87\xf8\x39\x49\xcd\x93\xc8\xa9\x14\x6c\x48\xce\x18\x8d\x89\xe1\x6e\xf6\x9f\xbf\xe4\x5c\xdf\x17\xff\xaa\xbc\x5a\x8b\x7e\xb7\x88\x9d\x10\xc2\x0d\xe6\x88\x10\x36\xba\x07\x80\x4e\x60\x3a\x56\x07\x98\x26\x72\x4a\x2c\xb3\x78\xcc\xb7\x7f\x7f\x76\xd2\xd9\xcb\xbf\x3f\x3b\x71\xef\x6e\xfe\x29\x67\xdb\xf9\xda\x1d\x1a\x0f\xa5\xed\xf0\xba\xa6\xec\x97\xea\x5c\xd9\x8f\xa8\x6e\x10\xdc\xdd\x1a\x18\x77\x65\x07\x3c\x16\xcd\x2f\xb9\x68\x5c\x03\x58\xe5\x36\xd0\x6c\xc8\x43\x62\x05\x41\x34\x40\xe2\x8b\x5f\x91\xb4\x48\x34\xa0\x1e\xc1\x5e\x33\x9b\x0f\xb2\xc5\xdc\xae\x23\x16\x01\x94\x90\x23\x86\xe1\x88\xf8\x95\xab\x43\xf1\xbf\xd8\xfc\x83\xb7\x54\xd0\xb9\xb9\x1d\x24\x20\x49\xf1\xcf\x60\x93\xef\xa1\xd3\x5d\xf8\xaf\xe8\x92\xf2\x84\x4e\x79\xc2\x35\xe8\x73\x83\xb1\xd3\xe6\xb1\x54\x01\xa6\xfc\x68\xdc\xaf\x53\xd5\xd6\xab\xad\x21\x3e\x0c\xc0\x1b\x92\x3d\xf3\xdd\xfe\x95\x61\xf5\x83\x31\xf0\x7d\xb8\x11\x50\xdb\x6b\xca\xef\xd9\xe7\x94\xdf\x47\xd1\x53\x61\xbd\x5f\x37\x6c\x94\xb6\xae\x3b\x99\x91\x36\xea\x4e\xf0\x85\x05\x1d\x7d\xe6\xea\x13\x36\xab\x6f\xa1\x40\xc1\xd9\x69\xf8\xfb\xb6\x2a\xd4\x97\x39\x38\xf1\xf3\x3b\x38\x04\x5b\x4a\xda\x95\xee\x84\x5c\xe5\x70\x4e\xd7\xf0\xe0\xd2\xf8\x55\xad\x7c\x1e\x4f\xd6\xb9\xe5\xe5\x0e\x74\x1a\x7e\x6f\xce\x53\x13\x70\x0d\xbc\x5a\xb3\x5f\xbf\x83\xbb\xa1\x8b\x1b\xcd\x91\x05\x85\x14\x7c\x4c\x1a\x9f\xb3\x96\xaf\x19\xb1\x6c\x31\x6b\x9f\xd9\x6e\x86\x79\x7d\x5e\x8d\xda\x1c\xb2\x6c\x41\x5e\x9f\x6f\x60\x93\x58\x55\x60\xde\x5b\x61\x2c\x67\x57\x91\x84\xcf\x98\xe6\x8d\x88\xf0\xc8\x8c\x32\x95\x82\x6b\x99\xab\x47\x60\x73\xee\xd1\xdd\x28\x6e\x6e\x34\xb3\x3f\xcf\x1c\x51\xc8\xdb\xe0\x53\x4a\x22\x99\x24\x2c\x72\xb9\xfe\xb0\xc4\xfe\x67\x1b\x1c\x31\x36\x03\x41\x8d\x2f\xff\x0e\xae\x18\xeb\x74\xd9\xc7\x6d\xb7\x7f\x76\x7c\x70\xf4\xf6\x78\x9c\xc6\x7f\x5a\xc8\xab\x91\x96\xa3\xff\x8f\xbd\x77\xed\x6e\x1b\xb7\x16\x86\xbf\xf7\x57\x60\xf9\x74\x2d\xdb\x53\x49\x4e\xa6\x3d\xed\x69\x9e\x9e\xce\x72\xed\x64\x1e\x9f\xc9\xc5\x8f\x9d\x99\x59\xe7\x4d\x72\xce\x40\x24\x24\xa1\x26\x01\x0e\x01\xca\x51\x3b\xfd\xef\xef\xc2\xde\x00\x08\xe8\x4a\x49\xf4\x2d\x43\x7e\x49\x4c\x91\x20\xb0\xb1\xb1\xef\x97\x4a\xb1\x3e\xd7\xfb\xc9\x5b\x0f\x58\x4f\xa4\x05\x4b\xb7\x9e\xb4\x65\xe4\xd6\x13\xb3\x65\x75\x51\xeb\xef\x55\x5d\x76\xde\xf9\x9d\x4b\x29\xf5\x62\xe1\xf9\x51\x95\x65\xb8\xb7\xba\x64\xac\x17\xda\xb7\xb7\x2c\xcb\x5f\x5f\x8f\x4b\x16\xae\xcd\xbc\x11\x88\xee\x56\x32\x7e\x2c\x07\x64\x7f\x59\x61\x57\x49\x9b\x2c\xec\x43\x3d\x5e\xbc\x13\xd7\xd1\x7d\x74\x88\xe8\x89\xd9\x97\x1b\x36\x23\x50\x3a\x62\x24\x4b\x68\xe3\x12\xe3\x27\xd3\x09\x00\xef\xa4\x52\xac\x1c\x58\x81\xe3\x91\x00\x7e\x1f\x51\x04\x16\x72\xc5\x46\x6d\x82\xfd\x8a\x8d\x96\x41\xdd\xde\x86\x5a\xb7\x3e\x3c\xce\xc8\x2b\x95\x9e\x60\x6c\x2c\xd6\xd8\x46\xd8\x2e\xdd\x06\x5b\xfb\xe3\x91\xc0\x7d\xaf\xaa\x0d\x6d\x54\x16\xda\xa7\x93\x22\x59\xd8\xbc\xd0\x6c\x69\x37\x49\x6f\xed\x06\x91\x53\xa3\xc5\xb2\xdb\x93\x5b\x59\xde\x70\x31\xee\xdf\x72\x3d\xe9\x23\xa4\xd4\x09\x54\xfc\x3f\xf9\x37\xf8\xc7\x7a\x91\x4f\xd3\xd4\xc6\xbf\x55\x8a\x8d\xaa\x0c\x23\xd3\xd4\x80\xd0\x82\xff\xc0\x4a\x05\x51\x96\x37\x5c\xa4\x3d\x52\xf1\xf4\x9b\x5d\x77\x8c\xb4\x71\x5a\xcc\xd9\x6f\xe7\xa0\x40\x4f\x27\xae\x6c\x07\x43\xcb\x46\x4b\x47\x93\x4a\x9a\x4a\x85\x7d\x9f\x0c\xa8\xa2\x23\x40\xd3\x9c\x8b\xc7\x72\x02\x76\xd5\x0e\xb8\x48\x77\x83\xe4\x9c\x03\x02\xc6\x89\xd5\x03\x7b\xcf\xba\xb1\x7d\xcc\x0f\x75\xd6\x13\xec\x1e\x6f\xa3\x7f\xe2\xd8\x9f\x46\x84\x25\x9f\xa9\x9f\xb3\x3e\x7e\xa5\x5f\xa4\x35\x5c\xbb\x40\x9e\x6d\xae\xfb\x0b\xe4\x69\xd7\x20\x7f\x0f\xe1\x39\x77\x8a\x71\xe4\x11\xcb\xcc\x77\x6b\x07\x7b\x40\x50\xef\x2f\x19\xdf\x8d\x84\x56\x73\x1f\xe8\x49\xa8\x5c\xa1\x3c\x10\xc0\x90\x2a\x39\x7b\x1a\xc4\xc8\xd7\x4d\xb0\x5c\xb5\x87\x44\x0a\x61\xfb\x23\xbc\x2b\x98\xb8\xd6\x34\xb9\xd9\xd3\xab\xdb\x49\x55\xbf\x32\xa9\xea\x8e\x02\x81\x1c\x8a\x62\xe2\x9d\x0d\x7f\xab\x83\xbd\xf1\x90\x3f\x41\x02\x8c\xcd\xfe\xde\xd0\x62\x7f\xeb\xaa\x1b\x69\x4e\x82\xf2\xb7\xad\x41\x15\x92\x83\x0a\x59\x40\xb1\x31\x9b\x82\x0a\x70\xbc\x7f\x89\x67\xdf\xf3\x6d\x59\x4c\x7b\x31\x30\xc1\x80\x31\x45\xcd\xcd\x9d\x21\xd7\x35\xad\x54\x4c\x63\x29\x28\x5b\x22\x59\x0a\x92\xd8\x72\x0f\x20\x8f\x04\x45\x0c\x02\x59\x45\x10\x99\x68\x97\x35\xea\xab\x46\x3d\x7b\xf6\xec\x19\x56\xc2\xf9\xd3\x9f\xfe\x44\x64\x09\xbd\x48\x13\x9e\x2f\x3e\x08\x4f\xfd\xfb\xf3\xe7\x03\xf2\xdf\xa7\x6f\x5e\x43\x46\x43\xa1\x15\x56\x7d\xc3\x91\xcd\x03\xd1\xcb\xaa\x47\xfe\xeb\xfa\xdd\xdb\xba\x46\x43\xfc\x2b\xa8\xe6\x7e\x79\x71\x5f\x90\x67\x7f\xfc\xc3\x1f\x06\xe4\x9c\x97\x90\xd1\xc5\x99\xef\xcd\xee\x4d\x2d\xb4\x64\x58\xb9\x07\x6a\xa8\x38\x89\x8b\xfb\xf6\x8e\x36\x3f\x39\xe7\xe3\x89\xb6\x19\xb1\x06\x21\x33\x9e\x68\x4c\x1e\x43\xb2\xe6\x5a\xbf\x63\x4b\x11\xdb\xa4\xc7\x4a\x7f\x30\xb9\x1e\xc9\xf8\x0d\x23\x23\xf5\x6d\x29\xab\xa2\x2e\xf3\x88\x05\x5a\x5c\xa2\x0c\x0e\x56\xef\x95\x62\xfa\x89\x87\xad\xee\x65\x6a\x8e\x70\x1b\x46\x9a\x13\x58\x6d\x7a\x6b\x5d\xea\xb0\xa0\xdc\x27\xc3\x40\x04\x60\xd4\x03\xd4\xdb\x7a\x52\x72\xe6\xa9\x8a\xab\x39\x52\x94\xf2\xef\x88\x02\x90\x8b\x1c\x90\x67\xc8\x15\x86\x9d\xb4\x99\xc2\x81\x77\xcb\xe5\x53\xdb\xe6\xec\xee\xb6\xed\x64\xb3\xd8\x0e\x2c\xe3\xca\x7c\x02\x8a\xfd\xac\xf9\x72\xdd\xcb\xd8\x60\xa9\x42\x7c\xa9\xc4\xc2\xdb\xb6\xb0\x8a\x25\x97\xb6\x09\xa8\xad\xaf\x58\x8f\x81\xe5\x01\x6c\x1d\x1c\xfb\xac\x83\x92\x07\x44\x14\x6f\xad\x98\xae\x2c\x68\x20\x8a\xde\x7c\x1b\x1a\x54\xc2\x0a\x73\x5a\xde\x18\xc5\xd5\x52\x97\x01\xb9\x34\x93\xf4\xa5\x74\xb0\xd8\xf1\x14\x1d\x9b\x39\x9d\xc1\x67\xad\xe0\x06\x1f\x39\x1c\x0c\x0e\xf1\xf8\xc9\x92\x28\x4d\x4b\x7b\x96\xcc\xfd\x2f\xa3\xca\xfa\x1b\x5a\x28\xac\xfa\x6b\x24\x55\xa8\x88\x2d\x21\x77\x5d\x4f\x1c\x09\xa2\x16\xd6\x5d\x65\x74\xd2\x07\xc0\xec\x3c\xc0\x23\xaf\x8a\x6e\x77\xdf\x9e\xf2\x47\x51\xb2\x3b\xdf\x43\xe0\xc0\x6b\xde\xa7\x9a\xce\x79\x36\x1a\xc9\x1b\xb6\x2b\x54\xc6\x9e\x94\x80\xb1\xbc\x0b\xac\x25\x9c\xa1\x00\x16\xb6\x07\x7d\xba\x72\x04\x5e\x6d\x48\x13\x78\xed\x2f\x53\xe0\xb5\x8f\x13\x19\xaf\x08\x87\x9d\x27\x19\x81\x69\x19\x18\xf2\xa8\x51\xbd\x05\xd0\xab\xaf\x08\x8e\x35\x36\xb6\x75\x0d\x9a\x05\xa1\x43\x25\xb3\x4a\xe3\xab\xf5\x8f\x21\xf7\x83\x41\x5d\xcd\x70\x60\x79\xfe\xb1\x80\x17\x82\x14\x80\xec\x63\x1f\xb6\x88\xd7\xde\x64\x63\x1f\x23\xc4\xaf\xc8\x00\xb1\x37\x9c\xbd\xc2\xd6\x06\xac\xdd\x60\x3e\xe3\xee\x76\xc2\x6c\x08\x44\x20\xf7\x19\x6a\x6a\x68\x04\x08\x95\x4e\x84\xc3\xc2\x39\xe9\x83\x98\x19\x13\xc5\xf7\xb7\x25\x28\x4e\x8e\xce\x7c\x7a\xbc\x0b\xbb\xbb\x10\x9a\x95\x23\x9a\xb0\xe3\xd0\xc6\xc0\x8a\x09\xcb\x59\x69\x00\x65\x9f\x73\x39\xda\x13\x2a\x52\x5b\x76\x2a\x61\x25\x9c\x60\xf6\x59\xb3\xd2\x00\xf5\xec\xfa\x82\xa4\x25\x9f\xb2\x52\x91\xa3\xbf\x41\x39\x41\x2c\x37\x75\xfc\x04\xc3\x60\x71\x21\x0f\x61\x01\x81\x0f\xb7\x93\xfa\x01\x43\x39\x1a\x2e\x02\x3a\x53\x6f\x95\xab\x8d\x65\xb6\x55\x85\xb6\xa3\x81\x39\x10\xc0\x42\x81\xfa\x42\x47\x6b\xf4\x6d\xba\x62\xf6\xd0\x78\x2b\xd1\x38\x30\x55\xa4\x64\x63\xa3\x8d\x95\x41\xd1\x3e\x2c\x93\xf2\x60\xc9\x0d\xed\x27\x94\xd4\xce\xaa\x75\xb9\x1f\x23\xab\x57\xca\x29\x4f\x9d\x38\x84\x85\xf1\x7d\x69\xb8\x82\xaa\xa0\x78\x01\x55\x4a\x26\x1c\x4c\x4d\xc1\xd6\xa0\x96\x0a\x42\x53\xdc\x0a\xcd\xb9\x9b\x43\x37\x99\x84\x86\x42\x3b\xf5\x61\x25\xad\x30\x44\x99\xb2\xcb\x6a\x98\x71\x35\xb9\x6e\xd5\x25\xb2\x6c\x60\x0c\x4a\x5c\x88\x54\x59\xe9\x19\x51\x4c\x28\x6e\xdb\xe6\xa3\xb8\xc5\x25\x74\x59\x30\xdb\xe0\xde\x0e\x0f\x85\x84\x6c\x78\x68\xc6\xef\x7e\x7a\x5b\xcf\xc3\x16\x2b\xc1\x2e\xd0\x29\xfb\x5e\x14\xd1\xfd\x84\x66\x99\xb2\xf2\xad\xef\x71\xe2\x78\x0f\x4a\xa8\xae\x80\x09\x62\x05\x37\x08\xe3\x66\x0f\x21\x38\x48\xbc\x7c\x43\x9e\xa5\x0b\x53\x41\xb9\x61\x29\xdc\x43\xd0\xcc\xda\xbd\xe0\x21\x84\x99\x38\x88\x74\x0f\xd8\x0a\xa5\x73\xff\x3c\x3d\xf7\xcf\xdd\xe4\x54\xd4\x2d\x46\x29\xdc\xec\x43\x86\x16\xba\x36\x2a\xdb\x36\xd7\x31\x1a\xc7\x90\x36\x84\x69\x3e\x98\x0b\x18\xe7\x77\xaa\x6d\x2f\x8a\x76\xac\xbb\xf3\x83\x82\x28\x66\x54\x71\xa0\x50\x7d\x0b\xbf\x24\x38\x52\x56\x47\xf6\xe7\x7c\x91\xae\xd5\x3c\x1d\xd8\x39\xde\x3c\x54\x24\x95\x49\x65\x94\xaf\x1a\xec\x75\xc0\xc5\x7e\xdd\x0a\xbf\xac\xf6\x49\xa9\xbc\x15\xb7\xb4\x4c\x4f\x2f\x77\xca\xcd\x8d\x85\xb3\x7a\xac\x50\xf4\x76\xb7\x89\xb9\x4f\x87\x50\xf0\xd6\xd6\x36\xec\xbc\x7d\x4b\x87\x08\xa9\xf9\x32\x73\x9b\x96\x86\xc8\x36\xf4\xe6\x6d\x6b\xb0\xeb\x1c\x84\x9d\x83\x30\xba\x1e\x93\x83\xf0\x02\x1d\x84\x61\xa7\xdf\x88\xbc\x58\x0b\xad\x81\xf8\x17\xe1\x63\x3a\xaf\x49\x2a\x4a\xe2\xf3\xf9\xbc\x73\xc2\x3f\x1e\xde\x1a\xeb\x02\x85\xc1\xd1\x5c\x90\xcb\xbe\x04\x7f\xd4\x23\xf0\x27\x01\x2c\xf7\xd0\x0a\xf1\x8a\x09\x7e\x9d\xaf\x86\x55\x6a\xd1\x31\x1d\x78\xb8\x0b\x99\xda\xde\x06\xd0\x74\x03\x1b\x08\xf4\x7c\x67\x40\xe1\xd2\x4d\x41\x3a\x2f\x68\xc2\x80\xbe\x79\xf1\xa7\x15\x27\xc1\x9e\x08\x40\x5a\x42\x02\x02\x88\x00\xd0\xb9\xdc\x07\x1b\x48\x6b\x18\x61\xae\x5a\xe3\xd9\x77\xa4\xf9\x8a\xa2\x38\xaa\x43\x04\x95\x4c\x58\x4e\xe1\xbf\xaf\x1c\x08\x0c\x6d\x34\xca\x83\x66\x58\x02\x8e\x95\xb9\x22\x72\xd4\x8b\x22\x5d\x0f\xa6\xcf\x0f\xf6\x73\x36\x90\xf6\xfc\x94\xc4\x9d\xa3\xcb\xbd\x9d\x3d\x64\x1e\x60\x97\x91\x6f\xc7\x9c\xa1\xba\x07\xa6\xab\x7b\xef\x23\x28\x80\x7f\x20\x84\x1f\x0d\x70\xda\x76\xe2\xee\xea\xbc\xed\x79\xaf\xc1\x13\x10\xfe\x3a\xe7\xed\x97\xe8\xbc\x0d\x18\xa3\x23\x74\x4b\x1c\xb9\xa1\x4b\xc0\x79\x73\x87\xcc\x29\x35\x56\x87\x71\xae\x5c\xe7\xc7\x95\x65\x1c\xba\x74\x38\x18\x1c\x1e\x3a\xef\xae\xc5\xfb\x4a\x8f\xfa\xff\x41\x98\x48\x64\xea\x1a\xf8\x8e\x78\xa9\x34\x88\x7b\xb5\xb9\x2d\x9c\x4b\xee\xbe\x15\x86\x3f\xc1\xd8\x6d\x6c\xf5\xde\xb4\xc5\x95\x24\x7c\x75\x07\x42\x4c\x2d\xba\xf8\xc2\x87\x16\x44\xbe\x9e\xb5\x95\x61\xdc\xef\x8a\x64\x3c\xe7\xb6\xff\xbd\x39\xe8\x4c\x69\x45\x8e\xf0\xe6\x20\x29\xaa\x9e\x7d\x60\x90\xb3\x5c\x96\xb3\x9e\x7f\xc8\xfc\x18\xbd\x65\x9f\x38\xc6\x7e\x27\x55\x59\x32\xa1\xb3\xd9\x97\x2c\x01\x39\x20\x3e\x12\x01\xc8\xef\xf1\x3e\x15\x47\xea\x2b\x46\xad\xda\xe3\x0b\x66\xf3\xa0\xbf\x80\xaf\x46\xab\x7a\xb5\x5f\xdc\xdc\x65\x62\x4a\xa6\xb4\xdc\xb2\x72\xfc\xb2\xab\x45\x99\x27\xe5\x53\xae\xe4\xce\x6e\xd1\x60\xa0\x10\x3c\xd7\xde\x08\x6d\x0e\x9b\xac\x74\x51\x69\x4b\xd1\xdd\x09\x74\x55\xc6\xfd\xc9\x9b\x13\x0e\x9f\xef\xd2\x45\x29\xbe\x0a\xaa\x35\x2b\xc5\x0b\xf2\x3f\x47\x1f\x7f\xf7\x4b\xff\xf8\x9b\xa3\xa3\x0f\xcf\xfa\x7f\xfe\xf4\xbb\xa3\x8f\x03\xf8\xcf\x57\xc7\xdf\x1c\xff\xe2\xfe\xf8\xdd\xf1\xf1\xd1\xd1\x87\xef\xde\x7c\xfb\xfe\xf2\xe5\x27\x7e\xfc\xcb\x07\x51\xe5\x37\xf8\xd7\x2f\x47\x1f\xd8\xcb\x4f\x0d\x07\x39\x3e\xfe\xe6\xb7\x7b\x4f\x9d\x8a\xd9\xbb\x3d\x49\x21\x5e\xfd\x16\x59\x72\x3c\x62\x2b\xe8\x37\xd7\x56\x82\x0b\xdd\x97\x65\x1f\x87\x7e\x01\xc5\x82\xf7\xfc\x80\x43\xaf\xb6\xcf\x7f\x2d\x06\xd4\xe5\xf6\x9d\x50\xff\xc0\x07\x1c\x5c\x9f\xe7\xbc\x85\x34\x63\x37\x52\x9c\x26\xa3\x59\x5e\xc8\x92\x96\x33\x92\x5a\x6b\xe6\x6c\x49\x05\xa2\xa0\x04\xd1\xde\x25\x85\x61\x1e\x29\x2f\x1f\x20\xd3\x78\xef\x8a\x42\x2c\xe5\x55\xde\x52\x3d\x21\x18\x2b\xdc\x8c\x5b\xa8\xbc\x6f\xab\xf6\xbb\x90\x22\xfb\x98\x75\x68\x0c\x69\x72\x83\x1a\x94\xdf\x2d\x94\x1b\x83\xd4\xfa\x83\x03\x1b\x12\x91\x33\x2a\xbc\x61\x1f\x62\x5b\x64\xca\xcc\x56\xba\x87\x71\xec\xc8\x08\x8f\x9e\x76\x1b\x40\x58\x77\xa4\x92\x25\x79\x03\x02\xd0\x83\xee\x3e\x69\xa5\x56\x08\xff\x07\x7b\x6d\xa4\xbe\x96\x32\x51\xdd\x70\x2e\x80\x48\x4b\xd0\x37\x6d\x5d\xaf\x11\x34\xd9\xaa\x23\xc4\x22\xc9\x02\x36\xf2\xa5\x3b\x96\xce\x7f\x6b\xb6\xd3\x8c\x8a\xb2\x29\x18\xa6\x33\x85\x71\x2b\x3c\x81\x3e\x50\xa0\x9b\xc2\x76\xf8\x2d\x7c\x1f\x34\xea\xaf\x94\xf9\x92\x14\xf1\x33\xf5\x87\xb0\x4d\xd6\x10\x71\xc2\x75\xd7\x8e\x35\x6a\xf3\xcb\xb5\x5f\x59\x6d\xcf\x80\x94\x65\xa7\x7e\xaa\x0a\x94\x14\xfb\x15\x2b\x6a\xcb\x11\x44\x56\x04\xfd\x7a\x5c\x4b\x9a\x05\x44\x15\x3c\x8b\x31\xd5\x75\x9e\xf0\x0b\xaf\x84\x0d\x28\x7c\x70\xb4\x7b\x72\xd2\xc7\x9e\x32\x47\x5b\x92\x46\x2b\xf2\x45\xeb\x52\x85\x8f\xdc\xdc\xbf\xdf\x6b\x1d\x04\x1a\xb1\xd5\xb0\x47\x46\x1c\x10\x4a\x7d\x5b\x34\x47\x13\x5c\xd4\xc1\x7b\x6f\x51\xb2\xec\x36\x99\x25\xb6\xc2\x13\x8f\x3a\xf8\xe0\xb0\x78\x34\x20\xb7\xaa\xef\xbb\x57\xd7\x76\x09\x32\x64\x23\x0c\x7c\xc2\x77\xc0\x60\x60\x33\xc2\x52\x96\x31\xcd\x82\xb6\xf3\x05\x36\xca\x2e\x59\x2e\xa7\xb6\x4d\xeb\xf7\xca\xba\xcd\xf9\xe8\x05\xa1\xc7\x51\xde\xb1\xb2\x7d\x90\x19\x4b\x31\x4d\x2c\xe8\x2d\x58\x56\x42\xf5\xc8\xf0\xd8\x85\xb5\xda\x2e\x98\x25\xd8\xd6\x6c\x93\x2f\x30\x67\x95\xcc\x00\x00\x6a\x55\x95\x32\x27\x4a\xd0\x42\x4d\xa4\x06\xcb\x09\x2d\x68\xc2\xf5\x8c\xe8\x92\x26\x37\xe6\x11\x70\xa7\xc2\xe7\x7a\x24\x39\xb6\x51\xee\x21\xf8\xe2\xcc\x35\x3d\x29\x65\x35\x9e\x40\x2a\x15\x3e\x95\x64\x54\xb9\xd5\x2f\x7d\xdf\xaa\xf2\x8a\xa4\x33\x41\x73\x9e\xf8\x16\x22\xa5\x9c\x72\xc5\xa5\x75\x78\xb9\x71\x2f\x7d\x33\x06\x74\xa2\x9d\x65\x94\xe7\xe4\x48\x31\x46\x5e\x3a\x94\xc0\x5f\xae\x51\xa0\x44\x83\x62\x19\xc7\xd6\xd9\xba\x8f\xb6\xfe\x80\xb9\x53\x53\x60\x1f\xb1\x80\x32\x81\x99\xf9\xd2\x8f\x1e\xfb\xed\x5a\x3e\x27\x59\x42\xdc\x9b\xeb\x04\xc4\x44\x2a\x83\xc0\x98\xd3\xcb\x0b\x15\xaa\xb9\xb6\x9b\x22\x8e\x04\x3f\x64\x52\x8c\xc3\xfa\x77\x35\x66\x1a\x5a\x2f\xa0\x2d\xe6\x94\xa7\x15\xcd\x90\xca\xdb\xc9\x9c\x5d\x5f\xe0\xeb\x7c\x3c\xd1\xfd\x5b\x06\x46\x50\x64\x86\xf5\x99\x71\x1f\xe5\x0b\x01\xb7\x5c\x01\x57\xd0\xd6\xd8\x86\x06\x65\x68\x3d\x49\x67\x50\x7f\xd7\xc6\x78\x46\x31\x39\xae\x5a\x3d\x0e\xb1\x0c\xe2\x30\xbd\x53\xdf\x27\xd1\x48\x46\x60\x25\x36\x20\x06\x4c\x5d\x9c\x1b\x34\x7d\xac\x5b\x6f\xf8\xdb\xba\x6e\x00\x09\x72\xf1\xee\x8d\x82\x1f\x4c\x9e\x9d\xd6\x68\xf2\x9e\xe5\x45\x46\x75\x3b\x11\x26\x07\x3f\x06\x56\xf0\xc0\x87\x6c\x8e\x23\x15\x69\x9f\x66\x06\x23\x2f\x7f\x38\xb3\x09\x6e\x78\xc0\xa2\x28\xb6\xf7\x75\xab\x52\xd7\xa5\xda\x08\x4b\x4b\x8f\x16\x94\x54\x1b\xb2\x14\x88\x91\xfd\x32\x98\x2a\x6e\x05\xb6\x0a\x36\x7f\x5c\xfe\x70\xd6\x23\x7c\xc0\x06\xee\x2f\xff\xa8\xa3\x86\x5a\x8e\x31\xcf\xc1\x27\xd2\x00\x3e\xc3\x54\x42\x1b\x70\xf8\xee\x4f\x7f\x31\x93\x34\xbf\xfe\xb5\xff\x97\xa0\xa5\xd1\x5f\x7f\x32\xc4\xb5\x34\x0f\xc4\x77\xc3\x30\x73\xa0\x7b\xe6\xaf\x9f\x2e\x65\x7a\x5d\xb0\x64\x80\xcb\x52\x3f\x61\xb0\x00\x61\x42\x1b\x91\xfb\x52\x42\x80\x19\x4f\x11\xcb\xe1\xdb\x25\xfb\xbb\xf3\x13\xd8\xae\xa9\x96\x90\x24\x54\x33\x01\x0c\xc0\xe5\x1b\x0b\xa9\xf1\x75\xec\xb7\x0a\xf3\x3f\x1a\x85\x1d\x50\xb5\x94\x70\xcc\x91\x94\x9c\x0a\xc2\x3e\x73\x05\xe5\x67\x70\xad\x00\x0e\x6a\x63\xd8\x1d\x4f\x33\xc3\x1a\x08\xfb\x6a\x43\xd0\x82\xd5\xcc\xed\x2b\x21\xf5\x57\x7e\xfb\x5d\x7c\x22\xf6\x33\x27\x74\x2a\x79\x4a\x2a\x68\x9f\x65\x4e\xa0\x00\x03\x77\xdd\xc1\x70\x38\x23\x39\x57\x9a\xde\xb0\x01\xb9\x36\x3c\x2b\x0c\x34\x40\xe8\x09\x02\xcd\x68\x58\x4a\x2a\xa1\x79\x06\xbf\xd6\xe3\x98\x29\x87\xbc\xec\x62\x44\x54\x95\x40\x8f\xde\x92\xf5\x1d\x77\xb4\x4f\x2d\xd0\x98\x7a\x2d\x3d\xbf\xd9\x13\x8a\x6a\x54\x91\xc2\xab\xd8\xf1\x57\x58\xf4\x5a\x08\xaf\x36\xf3\x94\x22\xa9\x39\x22\x00\x13\xba\x6c\x1b\x26\x98\xb9\x38\x20\xd4\xe8\xac\xdf\x40\xb0\x84\x29\x45\xcb\x19\x36\x45\xe5\xbe\x77\xa3\x8d\x7c\x05\x4e\x9d\x53\x51\xc1\x00\x25\xc3\x16\xbb\x55\x02\xd0\xa1\x64\x58\xca\x1b\x26\x7c\x26\x81\xd9\xc5\x38\xae\xba\x0e\x1e\xc5\xee\xd3\x24\x99\x50\x31\x66\x75\x32\x79\x4e\x53\x80\xfd\x77\x5e\xd2\x72\xeb\x31\x10\xa0\x23\x23\xb0\x70\x0d\xa0\x18\x1a\xfe\xe4\xbd\x1f\x1f\x85\x2f\x87\xdb\xab\xdd\x13\x66\x49\x3c\xdb\x89\x26\x92\x76\xec\xe1\xfb\x5b\xc2\xfb\x20\x50\x3c\x60\x0c\x77\xce\x34\x4d\xa9\xa6\xad\xc5\x71\xbf\xa1\xbe\xf9\xa7\x8d\xed\x00\x74\x08\x62\x3e\x2c\x8f\x75\xa2\xa4\x2c\x78\x58\x5e\x00\xa8\xc1\xc4\xed\x3e\x94\xa7\xd2\x06\xaf\xad\xef\x11\xc3\xb3\x41\x56\xa3\x59\x26\x6f\x6d\xc1\x3a\x37\x1a\x92\x2c\x96\x92\xb4\x02\xb1\xaf\x26\x69\xfb\xf8\xc6\x5b\x71\x9d\x98\x8d\x6e\x0d\xca\xef\xeb\x10\x80\x24\x0e\xd1\x5e\x2a\xa0\x21\xaf\x63\x42\x73\x6c\xa5\xef\xea\x41\x58\xe0\x57\x02\x8f\xea\xdc\x36\xc0\x3e\x8d\x99\x56\x75\x70\x25\x72\x13\x43\x22\x2d\x2f\xb7\xb6\x04\x60\x35\x76\x6b\xac\x3a\xbe\x5c\x52\xc4\x8d\x53\xd2\x72\x0b\xc3\xbf\x1e\x7c\x67\xda\xf3\x21\x61\x17\xdc\x37\x32\xdd\xdf\x19\x35\xd7\xce\xb5\x1e\xb8\x4e\x3a\xc1\x04\x24\x05\xb6\x1e\x7c\x00\x5c\xf3\x2a\xaa\x96\x81\x2c\x60\x42\xa7\xbb\x5b\x55\x6b\xc9\xb4\xef\x7b\xb6\xc1\xe7\xfa\xf0\xb9\xfe\xf3\x7d\xed\xd7\xfb\x07\x2f\xba\x6b\xcf\x20\xc6\x78\x42\x2d\x38\x2c\x0c\x69\xbd\x6e\xc5\x9f\x30\x57\x4c\xc9\x8f\x6b\xf9\xaf\x0d\xd0\xf0\x41\x31\x36\xad\x96\x71\x43\x35\x5f\x90\xaf\x22\x89\xcb\x4a\xb6\x5e\x1b\xc6\x64\xa6\x23\xa7\x1e\x0f\xec\xc6\xbb\xaa\x5e\xf1\xe3\xc7\x73\x83\x81\xa8\xb7\x5c\x6b\x74\x49\x53\x5e\xfc\x36\xa2\x32\xb4\xe3\xf7\xa9\xaa\x06\x99\x4b\x99\x65\xae\x85\x3b\x6a\xc8\x73\x21\x4e\xd0\x3e\x08\x9d\x26\x3d\x6f\x86\xf0\xf2\xbe\x60\xb7\x5e\xb0\xa3\x0a\xab\x96\x3a\x97\x3d\x98\x4a\x5c\xdc\xd9\xb2\xf1\x06\xd0\x03\x1f\x7e\x3f\x15\x33\x9c\xfc\x79\x00\x5c\x34\x30\x90\xb1\xf9\x94\xd1\x01\x04\x1d\x66\x46\x0a\x09\x36\xc0\x7f\x67\x8e\xa5\x69\x19\x3c\x75\xc5\x46\xd6\x32\x10\xde\x6a\xf6\x2e\xf2\xc3\xe8\xc5\x41\x1d\x25\x69\xc5\xe4\xa0\x52\xa6\x85\x7a\xf4\x48\x1c\x55\x34\x37\x5a\x54\xb0\x67\xd9\x0c\xf6\x0c\x3d\x68\x31\xf8\xa0\xbd\xf0\x03\xa8\x0d\xc3\xc5\xee\x31\xc5\xf5\x30\x3b\x74\x0c\x9f\xbf\xda\x8b\x62\x80\x40\x4e\x88\xe2\x6a\xc3\x1d\x1c\x91\x9d\xd3\xcb\x0b\x18\xd8\x69\x98\x63\xf8\xc3\x49\x1e\xde\xaf\x39\x64\x86\x2e\xd4\x15\xad\x00\x23\xc3\x77\x97\x84\xb9\xd5\x87\xf3\x3b\x68\xdf\x64\xdd\x45\x2e\x7d\xd9\x30\xae\xd3\xcb\x0b\xfc\xe2\x00\x3a\xf8\x52\x31\xb3\x32\xa1\x9e\xf0\x32\xed\x17\xb4\xd4\x33\x34\xb2\xf4\xa2\xaf\xf9\x1c\xce\x16\xc0\xd1\xaa\x27\x7b\x9f\x8e\x6f\xe1\x15\xed\x11\x80\xcf\xf9\x89\xac\xa3\x6f\xe5\xce\x3c\x36\x88\xec\x9b\x51\xea\xae\x08\x22\x61\xc7\x1f\x67\x63\x79\x12\x10\x89\x68\xf4\x5d\xc9\x0f\x86\xfc\xab\x38\xfa\x06\xc5\x01\x90\xf5\xad\x5d\x4c\x86\x69\x6e\x5e\xb6\x04\x23\x85\x19\xa9\x47\xf8\xc8\x30\x62\x29\xfa\x36\xb9\xde\x1b\xf1\xad\x7c\xea\xc2\x54\xd1\xe0\x00\x47\x37\xf8\x4a\xf8\xaa\x3f\xe5\xe4\x48\x48\x81\x27\x1f\x9f\x3d\xc6\xf8\xdc\x15\x16\x68\x78\xc4\x73\xf3\xd0\x2e\x11\x50\x1a\x27\x26\x70\x91\x9a\x6d\x07\xb6\x07\x16\x0b\x55\x25\x09\x63\xde\xc6\x15\xf6\xb5\xaf\x29\x93\x9d\x72\x4e\x75\x32\x61\x8a\x28\x09\xf5\x51\x95\xa6\x59\x56\xdb\x96\x2c\xa0\x24\x48\x3a\xce\xce\x1f\x08\x40\x51\x36\xba\x35\xb3\x15\x19\xb5\xb6\x9c\x51\x25\x12\x8c\x00\xe3\x7a\x16\x76\x46\x8d\x84\x3d\x50\xa8\x15\x9a\x9c\xf8\x08\xad\xcb\x81\x62\xec\x81\x09\xa4\x75\x86\xc4\x74\xe2\x7a\x8f\x83\xae\x66\x8b\x00\x1a\x3a\x3a\xa4\xc9\xcd\x2d\x2d\x53\x05\x89\xf6\x54\x73\xec\xc5\xd8\x43\xa9\x23\x14\x22\xc4\xe1\x61\xe8\xa8\xe5\x62\x5e\xbe\x09\x27\x72\x14\xcc\x7a\x41\xee\x39\xf6\xf2\x8e\x62\xbe\x4b\x5f\x3d\x31\x42\x2b\x2d\x73\xaa\x79\x02\xa6\x28\x3e\x0a\xbc\x0b\xb9\xef\x6e\xe1\x9d\xc4\xc8\x05\x80\xaf\xd8\x85\x5b\x3c\x58\x2e\x01\x2d\x99\x78\x30\x57\xb7\xcc\xe5\xf3\x0a\x58\x93\xfd\xd0\x7b\xf4\x57\x83\x17\xac\x64\x8c\xf0\xdc\x08\xb0\x14\x1a\x68\x8f\x7c\xce\xbf\x73\xb9\xac\x03\x8a\x91\xd2\x7f\x04\x3f\x57\xf0\x14\xda\xd3\xb2\x4c\xde\x2a\xa2\x6f\xa5\x57\xfa\x6b\x6f\x82\x4d\x6e\xef\xcd\x89\x74\xf6\x1d\x73\xd4\x0c\x58\x82\x73\xd4\x33\xb8\x73\xcb\xb2\xcc\xfc\xbb\xee\x34\xa9\xc1\xb2\x19\xf1\xb1\xc0\xf4\x67\xae\x9c\x05\xc6\xc6\xb3\x1f\xa5\xa5\x2c\x0a\x6b\x4b\xcd\x8f\xe7\x67\x04\xae\xcb\x72\xca\x14\x78\xef\x5d\x84\xbc\x01\xc3\x98\x09\x56\x52\x0d\x8e\x10\x5b\xd4\x11\x08\xca\xfc\x27\xa2\x6d\x5c\x3a\xb9\x10\x5c\xe8\x08\x5a\x0f\x1e\xfb\x2b\x58\x2c\x0c\xa4\x1c\xc2\xa8\x01\x16\xce\x39\x26\xdf\x2b\x5c\x90\x3f\xb3\x3e\x9a\xbf\x91\xce\x80\x66\x5f\xab\x36\x0c\xc8\xd1\x69\x56\x4c\x82\x51\x43\x29\xdd\x67\x4b\xc5\x33\x8d\xbe\x77\x56\x4a\xa5\xde\xba\x57\xb6\xf9\x74\x27\xc1\xaf\x1b\xa6\x93\xe0\x3b\x09\x7e\x87\xab\x93\xe0\xe7\xaf\x4e\x82\x9f\xbf\x3c\x81\xbf\x13\xb0\x78\xf1\x26\xe6\x25\xeb\x00\x44\xde\x4a\x6d\x5d\xac\x20\xe2\xd1\x95\x96\x22\x0a\x8c\xe4\x96\xce\x06\x82\x69\x5b\x51\xc7\x19\x05\xaf\xdc\x78\xdf\x96\x46\xd8\xb1\xb2\x71\x70\x58\xdd\xc9\x77\xb5\x7c\x82\xaf\x68\x89\xfc\xb7\xf6\xf8\xc2\xfd\x43\x65\xfd\x9d\xe6\x77\xc8\xaf\x0b\x07\x48\xd8\x80\x5c\x33\xd7\xc2\x24\xfa\xf8\x62\xd5\x94\x94\x69\xca\x33\x55\x33\xdc\xf7\x2b\x18\xf8\xee\x0c\xf5\x31\xe1\x99\xcf\x89\x68\x57\x4b\xac\x93\x9c\x82\xc0\xb3\x30\xa2\xb3\x7e\x60\x95\xcb\xe1\x62\x44\xae\x58\x22\xa7\xac\x44\xd8\xbe\xfc\x5c\x50\x61\x34\xa1\x57\x94\x67\x06\xb2\x0e\xc2\xb5\x71\x15\xda\x79\xc5\x2e\xbe\xc0\xa2\xed\xd1\xda\x6e\x63\x6e\x27\x65\x0b\xee\x98\xe7\x6d\x20\x51\x51\xb2\x29\x97\x95\x72\x71\xa7\x95\x46\xa6\xa4\xb4\xd5\x3d\x26\x7c\xec\xbb\x6e\xfa\x70\xb0\x92\x25\xb2\x4c\x6b\xf4\x55\x9a\xea\x4a\xc5\xa9\xec\x09\xfa\xd4\xda\x73\xa7\x78\x38\x3e\x22\x29\xad\x4d\x79\x06\x00\xd6\xc2\x38\xf3\x31\x40\xa0\xad\x28\xa8\xa9\x11\x50\xc0\x90\xfa\x61\x96\x10\x17\xb8\xa1\x06\x89\x06\xee\x27\x7c\xb9\x57\xe3\x4e\x1d\x9c\xc1\x55\x1d\x5d\x5c\x47\x3a\x70\xd0\x4f\xa8\x21\x28\x81\x22\xee\xc9\x09\xa0\xaf\x13\xeb\xcf\x51\xf3\xbf\xb2\xdf\x3a\xcd\x8c\x36\x82\xe4\x29\x20\x29\x4b\xa2\x28\x78\x9e\x57\xda\x9c\x83\x01\xb9\xc0\xbc\x5b\xd0\x69\xac\xaa\x3c\xaa\x73\x3e\x59\xa9\x76\x8e\x7d\x08\xaf\xf6\x9c\x6f\xa4\x3d\x07\x1c\x99\xdf\xea\xab\x70\xd3\xc2\x6a\x7a\x52\x30\x8c\x61\x32\xfb\xeb\x62\x9c\xa2\xa7\x77\x2e\x99\x15\x5f\x2d\x1e\x2d\xbc\xda\x53\x83\xf0\x6a\x45\x8b\xc1\xab\xcd\xb3\x8f\x57\x5b\x72\x21\x5e\x8b\xd2\x21\x50\x76\xb0\xcc\x45\x52\x62\x84\x1d\x85\x4c\x07\x4b\x28\x80\x8f\xb9\x93\xa9\x0d\xa8\x8b\xed\x87\x98\x66\x7f\x61\x86\xbf\x71\xc1\xab\x9e\x0b\xd1\x29\xe5\x19\x64\x4c\x70\xa1\x78\xca\xb0\x2b\x90\xa5\x1c\xad\xad\xb7\x55\x81\x74\x2e\xd8\xdd\x10\xcf\x7e\x4e\x8b\xfe\x0d\x9b\xb5\xb4\xdd\xad\x61\xe2\xe2\x44\x11\x12\x39\x2d\xf6\x1e\x1d\x93\x49\x5a\xe7\x49\x87\xaf\x31\x49\x05\x6f\x0e\xad\x68\xe4\xf2\x66\xea\x9c\x9d\x44\xe6\x45\xa5\x59\x20\x42\x59\x61\x67\x6b\xb9\x22\x2a\xd5\x78\x92\x53\x41\xc7\xac\xef\x87\xed\xd7\xec\x62\xe7\xd6\xe1\xe1\xd5\x32\x19\x6c\xb7\xa6\x60\x78\x3d\xb9\x74\x9a\xf8\x6a\x2d\xa1\x97\xdc\x49\x52\x2f\x69\x3f\xb1\x97\xdc\x7d\x72\x2f\xf1\xc5\x16\xda\x3f\xf7\x57\xae\xf8\xc3\xdc\xc9\xb7\xaa\xd2\xba\x93\x1f\x55\x19\xf6\xe3\x70\x45\x64\xce\xb5\x66\x2e\xa8\xda\x9f\x64\x08\x82\x09\x93\xdf\x2d\xcd\x01\xef\x15\x46\x4e\xb3\xcf\xbe\xbd\x6a\xa0\xd0\x83\xb5\xed\x96\x2b\x54\xc1\x05\xe1\x79\x81\xcd\x1e\x80\x76\xf4\x9d\xa4\x6c\xbd\x43\x7e\x26\x09\x44\x6f\x12\xf6\x19\x7c\x64\xf8\xb1\x8e\x4c\x75\x64\xaa\x23\x53\x77\x41\xa6\xb0\x26\xc0\xfe\x25\x36\x22\xf2\xe4\x06\xb5\x45\x28\xe9\x90\x65\xe4\xe7\x8a\x95\x33\x22\xa7\x2c\xc8\xcc\x82\x46\xb5\x46\x90\xc5\xdc\x26\xeb\x29\xdf\x57\x92\x7d\xa4\x66\x09\xd0\x17\x5e\x7e\x2e\x4a\x86\xb5\xc3\x5a\x67\x0a\xf3\x1f\x88\x4b\x80\xe2\x2e\xf8\x9d\x09\x0d\x5a\x18\x56\x1d\x99\xb8\x68\xc9\xc8\xe9\xdb\xf3\x36\x2d\x8f\x8f\x5d\xe9\x3f\x5d\x03\x22\x04\xa5\xff\x05\xf8\x9e\x8f\x8c\xf6\xce\x65\x72\xc3\x66\x3d\x9b\x80\x60\xbb\x94\xbb\x87\x31\x97\x27\x6e\x95\xb8\x5f\x89\xed\xf8\x7a\x02\xf6\x82\xfd\x5a\xe3\xc5\x63\x39\xe0\x3e\x52\xfb\xc3\xde\x2d\xf4\xc2\x6b\x55\x3b\x3d\xc4\x56\xe8\xbe\xe5\xea\x0c\x78\x04\x85\xda\x0a\x40\x61\x1f\xad\x59\x80\x40\x97\x27\xdc\xc6\x3b\x02\x96\x3f\x82\x51\x26\xfb\x0d\x9b\x1d\x2a\x5b\x85\x4e\x0a\x35\xe1\x85\xeb\xaf\x0e\x74\xd2\x9e\x4a\xf2\x03\xa4\x8c\xb8\x21\x90\x22\x5e\x88\x1e\x79\x2b\xb5\xf9\xe7\x25\xe4\xc0\xc1\x39\x3e\x97\x4c\xbd\x95\x1a\xee\x3c\x6a\x70\xe3\xd2\xee\x08\xd8\x36\x2c\xc7\x9a\xad\x21\xdb\x13\xaa\xbe\xb8\xcc\x28\x00\xaa\x0d\x16\xf7\x1b\xc3\x15\xb9\x10\x44\x96\x0e\xaa\xda\xb5\x8c\x55\x76\x08\xe7\xd8\x0f\x82\xad\x96\x8c\x61\x37\x43\x96\xd1\x5e\xac\x19\xce\x87\x53\x71\xf7\x0b\xf8\x12\x21\x34\xce\xa7\x73\x41\xdb\x52\xaa\xd9\x98\x27\x24\x67\xe5\x18\x2a\x16\x26\x93\xb6\xb7\xb8\x2d\xbe\x88\x57\x8b\xdc\x11\xaf\x56\xf1\x10\x44\x94\xd7\x90\xa8\x77\x37\xe2\x0f\x8e\x8d\xec\x3a\xa7\x85\x41\xc1\x7f\x1a\xae\x0c\x58\xf0\x2f\x68\x8b\xac\x06\xe4\x94\x28\x2e\xc6\x19\x8b\x7e\xb3\x2e\xb8\x70\x18\x33\x82\x51\x6f\x7f\xae\xf8\x94\x66\x0c\x13\x6b\xa9\xf0\x4d\x0b\xe5\x68\x41\xe8\xea\xd9\xde\xc8\x86\x2e\x7b\xa3\xee\xc1\x0d\x9b\x1d\xf4\x16\xd0\xf6\xe0\x42\x1c\xd4\xc5\x4f\x23\x44\xf5\xc2\x05\xf8\x63\x0e\xe0\xb7\x83\xfb\x91\xd3\x9e\x80\x1a\xdb\x1a\x4e\x5a\x2f\xe9\x59\x46\xd1\x2f\xdf\xae\x47\x7b\x7e\xf4\x65\x2d\xd9\xae\x83\x67\xea\x68\x06\x9b\xb4\xdd\xba\xeb\x17\x8a\x86\xb4\x95\x42\xd7\x02\xfc\x71\x5e\xfb\x34\x02\x71\xd7\x92\x26\x3a\x50\xbe\xd8\x15\x95\x89\x6a\x91\xd5\x11\xe3\x2b\x20\xfe\x03\x38\xf1\xe5\x88\xbc\xaa\x5b\xad\x81\xbb\xd4\x88\x55\xb6\xcc\x8c\x90\x9a\x70\x91\x64\x95\xf5\xdf\xc3\xab\xe8\xf4\x7d\x5c\xe0\x6d\x1d\xb1\xeb\x61\x1d\x46\xbb\x18\xf7\x85\xda\x01\xf3\x11\xbf\x10\x00\xee\x63\x5c\x11\xda\x0f\x09\xad\xd1\x4e\x59\xd2\x71\x8b\xc0\x24\x96\x2f\x5f\xf1\x61\xc9\xc8\xd9\x84\x0a\xc1\xb2\xa0\xfe\xa2\xb5\x95\x52\xad\x69\x32\xc1\x30\x13\x4a\xcc\x39\xce\x98\x3e\x54\x64\x22\xc1\xa7\x98\x4c\xb8\xf0\x15\xc9\x84\xaf\x43\x5a\x97\x62\x78\x80\xa6\x9a\xfb\x2a\x48\x2d\xf6\x63\x3c\xb4\x0d\x19\x2d\xde\x85\x9d\x10\xe3\x3e\x8d\x75\x6b\x9f\xf9\x67\xea\x1e\x57\xf6\xcc\x03\xe4\x91\x2f\x43\xd3\x40\x78\x76\x7d\xa7\xc7\xdc\xdb\xbb\xb9\x18\xb1\xb2\xc4\x1d\x1a\x32\xfb\x02\xe1\x23\x52\x89\x20\x78\x1c\xdb\xbf\x4d\xe4\x2d\x49\x25\xb9\x65\x10\x2d\x64\x04\x08\x08\x3f\x57\x4e\xf4\x08\x66\x0a\x99\x2a\x89\xcc\x8b\x52\xe6\xdc\x87\x6f\x5b\xf4\x78\xb0\x52\x83\x59\xb5\x73\xb7\x86\x78\x17\xb3\x4a\xc4\x6d\xd2\x5f\x9d\x11\x4d\xcb\x31\xd3\xe6\x1b\x44\x54\xf9\x90\xed\x59\x51\xf1\xa1\xfb\xf9\xb4\xda\x3f\xef\xd0\x37\xd0\x8b\xa0\xb6\xa1\x33\x1e\xb9\x72\x6f\x41\xa0\x01\x64\xc1\x8c\x64\x99\xb8\xb0\x46\xd7\x93\x0f\x1b\x38\x19\x2c\xfc\xc1\x32\xce\x4a\x68\xb5\x67\x3f\xa5\x7d\x3a\xeb\x21\x2a\xfc\xf8\xe3\xdb\x76\x1a\x22\x1d\xd6\xe3\xad\xc2\xba\x5b\x59\x66\xe9\x2d\x4f\x5d\x50\xd7\x91\x79\xf8\x78\x3f\x08\x3c\x60\x7f\xa4\xbd\x4f\xfa\xed\x2d\x4f\x5b\x02\x3e\x0c\x15\x03\xdd\xa5\xf4\x19\xa0\x13\x80\x3a\x4f\x99\xd0\x86\x58\x96\x8a\x1c\xc1\x1b\xc7\xe4\x25\xc7\xe2\x55\xf0\x3e\x84\xa2\xe5\x43\x2e\xea\xc2\x68\xf5\xa6\x1a\x76\x69\xe8\x86\x53\xef\x15\xd3\x58\x76\x08\xb2\xcc\xa5\x9e\x10\xc5\xf3\x2a\xd3\x54\x30\x59\xa9\x6c\xb6\x27\x6a\x3f\xd5\x8d\x1d\x65\xec\x33\x9e\xf0\xfd\x85\x1e\x3f\x54\x2c\xfc\x40\x72\x55\x5d\x6b\x70\x41\xfa\xa9\x73\x13\xd3\x13\x2f\x09\xf9\xda\x59\xec\x33\x4b\x6c\x59\x85\x22\xab\xc6\x7c\xa7\x3a\x3a\x5d\x07\xf1\x9d\xde\x6e\xd6\x41\xbc\x6e\x94\x5c\x29\x56\xd7\xfc\xb5\x45\xee\x1e\x4a\x2e\x69\xbf\xe1\xf7\xc3\xca\x97\xef\x97\x37\xfb\x4e\x59\xc1\x44\x0a\x4d\x87\x5e\xd5\xe7\x0f\x27\xff\x60\xb0\xb7\xcd\x7e\xda\xe1\x15\xae\x73\x50\xc4\xa5\x83\x00\xc9\x89\xcc\x52\x45\xd8\x67\x5d\x52\xc3\x0e\x72\x43\xf8\xfd\x3b\x23\x42\xc5\xbe\xa4\xfd\x4b\x69\x59\x4b\xee\x49\x02\x4d\xbf\x50\x09\x54\xb5\xda\xcb\xfe\x50\x85\x1d\xec\x6b\xe8\x45\xb7\x5b\x6e\x6b\x8f\x0c\xd4\x52\x07\x15\x97\x44\x58\xd2\x7e\xbe\x4e\xa9\x5a\xac\xed\xb3\x63\x1b\x7a\xb5\xa4\x29\xf5\xdc\xac\x1e\xf0\xb0\x76\x3d\xe9\x9f\x56\x4f\xfa\x11\x54\x48\xdd\xbf\x6d\x88\x1d\x67\xce\x66\x67\x6f\x5a\xb1\xb5\x89\x8d\xce\x9e\xa8\x80\x27\x9b\x7d\x73\x03\xd9\x4a\x63\x44\x99\xdd\xa8\xd3\x22\x2b\x21\x76\xa3\xe6\x0f\xdd\xb1\x9b\x6a\xaa\x98\xde\xc7\x92\x1c\x0b\x98\xf5\x78\x86\xe4\x84\x98\x6f\x7f\xc2\xbe\xf7\x50\x79\xc4\x55\x0d\x25\xfd\xbf\x5a\x59\x54\x44\x4f\x1a\x29\xd4\xc1\xdd\xb5\x15\x61\x3e\xb2\x0c\xc7\x48\xcd\x6e\x27\x54\xef\x9c\xb1\xbb\x37\x37\xb6\xb3\xfd\xfe\xfb\x8b\xf3\x36\x41\x68\xc6\x73\xd2\x2a\xfc\x3f\x06\xe3\xc0\x27\x93\x55\x82\xff\x5c\x85\x8a\x36\x54\x3b\xf7\x80\xb3\xcf\x3f\x04\x74\xc6\x09\xab\xdd\x04\xe7\x5c\xdd\xec\xdf\x1a\x68\x61\xc8\xf8\xb8\x7f\x7b\xf6\x92\xd8\xbb\x8d\xac\xf3\xdb\x98\xe7\xf7\x6d\xec\x31\x4e\x58\xed\xb8\x4b\xb9\xba\x79\x80\xb6\x42\xfb\xea\xc0\x45\xfa\x76\xb7\x94\x9c\xc7\xe9\x69\x98\xd7\xf0\x5c\xe7\x81\xa0\x25\xc6\x4c\x56\xe4\xd6\x56\xde\xb6\x1a\xe2\x7b\x5e\xbc\x20\x2f\x85\xaa\x4a\x56\x47\x68\xcd\x0f\x65\xe4\xad\xc6\xfa\x22\x14\x37\x57\x2f\x5a\xf3\x4a\xb4\x8d\xa9\x5f\x8a\x9b\xa3\xa0\xa5\x06\x45\xae\x1d\x44\xf2\xc3\x39\x3a\x1d\xdc\x10\x4d\x30\xe9\x62\xe4\x72\x33\x7a\xb6\x0c\xaf\x6f\x39\xe4\x1e\x32\xb8\x13\xd4\xe5\x0f\xb1\xe5\x95\xef\x85\x41\x4e\x52\x36\x3d\x51\x29\x7d\xde\x83\xcf\xb8\x2c\xf7\x78\x4e\x54\x91\x83\xe7\x07\x03\x72\xcd\x73\x9e\xd1\x32\x9b\x45\xad\x81\xeb\xe7\x0c\xdb\x75\x03\x42\x34\xcb\xb3\x03\x72\x24\x4b\x18\x39\xa1\x82\x64\xcc\x15\x01\xb3\xa7\x7a\x86\x7a\xc7\xf1\xe3\x20\x91\xe4\xd1\x78\x8a\x90\x5a\xb6\x84\x6b\xa9\x93\xa9\x2c\xbf\x8f\xfa\x3c\x9c\xd7\x0c\x8f\x0b\xc3\x05\x07\xe4\x7b\xcb\xbe\xac\x5c\x80\xc8\x00\x87\xd9\x3d\xf1\xb8\x36\xeb\xf1\xd9\x43\x76\xb2\x6c\x2c\xba\xee\x1e\x1b\xa0\x77\xb5\x9e\x8c\xb9\xbe\x62\x85\x6c\x41\x86\xc3\x81\xe6\xfc\x0b\x5c\x9b\x1b\x52\x71\x68\xec\x48\x35\xa1\x48\x92\x92\x2a\xa3\x46\xa9\x43\xef\xc2\x80\x9c\xbf\xbc\xbc\x7a\x79\x76\xfa\xfe\xe5\xf9\x0b\xf2\xad\x1d\x89\x87\x7a\xc0\x80\xbc\x0f\x5b\xb5\x04\x09\x6f\xb6\x1f\x86\xff\x56\xcf\x92\x58\x2a\xea\x96\x73\x50\xba\x9e\x0a\x72\x21\xb8\xae\x9b\xed\x62\x5e\x40\x26\x85\x8d\xf4\x37\x6f\x5b\xef\xc6\x98\x6b\x5b\x0c\x19\x07\x33\x3f\xc7\xa3\xd9\xac\x70\x23\x6c\xd6\x49\xdd\x4f\x50\xf8\xab\xb7\xe7\x21\x14\x55\xd7\x45\xb2\x1d\x1d\xcb\x77\x10\x75\x15\xb2\xd0\x5b\x5c\xdf\x47\x66\xeb\x1b\xa6\xbb\x5e\x14\xb2\x8c\xfa\x99\x0f\x06\x87\x03\x62\xd8\xf8\xe1\xe0\xd0\x89\x7c\xd9\x42\xd3\x7d\x3f\x68\xd8\xf2\x27\x46\xf8\x01\x21\xef\x5c\x56\x25\xd4\x41\x5d\xde\xbf\x1f\x4b\x96\x07\xdd\xda\xe7\x8e\x8d\xab\x36\x53\x0d\xc3\x8f\xda\x1e\x41\x63\x3e\xb5\xd5\x2c\x1f\xcc\xa7\x50\x4f\xb5\x95\x6d\x0c\x57\x6e\x35\xe5\xab\xd7\x0f\xb7\x36\xa4\x38\x2d\xad\xcc\x92\x2f\xbb\xae\x44\xe6\x39\x36\xb5\x99\xf8\x3a\x7b\x75\xa9\x3c\x4f\x1d\x1f\x44\xcb\xc7\x56\x3e\xa3\x9d\x0e\xf6\x1c\x67\x70\x43\xcd\x69\xf5\xfe\xb6\xcd\x7e\x16\xb5\x3a\xb5\x7d\x07\x60\xdb\x4b\x4a\xb9\x12\x64\x96\xcd\x9e\xf8\x8f\x9f\x5c\xbd\x3c\x3d\x7f\xf3\x72\x90\xa7\x4f\x90\x48\x33\x91\x16\x92\x0b\xad\x76\xd5\xf0\xa9\x9e\x3c\x00\x79\xf7\xd3\x6e\x47\x86\xf3\xc3\xb9\xf3\xe3\x6e\x04\x8d\xc1\x6c\x71\xb7\x00\xbb\xb4\x2c\x64\x26\xc7\xcb\x5b\x07\x6f\x81\x36\xff\x86\x4d\x25\xfa\xb4\x6f\xf0\xf1\xe1\x94\x5d\x3d\x69\x4b\xcf\xd5\x13\x07\xc8\x1a\x5a\x5e\x6f\xd4\x93\x2f\x03\x60\xf7\xa8\x46\x2c\x40\x11\xcd\x39\x40\xde\x5c\xdf\xb6\xba\x11\x5a\xc1\xca\x9c\x63\x16\x4a\x53\xfd\xe2\x61\x80\xbf\xab\x6a\x61\x28\xf9\xe5\x8e\xe8\x1a\x43\xdd\x8d\x14\x33\x90\xa2\x64\x7d\xdf\x69\x66\xc4\x33\x06\x55\xd5\xbd\x84\x14\xf2\x13\x67\x09\x76\x76\x63\x7c\x2a\x9b\xcd\x5b\x84\x83\xc2\x6e\xce\x10\x8f\xf5\xa7\xb3\x6c\x56\x77\x13\xb4\xd6\x30\x3a\xc6\x0e\x32\xa5\x75\xc8\x15\x25\x9f\xf2\x8c\x8d\xa1\x53\x28\x17\xe3\xa0\xf2\x60\x58\xab\xd0\x96\xa9\x8c\x9d\x53\x6f\xcc\x5f\x41\xd3\x6a\xc0\xac\xb7\xef\xde\x43\xd3\x59\x08\xa9\xd8\x5b\xe1\x34\x1f\x84\x33\xdf\xef\xf7\xc1\xf4\x77\xf4\x77\xa3\xf9\xa4\xd9\x31\xf9\x91\xd9\xef\x48\xe8\x8a\x5b\xf2\x44\x93\xdb\x89\xf4\x2d\x4a\x61\xae\x35\x64\x01\xa1\x31\x8c\xcf\x3e\x75\x62\x9e\x34\x12\x35\xb2\xf2\xe8\x79\xce\xa0\xef\x57\x1d\x67\xf0\x14\xb5\xa4\x07\x62\xa0\x2d\x53\x7b\xe7\x6c\x5a\x76\x46\x7c\xf8\x80\xe3\x0b\x94\xa8\x59\x9e\x71\x71\x53\xb7\x55\x1a\x49\x5b\x99\x95\x11\xf3\x83\x3b\x35\x25\xa3\xd9\x6a\x8e\xb1\x0b\x8e\x3e\x18\xb7\xd0\xad\xf9\x23\xc0\x5f\x60\xa8\xc5\xff\x75\xc4\xcb\x06\x80\x85\xa4\xfe\xe0\xe0\x49\x43\x8c\xab\x44\xf1\xfd\xc9\x3b\x0c\x13\xd1\x76\x41\x2e\xae\xcf\xae\x2f\xee\xd5\xeb\xb7\x8a\xb9\xc2\xec\x9e\xb4\xf6\xc0\x7f\xde\x2d\xaa\xaa\x4f\xb2\x6a\xd7\x37\xd1\xf4\x72\x29\x4b\x4d\xb3\x07\x20\x9c\xc9\x84\x16\xa7\x95\x9e\x9c\x73\x05\x05\x86\xdb\x11\xff\x16\x46\x0d\xf2\x15\xb1\x75\xb3\xeb\x51\xc7\x1d\xfa\xda\xe7\xce\xfe\xef\xe9\x25\xa1\x95\xc1\x47\x6d\xbb\x72\x3e\x58\xb0\x9c\x5b\xc5\x35\xe6\x40\xb7\x0a\x19\x3b\xe6\x06\xb8\xb8\xa7\x1e\x13\x54\xee\x2f\xeb\xad\xf3\x47\x03\xe7\x42\xaa\xff\x85\xf8\xa0\xb9\xe0\x9a\x53\x2d\xcb\xd6\x7c\x83\xd1\x88\xde\x60\x58\x29\x2d\x73\x7b\x8a\x2e\xdc\x13\x10\x90\x05\xf2\xdb\xc2\x4b\xb5\x35\x11\xb4\x4f\x80\xf9\x85\x30\xba\x22\x4d\xd8\x5c\x9a\x4d\x0f\xba\x65\xe2\xd8\xdc\x3f\xf3\x17\x6b\x44\x87\xce\x45\xd9\x5f\x5f\x44\xfd\xe4\xeb\xd6\x94\xae\x09\xb0\xb5\x62\x26\x52\x08\x96\xec\xd3\x5b\x79\xff\x2d\xf9\xb9\x1d\xd2\xc6\x7f\x16\x73\xfe\x04\x04\xd1\xff\xab\x68\x86\xa0\x7d\xfb\x90\xc6\xf7\x78\x4b\xdb\x59\x71\x8c\x25\x76\xf1\x35\x4a\xbc\xf5\xd6\xb6\x4a\x61\x5f\x26\x84\x88\x2e\xa9\x50\x06\x4f\x62\x7b\xc6\xa1\x0d\x80\x38\x24\x47\x3a\x29\x8e\x1f\x0c\x52\x6d\xa5\xc3\x66\x95\x08\x85\x55\x5c\xfb\x7b\x44\x8d\xd7\x3e\x1d\x76\xbf\x65\x3e\x78\x90\x03\x9c\xf6\x76\xec\xb6\x76\x2c\x8f\x47\x21\xbc\x50\x40\x24\xaf\xb9\xd2\x98\x47\x83\x0f\x43\x19\x17\xcc\x27\x34\xba\xc0\x25\x91\x25\xe1\xc5\xff\xd2\x34\x2d\x5f\xa0\x1c\x61\x75\x55\xf8\xbf\xf2\x9d\x82\xa8\xf0\xd1\x36\x47\x7a\x56\xd8\x1e\x71\xef\xcf\x2e\xe1\x49\x45\xfe\xe3\x8f\xcf\x40\x2f\xf8\xfd\xd7\x7f\x7c\xb6\x27\x22\x3e\xd5\xac\x42\xd2\xb6\x4d\xb4\xf5\xc8\x8a\x2f\x24\x8b\x24\xca\x16\x81\x76\x32\x46\xda\xbd\xc6\xe4\x0c\xc3\x27\x2d\xd1\xc4\x83\x60\xb0\xd2\x73\xef\x36\x65\xe2\x2e\xeb\xe2\x57\x94\x75\x41\x7c\x36\x3e\x12\xd6\x56\x10\x39\x1c\x10\xca\xea\x2c\x12\x70\xa4\xdd\x97\x4f\x85\x76\xef\x08\xdd\x5d\x31\x39\xc6\xe0\x30\xc4\xcf\x26\xe2\x06\xe9\xa9\xe7\x6f\xaf\xff\xf7\xf5\xe9\xdf\x5e\xbe\x86\xb5\xda\xa8\x40\x83\x9e\x56\x13\xda\x25\x66\xbd\x39\xba\xef\x6e\xdc\xda\x15\xa4\x6d\x04\x18\x88\xb9\xd0\x02\x41\xde\xbe\xba\xde\x36\xaa\x60\x5f\x75\x56\x8c\xf6\x80\xde\x53\xf3\x6b\x98\x57\xa1\x5f\xeb\x43\x64\xce\xb7\xec\x14\x09\xaa\xe2\x47\x76\x14\x83\x43\xb8\xc6\xbd\x4d\x1d\x3b\xe2\x06\x79\x74\xb2\xde\x7a\xff\xb7\x81\x18\x42\xb1\x75\xcf\xf7\xbd\x42\x7b\x3f\x19\xb2\x6c\xab\xac\xc3\x21\x8e\xe5\xc4\x47\x43\xc2\x90\x77\x94\x86\xab\x1a\x7e\xca\x94\x6f\x50\xf4\x05\x60\x6b\xb1\xac\xdd\xf4\xfe\xdc\x61\xe9\xb0\xf8\xdf\x6b\xd7\x2d\x30\x88\x2a\x88\xf2\xba\x57\x75\x94\x77\x11\x99\x34\x0f\x1a\x6b\xb6\x59\xf9\xb1\xbe\x85\x77\xb0\x49\xde\x13\x64\x30\x30\xf1\x07\x4a\x2f\xf3\xdf\x6e\xe7\x38\xfa\xe1\xe6\x2b\xad\x6c\x85\x25\x84\x2a\x27\xc8\xd9\x58\xf3\xb0\x24\xcb\xa3\x44\x21\xf2\xe8\xf8\x90\x67\x43\x3f\xee\x68\x6e\x78\x48\x53\x43\x31\x91\x5a\x8a\x96\x73\x68\x97\x0d\x1a\x13\xb6\x4b\x78\xe2\x0c\x33\xdd\x33\x56\x06\xf4\x16\x33\x88\xbc\x5b\xdd\x68\x1e\x8e\x75\x4b\xe1\x1c\xec\xb1\x7b\xfd\xe9\x51\xa2\x22\xbd\x38\x7f\x00\x22\xf4\xa5\x15\x3b\xda\xd6\x4d\xf8\x60\x81\xb2\x69\x4b\x99\xfb\x66\x20\x07\xf3\x8b\x73\xab\x2e\xb8\xb4\x7c\x65\x8f\x15\x59\x7d\xae\x1e\x44\x94\x92\xa5\xbe\x95\x65\x5b\xe5\xe3\xe2\xe1\xe6\xa2\x30\xed\x6f\x0b\xc5\x38\xbe\x4c\x2a\x82\xab\x7c\xf2\x94\xe4\x1a\x28\xc9\x5c\xe7\xee\x55\x14\xe5\x2e\x08\xca\xd3\x21\x24\x77\x23\xb8\xdc\x6d\x25\xae\x07\x53\x7f\xdd\xf1\x68\x05\x58\x6e\x30\x6b\x06\x35\x88\x52\xd3\x5d\x0a\xe6\xe6\x80\xf2\x3c\x08\x9d\x2d\xa5\xa1\x43\xbb\x91\x93\x98\xc4\xba\x91\xd0\x39\x88\x5d\x1d\xb3\xcc\xec\xac\x14\x61\x3f\x48\x5b\xac\xab\x47\xb0\x67\x62\x4e\x0b\x85\x4d\x29\x52\x79\x2b\x6e\x69\x99\x92\xd3\xcb\x8b\xfb\xa7\xab\x7b\x67\x82\xe2\x79\xd8\xa7\xb7\x40\x9c\x0b\x5a\x8f\x07\x11\xf8\x10\x24\x64\xfe\x18\x72\x8d\x6d\x9b\x31\x18\x5f\x87\xd6\x28\xc3\xa7\x7c\x24\x8b\xa1\x74\x86\xaa\xd9\x91\x02\xb1\x4a\x10\x99\x68\x9a\x61\x0b\x10\x32\x64\xfa\x96\x31\x41\x9e\x3d\x7b\x86\x0e\x8a\x67\x7f\xfa\xd3\x9f\x08\x34\xe5\x4c\x59\xc2\xf3\xc5\x07\xe1\xa9\x7f\x7f\xfe\x7c\x40\xfe\xfb\xf4\xcd\x6b\x42\x13\xd0\xe5\xb0\xf2\x2d\x8e\x0c\xfb\x19\xbe\xac\x7a\xe4\xbf\xae\xdf\xbd\xad\x1b\xca\xc7\xbf\x02\xba\xf8\xe5\x0d\xc8\x79\x10\x7b\x1f\x3a\x0f\xa8\x9e\x00\x34\x84\xd4\x84\x8e\x46\x88\x70\xae\xab\xbd\x25\x26\xae\xf6\x1c\x1f\x4f\x60\xb9\x5c\x00\xaa\x65\x90\x14\xc0\xcd\x14\xc1\x61\xe3\xea\x38\x62\x8e\x03\x8c\xe5\x99\x08\x4c\xa5\x47\x32\x7e\xc3\xc8\x48\x7d\x5b\xca\xaa\xa8\x1b\xa7\x94\x4c\x19\x05\x2c\xa1\xc2\x8c\x8e\x83\xd5\x3b\xa3\xd8\x9e\xb5\x31\x1f\x3a\x72\xc2\x9e\xd3\x76\x5c\xc8\xf6\xcc\xbb\x16\x62\xb6\x37\xa0\xcb\xd1\x42\x92\x61\x76\xe1\xa9\x46\x32\x44\xab\xbd\xf4\xeb\x41\xa4\xb2\xd5\x0f\x6b\xca\x48\x33\x29\xc6\x21\x0e\xd6\xd2\x87\x0b\xa6\x9c\x15\x6c\x57\x60\xb4\xd4\x50\xa7\x9d\xf6\x74\x48\xdc\xdf\xd0\x62\xbf\x4e\x20\x71\x8c\xae\x1b\x33\xaa\x43\x49\x87\xb2\xd2\x2e\x66\xcf\xfe\x0e\xe5\xdb\xb4\x74\xa0\xdf\x6b\x0a\xad\x75\x29\x6a\xaf\xef\x5f\x4b\x4d\xb7\xe2\x98\x39\xe0\xda\xb1\xc8\xda\x23\x8c\x26\x13\x72\xc3\x66\x7d\xe4\x00\x05\x85\xea\x11\x00\xed\x73\x03\x63\x2c\x93\x1b\x87\x33\x24\x2c\x35\xda\xa4\xdd\x0a\x17\x60\x19\xc8\x07\xae\xfa\x84\x53\xb8\x94\x95\xcb\x6d\x2b\x2b\x11\x58\x28\x5d\xef\xca\x44\x0a\x6d\xfb\x62\xfa\xde\x55\x10\x30\x3a\x57\x90\xc0\x50\x18\x96\x9a\xd7\xd4\xba\x2f\xd7\x51\xa5\x86\xa3\x58\xf9\xa3\x12\x0b\x6f\x43\x3d\x77\x88\xe9\x55\xcc\x56\x46\xa2\xae\x27\x62\x10\x99\x3a\xe1\x09\x64\x1c\x99\xc7\xed\xb3\x0e\x4a\x1e\x10\x51\xc1\x04\xc5\x74\x65\x41\x03\x71\xc2\xe6\xdb\x4c\x29\xc2\x61\x85\x39\x2d\x6f\x98\x2b\x34\x4c\xb3\x01\xb9\x34\x93\xf4\xd5\xe6\xb1\x95\xe0\x14\x13\x44\x0c\x8d\x09\x2b\x41\x98\x8f\x1c\x0e\x06\x87\xc8\x2a\x97\xd4\x85\xd8\x1b\x6b\xda\xec\x22\xd7\x5a\xf7\xb8\x08\x95\xdf\xd0\x42\x61\x37\x3d\xa3\x5a\x40\xc7\x4a\x09\x75\x5b\xf4\xc4\x09\x13\x74\xcf\x12\xe2\xe1\xd5\x72\x1b\xb3\x76\x3b\xa1\xb6\xd7\x07\x75\x0f\x5f\x7b\x7c\xb5\xdd\xff\xb4\xc5\xee\xa7\xab\x7a\x9f\x5a\x1c\xb2\x94\xa4\xad\x8e\x8c\xad\xb7\xdc\xcc\x5b\x68\x6c\xe6\xae\xd8\x75\x04\xf2\x6d\x54\x4b\xba\x91\x2e\x62\x4b\xa9\x67\xec\x49\x29\x1f\x17\x23\x20\xa9\xcb\x6b\xdd\x84\x7a\x99\xe3\x30\x06\x02\x0f\xaf\x75\xec\xdb\x65\xcf\x5d\x77\xd1\xa6\x7e\x7f\xb5\x64\xfe\xda\x27\x88\x66\xfe\x8a\x0d\x19\x41\x59\x09\xcf\x6a\xc3\xec\x63\xd8\x2a\x2d\xa1\x5b\x67\x4d\x1c\x06\xe4\x8d\x65\xc5\x88\xe4\x74\xa8\x64\x56\x69\x5f\x89\x62\x09\x9f\x86\x41\x5d\x6f\x4f\x2c\xda\xe4\x1e\x0b\xb8\x36\xc8\x2b\xc8\xca\xda\x61\xe0\x78\xb5\x48\x7c\xf6\x0d\x90\xc5\xeb\x57\x16\x26\x8b\x57\x8b\xbb\xe0\xc4\xc5\x96\x77\xc2\x0d\xeb\xab\x77\xba\x8c\xc8\x48\xba\x85\x18\x59\xad\x50\x74\x76\x82\x2a\xe6\x50\xee\x5a\x01\xbb\xbe\xf6\xb7\xea\xda\x75\x59\x03\xe3\xe9\xe5\x45\x8b\x5a\x69\x30\xea\x0a\xbd\x34\x7c\xa2\xd3\x4c\x9b\x5c\x11\x80\x2f\x50\x33\x35\x22\xbd\x33\x20\x9d\xd7\x10\xb5\x2e\x3d\x43\x94\x7f\x05\xaa\xcd\xc2\xc2\x5f\x19\x66\x14\x26\x73\xc5\x1d\x3a\xd0\x18\x5c\xb3\xad\xa0\xab\x87\x8b\xe1\x01\x12\xf7\xe5\xab\x41\x8f\x54\x79\x01\xe8\xef\x91\xb1\x33\x7f\xc5\x5c\xf4\xca\x01\x91\x5c\xb3\xcc\x30\x3d\x32\x67\xb2\x29\x64\xfa\x02\x7b\x7e\x53\x21\xa4\x06\xbc\x51\x3d\x92\x41\x3f\xf2\x1e\x9a\x62\x8c\x04\x1a\x44\x7f\x95\x81\xd3\xb4\x65\x99\xb3\x35\xe4\x21\xad\x23\x10\x01\x24\x02\xd8\x5d\xb6\x83\x49\xe4\x0e\xb0\xc9\x5c\xb5\xa8\xd2\x66\x5b\xfe\x08\xaf\xec\xf8\x0e\x89\x54\x32\x61\x39\xc5\x7e\x24\x0e\x40\x86\x5e\xdf\x96\x5c\x6b\x86\x55\xc7\x59\x99\x2b\x22\x47\xbd\xc8\x6f\x7c\x30\x7d\x7e\xd0\x96\x3c\x4b\xee\x42\xa1\x26\xee\x84\xee\x5a\x06\x6c\xd5\x15\xfb\x0d\x22\xe5\xc2\x9c\x4e\xd0\xa6\x33\x68\x90\x24\xe6\x0c\x96\x46\x88\x98\x22\xfc\x1f\x35\xe8\xee\xce\x16\xb1\xab\x0d\xa2\xe7\x05\xd3\xce\x06\xd1\xd9\x20\xda\x18\xf1\xce\x6c\x10\x01\xe3\x76\xc4\x74\x89\x3d\x22\x4c\xc4\x73\x46\x89\xba\x94\x45\x50\x26\xda\xa0\xbc\x33\x47\xc8\x32\xf6\x15\x1c\x0e\x06\x87\x87\xce\x48\x61\xcf\x47\xa5\x47\xfd\xff\x20\x4c\x24\x32\x45\xa4\x32\xe3\x97\x4a\x83\x50\x5b\x6b\xe5\xe1\x5c\x72\xf7\xad\xd0\xdf\x00\x63\xb7\x8b\x12\x2d\x52\x28\x17\x92\xf2\xea\x4e\x45\xb0\x5a\xf0\xf2\x65\xc0\x2c\x00\x7d\xb5\x44\x2b\x81\xd5\x21\x32\x19\xcf\xb9\xad\x4f\x68\xc8\x05\x53\x5a\x91\x23\xbc\x39\x48\x8a\xaa\x67\x1f\x18\xe4\x2c\x97\xe5\xac\xe7\x1f\x32\x3f\x46\x6f\xd9\x27\x8e\x41\x6a\x4b\xaa\xb2\x64\x42\x67\xb3\x5f\xaf\xfc\xe6\x40\xfc\x88\xc5\x37\x8f\x15\xfb\xe4\x7d\x2c\xbb\x62\xb4\xac\x9b\x08\x80\xf5\xce\x43\x1b\xf8\x90\xcd\xc0\xe8\xd5\xc6\x1f\x73\x97\x89\x29\x99\xd2\x72\xe7\x0c\x8c\x65\xd7\x9d\x48\x6c\x29\x9f\x72\x25\x77\xce\x61\x5b\x3a\x64\x08\xbc\x6b\xcb\x94\xd1\x46\x2c\x2b\x5d\x54\xda\x72\x17\x77\xb6\x5d\xc9\x3e\x7f\xa6\xe7\x04\xdf\xe7\x07\x2d\x4e\xae\xa0\x5a\xb3\x52\xbc\x20\xff\x73\xf4\xf1\x77\xbf\xf4\x8f\xbf\x39\x3a\xfa\xf0\xac\xff\xe7\x4f\xbf\x3b\xfa\x38\x80\xff\x7c\x75\xfc\xcd\xf1\x2f\xee\x8f\xdf\x1d\x1f\x1f\x1d\x7d\xf8\xee\xcd\xb7\xef\x2f\x5f\x7e\xe2\xc7\xbf\x7c\x10\x55\x7e\x83\x7f\xfd\x72\xf4\x81\xbd\xfc\xd4\x70\x90\xe3\xe3\x6f\x7e\xdb\xe2\x22\xa8\x98\xbd\x6b\x8d\x04\xe3\xd5\xbf\x13\x31\x22\x1e\xbb\x65\xd4\x25\xe4\x73\xbf\xb6\x68\xf7\xb9\xd0\x7d\x59\xf6\xf1\x23\x2f\x88\x2e\xab\xb6\x48\x57\xcd\xfe\xee\x8e\xc6\xd4\x42\x4c\x5d\x01\xd3\x29\x36\x8f\x90\x88\x60\x60\x6a\x8b\x96\x61\xdb\xc7\x76\xb9\x51\xd8\xfe\xd8\xd9\x83\x9b\x5c\x77\x18\xa9\x64\xeb\xd9\xfc\xca\xc3\x94\xae\x6d\x37\xe5\x2e\x46\x69\xe1\xea\x62\x94\x16\xaf\x2e\x46\x69\xcb\xab\x8b\x51\x72\x57\x17\xa3\xd4\xd9\x07\xf7\xbf\x7e\xe5\xf6\xc1\x2e\x46\x69\xdb\xab\x8b\x51\xda\xf9\x7a\x42\x31\x4a\x28\xe4\x2f\x8b\x54\xb2\x62\x7e\x1d\xa6\xf4\x68\xa3\x94\x94\xc1\x87\x84\x9d\x26\x89\xac\x84\x7e\x2f\x6f\xd8\x9e\x8e\xdc\x39\x9d\x74\x61\x74\x28\x89\xb8\x42\x47\x5d\x7c\xf8\x51\x2a\xac\x6d\xc9\xa3\x2d\xc8\x8f\xed\x49\x8e\xb4\x4a\xb9\xd1\x51\x5b\x3e\x2c\x6e\xd8\xb0\x2c\xb6\x48\x59\x5a\xff\x60\x49\x9a\x36\xfb\x3d\x20\xa7\xa4\x64\x09\x2f\xb8\x61\x00\x50\x2b\x08\xee\xe3\xf1\xf1\x5d\x9c\xb9\x56\x2c\x1b\xd9\x4e\xb6\xa2\x4e\x73\x2e\x03\xfd\xd3\x72\x94\xa5\x9f\x41\x19\x42\xba\x5e\xa3\x44\x4d\x64\x95\xa5\xa4\x64\x7f\x77\xc2\x87\x9d\xcd\xfb\x70\x84\xd0\xa4\x0a\x4b\xa9\x3f\x6b\x07\xa7\x05\xb7\x45\xc5\x1e\x13\x19\x64\x9f\x0b\x5e\xc2\x61\xbb\x66\x89\x14\x69\xdb\x16\x92\x85\xf1\x6b\x59\x01\xfc\x42\x2c\x25\x69\x85\x0f\x40\x3a\x26\xcd\x78\xca\xf5\xcc\xc7\x73\xe0\xb1\x37\x62\x2b\xf6\x0e\xb6\x88\xa0\xea\x8d\x20\xb4\x28\x4a\x49\x93\x09\x53\xc1\xd7\x50\x08\xb5\x85\x32\x7c\x96\x67\x56\x8d\xb9\x40\x39\x14\xde\x31\xc2\x4a\x36\x23\xa5\xd4\x2e\x34\x6d\xc5\x07\xdf\x07\x83\xc1\xeb\x28\x71\xe8\x72\x06\xf1\x6b\x32\x1c\x02\x67\xc5\x47\xe1\x1f\x8a\xc8\x2c\x75\xa5\x59\xff\xe3\x99\x11\xfc\x13\x8b\xc5\x86\x09\x40\xd1\x4c\x2d\x49\x66\x84\x27\xc3\x18\x56\xbf\xfc\xf5\x1f\xc8\x44\x56\xa5\x1a\x84\xc5\xfe\x9e\xc3\x3d\xb4\x70\x38\xc5\x41\x93\x8c\x51\xa5\xc9\xf3\x67\x24\xe7\xa2\x32\x1c\xbf\x25\xc4\x6b\x4b\xd6\x0d\xa4\xdc\x3f\xfe\x61\xcf\xd1\xda\x91\x6f\x57\x4a\xb6\x05\x76\xcc\xb3\xe2\xad\x3d\xe3\x58\xd0\x03\xbb\x66\xce\x09\xbb\x96\x25\x85\xbb\x28\xb4\x7c\xe0\x93\xff\x73\x25\x87\x33\xbd\x7f\x09\x1b\x3b\x4e\x5c\xbb\xe6\xff\xd9\x9b\x4d\x4a\xc5\xd6\x95\x62\x77\x98\xca\x83\xf7\xf8\x1e\x73\xa5\x77\xea\xf0\x5d\xd7\xbc\xd9\xe1\xe5\x7d\x99\xf9\xd8\xe8\xc7\xad\x64\xd2\xc3\x48\x4e\xa3\x73\x16\xe9\x24\x61\x0a\x48\x91\x2b\x0a\x07\xc6\x5d\x7c\x76\xc7\x8f\x3e\xd2\x6a\x33\xcb\x8a\xc8\x38\xe4\x6f\xa1\x57\xe9\x5e\xc0\xda\x47\xe4\x77\x88\xdd\x12\xb4\x70\xb0\x98\x46\x28\x2e\xc6\xd8\x5a\x34\xaf\x32\xcd\x8b\xac\x86\xdc\x95\x7b\xc1\x32\xe0\xd0\x5b\x40\x03\xf3\x34\xc5\xa2\x57\x58\xfd\x1c\x3c\x2b\x47\x7e\x2c\x26\x34\x76\xc8\x2c\x0d\x1f\x2f\x68\x49\x3d\xf8\x13\x99\xe7\x54\x1d\x5b\xc7\x03\x85\x28\x18\xdb\x06\xc8\xbc\x45\xb3\x7a\xc6\x41\xd4\xc1\x43\x21\xae\x66\x82\x8a\x9d\xdd\x7f\x71\xc1\x79\x18\x8a\xc8\x5b\x1f\x68\x8f\x4d\xee\xe7\x30\xd6\x0a\xc4\x7f\xa3\xc9\x0d\x13\x29\xf9\x5e\x39\xc0\xa5\x33\x41\x73\x5b\x3f\xbe\x28\x25\x76\x51\x67\xe9\xdc\xfb\xaa\x67\xcd\x8e\x58\xfa\xc4\x15\xb0\x42\x79\xeb\xa1\xa0\x58\xa9\x96\x8a\x07\x9b\x81\x36\xd1\x3b\x85\x26\xdd\x92\x4f\x13\xe6\x64\x47\xf3\xde\x43\x2d\x7e\xba\x73\xb5\x3a\xb2\xbc\x74\x94\x6d\x63\x8a\xa7\x10\x58\xba\xf7\x5c\x42\x99\x78\x9a\x19\x12\x37\xf3\x35\x7f\xe6\x10\x6c\x38\x03\xbb\xd7\x83\x54\x1e\x2b\x87\xfb\xd7\x94\x3a\x2c\x87\x69\x4c\xcc\xae\x68\x2a\x15\xf9\x5b\x26\x93\x1b\x72\xce\x40\x69\xb8\xcb\xe6\xfb\xe5\x30\x7d\xda\x8d\x33\x73\x3a\xde\x2d\x62\xa4\x4f\x72\x29\xb8\x96\xe5\x2e\xf4\xf8\x11\x15\x0a\xec\x5a\x19\x36\xa9\x98\x6e\xce\xd9\x97\xd2\xc8\xd0\xa0\x7c\x3b\xa8\x03\x43\x79\xd3\x09\x50\x1e\xbc\x05\x44\x75\x67\x3a\xf2\x6f\x13\x79\xdb\xd7\xb2\x5f\x29\xd6\xe7\x3b\x07\x42\xed\x0d\xa8\x1b\x36\x83\xa8\xb2\x56\x40\x65\x07\x8b\x34\x77\x2d\xc1\xce\x0e\xf7\x8d\x7c\x77\xf5\xb7\xf3\xef\x15\x2b\x07\xa1\xb6\x72\xc2\x74\x72\x92\xb0\x62\x72\x62\x47\x78\xf2\x60\x75\x64\xb3\x1d\xb8\xba\xd1\x50\x10\x48\x64\x96\xd9\x02\x63\x72\x44\xce\x58\x31\xf1\x9f\x7b\x1c\x70\x7b\xca\x3d\xe5\x0a\x29\xdb\x69\x37\x75\x68\x46\x8a\xc9\x06\xdc\x41\xaa\x11\x20\x7f\x39\xdc\xae\x91\xf7\x63\x44\xf7\x7b\xec\xce\xb2\x4b\x2b\xbe\x47\x01\xde\xc7\xd3\xd2\xef\x30\xea\xe9\x17\xe6\x0f\xc5\x0d\xfb\x5c\x74\x6a\x44\xb6\x2f\x46\xa8\x8c\xa6\x2c\x25\x72\xca\xca\x92\xa7\x4c\x11\x4f\xb7\x43\x1b\x14\xcf\x1e\x07\xe4\xbb\xde\x81\x4f\x2b\xe0\xe0\xf1\x98\x1f\x0e\xc1\xfe\x10\x11\x71\xb8\xb3\x40\xc4\x69\x9a\x73\xf1\x38\xb0\x7d\x47\xb8\xa9\x84\x66\xec\xe2\xdd\xde\xda\xba\x1d\x27\x56\xd8\xaf\xed\xcd\xa0\xa7\xc0\x86\x3a\xfb\xdf\x79\xdc\x25\x42\xa6\xbb\x39\xd0\x1e\x58\xed\x1e\x53\xcd\x6e\x77\x14\x84\xfa\x35\xc9\xdf\xf5\x7d\x50\xcf\x9e\xb6\xda\xfe\x28\x3a\x85\x04\xa7\x1c\x4b\xfe\x3f\x94\x90\x65\xf1\xa9\x1d\x47\x12\x8e\x15\x36\x65\x9b\x6f\xc5\xe6\xce\xec\xe9\xe5\x05\xf9\x16\x1f\x7f\xb8\x2e\x28\xa5\xd4\xa8\xf2\x9c\xcb\x9c\xf2\x76\x1a\xa0\xcf\x0f\x3a\xdf\x0f\x2b\x04\xc2\xa5\x7f\x96\xd8\x87\x8d\x50\x54\x97\x1b\xae\x4a\x96\x12\x6b\x4f\xf9\xc2\x5a\x3c\x2c\x88\xd3\x5f\x46\x8b\x87\xbb\xea\x92\x1d\x98\xe6\x5d\xfe\x4e\x2d\x45\x3b\x74\x02\x21\xc2\xc7\x3a\x11\xc5\x84\xe2\x10\xde\x10\x44\xe0\x81\xa8\x0d\x61\xe9\x3e\x59\x07\xc5\xee\x1e\x79\x2d\xc7\x5c\x38\x2a\x26\x6d\x54\xcd\x88\xf2\x6c\x3f\x70\x76\x72\xf2\xaf\x4c\x4e\x56\x2a\x7b\x29\xe8\x30\xdb\x3d\x64\x32\x3e\x04\x7e\x38\xf2\x2a\xa3\x63\xc2\xe0\x8f\x93\x94\x2b\xf3\x2f\xb9\xbe\x7e\x0d\xce\xe0\x4a\x38\xfd\x12\xdc\x9c\x96\xb7\xf8\xd4\x68\x24\x32\x0f\x47\x17\x90\x88\xb7\xd6\xc1\x23\x18\x8f\x70\x91\x9a\xa5\x33\x15\x05\x25\xdb\x27\xb0\x57\x8a\xcf\xbb\xc3\xd0\xc7\x21\x23\xef\x27\x3c\xb9\xb9\x0c\xfc\xbf\xb2\x34\xf7\x44\x70\x2b\x12\x52\xe6\x7f\x7b\x28\x6e\x64\x97\x75\xd9\x96\x41\x2d\x18\xcf\x71\x6a\x47\x4e\xaf\x2d\x04\xe1\x37\xaa\x94\x4c\x78\x1d\x7f\x00\x96\xe8\x9a\x7d\xa7\xc0\xbe\x1f\x0e\x2a\x20\x70\xb6\x03\x10\x94\x73\x97\x48\x2d\x0e\xa3\xec\x13\x54\x85\x52\x0a\x17\x0e\x6e\x0f\x06\x04\xc4\xf1\xd6\x5a\x9a\xd6\xc3\x2d\xb6\x34\x75\x6a\xe6\x9c\x8b\xdc\x25\xbc\x5a\x04\x72\x2a\x83\xed\xa1\xbd\x88\x42\xbe\xb5\xa9\x6d\x66\xf2\x20\xa0\xdb\x3d\x35\x7d\x99\xf9\x6f\x2e\x3e\x08\xef\x59\xa7\x39\xd0\x9e\x42\x16\x55\x86\x91\xb5\xfb\x77\x76\x75\x3e\x46\xfc\xce\x03\x38\xd1\x1f\x5b\x67\xa7\xc3\x30\x3d\x6f\xfb\x7c\xc5\x2f\xa3\xbf\x53\xa0\x5a\x3c\xfb\xe3\x1f\xfe\xf0\xd4\x3b\x3e\xed\x67\xb8\x7b\xe8\x96\x4f\x7b\xb9\xde\x96\xd4\x66\xb8\xe8\x6a\x33\x74\xb5\x19\xe2\xeb\xc1\xfd\xc3\xf7\x5f\x7d\xa1\x95\xec\xb6\x36\x32\xdb\xf6\xad\xaf\xb0\x67\x56\x5c\x3b\x19\x71\x7b\x57\x50\xb8\x8f\xba\x09\x2d\xe5\x88\xed\x5f\x23\xa1\xab\x8c\xf0\xeb\xaa\x8c\xd0\x5e\x8e\x58\x5b\x55\x10\xf6\xcf\x0d\xfb\xf5\x54\x3c\xd8\x9b\x6c\xec\x9b\x57\xbf\x77\x36\x7d\x5b\x4d\x3f\xda\xb2\xee\xb7\x66\x61\x38\xac\xc7\x5b\x6a\x6f\x71\x25\xde\x5c\x35\xfd\xc3\x43\x15\x14\xcb\xd7\xd2\x50\x97\x07\x54\x9d\xc9\xde\x96\x07\x9c\x8a\xdc\x89\x77\x2f\xb3\xe2\xbd\xbb\x9e\x0b\x10\xf0\xb7\x1f\x7f\x5c\x40\xe7\x20\xdf\x2f\x4c\xfd\xcb\x72\x8f\x7e\xa1\x1d\xf0\xef\xca\x3d\xaa\xa2\xaa\xb9\xce\xea\x08\x04\x12\x44\x38\x39\x0c\x3b\xd3\xd4\x64\xe1\xf4\xf2\x82\x24\x25\x83\xd2\x0e\x34\x53\x03\xb2\x44\xc2\x73\x0e\x24\x2b\x11\x3a\xc9\x8e\x6a\xcd\xf2\x42\xef\x8b\x79\x9d\x77\xf4\x57\xe6\x1d\xbd\x73\x2f\xc5\xa4\xca\xa9\xe8\x1b\x6a\x01\xfe\xd1\x28\xee\x64\x8e\x1f\x0e\x88\xa5\x0b\x28\x56\x80\x2d\x14\x52\x9a\x2b\xc1\x7f\xae\x58\x6d\xae\xf0\x52\xc7\x23\x70\xee\xc0\x3c\x5a\x86\x1d\x4a\x54\x73\x54\x24\x91\x0b\x49\x5c\x16\x20\x1e\x8e\x8e\x60\x04\x62\x59\x64\x7a\xd3\x13\x86\xd2\xdb\x25\x14\x49\xa8\x9f\x8a\xf5\x43\x54\x10\x69\x96\xc9\x5b\xfc\x76\x28\x8f\x98\xfd\x33\x73\xb1\x75\x49\x86\x8c\xe4\xbc\x2c\x65\x69\xdd\x48\xe1\x74\x30\x7c\xc8\xe8\x99\xac\x44\x85\xad\xb4\x41\x1f\xd7\x4c\xdb\xad\x06\x54\xd1\x92\x50\x81\x09\x9c\xe6\xff\x2e\xe2\x1a\xbe\xed\xe8\xdd\x90\x4d\xe8\x94\xcb\xaa\xc4\xb7\xb5\x24\x07\xf6\x27\xe0\xbd\x33\x59\x79\xdb\x79\x05\x19\x5a\x7e\x75\x6a\x09\x9c\xde\xd6\x3f\x82\x82\x9b\x4a\x67\x8e\xec\xb3\xcf\x5c\xe9\xc5\xb5\x38\x10\xb9\x96\x13\x0f\x81\x79\x53\x55\x18\x06\xfb\xc3\xce\xb9\xb7\x31\xbe\x85\xa3\xc5\x92\xea\xf4\x1a\x7e\xda\x24\xa7\xda\x8a\x35\x98\x32\xef\xd2\xe1\x9e\x5e\x0c\x2b\xae\x72\xc7\x5e\x57\x8f\x52\x50\xee\x84\xe4\xb5\x97\x8f\xb2\xc8\x78\x32\xbb\x38\x6f\x37\x72\x03\xc7\x74\xec\x4f\xf9\xa8\x0d\x73\x9f\xfc\x8d\x2a\x96\x92\x37\x54\xd0\x31\x5a\x5d\x8e\xae\x2f\xff\xf6\xe6\xd8\x60\x11\x58\x75\x2e\xce\x97\x86\x76\x5c\x87\x83\xbf\x7d\xa8\x3c\x77\x32\x0f\xba\xd6\xc4\x86\x85\x51\x77\x04\xdf\x83\x95\x00\x20\x5e\x26\xd8\xa7\x7d\xda\x12\x71\xe0\x72\xbe\x48\x14\x86\x6f\xb8\xea\x6f\x6a\x9e\x54\x4f\xf3\xf4\xe6\x2e\x01\x10\xd8\xcd\xd7\xad\xb2\x99\x0f\xac\x81\x9f\x2b\xee\x46\xa2\x4b\xaa\xd9\x78\x76\xce\x8a\x4c\xce\x0c\x02\x5c\x06\x66\x7c\x7c\x74\x88\x62\x43\x39\xa4\x09\x29\xab\x8c\x61\x6f\xa1\xf9\xb2\x6b\x82\xb1\xb4\xa6\x74\x5c\x28\x4d\xa1\xe8\x1a\x8e\xbf\x76\x46\x8d\x99\x55\x53\xb6\xd4\xc7\x79\x6e\x7c\x2a\x2e\x51\x69\x4e\xc9\xda\x57\x9a\x33\x26\xf8\xfc\x66\x9c\xdd\xc6\xaf\xd9\xd8\x83\x19\x77\x07\x84\x53\x7e\x55\x65\x86\xf9\x64\xe9\x5c\x8b\x57\x90\xd3\xec\x1e\x63\xb5\x0b\xa0\x09\x66\xf6\x3d\x32\xac\x8c\x10\xc7\x54\x64\xe3\x5e\x2c\xf5\x79\x3b\x41\x97\xb6\x79\x89\xd0\xa2\xc8\x38\x86\x30\xcb\xd2\xfa\xa5\x03\x83\xe6\xe2\x63\x4d\x48\xcb\x96\xb2\xcc\x76\xb2\x4b\x9f\x4c\x59\x39\x6c\x52\xa7\x62\x5b\xb1\x84\x16\x1c\xfc\x38\x8d\xa5\x98\x68\xe3\x4e\x2f\x2f\xf0\xed\x65\x86\x63\xf7\x23\xee\xa0\xdd\x1b\xe7\xde\xb0\x3d\x83\x50\x73\xf1\x95\x96\x4e\x2f\x2f\xb0\xb4\x97\x2d\xb6\x54\x9b\x3f\x8c\x9e\x40\x31\xc8\xb1\xae\xf0\x48\xc7\x66\x44\x4d\xa4\xf0\x1f\x65\xa2\xca\x19\x16\x68\xaa\x9b\x8d\x19\xe5\x51\xcc\xea\xd1\x6b\xeb\x89\xd1\x75\x8c\xea\x73\x70\x10\x0a\xc2\x98\xfa\x50\x06\xf3\x01\x62\x72\xf0\x55\xf4\x94\xa1\x1c\xf5\x84\x9b\xb2\x9f\xed\xa3\x04\xb6\x8c\x0a\xd8\x9a\x9f\x09\x29\xae\x2c\xa8\xbe\xbf\x7a\xbd\x1b\x22\xbc\x8d\xc7\xb0\x45\x7d\x18\xd4\x2f\x2c\x68\xa9\x39\xcd\x48\x55\x66\xce\xad\x88\x39\x02\x36\x14\x6f\x42\xa7\x41\xe1\xa3\x01\x21\x5f\xe1\xee\xdb\xcd\xc1\x33\x8e\x0d\x7c\xad\x29\xb8\xca\xb2\x1e\x19\x71\x68\xd9\xae\x59\x41\x42\xb7\xd6\x35\x17\x89\x51\x07\x45\xdf\x77\xe4\x81\x19\x39\x25\xd1\x1f\x74\xf0\x9a\x82\xcc\xcc\xb2\x14\x8a\x61\xc2\x27\xcc\xa1\x4f\xc0\x64\x61\xb4\xd8\xb3\xac\x52\x9a\x95\x57\xd2\x30\x94\x20\x6c\x07\x0a\x83\xd0\xf0\xe7\xbf\x71\x91\x42\x9c\xd6\x15\x30\x9f\x84\x0a\xc2\x38\x18\x83\xcc\x90\xe0\x7f\x37\xc8\x52\x23\xe5\x91\xaa\x92\x89\x59\xd2\x41\x21\x53\x75\x60\x48\xd1\x01\x9a\x0c\xd5\xc1\xb1\xf9\x6b\x7e\x0d\x18\x85\x13\xbc\x77\x42\x0b\x7e\x70\xdc\x23\x00\x20\x70\x00\x4a\x3d\x79\xba\x78\xe8\xd6\x0a\x3a\xfa\x4e\x58\x78\x15\x8e\x00\x38\x28\x6a\x57\xdf\xed\x84\x6b\xe6\xdb\xab\xa3\xa5\xc9\x57\xba\x99\x27\xf8\x84\x9c\x0a\xc2\xf2\x42\x83\xf5\x9a\xe4\x8c\x3a\x97\x38\x9b\xb2\x72\xa6\x27\xb6\x12\x88\x23\x20\x4f\x1e\xe8\xfb\x01\x7c\xae\x77\x7d\x8d\xe4\x70\xc2\x16\x80\x7b\xf8\xd5\xe1\x3c\x21\xad\x39\xc2\x93\x05\x25\xb0\xe8\x9d\xc0\xf8\x83\x79\x33\x06\x21\xde\x42\x6a\xe9\xe9\xc7\xeb\xd7\xd6\xb1\x82\xb0\xfa\x8e\x8b\x54\xf9\x6e\x8a\x36\xee\xdb\xc2\x7b\x29\x90\x61\x86\x4f\x11\xc0\x8b\x22\x70\x53\xb1\x75\xcd\xf0\x4e\xea\x5f\x35\xd4\xda\x01\xac\xea\xf0\x46\xa6\xcb\x8f\x4e\xb4\xbf\x17\xc1\xc3\x3e\xd8\xa0\xb6\xbb\xd8\xb1\xac\xb8\x3b\x2b\x96\xea\x04\xeb\xb7\x63\x0d\xe8\x57\xcd\xa4\x36\x38\x00\x9d\x0c\x7e\x01\x6b\x12\xd6\x39\x27\xa3\x8c\x8e\x6b\x34\x02\xaa\x87\x82\xd6\xd9\xf5\x0f\x6e\x09\x8a\xf0\xe5\x22\xef\x46\x99\x78\x93\x14\xdc\xaf\xa1\xb4\xf2\x09\xf3\x91\xa5\x3f\x6e\x16\x85\xfd\xe0\xab\xb1\xa9\x89\xb3\x51\xaf\x35\xe4\xad\x82\xbf\xb3\xd9\xd1\x00\x13\x5c\xc1\x36\xa7\x98\x42\xfc\x14\xc8\x21\xd7\x3f\x44\x68\xb2\x61\xbe\x2b\x90\xf6\x86\xcd\x6e\x65\xb9\xbc\x16\x7b\x2c\xd7\x7b\x3a\xe4\x5e\x71\x1a\x98\x73\x5e\xa2\x7d\x50\x2e\x2d\x3a\xbf\x33\xaa\xae\x9d\x7c\x46\x87\x2c\xdb\x3c\xf5\x37\xb4\x30\xf3\xae\xe3\x5e\xd1\x10\x60\xdd\xa6\xa8\x8a\x60\x88\x9a\x0b\x0b\x94\xe5\x98\x0a\xfe\x0f\x0c\x16\x4e\x0c\x49\x90\xa5\xf9\xf3\x08\x5d\x2f\x68\x46\xc8\x58\xa2\x8f\x2d\x2a\x2f\x25\xa1\x1b\x70\x9d\xa6\x29\x47\x41\xe4\x72\x03\x5a\xae\x07\x02\x17\x37\xdb\x6c\x1f\x3c\x8f\xd1\x64\xb8\xd8\x3b\xde\xbb\x35\x67\x7d\xf3\x71\x5c\xef\x03\x6e\xc0\x2e\xaa\x72\x4d\x78\xd8\xda\xf7\x73\xca\x6d\xb3\xe0\x6d\xa0\x6b\x31\x87\x5a\x09\xd3\x10\x48\xb3\x3e\x3f\xda\x3d\x1c\x96\xbd\x00\xce\x72\xca\x77\x85\x18\x5e\x7b\x6c\x59\x4e\x75\x55\x72\xbd\x94\xfd\xae\x7f\x91\x8b\xef\xaa\x21\xb3\x1e\xf5\xad\x5f\x17\x10\x58\x79\x7a\x79\xb1\x14\x2c\xed\xb0\x59\xb0\x7b\xd8\x09\x1a\x29\x8d\x54\x82\xe6\x43\x3e\xae\x64\xa5\xb2\x59\x68\xc6\xa5\x10\x10\x30\x20\xe4\x02\xed\x58\xe2\x50\x13\x2a\xa4\x98\xe5\xf6\x51\x91\x64\x55\xca\xa2\x11\xc1\x6f\x3a\x95\x3c\x25\xb4\xd2\x32\xa7\x9a\x27\x24\x91\xac\x4c\xc0\xc7\x1a\x8e\x54\x29\x46\xe8\x8a\x77\x93\x4a\x69\x99\x93\x9c\x96\x6a\x42\xb3\x6c\xd5\x1e\xb7\xc0\xc3\xd7\x15\x6b\xef\xc3\xfa\x57\xfe\x38\xc5\x59\xef\x88\xdf\x1b\x6a\xd3\x37\xc0\x6f\x33\xb9\xbd\x06\x98\xae\xc6\xd2\x06\x63\xd8\xaa\x08\x4b\xeb\x3d\x45\x08\xf7\x7e\xc2\x48\x51\x0d\x33\xae\x40\x33\x05\x4a\x34\x23\x43\x36\xe1\x36\x3a\x7b\x33\x09\x5a\xb9\xc5\x9b\xe0\xbc\x8e\x06\x6c\x84\xd0\x1a\x92\xbd\xf6\x5d\xcb\xd2\x2e\x72\x3a\x6e\x20\x80\xbf\x36\x04\x9b\x8a\x99\xe7\x84\x50\xe4\x54\xf5\x88\x2c\x6d\xc4\x8e\xef\x49\x6f\x7f\xf2\x85\x72\x4b\xf2\xce\x82\xce\x86\xce\x5b\x7c\x87\x84\x0a\x56\x8e\x64\x99\x1b\x00\xf3\x92\x8c\x2a\x01\x06\x4a\x65\x23\xed\x81\x4b\x58\x1b\x17\xcd\x94\xf4\x67\x19\xf6\x42\xb8\x49\x10\xaa\xc8\x2d\xcb\xb2\x01\x39\xcd\x32\x5b\x7d\x35\xa8\xb3\x51\xe7\xca\xd7\xf1\x1c\xc3\x19\x49\xf9\x98\x29\x4d\x8e\xae\xff\xef\xe9\x31\x88\x28\x60\xff\x99\x11\x4d\x5d\xaa\x60\x6c\xd7\x02\x61\x27\xad\x40\x28\x4a\xa8\xa6\x99\x1c\x63\x48\x03\xd8\xc8\x45\x4a\x8a\x8c\xce\xa0\xb5\x42\x41\x4b\x88\xf6\x4d\xd0\xb6\x45\xca\x4a\x40\x51\xe9\x7b\xe5\x5d\x9b\x89\xca\xba\xba\xcf\x7d\xc0\xc9\x1d\x89\xc6\x86\xea\xba\x77\xcb\x14\x4b\x56\x64\x74\x85\x35\x66\xe1\xc0\xd7\x89\xe0\x46\x3d\x00\xd5\x5f\x0a\xe6\xc7\x18\x90\x6b\xc4\x9d\x9c\xea\x04\xfd\xc9\x3f\xe5\x4c\xd3\x94\x6a\x3a\x30\x3a\xf4\x4f\x71\x56\xa2\xcc\x52\x33\xd0\xea\x8d\x5e\x31\x67\x14\x8e\xe5\x66\x22\xf5\xda\x48\xf0\xfe\x71\xd0\x6b\xdc\x79\x5c\x6b\xfe\xd9\x93\x3e\xc1\xf2\x5f\x7e\x36\x2a\xec\x5a\xff\x65\x34\xd7\xf9\x97\x62\xeb\x4c\x16\xaf\xc4\x62\x6b\xce\xa0\x44\xe7\x7b\xdb\x85\xca\xdd\x01\xd3\xf3\xe9\xdb\xf3\xd5\x66\xc2\xcd\xa6\x96\x0d\xa6\x95\x79\xf9\x74\xe5\xf4\x9c\x61\xde\xfe\x12\x7b\x66\x5c\x2a\x12\x24\x6f\x62\x62\x0f\x15\x9e\x73\xb8\xe2\xfc\x19\x58\x0c\xc2\xb4\x53\x7c\x6f\xb5\x5d\xa9\x91\x6b\xac\x89\x43\x6c\x53\x96\x5f\xdf\x4f\x76\xe5\x43\xcd\xfc\x63\x1b\x33\xf1\x56\x65\xda\x21\xe4\x21\x31\xc7\x99\x96\x3d\xb0\x9b\xfa\x13\x1b\xda\xc5\xdc\x52\xb7\x98\xa8\xdf\xca\x28\xe8\xeb\x86\xcd\x0e\xad\x8e\x68\x30\x7d\xc2\x0b\x4c\x15\xb5\xee\x1b\xbb\xbb\xe4\x07\x9a\xf1\xd4\x0f\x81\x58\x7d\x21\x7a\xe4\xad\xd4\xe6\x9f\x97\x9f\xb9\xd2\xa8\x6b\x9f\x4b\xa6\xde\x4a\x0d\x77\x5a\x59\x2a\x4e\x61\x8b\x85\x5a\x6d\x1f\x3d\x00\x70\xae\x02\x9b\x80\x5b\xd0\xc5\x28\x92\x8c\xcc\xd3\x17\xc2\x48\x04\x76\x45\x3e\x85\x5a\xd9\x21\x5c\xfe\x8f\x90\xa2\x0f\xbe\x81\xa5\x63\x58\x40\xc8\x32\x82\xc3\x9a\xe1\xec\x50\x18\x7c\x09\xbf\x70\xe5\x88\xb8\xe7\xd9\xd4\x99\x2b\x79\x42\x72\x56\x8e\xc1\xdb\x95\x6c\xf0\xf6\x34\x35\xe1\x36\x32\xdc\x6e\xdc\x2b\x20\x99\xaf\x57\x5a\x69\x16\x36\x29\x78\x1e\xc9\x52\x8e\xa6\x9b\x7f\x1a\xea\x03\x90\xfa\x17\xe4\xd1\xab\x01\x39\x75\x2d\x7e\xc2\xdf\xac\xd7\x2f\x1c\xc6\x8c\xc0\x15\x31\xa4\x64\x4a\x33\x86\x1d\x0e\xa8\xf0\xb9\x6e\x72\xb4\x40\xd8\x7b\x36\x9f\xde\x9c\x59\x2f\x32\x1d\xdc\xb0\xd9\x41\x6f\x61\x6b\x0f\x2e\xc4\x41\x9d\xf0\x18\x6d\xa6\x27\xa2\x20\x6d\x1d\xc0\x6f\x07\xbb\xf3\x82\xb5\xc4\xb2\xb9\x2d\x69\xe3\xbe\xa9\x1b\xbe\xdc\xf5\xbf\x54\xd8\x38\x52\xc7\x60\xf6\x10\xd8\x6b\x49\x96\x60\x06\x36\x77\xc3\xd2\x2a\x46\x54\xbd\xe1\x45\x51\x57\xa2\xa9\x8a\x71\x49\x53\x46\xc6\x25\x2d\x26\xdb\x8a\x25\x28\xdb\x2c\x1b\xfe\xc9\x08\xba\x2b\x80\xbf\x46\x37\x5c\xfb\xde\x2d\x1b\x4e\xa4\xbc\x81\x34\x44\x40\x84\x3b\xb4\x64\xfc\x88\xdf\x3a\xaf\xef\x39\xa5\x54\x91\x94\x69\xca\x33\x88\xa3\x79\xf7\xfa\x8d\x8d\xb4\x71\x7c\xdc\xcd\x72\x79\xd0\x4a\x0b\x0a\x00\x4d\x6d\x04\xd8\x15\x9b\x72\x76\x6b\xed\x1b\xab\x62\x64\xfa\x64\xcc\x04\x04\x86\xac\x09\xa0\xea\x13\xc5\x53\xf6\x12\x92\x9e\x57\x0f\xb4\x87\xc3\x61\xc5\x9c\x37\x1d\xde\xf5\x14\x7c\x23\xf5\x6e\xc0\x65\xbd\xfa\x7b\x29\xcb\x35\x45\x98\x9a\xe5\x60\x37\xcb\xaf\xb6\x51\xfc\x2f\xc8\x1f\xfe\xf0\xfb\x95\x0f\xe5\xf4\x33\xcf\xab\xfc\x05\xf9\xe3\xbf\xff\xfb\xef\xff\x7d\xf5\x63\x5c\xe0\x63\xcf\x57\xaf\xcf\x9e\xb6\xb3\xab\xf3\x47\x00\xef\xd4\x47\x32\xae\x77\x66\x36\x18\x6a\x44\x79\x56\x95\x36\x86\xb6\xa1\x8a\xf0\x2a\x7c\x07\x1c\x51\x75\xd2\x09\x75\x23\xba\x40\x3b\x1b\x80\x37\xe2\x82\x29\x68\x9e\x53\x89\x92\x25\x72\x2c\xf8\x3f\x58\xea\x7a\xe7\x40\x40\x0c\x54\xd9\x77\x28\x4e\x98\x48\xb1\x87\xa9\xe1\x79\x13\x2a\xd2\x6c\x5d\xa0\x44\x83\x95\x86\x27\x78\x2f\x90\x01\xe7\xd9\x0a\x60\x6f\xea\x37\xe6\xc0\x05\x9d\x58\xad\xdb\x0e\x39\x1a\x82\x6d\xaf\x95\x22\x61\xbc\x5e\xa3\x58\x2f\x99\xe3\x82\xde\x87\x2a\x2b\xdc\xfb\xb9\x62\xe5\x0c\x12\x6c\x6a\xc1\x3e\x08\xc2\x7b\x5f\xd7\x6f\x70\xcb\xb0\x12\x15\x16\xd0\x99\xd3\x85\x6b\x21\xa6\x0e\x93\x99\xfb\x36\xbc\xc3\x30\xec\xc0\x79\xcd\xc8\x29\x11\x55\x96\xad\x7a\x54\xc8\x75\xfe\xb5\x10\x76\x1b\x54\xc9\x66\x3a\x5e\x53\xb3\xc0\x12\x48\xdf\xab\x71\x20\x5c\x78\x4b\xa2\xfc\xe3\x36\x17\x84\x0b\x6e\x14\x4f\xdb\x3c\x96\xb6\x59\x99\xa0\x06\x66\x04\xbc\xb6\x09\xb6\x6d\x58\xdc\xe7\x2e\x0d\x0b\x78\x6d\x15\xd7\xd4\xcc\xc8\xb0\x64\xea\x8f\xce\xd4\xb0\xc3\xe2\x9b\x98\x1d\x96\x2c\xbd\x33\x3e\x2c\x00\xbc\x69\x14\xd9\x16\x11\x64\x0d\x77\xb2\x81\x51\x02\xaf\xce\x34\xb1\x15\x27\x6a\x40\x98\xb7\x33\x53\x34\xde\xd5\x92\x71\x31\x95\x58\x64\x7b\x2b\x19\xee\x6a\xe1\xc5\x39\x51\xee\x16\x28\xab\x95\xe5\xbc\xf0\x1b\x8a\xb4\x46\xa1\x25\x95\xda\x6c\xec\x5e\xbf\x82\xf5\x79\x37\xad\xe8\x20\xf1\xca\xab\x8c\xfd\xc8\xf5\xe4\x9d\x2b\xaa\x6f\xb1\x5a\x57\x45\x06\x8b\x0d\x7e\x30\x28\x74\x55\x4b\x86\x17\xd8\xc6\x8d\x25\x32\xcf\x99\x48\x31\x88\x28\xa7\x37\x8c\xd4\xad\x42\x8d\x8c\x07\x62\x30\x0c\xc7\x3e\x17\x54\xd4\x72\xe2\xd4\xd0\xf2\x75\x18\xd5\x10\x9f\x9a\xf2\xda\xc6\x09\x2d\xeb\x13\x59\x82\x4c\x94\x28\x61\x85\x0c\x59\x26\x21\x05\x1e\x23\x6c\x31\x06\xdc\xe5\x80\x18\x92\x6c\xef\x5a\xae\x67\x0b\x6e\x32\x31\xae\xeb\x78\xa9\x0c\x9a\xfa\x5a\x0a\x2c\x05\x1b\x90\x2b\x2b\xc2\x34\x93\x8a\x9a\x90\xd3\x86\xa4\x74\x0b\x86\xf8\xb9\x5f\x57\xcb\xe8\x1b\x61\xb7\x6f\x67\xa3\x65\xce\x93\x4d\x9b\xb2\xd9\xd6\x81\xd7\xfc\xb6\xb8\xf7\xc2\x8d\x99\xba\x7b\x4d\xb6\xc6\x3d\xdc\x6d\xce\x8a\xcb\xb7\xda\xd8\x6e\x6f\x62\x62\x52\xf3\x23\xbf\x31\x73\x64\x33\xc1\x66\xd5\x60\x24\xec\x93\xb3\xab\x97\xa7\xef\x5f\xf6\xc8\xf7\x97\xe7\xf0\xef\xf9\xcb\xd7\x2f\xcd\xbf\x67\xef\xde\xbe\x7d\x79\xf6\xde\x48\x30\x5f\x61\xd3\x00\xa3\x40\x9a\xad\x31\x9c\x50\xc6\x74\x8a\x8a\x19\x19\x55\xda\x10\xa2\xfa\x63\xd1\x2c\x28\x5a\x1f\x68\x9a\x1a\x65\xf5\xc9\x21\xc0\x72\x80\xcf\x1b\x6c\xc2\x6e\x29\xd8\x67\xc1\xa6\xc8\x6d\x16\xd0\xee\x07\xc3\x1a\x27\x99\x44\xeb\x3d\xd8\x31\xbb\xe4\xa3\x20\xaf\x64\x49\x6c\x6f\x3a\x68\x56\x9a\xaa\x43\x9b\xc3\x63\xfe\x3f\xc0\x5b\x27\x99\x1c\x1f\xfa\xd4\x1e\x46\x32\x39\x26\xaa\x1a\xfa\x94\x2b\x10\x02\xe0\xe9\xaf\xdc\x63\x51\xa6\x4a\xcf\xe7\x5d\x05\x6f\xf9\xc1\xa3\x77\xc2\x07\xc2\x71\x4f\xa0\xa1\x5c\xf4\xa4\xb9\x31\x3f\xe0\x57\x27\xcb\x67\xe0\xe4\x3d\x5e\xce\xbd\xf1\x51\x18\x5c\xbf\xe5\x59\x9a\xd0\x32\x5d\x40\x78\xe0\xc9\x88\x2f\x00\x3d\xac\xb2\x8c\xcd\xbf\xeb\xc1\x6d\x6d\x14\x39\x65\x65\x46\x0b\x4c\x08\x80\x32\xd7\x10\x31\x05\x1f\x39\x67\x05\x83\xb4\x37\xd7\x9c\x9e\x89\x24\x93\x50\x86\x05\x19\x7a\x2f\x5e\x3a\x46\x50\xb9\x5a\x95\x2e\xf9\xd2\x1f\xaf\x83\x2f\x93\xc0\x42\x1c\xf9\x56\xa8\x8f\x91\xe7\x2b\x0b\x01\xf9\x1c\x1f\x54\x94\xbd\xb4\xcf\xc8\x81\xcd\x48\x3c\xe8\x91\x03\x5f\xeb\x26\xb5\x9a\xc1\xc1\x57\x07\xf5\x03\x61\x4e\x1b\x28\x06\xd6\x0d\xd6\x87\xef\x84\xd9\xb3\x80\x1d\xce\x59\xe7\x3f\x5d\xd7\x2b\x32\x1c\xd9\x1a\xee\x60\x0e\xf1\x40\x83\x68\x22\x0b\x5f\xad\xd3\x31\x37\x7e\xd1\x4c\x3f\x78\x5d\x43\xf9\x03\x4c\xeb\xb4\xc0\x29\x99\xd9\x4a\x17\x84\x77\x1d\x61\x9e\x77\x36\x86\x05\x95\x78\x49\x0a\x5a\x1a\xf5\xcb\x3d\x19\xb7\xc4\xfb\x6a\x63\x43\xbc\x06\x18\x14\xf8\x94\x1a\x6a\x2a\xd7\xfe\x8d\xb3\x8c\x2a\xb5\xc4\xda\x0c\x54\xc4\x0c\x4c\x18\x8e\x4c\xa8\x73\xb8\x41\xbd\xf3\x09\x9d\xae\x29\x88\xd1\x60\xd2\x9a\x96\x63\xa6\xd7\x7b\x83\xa8\x98\xbd\x5b\x5b\x42\xaf\xdf\xb8\x68\x6f\xbf\xd9\x51\x8c\x0e\x21\x17\xba\x2f\xcb\x3e\xbe\xf2\x82\xe8\xb2\x5a\xe5\xd7\xd3\x3c\x67\xb2\xd2\xd7\x2c\x91\x62\x79\xf6\x8b\x7d\xae\x35\xf7\xd6\x16\x29\x41\xd6\xc3\x7a\xea\x04\x98\xb0\xe8\xa5\x53\x46\x6b\xe9\xc6\x79\x55\xe3\xb2\x3d\xef\x5e\xbf\xd9\x67\xb3\x09\xa4\xcd\xaf\xdf\xc9\x1f\x2c\xcf\x10\x63\x3f\x53\x3b\xf3\xb5\xaf\xbd\xa9\xf4\xf6\x2f\x9d\x79\x6f\xdd\xfa\xa7\x2d\x30\xd6\x97\x5e\x59\xb9\x7e\xa5\xa9\xae\x16\xb0\x21\xda\x1b\x4b\x2c\xaf\x31\xfd\xd0\xaa\x22\xd7\xf0\x5e\x68\xd8\x5c\xac\x37\x81\x35\x6c\xe0\x39\x17\xa0\x39\x20\xf6\x45\x73\x3e\x75\x49\x39\x2a\xcd\x34\xd1\x15\xe4\xb1\x53\x6d\x83\x39\x6d\xc1\xa5\xdf\x2c\x5b\xc6\x52\x35\x79\x9d\x6a\x9c\xb0\x52\xab\xd7\x54\xe9\xef\x8b\x94\xae\xc8\x74\x9b\x0b\xd2\x54\x1a\x0e\x0c\x8a\xf4\xb7\x82\xa5\x86\xc2\x5b\x10\xe0\x78\xe4\xd6\x90\xde\x0a\x47\x5c\x19\x7a\xb0\x12\xe5\xdc\x01\x32\xaf\xf7\xcd\xa7\x96\xcf\xfa\x4a\x1a\x98\x9c\x2e\x25\x40\x71\x78\xca\xa6\xd9\x1a\x76\x52\xc2\x68\x44\xb0\xcf\xcb\xac\x0c\xfb\xcf\x38\x63\x54\x2c\x4f\x36\x98\xc3\x28\x78\x6e\x7b\x1c\xb2\x1f\x20\xb7\x13\x6e\xe4\x5d\xcc\x08\x54\xc4\xc9\x5f\x29\xcb\xd8\x8a\xc4\xc0\x3d\xc3\x67\xed\x17\xce\xed\x07\x1a\x85\x76\x5d\xc6\xef\x78\x27\x86\x95\xe0\x6d\xea\x49\x2d\x69\x5b\xe9\xc1\xeb\x6b\xf3\xab\x02\xf1\x65\x98\xc9\xe4\x06\x0b\xd0\x41\xed\x07\xfe\x0f\x56\xba\x58\xfb\xba\xf9\x9c\xed\x88\x36\x76\xdd\x5e\x1d\xdc\x5c\xfb\x2b\x18\xc5\x8c\x6d\x00\xe8\xc7\x97\x65\x6d\x4d\xad\x84\xcd\xb4\xbc\x9f\x70\x5d\xa7\xe5\x40\x8e\x42\xe4\x2d\x59\x54\x78\xb0\x56\x0d\xd4\xc7\xb4\xca\x2a\xcd\x6d\x6e\xd0\xc9\x77\xab\xf3\x68\x5a\x0d\xc1\x5d\x97\xcd\x83\x4f\x00\xf8\x44\xb2\xb6\xb4\xd1\xda\xbc\x9f\xa6\xd6\xbe\x0d\xf9\x3d\xa4\xb9\x84\xef\xa7\xdc\x64\xb4\x56\x03\x2a\x5b\xf7\x70\xae\x4c\x7d\xa8\xaf\x6d\xfc\x96\x4d\x0b\xf3\x6e\xe5\x59\x13\xdb\x14\x50\x8d\x0b\xcd\x78\xb5\xc3\x66\xf1\x62\xf4\xc1\x48\x96\x2b\x15\x98\xf6\x26\xbf\x3e\x1b\x6c\xe3\x40\x46\xfa\x5c\x1d\xaf\xb7\x98\xb0\x64\xa8\x97\x7f\xa5\x47\x28\x99\x70\xa5\x65\x69\xdd\x89\xd0\xbc\xae\xa4\xd0\x5c\x77\x79\xdc\x5b\x3b\x11\x80\x67\x7e\x0a\x84\x16\x05\xa3\xbe\xaf\x95\xe5\x4d\xd0\x98\xaa\x64\x89\x2c\xd3\xa5\x13\x73\xa6\x81\xa5\xb2\xd4\xd2\xcf\xb7\x90\xd9\x9a\x51\xa5\xdf\xfb\x39\x18\x01\xa1\x21\x35\x8e\xc5\x1f\xbb\xc4\x7a\x35\xae\xf4\x8f\x14\xf5\x8f\x92\x50\x81\x26\x91\xfd\x64\xf0\xcd\x42\x46\xbd\x36\x94\xe6\x76\x5a\xd7\xad\x97\xdc\x82\x25\xde\xcf\xcc\x73\xa6\xd4\xda\xe4\xaa\xb9\xc0\x14\xa8\x21\x4d\x7c\x0d\x69\xfb\xba\x63\xf6\x28\x20\x60\x08\xaa\xab\xf2\x36\x5b\x8d\x6a\x04\xc4\x04\x34\x28\xf8\x63\xb5\xd7\x96\x15\x13\xaa\x9a\x2e\xc6\x9f\x22\x1f\xd6\xdc\xf8\x38\x34\x9c\x4d\xc9\xa8\x5a\x97\x68\x3a\x07\xdb\x61\xc9\xd9\x88\x9c\xd1\x9c\x65\x67\x54\xb5\x09\x5c\xa0\x00\x03\xc2\x06\xe3\x01\x39\xbc\x0a\x3c\xcc\x6f\xa5\x7e\xb3\xae\xc7\xc7\x86\xf2\x0f\x4d\x4e\xf4\x9d\x9e\xe5\xbd\x95\x84\xcd\x27\x77\xcf\x33\xbb\xf7\x0c\xd7\x9c\xd0\x47\x71\x36\xd7\x67\x4b\xaf\x3a\x8f\xf1\x49\xac\x4a\xb0\xf8\x25\xbb\x9e\xc8\x0d\x09\x9c\xab\x4e\xe1\x63\x3e\x7f\x1b\x96\xe4\x87\xb8\x5e\x6a\x32\x59\x58\xdd\xfb\x48\x73\x05\x9f\x41\x18\x54\x08\xe5\xe1\xcd\x4c\xcf\xae\x7f\x68\x53\x6c\x79\xd8\x52\x05\x76\x03\x57\xfe\xbe\x46\x2e\xef\xaf\xe7\xc2\xfb\x96\x41\x48\xc1\x4b\x63\x30\xe0\x3e\x83\x4e\xce\xdd\x57\xad\xad\xc3\x57\x76\x86\xbf\x46\xb6\x83\x9e\x7d\x26\xc2\x8f\x23\xe8\x55\xc8\xa6\xd8\x20\x14\x92\x5c\x18\x11\x4c\x99\x43\x71\xbc\xe6\xf3\x0d\x15\xaa\x66\xca\xd4\x66\x45\x77\xa3\x12\x4b\x36\x6f\xad\x7b\x68\xdd\x06\xe3\xd5\x54\x67\x6b\xa0\x13\x6f\xa1\xac\x6d\xd6\x78\xb6\x18\x6c\xa3\xf8\xb7\xe5\x78\xcb\x0d\xb8\xf3\xd7\x5c\x25\x69\xf3\xca\x15\x10\x69\xf4\x2a\x27\x86\x02\x27\x50\x5f\x1c\x69\xb7\x25\x4f\xb1\xfd\xf6\x6a\x9e\x06\x42\x88\x65\x8c\xe1\x6d\x2d\xab\xaa\x78\x7b\x30\xdf\x58\x7f\xa4\xf1\x78\x8f\xa0\x98\xca\x46\x04\xba\xdb\xe2\x0c\x78\x6d\xc2\xba\x87\xc7\xb7\x26\x95\xb2\xd6\xe2\xd8\x1d\xd5\xb5\x51\xac\x9c\xb2\x34\xf2\xd4\xd9\x3a\xff\xf1\xbd\xc0\x6f\x5b\x8f\x6f\xc1\x4e\xfe\xf9\xaf\xdf\xfc\xa6\xdf\xef\xff\xa6\x0e\x29\x7b\x41\x68\xc1\xd9\x67\xcd\x30\xea\x70\x70\xf3\x1f\xd0\xcc\x69\xfa\xfc\x37\x80\x70\xe4\x0c\xac\xcd\xce\xcc\x7a\xee\xb3\x26\x7f\xe3\xb2\x4e\xcd\x47\xa8\x10\x52\x87\x51\x50\x89\x14\xba\x94\x59\xc6\xca\xfe\x98\x89\xc1\x4d\x35\x64\xc3\x8a\x67\x29\x2b\x61\x70\xf7\xe9\xe9\xb3\xc1\x9f\x07\xcf\x7e\x43\x7c\x8e\xa9\x91\xec\x95\xa6\x79\xf1\x02\x92\x5d\x7e\x63\x31\xce\x55\xef\x2b\x32\x2a\xd4\xc0\x87\xb6\x0f\x12\x59\x32\x69\xfe\xc9\x7f\xa3\x0a\x96\x98\x6f\xe3\x41\x23\x4b\x9f\xb1\xa6\x33\x3b\x45\x5b\xab\xae\x06\x53\x9f\xc8\x2c\x87\xff\xe3\xd2\x6d\xb9\xc1\xcb\xcc\xd6\x2e\xcc\xb8\xd2\xdf\xcd\xff\xf2\x9a\x2b\x64\x97\x45\x56\x95\x34\x8b\xa7\x0a\x3f\xa8\x89\x2c\x75\x54\x96\xb7\x4f\x38\xb2\x46\xc5\xc5\xb8\xca\x68\x19\xbd\xf5\x1b\x17\xf3\x50\x9b\xeb\x0c\x97\x9c\x46\x21\x80\xfd\x28\x40\x98\x0b\xcd\xca\x33\x99\x55\x79\x68\x1d\xeb\x2f\xca\x95\x23\x5e\x2a\x6d\xeb\x21\xc6\x4e\x85\x65\x72\x31\x7c\x3f\xc0\xd1\xbf\x2b\x29\xc0\x5d\x48\x06\x06\xdc\x83\xd5\x2f\x7d\x78\xf6\x29\x78\x0f\xf7\x30\x96\x57\x97\x9e\x92\x25\x33\xa6\x45\x51\xca\x29\xc5\x6a\x8e\x6b\xe6\xe2\x9e\x5b\xf8\xec\xe9\xe2\x0f\x2b\xbe\xbd\x7c\xc8\xc8\x47\x17\x0e\x19\xfd\xa0\x97\x54\xba\xc4\x87\xa7\xcf\x69\x56\x4c\xa8\xcb\xad\x54\xc9\x84\xe5\xb4\xde\x24\x59\x30\x71\x7a\x79\xf1\xc3\xef\xaf\xe7\x7e\x58\x5e\xfb\xd2\xa0\x9c\x4f\x27\x0c\xba\x30\x50\xa7\x8b\xf9\x74\x90\xfa\x04\x2c\x4c\x73\x41\xc8\x5b\x2e\xd4\x19\xa9\x1c\xcf\xf8\xdc\x6d\x03\x9d\xe0\xd6\x2a\xe1\x2a\x20\x32\x73\x84\x2e\xee\x37\x57\xc7\xa9\x46\x2b\xb3\x08\xcf\x52\x0b\xb3\x3a\x7a\xc7\xb9\x79\xea\x45\x0b\xbb\xa6\x01\x31\xc8\xc8\x4a\x5f\xf9\x09\x53\x57\x35\x09\x72\x2e\x71\x34\xe5\xea\x39\x42\x8a\x95\x86\xb8\x85\x52\xb8\xa6\xd1\x3d\xdf\xfb\xbe\x64\x66\xdc\x38\x6b\xd3\xa5\xa1\x2c\x69\x89\x37\xe6\xda\x91\xd0\x44\xe6\x79\x25\xb8\x9e\x9d\x00\x35\xe4\xc3\xca\xec\xc6\x49\xca\xa6\x2c\x3b\x51\x7c\xdc\xa7\x65\x32\xe1\x9a\x25\xba\x2a\xd9\x09\x2d\x78\x1f\x26\x2b\x30\x00\x27\x4f\xff\xcd\xd3\xf1\x79\xa5\x73\x25\x87\x59\x26\x23\xc4\xb0\x86\x7a\x7a\x3c\xe8\x6d\x8f\xed\xb7\xa3\x1a\xb5\x50\x25\xf9\xe5\xf5\xfb\xda\xc5\x88\xd5\x91\x00\xc2\x81\x93\xad\x06\xb6\x01\x14\xf4\x2e\xb2\x45\xe1\x5d\x3a\xab\x4f\x62\x85\x9e\x00\x19\x37\x3a\x89\xaa\x86\x39\xd7\xca\x45\x59\x62\xd4\xe1\x19\x70\x10\xa8\x2b\x8a\x96\x9a\x01\xb9\x10\xb5\x7e\x7f\xe7\xa0\x86\xa8\xa0\xbe\x01\x5f\x73\x60\x87\x0c\x70\xf1\x85\x25\x8a\x94\x63\x51\x2b\x77\x27\x38\xe3\xd7\x05\x4b\xfc\x69\xf0\x67\xfa\x14\xeb\xeb\xdb\x46\x0e\x3e\x90\x53\x62\x47\x72\x78\x79\x21\xa4\x60\x8d\x5e\xb7\x5a\x97\xeb\x93\x25\xf4\x34\xfe\x69\x49\xec\x42\xbf\x19\x1b\x21\x1b\x14\x32\xf7\xe9\xcd\x76\x20\xc7\x1b\xac\x76\x0c\x7d\x11\x3c\xc3\xb0\x39\x28\xa0\x2b\x8b\x10\xb6\x90\x97\x11\x84\x28\x1b\xc8\x1e\x9c\xba\x62\x90\xd8\x4b\xe0\x0d\x15\x15\xcd\x96\x06\xb0\xad\x95\xef\x1c\x6c\x56\xd7\x94\x58\x55\x0d\x79\x35\xe8\x5a\xad\x4f\xb1\x76\xf6\x36\x47\x7c\x6d\x59\x8d\x55\x01\x5e\x88\x8d\x5b\x97\xe3\x08\x7a\x0e\xac\x72\x69\xee\x13\x83\x74\x10\x9e\xa9\x85\xb0\x11\x64\xa0\xeb\x43\x47\x94\x66\x85\xaa\x0b\x73\x68\x49\x12\x99\x17\x19\xd3\x31\xef\x85\x88\xde\xed\x62\x94\xe6\x03\x76\x77\x3c\xa9\xb6\x4e\xcb\xf5\x0a\x7f\x6d\x1f\x2d\xbb\xdb\x9c\x3f\xad\x99\xa8\x0c\x15\xbe\x8e\x2a\xc7\xaf\x68\xf9\x1b\x1f\xc9\xd5\xef\x86\x75\x19\x31\x03\x37\xee\x2e\xe5\x62\x4c\x5c\x65\xe9\xd4\x06\xa6\xa6\x41\xaa\xde\xea\xd0\x92\x3d\xe3\x74\x56\xcb\x2a\xcb\x97\x59\xe7\xd1\x2c\x74\xca\x5d\xf1\xfe\x46\xb5\x10\x92\x14\xd7\x45\xe3\xc5\x9c\xfc\xc2\x02\xb4\xb4\x3d\x45\x29\x29\x38\xc3\xc0\x7b\x2f\x0e\x01\xc0\x18\x4d\xed\x4d\xc3\xf0\x4a\xe6\x83\xcb\xad\xbd\x1b\x06\xa8\xc5\x25\xe8\x01\x45\x31\xca\x9d\xfc\xd7\xf5\xbb\xb7\x27\xdf\x4a\x9b\x40\x69\xdb\xcc\x00\x26\xe7\x10\x0f\xef\xba\xa9\xa4\x4c\x19\xf4\xbc\x06\xe3\x79\x4e\x05\x1f\x31\xa5\x07\xbe\x2e\x8a\xfa\xf0\xf5\xa7\x41\x98\x57\xd0\x73\x85\xf0\xbd\x50\x61\x51\x03\x48\xb9\x59\x4c\x5d\x52\xd4\x37\xb0\x2d\xa4\xeb\x3a\x73\x0b\x93\xd5\xf4\xc6\xd0\x6f\x9c\x6c\x65\x74\x99\x1b\xf6\x82\x1c\xa0\x6a\xe2\x3f\xfd\x4f\x23\x86\xff\xeb\x80\x1c\xdd\x42\xc8\xf3\x81\xf9\xf3\x00\x3f\xe8\x65\xc0\xb0\xf1\x52\xfd\x61\x0c\x94\x2e\xf9\x78\xcc\x4a\xeb\x3b\x02\xb3\x2a\xf4\x97\xe1\xd0\x32\xb6\x7e\x58\xd8\xfe\x7b\x75\x9d\xd1\xf9\x89\x7c\xf8\xfa\xd3\x01\x39\x8a\xd7\x45\xb8\x48\xd9\x67\xf2\xb5\x77\x3f\x14\x32\x3d\xb6\x51\x59\x6a\x26\x34\xfd\x6c\xc6\x4c\x26\x52\x31\x81\x21\xdf\x5a\x62\xcb\x1f\x25\xc1\xb3\x95\x65\x7d\x94\x12\x52\x72\x8b\xa9\xd2\x0e\x94\x98\x7a\x0c\x65\x9a\x62\x09\x19\xdb\x2d\xc3\xd7\xcc\xb6\x8d\xc1\xb4\x62\xa4\x2f\xec\x09\x84\x59\x11\x61\x65\x28\x55\xe1\x26\x19\xd2\x37\xa1\x02\xdc\x2c\xb6\x95\x90\x91\xa7\x06\xab\x7c\x92\x1b\x31\x7e\x9d\x49\x6b\x89\xd8\xda\xa4\x25\xf5\x3d\x09\x85\x8d\x97\xb8\xce\x60\xf6\xa0\x5d\xb7\xf7\x5a\xd1\xda\xe8\xa3\xc5\x65\x61\xc8\xd1\x3d\xac\x0d\x7a\x13\x9f\xec\xbc\x34\x27\x52\x6f\xc3\x09\x0e\xaf\xf1\xc0\x27\xf3\x6f\x9b\xe3\x82\x11\x87\x56\x69\x0d\x28\x5c\x4e\x53\x24\x81\x54\xcc\xee\x1c\x8d\x0d\x00\xc1\x6b\x9b\xcc\xfa\xd6\x2e\xd7\xa7\x22\x35\xff\x57\x5c\x69\x73\x7f\x67\x88\xad\x31\x84\xc6\x50\xfa\xfe\xe2\xfc\x7e\x90\xbb\xe2\x3b\x9e\xd6\x61\x25\xd2\x8c\xbd\x96\xf2\x66\x45\xfa\x73\xb4\xa0\xbf\x85\x4f\x7b\xef\x1c\x6a\x69\x5c\xf4\x7d\x0c\x6d\xa0\xe5\x92\xa2\xca\x90\xbc\x56\xa2\xa0\xc9\x0d\x1d\x33\xfb\x51\x60\x23\xb6\xa8\x01\x6a\xca\xa0\x0a\xb4\x5a\x4b\x6f\xe5\xec\xd1\x1a\x60\xe7\xb9\x62\x9a\x8e\x2f\xda\x52\x0b\xd4\xcd\x7b\xf3\x7c\x5b\xf1\x2b\x47\x12\xee\x15\x1b\xad\x7c\xd0\xb7\x06\x58\x95\x7f\xd2\x87\x36\x70\x2b\x7f\x74\xc5\x9f\x97\x3e\xb0\xd9\x87\x38\x3f\xcf\xa6\xd1\x4d\x73\xaf\xb9\x1d\x71\x04\xc3\x42\x39\x7a\x0c\xee\xd8\x5d\x80\xce\x7d\xb7\x54\x01\x05\xca\xa6\x36\x32\xe7\x5e\xca\x40\x6d\x16\x9b\x97\xac\x77\x07\xe1\x39\x9c\xf8\x46\xbf\xdd\x46\x41\x7a\xc9\x9c\x3a\x71\xba\x13\xa7\x1f\xb9\x38\xbd\xd5\x19\xd8\x1c\x7a\xf0\x34\x04\xec\xad\x16\xbd\x39\xda\xfe\x51\x8a\xdc\x5b\xaf\xb1\x41\xf0\xff\xa3\x15\xc2\xb7\x5a\x6c\x43\x81\x7c\xd9\x92\xbf\x64\xb1\x7c\x2b\x18\x6e\x8c\x87\x79\x84\x82\x7a\xe3\x05\xae\x4f\x0a\x59\xb2\xbe\x20\x1f\x63\xce\x0e\x6c\x26\x8d\xed\xec\xbd\x9d\x36\x14\x93\x37\x89\x53\xad\x54\xbd\x6d\x2d\xfa\xae\x51\xd8\xdc\xca\x52\xcc\x78\x35\x8d\x99\xdb\x26\x5b\x04\xaf\x35\x71\xe6\x75\x5c\xf1\xde\x69\x23\x78\x6d\x91\x59\xd5\x34\x11\xa3\x5e\x76\x93\x44\x92\x2d\x96\x6c\x64\xf8\xa2\x94\xc3\xa6\xb5\x72\xee\x60\x55\x0d\xa3\x0c\xf7\x0c\x67\x87\xec\x7c\xbf\xbf\xad\x2d\x76\x53\x12\xc7\x92\xb9\x63\x1d\xbf\x28\x92\xcc\xef\xc7\xa1\x82\x4d\xbe\x8b\x99\xee\x1c\x7c\x19\x88\xd5\x38\xc9\x9e\xf3\x60\xbe\x2f\x2b\xd6\x23\xaf\x68\xa6\x58\x8f\x7c\x2f\x6e\x84\xbc\x6d\x6f\xbe\xeb\x2b\x32\x2c\x99\xed\x7b\x5b\x7b\xa1\x41\xae\x50\xe3\xa9\xd4\xda\x7d\x43\x62\x7f\xe1\x5f\x70\x16\x1a\xab\xa1\xf7\x2b\xc1\x7f\xae\x62\x45\xc5\x3b\x99\x8e\xe6\x55\x98\xb3\xeb\x1f\x00\x39\x50\xdd\x56\x51\x21\x5f\xf3\xa3\x5a\x1d\x56\xdd\x24\x0f\x6a\xad\xa2\x1a\x27\x86\x1b\x45\x3f\x56\xb5\x32\x5b\x92\x71\xde\x2c\x53\x54\x59\x36\x20\x17\xfa\x50\x99\x39\xf0\x84\x66\xd9\xcc\x68\x2d\x73\x1d\xd2\xf6\xcb\xe0\x6a\xc0\x20\x16\x0e\x1b\x56\x5c\xe1\x53\x16\xbc\xee\x00\x8d\x06\x27\x96\xda\x75\xec\x57\x26\x72\x4d\x2f\xb0\x25\x53\xbb\xb2\x8f\x3b\x44\x09\xf7\xbf\x86\xaa\x1d\x14\x75\x4d\x40\x1a\xc1\xc8\x48\x56\x22\x25\x54\xc3\xf6\xec\x38\xe7\xd8\x87\x7b\x7f\x0e\xff\xf5\xf2\x53\x3b\xc6\xc6\xc0\x03\x5f\xe7\xf1\xad\x11\xbe\x6a\x22\xc7\x3e\xb3\xa4\x0a\x62\xbc\xc2\x18\x8e\xdd\x6c\x8d\xed\xe6\xbe\x3e\x48\x62\xea\xfd\xe6\x94\xb6\x9d\x3a\xe9\x31\xa0\x79\x54\x77\x33\x51\xa1\x85\xd8\xf3\x26\x85\x9d\x9a\x57\x26\x5a\x86\xf6\xc0\x15\x6d\x2f\x70\xa6\x82\x15\x2e\xe0\xb7\xa1\x27\x14\x2a\xb0\x18\x26\x63\x3b\x41\x40\x9d\xaa\x89\xdc\x99\x32\x36\xcd\x4f\x7c\xe3\xe4\x37\xf3\x41\x90\xed\xfa\x0b\xb2\x9d\xe5\x7f\xb5\x6c\x07\x0d\x8b\xea\x50\x1a\x60\x92\x39\x9d\x41\x68\x5a\x5e\xc8\x52\x53\x74\x70\x54\x22\x65\xa5\xd2\x14\x6b\x94\xb8\xbc\xbc\xc2\xac\x79\x42\x15\xe1\x5a\x91\xc4\x26\x19\xe2\x86\xdd\x51\x26\x63\x00\xec\x4b\xf3\x82\x17\x11\xa2\x8f\x23\x5f\x8d\x36\x66\xed\x2e\xac\x9f\x58\x46\xd7\x04\x56\xed\x4b\x67\xaf\x35\x2b\xe6\xe9\x6a\xb0\x08\x01\xe2\xf8\x94\xa7\x18\x8c\xc4\x0a\xc2\x45\x3b\x44\x75\xb3\x03\x07\x1d\x13\xab\x8f\x55\xdf\x5b\x69\x56\x3e\xb0\x46\xa3\xdd\x4c\xd4\x65\x81\x91\xf2\x9b\xce\xfe\xaa\xd8\x3c\xbc\xfc\x2a\xf6\x24\x97\xab\x23\xe5\xf0\x5a\xd8\x55\x97\x7d\xb1\x66\x77\x83\x58\x5d\x88\x06\xd5\xa5\x95\xa4\x66\x8d\xf6\x98\xdc\x77\x95\x9b\x0d\xa9\x7f\x1b\x0b\xb1\xf4\x83\xc0\xc1\x86\x8f\x81\x61\x72\xed\xb3\x9b\xf2\x08\xef\xbb\xae\xce\x9e\x15\x53\xea\xcb\xb9\x90\x5a\x19\x6c\xb3\x95\xbd\xe1\x40\xf5\xd6\xb4\x3c\x5c\x03\xfb\x78\xc3\x31\x1b\x25\x00\xb6\x9f\xf6\xc6\x8a\x38\xed\x77\x19\x4f\x2a\x68\xa9\x79\x52\x65\xb4\xac\xcf\x3e\x10\xf9\x85\xbc\xa5\xad\xe7\xac\x34\x2d\x75\xa3\x22\x0b\xd7\xee\x49\x5f\x73\x11\x0a\x2e\x4c\x98\xf0\xce\x3f\x4c\x03\x23\x43\x36\x36\xcc\xb3\x28\xb2\x99\xcb\x31\xa8\x23\xd8\x33\xae\x74\xdd\xf0\x10\x64\x81\xa6\xa1\x10\x5b\x97\x6b\xf8\x55\xe7\xd1\xc9\x2c\x4f\xa4\x18\xf1\xf1\xfd\x65\xd1\xbd\x7b\xfd\xe6\x0c\x3e\x09\xf7\xea\x1c\x3a\x7f\x7f\x21\x83\xae\x9e\x24\xdc\xae\x93\xe4\xfc\x0f\x75\x8a\x9c\xad\xe7\xb0\x24\x3f\xce\x65\x5f\xb9\xfd\xdc\x31\xef\xca\x4f\xd3\x45\x65\x78\x56\xac\x0a\x29\x14\x37\x32\x31\xd4\xcf\x82\x87\xb0\xe3\xcb\xbb\xd7\x6f\xda\x4d\xba\xea\x32\xac\xba\x0c\xab\x2e\xc3\x6a\xd3\x81\x6a\x90\x61\xe5\x4f\x33\xe4\x57\xb9\xb0\x3d\xf3\x7f\x9b\x26\x54\x1f\x77\x5f\xd3\xba\xe9\xc7\xd7\xcb\x87\x23\x46\x0d\x68\x36\x47\x16\xbe\xb2\x0f\xd6\x9d\x87\xa2\x3c\x5d\x4b\x66\x40\x17\x7f\xf7\xfa\x8d\x1f\xf7\x0e\x72\x22\x52\xae\xcc\x67\xce\x64\xc1\x59\x7a\x76\xfd\x43\xb3\xc6\xd4\xe7\xf3\x6f\x45\x39\x1d\xf8\xa3\x99\xf9\xa1\x22\x07\xf8\x10\x39\xbb\xfe\xe1\xc0\x2d\x04\x36\xa2\x6e\x5e\xe6\xb3\xda\x08\xd5\xa1\x40\x80\xf4\xbf\x47\x30\x0a\x89\xc6\xb7\xd3\xa8\xb9\x93\x14\xb6\xd3\xce\x84\x2a\x32\x64\x4c\x04\x83\xa2\x0a\xfc\xce\x3e\x0d\xa5\x40\x6d\x9c\x12\x54\xf0\xc6\x8e\x01\x75\x54\xc3\x80\xfc\x68\x44\x9b\x92\x31\x61\x96\x91\xf6\x60\x0b\xb0\x42\x2e\x03\xde\x8b\x2e\xbd\x60\x61\xea\x00\x56\x04\x65\x7c\x56\x4c\x72\x7d\xc6\xc8\x3a\x9d\xd4\xc6\x67\x22\x91\xb8\x9e\x89\xe4\xc2\xd0\xd8\x15\xa9\x73\x0b\x3b\x75\xb9\xea\xed\x68\xc7\x80\x5f\xe0\x39\x99\x89\x04\xa9\xb8\x79\xc6\xac\xca\x7e\xbf\x04\x99\xaa\xb4\x8d\x19\xec\xb0\xc1\x3d\x52\xb0\x92\xcb\xd4\x7a\x21\x92\x09\x4b\x6e\xe6\xf4\xd7\x28\xb6\x51\xfd\x1f\x1b\x4b\x17\x15\x6e\xc7\x31\x48\x05\xfd\x11\xd2\xaa\xee\xd8\x91\x53\x4d\x8e\xa0\x5e\xd3\xc1\x1f\x9f\xe5\x07\xc7\x18\x19\x87\xe1\x5f\xb4\xa4\x39\xd3\xac\xec\x61\xb4\xd7\x44\x56\xa5\x22\x47\x07\x93\x83\xe3\x1e\xc9\xb9\xa8\x34\x33\x7f\xe6\xe6\x4f\xc3\x8e\x14\xd6\x38\x27\x47\x07\xea\xe0\xd8\x59\xaf\x7c\x08\x9a\xdd\x7d\xe8\x59\xe1\xee\xf5\xc2\xb9\xd9\xa6\xbc\x9e\xf1\x21\xe5\xaf\x43\xd8\x6c\xe8\x1d\xbc\x11\x02\x69\xe7\x94\x21\xf0\x1e\x19\xae\xfa\x82\xfc\xcf\xd1\x87\x67\xfd\x3f\x7f\xfa\xdd\xd1\xc7\x01\xfe\xe7\xf8\x9b\x23\xf5\x4b\xfe\xcb\xe4\xf8\xf8\x77\xbf\x8d\x89\xe4\xe6\xac\xb9\x9a\x4c\xae\xac\x3e\x74\x87\xa4\xf2\x3e\x9c\x12\x07\xb5\x2b\xc2\xd3\x59\xe7\xa3\x06\x0a\x24\x18\xa1\x66\xe7\xb4\xf7\xb8\x06\x3a\x58\xdd\x49\xe2\xf4\xf2\xc2\xd7\x20\x1e\x90\x7e\xbf\x6f\x83\x0d\x75\x59\x25\x1a\xeb\x8a\x69\xec\xfc\x65\x46\x4d\x79\x09\xa2\x8e\x62\x60\x46\x74\x0d\x0e\x2d\x69\xc3\x08\x41\x88\xe6\x1d\x58\xd3\x67\x0d\x8a\x01\x89\x03\x3e\x3f\x0a\x80\x04\x79\x25\xa5\xdd\x24\xfc\xe6\x3f\xc9\xc9\x09\xb9\x9a\xf3\xae\x0c\x0d\x9e\xd9\xb6\x3e\xa0\x3c\x8e\xa4\x3c\x8c\xed\xac\x6c\x60\x5e\xfc\x4e\xc8\x5b\xb1\xec\xeb\xf0\x2d\x5a\xb2\x17\xe4\xe3\xc1\xe9\x94\xf2\xcc\xd0\xbf\x8f\x07\x3d\xf2\xf1\xe0\xd2\xc6\xba\x73\x31\xfe\x68\x7b\x65\x7c\x3c\x38\x67\xd0\xb4\x3e\xfd\x78\x60\x86\xfd\x1d\x74\x3c\x7c\xc3\xca\x31\xfb\x8e\xcd\xfe\x13\x06\xf3\xb7\xaf\xb1\x3b\xe2\xec\x3f\xb1\x39\xa2\xb9\x6f\xb8\xdd\xfb\x59\xc1\xfe\x33\xa7\x85\xbf\xf1\x86\x16\xfe\xe5\x20\x8c\xe7\xc3\x27\x23\x26\x4c\x9f\x0f\xea\x1d\xfd\xe9\xef\x4a\x8a\x17\x1f\x0f\x82\xfa\xaf\x32\x37\x98\x51\xe8\xd9\xc7\x03\x12\x7d\xf5\xc5\xc7\x03\xf8\xae\xbb\xef\x26\xf9\xe2\xe3\x81\xf9\x92\xb9\x5d\x4a\x2d\x87\xd5\xe8\xc5\xc7\x83\xe1\x4c\x33\xd5\x7b\xde\x2b\x59\xd1\x33\x5c\xe1\x3f\xeb\x2f\x7c\x3c\xf8\xc9\xec\xc9\xc9\x09\x36\x78\xc1\xcd\x54\xe4\x5f\xcb\xbb\xb2\xb4\x60\x53\x5d\x74\x54\xad\x7c\x74\x53\x71\x35\x74\xba\xec\x62\x7a\xdd\xb3\xa3\xfb\xce\x85\x66\x17\x5f\xac\x5b\xbd\xee\x17\x4e\x64\xcf\x2f\xea\x36\xc3\xc0\x96\x01\x7e\x0b\x34\x5e\xd4\xa3\x62\x00\x6f\x3a\x20\xd8\x4e\x14\x13\x58\x0d\x83\x80\xf0\x0b\x60\x0e\xc2\xb2\xac\x45\xeb\x88\xa1\x1d\x78\xe6\xed\x30\xa0\x36\x24\x09\x2b\xb4\x39\x5d\xf7\x54\x10\x77\xbb\xb2\xb2\xf9\x82\x6b\x68\xf7\xb0\x1f\x04\xb5\xe5\xb2\xd4\xb5\xc2\xc6\x65\xed\xb9\xf8\x9c\x7e\x7e\x0d\x7d\xc9\x5e\x90\xdf\x7f\xfd\xa7\x3f\xfe\xc7\x2a\xbf\xc0\x10\xad\x41\xdf\xae\xcd\x7b\x5f\x02\x86\xc5\x17\xe7\x6d\xf3\x03\xa7\xbc\x0c\xea\xa4\xfa\xba\xfb\x70\x1c\xf3\xa5\x98\x26\x43\x70\x7f\x56\x85\x81\xcb\x2b\x97\xea\x2c\x12\x8c\x47\x5d\x3a\x18\xf7\x04\x3c\x9b\x91\xe7\x5f\x63\x43\x2d\xf8\xf4\x02\xf9\xfe\xf0\xf9\xd3\x60\xc9\x94\xb9\x22\x7f\xee\xcd\xcd\xc7\x08\xcc\x15\x30\x3d\x83\x38\x18\xe9\x50\x32\xe4\x84\xce\x26\xb7\xc8\x09\x99\x9f\xef\xa6\x8d\xdb\xa2\x3f\xcc\x1f\xff\xb0\x7a\x7f\xb9\xe0\x79\x95\xbf\x20\xcf\x56\x7a\x59\xb6\x70\x4a\x5b\xa7\xb3\x17\x04\x28\xf6\x40\xa0\x39\x14\x84\x08\xe2\x8e\x42\xd4\xd6\xdb\x45\x8e\x91\xcb\x52\xa6\x55\x62\x74\x79\x39\x72\x32\x61\x12\x12\x28\x68\x4c\x64\x4e\x83\x15\xb9\xd9\x67\x03\x74\x56\x77\xa8\x12\x29\x74\x70\xe2\x62\xac\xea\x2a\xa0\x40\x40\x90\xeb\xde\x4e\x18\xb0\x1e\x1d\xf6\xb0\x85\x59\x29\x9e\x42\xce\x05\x25\xe3\x8a\x96\x54\x68\x86\x9d\x3e\xb0\x8f\xad\x15\x53\x3d\xc9\xa3\x41\x61\x55\x7b\x1a\xf1\xa8\x22\xb1\x32\x53\xb4\xa6\x04\xec\x7f\xdc\xda\x51\x7d\xfe\xec\xeb\xb5\x5b\xee\x9f\x5b\xed\xa1\xf1\xe2\xf0\x87\xd3\xfe\xff\x47\xfb\xff\xf8\x74\x64\xff\xf3\xac\xff\xe7\xff\xed\xbd\xf8\xf4\x55\xf0\xe7\xa7\xe3\x6f\x7e\xdb\x86\xbd\x5e\xb5\x1a\x99\xd7\x08\x68\x9b\x3b\x0e\x1d\x98\xaf\xae\x6b\x09\xd7\x27\x07\x30\xa5\xf5\xcf\xd8\xe9\xae\x53\x50\x9a\x01\x49\xcf\x07\x04\x1a\xdd\xbb\xc6\x33\xa0\x78\x46\x2c\x1d\x58\x09\x77\x90\xc8\xfc\x24\x30\x4f\x19\xd1\xfa\x0d\x15\x33\x52\x93\x35\x14\x4a\xe7\x31\x5d\x41\x96\x22\x4d\x4a\xa9\x54\xe4\x62\xb8\x61\xc4\x4b\xae\x48\x2c\x87\x2c\xa1\x20\x8b\x97\x43\xae\x4b\x5a\xce\x02\xd5\xc3\x75\x48\xa8\x14\x1b\x55\x19\x39\x52\x8c\x91\x81\x90\x29\x5b\xa4\xae\xc7\x48\x43\xe9\x90\x67\x5c\xcf\x50\x69\x4e\xa4\x18\x65\xdc\xaa\x00\x2e\xfc\xc1\xb5\x8d\x1e\xb3\xcf\x84\x6b\xec\xaa\x86\x21\x67\x47\xa9\x50\xcf\x9f\x7f\xfd\xfb\xeb\x6a\x98\xca\x9c\x72\xf1\x2a\xd7\x27\xc7\xdf\x1c\xfd\x5c\xd1\x0c\x74\xc7\xb7\x34\x67\xaf\x72\xbd\x57\xa4\x61\xcc\x16\x9f\xff\xb1\xc1\x29\x3a\xfa\x80\x67\xe5\xd3\xd1\x87\xbe\xfd\xdf\x57\xee\xd6\xf1\x37\x46\xd7\x5c\xf7\xfb\xf1\x57\x66\x0d\xc1\x09\xfc\xf4\xa1\x5f\x1f\xbf\xc1\xa7\xaf\x8e\xbf\x09\x7e\x3b\xfe\x6d\xe7\xa1\xa9\x5d\x2e\x81\xee\x75\x6f\x9e\x1a\x3b\x86\x57\xa4\xe6\x3d\x36\xf3\xbf\x2f\x7a\x6e\x16\x26\x8f\x1e\x9c\x25\x15\x10\x93\xe8\x23\x81\x8f\x67\x7e\x88\x86\xe5\x10\xdb\x72\xf7\xcc\xaf\x11\x25\x5d\xc4\x0d\xaf\xe9\x03\xad\x37\xc4\xe7\xa7\x85\xe7\x7f\xb2\xd9\x45\x81\x09\x0d\x2c\xe1\xb3\x38\x3a\x4a\x82\xe5\x30\xae\x37\xe4\x93\x4d\x97\xd8\x05\x3b\x1f\x52\xe7\x43\xea\x7c\x48\x8f\xc3\x87\x34\x7f\xe4\xc1\x97\x04\xfd\x78\x55\xe0\x89\xa0\x69\xce\xc5\x8a\xe3\xbf\xfe\xdc\x5b\xea\xd0\x23\x85\x34\xb2\x0c\x07\xab\xb9\x9c\xb2\xb2\xe4\x10\x33\x89\xef\x94\xac\xee\x60\x19\xe6\x2f\xb4\x64\x84\x4d\x59\x91\xc9\x59\xbe\xaa\xee\xfd\xdd\x84\xa3\xdb\x45\xb6\x1c\x01\xdf\x19\x7e\x3b\xc3\xef\x17\x64\xf8\xed\xac\xb9\x9d\x35\xb7\xb3\xe6\x2e\xb9\x3a\x6b\x6e\x67\xcd\xed\xac\xb9\x9d\x35\x77\xe1\xea\xac\xb9\xf6\x99\xce\x9a\xdb\x59\x73\xef\xdb\x9a\x5b\x5f\x2a\xaa\x08\x7d\x4f\x6a\x65\x93\x68\xa7\x05\x85\xde\xf6\xe6\xb5\x2a\x7d\xac\x99\x2f\x51\xe7\xb9\x56\x2e\x53\x15\x34\xf7\x41\xd8\xc3\xaf\x61\x31\xf0\x76\xb4\xf6\x2e\x74\xaa\xd3\xa0\x3b\x0d\xba\x0b\x9d\x8a\xaf\x4e\xd9\xf6\x57\xa7\x6c\x77\xca\x76\xa7\x6c\x77\xca\x76\xa7\x6c\xcf\x5f\x9d\xb2\x8d\x57\xa7\x6c\x77\xca\xf6\x92\xeb\x69\x28\xdb\xeb\x42\xa7\x46\x06\x65\xdd\xcd\x4d\xb1\x53\x24\x0c\xaa\xf9\xba\x0b\xaa\xe9\x82\x6a\xba\xa0\x9a\x2e\xa8\xc6\x5d\xf7\x1d\x54\x13\x5b\xe0\x30\xf2\x25\xb2\xb8\x01\xce\x16\xa5\x9c\xf2\x94\xa9\xb9\x10\x1c\x5f\xac\x31\xe0\x32\x39\xb4\x77\xac\xc3\x6a\xd8\xfd\x04\xd5\x74\xe6\xb9\xce\x3c\xd7\x99\xe7\x3a\xf3\x5c\x7c\x75\xe6\x39\x7f\x75\xe6\xb9\xce\x3c\xd7\x99\xe7\x3a\xf3\x5c\x67\x9e\x9b\xbf\x3a\xf3\x1c\x5e\x9d\x79\xae\x33\xcf\x2d\xb9\x9e\x86\x79\x2e\xc4\xa0\x2e\xbd\xa2\xd3\x3e\x3b\xed\xf3\xf1\x69\x9f\x9d\x4a\xd9\xa9\x94\x9d\x4a\xb9\xe4\xea\x54\xca\x4e\xa5\xec\x54\xca\x4e\xa5\x5c\xb8\x3a\x95\xd2\x3e\xd3\xa9\x94\x9d\x4a\xd9\xa5\x57\x6c\x99\x5e\xf1\xee\xf5\x9b\x20\x9e\x03\xe3\x3c\x02\xcc\x82\xee\xec\x50\xb5\xd9\xf1\xe4\xce\x17\xdb\x69\xc3\x9d\x36\xdc\xf9\x62\xed\xd5\x29\xce\x9d\xe2\xdc\x29\xce\x9d\xe2\x1c\x6d\x5c\xa7\x38\x77\x8a\x73\xbc\x95\x9d\xe2\xbc\x3d\xd0\x3a\xc5\xb9\x53\x9c\x97\x6c\xc5\x97\xa1\x38\x77\x55\x66\xb5\x2c\xa1\x7a\xec\xfd\x57\x98\xfd\xd6\xf7\x87\x5d\xac\x2e\x0b\xbf\xad\xac\x2c\x8b\x13\x86\x9f\x96\x55\x95\x95\x88\x95\x8b\xe5\x64\x5d\x47\xda\x07\x28\x25\x8b\x5d\xa5\xac\xe2\x50\x09\x0e\x62\x4f\x5e\x65\x9a\x6b\x26\xa8\x48\x66\xc0\x66\xdf\xbd\x7e\x43\x72\x2a\xe8\x38\x68\x0c\xa5\x06\xe4\x42\x03\xbd\xd1\xa5\xef\x04\x66\x9b\x57\xf9\x04\x90\xb0\x57\x16\x54\xa2\xf0\xed\xaa\x40\xe1\x08\xda\x0f\x19\x01\xd0\xb0\x0f\x68\x6d\x15\x76\xb5\xfa\xcd\xfc\x01\xef\x52\x62\xba\x94\x98\x2e\x25\xe6\x91\xa4\xc4\x00\xfd\x58\xd9\xaf\x30\x22\x32\x3b\x34\xe2\xb2\x3d\xcb\x16\xe5\xab\xaa\x00\xdb\x9a\xb7\x60\x91\x73\x7c\x72\x0b\x13\xab\x62\x19\x4b\xb4\x2c\x97\x09\x6f\x71\x1b\x61\xfb\xa0\x7d\x03\x97\x19\x2d\xed\x50\xad\xa7\x5b\x0d\x56\xba\x69\xb6\x04\x44\x17\x9d\x4c\x5e\x7e\x2e\xc0\xd2\xb8\xc2\x34\xbc\x30\xfb\xf9\x97\xf0\x44\xb9\x8e\x8d\x19\x1d\xb2\xcc\x83\xc2\x51\xd2\x1c\x8f\x0c\x4a\x6a\xf5\x1d\x10\x30\x4f\xdf\x9e\x2f\x5a\xb9\xe3\x05\xae\x32\x4c\x93\xf5\xc6\xe9\x85\xa9\x9f\xae\x99\x9e\x25\x0c\xee\x17\xb0\x2a\x78\xe5\x15\x89\x5e\x8f\x50\x72\xc3\x66\x48\x1f\xa3\x2c\x2d\xf3\x70\xc9\x80\x9a\xc2\x66\xde\xb0\x19\x3c\x64\x89\xe5\x06\x01\xb3\x95\x26\xf4\x37\x6c\x15\x84\xf0\x77\x37\xd9\xd5\x02\x6a\xa3\x76\xef\x37\x6c\xb6\xee\xe7\x39\x80\x1b\x38\x78\x1b\xa2\x81\xbc\xb9\xe1\x0d\x36\x1e\xd8\xb4\x28\x32\x68\x7c\x28\x57\x83\x8a\x34\x6f\x63\xee\x96\xba\xc5\x44\xfd\x56\x06\x16\x27\xd8\xec\x43\x85\x1b\x6b\x30\x7d\xc2\x0b\x2b\x64\xa0\x68\xe1\x58\xe1\x0f\x34\xe3\x81\x18\x03\x58\x7d\x21\x7a\xe4\xad\xd4\xe6\x9f\x97\x9f\xb9\x21\xf5\x06\x1f\xce\x25\x53\x6f\xa5\x86\x3b\xad\x2c\x15\xa7\xb0\xc5\x42\xad\x66\xc7\x03\x4f\x89\x1c\x45\xfc\xd0\x88\x61\xa3\x28\x1d\xd0\x3c\x7d\x21\x8c\x3a\x69\x57\x14\x19\x43\xcc\x10\x79\xa5\x80\x81\x09\x29\xfa\x68\xbf\x58\x36\x86\x05\x84\x2c\x23\x38\xac\x19\xce\x0e\x05\x76\x12\xfc\x05\x25\xa0\xcc\x88\xb2\x24\xc5\xf6\xd3\xc0\xcd\x0d\xd1\xe6\x09\x41\x6f\x07\xf8\x1c\x9a\x80\x77\x1d\x5d\xc1\x6b\x03\x75\x69\xb8\x57\x40\x32\x5f\x9b\x03\xb0\x05\x89\xc5\xe7\x91\x2c\xe5\xb4\x30\xdb\xf4\x4f\x43\x7d\x00\x52\xff\x22\x05\xe5\x46\x62\x3e\x05\xe9\x3f\x63\xd1\x6f\xb6\xeb\x66\x38\x8c\x19\x81\x2b\x62\x48\xc9\x94\x66\x86\xde\x81\x7d\x9e\xb0\x0c\xa9\x9f\x11\xd2\xe7\x08\x7b\x8f\xdc\x4e\xa4\x42\x62\x86\x56\x2a\xae\xc8\xc1\x0d\x9b\x1d\xf4\x16\xb6\xf6\xe0\x42\x58\x37\xd5\xc2\x66\x7a\x22\x0a\x3d\x49\x0f\xe0\xb7\x83\xdd\x79\xc1\x5a\x62\x49\x53\x34\x1f\xd0\xec\xb2\x01\x35\x5b\xbb\x6f\xb1\x7f\xd9\x68\x50\x0d\xf8\xfa\xfc\x2b\x8e\xf8\x61\x6a\x6e\xa8\x9b\xc0\x93\x84\xe2\xa3\xd6\x0f\x0c\x9d\x75\xd1\x3c\x62\x9b\xd1\x16\x99\x9c\x79\x38\x1f\xa9\x63\xdc\x59\x23\x8f\x3a\xd8\x83\xa6\xb7\x5a\x34\x58\xb5\x38\xa3\x3e\x24\x97\x98\x41\x9c\x9e\x5e\x5e\x6c\x6e\xd4\x7c\x0d\xaf\x10\xcd\xb2\x0c\xbd\xd8\x46\x66\xd5\xd2\xca\xac\x4b\x45\x98\x22\x18\x3f\x50\xf2\x57\x4e\x76\x55\xef\x5f\x14\x85\xbc\x12\xbb\x79\xae\xef\xe7\x5e\xb0\xe4\x8e\x7d\x2e\x32\x9e\x70\xed\xe8\x77\x2d\x5b\x81\x3e\x04\x2f\x01\xe1\xe2\x20\x0d\x28\xa6\x7b\xb5\xac\xc6\x15\xe1\x63\x21\xcb\xe5\xf8\x79\x37\x11\xec\x84\x7c\xee\xdf\x54\x43\x56\x0a\xa6\x99\xea\x1b\x19\xab\x6f\x5f\x60\x8b\x47\x60\x5e\x84\xdd\x04\xa5\x83\xef\xe3\x17\x22\x05\xd4\x0e\xe6\x68\xeb\x6c\xa1\x51\x35\x3c\xe5\x21\x08\xe7\xb9\x64\x68\x31\xf4\x0e\x14\x7d\x2b\x89\xaa\x0a\x9b\x64\x3e\x37\xa4\x39\x9a\xe4\xa3\x70\x82\xf6\x8b\xba\xb9\x34\x10\x0a\x88\x97\x70\xb9\xed\xf6\x64\x59\x4d\x19\xb6\x2b\x97\x53\xe6\xd4\x58\x64\x09\x86\x19\x14\x13\xaa\x58\xad\x83\xa9\x2a\x49\x18\x4b\x59\x8a\x3f\x58\x56\xc2\x46\x23\x96\x68\x3e\x65\xd9\x0c\x8c\xff\x0a\x45\x12\xff\x7d\x83\xd9\xf8\xf9\x7a\xc1\x73\x5f\x14\xec\xb3\x76\x4a\x3a\xe1\xa0\x84\xc7\x96\x8a\xd2\x2f\x77\x42\x15\x19\x51\x9e\x19\xbd\xee\xa3\x20\xef\x59\x32\xb9\x2c\xd9\x94\xb3\xdb\xef\x85\xa2\x23\xf6\x8a\xf2\xec\x95\x2c\x6f\x69\x99\x06\x30\xb8\x8b\xe5\x9b\x59\xf9\xdf\x70\x4a\x0e\x2e\xa7\x9e\x70\x66\xb3\xa0\xcd\xb7\xf5\x8c\x99\xf5\xde\xba\x05\x5e\x66\x06\x62\xe0\x70\xa5\x46\xa1\xf5\x18\x45\x4a\x36\x62\x25\x13\xe6\x3c\x51\x37\x7e\xf0\x92\x67\x0f\x09\xb6\xbf\xae\x3b\x94\x5b\xbd\x17\x1d\x63\x14\x3e\xe6\xa0\xe7\xdc\x40\xcc\x88\x0a\xd0\x0e\x04\xcf\x6e\x60\x34\xfa\x28\xc8\x8f\xa7\x57\x6f\x2f\xde\x7e\xfb\x02\xb8\xca\x3a\x08\x2f\xe2\x35\x57\xa4\x82\xa7\x02\xab\x87\xaa\x32\x6d\x50\xbc\x12\xde\x5f\x34\x64\x13\x3a\xe5\xe6\x0c\x94\xd6\x1e\x32\x65\xd8\x96\xde\xa8\xc1\x24\x93\xca\x8c\x93\x31\xa5\xc8\x4c\x56\x18\xc7\x93\x32\x56\xa0\x8b\x5b\x69\x2a\xa0\x99\x89\xf5\x67\xcc\x2f\x82\x0c\x99\xf9\xd5\x59\xc4\x16\x4e\xd7\x32\x7f\xc2\x06\xca\xe1\x34\xdd\x15\x8a\x2c\x59\xeb\xf0\xe8\xaf\x79\xcb\xfc\xba\x0e\xc4\xb1\xda\xdf\x3c\x60\x0a\x15\xff\x75\x1d\xb8\xc3\x07\xaf\xb6\xd7\xfd\x57\xeb\x51\x18\xf8\xf1\x3d\x62\xe1\x16\x1a\xff\xfa\xa0\xaa\x68\x95\x41\x70\xcd\x9c\xec\xbd\x8c\x73\x06\x41\x42\x6d\x32\x9b\x2e\x5a\xab\x8b\xd6\xea\xa2\xb5\x96\xfd\xde\x45\x6b\x75\xd1\x5a\x5d\xb4\x56\x17\xad\xd5\x45\x6b\x75\xd1\x5a\x5d\xb4\x16\xe9\xa2\xb5\xea\x67\xba\x68\xad\x2e\x5a\xeb\xe1\xd2\x9c\x02\xc5\x74\xa3\x8e\xf9\xba\x7e\x16\xa5\x13\xed\xe2\xa1\xdc\xc9\x8c\x45\xc3\x79\xad\xd3\x9e\x62\xc3\x8f\xed\x30\x5b\x1b\x96\x9b\x08\x5d\xa2\xb9\x21\x37\x36\xe1\x06\x96\x93\x05\xef\xb8\xe7\x40\xd1\xa2\x1e\xab\xa9\x36\x76\x2e\x5c\xb1\xd1\x96\xbe\x85\x2b\x36\x0a\xad\x6d\x08\x98\xd8\xa5\x60\x23\x56\xbc\xcf\xe1\x0e\xc2\x07\x56\xc7\x38\x2d\x5d\x82\x11\xf6\x9d\xc9\xd4\xe2\xa3\x5d\xc3\x4a\x5f\xe8\xc6\x23\x0d\xfc\xf8\x92\xea\x49\xa3\x19\x1c\x5e\x58\xb0\x81\xe3\x10\x5c\xb9\x05\x67\x09\x8b\xc2\xa8\x40\x8e\x63\x34\xb5\x37\x8d\xe0\x53\x32\xfb\x5b\x0f\x25\x0e\xeb\x2e\xad\xc3\xac\x8c\xd0\x44\xa8\x21\xc4\x3c\x25\xff\x75\xfd\xee\xed\xc9\xb7\xd2\xca\x0a\x46\x9b\x51\xb6\x61\x52\xce\x84\xee\x11\x55\x25\x13\x42\x95\x99\x9a\xd1\x6f\xaf\xc1\xf4\x90\x53\xc1\x47\x4c\xe9\x81\x1d\x8d\x95\xea\xc3\xd7\x9f\x06\xb1\xc5\x83\x5b\x9f\xaa\x0b\x46\xb2\x08\x00\x67\xc3\x2c\xc6\xbf\x0b\x42\x2b\x4c\xa9\x90\xa9\x9d\xf4\x2d\x4c\x56\xd3\x1b\x46\xa4\x9d\x6c\xc5\x80\x29\xbc\x20\x07\x06\x4d\x82\x4f\xff\xd3\x1c\xac\x7f\x1d\x90\xa3\x5b\xb0\xea\x1f\x98\x3f\x0f\xf0\x83\x3e\x76\xcc\xdc\x0b\x38\xbe\xfd\x30\xca\xf7\x25\x1f\x8f\x41\xdc\x02\xd3\xed\x94\x09\x7d\x0c\xfc\x6d\x44\x84\x0c\x1e\x16\xd6\x45\x56\x3b\xc6\xe6\x27\xf2\xe1\xeb\x4f\x07\xe4\x28\x5e\x97\x11\x41\xd9\x67\xf2\xb5\x77\x86\x15\x32\x3d\x76\x5a\xeb\x4c\x68\xfa\x19\x14\x83\x89\x54\x4c\xa0\x2f\x41\x4b\x34\xc8\x2a\x69\x94\x4f\x96\x65\x7d\x14\x30\x53\x72\x8b\x36\x38\x07\x4a\xf4\x27\x17\xb4\xd4\x73\x91\x75\xef\xdf\x9d\xbf\x7b\x81\x5f\x33\xdb\x36\x16\x4e\xcb\x1d\x71\x41\x33\x6b\xd9\xf6\xf2\xa1\x99\x48\x85\x9b\xa4\xa5\x55\x6d\x9d\x51\x77\x54\xe9\xaa\x64\x83\xf9\x48\xab\xc6\x18\xbf\x2c\xcc\x6d\x39\xb2\x43\xb8\xdb\xfc\x41\x7b\xc0\x60\xb2\xc6\x4b\x14\x2b\x9c\xad\x8b\x4b\x7c\x1b\xe0\xe0\xda\x25\xd6\xa4\xd9\xac\x32\x95\x89\x32\x0b\x4c\x58\xa1\xd5\x89\x9c\x1a\xd2\xc9\x6e\x4f\x6e\x65\x79\xc3\xc5\xb8\x6f\x90\xac\x8f\x3b\xaf\x4e\x80\xc5\x9c\xfc\x1b\xfc\xb3\xd7\x8a\x80\x4f\x35\x5f\x16\xc6\xb4\xde\xc3\xda\x80\x7d\x9e\xec\xbc\x34\x27\x5f\x6e\xc3\x09\x0e\xaf\x9d\xf2\x37\xf7\xb6\x39\x2e\xe8\x0b\xb7\xc1\xae\x01\x85\xcb\x69\x8a\x24\x90\x8a\xd9\x9d\xa3\xb1\x01\x20\xe8\xf8\xc9\xac\x6f\xa3\xd1\xfb\x54\xa4\x7d\x2f\x5f\x27\xb3\x9d\x21\x56\xf1\x86\x07\xf8\xfb\x8b\xf3\xfb\x41\xee\x8a\x6f\x75\x5a\xdb\xca\x25\x20\x51\xfc\x39\xcd\x8a\x09\x6d\xab\xf7\x42\x17\x85\x0e\x57\x17\x85\xde\x45\xa1\x77\x51\xe8\xf5\xf5\x48\xa2\xd0\xbb\x28\xf2\x2e\x8a\xbc\x8b\x22\x5f\xfd\x73\x17\x45\xde\x45\x91\x77\x51\xe4\xf3\x57\x17\x45\xde\x45\x91\x77\x51\xe4\x5d\x14\xf9\x92\xab\x8d\x82\x75\x4f\x30\xfe\xb2\x73\x8e\x3d\x0d\xe7\x58\xe7\xee\xea\xdc\x5d\x9d\xbb\xab\x73\x77\xed\x80\xf1\x9d\xbb\xab\x73\x77\x75\xee\xae\xce\xdd\xf5\x48\xdd\x5d\x5b\x75\x19\x7f\xd2\xb5\xb3\xee\xbf\x6c\x16\xdc\x5a\xac\x98\xb5\xb2\x58\x96\xad\x93\xb5\x50\x0c\xab\xae\x83\x75\x86\xe9\x94\x77\x5f\x04\x2b\x36\x00\xba\x06\xcd\x5b\x34\x65\xef\x1c\x7a\x9d\x43\xaf\x73\xe8\x6d\x3a\x25\x5b\x38\xf4\xc0\x97\x17\x1e\x05\xab\x8e\xd4\x29\x1c\xef\x96\xbb\x36\x56\x7f\xba\xb9\x69\xc5\x5a\x55\xc2\xcf\xbb\x5c\x94\xfa\xfb\x81\x85\x05\x4e\x8a\xd9\xd0\x44\xe6\x85\x14\x06\x31\xda\x71\x2e\xd6\xe3\x35\x48\x58\x75\x8f\xda\xfb\x43\x16\x06\x93\x5b\xcf\x56\x5e\x48\xc5\x22\x3b\xee\x0e\x8a\xf7\x7a\xd7\x54\x1f\x9d\x3e\xce\x84\xb6\x83\xe2\x1e\xbd\xdf\x48\x16\x79\x1d\xbe\x61\x5d\x93\xe0\x79\xfa\xb9\x62\x25\xb6\xd1\xaf\x1d\x38\x35\x50\x9c\xc9\x15\x5d\x52\x11\x58\x0e\xd7\x6c\x66\x43\x30\x35\x59\x2a\xd9\xc2\x1f\xbb\xb0\xea\x7b\xf5\xc9\x92\xc6\xfe\x93\x06\xde\x93\xc7\xed\x9f\x25\x4d\x7d\xb4\xa4\xa1\x9f\x96\x34\xf0\xd5\x92\x66\xfe\x5a\xd2\xd8\x67\x4b\x9a\xf8\x6d\xc9\x1d\xfb\x6e\x49\x73\xa7\x26\x69\xec\xc3\x5d\x98\xf4\xa3\xf3\xe3\x6e\xb9\xec\x26\xfe\xdc\x85\x45\x77\x3e\xdd\x39\x50\x6f\xf6\xeb\x92\xa6\xbe\x5d\xd2\x3c\x3d\x69\xa3\x8f\x97\x74\x7e\xde\xed\xf8\xcb\x46\xa2\xbb\x9d\xbf\xb7\xd1\x5e\x96\x6c\xd4\xcc\x49\x7f\xc5\x46\xb8\x98\x40\x9c\xa8\x1d\x1d\x72\xa5\x0c\x51\x4b\x1d\x3d\x4b\x45\x5d\xfd\x9c\x48\x76\xb9\x9f\x88\xa8\x2b\x9e\x4c\xae\x42\xe3\x15\x0d\x6c\x59\x40\x23\xdd\x6c\x7b\x84\x89\x92\x27\x13\x37\x59\x23\xe4\x5a\xcf\xda\xfa\x9a\x27\xe1\xb4\x37\x6c\x68\x33\x76\xb6\xd9\x9b\xb3\x64\xa1\x3b\xf8\x74\xc2\x89\x6f\x24\xde\xeb\x0b\xca\xac\x98\x54\x50\x09\x64\x2e\x03\xdf\xea\xe1\x51\x96\xba\xc7\xa0\x7b\x0c\x6d\x59\x3e\xdd\x7a\xb6\xe1\x64\xa9\x4b\x50\x5d\xac\xd9\x22\xea\xc9\x5b\x87\xec\x9a\x5c\xfb\x70\x19\x0d\xc4\xae\xe6\x82\xd7\xc6\x7a\x20\xe1\x83\x2b\x2b\x83\xd4\x57\x73\xe9\x6b\xbb\x6a\x21\xf5\xb5\xe0\x07\xdf\xa7\x3a\x48\x5b\x9c\xae\xbe\x9a\x96\xe9\x88\xc1\x80\x4e\xf8\x56\x41\x70\x4b\x21\xda\x64\xb8\x10\x83\xf0\x20\x8b\xdc\x58\x95\x64\xc5\xea\x4e\xf7\x2d\x4a\xd2\xf6\xe2\x37\x15\xa2\x58\xb1\x8e\xf7\xdb\x55\x97\x68\x7b\xd6\x9b\xea\x1f\xac\x98\xf5\x75\xab\x95\x10\x76\x9c\xfb\xfa\xa2\x04\x2b\x66\xfe\x7e\xbe\x3c\x41\x8b\xd3\xda\x18\xb7\xb0\x64\x3e\x5d\xf4\x42\x17\xbd\xf0\xc8\xa3\x17\xb6\x3a\x03\xeb\x22\x19\x96\xa1\xff\x63\x8d\x67\xd8\x6a\xd1\xeb\x62\x1b\x96\x2d\xfa\x91\x44\x38\x6c\xbd\xc6\xb5\xd1\x0e\xab\x16\xfa\x48\x62\x1e\xb6\x5a\x6c\xc3\xf8\x87\x65\x4b\xfe\x92\xa3\x20\xb6\x82\xe1\x9a\x88\x88\x65\x70\x7b\x14\x71\x11\x2b\x17\xf8\xab\x6e\x2c\x16\x96\x3f\xbe\xbf\x00\x89\xeb\xe0\xab\x73\x41\x12\xe1\x4f\x0b\x81\x12\xd1\x6c\x31\x58\x62\x49\x53\x31\x55\x0d\xc3\xff\xcf\x47\x55\xa8\xf8\xe3\x4d\x3a\x8c\x85\xf6\x35\x88\x09\x38\x93\x59\x95\x87\x36\x8e\xfe\xa2\xe8\x5f\xd0\xe4\xc6\x68\x2d\xf6\x7b\x43\xf0\xac\x05\xc8\xf9\x77\x25\x05\x48\x94\x64\x00\x62\x88\x81\x60\xf0\x33\xee\xcf\x25\x0e\xf2\x9b\xb5\x18\xbc\xf4\xf3\xae\x46\xb5\xf5\xd6\x3b\x0d\xa4\x16\x7e\x8a\x85\xa1\xe7\x67\x84\xaf\x2e\xcc\xe9\x7a\xfe\x76\xe3\x29\x4d\xa8\x10\x2c\x33\xb4\x00\x3d\xfa\x20\xdd\x79\xf8\xac\x07\x8f\x7d\x79\x61\x36\x67\x0b\xf7\x97\x4c\x27\x4a\xd1\xdf\x37\x46\x26\x44\x51\x72\xc3\x58\xa1\x02\x67\x49\x05\x3e\x15\xc8\x05\x19\xce\x8c\x7a\x97\xdc\x40\xb9\x51\x90\xca\x60\xbd\x67\xb8\x31\x2d\x27\xd0\x03\xb2\x17\x2c\x09\x6e\x75\x21\x38\x5d\x08\x4e\x17\x82\xb3\xe9\x8c\x35\x08\xc1\x09\x0f\x7c\x14\x86\x43\x05\x39\x2d\x8a\x0c\x8c\x52\xae\x34\xac\xad\x39\x68\x0b\x6e\x2c\x58\xe2\x76\x4c\x2f\x9a\x63\x0e\xee\xf6\x02\x85\x8e\x7f\xf0\x4c\x6d\xee\x89\xb5\x11\x36\x48\x4f\x97\xc9\x77\x6b\xa5\xc3\x44\x8a\x11\x1f\x6f\xce\x8b\x09\x60\x79\x06\xaf\xd4\x1e\x33\x1c\xa2\xb2\x95\x6d\x6b\x4e\x05\xe9\x5b\x11\xdf\xbe\x8b\xe4\x98\x11\x48\x60\x2b\xc3\x03\xa2\x55\x5c\x8c\xea\xe9\xf5\x20\x9a\xa6\xe4\xa9\xa5\x8f\x85\x4c\x0f\x15\x50\xb3\xb4\xca\x6c\xa9\x69\x2c\xc5\x62\x8e\xa6\xe0\x99\x59\x49\x9f\x6a\x3c\x0f\x4c\x61\xbe\xe3\x57\x42\xea\xaf\xfc\x48\x68\x78\x29\xf9\x98\x7b\xd2\xe7\x5b\x96\x14\x32\x1d\xf8\x62\x0e\x1a\x5c\x96\xf1\x80\x03\xf2\xbd\xb2\x0e\x66\x47\x1c\x8e\xfe\xf9\xaf\x63\x43\x58\x59\x89\x85\x3a\xed\xc0\xd1\x7b\x1b\xa2\x40\x5a\x8a\xed\x11\x32\x65\xa7\x1b\x40\xbd\x00\xee\x73\x1f\xbf\x65\x5e\xf7\x5b\x15\x02\xb9\xac\xb2\x20\x4d\xcc\xc0\x68\x7f\xb7\x6a\x53\xc7\x46\x81\x56\x3e\x96\x9e\x83\xdb\xfe\xda\xcf\xea\x02\x33\x25\xf1\xf6\xcb\xcf\x2c\xa9\xf4\x46\x95\x73\x89\x11\xd9\x2e\x13\x0c\x52\x59\x66\x3f\x07\xa2\x93\xfd\xc1\xac\x17\x18\xa7\x01\x8f\x0d\x6d\x53\x54\x73\x35\x9a\x61\xde\xad\x03\x18\x0b\x62\xa3\xea\xf3\x65\x04\x95\xa0\x0e\xf1\xb0\xd2\x58\xda\x74\x46\x92\x89\x34\xf8\x45\x11\xee\x30\xee\x94\x4b\x0c\x20\x02\x7b\x70\x49\x72\xc3\x01\xac\x76\x17\x0c\x8f\x1e\xef\xfa\x35\xa3\x0a\x4b\xa5\x6b\x58\xb9\xa0\x1a\x33\x0c\xd8\xd9\xcc\x1f\x63\xa3\xae\x80\xc7\xaf\xca\xcd\xa0\xb7\x8c\x8f\x27\x5a\xf5\x08\x1f\xb0\x01\xec\x2e\xa3\xc9\x24\x18\x36\x67\x4c\x2b\x42\xb3\xcc\x37\x26\x09\x50\x22\x74\xb7\x1f\x79\xa6\x69\x19\x5c\xcf\xd3\xdb\xf9\x5d\x5b\x0a\xae\x1e\x61\x3a\x19\x1c\xf7\xc0\x83\x67\x4e\x0b\x85\x39\x0e\x67\x84\x6b\xa8\xc5\x0d\x0c\xba\x94\xd5\x18\x57\x62\x03\x0d\x94\x97\x8e\xac\x7d\x56\xa4\xa0\x4d\x88\x31\x39\xc0\xc5\x1d\x38\x81\xc7\x0c\x67\x4d\xae\xb0\x3e\x57\x5a\x16\x2d\x9e\x65\xc9\x54\x21\xb1\x07\xcb\x7c\xe4\xc2\xff\xf1\x2f\x1d\xa9\xe3\x1a\x98\x13\x3e\x9e\x38\x58\xd2\x12\x69\x4a\xbc\x07\xcd\x9c\x8f\x4d\xc2\x48\x1a\x06\x91\xc4\x7e\x1e\x57\x2e\xbe\xc6\x89\x60\xf7\x34\x2b\x73\x0f\x03\xd8\x60\xd4\xf5\xad\x51\x36\xb7\x39\xcc\x08\x44\xf2\x8c\x1c\x01\x8a\x70\x7d\xa8\x00\x5d\xfb\xb2\x38\x1e\x90\x53\xd0\x76\x1b\x7c\x40\x48\x3f\xbe\x1d\xc8\x7c\x54\xc9\x7a\xac\x66\x3e\x8b\x66\x9e\xda\x6d\x7c\xb5\x86\x9b\x17\xde\xa4\xd4\xe8\x71\x84\xc9\xc6\x47\xb7\xf1\xdb\x92\x60\x0e\x4d\x9e\x5e\x70\xe9\x01\x4a\xd7\x61\x8b\xac\xcc\x7b\x84\x2a\x25\x13\x5e\x37\x4e\x5a\xc4\x74\x5c\x49\x13\x3f\xce\x96\xf0\x27\x5b\xaf\x9f\x6c\x19\x98\x1a\x5f\xf3\xf1\x9d\x36\x24\x35\x86\x4a\x44\xb0\x86\x33\xf8\x15\x1c\x85\x43\x96\x6d\x88\xce\x0c\xaf\x6d\x82\xbf\xdc\xd5\x38\x08\x6c\xc5\x82\x56\x2e\xe4\xc1\xe2\x55\x97\xc1\x64\x0b\xe4\xc0\x6b\x9b\x63\x5a\x5f\x4d\x22\x5b\xe7\xdf\x68\x14\xe7\x1a\x5f\xdb\xe3\x2f\x5e\x8d\x62\x60\xe3\x6b\x41\x24\x69\x2b\x14\x36\xbe\xb6\x0c\x49\xa8\xaf\xe6\x61\xb2\x6b\xd6\x75\x75\x57\xb1\xb2\xbd\x38\x50\x96\x7c\xab\x11\xd7\x5f\x37\xa4\x6c\x2d\x00\xa8\x69\x40\xed\x1a\xf0\x9c\x3e\x99\xa0\xda\x25\x43\x7d\xab\xcd\x30\xaf\x57\xbe\x0c\x0e\x5b\xea\x82\x4b\xad\xf0\xd6\x9b\x2b\x48\x03\xb6\xa8\xa2\x64\x86\x61\x61\xef\x2f\xdb\x09\xe5\xce\xe2\x78\x97\xed\xfe\x76\x84\x1d\xaf\xad\xc9\x7b\xf8\xc1\xad\xd0\x0d\x58\xe4\x2b\x68\x9c\x75\x3f\xdc\x11\x9b\x74\x75\xdc\xb1\xe3\x8e\xf1\xd5\x71\x47\x7f\x75\xdc\x71\xc3\xd5\x71\xc7\x8e\x3b\xde\x39\x77\x44\x5d\x76\x07\xe5\xf9\x47\x34\x71\xcc\x6b\xcb\xc0\x69\x9d\x5f\x28\x56\x9b\x0d\xbf\x71\x09\x14\xef\x41\xd5\xb6\xb6\xe3\x12\x62\xc3\x9e\xf7\x9f\x3f\x7b\xb6\x8d\x52\xbd\xa9\xe1\x5b\x78\x05\xcd\xdf\x7e\xff\xf5\xda\x37\x56\xd9\xdf\x5a\xb0\x9a\x5a\x1c\xf7\x86\xbc\x48\x76\x58\x61\xf8\x04\xea\x24\xa4\x26\x39\xd3\x84\xea\xc8\x54\xc4\x73\xd6\x73\x86\xe5\xba\xc5\xf6\xb0\x36\xcd\xa6\x44\x0a\x17\xa9\x28\x53\x36\xd8\x6d\x06\x09\xa3\x0a\xf2\x4d\x86\xcc\xcf\x42\xe6\xe6\xab\x5c\x68\x77\x5c\xcc\x14\x98\x83\x0a\x39\x62\x83\xf1\x80\xa4\x15\xb3\x09\x4e\xe8\xa7\xb3\xed\xac\xd4\x4c\x69\x96\x83\x25\x57\x96\xbe\xe9\x9b\x2e\x21\x46\x11\x02\x25\x2b\x9a\x65\x33\xc2\xa6\xdc\x66\xfb\x9a\xc1\xc1\x4d\x08\x35\xe1\xcd\x4a\x1a\x99\x08\x5b\xcf\x4f\x98\xc7\xe0\x4d\xa9\x0a\xdb\x70\xfb\x85\xb1\xb7\x8e\x34\xbe\xb2\x2b\x19\xac\x14\x56\xb5\x19\x17\x6d\xe0\xf0\x5f\x40\xae\x77\x57\x9b\x4d\xae\x64\x6b\x4a\xb6\x05\xf5\x9a\x17\x4b\xab\x2c\x33\x88\x81\x56\xd8\xc5\x05\x2c\xb1\x8e\x2e\x49\x64\x43\xc3\x7b\x1e\x24\xb4\x61\x13\x73\x59\xc8\x4c\x8e\x67\x21\xa4\xb1\x83\x1c\xcf\x0b\x67\x1c\x47\xaf\x1e\xf3\x0d\x9a\xdf\xce\x6d\x4d\x67\xf9\xeb\x2c\x7f\x9d\x6e\xb3\x70\x75\xba\x8d\xbf\x3a\xdd\x66\xc3\xd5\xe9\x36\x9d\x6e\xd3\x59\xfe\x48\xc7\x1d\xd7\xc0\xa4\xe3\x8e\xa4\xe3\x8e\x2b\xd7\xd5\x71\xc7\xb5\xe0\xe9\xb8\x63\xc7\x1d\x97\x5d\x85\x4c\xf7\x08\x74\x2c\x64\xba\x26\xce\x11\xad\x3e\x89\xec\x67\x32\xc1\xb6\x13\x98\x98\xea\xec\x7c\x8a\xe6\x68\x88\xea\x91\x7f\x48\xc1\x30\x78\xcd\xec\x0d\x98\x93\xa0\x0e\x82\x79\xfc\x48\x1d\xaf\x0d\x6c\xea\xe2\x24\xbb\x38\xc9\x47\x1f\x27\x39\xa1\x0a\xf7\x15\x89\xd2\xea\xb0\xc9\xe0\x40\xbe\x67\x65\xfe\x44\xa3\x26\x0d\xba\xd8\xed\x86\x14\x9b\x7a\x4b\x71\xe5\xa9\xf5\x17\xb0\xf4\x32\x5e\xaf\x95\x97\xb1\x56\x53\x9a\xb2\x94\x14\xac\xec\x23\x8a\x48\x32\xe2\xb6\x98\xd5\x1c\xf6\x59\xf8\x3c\x68\xf4\x63\xbc\x8e\x07\x0c\x81\x8c\x27\xb2\x83\xcd\x35\x34\x1c\x47\x14\xfe\x51\x04\x44\x6e\x2b\xd5\xf7\x89\xb6\x46\xde\xef\x1a\xca\xf5\xdb\x8b\xe6\x8d\x4a\x9f\x2e\x5e\x4b\xeb\x69\xae\xad\x7d\xda\xf3\x05\x1e\x12\xaa\x90\x53\x6c\xab\x5a\x6e\xa9\x46\xed\xa6\xa7\xec\x6e\x89\x26\x0f\x5e\x2e\x75\xf1\xda\x55\x74\xdb\x49\x70\x7b\xfc\x45\x56\x57\x01\x68\x6b\x05\x9d\xec\xac\xa4\x93\x9d\x14\x75\xb2\xab\xb2\x4e\xf6\x50\xd8\xc9\x6e\x4a\x3b\xb9\x87\x12\xaf\x8b\xd7\xce\x2a\x2a\xd9\x43\x8f\x27\x4f\xa2\x30\xec\xe2\xb5\x17\xb0\x76\xd3\xe9\x49\x57\x4e\x76\x8b\x6b\x77\x95\x9b\xec\xae\x76\x93\xdd\x31\xa3\x61\x59\xda\xc5\xab\x2b\x54\xbb\x17\x67\xdf\x81\x71\x6d\x5f\xcc\x76\xd5\xc7\xb7\xc2\x12\x5f\x67\xa8\x7d\x61\x53\xd7\x9d\x0d\xc3\x5e\x9b\x8e\xc1\x40\xa8\x45\xc0\x5c\x7c\xd4\x08\xe0\x18\xdc\x4f\x9d\xf2\x5b\x89\xa0\x72\x6b\x30\x98\xaf\xa0\x3b\x17\xd2\x64\x37\x5e\x0a\xa6\x40\xb0\x63\xde\x44\x14\x36\x57\x34\xcf\x0e\x30\x1c\xa4\xe6\x76\x22\x9d\x0f\x10\xa9\xdf\x00\x19\x31\x67\x54\x28\x72\xe0\x6c\x4f\x87\xaa\x7e\xe2\x60\x50\x67\xf7\xf9\x11\x21\x09\x39\xcc\xe8\x5b\xdf\xd4\x7d\xdd\xce\x76\x92\x76\x27\x69\x77\x92\x76\x27\x69\x2f\xbd\x3a\x49\x7b\x8b\xab\x93\xb4\x3b\x49\x7b\xdd\x87\x3b\x49\xbb\x93\xb4\x37\x7f\x7c\x37\x49\x7b\xd7\x38\xa1\x50\xee\xb5\xce\x39\xac\x9c\x05\xad\xf9\x7d\x0c\x91\x2f\x50\x0a\xff\x6b\x57\xde\x0e\x65\xe9\xe5\xd2\x76\x28\x91\x2f\xe8\x16\x83\x0d\xa2\xb5\x17\xbe\x17\xde\x5c\x2f\x75\x3f\xae\x58\xa8\x1d\x70\x23\x70\x28\xec\x88\x1c\xef\x9d\x2b\xdc\x56\x9a\x1b\xb2\xda\x4f\x9e\x92\x23\xe7\x71\x81\x0a\xd1\x42\xea\xf8\x47\xa1\x79\xbf\x7e\xc2\xfb\x60\xc0\xbd\x18\xe5\xdb\x64\x71\x7f\x35\x31\x57\x5b\xb1\xde\x4f\x43\x42\x58\x19\xcd\x81\xbb\x46\x7a\x10\x2d\x51\x56\x42\x98\x51\xa1\x4a\x36\x78\xe3\x90\xe6\x60\x01\x38\xdf\xd9\xdf\x08\x4b\x30\x1f\x90\x98\x6a\x28\x05\xfe\x4e\x6a\xcb\x48\xdb\x50\x7e\x29\xac\x47\xd4\xdc\x71\x5e\x5f\x87\x94\xb0\x22\xee\xbf\x3e\x20\x2f\x01\x0f\xc3\x81\x6d\xc9\x69\x9a\x65\xf2\x76\x1b\x92\x74\x5f\x69\x51\xb7\x5b\xa7\x45\xcd\xf9\xef\xba\xac\xa8\x5f\x49\x56\x14\xfc\x88\x47\xa8\xf5\xf4\x28\xf2\xe3\x84\x01\x16\x95\x0c\x40\x95\x57\x99\xe6\x45\x1d\x2b\xa5\xf0\x53\x19\x4a\x99\x23\x1b\x79\x12\xe3\xa5\xf9\x1a\x4d\x26\xf3\xf8\x09\xe3\x41\x6c\x95\x82\x43\x6b\xa3\x3b\x68\x96\xd9\x9c\x22\x27\x92\x62\x08\x0b\x7f\xe8\xc8\x84\x73\x57\x15\xd1\x69\x33\x40\x64\x8e\x0c\x2d\xcc\x66\xb6\x52\xdd\x1a\x22\x8a\x4a\xd1\x94\x39\xd6\x3b\xe6\x53\x26\x6a\x4a\x7a\xa4\x8e\x8f\x1d\x0f\x6f\x95\xc2\xdf\x09\x85\xfe\x4b\x40\x49\xff\xda\x84\x46\xc3\x82\x3c\x95\xae\xc1\x57\xd3\xe8\x87\x0c\xc1\xd8\xc6\xcf\xbf\x9d\x8d\x61\x07\xff\xfe\x3d\xfa\xf6\x9f\x4e\x66\xd9\x03\x5b\x18\x1f\x22\xb6\xfe\xd1\x5b\x15\xbb\xe0\xfa\xfa\xda\x37\xb8\xfe\xce\x2d\x87\x0f\x1b\x63\xff\x04\xac\x85\x0f\x19\x63\xdf\x59\x08\xd7\x6e\xca\x63\x0b\x7d\x8f\xaf\x9d\x2c\x82\x9d\x35\x70\x67\x2e\xbc\x25\xc3\xd9\xd7\x0a\xb8\x25\x46\xec\xe8\x67\xef\x7c\xec\xf7\xe3\x63\xef\x24\xde\x86\x57\x27\xf1\xae\x04\x4a\x27\xf1\x92\x4e\xe2\xdd\xb4\xbc\x4e\xe2\x5d\x0b\x9e\x4e\xe2\x5d\xbb\x29\x9d\xc4\xdb\x49\xbc\xe4\xa9\x49\xbc\xbb\x54\xe9\xea\x7c\xdd\x7b\xf9\xba\xb7\xa5\x16\x5b\xd1\x88\x2d\xf1\x60\x6b\xdf\x76\xe7\xd7\x7e\x2c\x7e\xed\xc6\x09\xff\x42\xf3\x7d\x93\xfe\xc3\xbd\x5a\x95\xf9\x4f\xa7\x92\xa7\xa4\xa8\xb4\xcd\xa7\xee\xb2\xff\xdb\xc8\xfe\x8f\x20\xdf\x95\x00\x68\x54\x02\x60\x15\xcc\xba\x3a\x00\x5d\x1d\x80\x96\x9d\xd0\x5d\x1d\x80\xae\x0e\x40\x57\x07\xc0\x5d\x5d\x76\x12\xe9\xb2\x93\x1a\x5d\x5d\x76\xd2\xea\xab\xcb\x4e\x7a\xb4\xd6\x57\xd2\x65\x27\x3d\x6e\x4b\x2c\xe9\xb2\x93\x3a\xeb\x6c\xc3\x8d\x7a\x82\xd9\x49\x5d\x1d\x80\xc7\x1a\xa3\x40\x3a\x49\xbb\x93\xb4\x3b\x49\xbb\x93\xb4\xd7\x5f\x9d\xa4\xbd\xc5\xd5\x49\xda\x9d\xa4\xbd\xee\xc3\x9d\xa4\xdd\x49\xda\x9b\x3f\xde\xd5\x01\x78\x42\xb1\x11\xa4\xab\x03\xd0\xc5\x4b\x74\x75\x00\x7e\xbd\x75\x00\x22\xdf\xfd\xc3\x15\x03\xd8\x7e\x1a\x5d\x45\x80\xae\x22\x40\x57\x11\xa0\xab\x08\xe0\xae\xae\x22\x00\x5e\x8f\xc9\xd6\xd8\xe5\x47\xad\x04\x4a\x97\x1f\x45\xba\xfc\xa8\x4d\xcb\x7b\x02\x76\xc3\x2e\x3f\xea\x11\xda\x0a\xbb\xfc\xa8\xce\x2e\x38\xbf\x39\x4f\x24\x3f\xaa\xab\x08\xf0\x18\xbd\xed\x9d\xc4\xdb\xf0\xea\x24\xde\x95\x40\xe9\x24\x5e\xd2\x49\xbc\x9b\x96\xd7\x49\xbc\x6b\xc1\xd3\x49\xbc\x6b\x37\xa5\x93\x78\x3b\x89\x97\x3c\x35\x89\xb7\xab\x08\xd0\x55\x04\xe8\x2a\x02\x3c\x45\x0f\xf7\xc6\x9d\xa6\x42\x48\x8d\x32\xcb\xaa\xbd\x8d\x65\xf9\xfa\x79\xcb\xe3\x2b\xa1\x74\x59\x25\xba\x2a\x59\x0a\xc0\x40\x40\x19\xaa\xad\xb4\x2c\x9d\xa3\x1b\x1c\x85\xe7\xac\xc8\xe4\xcc\x10\xcd\x1e\xb9\x94\x69\x8f\x9c\x5e\x5e\x5c\xb3\x72\xca\x13\xe6\xf6\xec\x9d\x25\xcd\x03\xf2\x7e\x56\xf0\x84\x66\x19\x48\xfe\xf5\x57\x73\x3a\x03\xdf\x21\xd3\xe6\xd4\xb2\xcf\x9a\x95\x82\x66\x44\x4b\x99\x41\xda\x3c\x7c\x14\x0e\x67\xc9\x74\xc9\xd9\x94\x11\x5a\x0e\xb9\x2e\x69\x39\x23\x39\xd3\x34\xa5\x9a\x0e\xc8\xf7\x8a\x85\x64\x41\x4b\x52\x94\xac\x8f\x78\x10\x7d\x0f\xf6\xf1\xdd\xeb\x37\x0e\x7f\x69\x9a\x7a\xc7\xa7\xdd\xc5\xeb\x6a\xe8\x41\x74\x68\x90\xc9\xad\x52\xf5\x60\x63\xad\xea\x52\x70\x85\x6b\x5d\xa9\x9a\x34\xe0\x0a\xdb\xf1\x80\x8d\xfb\xcf\xc4\xb4\xd1\xbe\xbf\x14\xd3\x58\x4f\x65\x62\xca\x4b\x29\x80\x03\x4f\x69\xc9\xe9\x30\x63\x08\x7f\xa6\xdd\x5e\x5a\xfe\xc9\xca\x01\x39\x03\x90\x9a\x8d\x43\x4f\xf6\x4a\xfc\xdd\x4c\xf8\x36\x90\xba\xf9\x69\xff\x40\x63\x51\x5d\x2c\x9d\x3a\xb1\x0f\x98\xa9\x53\x72\xe6\x27\xbe\x01\xb2\x1b\x18\x78\x13\xfd\xb0\x0f\xc4\x69\xe5\x03\xcd\xb4\x38\x33\xc4\x7a\xda\x1c\x81\xe5\x2d\xcd\xeb\x12\x0f\x4b\xa0\x31\x20\x6f\xac\x84\x4c\xc9\xd9\xff\x5e\x9c\xbf\x7c\xfb\xfe\xe2\xd5\xc5\xcb\xab\xf5\x44\xa7\x21\x5b\x01\xfa\xb0\xc5\x64\x0f\x7f\x70\x7b\x04\x69\xfe\x4c\x18\x0e\xfc\xdb\xa3\x1f\x4e\xaf\xfe\xf7\xed\xe9\x9b\x97\xc7\x20\x7e\xb1\xcf\x05\x15\x29\x4b\x49\xa5\x1c\x4b\x28\x4a\x36\xe5\xb2\x52\xd9\xcc\x93\xf7\xe5\x48\x3b\x8f\xad\xd6\xd0\x30\x23\xf6\xb8\x2e\x7f\x0d\x34\x10\x5a\x23\x50\xe2\x31\xbc\x64\x4a\x66\x53\x96\xa2\xac\xe9\x27\xed\xbe\xc3\x45\x51\x69\xa7\x11\x41\x08\x8a\x39\x15\x22\x99\x50\x31\x66\xe9\x80\x9c\xcb\xca\x8c\xf7\xdb\xdf\xc2\xc2\x4a\x96\x56\x09\xca\x3a\xd4\x09\xcc\xbf\xed\x39\x4e\x62\x78\x81\xc2\x32\x1a\x2a\xa1\x85\x5b\x7a\x08\x1d\x35\x13\x9a\x7e\x7e\x81\x31\x18\x07\xbf\x0d\x7e\x3a\x70\x25\x48\xa4\xf9\x04\xf2\x23\x9c\x55\x06\xd5\x2f\x32\x72\x10\x3e\x3d\x20\x2f\xcd\x37\x58\x1a\xee\x03\x86\xd0\xb0\x29\x2b\x41\x9f\xb2\xbb\xd0\x23\x25\x1b\xd3\x32\xcd\x98\x82\xe0\x91\xdb\x09\x83\x72\x2e\x28\x61\x5b\x80\x31\xaf\xad\x09\xa9\x07\xe4\x9c\x8d\x68\x95\x69\xa0\x21\x07\x07\x83\xc3\xd6\x50\xed\x55\x29\x37\x14\x3f\x88\xd0\xed\x1a\x8b\x8a\x8c\x64\xb9\xf2\x78\x1c\x5a\xd3\x54\x44\xd6\x94\x91\x24\xac\xa6\xef\x78\x35\xea\x97\x0d\x56\xd2\x40\x11\x68\x6e\xce\x49\xa4\x18\xf1\xf1\x1b\x5a\x7c\xc7\x66\x57\x6c\xb4\x65\x34\x0c\x0a\x51\xd6\xa6\x01\x02\x8c\x21\x87\x38\xe0\x66\xa1\xe3\x0e\x63\x39\x9a\x18\xcd\xb6\xb3\x79\x35\xb6\x74\x2d\x94\x34\x41\xa1\xcf\x8a\x6f\x2d\x16\x67\xaa\xaf\xcd\x14\x7d\xe9\xe4\x0e\x43\xd2\x6e\xcf\xa9\x1e\x90\x37\x12\x42\xb2\x46\xf2\x05\x99\x68\x5d\xa8\x17\x27\x27\x37\xd5\x90\x95\x82\x69\xa6\x06\x5c\x9e\xa4\x32\x51\x27\x89\x14\x09\x2b\xb4\x3a\x91\x53\x43\xf9\xd8\xed\xc9\xad\x2c\x6f\xb8\x18\xf7\x8d\x08\xd7\xc7\x5d\x55\x27\x20\x4c\x9f\xfc\x1b\x6a\x6c\xef\xdf\x9d\xbf\x7b\x41\x4e\xd3\xd4\x56\x6c\xaa\x14\x1b\x55\x99\xad\xde\x32\x30\x42\xcf\x0f\xac\x34\x4a\x79\x8f\xdc\x70\x91\xf6\x48\xc5\xd3\x6f\xd6\x1f\xee\x1d\x21\x26\x0b\x94\x8b\x76\x80\xda\x35\x28\x0a\xb3\x88\x4e\x79\xa4\x37\x14\x8a\x6b\x05\x7b\xee\x0c\x47\x96\xa1\x6c\xb1\x8c\xa1\x94\x19\xa3\x62\xc3\x1b\x00\xb6\xed\xcf\xec\x61\x7d\x68\x51\x9c\xb5\x08\x50\xc8\xf4\x05\x51\x55\x51\xc8\x52\xab\x5a\xf8\x35\x3b\xd7\x8b\xff\x04\xe5\xa8\x47\x7e\xf2\x37\x41\xc3\x51\x1f\x0e\x0f\xff\xf2\xdd\xcb\xff\xfe\xeb\xe1\xe1\xa7\x9f\xc2\x5f\x03\x01\x39\x7e\xc4\xa8\x5c\x03\xa3\xee\xbc\x85\x6f\xc0\x9f\x96\x8d\x9e\x26\x89\xac\x84\xb6\x3f\x68\xaa\x2b\x35\x98\x48\xa5\x2f\x2e\xfd\x9f\x85\x4c\xe7\xff\x52\x1b\x38\x01\xb9\x5b\xa2\x03\xe0\xbc\xa4\x7a\xd2\x32\xe9\xa9\xcf\xc5\x0e\xe8\x6a\xdf\x0c\x2b\x64\xe5\x14\xfe\xfb\xca\x4d\xd7\x70\xa0\xdb\x92\x6b\xcd\x04\xc8\x1d\x10\x77\x29\x47\x3d\x83\xb9\x35\x9b\x9d\x3e\xdf\xca\x1c\xd1\xf8\x28\x7a\xa8\xed\xb0\x38\x98\xbd\x5d\x99\xd7\xcd\x90\xd0\x2e\xea\xf5\xa7\x97\x17\x64\x8a\xd0\x68\x7d\x21\x2e\x0a\xef\xd5\xde\x67\xd2\x57\x2a\xb3\xcb\xf2\x92\xe6\x0b\xb4\x2c\xfa\x78\x3f\x92\xf1\x9c\x5b\x07\x80\xad\x6a\xa6\xc8\x11\xde\x1c\x24\x45\xd5\xb3\x0f\x0c\x72\x96\xcb\x72\xe6\xff\x64\xc5\x84\xe5\x46\x62\xeb\x1b\xed\x97\x8e\x59\xcf\xbf\x8e\xaf\xf9\xbf\xf0\xc5\xe8\x03\x8b\x6f\xa3\x48\x9d\x54\xa5\x61\x1e\xd9\xcc\x51\x10\x96\x3e\xec\x59\x74\x60\x6a\xf9\x28\xfa\xdd\x78\xbb\x23\xcb\xf5\xda\x22\x32\x6d\xbf\x2a\x90\x21\xa7\x32\xab\x72\xa6\x7a\x9e\x3d\xa1\xb4\x2e\xa6\x46\x9a\x54\x77\xc2\x08\x53\x3e\xe5\x6a\xa7\xf8\x84\x6b\x6f\xa9\x05\x13\x69\xa5\x8d\xa6\x82\xc9\x00\x41\x45\x40\xa9\x40\x07\xf0\x31\xaa\x11\x49\x79\x7e\xd0\xcc\xfb\x4e\xb5\x66\xa5\x78\x41\xfe\xe7\xe8\xe3\xef\x7e\xe9\x1f\x7f\x73\x74\xf4\xe1\x59\xff\xcf\x9f\x7e\x77\xf4\x71\x00\xff\xf9\xea\xf8\x9b\xe3\x5f\xdc\x1f\xbf\x3b\x3e\x3e\x3a\xfa\xf0\xdd\x9b\x6f\xdf\x5f\xbe\xfc\xc4\x8f\x7f\xf9\x20\xaa\xfc\x06\xff\xfa\xe5\xe8\x03\x7b\xf9\xa9\xe1\x20\xc7\xc7\xdf\xfc\xb6\xd1\xf4\xa8\x98\xbd\x6b\x70\xe0\xf1\xea\xef\x90\x61\x51\xbf\xb5\x85\x83\xe6\x73\xbf\x16\xda\xfa\x5c\xe8\xbe\x2c\xfb\xf8\xfa\x0b\xa2\xcb\x6a\xf3\xc1\xa8\x89\xda\x2e\x78\xee\xca\xc1\xbd\xa8\x09\x9a\x27\xcd\xad\x23\xb2\x62\x49\xc9\x74\x5b\x1a\x0c\x8e\xe6\xf8\xc7\x9c\x49\xbe\x53\x6a\x6a\xa5\xc6\xdb\xa5\x01\x5e\x35\xe7\x1d\x95\x32\x1f\x90\xc0\x2c\x34\x05\x4f\xb6\x7d\xee\x86\x6d\xd0\x72\xdd\xd5\x29\x41\x4f\x4b\x09\xba\xc6\xfd\xbd\x73\x0d\x88\x89\xe9\x3a\x33\xcd\xbc\x4d\xf7\x15\xa4\x32\x85\xe6\x68\x27\x40\x69\x49\x0a\x59\x54\x19\xd5\x2b\xcc\x76\x4b\x6c\xd3\x16\xf7\x6b\x2f\x90\xd9\x68\xb0\x03\x5b\x2a\x97\x2f\x37\x86\x92\xd3\x2c\x23\x5c\xe0\x49\x80\x01\x9c\x35\xaf\x64\x28\x2f\x11\x8a\x06\xe7\xa9\x99\xc2\xad\x4d\xb8\x0a\x0c\x8d\x5c\x19\x5d\xa7\xd4\xe0\xf1\x81\x84\x2c\xa4\x59\xd6\x34\xc6\x45\x9d\x96\xe5\xb9\xad\xf7\x52\x2f\xad\xbf\x99\x51\xa5\xdd\xb4\x61\x36\x9a\xde\x80\x29\x34\x61\x29\x13\x09\x83\x10\x94\x8a\xd5\x6b\x1d\x1a\x61\x10\xcc\xfb\x30\x06\x25\x69\x55\x64\x3c\x31\xf0\x33\x33\x59\x3e\xc6\x45\x9e\x57\x1a\x0c\xc5\xf7\x65\xc5\x37\x3b\x7e\xed\xca\xfd\x7a\x63\x3e\x90\x2a\x2f\x5a\xfb\x68\x1b\xaf\xba\xab\xfd\xcc\xf7\xcd\x08\xaf\x37\xb7\x6d\xe4\x54\x0b\x14\xb7\xb6\x31\xc4\x94\xf6\xbe\x2d\x86\xcd\xe8\xec\x17\x49\x63\xb7\xa0\xaf\xcd\x69\xeb\x16\xc6\xa5\x6d\xe9\x69\x53\x6b\x52\x51\xb2\x11\xff\xbc\x05\x3e\x9e\x8a\x5a\x45\xe1\x29\x13\xda\x28\x02\xa5\x75\x8c\x16\x4c\xd4\x5e\x4f\x08\xf0\x13\xf1\x3a\xee\xd4\x63\x84\x52\xc6\xf6\xc7\xeb\x7a\x99\x14\xd3\x9d\xad\x2f\xfc\x6c\xd9\x5d\x6f\xff\x60\x09\x99\x6e\x0c\xfe\x9f\xdb\xc7\xe0\x8d\xb9\x48\x67\x5b\xfe\xdd\x4e\xd2\x68\x6f\xde\xe5\x54\xc8\x14\x6b\x9c\xeb\x3a\x08\x65\x40\xae\x97\xbc\x09\xb1\x26\xf6\x89\xc3\x43\x85\x61\x29\x6a\x7e\xa0\xb9\xec\x76\x8c\x68\xc0\x41\xb7\x44\x29\x64\x75\x55\x09\x96\xdf\x13\xaa\x14\x1f\x8b\x7e\x21\x53\xa8\xcb\x7e\xb2\x0a\x21\xee\x3f\xaa\xc1\x1b\x27\x9a\x6d\xd3\x95\xb7\xbf\x05\xb2\x85\xeb\x08\x50\x06\x3f\x5a\xbb\x8e\xcb\xa3\x08\x64\xc8\x5a\x22\xda\x0f\xa6\x39\x15\x74\xcc\xfa\xf6\xe3\x7d\xff\xf1\xbe\xff\xd6\x3e\x60\x6e\x42\xb5\x92\x8c\xf2\xf5\xa1\x64\x11\xf0\x0e\xce\xe0\x79\x5b\x28\xc0\x47\xe0\xcd\xa5\x31\x3b\x69\x93\x0b\x74\x09\xb8\x9f\xf0\xe5\x1e\xa2\x24\x2d\xad\x1b\x75\x09\x7c\x3f\x0a\x0c\x24\xb3\x71\xc5\x59\x31\xa1\x41\x40\x9f\xdd\x19\x45\x98\xa0\xc3\xcc\x79\xc1\xcf\x67\x82\xe6\x3c\x71\xbb\x7b\x9a\x41\xc0\x17\x97\x82\x8c\x18\xd5\x55\xc9\xc8\x98\x6a\x56\x8f\xed\x23\x45\x79\xbd\x99\x17\x9a\x24\x54\xa0\x99\xd6\x46\x1d\x99\xd3\xe5\x67\xa6\x06\xeb\xec\x5d\xcd\xa2\xf8\x1a\xc4\xee\xcd\x95\xe5\x0f\x80\x17\x3a\xe3\xa5\x30\x4a\x8f\x2e\x81\x3d\x5f\xca\xd4\x50\xc7\x41\xf4\xf4\x86\xa4\x88\xc6\xec\xaf\xa9\x91\x63\x43\x70\x0b\xb9\x6b\x4e\x0a\x8c\x34\x20\x95\x0e\x3f\x0d\x7a\x46\xd0\x2a\x64\x3a\x58\x82\x99\x8e\x09\x5f\xca\xd4\xc6\x0d\xea\x08\x53\x0c\xba\x02\x92\xe4\xf4\xc6\xc5\xfc\x79\xe3\x18\x9d\x52\x9e\x41\xa8\x03\x17\x8a\xa7\x46\x34\x4a\x36\x07\x16\xb9\xab\x21\xf3\x8c\x6c\x82\xe6\x10\xf6\x73\x5a\xf4\x8d\x36\xba\x1e\x54\x1b\x77\x66\x71\x60\x9c\x51\x4e\x8b\x95\x6f\xa1\x3b\xa2\x31\xed\x38\x7c\x8d\xee\x8e\xd4\xb7\x16\xc2\xd8\xef\xcf\x3c\xaf\x72\x42\x73\x59\x61\x78\xf7\x22\x29\x76\x41\x90\xad\x10\xdb\x25\x44\x56\xad\xa4\xb2\xa4\xf9\x31\xd9\x3e\x5c\xfb\x91\x5a\xc5\x1b\x59\xc3\xb7\xb3\x82\x6f\x61\xfd\xde\xd9\xea\xed\x1c\x5c\xcd\xf1\xf1\xca\xf9\xdc\xe6\x30\x92\x8b\x8d\x18\x59\xfa\x5e\x29\x17\x23\xe2\xc7\xe1\x8a\xc8\x9c\x6b\x6d\x9d\x41\x01\x01\xe8\x11\xae\x23\xcf\x89\x3d\x0b\xd0\x2b\x08\xdb\x2b\xb1\xcf\x45\xc6\x13\x0e\x1e\x38\xe7\xf1\xec\xa1\x84\x7e\xcb\xb1\xb2\x10\x15\x84\xe7\x05\x26\x42\x00\x4e\xf7\x1d\xa7\xb5\x01\x4a\x7e\x26\x36\x3c\x8d\x7d\x4e\x18\x4b\xed\xc7\xba\xe3\xd3\x1d\x9f\xe5\xc7\x47\x6d\xa3\xe6\x84\x1a\x4e\x1d\x1c\xef\x35\x1d\x83\xf8\xae\xa7\x19\x04\xff\x23\x0e\x99\xa3\x02\xf9\x59\x46\x5c\xbb\x62\x60\x74\xbc\x66\x5a\xd9\x70\x7b\x78\xc3\x48\x84\x0b\xd9\xcb\xce\xc8\xea\xb3\x38\xe8\x68\x14\x3f\x51\x07\x60\x23\x6f\x8e\xf9\x3f\x68\x45\x2c\x2f\x32\xaa\x99\xd7\x99\xf6\x88\xc8\x6e\x22\xc0\x6c\x93\x3a\xfc\xb0\xc9\xc2\x77\x23\xb2\x3e\xca\x14\xe0\x3b\x90\x76\x37\xbb\xf3\x1a\xa6\xf2\x36\x97\x8a\x1b\xf9\xfb\xee\x3a\x41\x77\x2b\x4b\x4f\xd3\x24\xdc\xc7\x9f\x76\xbb\xc5\xb2\x9b\xa6\xd6\x76\xc9\xb4\xeb\x40\xdd\x2c\x21\xae\x71\x32\x5c\xa3\xfd\x6b\x98\x14\xdb\xa5\xc1\x6e\xc1\x5f\xee\x40\xf8\xdb\xb8\x97\x5a\x66\xac\xdc\x22\xd5\xed\x7d\xfd\xbc\x6f\xad\x89\x91\x23\xc1\x48\xf7\xe3\x00\x7d\xef\xc4\x16\x73\xb6\xea\x79\x01\x6a\x69\x4d\xa1\x8f\xa6\x96\x6e\x5e\x66\xe3\xc4\x8c\x98\x3d\xd3\xb6\xa9\x6a\xd0\x65\x54\x97\xe0\x4f\xfe\x8b\xc7\xb6\x1e\x03\xf9\xe9\xaf\x41\xea\x8c\x4f\xad\xf4\x18\xf2\x17\xf7\xbf\xbf\xee\x99\x12\xd5\x8c\xb1\xe1\x94\xb6\x10\x30\x5e\xc2\x0b\x84\x8b\x14\x7c\xd7\x76\xa9\x00\x01\x1c\xcb\xc0\x07\x96\xe5\x52\x2b\x31\x47\xd7\x5a\xd0\xc1\xc9\x5d\x3f\xac\xac\x37\x3e\x50\xbb\xac\xc5\xa1\x3e\x19\x8c\xbc\x95\xb6\xde\x2d\xeb\x91\x4b\x30\xc3\xd5\x77\xe0\x24\xbd\x95\x58\xf9\x76\xa5\x9b\x3c\x84\xdb\x46\x2e\xb2\x91\xd1\x47\x00\xf9\xae\x66\xf2\xb8\xb2\x88\xc9\xd7\x18\x1c\x25\x59\xaf\x83\xcc\x0d\x9b\xd5\xcc\xc6\x8a\x10\x40\xf2\x7b\x35\x96\x38\x56\x80\xbc\xe3\xff\x38\x2b\x6e\x3e\xe4\x02\x3f\x86\x43\xbb\xad\x80\xd1\x1d\x40\x8d\x64\x97\x65\xf8\x99\x36\xc0\xd5\x4c\xce\x88\x60\xf6\x6e\x0b\x19\xc3\x53\xc9\xe5\xd2\x45\x20\x52\xbc\xfc\xb9\xa2\x59\x9c\xdf\x64\x6f\xd9\x87\x16\xa8\xfa\x2d\xcf\xd2\x84\xfe\xff\xec\x7d\xeb\x73\x1b\x39\x76\xef\xf7\xfc\x15\x28\xed\x07\x49\x29\x92\xb6\xf7\x4e\x66\xb6\x7c\x53\x5b\x25\x4b\xf6\xac\xb2\xb6\x47\xb1\xec\x99\xca\x4d\x52\x59\xb0\x1b\x24\xb1\x6a\x02\x9c\x06\x5a\x32\x93\xca\xff\x7e\x0b\xe7\x1c\xbc\x9a\xa4\xd8\x4d\x51\x0f\xcf\x88\x1f\x66\x2c\xb2\x81\xc6\xf3\xbc\xcf\xef\xd4\x14\x40\x0a\x77\x94\x19\x4d\x46\x72\x20\x04\x05\x57\xe1\xb6\xc7\x3d\xc2\x12\xbb\x6c\xc1\x6b\x2b\x8b\xa6\xe2\x35\x73\x77\x61\xaa\xeb\x4e\x39\x48\x5b\x57\x34\x1e\x9a\x4b\x51\x68\x55\xf6\x51\x00\x3e\xb7\xdb\xb6\xc3\x38\x16\xa2\x96\x84\x24\x2b\xe7\xa2\x7d\x48\x8f\x72\x77\x99\x9e\xf8\x5b\x1d\xae\x58\x66\x18\xc9\xad\xf9\x08\x45\x7d\x9c\x90\xc7\x70\x2b\x46\xec\xcd\xd2\x5b\x61\xc0\x22\x43\x89\x5b\x46\x58\x9f\x63\xe7\x8f\x2c\x2d\x76\xbc\x50\x13\x5d\x43\xde\xdb\x51\xa9\x31\xd9\xeb\x5a\x16\xf6\x78\xc4\xfe\x9f\xa8\x35\x82\x03\x88\x29\x02\x03\xd3\x11\x0f\x8a\x2b\xd4\xc4\x86\xe0\xa0\x97\xec\x08\x41\x9a\xe5\x7c\x2e\x4a\xc9\xad\xa8\x96\xc7\xa8\xc7\x7a\x98\xe7\x2e\x5b\xd7\xc5\x68\x90\x60\x7a\x7f\xff\xdd\x2d\x4f\xf6\x4d\xcf\xfc\xd9\x27\xbc\xc5\x95\xc1\xf0\xa4\xd6\x16\x06\x1e\xa4\x6f\x11\x37\xd3\xf0\xa6\x88\x17\xe0\xc9\x4c\xd8\xe0\xbf\xbb\x73\xc0\x59\x2d\xa6\x70\xca\xf1\xe4\xde\xf1\x8c\x63\xa0\xf6\x07\xdd\xa8\xcd\x16\xc3\x6c\xe2\xef\x49\x09\xff\x39\x69\xb8\x31\x01\xfa\x41\xc4\x84\x64\x24\x89\x05\x93\x33\x30\x5b\x02\x3b\x77\xe4\x01\x9f\x8a\x41\x6e\x1d\x7c\x12\x7b\x4c\x76\x86\xb1\x6c\x49\xa8\xd9\x4b\x4a\x74\x78\x51\x8f\xb3\x0c\xb9\x27\xb4\x30\xad\x94\x60\x4b\xe4\x00\xce\x27\xae\x60\x3c\xa0\xf0\x2e\x51\xfa\x00\x59\x84\xb1\x80\xa6\xec\xf0\xf5\xe1\x5e\x88\x2f\x4e\xa7\xd6\x0b\x3e\xe5\xdb\xa1\xf4\x73\x65\xa4\xd5\x94\x95\xc2\x8a\x7a\x0e\x98\xe7\x33\x7d\x83\xbf\x23\xdb\x5a\xd0\x53\x82\xe0\xe2\xdd\x6c\x67\xda\x00\x57\xca\xf3\xa3\xe1\xfe\x42\xcc\xc5\x0d\x5f\x32\x5e\xeb\x46\x95\x24\x35\x05\x02\xfa\xa1\xf5\xe2\x8f\x5a\x89\xe8\x35\xcb\x7d\xae\x63\x61\xb9\xbb\x36\xaf\x46\xaf\xb6\x94\x35\xe8\xb8\x60\x3d\x53\xe2\x61\x34\x2d\x4b\xa1\x0f\xc3\xf1\x77\x66\x2f\xe3\xaa\x05\x2f\x7f\x52\x55\x1f\x59\xee\x03\x1e\x2f\x68\x3a\x04\x25\x4c\x4e\xc0\x76\x3b\xc0\xaf\x6e\x6a\x69\x45\x42\x1e\x8f\x26\xbc\x32\xc2\xa9\xee\x8d\x0a\x22\xec\x71\x2e\x82\xc0\x23\x5d\x26\xb4\x3d\xd4\xcc\x34\xe3\x3b\xde\x33\xba\x50\x70\xe4\xe2\x35\x0b\x07\xee\xd0\xdc\x72\xe5\xf2\xbc\x71\x76\x84\x4f\x3a\x89\x4d\x6b\x7b\xbc\x9f\xf8\x33\x9c\xa0\xd3\xac\xfb\xa8\x24\x1e\x92\x60\xb1\xc7\xd9\xbe\x11\x33\x7e\x2d\x0c\x33\x72\x2e\x2b\x5e\x57\x90\x86\x7c\x89\xe3\x63\xe3\xc6\xae\x07\xb7\xe8\x07\x9c\x90\x8e\x24\xe9\x6e\xeb\x52\xfb\x71\xb8\x75\x02\x1a\xe1\xc7\x85\xf5\x25\x7c\x51\x8a\xaf\x45\xd5\x18\x79\x7d\xd7\xdb\x44\x89\x55\x3b\xb0\xea\x36\x97\x5e\x50\xa4\xc4\x03\xf2\xe8\x5c\xc3\x70\xa4\xaa\xf4\x9b\x0e\x3c\x19\x95\x7d\xd0\xdc\x21\xee\x84\x17\x85\x30\xc6\x87\x6b\x2f\xd3\x10\xf2\x30\x87\x6f\x05\xab\x84\xdf\x98\xb7\x15\x37\x56\x16\x6f\x2a\x5d\x5c\x5d\x5a\x5d\xf7\x82\x03\x59\xd7\xbe\x85\xf0\x72\xf2\xcb\x25\x3b\x93\xe6\x2a\x49\x54\x22\x9f\x6a\x6a\x2e\xe1\xec\xaa\x19\x8b\x4a\xd8\xc3\x43\x83\x5c\x6e\xce\x8b\x19\xe2\xff\x00\x83\x53\x21\xdb\x8d\x14\x3e\xb7\xca\x7d\x7d\xa6\x94\x53\xf9\x82\xce\xeb\x1f\xf8\x8d\x11\x38\xfc\xb1\x1b\x3e\xc0\x15\x75\x01\xbb\xd8\xab\x9f\x02\x07\x73\x7e\xb6\x27\x1f\xc4\xc4\x7c\x76\x63\xec\x67\xdc\x3e\xc4\x56\x5e\x75\x98\xc8\x4a\x50\x61\x1b\x37\x61\x1f\x79\x43\xb7\x02\xf6\x6f\xa9\x1b\x76\xc3\x51\x47\x06\x8a\x38\x62\x9f\xe5\xe2\x35\x7b\xab\x4c\x53\x8b\x68\xdd\x68\x77\x25\x4d\x4c\x61\xf5\xca\x15\xec\x37\x2a\x20\x8e\xee\x91\xae\xc5\xde\x7e\xe5\xf3\x45\x25\xcc\x6b\x76\x20\xbe\xda\xef\x0e\x06\xec\xe0\xeb\xc4\xb8\xff\x29\x3b\x31\x07\x23\x76\x3e\x0f\x4e\x79\xa9\x26\xa2\xae\x85\x8f\xb1\xc4\x06\x8e\x35\x27\x5c\xf7\x5e\x8e\x0b\xc5\xeb\x3a\xd9\xad\xd4\xec\x06\xa1\x6e\x1c\xc1\x17\x75\xad\xeb\x90\xe2\x92\x2c\x03\xf0\x9a\x42\xcf\x17\xb5\x9e\xcb\xc4\xcc\x07\xc7\x7d\xaf\x81\xbc\x60\x7c\xe8\x52\xeb\xa9\x7d\x1a\x42\x43\x7f\x20\x92\x2f\x54\x97\xa3\x70\x3e\xf1\xb1\x16\xa8\x45\x92\x5a\x0f\xdd\xd1\x43\x6e\xf3\xa9\x17\x47\xc8\xd2\xed\x7e\x17\x72\x75\xd9\x8b\x52\x5c\xbf\x30\x25\x7f\x35\x80\xd7\x18\x8a\x31\xce\xc7\xc4\x0d\x3b\x78\x75\x30\x62\x97\x9e\x11\x0f\xd2\x31\xc6\xe7\x26\xba\x0e\x1d\x82\x9d\xfd\xe5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xc1\xaf\xc9\xb6\x8c\xd7\x6d\x89\xea\xee\x71\xe7\x5c\xeb\xae\x69\xa7\xdd\x8b\x7a\x75\x15\x52\x57\x37\xd1\xb7\xf3\x26\x80\xba\xa1\x34\xa4\x89\xae\x09\x62\x28\x3c\x62\x84\x85\xab\x27\x55\xa6\x42\x3f\x02\x81\x65\x3d\x51\x3a\x3c\xf5\xec\xbb\x3a\xbe\x1d\xe8\x40\x4a\xfe\xda\x08\x76\x7e\x16\xb0\x3a\x44\x6d\xa4\xb1\xee\x1a\x97\x19\xeb\x92\xc8\xcf\x8e\x4e\xe6\xfc\xbf\xb5\x62\x6f\xdf\x5c\xd2\x00\x8e\x1f\x75\xa9\xb6\x52\x03\xfe\xdf\x4d\x2d\x1c\x17\xee\xc1\xdc\x43\x9b\x36\x43\x77\xdf\xb3\x33\x6e\x39\xf2\x75\x0a\xc4\x52\x91\x94\x3b\x96\x3d\x96\xaa\xa4\x9f\x12\x86\xfd\xd0\xbc\xd5\xed\xde\xc7\x6d\x51\xaf\xfe\xc1\x2f\x9f\xce\xf7\xc4\x83\x0b\x20\xe6\xd3\x0f\xba\xec\xcd\x88\x93\xa6\x9e\xf8\xfe\xc5\xad\xe9\x29\x7e\xcf\xe6\xae\x4f\xe6\xb4\xf7\x01\xfb\x24\x78\xc9\xdc\xfd\xa5\x7f\xfe\xe2\x74\xcf\xce\xb4\xaa\x13\x0b\xf1\x0b\xd8\x73\x1a\xbe\x99\x9f\x42\x9a\x44\x53\xba\x93\x03\xd7\x8a\x78\xc9\xb8\xd2\x63\x46\xd7\x61\xdf\x63\xff\xf2\xe9\x7c\x87\xa1\x7f\xf9\x74\xee\x47\xee\xfe\xa9\x27\x0f\x37\xe8\x9d\xc4\xb7\x28\xbd\xbd\x6b\x89\x5b\x91\x25\xc7\x9c\xb0\xb6\x48\xd6\x5d\x1e\x1b\xed\x4b\x12\xdb\xe7\x8a\x5d\x49\xd5\x21\xc1\x3f\xbf\x65\xae\x8d\x53\x28\x30\x56\x2d\xf1\x23\x5e\xce\x38\xa0\x2a\x84\x5c\x5f\xd8\x67\xb7\xf1\xc6\x71\x05\xbf\xe3\x4e\x09\x04\xda\xc6\xce\x04\x7a\x39\xcb\xd7\x3e\x76\x20\xb4\x58\xdf\xe0\x03\x44\x6a\x96\x44\x5f\x19\x06\x6e\x96\xc9\x01\x3b\x42\xab\x92\x0a\x3f\x51\xec\xba\xac\x24\x54\xe9\x70\xda\x7d\x1a\xac\x6a\x60\xc8\x7b\xbd\xf5\x3b\x8a\x1c\x41\x9c\x58\x31\x6e\xb1\x23\xf7\xdb\x0b\x30\x8e\x1d\x8f\x80\x5a\xc1\x83\x10\xc6\xdf\x12\x4a\x3e\x6d\x13\x4a\xf6\x26\x3f\xc0\x0e\xb8\x1b\xd3\x97\x2b\xba\x36\x6b\xb9\x22\xfc\xe0\x51\x74\x9f\x32\x63\xc4\x34\xce\x4e\xac\x11\xce\xd7\xd6\x27\xbb\x33\xc7\xbb\x1e\xae\xf2\xdb\x38\x5c\x2c\x24\xcb\xee\xc0\x3f\x63\x43\xcf\x87\x42\xaa\x8c\x87\x03\xc9\x42\x33\xf1\xf4\x5d\x12\xad\x21\x74\x37\xe4\xba\xee\xcc\x75\x29\xb9\xd9\x07\x0f\xc6\x9f\x88\xbe\xb3\xf2\xed\xfc\xa4\x90\x04\xc2\xd7\xac\xc3\x59\xec\x3c\xc8\x42\x2c\x66\x93\x3e\x2e\x71\xd7\xe0\xdd\x65\x6e\x09\x3c\x15\x8b\x19\x7b\x77\xb9\xe6\x1a\xc3\xda\xc3\xa8\x0d\xda\x07\x0f\x0d\xab\xe4\x44\x58\xb9\x65\x0a\xf7\x70\x91\xe7\x5a\x49\xab\xeb\xcd\xe8\x0a\xac\xd7\xe5\xf4\xdd\xf5\x65\xa8\xbe\x9d\xdb\xd9\x88\x4d\xf4\x21\xf9\x96\xb3\x42\x57\x95\x28\x2c\xa1\xe5\xc1\xf2\x86\x66\x6b\x94\x27\x41\xf6\x80\xd1\xd5\x9f\x40\x7d\x22\x45\xe9\x05\x6e\xee\x8b\x4f\x6f\x4f\xce\x3e\xbc\x1d\xcd\xcb\x3f\xcc\xf4\xcd\xd0\xea\x61\x63\xc4\x50\x76\x00\x3f\x7a\xbc\xe8\x45\xfc\x2c\x3a\x61\xf1\xb5\x0d\x32\x08\x23\xf8\x93\x4f\xcd\x66\x5f\x0c\x46\x2d\x80\xed\xc8\xfb\xa4\xb4\xb6\x03\x56\x73\x4a\xbf\xe6\x64\x7a\x6a\xaa\x0a\x57\xdb\xd6\x42\x0c\x52\x5b\xcc\xad\xa9\x21\xbd\x27\x76\x67\x43\x45\x36\xc1\xfb\x95\x21\x1e\xfe\xc0\xf5\xe1\x18\xdb\x65\x92\xd5\x55\x8c\x2d\xf3\x75\xbc\xcc\xbe\x47\xc3\x99\x9d\xb9\x55\xbd\x12\x4b\x06\x81\xc0\x13\x5d\xbb\xf3\x54\xe7\x67\x43\xd8\x02\xa6\xfe\xa2\x31\xa2\x1e\x11\xdb\x79\xf0\x65\xeb\x01\x50\xb6\x03\x2e\x64\x68\xb8\x6e\xcd\xe8\xeb\x08\x1a\x4e\xf2\x1a\x6f\xec\x4c\x28\x2b\x29\x81\x99\x56\x66\xed\x22\x52\x1c\xf6\x83\xaf\x5a\x47\x7c\xb4\x7e\x68\x66\xcf\x08\x60\x7d\xce\xa4\xbb\x35\x7d\x8f\xa3\x6b\x03\x79\x8a\x29\x99\x0f\xb9\x5c\x35\x2f\x35\x04\x6c\x20\xb8\x65\x76\xd0\x78\x39\x97\xea\x09\xde\xce\x42\xaa\x72\xdb\x3a\xb4\x0c\x60\xd0\x22\x17\xc5\xe8\x3b\x32\xe8\x07\xbf\x21\xf7\x9a\x14\x62\x69\x90\x07\x31\xf7\x1f\x76\xba\x7c\xf3\xa5\xf9\xb5\x1a\xe2\x5b\x86\x8b\x32\xae\xca\xb3\x33\x70\xd5\x83\xb7\x5f\x93\xd2\x03\xb8\xf8\xf6\xb4\xdb\xec\x81\xa5\xa1\xfb\xd5\x73\x1f\x64\xa1\xfa\xc8\x3c\x77\xe5\xde\x91\x66\x2e\xb4\xa4\xf0\xcf\x00\x36\x8a\x77\xd4\xeb\xcb\x6e\x3d\x16\xbc\xe6\x73\x61\x45\x8d\x21\x70\x14\x54\xa7\x28\x3b\xe1\xa7\x85\x50\x97\x96\x17\x57\xfb\x46\x59\x7e\xe6\xb8\xf7\xc7\x71\xef\xec\x0a\xf4\x07\x81\x20\xd7\x96\xa9\x17\x59\x2a\xe2\x42\x4f\x84\xc4\x04\xa4\xc3\x3e\x56\x8e\x80\x74\x97\x73\xd7\x88\x7c\x88\x86\x0d\x88\x74\x0b\xd0\x9d\x10\xc1\x8f\xab\xb0\x1f\x6e\xd8\xfd\x0e\x10\x09\xdc\xc5\x8f\x96\x34\xcd\xa9\xc3\xdc\x7d\x33\x96\x36\xde\x7b\x23\x2c\x5b\x88\x7a\x2e\x29\xad\x5b\x2b\x56\x50\x5a\x00\xf0\x35\xc7\xc3\xa8\xbb\x84\xe7\x29\xa6\x0b\xcb\x29\x67\x86\x8d\x85\xbd\x11\x42\xb1\x97\x2f\x5f\xbe\x04\xb9\xe4\xe5\x0f\x3f\xfc\xc0\x00\x66\xa2\x14\x85\x9c\xaf\x3e\x08\x4f\xfd\xd3\xab\x57\x23\xf6\x6f\x27\x1f\xde\x43\x54\xd9\xc2\x1a\x36\xd6\x76\x46\x3d\xbb\x07\xb2\xc6\x66\xc0\xfe\xe5\xf2\xa7\x8f\x11\x62\x29\xff\x15\x54\x90\x30\xbd\x3c\x44\xf0\xe5\xf7\xdf\x7d\x37\x62\x67\xb2\x86\x7c\x62\x09\x19\x10\x21\x08\x72\xe1\x03\x03\xa1\xa6\x5d\x3b\x83\x9f\x38\x08\x05\x09\xcf\xe5\x74\x06\x0b\xe0\x2e\x84\x56\x93\x4a\x16\x16\xe1\x4a\xf1\xea\xe3\x42\x13\xfc\x0e\xa7\x74\x2f\x92\x22\x60\x70\x03\x56\xc9\x2b\xc1\x26\xe6\xc7\x5a\x37\x8b\x98\xe6\x58\x0b\xe3\x64\xd9\x82\x2b\xc8\x2a\x81\xce\xe2\x5e\x19\x61\x1f\x35\x08\xa3\xa3\x21\x28\x3b\x83\xd0\xa6\x25\xa0\x0c\x02\x6c\xe3\x10\xcf\xc3\x82\xcb\x10\x38\x08\x3e\xf5\xac\x68\x48\xd0\x3d\xcb\x04\xa6\xd2\xe7\xae\x2c\x6a\xfd\x77\xdc\x2a\xa9\x7c\x16\x14\x49\xc8\x86\x64\x32\x4a\x3a\x55\x89\xcd\xd5\x67\xe5\x3b\x5e\x48\x19\xff\x49\xfe\xd4\xf9\x24\x4d\xb4\x83\xb4\x74\xac\xdc\x99\x61\xea\xae\x79\x73\xac\x03\xe1\x4e\x13\x95\xd9\x6b\xd4\x4a\x6b\x2a\xd1\x44\xe4\x87\x0a\x77\x51\x0a\x5b\xec\x03\x43\x71\x29\x01\x28\x29\x07\x97\xe1\x5c\x66\x51\x3e\x46\xd8\x86\x96\x06\x22\xaf\xdc\xbb\x85\x31\x94\x47\x34\xe7\xf5\x95\x53\x12\x88\x0a\x8c\x20\xea\xd9\x84\x1c\x26\x4c\x28\xbb\x46\x63\xf9\x9c\x2f\xb3\xac\x01\xf7\x92\xc3\xd1\xe8\x10\xaf\x89\xae\x11\x26\x18\xcf\xbc\xfb\xfe\x91\xf2\xa5\xf3\xa8\x74\xbe\xc0\x8a\xae\x60\xcf\xa1\x8a\x48\x3c\x8b\x76\xe6\xb4\x52\x5d\xc0\xc1\x7b\x56\xc4\xed\x57\x7a\xbd\x7b\xc9\xf5\x21\x4c\xa0\xc3\xa3\x7d\xcb\xab\xf7\x28\xab\xbe\x09\xad\x81\xd6\x98\x6e\x42\xd7\x62\xc3\xbd\xcb\x0c\xcc\x3b\xb1\xbe\x35\x43\x3d\x9c\x13\xe7\xfb\xa9\x1f\xe7\xa3\x7c\xbd\xac\xee\xe0\xd3\x67\x75\xe7\x13\xcc\x74\xc9\x49\x17\x91\x86\x54\x14\x08\x35\xfe\x62\xda\xcb\x93\xe6\x68\xe9\xb1\xe9\x57\xd3\xa2\x0f\x77\xc3\x4f\x37\xc7\x04\x7e\xb2\xb3\xe6\xbd\x13\x38\x69\x22\xa5\x8b\xac\x76\x50\x85\x76\x03\x90\x31\xfd\xe5\x19\xb1\x0f\x44\x6a\xf1\x90\xf1\xb1\xd1\x55\x63\xb1\x69\xfc\x31\xa5\xc3\xd0\xa9\x47\x59\x00\xe2\x1b\x1e\x4b\xa8\xb2\x8d\xd5\x13\xbb\x11\x68\xfc\xf4\xb8\x9c\xcf\x40\xc2\xf7\x08\x24\x1c\xa0\xaf\x4d\xc7\x52\x70\xe6\xde\x90\xbb\x0b\x23\xfb\xe8\x57\x46\xb2\xa3\x58\x81\xc8\xbb\xe3\xcf\x95\x15\xf5\x84\x17\xe2\x38\xd5\xbb\x42\xa5\xa7\x10\x22\xe4\xf3\x22\x66\x5c\x95\x15\x0a\xe0\x85\xa8\xe1\xec\x87\xd2\xca\xa7\x97\xe7\xac\xac\xe5\xb5\xa8\x0d\x3b\x7a\x23\x9c\xbc\x88\xf8\xa9\x9d\xb2\xab\xf6\x1b\x5b\x09\xc3\xd8\x97\xa6\x07\x9d\xf5\x0d\xd5\x83\x46\x9e\xf2\xa8\xe4\x7e\xc5\x65\xc2\x55\xc5\x25\x35\xa9\x2e\x3b\x72\x47\x09\x08\x34\xd0\x8c\xa5\x6e\x6a\xb2\xa2\x7b\xc8\xe6\x42\xd7\x4e\x5d\xc2\x8e\xb9\x61\xb5\x98\x3a\x69\xb6\xf6\x75\xec\x05\x2b\xaa\xc6\x7d\xb1\xd7\x70\xb6\xbb\x04\x00\x46\xd3\xec\x6d\xb1\x7a\x13\x92\xaa\xf5\xb5\x2c\x3d\xab\xc4\xb2\xfa\xa1\x60\xea\x82\x9b\x24\xd5\x26\x29\x6e\x91\x2c\x2c\xca\xe8\xc0\x50\x43\x12\x6b\x16\xec\x9f\x1a\x85\x35\x60\x5b\x74\xa8\x4c\xd3\x87\x08\xeb\x52\x5c\x34\xe3\x4a\x9a\xd9\xe5\x8e\x26\xc4\x75\x5d\x60\xb0\xc2\x8a\xd7\x6f\xa3\x25\xd1\x08\x65\x24\xb0\x3c\x47\xc6\x1d\xd3\x95\x4e\x8e\xd2\xb0\x88\xbe\x75\x7a\x20\x35\x64\x7f\x54\x82\x10\x0c\xdc\x4f\x1f\xe3\x38\x28\x29\x0d\x31\x4b\x4a\xf1\x45\x2d\xb2\xef\x0b\x5e\x55\xa6\x9d\xb0\xeb\x29\x26\xca\x1e\x3e\x51\x0d\xf7\x54\xba\xed\x0e\x45\x97\x5a\xe0\x98\x1b\x27\x66\xd8\x5c\x63\x1a\x8f\x02\x70\x5e\x7c\x08\xa0\x57\x7c\x83\x24\x91\x11\xd2\x95\xe1\xc8\xec\xb9\x2a\xed\xb3\xb9\xf4\xfe\xcc\xa5\x77\x8d\xc3\x33\xa1\x40\x1d\x4f\xb2\xa1\x33\x58\xd2\x40\x4a\x3d\xc9\xdd\x12\xd4\xb1\x57\xb7\x02\xbe\xf3\xc4\xda\x5a\x8e\x1b\xdb\x1f\xef\xad\xd5\x1c\xd8\xb4\x53\x44\xe0\x16\x0f\x69\xf6\x45\x72\x44\x23\x72\x7a\x4e\x3e\xe3\xdd\x8f\x3c\x07\xd8\x0d\x7e\x79\x68\x58\xa9\x8b\x26\xc0\xc6\xc2\xa2\x45\x07\x5a\x17\xf4\x44\xd6\xf7\x5e\xf5\x87\xf4\x4a\x5f\xb2\xf5\x78\x95\xfa\x46\xdd\xf0\xba\x3c\xb9\xd8\x12\x7d\x9f\xb3\xf3\xd8\x2a\x15\x94\xfc\xd7\x50\x60\x94\x8f\x75\x63\x23\x74\xe8\x6f\xc7\x5e\xbd\x4e\x4d\xb7\xda\x91\x86\x8e\xf6\xe8\xbe\x8a\xfe\xb3\x89\xfb\xd9\xc4\x9d\x7d\x76\x31\x71\x9f\xa3\x89\x3b\xc5\xc1\xcd\xae\xab\x87\x57\x90\x55\xd7\xd8\xde\xfb\xb4\x92\x9e\x45\x02\x83\xd2\x54\x3b\x8e\xbf\x25\xc0\xe1\x15\x89\x7b\x9b\x08\x7d\x9e\x02\x01\xcf\x7e\x7c\x8b\xea\x3d\xd9\x49\xbb\x97\x40\xc7\xcf\xa6\x1a\xa5\xb7\x95\x44\x07\xa9\x21\xa9\x61\x3e\x20\x14\xe8\x01\xe9\x5d\xaa\x8c\xd5\x41\x11\x84\xba\x47\x05\x64\xfc\xf4\x5c\x7c\xd6\x7b\x03\x58\xcf\xfa\xe4\xf8\xe9\xbb\x1b\x6c\x87\x5a\xe5\xf8\x79\xe4\x8a\xe5\xf8\xe9\x6d\xfb\x66\xfd\xab\x97\xaf\x99\xee\xfd\xd6\x30\xdf\x71\x6a\xbb\x9b\xf5\x77\x35\xe7\x0f\x62\xe5\xcc\xa7\xcf\xd6\x9f\xcd\xf9\x2b\x9f\x07\x34\xe7\x27\x84\xdb\x13\x83\x35\xa6\xfd\xd4\xdc\xe6\xed\xfb\x63\xe1\xc5\xca\x51\x44\x5f\x73\x47\xce\x5b\xf6\x63\xb9\x26\x74\xab\x1e\x8e\x46\x87\x87\xde\xde\x4f\xe7\xb3\xb1\x93\xe1\x9f\x98\x50\x85\x2e\x71\x53\x5d\xff\xb5\xb1\xc0\xf4\xa3\x9a\x9e\x8e\x65\xee\xdf\x95\xba\x66\xa1\xef\x7e\x5b\xd2\xe3\x06\x7b\x48\x80\x77\x77\x62\x91\x91\x31\x06\x88\x01\x9a\x60\x40\x15\x22\x0e\x19\xab\x9b\x60\x61\x9f\x50\x6b\x0b\x2a\x8a\x1c\xe1\x97\xa3\x62\xd1\x0c\xe8\x81\xd1\x5c\xcc\x75\xbd\x1c\x84\x87\xdc\x8f\x59\x2b\x7a\x02\xb1\xa7\x8a\xa6\xae\x85\x82\xfa\x26\x4f\x95\xbf\xfa\x25\xb8\x47\xf6\x1a\x56\xbd\x5b\x76\x5b\xfc\xe4\xdb\x1a\x7d\x00\x60\x92\x8a\xd5\xea\x26\x01\xd9\xc4\x0c\xa2\x9f\xc3\x7d\x2b\xd4\x35\xbb\xe6\xb5\xe9\xba\xe6\x6c\x57\x8e\x5a\xca\x6b\x69\xba\x40\xfe\x6f\x98\xdc\x65\x30\xfb\x00\xec\x60\x63\x17\x8d\x25\xea\xe4\xcf\xae\x47\x6a\xca\x8b\xce\x45\xc1\xe1\xd5\x6d\x75\xda\xda\x9f\x27\x5a\x48\x26\xff\x74\x2a\x2b\x93\x7f\xfa\x15\x99\x59\xdf\xb6\xe7\xd6\xdf\xa1\x7e\x53\xfb\xe3\xb7\x76\xf7\x3b\x12\x99\x4c\x04\x06\xf3\x82\xd9\x3d\x5c\x02\x30\x86\x9f\xc9\x5e\xa9\x08\xbe\x4d\x1e\x2e\x69\xc5\x7c\xa1\x6b\x5e\x2f\x59\x49\xb6\x86\xe5\x9a\x8c\xd0\x24\x25\xf4\xce\xd0\x30\x30\x8e\x52\xd6\x7b\xca\x46\xe8\x91\x0d\x2a\x4a\xd9\x6c\xac\x04\xbf\x69\xd9\xb0\x55\xba\x68\x37\x80\x06\x46\x48\x62\xde\xdd\x49\x8f\x79\x60\x45\x5e\x5c\x51\xc5\x20\xbf\xaa\xc8\xfb\x93\x24\x97\x83\x83\x16\x0e\x34\x98\xc7\xc0\xf7\x47\x45\x57\xfd\xc3\xd8\x77\x66\xca\x42\x6f\x08\x85\x05\x1c\xd1\x83\xc7\x4e\x22\xf9\x00\x6c\xf0\x81\x76\x89\xf5\xcc\x6c\x93\xff\x2d\xa0\x40\x58\xef\xd8\x78\xdf\x30\xc0\x41\x6b\x90\xcc\x43\xd9\xb4\x4a\x17\x89\xef\x39\xe3\x50\xb0\x0d\x6f\xfd\xe1\xf7\xb6\x7b\xb7\x19\xae\x57\x94\x2f\xc0\xe8\x53\x19\xf4\xeb\xc9\x02\xa0\x2d\x41\x8a\x87\xc5\x0c\x1b\xf0\x39\x29\x22\xd8\x18\xf7\x26\x40\x9e\x4f\x9e\x89\x2f\xba\xf1\x08\x9b\x36\xa9\xf3\x96\xeb\x1e\xee\x97\xcb\x30\xb3\xa8\xb7\x41\x0a\x84\x17\xd4\x4d\x03\x62\x22\xbd\x85\xc4\x25\x3d\x01\xdf\x55\x2c\x8b\x16\xc0\x1d\x57\x8e\x99\x92\x55\x7e\xce\x3c\x96\x5d\x98\x78\xa3\x28\xd0\xe0\x01\x0f\xcd\x13\xe6\x83\x9d\xb9\x5f\x7f\x9e\xd7\x93\xd3\xdd\x81\xbf\x85\x78\x8c\x1e\x1c\xe2\x20\x06\x71\x64\x2c\x22\x45\xc7\xcb\x03\x3a\xb8\x8f\x19\x08\x37\xcf\x7b\x86\x3e\x07\x0d\x97\x58\x47\xb1\x2c\x28\x67\x57\x66\xa8\x97\xd8\x2d\x1e\x40\x88\x6f\x1d\xba\xff\x78\x4d\xd8\x9b\xf5\xc7\x62\xa2\x63\xa1\x14\x54\x8c\x28\x2a\xb7\x14\x95\xb0\x10\x64\x2b\x02\x60\x29\x7a\x86\xe7\xfa\xda\x9d\xe9\xff\x50\xec\x8b\x87\xee\x97\x93\xd7\x8c\x1f\x67\x99\x10\x54\x7c\x46\x09\x51\x62\xa8\x6e\x15\xdf\x53\x37\xca\x0c\xd8\xf8\xd8\x87\xa5\xc0\xc5\x53\x4e\x3a\xac\xbc\xe0\x8b\xea\x75\x2d\xdc\x02\x40\xf6\x71\xad\xe7\xcc\x28\xbe\x30\x33\x6d\x41\x43\xe4\x0b\x5e\x48\xbb\x64\xb6\xe6\xc5\x15\x54\x2a\xaa\x05\xbd\x6e\xc0\x8a\x63\x8a\xef\x4a\x97\x2f\x8f\x1e\xb6\xb3\x5a\x37\xd3\x19\x04\xc4\xe2\x53\x45\xc5\x8d\x9f\xfd\xda\xf6\xa4\xf4\x18\x56\x62\xa1\xe2\x00\x1e\x58\xeb\x6b\x69\xa4\x26\xa3\xaf\xef\xf7\x22\x00\xc4\xa1\x21\x19\xcb\xff\x1e\x19\x21\xd8\x5b\x7f\x24\xf0\x97\x4b\x14\x6d\xd0\xc0\x51\xe7\x31\x02\x3a\x20\x9b\x2b\xc2\x45\x88\x74\x2e\xf8\xb0\x90\x6f\xba\x91\xaf\x7d\xe9\x71\xd8\xae\xf5\x63\xd2\x35\xf8\xef\x3d\x82\xa7\x50\xa5\x4e\x9c\x97\x27\x17\xe7\x26\x55\x4a\xf0\x6c\x11\xfc\x1d\xfc\x50\x69\x35\x4d\xd1\x04\xe2\xc9\x74\x14\x55\x41\x95\x97\x6b\x59\x36\xbc\x42\x5a\x4a\x83\x39\xbd\x3c\xc7\xe6\x72\x3a\xb3\xc3\x1b\x01\x46\x19\x64\x39\xf1\xce\xf8\x97\xca\x95\xa0\x1d\x69\x80\xf6\x5a\x32\x2a\xa0\x81\xcb\x0d\xed\x86\x2f\x01\xbd\x86\x22\x4d\x32\xbf\xa9\xc7\x17\xc3\x2e\xd6\xad\x38\x0c\xef\x24\x54\xed\x70\xd2\x03\x58\xad\xdc\x12\xc3\x49\x5d\x1d\x9b\x5b\xf8\x04\x0e\x30\x7c\x4d\x05\xda\xb8\xdb\x20\x27\xe3\xdd\xae\xd2\xdc\x83\x6c\x76\x1d\x37\xf9\x33\x55\x50\xec\x29\x23\x1c\xfc\x92\x58\xcf\x12\x7f\x87\xbb\x36\x5c\x95\x43\x5e\xb9\x93\x73\xf1\xf3\x29\x05\x3a\xe3\x45\xc8\xfc\xf9\xbe\x18\x92\x54\x01\x3d\xdb\x89\x0e\x6b\xaf\x00\xa4\xc3\x8f\x45\x09\x44\x23\xad\x1b\x79\xe3\x14\x65\x5f\xdc\xf9\xe7\xd3\x01\x93\x23\x31\xf2\x7f\x85\x47\x3d\xd5\xb2\x7a\x8a\xd1\x80\x21\xd4\x13\xce\x1d\x0c\x25\xb5\x49\xa5\x6d\xff\xf6\xcf\x6e\x90\xee\xd7\x3f\x0f\xff\x39\x01\x1d\xfd\xf3\xdf\xa8\x92\xf4\xdf\x5a\xdf\xa6\x21\x65\x01\x7c\xff\x6f\xbe\x8c\x37\x41\x57\xff\x8d\x6a\x72\x41\xe1\xea\x11\xd4\xa5\xbe\xe6\x95\x2c\xf1\x34\xc2\xbb\x6b\xf1\x77\x6f\x5f\x84\x65\x0a\xb6\x9d\x82\x5b\xa1\x80\x50\xfb\xdc\x0c\xa5\x2d\x36\xa7\xea\xb4\x6e\xfc\x47\x60\x19\xc0\xdc\xb2\x01\xb3\x5a\xc3\x75\xc4\x2b\x7f\xa2\x98\xf0\x25\x3b\x71\xae\xb0\x1c\x9c\xe2\xd5\x3c\xef\x71\xdd\xba\x15\x0e\x99\xb8\x6e\x1c\x30\xb6\x7f\x54\xda\xfe\x63\xd8\x7e\x1f\xa9\x01\x0c\x46\x33\x7e\xad\xa5\xc7\x21\x77\x37\x45\x61\x61\xc7\x80\x8c\x3d\x5e\xb2\xb9\x34\x96\x5f\x89\x11\xbb\x74\xbc\x25\x75\x8a\xe1\xea\x29\x06\x40\x96\xa2\x64\x8d\xb2\xb2\x82\x5f\x63\x3f\x6e\xc8\x29\xcf\x39\x9f\x30\xd3\x14\x8e\xb6\x2e\x6a\x31\xf4\x5c\x8c\x9e\x5a\xa1\x05\x71\x2e\x83\xb0\xd9\x33\x8e\x2a\xc1\xa2\x84\xa6\xb0\x1e\x5c\xd1\xf1\x5a\x09\xe7\x72\xe3\xd4\xaa\x88\x9c\x0b\x16\xd3\x8c\xd8\x47\x60\x56\x95\xf7\x0c\xa3\x76\x42\x76\x4c\x25\x0a\x61\x0c\xaf\x97\x03\xc0\x77\x97\x01\x13\x9c\x22\x78\x80\xa3\xce\xb9\x42\x74\xf5\x5a\x14\x5a\x19\x5b\x37\x85\xc5\x72\x7b\xe3\x5a\x5f\x09\x15\xa2\x06\x57\x8b\xdd\xc7\x30\x1a\x70\x7b\x69\x56\xcc\xb8\x9a\x26\xe5\x6a\xe6\xbc\x84\xb5\xff\x6b\x90\x72\xfc\x7c\xdc\x0a\xf0\x89\x13\x2c\xa4\x85\xa5\x18\x3b\x3e\x12\xac\xb1\xff\xa1\x02\x2c\xcf\x20\x9a\x4b\xdd\x94\x64\xb5\x85\x76\xf5\xa2\x5f\xac\xa7\x6d\x6f\x08\x6c\x7b\xcf\x71\x60\x73\x61\x79\xc9\x2d\xdf\x21\x16\xec\x43\xac\xb1\x47\x7e\x48\xaa\x73\x1a\xfc\x93\xc4\x87\xbc\xb8\xa5\x17\x32\x4d\x83\x82\x9b\x38\xf3\x2b\x0f\x89\xd7\xd6\x9d\x29\xf2\x17\x60\x88\x17\xc8\x33\xbe\x88\x99\xeb\xde\xf7\x86\xe4\x22\x56\x68\x8c\xe4\xa4\x9b\x37\xaa\xa7\x21\xd6\x2d\xfd\x0e\x6b\xf4\x39\xba\xcc\x8a\x3c\xcc\x6b\xad\x08\x82\x5c\x42\x28\x2b\x6b\x91\x66\x9d\xd1\xd2\x35\x0a\x0f\x79\x6b\x11\x61\x95\xa7\xc2\x9a\x18\xa8\x82\x74\xd8\x11\x17\xe2\x77\xa4\x93\x02\x91\xa6\x85\x25\xb5\x6e\xbd\x2c\x84\xcb\x6e\x34\xd1\x59\x47\xf9\xef\x65\x5d\x77\xb1\x3d\x63\x55\x81\x0f\xba\xec\x63\xae\x6e\x81\xf1\xc7\x2e\x62\x18\x27\x06\xe4\x1a\xd0\xed\xf1\x01\x70\x5a\x99\x2c\x77\x0e\x89\xdc\x8c\x5f\xef\x6e\xab\x8a\x32\xd2\x30\x20\x1a\xc3\xeb\x86\xf0\xba\xe1\xab\xee\x36\xbd\x3e\x81\x20\xfe\xd3\x39\x20\x24\x7f\x49\x2f\x03\xaa\x23\x29\x97\x3d\xad\x9e\xad\xa4\xe4\xd0\x03\xd1\x7c\x72\x26\x06\x07\x2e\x25\x3c\x08\xe9\xa8\xc5\x6b\xf6\x8f\x19\x97\x27\x69\x2a\x68\x4a\x18\xb0\x7b\xe4\x55\xa7\x11\x6d\x85\xcf\x41\xcf\x1f\x3f\x6e\x75\x06\xe2\xc5\x7a\x8d\xc2\x07\x06\x07\x91\xcf\x89\x67\x35\xd8\xd0\x7c\x1a\x82\x3b\x5e\xb5\xae\x2a\x51\xc3\x14\x48\x7b\x6a\x39\xd3\x01\xd2\x14\x4d\xbb\x83\xa0\xa2\x06\x19\x53\x89\x9b\x20\x4c\x70\x83\x08\x2e\xde\xf1\x25\xa8\x7e\xde\xc6\xfe\xa8\xba\x91\xfb\xfd\x44\x2d\x71\xf0\x67\xc9\xe2\xa2\xf2\xc9\xa6\xee\x55\x4e\xee\x54\x7c\x5c\x39\xce\x97\x6c\x40\x78\x4f\x8b\x94\x5b\x9d\x3c\xf5\x49\x4c\x48\x6b\x4c\xbf\xea\xd6\x16\xf9\x40\xd6\x70\x14\x23\x59\x7c\x71\xbb\x88\x5c\x42\xab\x9e\x3d\x92\x7b\xc0\x5b\xbd\x65\x09\xb5\xeb\x46\xd0\xd9\x81\xb7\x93\x0b\x6f\x17\x27\x1e\x64\x7f\x4a\xd5\x25\x62\x2a\x36\xb8\xb5\xce\x49\xfb\xb3\x8b\xd7\x0f\xc2\x6a\xc0\xdb\xdf\xcf\x85\x93\x97\x55\xbf\x38\x87\x2e\xbc\xee\x30\x85\x3f\x3c\x67\x0c\x3e\x8e\xb1\x70\xb7\x2f\xe6\x75\xc3\xbe\xa7\x6d\xd7\x04\x3e\xc4\x2b\xf0\x57\x00\x8f\x25\xa3\x76\x28\x8c\x56\x0b\x08\x5c\x81\x37\x8e\xa0\x7a\x02\x57\x4b\x92\x38\xec\x4c\xd6\xe5\x70\xc1\x6b\xbb\x44\x35\x77\x90\xbd\x2d\x64\x03\xf4\x9a\xf8\x8e\xde\xa7\x6e\x48\xcd\x1b\x57\x18\x26\xef\xad\xd9\xe4\x4c\xd8\xb8\xae\x0f\x31\x9f\xee\xf9\x06\x6b\xe7\x93\x22\xa1\x7a\xcd\xf5\xd1\xe6\x93\x51\x96\xbb\xf3\x37\x47\x9e\x4c\xee\x29\x46\x76\x95\x56\xda\xd2\x69\xd0\x76\x90\x46\x40\x71\x73\x3d\x0d\x9c\xbe\xcc\x63\x69\xf4\xc4\x00\x49\x12\x8d\x0f\xf9\xa1\xc2\x4c\xee\xd0\x27\x6f\x49\x9b\x86\xfb\xc1\x8e\x94\x56\x78\x67\xf0\xd9\x63\x8c\x75\xda\x60\x3d\x83\x47\x02\xb7\x49\x75\xb5\xe4\x8e\x7a\x36\x26\x55\xe9\x36\x0d\xc8\x32\x68\x71\xa6\x29\x0a\x21\x82\xde\x9f\xd6\xd2\x89\x77\x9a\x86\xec\x6b\x72\x1a\x0d\x68\x33\xc6\xf2\xaa\x8a\xfa\x36\x2d\x94\x06\x4e\xec\x6d\x94\x09\x83\xce\x32\x82\xc8\xf4\x00\xd5\xde\x31\x3e\xa7\x51\x05\xc6\x1a\x48\xbb\x4c\x71\xf8\x33\x61\x04\x14\x1d\x83\x6a\xb8\x9c\xa0\x65\x2c\x51\x58\xc2\x62\x02\x51\xa2\x5a\xf3\x33\x5f\x31\x05\xa4\x70\x02\x91\x70\x14\x68\xcc\x8b\xab\x1b\x5e\x97\x50\x73\x78\xc1\xad\x44\xfc\xf2\x01\x72\xc5\x94\xc9\xa9\xc3\xc3\xd4\x95\x23\x55\x9b\xff\xa6\x03\x39\x4a\x46\xbd\xc2\x97\x8f\x03\x3f\x36\x22\xa0\x6b\xc7\x81\x31\xde\x58\x3d\xe7\x56\x16\xa0\x9e\xcb\x49\x62\x19\x9d\x07\xb4\xc6\x56\x45\x45\xa0\xc8\xa1\x36\xff\x2f\xed\xc1\xdf\x3a\xf0\x64\xac\x7e\x9a\xeb\xc7\x95\x10\xf5\x50\xb9\x1f\x3c\x5a\x60\xc1\xaf\x85\x60\x72\xee\x04\x2c\x0e\x05\x49\x26\x21\xef\xca\x9b\x8b\x6f\x5b\x14\x27\x45\xfe\x02\x36\xfa\xe4\x29\xb4\x31\x38\x0d\xd4\x30\x7b\xa3\x83\x3a\x17\x2d\xa1\x94\xb8\x34\x68\x89\x1c\xd4\xc6\x5d\x35\xb7\x2c\xc9\x3d\x1a\xb8\xb3\x73\x23\xaa\xca\xfd\xff\xb6\xdb\x64\x46\xeb\x46\x84\x95\x81\x0d\x2b\xa5\x69\x95\xf7\x3e\x2a\x6b\xbd\x58\x90\x7d\x69\x7e\xdc\x1e\x11\xb8\x5d\xea\x6b\x61\x92\x0a\xd6\x28\xb3\x4d\x85\x0a\x25\xd8\x09\x14\x04\x08\x4a\xfb\x15\xd9\x36\xae\x1d\x5c\xba\x5c\x68\xc4\xbe\x7d\x79\xe8\x57\xd0\x45\xdd\x4a\xf9\x03\x63\x46\x98\xb4\x7b\xcc\xbe\x50\xe1\xa7\x70\x67\x43\x64\x64\x27\x99\x16\x4d\x61\x24\xd6\x8e\xd8\xd1\x49\xb5\x98\x25\xbd\xa6\x52\x64\x88\xb8\xce\x47\x9a\xbd\xef\xb4\xd6\xc6\x7c\xf4\x4d\xfa\xbc\xfa\x59\xc2\xec\xf8\x79\x96\x30\x9f\x25\xcc\xdf\xb7\x84\xe9\xe7\x03\x34\xe6\x8e\x93\x0a\xec\x37\xa7\x75\xb7\x4d\x8f\x7d\xd4\x96\xdc\x22\x20\x82\xf0\x8d\x9a\x36\x07\x42\x77\xc3\x97\x23\x25\x2c\x65\xf3\x7a\xa3\xca\x27\xdf\xdf\x8f\xb5\x63\xc6\x24\xbb\x25\xc7\xdc\xdf\x19\x9f\x47\x9c\xbc\xc5\x6a\xe4\x0f\xd1\x4b\x03\xdf\x1f\x1a\xf2\x51\xb8\xdf\x21\x96\x3e\xed\xa0\x10\x23\x76\x29\x3c\xa8\x67\xf6\xf2\xd5\xac\xd1\x52\x58\x2e\x2b\x13\x19\xc2\xe7\x0d\x0c\x66\x77\x82\x7f\xdf\xa7\x24\xc4\x8c\xee\xaa\x83\xc4\x40\xe9\x24\x24\x23\x8d\x28\x8a\x0f\x6c\x32\x81\x9e\x4f\xd8\x27\x51\xe8\x6b\x51\xe3\xca\x40\xf5\x60\x27\x67\xbf\xe3\xb2\x72\xeb\xe2\xd7\x27\x9a\x96\x00\x96\x39\x37\xec\x27\xf6\xbc\x70\x28\x69\x13\xe6\x34\x28\x4a\x17\x76\xcf\x93\x8b\x7d\x51\x8b\x6b\xa9\x1b\xe3\xe3\x9e\x1a\x8b\xc4\xd8\x58\x92\x6c\x67\x72\x1a\xd0\xfd\x43\xa0\x44\x2d\x0a\x5d\x97\xf1\xf0\x19\xcb\x6d\x63\xf2\x64\xab\x02\x6d\xf1\xfb\x33\xef\x86\x75\xbc\x67\x19\x60\x37\x7e\x0b\xd3\xed\xd5\xa2\xed\x1d\x07\x99\xd5\x40\x5e\x63\x42\x67\x52\x1a\x83\x71\xcd\x52\xe1\xc2\xbb\xcd\x1e\xf9\x9f\xb0\xf1\x20\xee\x71\x74\x5b\x4a\x93\x94\xf9\x0f\x3e\x40\x09\x52\x2a\x77\xd7\x36\x51\xc7\xc2\xa5\x85\x63\xe6\x85\xbb\x33\xd4\xff\x3e\xd1\xbb\x4e\x2a\x27\x93\x22\x11\x48\x2e\xee\x1a\xff\xa2\x9c\xcf\x1b\xeb\xce\xeb\x88\x9d\x63\x26\x0b\x48\xb6\xa4\x30\x4d\x62\x76\x86\xa8\x4d\x07\xaf\x60\xfa\xd9\xc5\x68\xcf\x76\x31\xdc\xaf\x6c\xd4\xa7\x74\xc9\x53\x54\x0a\xa7\xdd\x81\x6f\xde\xed\x8e\xf7\xdd\x67\x4f\x77\x48\xab\x5f\x37\xcb\x9e\x07\x18\x3f\xbb\x88\xb2\xf8\xe9\x29\x9f\xe2\x67\xb7\x5b\x83\x9f\xfe\x52\x07\x7e\x56\x65\x8f\x56\x11\x7f\x2f\x83\x64\x3b\xb3\xd0\xe5\x68\xcd\xdd\x09\x71\x1c\xba\xa4\x20\x8d\xdc\xfe\x82\x29\x5f\xe7\xae\xfb\x2b\x1f\xb8\x14\xe8\x2c\x95\x4c\xab\xc0\x92\x22\x4b\x81\x28\xb7\x74\xe7\x76\x98\xd9\x8e\xe2\x4e\x2b\x20\xd1\x91\x92\xe1\x9c\x2f\x86\x57\x62\xd9\x7b\x5b\x76\x38\x05\xab\x2f\xc7\x79\xcc\xf9\xa2\x47\x3f\x18\x40\x7b\x07\x4a\x7a\xf8\x1e\x43\x70\xf1\xcb\x31\x31\x5e\x1f\x15\x1c\x23\x92\x0b\x3d\x5f\x34\x56\x24\x0c\x9a\x58\x69\x6f\xae\x95\x81\x90\xbc\xc0\x3a\x7a\xc3\xd0\xed\x30\x12\xb9\x0e\x05\x70\xd2\xcf\xce\xd7\x7f\x57\xbc\x8d\xf4\xf3\x84\x03\x80\x5b\x93\xed\x9f\x0c\xc3\xee\x98\x10\xc3\xee\x92\x14\xc3\xf6\x99\x18\xc3\x42\x7a\xdd\x5d\x6e\xcc\x27\x9f\xd8\xd7\xba\x33\x24\xc2\xde\x76\x67\x32\x7c\xa7\xd0\x8f\x34\xbe\x20\x37\x85\x97\x85\x3b\x00\xae\xd9\x34\x3d\x8b\x6e\x2b\xd8\xac\x31\x86\x4c\x7c\x0d\x45\x18\x12\x35\x09\xb4\xff\x1b\x69\x50\xb1\x51\x4c\xce\x17\x08\xcc\x08\xb7\x6e\xe8\x25\x23\xb2\x09\x87\x91\x14\x10\x4b\xc3\xc4\x57\xb0\x8c\xe3\xcb\x9e\x2f\x38\x7b\xbe\xe0\x9d\xdb\x3f\xe6\x05\xc7\xfc\xb4\x3e\xe9\x93\xad\xba\x8e\xd8\x9c\x20\x53\xf8\x58\x54\xec\xd7\x46\xd4\x4b\xe6\xb4\xcd\x18\x85\x0d\xc5\x28\x9c\xe0\x82\x71\xcc\xe4\x59\xea\x2e\xb9\x3c\xa0\xa2\x05\xd2\xdd\xdb\xaf\x4e\xd5\x06\xd4\x81\x3b\x90\xbd\x76\x57\x39\xb0\x0c\xae\x56\x58\xc1\x54\x95\xc6\x40\xb0\x4c\xb9\x76\x3a\xd7\xc9\xc7\xb3\xdd\x2c\x16\x8f\xa1\xc6\x9c\xdc\x32\x41\x5c\x88\xf0\x4b\x5e\xfb\x33\xb8\x3c\xd8\x95\x58\x0e\x28\x5c\x91\x6a\xed\xf8\x87\x31\xea\x36\x07\x80\xef\x0a\x2c\xb6\x6e\x81\x1e\x5c\x03\xea\x0a\x19\x9e\xb7\xf2\x8b\xf0\x80\xba\x53\x0f\x68\xf1\xf4\xb3\x09\x66\x1c\xcf\x04\xe0\x25\xfb\x2c\xb4\x70\x0c\x20\xf3\x0e\xa8\xc5\x83\xaa\x34\x0c\x90\x7d\x71\x61\xef\x3c\xd5\x70\x4c\xb3\xfc\xa9\x2b\xb1\x3c\x34\x84\xf1\xa0\x95\x99\xc9\x85\xaf\xe6\x03\x94\x80\x4e\x2e\xfb\x19\xc2\x38\x7d\x17\x78\xe7\xcf\xd5\x80\x7d\xd4\xd6\xfd\xef\x2d\x44\x74\xc3\x59\x3f\xd3\xc2\x7c\xd4\x16\xbe\x79\xf0\xc5\xc2\xe1\xde\x79\xa9\xc8\x1d\x4a\x86\x22\xc8\x3c\x80\x6c\x5a\x1f\x29\x0c\x4b\x42\x41\x64\x61\x59\xa5\x61\xe7\x8a\xe9\xda\xaf\x89\xf5\xa5\x1e\x0c\x75\xe1\x5d\x3d\x89\x93\x7b\x4d\x1f\xb4\x94\xba\xce\x56\xf2\x96\xee\x82\x1b\x5b\xfa\x5f\xc0\x46\x0e\x21\x09\x21\xbc\x19\x0a\x16\x70\x2b\xa6\xb2\x60\x73\x51\x4f\x01\xcd\xa3\x98\xed\xbe\x41\xfd\xe9\x36\x7e\x76\xa2\xde\xe9\x8b\x7b\x9f\x0c\x60\x75\xef\x21\xc0\xfc\xae\x0c\x13\x7b\x41\x16\x31\xe7\x0b\x77\x28\xfe\xc7\x71\x02\xd8\x97\xff\x85\x02\x23\x66\xc4\x4e\x7c\x79\xfa\xf4\x37\x32\x17\xa7\xdd\xb8\x1e\x9c\xc8\xff\x6b\x23\xaf\x79\x25\x30\xed\x82\xab\x00\xba\xae\x27\x2b\x6c\x7a\x40\x55\x46\x1c\x95\x0a\xe6\x99\x83\x2b\xb1\x3c\x18\xac\x1c\xa4\x83\x73\x75\x10\x21\x75\xb2\xa3\x13\x18\x1a\xd8\x24\x0f\xe0\xb7\x83\x7d\x73\xf6\x47\x12\xed\x77\x38\x25\x64\x79\x3f\xad\x38\x7a\x6a\x76\xf5\x87\xb4\xfb\x59\x07\x97\x7d\x99\x3c\x13\x3d\x59\x94\x64\xb3\x77\xc7\x01\x24\x63\xf6\x0f\x08\xef\xb5\x7a\xd7\x54\xeb\xae\x3b\xcc\xd6\x5a\xf8\x57\x00\x99\xf2\xa9\xb6\x19\x8a\x41\x8c\x45\xdb\xb0\x5e\x3f\x83\x03\x47\x4f\xd8\xbb\x08\x83\x0d\x26\x78\xc7\xb4\x29\xf9\xd6\x29\xc2\x52\x15\x55\x43\xbe\x1b\x68\x8a\x8e\x84\xfb\x5f\x9c\x3b\x1c\xaa\xd8\x81\x3f\x4d\x3e\xf6\x6d\x25\xcf\xaa\x1d\x09\x04\x81\x61\x21\xf6\x05\xd7\x6a\xdf\x73\x9d\x6c\xc9\x6a\xc9\xa1\xd3\x8b\x5c\xf6\x78\x27\xc7\xb5\x60\xa7\x33\xae\x94\xa8\x12\x6c\x12\xb2\x85\x84\xe2\xa3\x20\x90\x50\xc9\xd1\xc3\xbc\xe6\xa8\xa7\x6f\x2a\x20\xe1\xc4\xa4\xb3\x3d\xc1\xf4\xff\x96\x4a\x80\x6e\x46\xaa\xef\x5b\xfc\x13\x81\xb5\x67\xfa\x86\x95\x9a\xdd\x40\x95\xa9\x6b\xc7\xb4\x20\xf8\xcb\x78\x76\x97\x8c\x14\xe2\x44\x0b\x3d\x5f\xd4\x7a\x2e\x43\xf0\x14\x6d\xe3\x5e\x81\x3c\xaa\xa6\x03\x62\x63\xbe\x07\x55\xa3\xf2\x02\x3e\xef\x4e\x99\xe5\xf5\x54\x58\xd7\x1b\x53\xcd\x7c\x2c\x3a\xa3\x8d\xdc\x07\x62\xec\xb7\x54\xf0\x7d\xbf\x25\x4b\x71\x1b\x7e\xf9\xe5\x63\x5f\xc0\xdc\xc3\xd8\x72\xd3\xde\xde\xe8\xba\x2a\x6f\x64\xe9\x1d\xce\x47\xee\xe1\xe3\xae\xe3\xdf\x33\x7e\x6e\x8f\x13\x7e\x73\x23\xcb\xde\xcb\x01\x8d\xf2\x65\xf0\x61\xe0\x6e\x19\x18\xac\x03\xd5\xe3\x94\x50\xf4\x04\x5a\x1c\xb3\xb7\x12\x93\xc0\xa1\x3d\x38\xae\xe7\x63\xa9\x22\x10\x40\x5c\x66\x47\x8c\xdd\x7d\xf1\xaa\x89\x11\x16\xd3\x77\x21\x73\x46\xdb\x19\x33\x72\xde\x54\x96\x2b\xa1\x1b\x53\x2d\x3b\x1f\x95\xc7\x59\xea\x49\x25\xbe\xe2\xc9\xee\xc3\xe4\x42\xa3\x9c\xd9\x41\x88\x6c\x44\xbb\x58\xe1\x76\x31\xc2\xbc\x7c\x11\x38\x5f\xc8\x0a\x17\x5f\x45\x41\xc9\x5b\x8b\xaa\x99\xca\x2d\x59\xaa\xbf\xb3\x1a\x34\xb1\xdc\x47\x63\x44\xc4\x55\xea\x5a\x85\xef\x81\x4a\xc6\x3c\x2e\x87\xff\xbc\xbe\x5c\x4c\x29\x16\x42\x95\x00\x60\xfb\x2e\x9e\x5c\x1c\xfc\x5e\x57\x8e\xc0\x60\xfb\x52\x2d\x8f\x21\x9b\x51\xf0\x24\x3c\x61\xa6\xab\xd2\x30\xf1\xd5\xd6\xdc\x11\xa6\xb9\x23\x41\xa1\xcd\x84\x71\xd5\x9d\xc8\x3c\x8d\x82\x0e\x6c\xef\xdc\xfe\x7e\xab\x9b\x3f\xc5\x02\xe5\x71\xee\xd9\xd7\x7b\x2e\x34\x84\x84\x98\xee\x8a\xc9\x13\xa4\xd6\x14\x04\x8a\x01\xac\xab\x99\xa8\x3b\x16\x06\x32\x6b\x4a\xa0\xb4\x46\xf5\x5c\x54\xfd\x9b\xa8\x12\x34\x01\xfc\x96\x3e\x90\x99\xd4\xa2\xa5\x51\xd3\x97\xbe\x38\x71\x07\x0d\x9a\xce\x6d\xc2\x07\xdc\xaa\xfb\x8e\x28\xfb\x9c\x19\xb7\x96\x31\xd4\xbb\x51\x6a\x1b\x15\xbb\x8f\x9a\x2f\xdc\x72\x23\x6c\x37\x6b\x4a\x2e\x3a\xc4\x96\xee\x02\xa6\xe7\x8b\x7e\xc2\x9a\x43\x90\x95\xe7\x31\x4d\xd8\xf0\xcf\x24\x65\xa8\xec\x49\x27\x5f\xf8\xf5\xf1\x90\x9a\x22\x78\x91\xb1\x8f\xd2\xed\x4a\xc1\x6d\xe7\x02\x89\x9d\xf8\x02\x8d\xe0\xcb\x97\xde\x95\xf7\x93\x96\x5e\x0e\x81\x7f\xe7\x8b\x30\x0a\x01\xb2\x8d\x92\xbf\x36\xa9\x3a\x00\x18\x64\x61\xda\xf4\xfc\xbe\xe6\x36\x2d\x44\x34\x5e\x9d\x49\x73\xd5\x07\x3a\x76\xa5\x71\x7e\x25\x7e\x3c\x7d\xcb\xe8\xdb\x4e\xf6\xa5\x3e\x06\xa6\xbb\x42\x52\x4e\x0b\x11\x8d\xb6\xa5\x34\x57\x7b\x82\x9d\xed\x2e\xd5\x2f\xca\x8f\xdb\x42\x1d\x1f\xce\xfe\xd5\x96\x7a\x3d\x92\x5e\x02\xf1\xb8\xd4\x0d\xbb\x21\x84\x2a\x92\x9a\x3f\xcb\xc5\x6b\xf6\x56\x99\xa6\x16\xd1\x73\xdb\xee\xca\x71\xdd\xce\x32\x34\x80\x80\x99\xd7\x7b\xb3\x95\xed\xfb\x94\x3c\x65\xe3\xdb\x82\xd7\x16\xc4\xe3\xbe\xc7\x20\x34\xf4\xf4\x29\xf9\x42\x75\x39\x07\xe7\x13\x1f\x77\x37\x20\x28\x9e\x00\x33\xeb\x1f\x72\x3b\x9f\xa0\xcf\xa5\x7b\xfd\x2e\x20\x33\xb2\x17\xa5\xb8\x7e\x61\x4a\xfe\x6a\x00\xaf\xf1\x99\x25\xf9\x98\xb8\x61\x07\xaf\x0e\x46\xec\x52\xce\x65\xc5\xeb\x6a\x99\x15\xce\x88\xcf\x39\x66\xe1\x3b\x04\xaf\xdc\xcb\x03\x76\xa4\x6b\xe8\xb9\xe0\x8a\x55\xc2\xa7\x75\xd3\x3d\x5b\xa2\xec\x78\xfc\xd0\xc4\x85\xdd\xab\xfd\x12\xe9\x4c\xef\x33\x51\x7a\x8e\x4d\xfc\x28\x43\x1d\x3c\x8b\x24\x5d\x2a\x47\xe7\x47\xec\x0b\x11\x68\xe2\x5b\xb8\x69\x70\x65\xfc\x13\x8f\xb5\xa8\x0f\xa3\xf7\xed\xa4\xc1\xad\x9a\x83\x1f\x6f\x99\xb6\x6b\x89\x53\x69\x3f\x89\x85\xee\x25\x21\x60\x93\x96\x3d\x4e\x5a\xf7\x85\x36\x12\x60\xe5\xb9\x65\x1c\xaf\x6d\xd1\x54\xdc\x89\xd5\x68\x8d\x1b\xb1\xb3\xb7\x17\x9f\xde\x9e\x9e\x7c\x7e\x7b\xf6\x9a\xfd\x48\x3d\xc9\x54\xc2\x1b\xb1\xcf\x29\x68\x67\x12\xf0\x4b\xc8\x88\xe1\x5d\x03\x22\x43\x5c\x45\x28\x6e\x80\x62\xe3\x8a\x9d\x2b\x69\x63\x31\x0b\x8c\x3b\xab\xb4\x12\xbe\xd6\xfb\x42\x93\x35\x70\x2a\x2d\x41\x14\x61\x67\xee\xe7\xbc\x37\xca\xe5\x70\xa2\x4c\x4c\xc5\x78\x70\xd1\x22\x2e\xee\xbe\xc4\x7f\x8f\x56\xdf\x57\xf6\x0d\xb5\x03\x7c\xbe\x31\x5a\xff\xe3\xf7\xc8\x0c\x42\x19\x1d\x8f\x4a\xa8\xeb\xac\xca\x0d\xd4\xc0\x77\x6c\xe6\x70\x74\xe8\x05\x8a\x6a\xa5\x64\x52\xe8\x34\x05\x5e\xcd\x0f\xdb\x88\xb1\x9f\x7c\x44\x37\x20\xaf\xac\xaf\xbe\x84\x20\x5e\x49\x0d\x9f\xd6\x91\xf5\x19\x88\xcd\x38\x7d\x29\x21\xb5\x4e\xe5\x35\xe1\x67\xec\xd5\x8a\x17\x5f\xdf\xbb\x96\x6d\x1c\x37\xe9\x1f\x9f\xde\xef\x77\x64\x78\xff\x7a\x8f\x8b\xae\x2d\x8d\xaa\xd0\xf3\x39\xc2\x7a\xce\x42\xbe\x7f\x4c\xd9\x0f\x54\x61\x6f\x9a\x0f\x02\x94\x4e\xb6\x1c\xfe\x16\x3d\xf3\x8d\x5a\x9a\x4e\xf8\x9a\x72\x16\x54\x14\x73\xfb\x57\xcd\x20\x2c\x5c\xe3\xd3\xb1\x89\xb4\xbf\x08\x2f\x7f\xf1\xe9\xed\xc9\xd9\x87\xb7\xa3\x79\xf9\xe0\xa4\x45\xa8\x72\xa1\xa5\xb2\x66\xbb\x7e\xb3\xad\x46\x60\x77\xf2\x13\x5e\xda\x97\x3b\x87\x86\xfe\x8c\xf9\x2f\x12\xf8\x60\x4a\x27\x4f\xf6\xd0\xea\x85\xae\xf4\x74\x7d\xb1\x8c\x1e\x9b\xf3\x07\x84\x01\x1c\xf2\xa1\xdb\xf5\xfd\x8a\xfa\x5d\xaa\x9e\xb5\xa5\x7c\xac\x72\xe6\x96\x21\xce\x35\x48\xcd\x50\x9c\xec\x89\x4e\xf7\x5e\x84\xb3\x95\x35\x40\x45\x12\x2e\xb0\x47\x56\x8e\x50\xc5\x49\xc5\xc1\xae\x52\xdb\x7d\x2f\xdd\x76\x81\xcd\xd1\x9f\xed\x65\x25\xf3\x35\xf3\x6d\x72\x02\xb7\xa8\xc5\x30\xa0\x6a\x42\x21\x3c\x5d\x27\x0c\x37\xa5\x77\xde\x7a\xe3\x6d\x3d\xf8\x54\xb5\x6c\x5b\x71\x92\xf4\x70\x6f\xfa\x42\x2c\xa3\xaa\x5a\x46\xb4\x6e\xd2\xa2\xf9\x14\xd1\x32\x6b\x32\x13\x2f\x6a\x79\x2d\x2b\x31\x05\xc4\x7c\xa9\xa6\x09\xce\x40\x8a\x4c\x40\x90\x12\xb9\xd1\xf5\x83\xfb\x2b\x29\x91\x02\xe7\xe2\xe3\x4f\x9f\xa1\xf8\x02\x38\xb8\xee\x2c\x84\xbb\x17\xc2\x7d\x1b\x0e\x87\x60\x32\x38\xfa\xbb\x93\x27\xcb\xea\x98\xfd\x22\xe8\x3d\x1a\xaa\x43\xd4\x50\xb8\x71\xa6\x03\x54\x3f\x8c\x35\xae\x2c\x1c\x47\x74\xef\xd3\x53\x2f\xdc\x93\x4e\x56\x42\x56\x93\x3d\x0f\x75\xea\x11\x61\x1b\x7d\x4c\x0f\x2f\x7b\xee\x91\xec\xef\x4c\xe5\xbc\x69\x75\xdd\xf9\x0c\x8e\x1f\x4f\x0f\x39\x33\xcb\x79\x25\xd5\x55\x84\x6f\x9d\x68\x42\x30\x11\xcc\xfd\xe0\x4f\x6c\x2d\x78\xb5\x99\x52\xee\x72\x3e\xf6\x4a\x25\xed\x0e\x16\x40\xb0\xd0\xb9\x7b\xf6\x17\x7f\xed\xc9\x0d\x9d\x92\xb8\x83\x83\x27\x37\x5f\x69\x0a\x23\xfb\x90\x35\x68\x90\xd1\x34\xc5\xce\x2f\x4f\x2f\xcf\x1f\xd4\x42\xbd\x89\x25\xc0\xe8\x1e\x51\xaa\x93\xbf\x6e\xf3\x0e\x0f\x59\xd5\x6c\x7f\x06\xd5\xbb\x0b\x5d\x5b\x5e\xed\x89\x08\x14\x33\xbe\x38\x69\xec\xec\x4c\x1a\x00\xab\xe9\x2b\x04\xac\xb4\x4f\x22\x9d\xb1\xc4\x86\xc7\x75\x96\xfe\x38\xd0\x73\xa7\x7f\x39\xb9\x60\xbc\x71\xfb\x6b\x09\x03\x7e\xaf\x0e\x77\x3f\xb2\x4b\xcc\x30\xd8\x71\x5e\xd4\x7a\xcb\xac\xfc\x53\xf7\x3d\xa7\xfb\x88\xc3\x7d\xf6\x45\x00\x0d\x45\x0a\xf6\x84\xfd\x0f\x52\x49\x2b\xb9\xd5\x1d\xcb\xca\x66\x47\x20\x6b\x1b\x0c\x02\x8d\xb1\x7a\x4e\x27\xf8\xdc\x3f\x01\x2e\x64\xe0\xe2\x2b\x8d\xa2\xb5\x00\xa4\x77\x58\xb1\x73\xe5\x64\x6d\x5e\x88\x56\x00\xe4\x00\xb0\xd9\xb1\x6f\x19\x9e\xf9\x67\x32\x50\x01\x0e\x69\xf5\xe7\xd7\x59\xc5\x9c\x95\xf2\x63\xde\x4a\x11\x6b\x5b\xed\xd5\xe2\x23\x7f\xed\x4b\x14\xe4\xaf\xaa\x65\x69\xc3\x09\xfe\x6b\xc3\x2b\x5c\x98\x8f\xfb\x36\x4b\xe5\x8b\xdc\x77\xbc\xf9\x0e\xd1\xd0\xe3\x76\x7c\x0c\x5a\x7a\x63\x10\xe1\x14\xe7\x63\x6b\xae\x8c\xdb\xa3\x5c\x17\x3b\x24\xc7\xd3\x21\x3b\xb2\xc5\xe2\x78\xaf\xf3\xec\x1f\xda\x5e\x35\x2a\x15\x38\x70\xe4\x9f\x71\x5b\xde\x87\xd0\xf6\xae\x83\xbc\x17\xd7\x10\x9c\xf2\xbe\x56\x15\x6a\x15\x76\x2b\x9d\x17\xb2\x7e\xf6\x5e\x1a\xeb\xeb\x66\xc1\x17\xd2\x50\xb9\x07\x90\xbb\x2e\x9c\x22\x27\x17\xff\xc5\xcb\xb2\x7e\x8d\x5c\x8a\x64\x72\xf8\xb7\x09\x98\x9b\x5c\x05\x5f\xe2\x91\x5d\x2e\x08\xd3\xf8\xf3\xe9\x05\xc3\x3a\x76\x7f\xfa\x1e\xeb\xf4\xff\x9f\x3f\x7e\xff\xb2\xf3\x76\x3f\x5e\xf0\xf8\x8e\x76\x8c\xbd\xfb\x98\x9e\x44\xdc\x60\x16\x1f\x08\x70\x8d\x4e\x36\xb9\xc4\x70\x3c\x47\x59\xe9\xaa\xe3\xc1\x72\xbb\x1c\xe8\xfd\x6e\x12\xcc\x73\x9c\xdd\xa3\xc6\xd9\xb1\x90\x51\x82\x44\xa2\xe7\x71\x49\x9b\x42\x8a\xe1\x2a\xd9\x41\x8a\x73\xf1\xf4\x28\xce\xd6\xb5\xd9\x7e\x8a\xf2\xd3\x93\x3a\xe3\x7d\x95\xc2\x18\xc2\x7e\xf6\xf1\xf2\xbf\xde\x9f\xbc\x79\xfb\x1e\x46\x4a\xfe\x7b\x77\x34\xa4\xda\x39\x7e\xaa\xfb\x51\xeb\xa2\xbc\x6e\x5f\x90\x7e\x6e\x19\xd5\x72\xc8\x28\xf6\xf1\xdd\x65\x5f\x5f\xcc\x5d\x05\x74\x35\xe9\x34\xf7\x87\xb5\xb6\x41\xf1\x39\x51\xef\x2f\x7f\x64\x67\xa3\x5c\x82\xb3\x95\xe9\x5f\x6e\xa7\x70\x84\x77\x56\x91\xb6\xee\x00\x7b\x02\x7e\x07\x37\x5f\x5c\x83\xbd\x7b\x1c\xee\x69\xad\xba\xca\x01\x75\xff\xc4\xa2\x43\x6c\xe5\x45\x00\x77\x49\x91\xb6\xd5\x8e\x66\x3b\x6a\x2d\x4c\x00\xc9\x7c\xa2\x27\x65\xb1\xae\x0c\x44\x1f\xea\xb5\xb6\x83\xac\xaa\x6c\xe6\x8b\xc9\x72\x29\x36\xd5\x74\xf1\x11\x0a\x7c\x9e\x40\x87\xef\x13\xdf\x20\x7e\x85\xdf\x20\x14\xf1\x83\x13\x40\x78\xed\x1e\x03\x69\x43\x7f\x7d\x0f\x72\x68\xd8\xce\x92\xeb\xb5\x43\x8c\x1b\xcf\xa2\x29\xe6\x28\x4d\xa7\x7b\xe4\xed\x63\x0f\xab\xed\xfc\xb2\xa3\xa2\xb3\x6f\x25\x67\x31\xd3\x56\xab\x9d\xa3\xe4\xd7\x35\xcf\x2f\xf4\x05\x3c\x71\x1a\xab\x0d\x26\xa5\xb8\x21\x82\x32\x38\x23\xa0\x86\x0e\xb1\x0b\xad\xbc\x5b\x22\x77\x4a\x3c\xb8\x08\x52\x9e\x9f\xed\xe9\xf2\x7d\xbb\x29\x9e\x7d\x8d\xc1\x7b\x0d\x06\x29\x7b\xe7\xa4\xb8\x26\x7e\xc5\xce\xcf\x48\x34\xf3\x09\x27\x86\x0e\x24\xdb\x7c\x22\xf7\xc6\x3a\x75\x6d\x6f\x74\xdd\x3f\xd5\x3b\x6f\xd8\x8a\x55\xa0\xdf\x56\x52\xb1\x9e\xe2\xed\xc1\x31\x3e\xf2\x0d\xba\x84\x1b\xd4\xaa\x24\xb1\xe9\x26\xdd\xc7\x45\x7a\xdc\x0b\x74\x57\x46\x75\xbf\x59\xbe\x7b\x15\xd2\xfd\x71\xeb\x39\x55\xdf\x8c\x8c\x09\x6e\x93\x22\xb5\xe0\x60\x72\x49\x6e\xdc\xde\xa8\x43\xad\xb1\x52\x78\x1f\xc2\xe0\xdb\xa0\x01\x17\x71\xa0\xab\xca\xad\xaa\x56\x29\x82\x34\xa5\xf1\x0e\x18\xa2\x2c\xcf\xf9\x82\x0a\xaa\x95\xfa\x46\xdd\xf0\xba\x64\x27\x17\xe7\xfb\xa1\x06\x3d\xe2\xac\xf1\x24\x75\x43\xf4\xca\x23\xad\x63\x4b\x2a\xa8\x27\xa0\x04\x36\x1b\x4b\x6b\x62\xe9\x65\x61\x53\xbd\xd2\x51\xc1\xe0\xcb\x72\x77\xd9\xdd\x5b\xea\x29\x61\x98\x8a\xe9\xc2\xf2\xca\x57\x6b\xa1\x72\x7c\x2f\x5f\xbe\x44\x53\xd8\xcb\x1f\x7e\xf8\x01\xcb\x4b\x96\xa2\x90\xf3\xd5\x07\xe1\xa9\x7f\x7a\xf5\x6a\xc4\xfe\xed\xe4\xc3\x7b\x2a\xff\x63\x10\x95\x04\x7b\x86\x75\x4f\x1b\x9b\x01\xfb\x97\xcb\x9f\x3e\xc6\xd2\x20\xf9\xaf\xb0\xad\x61\x7a\x23\x76\x96\xc4\x3f\xa5\x86\x2e\x6e\x67\x54\xd5\xd1\x32\x3e\x99\xe0\xc1\xf0\xf5\x49\xe8\xc2\xf9\xec\x71\x39\x9d\xf9\x72\x60\xee\x48\x54\x10\x98\xe5\x54\x72\x34\x0d\x7a\x64\x03\x8c\x33\x83\xbe\x02\x99\x84\xa1\x0c\x58\x25\xaf\x04\x9b\x18\x28\x0a\x16\xe1\xff\x6a\x61\x9c\x50\x4a\x45\xb0\xb1\xb3\xb8\x33\x46\x74\xc6\x7a\xb8\x0f\x0f\x50\xe7\x32\x44\xb9\xe9\x9e\xee\x90\x87\x6f\x25\xec\x62\x1f\x4b\x8a\x57\xd0\xad\xd6\xe3\x78\x64\xb2\xb1\x5e\x84\xd1\xe0\xd6\x11\x4a\x40\xa4\x13\xbc\xd2\x50\xce\x34\xec\x74\xe4\x62\x3e\xe4\x60\xb9\x10\xdb\xa7\xd2\x1b\x7c\xb1\x2f\x00\x2f\x12\xaa\x0f\xbc\x73\x75\xbd\x3c\x5e\xc4\xb7\xce\x70\x15\xf8\x58\x37\xd6\xfb\xb0\xe9\x77\x48\xc0\xb6\xda\x2f\x51\xc7\x97\xed\x80\x3c\xb9\x0b\x02\x71\x6f\x10\xd3\xdc\xdf\x0c\x3c\x21\x17\x25\x06\x4c\xf0\x62\xc6\xae\xc4\x72\x88\x74\x6b\xc1\x21\x9b\x07\x8b\x10\xb9\xb5\xc8\x2a\x4c\x25\xb5\xd6\x4e\xc3\x92\xf9\xc0\x80\x84\xfb\xf8\x6c\x20\x2f\x84\x1a\x92\x97\x08\x46\x54\x25\x96\x02\x8f\x55\x4d\x05\xd7\xfd\xd7\x54\x53\xe0\x7c\x25\x49\xc5\xdd\x37\x51\xba\x66\xe6\xb6\x37\xc7\x68\x08\x47\x07\x89\xbb\x35\x6a\xa5\x35\xd5\x56\x27\xe1\x0f\x5e\xc8\x3d\x3a\x73\x12\x51\x01\xd5\x8c\xa9\xb0\x22\x3d\xeb\x57\x29\x2c\x44\x96\x44\x63\x84\x6d\x68\x69\xb0\x2e\x69\xa3\x2a\x61\x0c\x93\x30\xc3\x39\xaf\xaf\x84\x07\x8c\xe1\xd5\x88\x5d\xb8\x41\x06\xfc\x2a\x84\x45\xbe\xa6\xb2\xb1\x7c\x99\x65\x07\xb9\x97\x1c\x8e\x46\x87\x48\xe0\xd7\xe4\x0a\xf5\x38\x1f\xbb\x61\xea\xee\x80\xa5\x9b\x1d\xc4\x0f\x7c\x61\x10\x19\xd8\x89\x7c\x80\x7c\xad\x21\x0b\xce\xce\x3c\x03\xe3\x9d\x41\x94\x56\xa7\xb3\x03\x00\xec\xae\xb8\xe5\xbb\xa0\x96\x77\xf2\x5b\xe4\x9f\xdd\xd1\xca\x77\xc2\x2a\xdf\x84\x54\x4e\x3b\x45\xb7\xad\x3f\x86\xf3\x1d\x20\xb6\xe7\xbd\x60\x5e\xfd\x27\x37\x52\x82\xdc\x91\xa1\xf4\x74\x92\x11\x09\xf4\xa9\x12\xdf\x94\x50\x78\x3e\x59\x57\x04\xd6\x27\x0b\x26\xf2\xb2\xa7\xa1\x58\x6c\xeb\xb1\xa5\xc1\x7e\xb5\x5c\x58\x6f\xf1\xb0\xfd\xe9\x23\x2e\xb6\x3f\xdd\x9c\x81\xed\x4f\xae\xb0\x25\x69\x49\x81\xe8\xa7\x51\xfc\xb0\xa4\x56\x03\x66\x77\xbc\x82\x23\xf6\x81\x98\x02\x1e\x46\x3e\x36\xba\x6a\x6c\xc8\x64\x5a\xc3\x31\xa0\x53\x8f\xf0\x8d\x29\xa5\xfe\xb1\x84\x7f\x00\xe7\x44\xb2\xdc\x97\x95\xe0\x67\xa7\x2b\xde\xb7\x18\xdd\x6f\x36\x98\xe4\x0e\x6b\xe8\x45\x89\x9d\xd7\xd1\x77\x10\x70\x27\x7c\x2c\x75\x26\xe3\x40\x24\x89\x35\x28\x40\x79\x71\x85\xea\x40\xf5\x9e\x62\x37\xab\x0d\x8d\x95\x0c\x13\x27\x17\xe7\x3b\x69\x00\x49\xfb\x0d\x3a\x40\xfa\xc4\x6f\x58\x0b\x38\x47\x2d\x20\x2d\xbb\x73\x16\x67\x4e\x26\x65\x47\x76\x9e\xbc\x18\xb9\x32\xec\x77\x8e\x58\xa6\x41\xa7\x39\x86\x1e\x1a\x7b\x22\x59\x4d\x70\xf7\xbc\xd7\x11\x2e\xf1\x53\x17\x39\x1f\x50\x7c\x84\xf5\xe8\x14\xdd\xd8\xfe\xac\x16\xbb\x83\xc9\xb2\x4b\x28\x6d\x83\xfa\x60\xa2\x58\x2e\x74\xf9\x1a\xab\x42\x40\xed\x38\x2c\x0a\x33\xc0\xda\x38\x66\x80\x0a\xa3\x93\x22\x12\x5f\x71\x9d\x98\xdc\x77\x96\x1b\x76\xaa\x72\x74\x97\x3a\x47\x6e\x03\x61\xe6\x17\x7d\x77\x91\xdd\xb1\x6c\x11\x4b\x58\xd3\x6e\x85\x50\xb2\x3d\xa5\x9e\xfc\x06\x9a\x62\x26\xe6\x1c\x31\xfc\xfc\xf4\x1c\x95\xb9\xa9\xa5\xb5\x02\xb1\x94\x44\x0d\x35\x5f\x07\x99\xcf\xe0\xe0\xfa\xd5\xc1\x2e\xe5\x60\xee\x58\xb1\x87\xc5\x5d\xd8\xc3\x62\x5c\x64\x22\x9b\x3b\xd7\xa0\x4b\x54\x00\xbc\xa9\x5a\x06\x09\xc7\x60\xae\x71\xf5\x1e\x7c\xe2\xfb\xd0\xa3\x76\xd5\x9f\x06\x41\x60\x78\xd6\x9f\x9e\xf5\xa7\xbd\xe8\x4f\x09\x63\xf1\x04\x67\x8d\x2e\x95\x06\x0c\x7b\x85\x2a\x26\x32\x25\x00\x3c\xee\x68\x7a\x55\x2a\x56\x4a\x47\x8b\x9b\xd3\x87\x0e\xbd\x82\x45\xe7\xb8\xb1\x93\xe1\x9f\x98\x50\x85\x2e\x71\xf3\x5d\xff\xb5\xb1\x20\xda\x44\x9d\x24\x1d\xcb\xdc\xbf\x2b\xb5\xda\x41\xdf\xbb\x6e\xdd\x4e\x74\xc0\xbb\x02\xdf\xed\x89\xc1\x47\xb6\x1e\x92\x89\x69\xfa\x01\x6b\x80\xf8\x7b\x74\x42\x62\xd5\xe9\x50\x04\x1f\x4a\xc7\x1e\xe1\x97\xa3\x62\xd1\x0c\xe8\x81\xd1\x5c\xcc\x75\xbd\x1c\x84\x87\xdc\x8f\x59\x2b\x7a\xe2\x18\x64\x82\xa2\xa9\x9d\x06\x58\x2d\xbf\x55\xe9\xc0\x2f\xd0\x03\x0b\x07\x61\x9f\xfa\x15\x0d\x4a\x3f\xf9\x91\x88\xa0\x62\xa0\xdf\xc7\x22\x4a\x93\x00\x79\x68\x06\x51\xed\x74\xdf\x0a\x75\xcd\xae\x79\xdd\x21\x12\x6f\xdd\xe7\x8e\xf2\x40\x29\xaf\xa5\xd9\xad\xde\x61\x6b\xea\x97\xc4\x34\xd0\xae\xa3\x1b\xbb\x68\x2c\x51\x4a\x7f\x2b\x7c\xca\x7c\xb8\x0d\x2d\xa1\xe8\xd5\xc1\x4e\xc3\xf8\x66\xea\x0b\xe3\x67\xc7\x2a\xc3\xf8\xb9\x6b\xad\xe1\xbc\x97\x9d\x8f\xcd\x5e\x0b\x8b\xfb\x8f\x3f\x16\xfb\xb8\x87\x91\x45\x46\x9c\x07\x2f\x9c\x3e\xd0\x45\xc3\x70\x93\x9d\xec\x36\x84\x50\xbf\xde\x64\x43\x3f\xfe\x86\xad\x35\xfb\xf5\xd9\x52\x7e\xe1\xef\xdc\x61\x7b\x49\xf5\x0c\x9e\xbd\xb5\x9d\x8e\xe0\xb3\xb7\xf6\xd9\x5b\xfb\xec\xad\x7d\xb6\x36\x3c\x5b\x1b\x9e\xbd\xb5\xec\xd9\x5b\xbb\x97\x35\xdc\x9f\xb7\x16\x45\xbd\x75\x3e\x5b\x12\xf6\xa2\xc3\xf6\x41\xfd\xb5\x54\xb8\xe7\xa4\x28\x74\xa3\xec\x67\x7d\x25\x3a\x3b\x1d\x5a\xf2\xff\x4a\x3f\x00\x80\xb0\x41\x1f\x58\x7d\xf8\xc1\x94\x83\xfe\x52\x49\x2f\xd9\x62\x17\xa9\x82\x37\xa5\x74\x92\xff\xce\xc7\xcc\x77\x90\x82\x13\xa9\x52\x94\xf1\x07\xba\xca\xd6\xad\xf5\x88\x9d\xb0\x5a\x14\x72\x21\xa9\x8c\x3c\xc7\xef\xf1\xe0\x85\xda\x08\xd2\x1a\x51\x4d\x08\xa3\x5e\xa5\xb5\x7e\xa2\xfc\x4e\x74\x70\xed\x6b\x90\x43\x69\x8f\x64\xee\x6b\x21\xd5\xe2\xef\x9e\xb5\xd1\x68\x3e\xa7\x3d\xa4\xe6\x15\x98\x4a\x56\x62\x08\x5e\xb6\x90\x94\x60\x7d\xdf\xd7\x5f\x7c\x5d\xc8\x1a\x0e\xef\xa5\x28\xb4\xea\x52\x53\x75\xc3\x06\xad\xf4\x14\xf9\x13\xd8\x46\x45\xc9\xca\xa6\x0e\x35\x53\xaf\x79\x25\x4b\x69\x97\xc1\x6b\x47\xe5\xb5\x38\xde\x98\xb0\x8d\x26\x2e\x23\xe3\x8b\x45\xad\x79\x31\x13\x26\x79\x1b\x0a\x28\x94\x44\x16\x62\xdf\xb1\x04\x1c\xc8\x28\xd0\xc6\x31\xc8\x6a\xc9\x6a\x6d\xbd\xe3\x7d\xc3\x0b\x3f\x27\x9d\x41\x73\xe4\x72\xb6\x5e\x82\x77\x5e\xa7\x5d\xe0\xa8\xe4\x24\xfd\xc3\x30\x5d\x95\x1e\xc2\xe4\x4f\x2f\x9d\x50\x58\xd0\x19\x74\xc4\x0f\x00\x2e\xac\x66\x95\x63\xd8\x8e\x20\x6e\x6e\xfc\xc7\xef\xd8\x4c\x37\xb5\x19\xa5\xa0\x03\xaf\xe0\x3b\xd4\xef\xbc\x50\x69\x59\x25\xb8\xb1\xec\xd5\x4b\x36\x97\xaa\x71\x7c\xaa\xf7\xb1\xe9\x2f\x07\x25\x12\xd0\xf7\xdf\x75\x6e\xd7\x57\xf6\xd9\x28\xf5\x2c\x10\x1b\x99\x44\x1f\xba\x49\x98\x18\x87\xc8\xe2\x2d\x41\x88\x88\x6e\xba\xda\xca\xea\x7b\xb8\x5f\xbf\x36\x7a\xbc\xb4\x7d\x92\x28\xa9\x45\x9e\x3d\xf9\xaf\xf4\x65\x17\xf0\x94\x88\x9d\x72\xeb\x4b\xef\xa5\xc2\xc5\x54\x1a\xbb\xa5\xbe\x45\xcc\xaf\xbc\xf5\xb1\xee\x6c\x65\xea\xb4\x83\x9e\xb9\x32\xd0\xc6\x4b\xc4\xde\xb6\x54\x14\x02\x8b\x59\x9e\xc5\x4a\x49\x4a\xe3\xb3\x5b\xbb\x7f\x64\xc0\x31\x7f\x40\xf6\x80\x9a\xde\x71\xaa\xdd\x84\x2e\x7f\x24\x7a\xcf\x15\x9b\xe5\xb7\xc0\x48\x35\x45\x90\xf3\x79\x53\x59\xb9\xa8\xe2\xbc\x3f\xf9\x06\x44\xc8\x53\x9b\x1b\x4f\xcc\x44\x1c\x13\x8b\x11\x6d\x0a\xec\x93\x47\xa1\x2f\xa1\x2c\x62\x75\xd7\x8e\x1f\x2c\x78\xcd\xc3\xe2\x41\x25\x5d\x73\x4c\xe6\x3b\x0e\x1e\x45\x82\xc3\x74\xad\x78\x15\x47\x9c\x78\x91\xf6\x79\x68\xac\x50\x5c\x75\x30\x55\xe7\xf0\x5c\xd0\x88\xe9\x9b\x10\x4c\x86\x65\x50\x5a\xa7\x85\x84\x9a\x37\xbc\xb8\x12\xaa\xc4\xa2\x51\x30\xed\x72\xa9\xf8\x9c\xd0\xb6\x92\x7a\xdc\xad\xf6\x66\x40\x86\x09\x4c\xdf\xf3\x69\xc6\xc8\x75\xf7\xb9\x06\x8d\xe9\x0d\x65\xe3\x9a\x6c\xbb\xe7\x06\x4d\x36\xb5\xbc\x2e\x84\xe7\xff\xae\xdd\x3e\x87\x7e\xdd\x21\x97\x7e\x65\xf0\x7e\x7b\x92\xf3\x0b\xe4\x3e\x58\xce\x01\x54\x8b\x57\xee\x6a\x2f\x43\xce\x68\x6b\x73\xc7\xcb\xfd\x56\xbd\xa9\xc7\x7d\x32\x7f\x0f\xeb\x71\x99\x5f\xe2\x4f\xbc\xd4\x86\xbd\xa9\x74\x71\xc5\xce\x04\x08\x5d\xf7\x59\x9e\xa5\x1e\x97\x8f\x09\xe1\x3d\xe7\xd3\x6d\x7e\xb6\x21\x9b\x6b\x25\xad\xae\x6f\xa7\x17\x0f\x57\x76\xf2\x19\xee\x79\x23\x42\x95\x3b\xcd\x4f\x19\xec\xd9\x1d\xb7\xbe\x1b\x0f\x8d\x82\x7a\x06\xb7\x13\xbf\xa2\x2a\x60\x3b\xde\xb5\x3f\xcc\xf4\xcd\xd0\xea\x61\x63\xc4\x50\x76\x70\xe8\xf6\x98\xe6\x95\x58\x82\x17\xbb\xe7\x44\xa9\x59\xa6\x33\x58\x0d\x16\x28\xf8\xde\x71\xee\x4f\x6f\xce\xbe\x18\x51\x8f\x52\x19\xf0\x85\xb0\xc5\x8b\x42\x2c\x66\x2f\xa8\x87\x27\xb9\x28\x9e\x88\xf4\x5d\x15\xdf\x0e\xd9\x4c\xa1\xab\x8a\x12\xb3\xf5\x84\x9d\x8a\xc5\x2c\x74\xfc\xd0\xb3\x7e\x3c\x44\xe0\x85\xd6\x7d\x81\x50\x0f\x5d\x9b\xfc\x12\xc1\x37\x78\x87\x92\xc3\x54\x8f\xfb\x15\xa1\x78\xa8\xe3\xf3\xa4\x4b\x6d\xde\xe3\xe2\xdc\x2f\x9c\xf2\x61\x86\xa7\x9c\xc6\x7b\xe6\x60\xc9\x3e\x62\x24\x23\x41\xe7\x13\x14\xba\x4b\x51\x32\x7d\x2d\xea\x5a\x96\xc2\xb0\x40\x83\x52\x2d\x55\x56\x0f\xbd\x6e\xcf\xb8\xcd\x8f\x8e\xdb\xbc\x83\x3a\x74\x08\xfa\x50\x46\xa6\xe0\x9b\x15\x32\xc5\xcb\xb9\x54\x4f\x8e\x50\x99\x82\x57\xe2\xfc\xa7\x1e\xfa\x07\xb5\xc8\x55\x90\x4b\xfa\x32\xc1\x4f\xdb\x82\x4a\xf6\xd7\x70\x6e\x98\xd2\xe5\x36\x93\xea\x3d\x28\x12\x53\x6e\xc5\xcd\x56\x76\x38\x8c\x84\x6a\xfb\x93\x20\x9c\x3e\xa6\xca\xf1\x24\x30\x02\x93\x33\x8f\xa0\x67\xfb\x64\xaa\xb4\x6b\x7d\x8d\x93\xd8\x2a\x85\xdf\x6d\x83\xee\xfa\x13\x7c\x72\x71\xce\x7e\xc4\xc7\xf7\x8b\x5e\x58\x6b\x8b\x62\xe0\x99\x9e\x73\xd9\xb7\xc8\x46\xbb\x79\x1b\x7d\x35\x9d\xc2\x45\x78\x96\xd1\xc3\x49\x01\x97\x89\x9c\x36\x4e\xa7\x23\x3d\xec\x49\x01\xcc\xad\x88\x2e\x4f\x17\x60\xee\xee\xd5\x20\x12\x93\x93\x8f\x8b\x8c\x12\x8b\xdf\x4a\x60\x25\xc1\x07\xca\x8c\x50\x46\x82\x43\x26\xf1\x8a\x53\xa5\x3f\x2c\x2d\x89\x41\x90\x28\xe2\x0c\xd8\x7b\x3d\x95\xca\xdf\x5e\x4d\xfe\xba\x09\x97\x55\xd7\xc5\x78\x96\x49\x1e\x5d\x26\x31\xa6\x7a\xab\xf8\xb8\xea\x12\x6e\x90\x1f\xb5\xd0\x90\xbd\xab\xf8\x94\x09\xf8\xe3\x45\x29\x8d\xfb\x3f\xbb\xbc\x7c\x0f\x46\xf8\x46\x79\x89\x19\x0c\xd4\x44\xfb\x42\x92\x02\x5e\xc4\xfd\xde\x1d\x24\x3d\x3b\xa0\xff\x25\x2d\x99\x54\xa5\x1b\x78\x52\x0a\x0e\x83\xa4\xe0\x09\xc4\x43\x0c\x31\xbf\x18\x36\x30\x16\xec\xf3\x4c\x16\x57\x17\x89\xdd\x5d\xd7\xee\x3b\x95\x7c\x95\x31\xb0\xf6\x6f\xfb\xa4\x96\x34\xd4\x8b\xfe\xaa\x71\xd2\xd2\xf3\x01\x4f\x30\x2e\x69\xfe\xf0\x1b\x37\x46\x17\x32\xfa\x5c\xc0\x46\x13\x99\x43\x09\xcc\x61\xbf\x73\x02\xf1\xa0\xef\x74\x50\xfe\x58\xc3\xd1\xfc\x6e\xfa\xea\xb8\x26\xe5\x60\x52\xf9\x59\xef\x75\x0a\x78\x66\x76\x80\x46\x8f\x0d\x57\xa1\xd1\xbd\x30\xdc\x72\x2c\xf8\x30\x75\xda\x3c\x2f\x88\xf9\xda\x9c\x2b\xdb\x17\x20\xd2\x09\x9a\x70\x6f\x13\xef\x92\xb6\xb1\x4e\x0d\x6f\x79\x13\xf1\x3b\x72\x35\xc0\x9d\x5b\xe8\x45\x53\x61\x3c\xc7\xdd\xf1\xdd\xbd\xcd\x18\xdf\xb3\x27\xd7\xc3\x43\xa0\x96\x1e\xa6\x81\xbd\xfd\x23\x9d\x7f\x1b\xd8\xa5\x89\x70\xf7\xf2\xfb\xef\xbe\xfb\xd6\xd1\x4c\xbb\xaa\xe0\xf7\x01\x67\xda\xd1\x44\xbb\x26\xbf\xe8\xfc\x39\xbf\xe8\xf7\x9b\x5f\x74\xff\x28\xb4\x7b\xce\x20\xea\x19\x9b\xdb\x2f\x2e\xb7\x7b\x8e\x50\xe7\xe8\xdd\xbe\x91\xbb\x3d\xb2\x80\xf6\x9b\xfb\xd3\x3b\x96\xb5\x4f\x9e\xcf\x73\x76\xcf\x6f\x35\xbb\x67\x97\x58\xd6\xfe\x99\x3c\x7d\x62\x58\x7f\x8b\x59\x3b\x3d\x2e\x67\xf7\xec\x92\x3b\xe7\x94\xf4\x07\x01\xec\x6f\x4f\xdb\xa5\x20\x55\x6c\xb9\x56\x83\xf4\x49\xe5\x1e\x7b\xec\xf0\xd0\x24\xd0\x62\x56\xbb\x1b\xf8\x20\x0a\x09\xeb\xa1\x8d\x61\xf7\xba\x4f\x6d\x48\x6a\xf3\xd3\x65\xcb\x31\x13\xbe\x7e\x1c\x7f\xcc\xef\xc1\xe1\xf1\x5c\xd3\xe5\x1b\x31\xb9\x9b\x0c\xad\xc5\x5b\x2b\x80\x04\x00\x23\xd7\xe3\x14\x25\x32\x5e\x9d\x93\x8b\x73\xa7\x83\x43\x1a\x11\xaf\xcc\x88\xad\xe1\xf3\xde\x5c\x4a\x72\x81\xe7\xef\xdc\x5a\x31\x5f\xd8\xee\xbb\xfe\x6c\x71\x7f\x74\x8b\xfb\x1e\x2d\x80\xb3\x66\xce\xd5\xd0\xdd\x28\xb0\xb9\x67\xde\xba\x16\x65\x1e\x31\xba\x3b\xc8\x9e\xc0\x02\x02\xc9\x05\x79\x61\x63\x9e\x94\xb9\xbc\x1f\xb3\x27\xf4\xbd\xf3\xcc\x91\xaf\xb6\x6e\x5a\xa1\x57\x02\x5e\x69\x3a\x61\x15\xfc\xa5\x4a\x98\x73\xa6\x86\xdb\x99\x40\x1e\x7e\x01\x09\x39\xf1\xa9\x5c\x92\x46\x51\x9a\x57\x95\xbe\xc1\x77\xa7\x7c\xcd\xad\xbe\x1b\x0b\x65\x9a\x8d\x05\x9b\x4b\xa7\xa3\x93\x81\x35\x1d\x0e\xba\x4c\x9d\x44\x2e\x6a\x14\x78\x6b\x72\xb6\x5d\x0a\x4b\x1b\x05\x1b\xed\xf4\x5b\x85\x01\xe1\xee\xdf\x3e\xaa\x08\xde\xed\x69\xc2\x58\xcc\xf8\xb5\xd4\x4d\x8d\xad\xad\x66\x07\xf4\x13\xf0\x86\xa5\x6e\x82\xbd\x0b\x8b\x61\x86\xd9\x99\x35\xeb\xf4\x31\xfe\x08\xaa\x40\xa9\xbd\x69\x62\x28\xbe\x4a\x63\x57\xe7\xe2\x97\xc8\xc3\xe0\xed\xeb\xdc\x5c\x9b\x85\x63\x0b\xbd\xab\xda\x65\xed\x72\x79\xe5\xfa\x12\x7e\xfa\x86\x6a\xda\x6d\x45\x77\x7d\x30\x11\xe8\x77\x28\xfe\x04\x4f\x58\x25\x8b\x65\xef\x72\x6f\xad\xd6\x9e\x68\x9b\xe0\x43\x73\xdf\xb3\x37\xdc\x88\x92\x7d\xe0\x8a\x4f\x51\xdf\x3b\xba\xbc\x78\xf3\xe1\xd8\xed\x2b\xe8\x93\xe7\x67\x6b\x1d\x6d\x97\x69\xe7\x1f\xf7\x99\x2f\xb2\x32\xf1\x1d\x58\xd5\x4a\xfb\x1d\x27\xbf\xd7\x44\x18\x16\xf8\x50\x37\xb0\xde\x35\x2c\xe8\xa2\x9d\xc2\xda\xae\xf9\xd9\x22\x30\xd7\xf3\xf2\x8e\x55\x3e\xa5\x32\x96\x57\xd5\x45\xc5\xd5\xc9\x62\x51\xeb\xeb\xf5\xda\x78\x36\x56\xff\xa0\x1f\x29\x86\x79\xf8\x2f\x17\xb8\xf4\xe0\xc2\x56\xec\x3c\xf6\x3f\x62\xe7\x36\x68\xe1\x5a\x01\x4b\x3d\x38\x69\xac\x9e\x73\x2b\x8b\x03\xa7\xac\x1f\x7c\xe0\xaa\xe1\xd5\xda\xa0\xab\x5b\xa7\xb1\x49\x44\xbc\xb5\xd1\x66\xe8\xba\x0e\xcd\x6e\x95\x35\x6e\x6f\x6f\x79\xed\xa8\xd3\xe9\xe5\xcf\xbd\xda\x1a\xcb\x6d\xb3\x42\x85\x6f\xe1\x0c\x9b\x79\xc1\x90\x55\xdc\xd8\x2f\x8b\xd2\x5d\xfa\xd6\xaf\xb7\x11\xfc\x82\x5b\x5e\xe9\xe9\x5f\x04\xaf\xd6\x9f\xf0\xec\x9c\x9c\xa6\x4f\x7b\x03\x14\x39\xfc\x9b\x71\x78\xf0\xd0\x30\x27\x60\xfb\x1c\xf8\x5a\x54\xe2\x9a\x2b\xeb\x9b\x63\x71\x75\x73\x48\xf3\x87\x53\x24\xa3\xf1\xb5\x14\x56\xd4\x73\xa9\xf2\x3e\x2f\xe1\xd9\x53\xad\x4a\x89\x66\x47\x30\xa8\x61\x8b\xbc\xdf\xcd\x47\x6d\x93\xa7\xe1\x16\xdf\x42\x8e\xae\x99\x8c\x27\x5f\x0a\x7c\x6c\x4c\xf2\xe5\x0c\xbf\x04\x4f\x7b\x36\xb6\x95\x95\x62\x57\xca\x09\x86\x80\x23\xb2\x9e\x6c\x6d\x95\x13\xb6\xc9\x07\x43\xbf\xc7\x38\x84\xcd\x81\xa3\x43\x1a\xf7\x26\x1f\xc4\x6d\x47\x0c\x3f\xdb\x25\x8b\xf6\x50\x36\xd3\xd4\x75\xe7\x2e\x34\xc3\x4c\x96\x56\x41\xfe\xec\xa1\xcd\x3c\xa0\x93\xe0\xd5\x4d\x46\xea\x8a\x6a\x9f\xd3\xda\x88\xc1\xbe\xa2\xca\x76\x90\x18\xb7\x32\xad\x8e\xe0\xf2\xb9\x62\x7d\x4e\xf1\x7f\x35\xa9\x22\x9c\x2d\xa4\x40\xf0\x13\xae\x68\xb1\x80\xb3\x08\x5e\xd2\x97\x8e\x83\x39\x95\x10\x7e\x1b\x90\x33\x1c\x8d\xcb\x14\x6b\xe1\x0d\xd4\x1c\xc1\x3f\xc0\x71\xf1\xe2\x47\x4d\x46\x5e\x4a\xd2\x75\x34\x00\x38\xf9\x80\x99\xa6\x98\x31\x6e\xdc\xd0\xdc\x81\x76\x37\x5e\x8c\xe6\x5c\xc9\x89\x30\x76\x14\x50\x82\xcd\xbf\xff\xf1\x3f\x47\xec\x9d\xae\x19\x05\xaa\x0f\x3c\xaa\x06\x8d\x33\x9e\x0b\x69\x70\x32\xa1\x6d\xd4\x5a\x17\xba\xa4\x41\xdf\xc0\x60\x2d\xbf\x72\x3c\x0c\x07\xdb\x08\x70\x5d\xbc\x66\x07\x4e\x4c\x4c\x5e\xfd\x3f\x8e\x2d\xfd\xef\x01\x3b\xba\x01\xa6\x7d\xe0\xfe\x3c\xc0\x17\x86\xb0\xc9\x54\xa9\x8e\x2f\xc6\x64\xc9\x5a\x4e\xa7\xa2\x46\xf5\x91\x41\x52\xe1\x31\xa1\x82\x28\x9d\x3c\xec\x9d\xd2\x51\xdd\x6c\x0f\xe4\xdf\xff\xf8\x9f\x07\xec\x28\x9f\x17\x93\xaa\x14\x5f\xd9\x1f\xd1\xba\x2c\x8d\x9b\xe3\x31\x39\x73\xcc\x52\x59\xfe\xd5\xf5\x59\xcc\xb4\x11\x0a\x55\x79\xab\xd9\x8c\x5f\x0b\x66\xb4\xd3\x80\x45\x55\x0d\xc9\x96\xce\x6e\x38\x20\xb5\xf8\xa5\x84\xc4\x7a\xb6\xe0\xb5\xcd\x8e\xc4\x88\x2c\x24\xf0\x36\xb7\x6d\x53\xe5\x3d\xd3\x13\xa9\xc8\x7f\x45\x9e\x33\xb7\xe7\x90\x18\x8a\x9b\x64\x35\x2b\x66\x5c\x4d\x43\x6e\xfa\xa4\xb1\x4d\x2d\xb6\xb8\x7e\x3a\xde\x81\x2b\xa9\x7a\xa5\x30\xff\x55\xaa\x76\x50\xc1\x7a\xbb\xd2\x54\x5a\x9f\x15\x41\xb1\x8a\x76\xf9\xc2\xed\x42\x2d\xc7\x8d\xd5\xb5\x79\x51\x8a\x6b\x51\xbd\x30\x72\x3a\xe4\x75\x31\x93\x56\x14\x6e\x5a\x2f\xf8\x42\x0e\x0b\xad\xdc\x8e\x03\x2a\xc3\xbc\xfc\x03\x94\x37\x1d\xba\xa1\x6e\x41\x9d\xee\x38\xe9\xed\x46\xb5\x47\x35\xa6\xed\x6d\x8e\x1d\xec\x41\xab\x13\x45\xdb\xcc\x03\xcc\x16\x0c\x21\x2f\xf6\x32\x59\x0f\x9a\xdc\x9f\xc7\x1c\x12\x0e\x78\xd1\xee\xc3\x5d\x3b\x0c\x20\x81\x5b\x99\x51\xca\x39\x2f\x91\x94\x72\xb5\xbc\xf7\xc3\xef\x96\x14\xe0\xf2\x8b\xe5\x10\xba\xd0\xd5\x90\xab\xd2\xfd\x1b\x13\x76\x8a\xe5\x5e\xd6\xb0\x91\xbd\x08\xc1\x97\xf3\xb3\x87\xb9\x12\x8d\xdc\xc3\xad\x27\x79\xad\xa3\x10\x85\xa2\x2a\x06\x6a\xd4\x8d\xf0\x4c\x33\x17\x50\xa5\xf1\xbd\xfe\x5f\xf2\xbf\x04\xb4\xb3\x6d\x22\xd5\xed\x5e\x93\x44\x76\xec\x38\xde\xf7\xb1\x45\x6a\x93\x83\xc0\x2b\x6e\x2c\x41\x6b\x79\x0c\x82\x6c\x1a\x5e\x41\x01\x06\xb3\xd9\x31\xdc\xe9\x0c\xf9\x78\x01\x37\x90\xe1\x5a\xcc\xa5\x22\x28\x25\xdb\x15\xa8\xa8\xbf\x64\x75\xd0\x70\x52\x56\x18\xcb\xf8\x35\x97\x15\x58\xe7\xf5\xd8\x88\xfa\x1a\x0b\x52\x11\xd4\x20\x6f\xeb\x59\x54\x73\x02\xc5\xa8\x07\xd2\x7c\xfc\x1c\x56\x77\xe5\xb6\x09\x80\x36\xd4\x1a\xfd\xc6\x51\xef\x45\xef\x41\xf5\x72\xe3\xcf\xee\x0d\x3b\xaa\x31\xee\xfc\xfd\x45\xf0\xda\x8e\x05\xb7\x9f\xe5\x6d\x7c\x77\xe5\x48\x67\xed\x42\x29\xf7\x70\xa0\x6f\x04\x9b\x6a\xeb\x44\xac\x06\xce\x3e\xca\xa4\x08\xea\x13\x0e\xda\x7d\x9f\xe8\x38\xcb\xcf\x35\x87\x14\x1f\xad\x7a\x4e\x33\x6f\xb8\x3a\x4f\x92\x8e\xe9\x24\x59\x7c\x1a\x81\x34\xb4\x12\xb4\x77\xe8\xcd\x00\x0a\xf4\x30\x53\x9e\x0b\x63\x6e\x05\xd8\xc8\xa3\x0b\xf1\x69\xbc\xca\x2d\xd7\xda\xdc\xff\x86\x69\x21\x4e\x80\x2e\x85\xe5\xb2\xf2\x57\x19\x97\x22\xac\xd2\x36\xea\x7a\xeb\x04\x6b\xc1\xcd\x6d\x02\x42\x36\xea\x4f\xf0\x30\x0e\x5a\x2b\x31\xbc\xd1\x75\xc9\x4e\xf9\x5c\x54\xa7\xdc\x08\xea\x2b\x4d\xd1\xc3\x3d\x3a\x34\x7b\x1d\xf2\x7a\xdb\xd7\x86\x21\xa3\xf1\x27\x9a\x84\xe1\xaf\xa8\x62\xe1\x00\x07\xde\x04\xf9\xb9\x6e\xc4\x80\xbd\x73\xdc\x6b\xc0\xbe\xa8\x2b\xa5\x6f\xee\x36\x56\x7b\xab\x17\x24\x1b\x69\x1a\xfe\xe1\x61\x75\x32\x83\x4f\x18\xee\x8e\x23\x22\x82\xbf\xc1\xd4\x98\x33\x9b\xf0\xa8\x1f\x91\xfb\xe7\x8a\x09\xca\x29\x8a\xb5\x9e\xd6\xc2\x20\x72\xcd\x5a\x90\xc4\xae\x26\xe7\x1f\x85\xa2\xe4\xbe\xad\xc3\x3b\x5f\xd7\xca\x8f\xd4\xf3\xb5\x69\xfc\x85\xf6\x9b\x5e\xb6\xa8\xd6\x8a\x1a\xb7\x47\x04\x26\x03\xdd\x60\x7c\xda\x34\xc2\xf5\x46\xa7\x84\xeb\x25\xcf\xa2\x50\x72\x9b\x75\xd4\xcf\xee\xf4\xf2\xe7\xcd\x8b\xbd\x91\xf7\x6d\xe3\x4f\xdb\xcd\x52\x77\x35\x48\x6d\xbd\x33\x5b\x8d\x50\xcf\xe6\xa7\x67\xf3\xd3\xb7\x64\x7e\xda\x7a\xe2\x6f\x33\x39\x7d\x1b\xc6\xa6\xad\x53\xbc\xcd\xc0\xf4\x24\x4d\x4b\x9d\x66\x74\xab\x39\xe9\xc9\x1a\x92\xb6\x4e\xad\xa3\xf1\xe8\xf7\x63\x36\xda\xba\x62\xb7\x98\x8a\x9e\xa0\x91\xa8\x8b\x40\x26\xca\x2e\x62\xe2\x79\xf2\x70\x2a\x28\xc6\x72\x96\xa1\x3b\x1f\x94\x93\x8a\x33\xbb\x4a\x8b\x4e\x80\xdb\x3a\xb6\x43\x1a\x5c\x77\xd9\x8b\x04\x46\x2a\xf6\xb8\x32\x58\x76\xf6\xf6\xe2\xd3\xdb\xd3\x93\xcf\x6f\xcf\xda\xf2\xdd\xba\x95\xde\x22\x89\xdd\x6e\x83\x18\x26\x92\xd8\x86\x07\x1c\x41\xde\xf0\x93\x3b\x03\x1b\x7e\x6a\x1a\xb9\xae\xd5\xdd\xe5\xc2\x3b\x71\xb9\x3b\xf1\x8f\xed\xb7\xb3\xeb\xf5\xfc\x82\x81\x53\x9c\x62\xce\x9c\xdc\x33\xd3\x55\x69\x7c\xdc\xea\xf9\x59\xc8\xa4\x92\xaa\xa8\x9a\xd2\x09\x17\x5f\xbe\x9c\x9f\x99\x11\x63\x6f\x44\xc1\x1b\x03\x56\x98\x52\xab\x43\xcb\x7e\xfa\xf8\xfe\xdf\x20\x1e\x1b\x9e\x18\x04\x5c\x13\x40\xe5\x95\x1c\x81\x85\x2d\xc2\xb5\xb1\x37\x02\x05\x15\x78\x73\xc1\x17\x8e\x8a\x19\xac\x5c\x61\x41\x16\x99\x89\x6a\xe1\x28\xe6\x95\x60\x11\x41\xd5\x75\x1c\x2b\xcc\xfb\xf0\xc9\xa9\xb0\x98\x75\x75\x5b\x84\xe4\xad\xab\xb6\xc5\xe2\x7a\x07\x5b\x6b\xa6\x3e\x92\x36\x7e\xc3\x0d\x59\xac\xd6\x8e\x76\xcb\xfe\x6e\xb7\xcf\x6c\x36\x71\x6c\x30\x6e\x20\x79\x86\xbf\x56\xc6\xec\x06\x1b\xed\x18\x18\x44\x22\x6d\x67\x6b\xea\xe6\x30\xa0\xf5\x75\x00\x56\x6c\x19\xa2\xbd\xc8\xd9\x8b\x43\x44\x76\x32\xe4\x6e\x63\x81\x22\x22\x65\x56\xfb\x93\xe2\xe7\xf2\xef\x9a\x71\xa8\xfe\x1a\xc7\x4b\x16\x19\xf6\x3f\xff\xfb\x0f\xff\xf0\xff\x03\x00\x00\xff\xff\x05\x75\x02\xbb\xcd\xa1\x0c\x00") -func olmManifests0260CrdsYamlBytes() ([]byte, error) { +func olmManifests0270CrdsYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0260CrdsYaml, - "olm-manifests/0.26.0-crds.yaml", + _olmManifests0270CrdsYaml, + "olm-manifests/0.27.0-crds.yaml", ) } -func olmManifests0260CrdsYaml() (*asset, error) { - bytes, err := olmManifests0260CrdsYamlBytes() +func olmManifests0270CrdsYaml() (*asset, error) { + bytes, err := olmManifests0270CrdsYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.26.0-crds.yaml", size: 825540, mode: os.FileMode(420), modTime: time.Unix(1709244469, 0)} + info := bindataFileInfo{name: "olm-manifests/0.27.0-crds.yaml", size: 827853, mode: os.FileMode(420), modTime: time.Unix(1730300878, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _olmManifests0260OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x6d\x6f\x1b\xb9\xf1\x7f\xaf\x4f\x31\x10\xfe\x80\xff\x2d\xb2\x92\xe5\xc4\xae\xb3\x40\x80\x73\x9d\xdc\xe5\x50\xdb\x11\x6c\xa7\x6f\x0e\x41\xc1\xe5\x8e\x56\xac\xf9\xb0\x47\x72\xa5\xe8\x8a\x7e\xf7\x82\xcb\x7d\x16\x25\xcb\x4e\xee\x52\x14\xe1\x1b\x49\x24\x87\x33\x9c\x99\x9d\x87\x9f\x36\x8a\xa2\x11\xc9\xd9\xdf\x51\x1b\xa6\x64\x0c\xab\xd9\xe8\x81\xc9\x34\x86\x1b\x22\xd0\xe4\x84\xe2\x48\xa0\x25\x29\xb1\x24\x1e\x01\x48\x22\x30\x06\xc5\xc5\x08\x80\x93\x04\xb9\x71\xb3\x00\xb9\x4a\x23\x83\xb4\xd0\xcc\x6e\x26\x0f\x45\x82\x5a\xa2\x45\x33\x61\x6a\x8a\x72\xa1\x34\xc5\x18\x34\x1a\xab\x19\xb5\x98\x1e\x48\x12\xad\x6a\xa9\x38\xb1\x68\xec\x63\x64\xa4\x48\x99\x7d\x0a\x9f\x92\xe0\xa9\x5c\xd6\x44\xcb\xa7\x30\x71\xfb\xb7\x78\x3c\x4f\xed\x39\x6a\x62\x95\x36\xcf\x50\x7e\x42\x0c\x72\x26\xf1\xbb\xea\x9d\xea\xbd\xae\xef\x50\xaf\x18\xc5\x0b\x4a\x55\x21\xed\xd0\x1e\x41\xb7\x8f\x6a\x1b\x44\xc6\x13\x93\x8a\xd8\xef\x29\x2d\xe7\x9f\x8f\xa1\x85\x75\x42\xe8\x84\x14\x76\xa9\x34\xfb\x8d\x58\xa6\xe4\xe4\xe1\xbc\x94\xb2\xb1\xfd\x25\x2f\x8c\x45\x7d\xab\x78\xc8\xfa\x66\x63\x2c\x8a\x98\x2a\x69\xb5\xe2\x1c\x75\xdc\xc8\xc2\xd9\x02\xe9\x86\x72\x8c\x04\x91\x24\x43\x3d\xd2\x05\x47\x13\x8f\x22\x20\x39\xfb\x49\xab\x22\x37\x31\xfc\x32\xfe\xf3\xf8\xd3\x08\x9c\xfe\x54\xa1\x29\x76\xa6\x56\xa8\x93\xf2\xe7\x9a\x58\xba\x1c\xbf\x80\x31\x67\xc6\xba\xcf\x0c\xcb\x0f\xaa\x91\x58\x74\xdf\x8a\x3c\xad\xbe\xe5\xf5\xde\x14\x39\xfa\x29\xff\x8d\x3a\xf1\xa8\xbb\xa2\x9b\x43\x43\x09\xaf\x48\x12\x26\xd3\xf1\xa7\x51\x04\x52\xc9\xdb\x4a\x8c\x8f\xb7\x57\x21\x49\xdc\xcf\x2f\xd3\xe1\x5f\x99\x4c\x99\xcc\x1e\x33\x64\xe2\xb7\x45\xce\x68\x5a\x71\xbc\xc5\x85\xdb\x59\x2b\x6e\x0f\xd7\x11\xc0\xb6\xe1\x9e\x65\x2e\x53\x24\xff\x44\x6a\x4b\x8b\x05\x7d\xf3\xab\xb8\x60\x13\x3f\x26\x54\x69\x54\xee\x43\xb4\x9a\xfb\x70\x75\x7d\xa9\xe4\x82\x85\x14\x46\xfd\x05\xb7\x4e\x24\x79\x6e\xda\x13\xde\x62\xce\xd5\x46\xa0\xb4\x8f\xe8\x7c\x5b\xd4\x7e\x40\x23\x79\x3e\x20\x30\x39\x52\xb7\x66\xac\x26\x16\xb3\x8d\xdf\x67\x37\x39\xc6\x70\xab\x38\x67\x32\xfb\x58\x3a\x66\xe9\xdf\x39\x67\x94\x98\x18\x66\x8e\x02\x9d\x2f\x2a\xed\x29\x84\xf3\xd9\xab\x0e\xab\x10\x33\x00\x8b\x22\x77\x3e\x5b\x11\x75\x2e\xe3\x06\xef\xd1\x87\x4f\x00\xa8\x45\x2e\xbf\x57\xf1\xe9\x52\x49\x8b\x9f\x6d\x4b\xaa\x0b\x79\x61\x6e\x94\xbc\x55\xca\xc6\x60\x75\x81\xcd\x92\x41\x4a\x95\xc8\xe7\x5a\x2d\x18\xc7\x96\xa4\xb9\x76\x21\x2d\x13\xf8\x16\x17\xa4\xe0\xb6\x61\xd4\x75\x9b\x9b\x03\x7c\xc6\x0d\xe7\xa4\x84\x49\xd4\x9d\x4b\x45\x61\xbb\x75\xa4\x0b\xdf\xa8\x54\x08\xe7\x6a\x3d\xd7\x6c\xc5\x38\x66\xf8\xce\x07\x80\xd2\x61\x16\x84\x1b\xec\xed\xa5\x24\x27\x09\xe3\xcc\x32\x34\xfd\x53\x00\x52\xad\xf2\x18\x7e\x81\xf1\xc5\xd5\xd5\x18\x3e\x75\x56\xa9\x12\x82\xc8\xb4\x4b\x10\xc1\x34\x61\x72\xea\xbd\xa9\x91\x44\x67\xa6\xbf\x29\x8a\x1a\xd7\xeb\xcd\xff\xdf\xff\x7f\x98\xbf\xbb\xbd\xb8\xff\x70\xfb\x8f\x9b\x8b\xeb\x77\x77\xf3\x8b\xcb\x77\x7f\x1a\x50\xae\x35\xb3\x78\x67\x89\x2d\x8c\x53\x6d\x6f\x75\x3c\xee\xfc\x64\x82\x64\x18\xc3\xaf\x05\xd9\xb8\xe8\xd4\x68\x7f\xa1\x89\xc0\xb5\xd2\x0f\x4e\xcc\x1f\xcc\x92\x9c\x9c\x9e\xc5\x2f\x8f\x5f\x9d\xcf\xce\x5e\xbe\xc6\xf3\xd7\xe4\x98\x26\x27\xe7\x27\x0b\x3a\x3b\x3f\x3d\xa5\xb3\x64\x91\xa6\xf8\xfa\x0c\xe9\x29\xe2\xcb\xb3\x74\x46\xcf\x4e\x67\xf4\x24\x3d\x4e\xff\xf2\x9a\x9e\xa7\x27\xaf\x5e\xe3\x4b\x4c\x4f\x87\x7c\xe7\x05\xe7\x73\xc5\x19\xdd\xc4\xf0\xf3\xe2\x46\xd9\xb9\x46\x83\x8d\xb1\xa1\xcc\x99\xda\x0e\xb4\x1d\xb5\x5e\x30\x57\xda\xc6\x70\x7e\x7c\x7e\x3c\xb0\x87\xf7\x08\x81\x2e\xfd\x9a\xce\x1a\x67\x2b\x94\x68\xcc\x5c\xab\x04\xfb\xc7\x2e\xad\xcd\x7f\x42\x3b\xb4\x6c\x4e\xec\x32\x86\xe9\x12\x09\xb7\xcb\xdf\x86\x8b\xbb\xf8\x1b\xba\x44\x27\xc1\xfb\xfb\xfb\x79\x67\x49\x23\x49\xd9\x37\xe4\x6f\x51\x0b\x26\x4b\x0f\xbf\x46\x63\x9c\x09\x2a\xf5\xff\x48\x38\x4f\x08\x7d\xb8\x57\x57\x2a\x33\x1f\xe4\x3b\xad\x7b\x4f\x11\xca\x55\xdf\x3b\xbd\x86\xb7\x3d\xb1\x27\xc8\x8a\xf0\x02\x7f\xd4\x4a\x0c\x6f\xb5\x60\xc8\xd3\x2a\x7f\x05\x56\xe6\xe5\xa5\xeb\x68\x36\x09\x3f\x07\x01\x09\xb6\x99\xef\x0c\x0b\x6d\x6d\xd1\x23\xd2\xf8\x6b\x81\x66\xe8\x72\x00\x34\x2f\x62\x98\x1d\x8b\xc1\xb4\x40\xa1\xf4\x26\x86\xd9\xd9\xf1\x35\xab\xd6\xa4\x4a\xf1\xae\x17\xcb\xdd\xe8\xd7\x7b\xca\xc4\xc0\x99\x2c\x3e\x7f\x49\xa2\xa2\xc4\x12\xae\xb2\xa7\x25\xab\x2d\xa2\xdf\x3b\x61\x05\xa4\x7c\x46\xd2\x0a\x9c\xf2\x3f\x93\xb8\x82\x77\x7b\xe4\x56\xf0\x8d\x93\x57\x25\xf3\xde\x04\x76\xd4\xc9\x60\x47\xbd\x95\x7e\xea\x73\x09\x8b\x96\x05\x9d\x20\xb9\x2b\x27\x51\xff\xec\xd2\xc3\x9b\x3d\x59\xa9\xd9\xdf\xea\x5d\x63\xc6\x8c\xd5\x9b\xb8\xd3\xa2\xb5\x0c\x0a\xcb\x78\x54\x66\x9d\xde\xc2\x1f\x9f\xf9\x9c\x30\x06\x6d\xe4\x58\x70\x45\xd2\xa8\x30\xa8\x23\x96\xbe\xe9\xb9\xe6\xf7\xcc\xdc\x8e\xef\x99\x79\x5f\x66\xfe\xba\x89\xec\xfc\x4b\xf2\xd8\x76\x8f\x79\x70\x4f\xbc\x9d\xdd\x48\x96\x69\xcc\x88\x45\xd7\xef\x46\x98\x32\x3b\x48\x67\xbb\xcf\x6b\x49\xad\x8a\x48\x2a\x98\x8c\x61\xec\x1e\xaf\xf1\x53\x08\xb1\x04\x8a\x2a\xba\x30\x4c\x11\xea\x53\xb7\x91\x0b\x53\x24\x86\x6a\x96\x3b\x4e\xa6\x8f\x1d\x1c\x82\x56\x7c\x7a\x1e\xd7\xaa\x13\xae\xb2\x51\x85\x2d\x99\x12\x22\xf1\xb1\xbb\xda\xeb\x66\x98\x34\x96\x70\x9e\x73\xe2\x77\xec\x91\xb8\x15\xea\xf7\x35\xf8\x8a\xe1\xfa\x5b\x1a\xfc\x09\x74\x4e\xd4\xaf\xe2\x28\x5f\xcf\x64\x2f\xa0\x61\x99\x95\x42\xf4\x8d\x58\x61\x65\x35\x74\xe6\xb1\xb4\x2d\x3f\xcb\x09\x7d\x20\x19\x9a\xc9\x61\xd2\x57\xdb\x05\x91\x6c\xe1\x22\x8f\xf7\xe5\xfe\xdc\x94\x51\x25\x0f\x93\xe5\x69\x90\x50\xb5\x5a\x0a\x1f\xf0\xad\x8c\xab\x84\xf0\xa8\x8b\x4b\x77\x4b\xe5\x66\xfa\xeb\x72\xed\x96\x85\x43\x96\x5c\x34\x95\xb7\x25\x3a\x43\xdb\xe0\xe9\x95\xb7\x47\x4f\x41\xc6\x08\xcf\x97\x64\x80\x2c\x56\xc0\x5c\x45\x1a\x10\xaf\xb6\x6f\x59\x71\x3d\xd6\x3c\x28\x2e\x26\x0d\x40\xbd\x3a\x9e\x9c\x9c\x4d\x8e\x9b\x1b\xa4\xcc\xe4\x9c\x6c\x7c\x31\x3c\xf7\xc7\xc2\x5d\x7d\x6e\x8a\x8d\x67\xc6\x70\x8b\xb9\x2f\x25\x0c\x10\xd9\x68\xb0\x96\x05\xec\x92\x58\x60\x06\xc8\x8a\x30\x4e\x12\x8e\xb0\xd0\x4a\x00\x81\xcc\xd5\x07\x70\xe9\x9f\x83\xbb\xd2\xeb\x60\xbd\x64\x74\x09\x6b\xc6\x79\xe9\x89\x7c\x85\x60\x15\x90\xb0\x02\x26\x23\x00\xc1\xe4\xdf\x8a\x04\x1b\x6d\xce\x26\xb3\xd9\xc4\x65\xe8\x07\xdc\xac\x95\x4e\x9d\x43\x1e\x0d\x7d\xf6\xe8\x05\x1c\x29\x2e\xdc\x47\xad\xb1\x23\xe7\xc1\x82\xb0\x6e\x4d\x5f\x57\xf3\xb7\x98\xc2\x7b\xe2\x2b\x25\x14\x84\xf1\xd2\x68\xd2\x2c\xd9\xc2\xb6\xde\xf0\x83\xc6\x74\x49\xac\x33\xdf\x08\x20\xd7\x6a\xc5\x52\xac\xd2\xec\xf0\x1c\xce\xe4\x43\x8f\xc5\x96\x86\x01\x0a\xcd\xe3\xb2\x50\x31\xf1\x74\x9a\x31\xbb\x2c\x92\xd2\x35\x42\x65\xe3\x4e\x74\x77\x6a\x35\xe2\x54\x10\xa7\xbc\x69\xfe\x90\x4d\xab\xfb\x46\x8d\x8b\x54\x51\xe7\x5a\xa5\x58\x49\xe4\x3b\xa5\x0f\x6b\x79\xd3\x6b\xd2\x4d\x91\xbb\x12\x08\xd3\xa6\xe5\xaa\xb7\xde\x31\x99\x71\x3c\x74\xf7\x75\xc1\x2d\x3b\x74\xf3\x05\xe7\xed\x53\xb4\x63\x6f\x75\x03\xaf\xe9\xa6\xe7\x85\xb4\x6d\xb4\x61\xd0\x59\x56\x51\x79\xee\x2a\x34\x53\x46\xe4\x7a\x25\x7a\x66\x33\xe8\x9a\x52\x8e\xbd\x4e\xb0\x0d\xbc\x83\x8a\x7a\x07\x9c\xff\x48\xf5\x17\x41\x05\xd4\x13\x4a\xd1\x18\x8d\x2e\x47\x75\xcb\x6d\x1f\x7e\x87\xd5\x7b\x59\x8d\x0c\x26\x33\xb4\x8f\xc9\x39\xc0\x14\x83\x32\x95\xbd\x81\x6f\xd9\xf6\xca\xd1\x67\xe8\x7e\xbb\xcc\xd0\x9b\x28\x53\xc4\x01\x32\x05\xd3\xd6\x01\x72\xf6\x72\xed\x1f\x24\xeb\xfe\x5c\xfb\xb8\xd0\xc3\xa0\xf5\x6c\xb1\xdb\x07\xa1\xe3\xe6\xe1\x7c\xe1\x47\xf7\x51\x01\x18\xe2\x48\xf5\x08\xe3\x49\x9d\x6b\x75\x57\x86\x3d\x8b\x20\x9f\x3f\xca\x26\x23\x78\xf0\x69\xb0\x7e\x57\xe8\x6c\xb0\xd2\x82\x55\x27\x3d\x44\x65\xd8\xd1\x40\x18\xbc\xaa\x47\x09\x3f\x85\xaf\x3e\x44\xb2\x9a\xd3\x06\x88\x56\x3d\x86\xc8\xd6\x41\x2c\xb6\x35\x0c\x8f\x01\x43\xb0\x1f\xf6\xea\x9c\xb1\x03\xfe\x6a\xae\xb7\x1b\x06\x6b\x0f\x79\x5e\x04\xf4\x23\xdc\x63\xd6\x63\x57\xaf\xd9\xdf\x15\x82\xd6\xfc\xd8\xef\xb8\x07\xab\xf2\x69\x48\x5b\x25\xd4\x1e\xbc\xcd\x8f\xdd\xa8\x5b\x7d\xad\x2d\xec\xad\xbe\x55\x89\xc0\x6d\xe5\xe6\xe1\xae\x68\xf5\xe6\x55\x68\xda\xbf\x83\x80\x91\x4b\x8c\x81\xf5\xf1\xe9\xab\x57\x2f\xc7\x41\xc2\xaa\x8a\x0e\xc1\xf1\xf5\xa6\x3e\xb2\xe7\xc7\xb7\x42\xb2\x3a\xdc\xbb\x78\xd6\x05\x5f\x93\x8d\xd9\xda\x17\xc0\xb3\x20\x84\x69\x39\xf5\x04\x0c\x9a\x6b\x65\x15\x55\x3c\x86\xfb\xcb\xf9\xd6\xfa\x1e\x74\xcb\x8f\x1d\x18\x93\x1f\x5d\xcc\xe8\x2e\xb8\x63\x2f\x16\xd5\xde\x6f\x87\xf4\xfb\xc0\xaf\xff\x02\xf1\x9e\x8f\x8d\xd5\xd7\x0b\xd6\x48\xf5\x62\x18\x27\xf3\x63\x07\x5a\xe6\x47\x8d\x99\x9d\xb6\x98\x59\x3b\x56\x8a\x17\x02\xaf\x5d\xcc\x0b\x7a\x95\x8f\x4c\x56\xe4\x8b\x6d\x57\x04\x10\x8e\xce\xff\x0b\x36\xb5\x22\x1f\x85\xce\xde\x19\xee\xc2\x87\xa2\xc8\xed\xe6\x2d\xd3\x31\xfc\xeb\xdf\x65\xf7\x62\xcb\xa8\x17\x43\xd9\x3b\xfa\x8e\xbc\xdf\xdd\x95\xaf\x96\x54\xe1\x3b\xc5\x05\x93\xcc\xb6\xd5\xaf\x5a\x4b\x4c\xeb\x4e\x35\xf3\xef\x9f\xec\x2d\x62\x2a\x81\x56\x9d\x17\x97\xfc\x8c\x6f\x5a\xab\x9e\xe6\xba\x2a\x60\x6a\x0c\xb2\x1b\xbf\x87\xc5\x4d\xa8\xeb\x1c\xd0\xf7\x5a\xcf\x8b\xe1\xa6\xb2\xd1\x6c\xdc\x03\x32\x94\x4e\x6c\x4c\x7d\xcf\x89\x9f\x99\xb1\x4c\x66\xfd\xa6\xd3\xb5\xad\x29\xd8\x25\x32\x0d\xfe\x2d\x94\xeb\xb6\xa2\x6d\x8b\xa7\x9b\x9d\x89\x27\x14\x4e\x9e\xd5\xe5\x77\xa5\xda\xf3\x0e\xde\xb2\x48\x98\x8a\xda\xff\x6b\x76\x80\x10\x5e\x07\xf7\x65\xc2\xcf\x74\x4e\x47\x3b\xe3\x76\x79\x60\xfd\x07\x50\xfb\x67\x4b\xcf\x1a\x97\x4a\x88\x42\x32\xbb\x69\x3a\x7c\xa7\xa2\xbc\x48\x38\x33\x4b\xd4\x2d\x74\xf2\xbe\x48\x7c\x43\xe3\x78\xce\x55\xea\x55\x5a\x75\x67\xfd\xc4\x5c\x2d\xf5\xdf\xaa\xf3\xb0\xe9\x5d\xaf\xe6\xac\xff\x08\x9a\xab\xba\xcf\x73\x6d\x9f\x45\xbd\x22\x3c\x86\xb3\x63\x31\xfa\x4f\x00\x00\x00\xff\xff\x43\x90\x59\x30\x4c\x2a\x00\x00") +var _olmManifests0270OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xdd\x6f\x1b\xb9\x11\x7f\xd7\x5f\x31\x10\x0a\xb8\x2d\xb2\x92\xe5\xef\x2c\x10\xe0\x5c\x27\x77\x39\xd4\x76\x04\xcb\xe9\xcb\x21\x28\xb8\xdc\xd1\x8a\x35\x97\xdc\x23\xb9\x52\x74\x45\xff\xf7\x82\xcb\xfd\x16\x25\xcb\x4a\xee\x52\x14\xe1\x8b\x24\x72\xc8\x19\xce\xcc\xce\xc7\x4f\x1b\x04\xc1\x80\x64\xec\x1f\xa8\x34\x93\x22\x84\xe5\x64\xf0\xc4\x44\x1c\xc2\x3d\x49\x51\x67\x84\xe2\x20\x45\x43\x62\x62\x48\x38\x00\x10\x24\xc5\x10\x24\x4f\x07\x00\x9c\x44\xc8\xb5\x9d\x05\xc8\x64\x1c\x68\xa4\xb9\x62\x66\x3d\x7a\xca\x23\x54\x02\x0d\xea\x11\x93\x63\x14\x73\xa9\x28\x86\xa0\x50\x1b\xc5\xa8\xc1\x78\xcf\x2d\xc1\xb2\x92\x8a\x13\x83\xda\x3c\xb7\x8d\xe4\x31\x33\x2f\xe1\x53\x6c\x78\x29\x97\x15\x51\xe2\x25\x4c\x2c\xfd\x06\x8f\xc3\xd4\x9e\xa1\x22\x46\x2a\x7d\x80\xf2\x23\xa2\x91\x33\x81\xdf\x55\x6f\x55\xef\x74\x3d\x43\xb5\x64\x14\xaf\x29\x95\xb9\x30\x7d\x7b\x78\xdd\x3e\xa8\x6c\x10\x68\xb7\x99\x94\x9b\x1d\x4d\x61\x39\xf7\x7c\xf4\x2d\xac\x22\x42\x47\x24\x37\x0b\xa9\xd8\x6f\xc4\x30\x29\x46\x4f\x57\x85\x94\xb5\xed\x6f\x78\xae\x0d\xaa\x07\xc9\x7d\xd6\xd7\x6b\x6d\x30\x0d\xa9\x14\x46\x49\xce\x51\x85\xb5\x2c\x9c\xcd\x91\xae\x29\xc7\x20\x25\x82\x24\xa8\x06\x2a\xe7\xa8\xc3\x41\x00\x24\x63\x3f\x29\x99\x67\x3a\x84\x5f\x86\x7f\x1d\x7e\x1a\x80\xd5\x9f\xcc\x15\xc5\xd6\xd4\x12\x55\x54\xfc\x5c\x11\x43\x17\xc3\x57\x30\xe4\x4c\x1b\xfb\x99\x60\xf1\x41\x15\x12\x83\xf6\x5b\x9e\xc5\xe5\xb7\xac\xa2\x8d\x91\xa3\x9b\x72\xdf\xa8\x15\x8f\xda\x2b\xda\x39\xd4\x94\xf0\x72\x4b\xc4\x44\x3c\xfc\x34\x08\x40\x48\xf1\x50\x8a\xf1\xf1\xe1\xd6\x27\x89\xfd\xf9\x65\x3a\xfc\x1b\x13\x31\x13\xc9\x73\x86\x8c\x1c\x59\x60\x8d\xa6\x24\xc7\x07\x9c\x5b\xca\x4a\x71\x3b\xb8\x0e\x00\x36\x0d\x77\x90\xb9\x74\x1e\xfd\x0b\xa9\x29\x2c\xe6\xf5\xcd\xaf\xe2\x82\x75\xfc\x18\x51\xa9\x50\xda\x8f\xb4\xd1\xdc\x87\xdb\xbb\x1b\x29\xe6\xcc\xa7\x30\xea\x2e\xb8\x71\x22\xc9\x32\xdd\x9c\xf0\x16\x33\x2e\xd7\x29\x0a\xf3\x8c\xce\x37\x45\xed\x06\x34\x92\x65\xbd\x0d\x3a\x43\x6a\xd7\xb4\x51\xc4\x60\xb2\x76\x74\x66\x9d\x61\x08\x0f\xe8\xbc\xb3\x70\xed\x8c\x33\x4a\x74\x08\x13\x4b\x8c\xd6\x0d\xa5\x72\xc4\xa9\x75\xd7\xdb\x16\x17\x1f\x1f\x00\x83\x69\x66\xdd\xb5\xdc\xd4\xba\x87\x1d\xbc\xb3\xdf\x7f\x02\x40\x25\x6d\xf1\xbd\x0c\x4d\x37\x52\x18\xfc\x6c\x9a\xad\x2a\x17\xd7\xfa\x5e\x8a\x07\x29\x4d\x08\x46\xe5\x58\x2f\x69\xa4\x54\xa6\xd9\x54\xc9\x39\xe3\xd8\x6c\xa9\x6f\x9c\x0b\xc3\x52\x7c\x8b\x73\x92\x73\x53\x33\x6a\x7b\xcc\xfd\x1e\xee\x62\x87\xf5\x4f\xc2\x04\xaa\xd6\xa5\x02\xbf\xc9\x5a\xd2\xf9\x6f\x54\x28\x84\x73\xb9\x9a\x2a\xb6\x64\x1c\x13\x7c\xe7\x9e\xfd\xc2\x57\xe6\x84\x6b\xec\xd0\x52\x92\x91\x88\x71\x66\x18\xea\xee\x29\x00\xb1\x92\x59\x08\xbf\xc0\xf0\xfa\xf6\x76\x08\x9f\x5a\xab\x54\xa6\x29\x11\x71\x7b\x43\x00\xe3\x88\x89\xb1\x73\xa4\x5a\x12\x95\xe8\x2e\x51\x10\xd4\x5e\xd7\x99\xff\xd3\x9f\x3f\x4c\xdf\x3d\x5c\x3f\x7e\x78\xf8\xe7\xfd\xf5\xdd\xbb\xd9\xf4\xfa\xe6\xdd\x5f\x7a\x3b\x57\x8a\x19\x9c\x19\x62\x72\x6d\x55\xdb\x59\x1d\x0e\x5b\x3f\x59\x4a\x12\x0c\xe1\xd7\x9c\xac\x6d\x60\xaa\xb5\x3f\x57\x24\xc5\x95\x54\x4f\x56\xcc\x1f\xf4\x82\x9c\x9c\x5f\x84\x93\xe8\xe2\xf8\xf8\x64\x72\x7e\x31\x3f\xbf\xb8\x8a\x2f\x4f\x4e\xe8\xc9\xeb\xc9\xe9\xd5\xf9\xe5\xf9\xe5\xe9\xe9\xf9\xeb\xc9\xf1\xe9\x25\x3d\x39\x8b\xce\xa2\x39\x89\xe8\xc5\xe5\xeb\xb3\x8b\xf9\xc9\xc5\x15\xc5\xb3\xcb\xf3\x13\x7a\x8a\x17\x7d\xbe\xd3\x9c\xf3\xa9\xe4\x8c\xae\x43\xf8\x79\x7e\x2f\xcd\x54\xa1\xc6\xda\xd8\x50\xa4\x4b\x65\x7a\xda\x0e\x1a\x2f\x98\x4a\x65\x42\xb8\x3a\xbe\x3a\xee\xd9\xc3\x79\x44\x8a\x36\xf3\xea\xd6\x1a\x67\x4b\x14\xa8\xf5\x54\xc9\x08\xbb\xc7\x2e\x8c\xc9\x7e\x42\xd3\xb7\x6c\x46\xcc\x22\x84\xf1\x02\x09\x37\x8b\xdf\xfa\x8b\xdb\xf8\x6b\xba\x40\x2b\xc1\xfb\xc7\xc7\x69\x6b\x49\x21\x89\xd9\x37\xe4\x6f\x50\xa5\x4c\x14\x1e\x7e\x87\x5a\x5b\x13\x94\xea\xff\x91\x70\x1e\x11\xfa\xf4\x28\x6f\x65\xa2\x3f\x88\x77\x4a\x75\x9e\x22\x14\xcb\xae\x77\x3a\x0d\x6f\x7a\x62\x47\x90\x25\xe1\x39\xfe\xa8\x64\xda\xbf\xd5\x9c\x21\x8f\xcb\xd4\xe5\x59\x99\x16\x97\xae\xa2\xd9\xc8\xff\x1c\x78\x24\xd8\x64\xbe\x35\x2c\x34\x65\x45\x67\x93\xc2\x5f\x73\xd4\x7d\x97\x03\xa0\x59\x1e\xc2\xe4\x38\xed\x4d\xa7\x98\x4a\xb5\x0e\x61\x72\x71\x7c\xc7\xca\x35\x21\x63\x9c\x75\x62\xb9\x1d\xdd\x52\x4f\xea\x10\x38\x13\xf9\xe7\x2f\xc9\x51\x94\x18\xc2\x65\xf2\xb2\x3c\xb5\xb1\xe9\x77\xcc\x55\x1e\x01\x0f\xc8\x57\x9e\x53\xfe\x6f\x72\x96\xf7\x6e\xcf\xdc\x0a\xbe\x71\xde\x2a\x65\xde\x99\xbb\x8e\x5a\xc9\xeb\xa8\xb3\xd2\xcd\x7a\x36\x57\xd1\xa2\x8c\x4b\x49\x66\x8b\x48\x54\x3f\xdb\xcc\xf0\x66\x47\x42\xaa\xe9\x1b\xbd\x2b\x4c\x98\x36\x6a\x1d\xb6\x1a\xb3\x86\x41\x6e\x18\x0f\x8a\x84\xd3\x59\xf8\xe3\x93\x9e\x15\x46\xa3\x09\x2c\x0b\x2e\x49\x1c\xe4\x1a\x55\xc0\xe2\x37\x1d\xd7\xfc\x9e\x94\x9b\xf1\x3d\x29\xef\x4a\xca\x5f\x37\x87\x5d\x7d\x49\x0a\xdb\xec\x2c\xf7\xee\x84\x37\x13\x1b\x49\x12\x85\x09\x31\x68\xbb\xdc\x00\x63\x66\x7a\x99\x6c\xfb\x79\xcd\x56\x23\x03\x12\xa7\x4c\x84\x30\xb4\x8f\xd7\xf0\x25\x1b\xb1\x80\x87\xca\x7d\x7e\x70\xc2\xd7\x9d\x6e\xe2\x15\x3a\x8f\x34\x55\x2c\xb3\x9c\x74\x17\x31\xd8\x07\xa3\xf8\x74\x18\xd7\xb2\xff\x2d\xb3\x51\x89\x28\xe9\x02\x18\x71\xb1\xbb\xa4\xb5\x33\x4c\x68\x43\x38\xcf\x38\x71\x14\x3b\x24\x6e\x84\xfa\x7d\x0d\xbe\x64\xb8\xfa\x96\x06\x7f\xc1\x3e\x2b\xea\x57\x71\x94\xaf\x67\xb2\x57\x50\xb3\x4c\x0a\x21\xba\x46\x2c\x11\xb2\x0a\x30\x73\x08\xda\x86\x9f\x65\x84\x3e\x91\x04\xf5\x68\x3f\xe9\x4b\xf2\x94\x08\x36\xb7\x91\xc7\xf9\x72\x77\x6e\xcc\xa8\x14\xfb\xc9\xf2\x32\x20\xa8\x5c\x2d\x84\xf7\xf8\x56\xc2\x65\x44\x78\xd0\x46\xa3\xdb\x55\x72\x3d\xfd\x75\xb9\xb6\xcb\xc2\x3e\x4b\x9e\xd6\x45\xb7\x21\x2a\x41\x53\xa3\xe8\xa5\xb7\x07\x2f\xc1\xc3\x08\xcf\x16\xa4\x87\x27\x96\x70\x5c\xb9\xd5\x23\x5e\x65\xdf\xa2\xe2\x7a\xae\x6f\x90\x3c\x1d\xd5\xb0\xf4\xf2\x78\x74\x72\x39\x3a\xae\x6f\x10\x33\x9d\x71\xb2\x76\xc5\xf0\xd4\x1d\x0b\xb3\xea\xdc\x18\x6b\xcf\xb4\xdd\x44\xe6\x4a\x09\x0d\x44\xd4\x1a\xac\x64\x01\xb3\x20\x06\x98\x06\xb2\x24\x8c\x93\x88\x23\xcc\x95\x4c\x81\x40\x62\xeb\x03\xb8\x71\xcf\xc1\xac\xf0\x3a\x58\x2d\x18\x5d\xc0\x8a\x71\x5e\x78\x22\x5f\x22\x18\x09\xc4\xaf\x80\xd1\x00\x20\x65\xe2\xef\x79\x84\xb5\x36\x27\xa3\xc9\x64\x64\x33\xf4\x13\xae\x57\x52\xc5\xd6\x21\x8f\xfa\x3e\x7b\xf4\x0a\x8e\x24\x4f\xed\x47\xa5\xb1\x23\xeb\xc1\x29\x61\xed\x9a\xbe\xaa\xe6\x1f\x30\x86\xf7\xc4\x55\x4a\x98\x12\xc6\x0b\xa3\x09\xbd\x60\x73\xd3\x78\xc3\x0f\x0a\xe3\x05\x31\xd6\x7c\x03\x80\x4c\xc9\x25\x8b\xb1\x4c\xb3\xfd\x73\x38\x13\x4f\x1d\x16\x1b\x1a\x06\xc8\x15\x0f\x8b\x42\x45\x87\xe3\x71\xc2\xcc\x22\x8f\x0a\xd7\xf0\x95\x8d\x5b\x31\xdd\xb1\x51\x88\xe3\x94\x58\xe5\x8d\xb3\xa7\x64\x5c\xde\x37\xa8\x5d\xa4\x8c\x3a\x77\x32\xc6\x52\x22\xd7\x29\x7d\x58\x89\xfb\x4e\x7f\xae\xf3\xcc\x96\x40\x18\xd7\x2d\x57\x45\x3a\x63\x22\xe1\xb8\x2f\xf5\x5d\xce\x0d\xdb\x97\xf8\x9a\xf3\xe6\x29\xda\x42\x5b\xde\xc0\x69\xba\x6e\x77\x21\x6e\x7a\x6c\xe8\x75\x96\x65\x54\x9e\xda\x0a\x4d\x17\x11\xb9\x5a\x09\x0e\x6c\x06\x6d\x53\xca\xb1\xd3\x09\x36\x81\xb7\x57\x51\x6f\x01\xf1\x9f\xa9\xfe\x02\x28\xe1\x79\x42\x29\x6a\xad\xd0\xe6\xa8\x76\xb9\xed\xc2\x6f\xbf\x7a\xaf\xfa\xfc\xf6\x64\x82\xe6\x39\x39\x7b\x70\xa2\x57\xa6\xa2\x37\x70\x2d\xdb\x4e\x39\xba\x0c\xed\x6f\x9b\x19\x3a\x13\x45\x8a\xd8\x43\x26\x6f\xda\xda\x43\xce\x4e\xae\xfd\x83\x64\xdd\x9d\x6b\x9f\x17\xba\x1f\xb4\x0e\x16\xbb\x79\x10\x5a\x6e\xee\xcf\x17\x6e\xb4\x1f\x15\x80\x3e\x84\x54\x8d\x12\x50\x91\x9c\x33\x91\x7c\x2c\x6a\xdd\x6e\xbb\xd2\x5e\xe9\xf7\x2c\x29\xf9\xfc\x51\xd4\x19\xc1\x81\x4f\xbd\xf5\x59\xae\x92\xde\x4a\x03\x56\x9d\x74\x10\x95\x7e\x47\x03\x7e\xf0\xaa\x1a\x05\xfc\xe4\xbf\x7a\x1f\xc9\xaa\x4f\xeb\x21\x5a\xd5\xe8\x23\x5b\x7b\xb1\xd8\xd4\x30\x3c\x07\x0c\xc1\x6e\xd8\xab\x75\xc6\x16\xf8\xab\xbe\xde\x76\x18\xac\x39\xe4\xb0\x08\xe8\x86\xbf\xc7\xac\xc6\xb6\x5e\xb3\x4b\xe5\x83\xd6\xdc\xd8\xed\xb8\x7b\xab\xf2\x65\x48\x5b\x29\xd4\x0e\xbc\xcd\x8d\xed\xa8\x5b\x75\xad\x0d\xec\xad\xba\x55\x81\xc0\x6d\xe4\xe6\x3e\x55\xb0\x7c\x73\xe6\x9b\x76\x6f\x1e\x60\x60\x13\xa3\x67\x7d\x78\x7e\x76\x76\x3a\xf4\x6e\x2c\xab\x68\x1f\x12\x5f\x11\x75\x91\x3d\x37\xbe\x15\x92\xd5\xe2\xde\xc6\xb3\xae\xf9\x8a\xac\xf5\x06\x9d\x07\xcf\x02\x1f\xa6\x65\xd5\xe3\x31\x68\xa6\xa4\x91\x54\xf2\x10\x1e\x6f\xa6\x1b\xeb\x3b\xd0\x2d\x37\xb6\x60\x4c\x6e\xb4\x31\xa3\x99\x97\x62\x27\x16\xd5\xdc\x6f\x8b\xf4\xbb\xc0\xaf\xff\x01\xf1\x0e\xc7\xc6\xaa\xeb\x79\x6b\xa4\x6a\xd1\x8f\x93\xb9\xb1\x05\x2d\x73\xa3\xc2\xcc\xce\x1b\xcc\xac\x19\x4b\xc9\xf3\x14\xef\x6c\xcc\xf3\x7a\x95\x8b\x4c\x26\xcd\xe6\x9b\xae\x08\x90\xda\x7d\xee\x0f\xb0\xb1\x49\xb3\x81\xef\xec\xad\xe1\xce\x7f\x28\xa6\x99\x59\xbf\x65\x2a\x84\x7f\xff\xa7\xe8\x5e\x4c\x11\xf5\x42\x28\x7a\x47\xd7\x91\x77\xbb\xbb\xe2\x85\x92\x32\x7c\xc7\x38\x67\x82\x99\xa6\xfa\x95\x2b\x81\x71\xd5\xa9\x26\xee\xad\x93\x9d\x45\x4c\x29\xd0\xb2\xf5\xba\x92\x9b\x71\x4d\x6b\xd9\xd3\xdc\x95\x05\x4c\x85\x41\xb6\xe3\x77\xbf\xb8\xf1\x75\x9d\xbd\xfd\x9d\xd6\xf3\xba\x4f\x54\x34\x9a\xb5\x7b\x40\x82\xc2\x8a\x8d\xb1\xeb\x39\xf1\x33\xd3\x86\x89\xa4\xdb\x74\xda\xb6\x35\x06\xb3\x40\xa6\xc0\xbd\x7b\x72\xd7\x54\xb4\x4d\xf1\x74\xbf\x35\xf1\xf8\xc2\xc9\x41\x5d\x7e\x5b\xaa\x1d\x6f\xde\x2d\xf2\x88\xc9\xa0\xf9\xbf\x66\x0b\x08\xe1\x74\xf0\x58\x24\xfc\x44\x65\x74\xb0\x35\x6e\x17\x07\x56\x7f\x00\x35\x7f\xb6\x74\xac\x71\x23\xd3\x34\x17\xcc\xac\xeb\x0e\xdf\xaa\x28\xcb\x23\xce\xf4\x02\x55\x03\x9d\xbc\xcf\x23\xd7\xd0\x58\x9e\x53\x19\x3b\x95\x96\xdd\x59\x37\x31\x97\x4b\xdd\x77\xe9\x1c\x6c\x3a\xeb\xd4\x9c\xd5\x1f\x41\x53\x59\xf5\x79\xb6\xed\x33\xa8\x96\x84\x87\x70\x71\x9c\x0e\xfe\x1b\x00\x00\xff\xff\xa1\x41\x61\x14\x42\x2a\x00\x00") -func olmManifests0260OlmYamlBytes() ([]byte, error) { +func olmManifests0270OlmYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0260OlmYaml, - "olm-manifests/0.26.0-olm.yaml", + _olmManifests0270OlmYaml, + "olm-manifests/0.27.0-olm.yaml", ) } -func olmManifests0260OlmYaml() (*asset, error) { - bytes, err := olmManifests0260OlmYamlBytes() +func olmManifests0270OlmYaml() (*asset, error) { + bytes, err := olmManifests0270OlmYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.26.0-olm.yaml", size: 10828, mode: os.FileMode(420), modTime: time.Unix(1709244469, 0)} + info := bindataFileInfo{name: "olm-manifests/0.27.0-olm.yaml", size: 10818, mode: os.FileMode(420), modTime: time.Unix(1730300878, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _olmManifests0270CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x77\x1c\xb7\xb1\x38\xfa\xbf\x3f\x05\x0e\x93\xfb\x48\x3a\x33\x43\x29\xdb\x2f\xe1\x4d\xe2\xc3\x4b\xca\x0e\x9f\x25\x8a\x47\xa4\x9d\x77\x7f\xb6\x6f\x8c\xe9\xae\x99\x41\xd8\x0d\x74\x00\xf4\x90\x93\xeb\x7c\xf7\x77\x50\x05\xf4\x32\x1b\x67\x69\x49\xa4\x0c\xe4\x9c\x58\x9c\xee\xc6\x52\x28\xd4\x5e\x85\x7e\xbf\xff\x19\x2f\xc4\xb7\xa0\x8d\x50\xf2\x94\xf1\x42\xc0\x83\x05\xe9\xfe\x32\x83\xbb\x3f\x98\x81\x50\x27\xd3\x97\x9f\xdd\x09\x99\x9e\xb2\xf3\xd2\x58\x95\xbf\x03\xa3\x4a\x9d\xc0\x05\x8c\x84\x14\x56\x28\xf9\x59\x0e\x96\xa7\xdc\xf2\xd3\xcf\x18\xe3\x52\x2a\xcb\xdd\xcf\xc6\xfd\xc9\x58\xa2\xa4\xd5\x2a\xcb\x40\xf7\xc7\x20\x07\x77\xe5\x10\x86\xa5\xc8\x52\xd0\xd8\x79\x18\x7a\xfa\x62\xf0\xc7\xc1\x8b\xcf\x18\x4b\x34\xe0\xe7\xb7\x22\x07\x63\x79\x5e\x9c\x32\x59\x66\xd9\x67\x8c\x49\x9e\xc3\x29\x4b\xb8\xe5\x99\x1a\xd3\x24\xcc\x40\x15\xa0\xb9\x55\xda\x0c\x12\xa5\x41\xb9\xff\xe4\x9f\x99\x02\x12\x37\xfa\x58\xab\xb2\x38\x65\x4b\xdf\xa1\xfe\xc2\x24\xb9\x85\xb1\xd2\x22\xfc\xcd\x58\x9f\xa9\x2c\xc7\x7f\xfb\xc5\xd3\xb0\x37\x38\x2c\xfe\x9e\x09\x63\xbf\x5e\x7c\xf6\x5a\x18\x8b\xcf\x8b\xac\xd4\x3c\x9b\x9f\x30\x3e\x32\x13\xa5\xed\x55\x3d\xbc\x1b\x2e\xe1\xd6\xe8\x84\x1e\x0b\x39\x2e\x33\xae\xe7\xbe\xfd\x8c\x31\x93\xa8\x02\x4e\x19\x7e\x5a\xf0\x04\xd2\xcf\x18\xf3\x20\xf4\x5d\xf5\x19\x4f\x53\xdc\x16\x9e\x5d\x6b\x21\x2d\xe8\x73\x95\x95\xb9\xac\x86\x72\xef\xa4\x60\x12\x2d\x0a\x8b\xa0\xbf\x9d\x00\x2b\x34\x58\x3b\x43\x90\x30\x35\x62\x76\x02\x61\xec\xea\x2b\xc6\xfe\x61\x94\xbc\xe6\x76\x72\xca\x06\x0e\xc2\x83\x54\x98\x22\xe3\x33\x37\x9b\xc6\x5b\xb4\x4d\x17\xf4\xac\xf1\xbb\x9d\xb9\xa9\x1b\xab\x85\x1c\xaf\x9b\x8a\x7b\x6f\xf3\x39\x10\x68\x6e\x67\xc5\xe2\x14\xe6\x7e\xdc\x74\xfc\xa2\x1c\x66\xc2\x4c\x40\x6f\x3e\x89\xea\x93\x85\x39\x5c\x2f\x79\xb2\x62\x22\x8d\x4e\xc3\x81\x1a\x2c\x1c\x86\x85\x01\xce\xc6\x8b\x6b\x4c\xb9\x0d\x3f\xd2\x4b\xd3\x97\x3c\x2b\x26\xfc\xa5\xff\xd1\x24\x13\xc8\x79\x8d\x0f\xaa\x00\x79\x76\x7d\xf9\xed\x6f\x6e\xe6\x1e\xb0\x36\x74\x5a\x78\xce\x84\x61\x9c\x69\x28\x94\x11\x56\xe9\x99\x83\xd6\xf9\xcd\xb7\xa6\xc7\xce\xdf\x5d\x98\x1e\xe3\x32\xad\x0e\x1e\x2b\x78\x72\xc7\xc7\x60\x06\x0b\x73\x55\xc3\x7f\x40\x62\x1b\x3f\x6b\xf8\x67\x29\x34\xa4\xcd\x59\x38\xf0\x04\x98\xcc\xfd\xec\xe0\xdf\xf8\xa9\xd0\x6e\x4c\xdb\x38\xc8\xd4\x1a\x54\xae\xf5\xfb\xdc\x0a\x0f\x1d\x18\xe8\x3d\x96\x3a\x02\x07\x06\x51\xc0\x9f\x31\x48\x3d\xec\x08\x35\x84\x71\xeb\xd7\x60\x40\x12\xc9\x73\x3f\x73\xe9\xd7\x34\x60\x37\xa0\xdd\x87\xee\xb8\x97\x59\xea\x28\xe1\x14\xb4\x65\x1a\x12\x35\x96\xe2\x5f\x55\x6f\x86\x59\x85\xc3\x64\xdc\x82\xb1\x0c\x4f\xad\xe4\x19\x9b\xf2\xac\x04\x02\x65\xce\x67\x4c\x83\xeb\x97\x95\xb2\xd1\x03\xbe\x62\x06\xec\x8d\xd2\xc0\x84\x1c\xa9\x53\x36\xb1\xb6\x30\xa7\x27\x27\x63\x61\x03\x0d\x4f\x54\x9e\x97\x52\xd8\xd9\x09\x92\x63\x31\x2c\x1d\x39\x3c\x49\x61\x0a\xd9\x89\x11\xe3\x3e\xd7\xc9\x44\x58\x48\x6c\xa9\xe1\x84\x17\xa2\x8f\x93\x95\x48\xc7\x07\x79\xfa\x0b\xed\xa9\xbe\x39\x9c\x03\xdf\x52\x64\x66\x81\x6c\xae\x85\xb5\x23\x9e\x84\x45\xf4\x39\xad\xa5\x06\xa9\xfb\xc9\x41\xe5\xdd\xab\x9b\x5b\x16\x26\x40\x60\x27\x08\xd7\xaf\x9a\x1a\xd8\x0e\x50\x42\x8e\x40\xd3\x9b\x23\xad\x72\xec\x05\x64\x5a\x28\x21\x2d\x1d\xe9\x4c\x80\xb4\xcc\x94\xc3\x5c\x58\x83\x38\x07\xc6\xba\x7d\x18\xb0\x73\x64\x61\x6c\x08\xac\x2c\xdc\x49\x4a\x07\xec\x52\xb2\x73\x9e\x43\x76\xce\x0d\xbc\x77\x50\x3b\x88\x9a\xbe\x03\xdf\xe6\xc0\x6e\x72\xe0\xc5\x0f\x16\xce\x18\x63\x81\x43\x6e\xf4\xf2\xaa\x43\xc9\xe8\x04\x2e\xa3\xc0\x6c\xcd\x59\x74\x8d\xa7\xa9\x06\xb3\xe4\xc1\xc2\x81\xa4\x17\x09\x4f\x26\xca\xb8\xfd\xe3\x96\xbd\x7d\xfd\x86\x25\x5c\xb2\xd2\x80\x3b\x3c\x89\x92\xd2\x21\x84\x55\x8c\x3b\x5e\xd6\x87\x07\x61\x10\x81\x34\x8c\x85\xb1\x7a\x36\x60\x5f\x2a\x9d\x73\x7b\xca\xfe\x14\x7e\xea\x63\x77\x4a\x33\x51\xfc\xe5\xf4\x4f\x85\xd2\xf6\x2f\xec\xad\xcc\x66\xae\xd3\x94\xdd\x4f\x40\xb2\x9b\x6a\x6d\xec\xcf\x8d\x3f\xbe\xd2\x45\x32\x60\x97\x63\xa9\x74\x78\xd3\x61\xd5\x65\xce\xc7\xc0\x46\x02\x32\xc4\x6b\x03\x76\x30\xbf\x83\x6b\x77\x91\x91\xb8\x34\x12\xe3\x37\xbc\x78\x14\x34\xe7\xe1\x4d\x37\x96\x1b\xbe\xc9\xbc\xeb\x87\x56\x21\x2a\xbb\x25\xb9\x7f\xf2\xe4\x8e\x71\x3f\x4a\xce\x8b\xbe\xc1\x63\xd3\x00\xd3\x66\x10\x38\x0f\x1d\x38\xf8\xd5\x3f\x5f\x7a\xca\x35\xd8\x76\xd9\xcd\x95\x6d\xfd\x6d\x2d\x86\x3c\x0a\xb4\x37\xcb\xb8\xc8\x06\x63\x8c\x75\x91\x5c\xab\x94\x96\xfd\xe8\x28\x5f\x35\xdf\x66\xf0\x50\x28\x03\x86\xa5\x62\x34\x02\xed\xe8\x8e\x9a\x82\xd6\x22\x05\xc3\x46\x4a\xe3\x7e\x15\x2a\xc5\x33\x59\xed\x5f\x8b\xd5\x5e\xab\x74\xd3\x8d\x71\x43\x23\xc3\x20\x64\xf4\x68\xb8\x72\xb9\x4b\x4f\x3b\x7b\xe4\xf0\xba\xc6\x47\x28\xfe\xcf\x96\x3f\x9d\x83\xc7\x99\x7f\x39\x60\xaa\x97\xa8\x3c\xe9\x38\x34\x6e\xf9\x87\xa6\xea\x73\xd9\x74\x37\x98\xf2\x26\xd3\x76\x4d\xaa\x14\xce\x1e\x99\xfe\xc2\x12\x2e\xf0\x8f\x21\x18\xfc\xbc\x9a\x2a\x72\xf0\xb4\xcc\x90\xd4\x94\x59\x7b\x47\x57\xad\x63\xc3\xb5\x6c\xba\x1e\x7a\x0f\x46\xa0\x35\xa4\x17\xa5\xc3\xdf\x9b\x6a\x56\x9e\x48\xd1\xcf\xaf\x1e\x20\x29\x57\x9d\xb1\x95\x4b\x77\x42\xb1\x5f\x26\x68\x76\x2f\xb2\xcc\x0f\xe7\x08\x4a\x78\xe0\xd6\x8b\x72\x8c\x03\x8f\x21\x22\x6d\xb8\x15\x66\x34\x43\x70\x54\x00\x83\x07\xc7\xb3\x51\x63\x41\x8c\x17\x23\x01\x29\x1b\xce\x3c\xbb\x76\xc4\xb3\xc7\x86\xa5\x65\xc2\x22\x2f\x4f\x26\x4a\x19\x60\x9c\xe0\x8e\xfd\x4e\x85\x42\x49\x89\x29\x09\x8e\xfe\xe4\x8e\x21\xfb\x83\xd3\xe8\x7e\x80\x33\xaf\x3f\x13\x86\xe5\x8e\xe2\x57\xb0\x0a\xe8\xe8\xba\xb9\x17\x76\x82\x7f\x8c\x9d\xc8\xed\xa4\x30\x53\xe6\xae\xd3\x7b\x10\xe3\x89\x35\x3d\x26\x06\x30\xc0\xdd\x05\x9e\x4c\x1a\xdd\xe6\x00\xd6\x30\x9e\x65\x61\x0a\x4d\x94\x20\xbe\x99\x3b\x11\x85\x1d\x55\x32\x8c\x97\x37\x7a\x15\x5f\x9d\xdf\xb5\xa5\xe0\xea\x31\xb0\xc9\xe0\xb8\xc7\x12\x95\x17\xa5\x75\x30\x71\x73\x1c\xce\x98\xb0\x4e\xce\x26\x79\x49\xab\x72\x4c\x2b\x81\xcc\x0f\x1c\x84\x55\xe2\x4c\x8e\x38\x38\x1d\x51\x8e\xd9\x01\x2d\xee\x20\xc8\x9f\xae\x3b\x41\x8b\xc0\xf5\xe5\xdc\x26\x13\x2f\x02\x27\x4a\x6b\x30\x85\x92\xf8\x25\x3e\x79\x55\xcf\xed\x3f\xab\x8f\x8e\xcc\x71\x0d\xcc\x89\x18\x4f\x02\x2c\xb9\x06\xfc\xad\xbd\x07\xeb\xce\x48\x7d\x4e\xb8\xd6\x2d\x5d\x72\x59\x13\x16\xf2\x47\x4e\xc9\x02\x6a\x9f\x49\x06\x79\x61\x67\x0d\x9c\x68\xec\x9e\x05\x9d\x57\x30\xc0\x0d\xc6\xe3\x6a\x68\x7d\x22\x2f\x32\x91\x08\xeb\x31\x84\xbd\x60\x47\x88\x22\xc2\x3a\x52\xc6\xa4\xea\xab\xe2\x78\xc0\xce\xd0\x7c\xb1\xc1\x00\x52\x55\xfd\xfb\x8e\xdc\xa0\x46\xd5\x7d\x3d\xba\xb6\x0d\x89\x0a\xb5\xd5\x32\xdd\x62\xeb\xfb\xf9\x83\x4c\xe6\xa5\xbc\xe5\xaf\x13\x4c\x1e\x7d\x75\x53\xf2\x16\xde\x0e\x73\xd8\xe4\xed\xf9\xad\x26\x94\x36\x90\x41\xe2\x54\x52\x07\xfb\x1e\xe3\xc6\xa8\x44\x38\x29\xbf\x46\xda\x36\xa6\xd3\x4a\x1e\x87\x3d\xdb\x16\xfe\x6c\xeb\xf5\xbb\x36\x7f\xf0\x36\xfd\x6e\x01\x1a\x99\x70\xc2\xef\x68\x0e\x2a\x2d\x82\x35\x9c\xe1\xd3\x43\xc3\x32\x3e\x84\xcc\x6c\x06\x04\xb6\xd5\xa9\xad\xdb\x86\xe7\x77\xe5\x82\x56\x2e\xc4\xeb\x98\xd5\xc6\x3b\xa2\xed\x74\x33\x2e\xa4\xf1\xfa\x73\x8f\x71\x76\x07\x33\x52\xb5\x9d\x06\x1f\x0c\x17\xf8\xb2\x06\x62\x37\x0e\x39\xee\x60\x86\x2f\x79\xbd\x7b\x8b\xe9\x6e\x8d\x1c\xd4\xb6\x39\xa6\x75\xeb\xbb\x89\x6e\xf9\x45\x58\xf4\x16\x9f\x6d\x8f\xbf\xd4\xee\x60\xad\xe4\xb5\xac\x2d\x88\x24\x88\x93\xb8\x1f\xb8\x49\xc8\xbf\xc2\x1e\xf3\xa2\xc8\x04\xa0\x3e\xbf\xe5\x30\x6b\xb5\x80\x75\x2d\x40\x6f\xaf\x75\xbd\xab\x0c\x1a\x84\x90\x87\x86\x90\xcf\x9d\xf4\x89\x28\x48\xbf\x35\x80\x07\x37\x58\x7e\xbe\xe5\x99\xa8\x4d\x6d\x06\xf9\xec\xa5\xec\xb1\x2b\x65\xdd\x7f\x5e\x39\x4d\xd8\xf4\xd8\x85\x02\x73\xa5\x2c\xfe\x39\x60\x5f\x59\xc2\xf5\xd7\x1b\x52\xb6\x0e\x00\x44\xf3\xdd\x0b\x3c\x67\x92\x68\x8a\x5b\x7e\xd3\x66\x64\x06\xec\x92\xc4\x96\xea\xe0\x0a\xc3\x2e\xa5\x13\x0e\x3d\x18\xd0\x8a\x87\xef\xfa\x2e\xf2\xd2\xa0\x91\x47\x2a\xd9\x47\x19\x60\x69\x1f\x04\x3d\xd7\x4f\x13\x7e\x6b\xba\x5b\xdd\xd5\x57\x68\x6b\x78\xbd\xf2\xe3\x09\x9f\xa2\x48\x27\xe4\x38\xab\x84\xb7\x1e\xbb\x9f\x88\x64\x42\x52\xf7\x10\xc8\x34\x58\x68\x70\x0c\x8b\x1b\x47\xaa\xdc\x2f\x63\xd0\x4e\xd8\x15\xa1\x3f\x32\x4c\x66\x3c\x81\x94\xa5\x28\x5a\x92\x91\x8d\x5b\x18\x8b\x84\xe5\xa0\xc7\xc0\x0a\xc7\x49\x76\xdb\xfd\xed\x08\x3b\xb5\xad\xc9\x7b\x73\xc0\xad\xd0\x0d\x59\xe4\x97\x4e\xd6\xfd\x40\xdc\x11\xe5\xea\xc8\x1d\x23\x77\x9c\x6b\x91\x3b\x56\x2d\x72\xc7\x47\x5a\xe4\x8e\x91\x3b\xbe\x77\xee\x48\xba\xec\x0e\xca\xf3\xdf\xc8\xc4\x31\xaf\x2d\x23\xa7\x0d\x6e\xba\xb6\xda\xec\xf8\xcd\x8d\x27\x38\xb7\xa8\x6a\x0b\x72\x92\x68\x2e\xc7\xc0\x5e\xf6\x5f\xbe\x78\xb1\x8d\x52\xed\x37\x72\xa3\x2f\x46\xde\xd3\x23\xa4\xfd\xcd\xaf\xd7\x7e\xb1\xca\xfe\xd6\x81\xd5\xd4\xe3\x78\x65\xc8\x6b\xc9\x0e\x2b\x0c\x9f\x48\x9d\xa4\xb2\x2c\x07\xcb\xb8\x6d\x99\x8a\x44\x0e\xbd\xca\x55\x80\x08\xef\xbd\x94\xc1\x02\x9b\x32\x25\xbd\x1d\xcf\x01\x7f\xb0\xdb\x0c\x12\xe0\xe4\x52\x1b\x42\x35\x0b\x95\xbb\x51\x85\xb4\xe1\xb8\xb8\x29\x40\x80\x0a\x3b\x82\xc1\x78\xc0\xd2\x12\x3f\xe3\xd2\xbb\x4d\x8f\x69\xb6\x66\x66\x2c\xe4\x68\xc9\x55\x1a\xff\xe3\xa6\x6d\xf5\xcc\xbd\x0c\x53\x90\xb6\xe4\x59\x36\x63\x30\x15\x89\xad\xd6\x87\x5e\x5b\x61\xc9\xd8\xbe\x99\x89\x70\x23\xd1\x61\x73\x71\xa1\xbf\x80\xc1\xe6\x91\x6f\xb6\xe1\xf6\x0b\x7d\x6f\x72\x26\xe7\x78\x21\xad\x64\xb0\x52\x58\xb5\xae\x5f\xb2\x81\xe3\x3f\x11\xb9\xde\xbe\x7b\xdc\xe4\xca\xb6\xa6\x64\x5b\x50\xaf\x79\xb1\xb4\xcc\x32\x87\x18\x64\x85\x5d\x5c\xc0\x12\xeb\x28\x2d\xa9\x85\xcc\x64\x78\x27\x13\xf3\xd9\xd5\x85\x83\x8a\x7b\xe7\x56\x15\x2a\x53\xe3\x59\x13\xd2\x14\x5e\x24\xf2\x22\x18\xc7\x39\x33\xe5\xd0\x0b\x0d\x0e\xfd\xae\xe6\xb6\x26\x5a\xfe\xa2\xe5\x2f\xea\x36\x0b\x2d\xea\x36\x55\x8b\xba\xcd\x23\x2d\xea\x36\x51\xb7\x89\x96\x3f\x16\xb9\xe3\x1a\x98\x44\xee\xc8\x22\x77\x5c\xb9\xae\xc8\x1d\xd7\x82\x27\x72\xc7\xc8\x1d\x97\xb5\x42\xa5\x7b\x04\x3a\x16\x2a\x5d\x13\xe7\x48\x56\x9f\x44\xf5\x33\x95\x70\xeb\xe3\xf2\xdd\x27\xde\xce\x67\x78\x4e\x86\xa8\x1e\xfb\x97\x92\x40\xc1\x6b\x6e\x6f\xd0\x9c\xa4\xec\x04\xb4\x7b\xfd\xc8\x1c\xaf\x0d\x6c\x8a\x71\x92\x31\x4e\xf2\xc9\xc7\x49\x4e\xb8\xa1\x7d\x25\xa2\xb4\x3a\x6c\xb2\x71\x20\x6f\x41\xe7\xcf\x34\x6a\xd2\xa1\x8b\xdf\x6e\xcc\x78\xaa\xb7\x94\x56\x9e\x7a\x7f\x01\xa4\xd7\xed\xf5\x7a\x79\x19\x17\xc5\xd3\x14\x52\x56\x80\xee\x13\x8a\x28\x36\x12\x32\x5d\xb2\xd6\x00\x9f\x8f\x1a\xfd\xd8\x5e\xc7\x47\x0c\x81\x6c\x4f\x64\x07\x9b\x6b\xd3\x70\xdc\xa2\xf0\x4f\x22\x20\x72\x5b\xa9\xbe\xcf\xac\x37\xf2\x7e\xbd\xa1\x5c\xbf\xbd\x68\x8e\x02\x75\x30\x09\xef\xae\x57\xa2\x58\xfe\xcf\x12\xf4\x0c\xf3\x3f\x6a\x81\xb5\xca\xad\xf3\x3e\x32\x61\x58\xc2\x0d\x71\x8a\x6d\x55\xcb\x2d\xd5\xa8\xdd\xf4\x94\xdd\x2d\xd1\x6c\x1e\x2e\xf3\x5d\x91\x4e\x1a\x74\x70\x82\xd9\x52\x25\x7c\x89\x17\xa0\xb6\xfe\x6f\x35\x9f\x5d\x45\xb7\x9d\x04\xb7\xa5\x48\xf1\x84\x95\x73\xb6\xbb\x82\xce\x76\x56\xd2\xd9\x4e\x8a\x3a\xdb\x55\x59\x67\x7b\x28\xec\x6c\x37\xa5\x9d\xcd\xa3\x82\xdb\x21\x2f\x65\xbd\x1f\xfd\x9d\xed\xa3\xa2\xb2\x3d\xf4\x78\x36\xbf\xd4\x0a\x4d\xf5\xfb\x52\xea\x11\xd7\x5b\x7a\xfd\x87\x06\xd6\x6e\x3a\x3d\x9b\x07\x95\x57\x86\x05\x2a\xb4\xcf\x44\xc3\xff\x20\xea\x36\xdb\x4b\xe5\x66\xbb\xab\xdd\x6c\x77\xcc\x40\x56\xf7\x1a\xdd\xa9\xfb\x32\x4c\xea\x85\x58\x04\xe6\xe0\x8e\xd8\xff\x3a\x4e\x80\xfb\xf2\x6f\x56\x70\xa1\x8d\x93\xef\xbc\xcd\xa4\xf9\xcc\x6b\xe7\xcd\x6e\x72\x4a\x21\x76\xa4\x7a\xca\x33\xc7\x7b\x28\x8e\xc3\xeb\x45\xae\xf7\x79\x36\xdd\x63\xf7\x13\xa7\x6d\x3a\x2a\x55\xe5\x3b\x1f\xdc\xc1\xec\xa0\xb7\x80\x48\x07\x97\xf2\x80\x78\xd4\x02\xea\x54\x0c\x4d\xc9\x6c\xc6\x0e\xf0\xd9\x41\xd7\x9c\x7d\x07\xc6\xd5\x2c\xa1\xb2\x2b\x5f\xd8\x01\x4b\x64\x28\xeb\xd2\xbd\xb0\x49\x5c\x84\x1c\x1b\x61\x14\x53\x33\x18\x0c\xb5\x68\x30\x97\x2a\x6a\x04\x71\x0c\x7f\x4f\x83\xf2\x5b\x4a\x5f\xe9\x22\xe4\x9c\xfb\xce\x88\x49\x2d\x86\x34\xf9\x8d\x57\x12\x0c\x0a\x76\x50\x99\x88\x1a\x1f\xe3\xbb\x03\x0a\x07\xa9\xb9\x9d\x4c\xe7\x03\x44\xea\x2f\x50\x46\xcc\x81\x4b\xc3\x0e\x82\xed\xe9\xd0\xd4\x6f\x1c\x0c\xea\xec\xbe\xaa\xc7\xa3\xff\xfd\xf7\x71\x2b\xa3\xaf\xee\x30\x4a\xda\x51\xd2\x8e\x92\xf6\x16\x5f\x45\x49\x7b\x75\x8b\x92\xf6\x16\x2d\x4a\xda\x51\xd2\x5e\x37\x70\x94\xb4\xa3\xa4\xfd\xf8\xe0\xbb\x49\xda\xbb\xc6\x09\x35\xe5\x5e\xef\x9c\xa3\x42\x66\xdc\x8a\xa4\x8e\x21\x0a\x6f\xd1\xbf\xba\x95\xb7\x9b\xb2\xf4\x72\x69\xbb\x29\x91\x2f\xe8\x16\x83\x47\x44\xeb\x4a\xf8\x5e\xf8\x72\xbd\xd4\xfd\xb4\x62\xa1\x76\xc0\x8d\x86\x43\x61\x47\xe4\xb8\x0d\xae\x70\x5f\xf8\x6f\x08\xb5\x9f\x3c\x65\x47\xc1\xe3\x72\xec\x80\x2f\x95\x6d\x3f\x94\x56\xf4\xeb\x37\x2a\x1f\x0c\xba\x17\x5b\xf9\x36\x2d\xb7\x44\xe5\x75\xaf\x3c\xc5\xf5\x7e\x3a\x12\x02\xba\x35\x07\x61\x7c\x79\x43\x8c\x96\xd0\xa5\x94\xae\x57\x25\x83\xfb\x98\x68\x0e\xd5\xe3\xf3\x98\x47\xc2\x12\xce\x07\x25\xa6\x1a\x4a\x0d\x7f\x27\xb7\x54\x02\xd1\x87\xf2\x2b\xe9\x3d\xa2\xee\x97\xe0\xf5\x0d\x48\x89\x2b\x12\xd5\xe8\x03\xf6\x0a\xf1\xb0\xd9\xb1\x30\x08\x1f\x9e\x65\xea\x7e\x1b\x92\xf4\xa1\xd2\xa2\xee\xb7\x4e\x8b\x9a\xf3\xdf\xc5\xac\xa8\x9f\x49\x56\x14\x3e\xa4\x23\xd4\x79\x7a\x14\xfb\x9b\x2f\x40\xa8\x01\x41\x95\x97\x99\x15\x45\x1d\x2b\x65\x68\xa8\x8c\xa4\xcc\x91\x8f\x3c\x69\xe3\xa5\x1b\x8d\x27\x93\x79\xfc\xc4\xfe\x30\xb6\xca\xe0\xa1\xf5\xd1\x1d\x3c\xcb\x7c\x4e\x51\x10\x49\x29\x84\x45\x7c\xec\xc8\x84\x0b\x5f\xb3\xb5\xd2\x66\x90\xc8\x1c\x39\x5a\x98\xb9\x0d\x75\x54\x6d\x0d\x11\x25\xa5\x68\x0a\x81\xf5\x8e\xc5\x14\x64\x4d\x49\x8f\xcc\xf1\x71\xe0\xe1\x9d\x52\xf8\xf7\x42\xa1\xff\xd4\xa0\xa4\x7f\xd9\x84\x46\xe3\x82\x2a\x2a\x5d\x83\xaf\xa6\xd1\x1f\x33\x04\x63\x1b\x3f\xff\x76\x36\x86\x1d\xfc\xfb\x1f\xd0\xb7\xff\x7c\x32\xcb\x3e\xb2\x85\xf1\x63\xc4\xd6\x3f\x79\xab\x62\x0c\xae\xaf\xdb\xbe\xc1\xf5\xef\xdd\x72\xf8\x71\x63\xec\x9f\x81\xb5\xf0\x63\xc6\xd8\x47\x0b\xe1\xda\x4d\x79\x6a\xa1\xef\xed\xb6\x93\x45\x30\x5a\x03\x77\xe6\xc2\x5b\x32\x9c\x7d\xad\x80\x5b\x62\xc4\x8e\x7e\xf6\xe8\x63\xff\x30\x3e\xf6\x28\xf1\x6e\xd8\xa2\xc4\xbb\x12\x28\x51\xe2\x65\x51\xe2\x7d\x6c\x79\x51\xe2\x5d\x0b\x9e\x28\xf1\xae\xdd\x94\x28\xf1\x46\x89\x97\x3d\x37\x89\x77\x97\x2a\x5d\xd1\xd7\xbd\x97\xaf\x7b\x5b\x6a\xb1\x15\x8d\xd8\x12\x0f\xb6\xf6\x6d\x47\xbf\xf6\x53\xf1\x6b\x6f\x9c\xf0\x2f\xad\xd8\x37\xe9\xbf\xb9\x57\xab\x32\xff\xf9\x54\x89\x94\x15\xa5\xf5\xf9\xd4\x31\xfb\xbf\x8b\xec\xff\x16\xe4\x63\x09\x80\x8d\x4a\x00\xac\x82\x59\xac\x03\x10\xeb\x00\x74\xec\x84\x8e\x75\x00\x62\x1d\x80\x58\x07\x20\xb4\x98\x9d\xc4\x62\x76\xd2\x46\x2d\x66\x27\xad\x6e\x31\x3b\xe9\xc9\x5a\x5f\x59\xcc\x4e\x7a\xda\x96\x58\x16\xb3\x93\xa2\x75\x76\xc3\x8d\x7a\x86\xd9\x49\xb1\x0e\xc0\x53\x8d\x51\x60\x51\xd2\x8e\x92\x76\x94\xb4\xa3\xa4\xbd\xbe\x45\x49\x7b\x8b\x16\x25\xed\x28\x69\xaf\x1b\x38\x4a\xda\x51\xd2\x7e\x7c\xf0\x58\x07\xe0\x19\xc5\x46\xb0\x58\x07\x20\xc6\x4b\xc4\x3a\x00\x3f\xdf\x3a\x00\x2d\xdf\xfd\xc7\x2b\x06\xb0\xfd\x34\x62\x45\x80\x58\x11\x20\x56\x04\x88\x15\x01\x42\x8b\x15\x01\xa8\x3d\x25\x5b\x63\xcc\x8f\x5a\x09\x94\x98\x1f\xc5\x62\x7e\xd4\x63\xcb\x7b\x06\x76\xc3\x98\x1f\xf5\x04\x6d\x85\x31\x3f\x2a\xda\x05\xe7\x37\xe7\x99\xe4\x47\xc5\x8a\x00\x4f\xd1\xdb\x1e\x25\xde\x0d\x5b\x94\x78\x57\x02\x25\x4a\xbc\x2c\x4a\xbc\x8f\x2d\x2f\x4a\xbc\x6b\xc1\x13\x25\xde\xb5\x9b\x12\x25\xde\x28\xf1\xb2\xe7\x26\xf1\xc6\x8a\x00\xb1\x22\x40\xac\x08\xf0\x1c\x3d\xdc\x8f\xee\x34\x3c\x58\xcd\x13\x7b\xae\xa4\x05\xb9\xd2\xaf\xdd\xda\xd0\x57\xad\x4f\x1c\x91\x1c\x89\x71\xa9\xbd\x0c\x3e\x7e\x77\x7d\xce\x12\x6e\x79\xa6\xc6\xec\x5a\xe1\x21\xf5\x83\x54\x3f\xe7\x60\x79\xca\x2d\x27\x97\x24\x6e\xa8\x56\x53\x91\xe2\x61\x4d\xe1\x81\x89\x9c\x8f\x01\x0f\x58\x89\xc9\xea\xf7\x90\x65\xfd\x3b\xa9\xee\x25\x9b\x82\x36\x8d\xe3\xfe\xa3\x2a\xf2\x1f\x99\x01\x3d\xa5\x2c\x7a\x78\x28\xdc\x66\x09\x4b\x14\x23\x8c\xd8\xec\xb6\xf6\xc5\x9d\xd3\xd3\x1b\x4a\x23\x17\xa6\x5e\x0b\x4e\xdb\x8d\xfd\xb9\x13\x15\x3e\x77\x48\x5b\x9a\x80\x6b\x23\x91\x41\x7f\xc8\x0d\xa4\xa1\x7f\xe3\x30\x4e\xe9\x94\xe6\x50\x5a\x91\x89\x7f\x81\xa7\x3a\xc0\x6d\xa9\x61\xd5\x76\x6d\xc0\x07\x1e\x57\x32\xfa\x2c\xe1\xc9\x04\x2e\xc4\x6a\xf5\xa0\x1f\xa6\xba\xfa\xa5\x4d\xf4\x85\x30\xce\xc6\x55\x23\xce\xfd\x07\x41\x23\x48\x85\xc6\x23\x3a\x63\xc6\x2a\x1d\x20\x5a\x68\xe8\x27\x3c\x4b\xca\x0c\x0f\xe4\xd9\xf5\x25\x8d\xf4\x78\xdd\x87\x47\x88\x58\xbd\xe8\x2d\x66\x1c\x3e\x59\x3f\xe7\x45\x2c\x40\x79\x01\x15\xf5\x7d\xa6\x9d\x43\xae\xf4\xec\x96\xeb\x31\x6c\x76\x1e\x0f\xde\x34\xbe\x98\x3f\x8e\xbf\xfc\xea\xed\x9b\x57\x6f\x5e\x5f\xbe\xb9\xbc\xf5\x14\x6c\xa4\xf4\xd2\x83\xea\xc5\x60\xd2\xc7\xd5\xc8\xfa\x89\xb0\x4c\xe4\xc2\x56\x5f\xd1\x49\xeb\x79\x4a\x86\xe1\x28\xa5\xb4\x22\x07\x0a\xa6\xe0\xd6\x3a\x66\xe9\x4e\x41\x0e\x60\xb1\xf2\x44\xce\xef\xc0\x91\x2e\x36\x2e\xb9\xe6\xd2\x42\x20\x8e\xc2\xd2\x47\xa9\x62\x46\x79\x81\x5e\x78\xad\xdf\xcd\xc3\x80\x97\xdd\xaf\x43\xac\xc6\x84\x4f\xa9\xc4\xc1\x48\x39\x2a\xe8\xb6\x22\x57\xa9\x18\x89\x84\xd4\x2e\x96\xf3\xb4\xf2\xc3\x7b\xe9\x0d\x74\x45\xd2\xeb\x05\x9c\xb2\xfe\x02\x78\x40\x4e\x85\x56\x12\x65\xca\x29\xd7\x82\x0f\x33\xbf\xaa\x21\x99\xe8\xb0\xdf\x7a\x82\x92\x0d\x67\x16\x8c\xef\xc9\x43\xcb\xd7\xa2\x58\xf3\xdd\xf7\x92\x00\x4d\xe2\x48\xcd\x14\xdd\x9b\x62\xc4\x84\x3d\x74\xec\xc8\x08\x4f\x84\x34\xa4\x65\x12\x16\xad\x6c\xa1\x05\x89\xbc\xbc\xda\x3b\x4f\xfc\xb8\x61\x79\xe9\xb8\x8b\xe3\xb6\xc6\x88\x61\x06\x3d\xc7\x53\x45\xf3\xdd\x21\x38\x38\xe0\x17\xc8\xf7\xa6\xe0\x76\xd8\x61\x0e\x89\x33\x00\x8e\xb1\x2a\x2c\x24\xc1\x89\x89\xa6\x30\xe2\x65\x46\x7c\x87\xc0\x8c\x5b\x35\x53\xa5\x6e\x91\xd5\x09\x77\x98\x83\xa7\x22\x04\xa8\xe0\x19\xee\xb1\x14\x9c\xe0\x26\xa4\xa3\xe4\x63\xa5\x52\x27\xbf\x69\xf5\x20\x72\xec\xcd\xa3\x56\x05\x9f\xe1\x8c\xa5\xaa\x1c\x66\xd5\x86\x39\x52\xea\xa9\x7d\xc1\x93\x3b\x37\x16\x76\xcc\xb8\x65\x27\x36\x2f\x4e\xf0\x2f\xff\xff\xfe\x0d\x33\xf8\x87\x51\x32\xc8\x01\x8d\x69\x0e\xe6\xe0\x2f\x0c\x1b\x82\xb1\x7d\x18\x8d\x94\xb6\xff\xe9\xa0\x55\x4a\x44\x3c\xa9\xaa\xa5\x87\xcd\x2c\xdd\x61\x47\x38\x29\xc4\xc9\xd6\x09\x51\x7a\xc9\x61\x6b\xa0\xc1\xe0\x60\x15\xdd\x75\x87\x46\xcb\x53\xf6\x3f\x47\xdf\xff\xea\xa7\xfe\xf1\x17\x47\x47\xdf\xbd\xe8\xff\xf1\x87\x5f\x1d\x7d\x3f\xc0\x7f\x7c\x7e\xfc\xc5\xf1\x4f\xe1\x8f\x5f\x1d\x1f\x1f\x1d\x7d\xf7\xf5\x9b\xaf\x6e\xaf\x5f\xfd\x20\x8e\x7f\xfa\x4e\x96\xf9\x1d\xfd\xf5\xd3\xd1\x77\xf0\xea\x87\x0d\x3b\x39\x3e\xfe\xe2\x97\x2b\x26\xc4\xe5\xec\xed\x68\x1d\xb7\xd9\x2c\xa0\xac\xbf\x09\x89\x7e\xe8\xdf\x95\x43\xd0\x12\x2c\x98\xbe\x90\xb6\xaf\x74\x9f\x3e\x38\x65\x56\x97\xb0\xf4\x33\x27\x4e\x3d\x66\x85\x6f\x91\xc8\xab\xc6\x07\x73\x16\x47\x5f\x86\xc5\x1b\x04\xdc\x90\x15\xad\x2b\x48\x7a\x19\xb9\xcd\x0d\xc2\xe0\x80\xdd\x2c\xf9\x12\x65\x3e\xff\xc6\xa1\x21\xe9\xd0\xcc\xf7\x33\x17\x64\x46\x34\x10\xfb\xdc\x5d\x36\xd8\x4e\x23\x7c\x74\x3f\x0a\x2d\x94\x16\x76\x76\x9e\x71\x63\xae\x78\x0e\x1b\x41\xf7\x72\x54\x4b\xda\x3d\x77\xd8\x1c\x39\xf6\xfc\x87\xb4\x9f\xd0\x2f\x52\x0e\x27\xc4\x36\xde\x0f\x10\x0a\xef\x54\x67\x26\x9c\x3e\xa5\xd9\xbf\x40\x2b\x5f\x45\x47\x03\x09\xc2\xe1\xf1\x7a\xe0\xad\x59\xab\x81\xa4\xc4\xb5\x3a\xa6\xfd\xe0\xc4\xd9\x91\x18\x6f\xc6\x70\x6f\x96\x7d\xca\x12\x2e\xdd\xb4\xb1\x8a\xd2\x88\xfd\x98\xc1\x98\x27\xb3\x1f\xdd\xf4\x7f\xd4\xe0\x26\xe2\x04\xfd\x1f\x49\x2e\x6d\x49\x9e\x87\xbe\x2c\x96\x61\x20\xb0\xea\x95\x90\xff\x20\xad\xa0\x52\x78\x34\x06\x8f\x16\x2a\x1d\x38\xc8\x0d\xe6\xe6\x8e\x34\xa9\x7a\x58\xf1\xbd\xef\x3e\xff\x61\xe1\x4d\x6f\xdf\xb0\x8a\xf4\x88\x26\x7e\xea\x12\x09\xa6\x23\x6c\x61\x81\xec\x2c\xcd\x05\x9a\x54\xd8\xd1\xf5\xcd\xd9\x71\x6b\x25\x8e\xf5\x12\x8b\x49\x15\x18\x79\x68\x89\xd9\x4d\xc0\xd4\x66\x14\x64\x1b\x18\xc5\x44\xa7\x05\xc3\x98\xc2\x98\x0e\x60\x68\x59\x19\x42\x35\xf8\xcd\x19\xfb\xd1\x09\x55\x99\x90\x40\xb0\x2b\xb4\x98\x8a\x0c\xc6\x6e\xc4\x86\x53\x88\x9d\x97\x5a\x83\xb4\xd9\x2c\x94\x57\x5a\xbe\x2b\xc2\x38\x82\xde\x46\xb7\x80\x59\x95\x4a\x57\x6d\x96\x7b\xdb\x40\x3a\x60\x37\xf8\xc5\x8c\xec\x7f\xfe\x3d\xdc\x1b\xe4\x8b\xab\x36\x97\x69\x30\xae\x63\x21\xe9\x2b\x91\x12\x8b\x03\xad\x95\xf6\x21\x97\xa4\x47\xa8\xcc\x29\x0b\x95\x7a\xe2\x58\x93\x09\x52\x55\x82\x22\x81\x8f\x4b\xf5\x80\x59\x02\xf8\xd5\x6b\x6e\x0b\x15\x56\x55\xf3\x45\xee\x77\xe9\x26\x37\x2a\x9d\x56\x52\x69\x53\x78\xe6\x9a\xa0\x99\x93\x5f\x9a\xc3\xf7\x6a\x3d\x8e\x0b\x8f\x6a\x26\x8c\xa9\x61\x58\x8a\x0c\x4d\x2c\x42\xd7\xea\x11\x22\x32\x6f\x2a\x6f\xaa\xc8\x7d\x6d\xb3\xb2\x28\x94\xb6\xb5\xe2\x9d\xb4\xb4\x32\x52\x8c\x97\x00\xc0\x4d\xab\xd0\x50\x70\x5d\x51\x6c\x03\x2c\x99\x70\xe9\xd8\xbf\x5b\xe8\x1b\x85\x71\xa8\x14\xcc\xec\x86\xe5\x43\x55\x5a\xc4\x31\x7f\x56\x47\xaa\x94\x29\x73\x44\xe5\x94\x4d\xac\x2d\xcc\xe9\xc9\x49\xcd\x8f\x06\x42\x9d\xa4\x2a\x31\x27\x89\x92\x09\x14\xd6\x9c\x84\xd3\x74\x52\xa8\xb4\x1f\xfe\xe8\xf3\x70\x48\x4e\x0e\x57\xf1\xf8\x0d\x38\xa1\x87\xfc\x29\xa3\xbd\x5a\xf1\x16\xc8\x72\x4d\x25\xa7\xfe\xfa\x8f\xdd\x0b\x35\x18\x97\xbe\x64\x55\x86\x75\xcf\xd6\xb8\x37\xdb\xd6\x9d\xfa\xfd\xaa\xfe\x58\x25\x98\x36\xa8\xdb\xa1\x69\x76\xbd\x9e\x68\xaf\xb3\x7a\x3d\x62\xe7\x5a\xa8\x3d\x86\xb4\xcd\x89\x7b\xf5\x44\x51\x00\xb0\x96\x63\xf5\x31\x27\x9b\xd3\x13\x47\xae\xe4\x8c\x39\x7c\xb6\xbe\x14\x5d\xa3\x36\x9b\xd5\x18\x1c\xfd\xa7\xca\x54\xdd\x83\xd1\x08\x12\xfb\x97\x86\x5d\xa0\x32\x48\x55\xe6\xe5\x3f\x85\x7f\xfd\x65\xb5\x4a\xb8\x91\x25\x78\x33\x5f\x1e\x4d\x69\xbd\x8d\xae\x6d\xca\xc1\x0f\xe6\x58\x36\x41\x80\xfa\x42\x45\x0e\xbd\x1d\xde\x20\x45\x96\x4d\x2f\xef\x38\x9a\xd1\x78\xd9\x78\x0a\xd7\xa0\xb6\xde\x58\x55\x9b\xd5\x81\x5d\x29\x9f\x25\x00\x3d\x76\x8d\x85\xdb\xea\x5f\x90\x91\x5d\x29\xca\x17\x58\xab\xfd\x6f\x6c\xc4\x7c\xd4\x9b\xd9\x02\xc8\xd7\xb5\xef\x92\x56\xd6\xf2\x5d\xd6\x18\xdc\x32\x4d\xaf\x83\xcc\x1d\xcc\x6a\x7f\x97\xf7\x8c\xa2\x39\xb9\x57\x63\x49\x10\x3e\xc9\x7d\xf5\x9f\x3e\xe0\x57\xe5\x43\x21\x69\x30\xea\x3a\x6c\x05\xf6\x1e\x00\x2a\x53\xfc\x13\x87\xe9\x02\x5c\x9b\xb9\x48\x5b\x30\x7b\xbb\x85\x43\xb4\x72\xb1\x2c\x77\x85\x36\xfc\x9f\xaf\xfe\x59\xf2\x6c\xc0\x2e\x88\x2a\xe2\xea\xfd\x4f\xfe\xa5\x05\x97\xd0\xbd\xc8\xd2\x84\xeb\x14\xb9\x01\x9d\x51\x66\x14\xed\x1e\xaf\x04\x8e\x70\xda\xeb\x3d\xa2\xc2\x84\xac\xe0\xda\x8a\xa4\xcc\x38\xb2\x2d\x18\x2b\x3d\xeb\x04\xa2\x35\xd2\xdc\x40\xa2\x64\xfa\x88\x95\x7e\x05\x75\xf5\xdf\x36\x61\x8c\x62\x14\x68\xe1\xe3\xef\x45\x0e\xf3\x48\x7a\xd4\x56\x6e\xd4\x28\x9c\xea\xea\x88\xf5\x48\xaa\xb9\x17\x06\x9a\x4e\x12\x61\x98\xa0\x04\x9e\xe3\x06\x79\xac\x4e\xc5\x80\xfd\xd7\x2c\xf0\xab\x1e\x13\x36\x98\xa6\x51\x6f\xf6\x63\x7a\x94\xf5\xc0\xae\x0f\xd4\x48\x69\x98\x82\x66\x47\xa9\xc2\x6f\x30\x47\xe5\x78\xc0\xfe\xaf\x13\xf1\xc9\x06\x31\xa6\x74\x0a\x8f\xe2\x41\x12\xb1\x58\x49\x14\x4d\xf4\x2f\xd8\x11\xa5\xb6\x88\x3c\x87\x54\x70\x0b\xd9\xec\x98\xa2\x9b\x42\x72\xcc\x26\x5b\xb7\x49\x46\x54\x23\x13\xea\xf7\xbf\x5d\xf3\x26\x4e\x76\x8b\x9d\xfd\x36\x18\xb9\x6a\xc8\x90\x94\x39\xb7\x85\x15\x0f\x52\x6b\x3c\xde\x0d\x0f\x77\x43\xf6\x0b\x64\xa6\xda\xe0\x7f\x38\x3c\xe0\x4c\xc3\x18\xb1\x9c\x30\x77\x0f\x1c\x17\xc9\xf2\x8c\xae\x47\x38\xda\x7a\x7b\x76\x9f\x39\xf1\xff\xf7\xbf\x4d\xb9\xe5\x2b\x5e\xa0\x3d\x9f\x15\xcb\x8c\x03\x8f\x31\xca\xba\xf3\x55\x9b\xb5\x81\x81\xd6\x0f\xbf\x53\x0f\x28\xea\x2f\xfb\xb2\xad\x52\xa3\x49\x8d\x82\x28\xc2\x7e\xf7\x35\x8c\x85\xb1\x7a\xd6\xb0\x6c\x7a\x8f\x86\x62\x42\x1a\xcb\xa5\x15\x48\xd9\x58\x78\xb3\xef\x6d\x83\x4e\xfc\x1e\xb0\xb7\x4e\xd7\x42\x1b\xd6\xbd\x63\xd3\x24\x60\xdf\xce\x0a\x60\x7f\x6e\xfc\xf1\x95\x2e\x12\xc4\x35\x4f\x68\x08\xb9\x78\x9a\x6a\x30\x8b\xf4\x61\x19\xfa\xac\x5d\x7f\x50\xf3\x1f\x05\xc1\xe1\x75\x30\x08\x78\xc7\xad\x31\x62\xec\xa4\xcc\x90\x4a\x19\xcc\xbc\x2d\x69\x93\xb4\x02\xfc\x90\x5c\x30\x90\x57\x4c\x40\xd8\x20\xf7\x27\x4a\x9a\x32\x0f\x11\x91\x4e\xeb\x29\x40\xa6\x20\x93\x19\xe6\xde\x64\x53\xd0\x03\xf6\x8d\x71\x3b\xc5\xfe\x2a\xc6\x4e\xef\xf3\x83\x36\x45\xa5\xe0\x46\x9a\x9b\x81\x30\x8d\x82\xb4\x18\xe3\xe9\x64\xa0\xd0\x43\xc3\x5d\xe0\x93\x7c\x42\x9c\xc9\xfc\x24\x4a\xb2\xb5\xde\x56\x29\x9f\xc1\x08\x1a\xe0\x42\x07\xde\x2d\x69\xac\xc8\x95\x56\x28\x23\x42\x2a\x5a\x45\x47\x5b\x69\xa3\x6a\x44\x49\x9d\xd4\x6f\x5b\x11\xc6\x80\xa5\xb9\xc5\xa0\xe2\x56\x4a\x02\x3e\x34\xad\x34\x81\xcc\xbc\x68\x7b\xda\x9a\xdf\xd9\x50\xe5\xbb\x3d\xe5\x9a\xa6\x6b\x2e\xef\x20\x65\x19\x3c\x88\x44\x8d\x35\x2f\x26\x22\xc1\xcc\x45\xf2\xab\x38\x59\xdd\x92\xef\x7c\x70\xb8\x12\xd1\x56\x91\xf1\xa2\x1c\x66\xc2\x4c\x60\xa9\x2c\xb3\x16\x47\x0d\x24\x1a\xec\x52\x0a\xd2\x42\xd1\x1b\x7a\xaf\x66\xca\x21\xdc\xcb\x77\xe0\xc3\x19\x09\xe7\xf0\xe0\x39\x10\x27\x89\x3b\x48\xc1\x43\x51\x57\x93\xae\x60\x38\x60\x97\x36\x18\xa6\xdd\x17\x77\x00\x05\x61\x1a\xc6\x1d\x98\x1c\x6d\x2a\x46\xc8\x04\x28\xff\x92\xf2\x58\x01\x82\x99\xd1\x6a\x01\x24\x06\x01\x1a\xf8\xc3\xde\x80\xb4\xcb\x85\x9a\xf5\x7a\xd7\x1a\x9d\x6b\x3d\x18\x2b\x9a\xf2\x38\x24\x6b\x5a\x14\x78\xa2\xfb\xb7\x03\x25\x3e\xd9\x76\x07\x29\x5d\xf6\x86\xe2\xb6\x1e\xa7\x35\xdf\xb4\x5e\xf7\xd1\x00\x86\x4d\xd4\xbd\xef\x69\xfe\xd0\x7a\x8b\x4d\xd8\xdb\x54\x98\xc4\x9d\x74\x48\xd9\xb9\x92\x26\xe4\xcc\x72\x49\x69\xb0\x53\x9e\x11\x2a\x84\x8e\x0b\x95\xa1\x7f\x23\x2d\x83\x3a\x41\xa1\xad\x90\x0f\x01\x6b\x5d\x9b\x30\x95\x15\x6c\xee\x11\x16\xfb\x18\x17\x0c\xfc\xe1\x5a\x65\xd9\x7a\x2e\xb6\x56\x2f\xdd\x44\x2b\x0d\x00\xd8\xd8\xff\x7a\x19\x20\xe6\x6d\x71\x0e\xa7\x6b\x0f\x12\xa2\x86\x13\x75\x2b\xc0\x0e\xc1\xde\x03\x48\x96\x4c\x20\xb9\x33\x75\x80\x06\x56\x9d\x9f\xdb\x35\x6f\x7f\x6a\x53\xac\x4a\x9e\x72\xbb\x82\x8a\x86\x01\x20\xb7\x99\x84\xfb\xf9\x80\x83\x45\x62\xcf\xa7\x5c\x64\x7c\x98\x51\xae\x78\xf5\x57\xaf\x39\x0f\x11\xf8\x79\x51\x66\x99\x77\x22\xa1\x03\xd6\x6a\x3e\x1a\x89\x04\x63\x50\xd0\xcd\x5c\x87\x35\x2d\x5d\xc2\x4e\xae\x65\x63\xb9\x2d\x17\xf6\x68\xcd\x06\xaf\xdb\x58\xa7\x87\x88\x95\x06\xa2\xb9\xfa\xe1\x2d\x65\xc5\x4d\x03\x48\xd9\x6a\xd9\xbf\x07\xec\x4a\x59\x1f\x97\xf1\x06\x8c\x09\xb1\x1f\xef\x80\x1b\x25\x1b\xd4\x15\xa5\x5f\x2d\xc6\x42\xf2\xcc\x2f\xaa\x69\xdf\xab\x74\x0f\x8e\x26\xe5\x5c\x8c\x35\xb7\x15\x51\xac\xe7\xed\xb9\x8b\xe7\x8b\x64\x09\x1d\xb0\x33\x39\xc3\xfd\xf6\x01\x1b\xae\x67\xab\x55\x5a\x26\xe0\x9d\xcf\xa5\x69\x76\xd2\x29\x19\x6d\xbb\x17\xce\xc3\x20\x75\x00\x62\x0a\x96\x0b\xef\x52\x52\x12\x18\x37\x85\xd3\xe3\x02\x4e\x92\x29\xbc\x06\x30\x32\x8b\xb3\xeb\x4b\xf6\xce\x67\x12\x0f\x58\xbf\xdf\x27\xbf\xa7\xb1\xba\x4c\x90\xbf\xb8\x23\x24\x53\xcf\x29\x08\xfb\x28\xde\xa6\x11\xbb\xeb\x2d\x1f\x24\x82\x15\xdc\x4e\xd8\x80\x00\x3f\x68\x80\x82\xb1\x2f\x1d\xaf\x79\xe0\x79\xe1\xf0\xfe\x7b\x49\xd4\xfb\x4b\xa5\x6e\x68\x93\x68\xcc\xff\x65\x27\x27\xf3\x38\xa1\x86\x4e\x44\xf5\x06\x44\x44\x8d\x91\x52\x87\xa6\xbd\xa4\x81\xfb\xf0\x6b\x0c\xff\x59\x32\x3a\x8e\xc5\x35\x9c\xb2\xef\x0f\xce\xc2\xe9\xfb\xfe\xa0\xc7\xbe\x3f\xb8\xd6\x6a\x8c\x31\xa1\x72\xfc\xbd\x0f\xf2\xfc\xfe\xe0\x02\xc6\x9a\xa7\x90\x7e\x7f\xe0\xba\xfd\x15\x06\xf3\xbe\x01\x3d\x86\xaf\x61\xf6\x67\xec\xac\xfa\x39\x70\x84\x3f\x53\xdc\xaf\xfb\xdd\xb1\x60\xc7\xa7\xfe\x9c\xf3\xa2\xfa\xe1\x0d\x2f\xaa\x8f\xcf\x6b\x3c\xfb\xee\x87\x1c\x2c\x9f\xbe\x1c\xd4\x3b\xfa\xe3\x3f\x8c\x92\xa7\xdf\x1f\xd4\xf3\xef\xa9\x5c\x60\xd0\xc4\xec\xfb\x03\xd6\x1a\xf5\xf4\xfb\x03\x1c\x37\xfc\x1e\x26\x79\xfa\xfd\x81\x1b\xc9\xfd\xac\x95\x55\xc3\x72\x74\xfa\xfd\x01\xc6\x22\xf4\x5e\xf6\x34\x14\x3d\x27\x30\xfd\xb9\x1e\xe1\xfb\x83\x1f\xdd\x9e\x9c\x9c\x78\x17\x86\xbf\x59\xe1\xdf\xcb\x8d\xd5\x8f\xd2\xfd\xc7\xe2\x91\xfa\x2c\xe3\xc6\xde\x6a\x2e\x0d\x8e\x7f\x2b\xf2\xe5\x6e\x5c\xd2\xe5\xf0\xbc\xaf\x7c\xae\x91\x06\xac\x7c\x4c\xd8\xb0\xf2\xf1\x0a\xee\xb9\x09\xe7\x5a\x5c\xc3\x86\x56\xe7\xc5\x0f\xeb\x6c\x08\x27\xcf\x05\x3b\x4d\xb5\x3f\x8e\x07\xf8\xb7\xc1\x57\xe9\x70\x47\xdc\xd3\x37\x8c\x75\xc6\x7d\xf3\x01\x3a\xb5\x82\x7f\xef\x2b\x78\xb0\x52\xa6\xa0\x33\x74\x56\xd5\xbd\x92\x27\x24\x1d\x30\xb2\x1b\xf0\xca\x4a\x83\x71\x74\xc8\x9d\x64\xc3\x78\x4d\x31\x3c\xa1\x47\x47\x3b\x7c\x11\x13\xea\x06\x19\x5d\x92\x40\x61\x91\xd3\xed\xee\x62\x66\x0d\xa3\x8a\x93\xac\xfa\x76\x35\x7a\x78\xe4\xd8\x10\xf0\xfe\x6d\xf2\xef\x4f\xca\x9c\x3b\xd6\xc1\x53\x0c\xe3\xa9\x9e\x91\xfa\x46\xea\x16\x91\x54\x72\x0a\x91\x8d\x3f\xec\x83\x07\xb5\x67\x24\xbc\xca\x56\x7b\xc4\x62\xb2\xd1\xe2\x73\xfe\xf0\x1a\xe4\xd8\x4e\x4e\xd9\x6f\x7e\xfd\x7f\x7e\xff\x87\x15\x2f\x12\x61\x84\xf4\x2b\x90\xde\x16\xb4\x21\x18\x16\x3f\x9c\x37\x1a\x0e\x42\xfc\xe5\x60\x5c\xbf\x53\x19\xb9\x6b\x0c\xba\xe7\x18\x83\xe5\xd9\x65\x59\x38\xb8\x7c\x89\xd1\xb5\xc6\x72\x99\x40\xcf\x09\x49\x4b\x3b\x13\x15\x01\xcf\x66\xec\xe5\xaf\xe9\x06\x22\x1c\x7a\x81\x7c\x7f\xf7\xf0\xc3\x60\xc9\x94\x85\x61\x7f\xec\xcd\xcd\x47\x18\xe6\xb6\x4a\x8d\x10\x71\x48\xc5\xd4\x40\x9c\x30\x18\x03\x16\x39\x21\x54\xf3\x7d\x6c\xe3\x1e\xb3\x07\x6e\x66\x0b\xcc\x85\x14\x79\x99\x9f\xb2\x17\x2b\xe3\x39\x1d\x49\xdb\x70\x37\xe9\xe5\x5a\x10\xe0\x8e\x74\x8d\x35\xcf\x73\x8c\xa3\x17\x29\x48\x2b\x46\x02\x83\x06\x2a\xd4\x46\x75\x9f\x3e\x0c\x31\x28\x15\x14\x31\x3c\xc5\xd1\xa1\x06\xb2\x5f\x93\x9c\xa3\x91\x03\x7b\xef\x4d\xd2\x24\x50\xb3\x02\xe8\x34\x90\x02\xc3\xe0\xa1\x20\x51\xb5\xe1\x86\xc8\x81\x4b\x21\xc7\xa6\x8e\xe7\xf2\xb7\x4f\xb9\x87\xf7\x13\xf0\xde\x73\x68\xfa\x82\x12\xa7\x2c\xa5\xa8\x37\xf1\x3a\x3c\x10\x03\x40\x49\x46\x9f\xb7\x69\x3a\xc9\x31\x87\xec\x9c\x1b\x08\xa7\xb1\x19\xcd\x15\x4a\x21\x55\xa9\x3d\x9d\x1d\xd5\x97\x2f\x7e\xbd\x76\xcb\xab\xf7\x56\xbb\xf0\xaa\x30\xaf\xef\xce\xfa\xff\x97\xf7\xff\xf5\xc3\x91\xff\xc7\x8b\xfe\x1f\xff\xde\x3b\xfd\xe1\xf3\xc6\x9f\x3f\xac\x8e\xce\x5a\x2e\xcc\xaf\x40\x1f\xcf\x44\x82\x9c\x18\x76\xb4\x17\xa2\x54\x6e\x75\x09\x3d\xf6\x25\xcf\x0c\xf4\xd8\x37\x12\x59\xc3\x9e\x40\x5b\xef\xa1\x76\x5c\xf9\xc0\x8d\xba\xca\x53\xee\x5f\xc1\x29\xad\x7f\xc7\x4f\x77\x9d\xfa\xba\x19\x90\x82\xa9\xa1\x41\x69\x64\x03\xcf\x28\x9f\x60\xa4\xd4\xc0\x4b\xb8\x83\x44\xe5\x27\xd5\x73\x12\xad\xdf\x70\x39\x63\x35\x59\x23\xa1\x74\x1e\xd3\x0d\x06\xcc\xf3\x44\x2b\x63\xea\x22\x3f\x2c\x13\x77\xc0\xce\x6a\xbd\xd1\x11\xcb\x21\x24\x1c\x65\x71\x3d\x14\x56\x73\x32\xfa\x06\xb9\xb2\xb6\x28\x8d\xca\x8c\x1d\x39\x75\x75\x80\x81\x64\x0b\xd4\xd5\x17\x0c\xe3\x43\x91\xe1\xbd\x4d\x4e\x95\x4e\x94\x1c\x65\xc2\xab\x00\x79\xa1\xb4\xe5\xd2\x86\xac\xa6\x31\x3c\xd0\x55\x71\xe4\x76\x10\x86\x1d\xa5\xd2\xbc\x7c\xf9\xeb\xdf\xdc\x94\xc3\x54\xe5\x5c\xc8\x2f\x73\x7b\x72\xfc\xc5\xd1\x3f\x4b\x9e\xa1\x97\xf7\x8a\xe7\xf0\x65\x6e\x57\x5f\xba\xb5\x35\x5b\x7c\xf9\xfb\x0d\x4e\xd1\xd1\x77\x74\x56\x7e\x38\xfa\xae\xef\xff\xf5\x79\xf8\xe9\xf8\x8b\xa3\xef\x07\x6b\x9f\x1f\x7f\x7e\x82\x31\x92\xd5\x91\xfb\xe1\xbb\x7e\x7d\xfc\x06\x3f\x7c\x7e\xfc\x45\xe3\xd9\xf1\xb2\xc3\xd8\x0a\x5d\x74\x5a\x40\x3f\xe7\x45\xff\x0e\x66\x2b\x0e\xe7\x4a\x71\x74\xb1\x23\x82\x58\xce\x8b\x65\xda\xf7\x48\x8c\xdf\xf0\xe2\x1d\x8c\x40\x83\x4c\x96\x22\xf9\x9e\x1e\x18\xa7\x3f\xac\x79\x84\x11\x58\x3b\x58\x9d\x1c\xdf\x21\x4b\xdb\x3a\x71\x7a\x03\x6c\xd9\x4c\x7e\x94\x6b\xe2\x17\x1f\x1d\xa4\x5a\xe7\xce\x3d\x84\xf3\xfd\x2d\xd9\x8f\x76\xee\xa7\x14\x2b\x35\xad\xb6\x0d\xf3\xf2\x82\x44\x5f\x24\x3d\x28\xce\x4d\x94\xd3\xf3\x4a\x29\xfe\x59\x02\xbb\xbc\xa8\xf2\xe9\x85\x4c\xb2\x12\x2b\xf8\x7d\xf3\xcd\xe5\x85\xd3\xdf\xff\xcb\x93\x9b\x7b\x60\xa9\x92\x87\x96\xbd\xbd\x7a\xfd\xdf\x68\x0c\xc0\x37\x7a\xc4\xd0\x7d\x52\x6f\x26\x38\x99\xc9\x3c\x03\x66\xff\x05\x14\x27\x87\x23\x27\xbc\xa8\xec\x27\x48\xee\x30\xc2\x2a\x2b\x0c\x26\x02\x30\x53\x6a\x3f\x3b\xd7\x31\x79\x7c\x31\xf5\xcf\xfb\x83\x43\x0e\x03\x66\x82\xec\x14\xdc\x99\x28\x29\x21\x41\xa7\xb9\x93\x02\xdf\xc3\xf9\x70\x88\xfc\xd6\xcb\xac\x38\xc6\x0e\x87\xc1\x3b\xd4\x76\x46\x0b\x37\x87\x73\x5a\xe9\x7b\x3f\x49\x0b\xeb\xdd\x69\x44\xb2\x67\xa2\x67\xf3\xdd\x23\xf6\xe7\x85\x30\xae\xb6\xea\x3c\x97\xb7\x85\xb6\xd5\xca\x39\x3a\xe1\x86\x0d\x01\x24\x9a\x73\xc9\xfa\x07\xd2\x63\x1d\xd4\x86\xd8\xb2\xe8\x5b\xd5\x4f\x97\x6f\xde\x23\x90\x7b\x1c\x6a\x6b\x34\xd7\xb9\xd2\x18\xdb\x2a\xaa\xf7\x93\xd9\x32\x18\x98\xba\x52\x60\x25\x83\x6c\xbb\xb0\xd5\x8a\xc9\x9c\x55\x17\x35\x0b\x6f\xd4\xf0\x7a\xc6\xe2\x94\x9c\xf6\xd8\xb2\x6c\x58\x85\xde\xbc\xb6\x65\x6f\xfb\x39\xd2\x36\xdf\x80\x9e\x8a\x9d\x98\xdf\x63\x07\x33\xa1\x38\x93\xb3\xf7\x7f\xac\x9c\xe8\xb5\xf3\x20\x68\xfa\x4b\xd4\x23\xee\x9b\xb5\xf1\xef\x08\xc1\x75\x51\xfe\xdb\xf4\xb1\x2d\xb3\x24\x6a\xd2\x4a\xf2\x30\x56\x69\x74\xb9\x37\x7f\x2b\x87\x95\xa0\x5c\xf7\xee\x75\x20\xf6\xbf\xff\xfe\xec\xb3\x7e\xbf\xff\x19\x2f\x44\x60\xb3\x8c\x17\x02\x1e\x2c\x48\xba\xb4\xf8\xee\x0f\x18\xc6\x3b\x7d\xf9\xd9\x9d\x90\xe9\x29\x3b\x2f\x8d\x55\x79\x30\x8b\x63\xe5\x57\xc4\xcf\xcf\x82\x19\xc3\x0d\xc2\xa5\x54\xb6\x19\x04\xeb\xd4\x6f\xed\xc8\x89\xee\x8f\x41\x0e\x9c\xb8\x86\x61\xce\xa0\xb1\xf3\x30\xf4\xf4\xc5\xe0\x8f\x03\xa7\xf6\x23\x0e\x79\xeb\x9f\xb1\x3c\x2f\x4e\x31\x53\xfc\x33\x2f\x94\xb0\x24\x2b\x0d\x96\xc7\x45\xf0\xf9\xef\xcd\xa0\x0a\x86\x1b\x24\x4a\x83\x72\xff\xc9\x3f\x73\xfa\xb8\x9b\xc5\x58\xab\xb2\xa8\xcb\x8f\xb4\xde\xf1\xf2\x8a\x9f\x2c\x45\xaf\x35\x10\xbc\xcf\x54\x46\x17\xd1\x7a\x20\xd0\xf0\xfe\x0c\x79\xc8\xe1\x73\x27\x7d\x7e\xbd\xfa\x9d\xd7\xc2\xd0\x91\x2a\xb2\x52\xf3\x6c\xd5\x42\xf0\x15\x33\x51\xda\x5e\xd5\xd3\xc2\x1c\x54\x33\x6d\xfe\xdb\xbf\x28\x24\x06\x24\xad\xe8\xed\x33\xc6\x4c\xa2\x1c\xfe\x54\x68\x96\x7e\xc6\x82\x5b\xce\x77\xde\x6f\x65\xc2\xa0\x6f\xf0\x5c\x65\x65\xde\x74\x52\xf5\x17\xd9\x8a\x83\x5a\x50\x8e\xcf\x6f\xbe\x6d\x60\xef\x3f\x8c\x92\xd7\xdc\x69\x23\x94\x54\x91\x0a\x53\x64\x7c\x76\xd5\x96\x8c\x69\x37\x2f\xe8\xd9\x67\x8f\x1c\x9c\x25\xe3\xcf\xf9\x16\xd7\x4f\x61\xda\xd8\xa7\xe6\xf0\xdf\x2e\xfc\xbe\xe9\xf0\x61\xf9\xdc\x8d\xdc\x08\x68\x51\x12\x42\x15\x14\xb3\x66\x42\x4b\x5e\xa1\x19\xbd\x5b\x7c\xb0\x62\x4a\xcd\x2e\x49\x77\x2d\x26\xdc\x2c\x82\xf8\x7a\xee\xd7\x25\xdd\xd1\x8b\xd3\x97\x3c\x2b\x26\x3c\x98\x61\x4c\x32\x81\xbc\x11\xea\xa5\x0a\x90\x67\xd7\x97\xdf\xfe\xe6\x66\xee\xc1\x7c\x12\xf0\x32\xec\x27\xf1\x9a\x28\x48\xe5\x59\xc3\xbd\x73\x72\xef\x8f\x4b\xbf\xb9\x29\x20\xf9\x71\xb0\x30\xf3\x05\xee\xb4\x5c\xe4\xec\x57\xa9\xf2\x73\x3f\x3b\xf8\x37\x7e\x5a\xc5\xd3\x1a\x74\x71\x8e\x32\xb7\x43\xad\x1c\x48\xfc\x1a\x43\x88\x82\xad\xd1\x13\x52\x0f\xc7\xca\xb5\x58\x19\x94\xc9\x58\x4b\xa1\x0e\xb4\xa6\x01\xbb\xc1\x98\xb3\xca\x51\x91\x28\x39\x05\x6d\x99\x86\x44\x8d\xa5\xf8\x57\xd5\x9b\x99\x73\x74\xe3\xa9\x95\x3c\x0b\xb1\xbb\x68\x54\xe4\x33\xa6\xe1\x1f\xe8\x99\x94\x8d\x1e\x42\x21\xa1\x2a\xc5\xa3\xce\xdf\x18\x0b\x1b\xa8\x7e\xa2\xf2\xbc\x94\xc2\xce\x4e\x90\x80\x8b\x61\xe9\x08\xe7\x49\x0a\x53\xc8\x4e\x8c\x18\xf7\xb9\x4e\x26\xc2\x42\xe2\x14\x96\x13\x5e\x88\x3e\x4e\x56\x92\x5f\x31\x4f\x7f\x51\xb1\x9e\xf9\xe8\xa3\x95\x9c\x11\x09\xec\x5a\x58\x3b\xf2\xea\x73\x10\x1b\x45\x91\x6a\x90\x06\x03\xee\xbb\x57\x37\xb7\x95\x12\xe9\xcf\x25\x42\xb8\x61\xce\xaf\x81\xed\x00\x25\xe4\x08\x82\xe9\x35\x14\x56\x00\x99\x52\xb9\x79\xb4\xff\x65\x02\x25\xaf\x72\x98\x0b\x0c\x5b\xc2\x5c\x65\x0a\x2e\x3d\x47\xa6\x87\x66\x25\x8a\x78\x19\xb0\xcb\x86\x15\xec\xbd\x83\x1a\x6d\xcc\x7d\x07\xbe\xcd\x81\xdd\xe4\xd9\x8b\x1f\x2c\x91\x00\x03\x2f\x5d\xb9\x3b\x2b\xcf\x30\x4b\x21\xc9\x78\xc8\x74\xb1\x90\x65\xec\xed\xeb\x37\x18\x21\x14\xa2\x2f\xb3\x6c\xb1\x3a\x5d\xc2\x25\xcb\xb9\xc4\x88\x86\xa2\x20\xdb\x38\xf7\x15\xe2\x43\x30\xca\xa6\x93\x5f\xa7\x97\xf6\xd9\x72\x06\x15\x9e\xfa\x09\xce\x3d\x59\x27\x0a\x2f\xc8\x40\x6b\xa0\x76\x56\xbf\xeb\x6d\x04\xa5\x24\x97\x3f\x96\xd2\xb8\x83\x10\xab\x98\xf3\x02\xa5\xbc\x90\xda\xc8\x9b\x08\x8e\x19\x37\xb3\x90\x74\x36\x9c\x31\x27\xc6\x21\x41\xb0\x4a\xf9\xc0\x1c\xf7\x2d\x12\x06\x0d\x56\x0b\x98\x36\x0d\xa4\x95\x23\x6a\x7b\x9d\x60\xf3\x34\xda\xb5\x22\x31\x2f\x84\x97\x5d\xd2\x4a\xb0\xdc\x00\x7a\xd7\x97\x1e\xdf\x6a\x71\xd4\x78\x7c\xf3\xc5\x30\xbd\x7c\x50\xc9\xb5\x38\x92\x47\xac\x94\xd5\x15\x15\x31\xa0\xb5\x89\x84\x94\xef\xaf\xb9\x74\x0f\x96\x22\xf7\x0e\xd0\x7a\x4c\x83\x52\xf7\x72\x75\x74\x40\xb7\x29\x5e\x4d\xd8\x55\x3f\x87\x6a\x32\x75\xd8\x8c\x55\x78\x5a\x49\x83\x46\xd8\x55\x05\x67\xa6\x82\x33\x3e\x1e\x6b\x8c\x96\x5d\x19\x69\xb0\x61\x9a\xd6\x26\xf5\x20\xfb\x24\xc9\xaf\x7d\xc3\x91\xc1\xb5\x2f\xac\xb4\xd0\x86\x17\x16\x85\xc5\x76\xdb\x2c\xa1\x8c\xa3\x19\x2d\x80\x56\xe9\x47\x72\x57\x36\x2d\x5a\xb5\x51\xb1\xaa\xf6\x3e\xcf\x4d\xc4\x3f\x1d\x62\x4d\xb1\x8a\x34\x3b\x72\x90\xd4\xde\x6c\xef\x26\x29\x40\x3b\x7d\x9c\xe2\x89\x39\x4b\x48\x7e\xab\x08\x4f\xf0\x0e\x3f\x32\x9d\x2d\x0a\xb6\x6d\x5e\x15\xb4\x8f\x21\x55\x8f\xbc\xb6\x4d\x1d\xcf\x26\xd0\x1e\x7d\x79\xcb\x42\x60\x0d\x0e\xd3\x79\xdf\x0e\x0c\x9d\x77\xba\x41\x4e\x0e\xb5\xb6\x79\x8b\xdf\xbf\x69\x46\x92\x68\x7e\xcf\x40\x26\xca\x11\x8b\xff\xf7\xe6\xed\x55\xc8\x5f\xbb\xb4\x4c\xe4\x85\xbf\x2c\x87\xbd\xe1\xda\x4c\x78\x06\x54\x1b\xf9\x1b\x99\xb7\xfe\x9e\x0b\x01\x4f\x21\xe3\x33\xea\x2c\x85\x44\xa1\x25\x5e\x69\x56\x38\x01\x37\x2f\x4a\x4c\xe1\xc0\xa7\x38\xee\xa3\x49\x3a\x3b\x80\xa6\x36\x51\x0d\x67\x4b\x2d\xa0\xed\xf6\xd0\x4f\x37\xa5\x01\xcd\xc9\x6c\x5a\xbe\x6e\x8b\xe2\x75\x1b\xae\xb2\xca\x90\xb9\x5e\x63\x63\x6b\xf6\xb8\x65\x2e\xd8\xda\x5b\xb1\x52\x28\x32\x35\x73\x78\xf1\xf8\x59\xd9\x70\x3d\x1b\x9f\xeb\x4d\xfb\xdb\xf4\x2c\x6f\xd8\x1f\x19\xa7\xba\xe8\x69\x99\x02\xb5\x53\x47\xeb\xdc\x7f\x5b\x75\xb4\xc4\xfe\xb8\xba\xb7\xf7\xc2\xfc\xae\x2f\x83\xb5\xa1\xf2\xfa\x7a\xda\x54\xfd\x89\xb9\x3b\x5f\x57\x6e\xe4\x86\x5c\x5d\x79\x03\xc9\x5a\x8f\x79\x49\x3a\xd4\xa8\x7b\xb4\x48\xf6\x7b\x62\x7b\x8f\x08\x38\xe1\xb5\x47\xc4\x9c\xf0\xda\x63\xc2\x0e\xb5\x6d\xf8\xe8\xe3\x58\x48\xad\x9d\x3c\xee\x34\x7b\x2f\xaa\x57\x3b\x93\xb6\xb7\xa2\x73\x4a\xfe\x38\x9a\x2f\x99\xe9\x35\x9a\x6f\x5b\xe6\xcf\x55\x13\x66\x47\xab\x4c\xe6\x03\xa7\x17\x0f\xd0\x28\xfb\xdd\x0f\x03\xea\xf2\x38\x64\xc3\x7b\xdb\x86\x78\xa4\xf3\x50\xd3\x72\x5e\x2a\xeb\x1c\x4c\xd3\xf5\x5e\xf8\x95\x90\x3a\xbb\xbe\x0c\x06\xd6\x0f\xb8\xb5\xa6\x80\xe4\x09\x48\xdd\x37\xad\x69\xb4\x64\x6e\x9f\x07\xea\x04\x6a\x37\x59\x36\xcc\x54\x72\xe7\x6d\xc9\xef\x2e\xaa\x94\x4b\xa7\x75\x39\xe1\xc7\x27\x5c\x32\xf1\x18\x11\x89\x62\x76\x14\xb3\xa3\x98\xfd\x5c\xc4\x6c\xf2\xd9\x3c\x05\x4a\x35\x37\x91\x95\xb4\x8a\xe2\x61\x23\xb5\x5a\xd3\x22\xb5\xc2\x16\xa9\xd5\x23\xed\xd9\x51\xab\x8d\x64\xc0\x0d\xe2\x3a\xd7\x1f\xe4\x68\xe0\x8e\x06\xee\x68\xe0\xf6\x2d\xf2\x32\xdf\x22\x2f\x8b\xbc\x2c\x1a\xb8\xd7\x75\x19\x0d\xdc\x5b\x76\x14\x0d\xdc\xd1\xc0\xdd\x6a\xd1\xc0\x1d\x0d\xdc\xd1\xc0\x1d\x0d\xdc\x2b\x5a\x14\xb3\x77\xec\x34\x8a\xd9\x6b\xda\xa7\x2d\x66\x47\x03\x77\xa4\x56\x91\x5a\x45\x6a\xf5\x3c\xa8\xd5\xfe\x06\xee\x24\x03\x2e\x97\x2b\xba\x73\x79\x12\xf8\x5e\xe3\x6a\x5f\xca\x2f\xa1\x5f\x87\x30\xe1\x53\xa1\x4a\x5d\x17\x14\x3b\xbf\xf9\x96\x8d\xc1\x1a\x87\x05\xb0\xfc\xf2\x91\x3d\x93\xf2\x41\xf2\x61\xb6\xb4\xe3\xc7\x48\x89\xff\x72\xbd\x41\x7f\xa8\x94\x5b\xdd\x22\xc4\x50\xae\x0f\x72\xf2\x36\x71\xff\x07\xab\xf4\x8e\xe5\xc1\xff\xe7\xef\x2e\xba\x0a\xf9\xc7\x5b\x80\xaa\x5e\x7d\xc1\x6a\xac\xb0\xe9\x6b\x62\xbe\xbd\x97\x90\x62\x32\x68\x28\xef\xef\x0e\xbd\x48\x84\xcd\x66\xd5\xc0\x4b\x2f\xb4\x7b\x3e\xa9\x03\xe7\xef\x2e\x36\x77\xa9\x84\x0d\xf8\x10\xde\x93\xe8\x1b\x89\xbe\x91\xaa\x45\x31\x68\xc7\x4e\xa3\x18\xb4\xa6\x7d\xda\x62\xd0\x53\xf7\x25\x44\x0f\x00\x8b\x1e\x80\xf0\x5a\xf4\x00\x44\x0f\x40\x37\x60\x8a\x1e\x80\xe8\x01\x58\xff\x52\x14\x26\x77\xec\x34\x0a\x93\x6b\xda\xa7\x2d\x4c\x46\x0f\x40\xa4\x56\x91\x5a\x45\x6a\xf5\x3c\xa8\xd5\x73\x0c\x71\x8f\x86\xd8\x68\x88\x8d\x86\xd8\xc8\x8d\x22\x37\x7a\xa4\x3d\x3b\x6e\x14\x0d\xb1\xdb\x76\x14\x0d\xb1\xd1\x10\xbb\xaa\x45\x43\x6c\x34\xc4\x46\x43\x6c\x34\xc4\xae\x6f\x51\x98\xc4\x16\x85\xc9\x47\xda\xb3\x13\x26\xa3\x21\x36\x52\xab\x48\xad\x22\xb5\x7a\x1e\xd4\x6a\x7f\x43\xec\x23\x27\xa9\x85\x32\x4d\xfb\xa9\x97\x1c\x43\x3c\x30\x56\xf6\xf7\x37\xbe\xd1\x15\x58\xe1\x82\xfb\x1e\xcb\x44\x2e\x42\xdd\x76\xa5\x1d\x76\xf4\x13\x6e\xc0\x2c\xf4\xb1\x64\xfc\xf5\x73\x5f\x7f\x52\xd7\xde\xc3\x52\x05\x32\x0b\x19\xfa\xf1\xb8\xb2\xf5\x34\x44\xb2\x01\xec\xdc\xf8\xee\xc5\xfa\xde\xda\xc7\x97\xbd\xc3\x15\xff\x8f\x92\xef\xc7\xaf\x55\x1f\x72\x03\xbf\xff\xed\xc2\x6d\x20\xcd\x57\x72\x48\x05\xb7\xbb\xdf\x7a\x5e\x0f\xb1\x1a\x73\x37\x38\x01\xd5\x34\x76\xec\xc5\x5f\x57\xf0\xe8\xde\x39\x04\x4b\x2f\xe9\xe5\x70\x6b\xfe\xfc\x6d\xd7\x35\xff\x95\x2b\xae\x75\xa9\x34\xab\xfb\x09\x84\x6b\xe2\xfc\x85\x0e\x26\x74\x2a\x4c\x95\xeb\xb0\xf4\x56\xc2\x3d\x93\x17\xc2\x38\x4b\x1e\x3f\xb6\x69\xcb\xee\xb4\x58\x0a\xac\x00\xa0\x0b\xf2\xab\x5c\x54\x45\x1c\xe6\x21\x56\x70\xed\xf8\x44\xf0\xbf\xa0\xe8\xd2\x78\x7b\x0e\xde\xeb\xef\x68\x5c\x2b\xaf\x3c\x2e\xa7\xf4\x1b\xb5\x26\x56\xf9\x7c\x36\x11\x4f\xfc\xcd\x52\xd7\xa0\x73\x61\xcc\xaa\xf4\x8c\xf6\xd4\x1f\x63\x1e\x1b\x30\x8d\x15\xf0\x0f\x2b\x6a\x4c\xa7\x12\x22\x49\xed\x1f\xf2\x84\xe9\x32\xf3\x57\x6b\xfb\x4b\x25\x18\x4f\x12\x55\x4a\xcb\x24\x40\x4a\x89\x1f\xcb\x70\x75\x03\x96\xb3\x81\x14\xb9\xa9\x0c\xd9\xa7\x79\x3e\xfa\x96\x5f\xc3\x19\x2d\x61\xe9\x35\x25\xcd\xb6\xb9\xcc\x89\xc3\x3f\xce\xbb\xb7\x11\x08\x36\x16\x07\xda\x86\x2e\x95\x89\x64\xf6\xae\xcc\xc0\x5f\xbc\x2a\x24\xf1\xad\xca\x15\xd6\x54\x14\x0a\x7c\x1b\x67\x4f\x37\x3e\xa7\x0a\xc8\x40\xe5\x4b\xbb\xb4\x3e\x0f\x77\x3f\xd2\x85\x49\xee\x23\xc6\x8b\x22\xc3\xc4\x2b\xe5\x78\xf7\xfd\x44\x24\x93\xfa\xd6\xda\x65\xaf\x6d\x2e\xc3\x6d\xa4\x64\xb0\xad\x14\x0d\x16\x8c\xa7\xc3\xc7\x50\x85\x6d\xa9\x71\x30\xba\x78\xe5\x2b\xad\xca\x62\xc3\xd7\x17\xed\x6e\xf4\x75\xb8\xd3\xb2\x29\x8e\x84\x87\xde\x99\x19\xee\xe1\x27\xe3\x9c\x37\xd6\x0f\x18\xbb\x1c\xb1\xbc\xcc\xac\x28\x32\xfc\x84\xea\xc5\xd0\xd5\xdf\x15\xdf\xe8\x31\x2e\x67\xc1\x37\xea\x2f\x5f\x82\x94\xf1\xb1\xeb\xd1\x86\x2b\xd9\xe9\xd6\xa6\x32\x77\x32\x48\xc3\xec\x87\x17\x7c\xba\xef\xab\xde\xd9\xbd\xc8\x32\xbc\x14\x3f\xcb\xd4\x3d\xa4\x03\x76\x70\x30\x4f\xca\x13\xa5\x1b\xf3\x41\x62\x72\xf0\x79\xeb\x2d\x47\x39\xea\x09\x6f\x82\x23\x6c\x6b\xf1\x9a\x6d\x27\x62\xb3\xed\x95\x09\xc6\xa4\x92\xc1\x6c\xfc\xcd\xbb\xd7\xbb\x21\xc2\x55\xbb\x0f\x7f\x4b\x17\x58\xb7\x2d\x05\xd7\x56\xf0\x8c\x95\x3a\x33\x84\x0b\xdc\x09\xcc\x3a\x5c\x73\x36\xe1\xe8\xf7\x4e\xc0\xd0\x7d\x5a\xec\x73\xda\x7d\xbf\x39\x74\xc6\x95\xcc\x66\x8c\xd3\xd6\x8c\xca\x2c\xeb\xb1\x91\x90\xdc\x91\x6e\x28\x42\xee\x9d\xd3\x44\xd9\x8d\x90\x09\xb8\x35\xf5\x2b\xe1\x04\x67\xe4\x7a\x74\x34\xa2\x3a\xe8\xa9\xbf\x9a\xd9\xdb\x1d\x8c\x1f\xc2\x1d\xfa\x04\x2f\x94\x75\x52\xad\x17\x7b\xde\xa9\x0c\xbd\x35\x95\x49\x19\x6f\x09\xe3\xcd\xc7\xff\x25\x24\xaa\x7b\xec\x1d\x32\x1f\xa7\x36\x82\xb0\x13\xa7\x45\x16\x45\x86\x17\xc8\x3b\x64\xa9\x91\xf2\xc8\x94\xc9\xc4\x2d\xe9\xa0\x50\xa9\x39\x70\xa4\xe8\xc0\x40\xa2\xc1\x9a\x83\x63\xf7\xd7\xfc\x1a\x70\x7d\xcd\xef\x4e\x78\x21\x0e\x8e\x7b\x0c\x01\x84\x57\x90\x29\x3b\x79\xbe\x78\x18\xd6\xda\xba\xf9\xf2\xb1\x36\x77\xbf\x6e\xa3\x07\x7f\x9f\x96\x2a\xe8\x7a\x2a\x47\xe7\x2d\x60\x66\xa6\x43\x4a\xba\x39\xbb\xf6\xb8\xcd\x11\x7c\xc6\xce\x24\x03\xf2\x91\x80\x65\x39\x70\xe9\xdf\x86\x29\xe8\x99\x9d\xa0\xdb\xc4\x54\x04\xe4\xd9\x03\x7d\x3f\x80\xfb\x03\x1f\x80\x5b\x23\x39\xdd\x79\x38\x0f\xdc\xc3\xcf\x0f\xe7\x09\x69\xcd\x11\x9e\x2d\x28\x91\x45\xef\x04\xc6\x6f\xdd\x97\x6d\x10\xd2\x4f\x44\x2d\x2b\xfa\xf1\xfa\x35\xdd\x6f\xe8\x61\xf5\xb5\x90\xa9\xa9\xea\xd9\xa5\xd5\x3d\xd6\x0e\xde\x4b\x81\x8c\x33\x7c\x8e\x00\x5e\x14\x81\x37\x15\x5b\x1f\xe9\xbe\xa1\x23\x3d\x05\xb5\x06\xef\x4b\x6c\x49\x4a\x8e\x4e\xf5\xc8\x79\xe7\x44\x90\x8c\x0f\x21\x33\xde\xe0\x02\x8d\xe9\xb3\xb3\xd7\x6f\xaa\x7b\x43\xf1\x1e\xee\x0f\xad\xcc\x6c\x10\x05\xb0\x70\xfb\xea\x62\xdb\x5c\x7e\x45\x50\x6c\x67\x56\x67\x37\x60\xe9\x98\xe5\xbc\x70\xa7\x8c\xfa\x58\x6a\x15\x7e\x8d\x90\x7e\xfc\xb0\x6c\x25\xf7\x6f\x7e\x5b\xe2\xb2\x41\x36\x3a\x2a\x9b\x45\x1a\x6c\x73\xf6\xd6\x58\x49\xea\x36\x67\x54\x6d\x21\xb4\xd7\x0d\xbc\x34\x9f\xf0\xa6\xb1\x35\x05\x43\xa5\x18\xa8\xf0\x85\x0e\xbf\xd7\x5d\x74\xbc\x05\xdb\x28\x5e\x4e\xf7\xce\x20\xb1\x6a\x7d\xf1\xcf\xf0\xb2\x85\xbc\xc8\x1e\x3b\x79\x6c\x6b\x25\x2d\x17\xf2\x1d\xf0\x74\x76\x03\x89\x92\xe9\x86\x04\xb6\xb5\x1f\x6f\x84\x14\x79\x99\x33\x59\xe6\x43\x40\x10\x1b\xea\x0b\x09\x09\x29\xc0\x9c\x49\xb8\xcf\x66\xe1\x12\x7f\x56\xa8\x34\xd0\x93\xa1\x53\xd8\x78\x3a\xc3\x9b\x47\xb1\x4c\xb6\x9c\xb9\x4e\x84\xad\xb9\x8f\x66\x89\xe6\xc6\x89\x45\x3d\xec\x54\x58\xc7\xb1\x86\x80\x5e\x3a\x91\x82\xdb\x63\x3e\xe5\x22\x73\xa2\xf5\x80\x5d\xc0\x88\x97\x19\x5e\xa0\xcb\x5e\xb0\x23\x37\x58\xd0\xc9\x96\x7d\xe0\xc4\x5d\xa3\x9c\x36\x6f\x7c\x55\x0d\x9c\xd0\xf1\x16\x7e\x87\x4d\xaa\xb8\x86\xb6\x69\x35\xd7\xd0\x0a\x5e\x9a\x4d\x55\xf9\xd6\xc6\x5c\xca\xd4\x9d\x87\xa6\x24\xda\x20\xe9\xc2\xf8\x9e\x37\x63\xd9\xeb\xab\xad\x2c\x99\xb5\x56\x63\x0d\xc6\x5c\x00\x4f\x33\x21\x61\x77\xfc\xba\x9d\x00\xcb\xf9\x03\xe2\x98\x15\x39\x38\x49\xa4\x89\x61\xbc\xb9\x2a\xab\x58\xce\xef\xa0\x1a\x9e\x0d\x61\x84\x17\x24\xe3\x82\x1b\xbb\x4f\xf8\x33\xe2\x22\x73\x1a\xfa\x6d\x1b\x36\x78\x57\xb2\xca\x32\xd0\x84\x38\xee\x6f\x21\x4b\x0c\xb1\x2b\xb4\x42\x65\x92\x3e\x6d\xf2\x78\xe4\xa1\xdc\xbd\x4c\x74\x38\xdc\xa5\x7b\x3d\x07\x8a\x57\x0f\x09\x19\x0a\x35\x70\x83\xaf\x11\x6e\x9a\x52\x8f\x9c\xea\x18\x34\xce\xc6\x84\xfc\x25\xec\xec\x4a\x59\x1f\xc9\x57\x2d\x10\xbf\xf6\x57\x44\x83\xb1\x22\xc7\x03\x96\x96\x3a\x5c\x58\x8d\x30\xe3\xcb\xb7\xbe\x75\x54\x7e\xff\xe2\xc5\x86\xf2\xdb\xfb\x47\x7a\x0d\xa8\x29\xef\x82\x2f\x57\x15\x1d\x0a\xe4\xdf\xa9\xc0\x6e\x8f\x85\x17\x83\xf1\xe6\x6d\xd0\xe8\x71\x15\xc6\x0a\x39\x2e\x85\x99\xb0\x21\xd8\x7b\x00\xc9\xe0\x81\x6a\xea\xb0\x7f\x81\x56\xb8\xa9\x0e\xbc\xb5\x9b\xa1\x05\xb4\x97\x4f\x07\x62\x53\x61\x84\x92\x7f\x15\xc6\x2a\x3d\x7b\x2d\x72\xf1\x48\x01\xea\xd0\x16\xdd\x7e\x15\x04\x55\x96\xb2\x77\xb4\x15\x37\x40\x0b\xd6\x80\x56\x50\xab\x48\x3d\x65\xee\x9c\x0c\x79\x72\xf7\xde\x00\xfc\xe2\xa9\x40\x38\xb0\xeb\x1d\xa0\x8a\xf2\x5e\xd5\x01\x92\x2d\x42\xca\x57\x0f\x04\x9f\x16\x94\xef\x27\xca\x00\xbe\x40\x86\x4a\xfc\x2c\x38\x16\x84\xa9\x08\x06\xba\x65\x25\x18\xc6\x47\xa3\xf6\x1b\xf5\x61\x47\xc9\x33\x2f\x8d\x65\x39\xb7\xc9\x84\x4c\x59\x2a\xad\xc4\x89\x43\xe3\xc5\xfe\x6d\xa0\xbc\xb1\x21\x7a\x7b\x93\x31\xa3\x79\xbe\x7a\x70\xba\xe5\xa3\x1e\xa1\x76\x6b\x81\x7c\xbe\x9b\xb6\x06\x9c\xb5\x37\xc4\xcb\x6d\x39\x5d\xde\x7f\x8b\x46\xe4\xfa\x17\xdc\x85\xb3\xab\x8b\xcd\x4d\x31\xbb\x28\xb8\x5b\xab\xb8\xf3\xe6\xf2\x35\x8b\x0a\x26\x53\xff\xa4\x6d\x33\x47\x0d\xc5\xf4\x18\x67\x77\x30\xeb\x11\x17\x9b\xbf\x30\x5f\x43\xe6\x25\x09\xc0\x7b\xe3\xdd\x4b\xf4\xdd\xe6\x20\xd9\x01\x7b\xa8\x6d\xe7\xce\x08\xad\xef\x26\xba\xe5\x17\x61\xd1\x5b\x7c\xb6\x3d\x82\x53\xbb\x83\xd9\x76\x1f\xcc\x6d\xb7\xdb\x05\xaf\xfb\xd0\xbe\xbb\x1f\x2a\x41\xaf\xda\xea\xed\xfc\x4c\xcd\xb6\xb5\x89\x2a\xb4\x00\xc4\xbd\x96\x57\xa1\x5f\xd3\xca\xe4\xd6\x78\x68\x08\x19\xdd\x99\x9e\x88\x82\xb2\x1e\xbc\x33\xc0\x63\x24\xfb\x96\x67\x22\xad\xba\xa0\xf3\x7b\x29\x7b\x4e\x7c\x72\xff\x41\xa2\x4b\xe2\xda\x85\x02\x73\xa5\x2c\xfe\xf2\xc1\x00\x44\xd3\xdc\x0b\x3c\xd4\x85\xb7\x42\x23\x95\x41\xc5\x8b\x22\xee\x03\x18\x2e\xe7\x23\x77\x0c\xbb\x94\x4c\xe9\x00\x07\xf7\xd0\x77\x44\x5d\x20\x9f\x18\x92\x83\x03\xed\xd3\x4b\xfb\xf0\xe0\x53\xba\x05\xbd\x35\xdd\xf9\xae\x50\x3e\xa0\x27\xa8\x63\x15\x19\x4a\xbb\x5e\x54\xe5\xc1\x51\x2e\x12\x96\x83\x1e\xa3\xc7\x25\xd9\xd8\xe3\xd0\xde\x94\xed\xe8\x2e\xb5\xad\xa9\x6f\x73\xc0\xad\xb0\x00\x59\x13\x99\x80\xf6\x61\x6e\xd4\x43\xcb\xe4\xf4\xbf\x8e\x82\xe3\x1e\xfc\x9b\x15\x5c\x68\x33\x60\x67\xcc\x08\x39\xce\xa0\xf5\xcc\x6b\x18\xcd\x6e\x5c\x0f\xc2\x30\x47\x6a\xa7\x3c\xf3\xba\x14\x97\x0c\xc8\x66\xe5\x7a\x9f\x67\xa9\x3d\x2f\xa9\x38\xca\x53\x39\xba\x0e\xee\x60\x76\xd0\x5b\x40\x9a\x83\x4b\x79\x40\xbc\x65\x01\x4d\x2a\x46\x84\x3e\xb2\x03\x7c\x76\xd0\x25\x17\xde\x92\xe1\xec\x6a\x47\x6b\x0f\xba\x31\x46\x84\xf8\x90\x1d\x85\xf5\x96\x96\xe8\xa3\xa2\xac\x62\xa5\x01\x92\xd6\xf1\x94\x31\x08\x72\x26\x4a\x95\xa8\x98\x4a\xb8\x47\xe9\xf1\xc9\x08\x7e\x4e\x93\x10\x72\xfc\x4d\x91\x72\xbb\x51\x78\x2e\xb5\x16\x44\x0e\xdf\x51\x27\xac\xc4\x5e\x1c\x6e\x8d\xc4\x98\x15\x5c\xf3\xdc\x0c\xd8\xb5\xaf\xa7\x8a\x98\x26\x46\x4d\x5b\xa2\x87\xdd\xed\xac\x00\xf6\x67\xf6\xae\x39\x97\x01\xeb\xf7\xfb\xec\xf6\xed\xc5\xdb\x53\x46\xbf\x90\x94\x6d\x15\x1b\x29\x54\x82\x54\xa9\xdd\x50\x53\x90\xa8\xf8\x3b\xf9\x5e\x49\x78\x3b\x72\x27\x84\x5b\x98\x82\x66\xf7\x6e\xab\x12\x91\x42\x65\xbd\x1a\x1c\xbe\x5f\x3c\xde\x4d\x32\xc9\xf9\xc3\x4d\xa9\xc7\x5b\x6c\x00\x5b\xd8\x84\xa6\xc9\xa6\x56\x26\x11\xf5\x9a\xb9\xe7\x26\x99\x40\x5a\x66\x90\x32\x3e\x54\x53\x68\x99\x6c\xdb\x9f\x21\x4b\x2f\x21\x7c\xe8\x78\xde\xd0\xa8\xac\xb4\x95\xb2\x7a\x04\x0f\xa7\xec\x77\xe8\xda\xe6\xac\x00\x9d\x80\xb4\x7c\x0c\xf3\x66\x00\x7a\xef\xe5\x8b\xff\x38\xf6\xfc\xc8\xf5\xe8\xad\x27\x2f\x1c\x46\xbc\xe1\x0f\xdf\xc8\xda\x34\x28\x0c\x7b\x31\x60\x67\x73\x83\xe1\x77\x59\x52\x66\x68\x6b\x41\x77\x7d\x63\xc8\xe1\x8c\x69\x55\xa2\xc3\x9e\x95\x45\x5b\x9b\xfd\xf5\xef\xfe\xc3\x29\x7d\x3c\x2f\x32\x38\x0d\x65\x98\x49\x6d\x76\x32\x8c\x55\xec\x37\x2f\xfe\x83\xa8\xa7\x3b\x9f\xb5\x56\x58\xc3\x8c\x3b\x80\x95\x05\x13\x39\x85\x73\x42\x36\xab\xeb\x39\xeb\x36\xfa\x1b\xcb\xb5\x35\x3d\x86\x5e\xfd\x4a\x38\xb4\xca\xf2\x6c\x4e\xcb\x47\x2d\x1c\xee\x09\x48\xa9\x42\x98\x00\x1a\xaa\xd8\xcb\xdf\xbc\xf8\x8f\x45\x73\xca\x5b\x99\x00\x7e\x89\x5f\x60\x98\xc5\xd0\x29\xf7\x77\x22\xcb\x20\xed\x3d\x3a\xfd\x51\xa9\xed\x04\x74\x8f\x81\x34\xc1\x58\xe5\xe6\x37\x37\x37\xec\x5d\x97\x52\xa2\x8c\x40\xd6\x61\xb4\x68\x35\x2c\x5c\x7e\xb1\x8e\x11\x5a\x96\x2b\x63\x97\x4f\x79\xf3\xe3\xe6\x1a\x97\xb3\xb7\xa3\x6d\xc5\x81\xfe\x0e\x66\x88\xc5\xaf\x77\x10\x29\x1f\xfa\x77\x55\xe2\x6f\x5f\x48\xdb\x57\xba\x4f\xdd\x9c\x32\xab\xcb\xc7\xbd\x06\x75\xcb\x5b\x27\xe0\x03\x90\x81\xb2\x71\xde\x16\x76\xf5\xbd\x9c\xfc\xdd\xcf\x73\xaa\xee\xe5\x6a\xca\x81\x84\xd3\xd3\x8c\x1d\x4f\x7d\xdb\xe2\x36\x77\x6c\xdc\xe8\xee\xed\xff\xb3\x88\xdd\x5b\x90\x03\x7f\x76\xab\xd3\xee\xe4\x2a\xf4\x78\xf4\x36\x18\xbd\x3a\xb6\xc4\xf9\xc8\xe6\xe4\x5e\xa0\x61\x96\x50\xae\x85\x13\xbe\x84\x02\xd1\x3c\x6a\x87\x8c\xc5\x88\x02\x77\xce\xcd\xca\x83\x9e\x01\x37\x76\x19\x28\xe2\x41\x7f\xbc\xad\x4f\x02\x98\x6f\x6d\xa1\xd3\x49\x48\x08\xf2\xda\xc6\x78\x4e\x88\x72\xf0\x0e\xc8\xc3\x47\x01\x67\x2d\x21\xea\xa0\x3a\x12\x6e\xff\xda\xf2\xd5\xfb\x0a\x9b\x09\x46\xce\x5d\x44\x6b\xff\x69\x23\x38\xd8\x9b\x4e\x3d\xf1\xaa\x3c\x8a\xe4\xd2\x24\x7d\x85\xa2\xfc\xfc\xc1\x08\xa3\x0f\x4c\x01\xc9\x40\x03\x9e\x3e\x8a\x46\x26\x05\x08\xf5\xa2\xb3\xec\x9e\xcf\xcc\xc1\x93\x91\xc2\x73\xb0\x7c\x7d\xa2\xc9\x7c\x6b\x13\xfd\x1b\xcb\x65\xca\x75\xea\x67\x79\x78\x68\xaa\x2e\x07\xec\x0d\xfa\xe2\xe4\x48\x9d\xb2\x89\xb5\x85\x39\x3d\x39\x19\x0b\x3b\xb8\xfb\x83\x19\x08\x75\x92\xa8\x3c\x2f\xa5\xb0\xb3\x13\x74\xc0\x89\x61\x69\x95\x36\x27\x29\x4c\x21\x3b\x31\x62\xdc\xe7\x3a\x99\x08\x0b\x89\x2d\x35\x9c\xf0\x42\xf4\x6b\x99\xdb\x0c\xf2\xf4\x17\x61\xa0\xf7\x2c\x58\xb7\xce\x20\x5a\xa7\xf4\x14\xfa\xa5\xbc\x93\xea\x5e\xf6\x51\x13\x36\x5b\x9d\xc6\xcd\xa2\x20\x42\x9b\x83\xf7\x36\x81\x0f\x85\x4a\xdf\xfb\x26\xb8\xc5\xf4\xb9\x4c\xfb\xe4\xb4\x7c\xcf\x7b\xb1\x8b\x6d\xb8\x5f\x07\x16\x6c\x12\xf5\x4e\x6d\x37\x6d\x8a\x27\x56\x4c\x61\x27\x27\x78\x68\xad\xed\x7e\x1b\x02\x4e\xd3\x52\xd3\x8e\x37\xbc\xe1\xc1\xb7\x93\xf3\x19\xca\x4a\x38\x36\x53\x24\x0a\x48\x95\x82\xb7\x9c\x4e\xd1\x34\x70\xe3\xc8\xd1\xad\x13\xa5\xbd\x8f\x1c\xed\xc6\x33\x63\x21\x27\xe2\x46\xdf\x67\x33\x66\xf5\x8c\x1c\xeb\xfa\xce\x29\xaf\xde\xf3\xed\x34\x86\x3b\x7c\xcf\x18\x95\x08\x14\x9d\x6a\xb8\x06\xb9\x2d\xd8\x00\x39\x2b\x94\x11\x38\xb6\xe7\x99\xdb\x59\xf6\x76\x67\xb7\x0d\x37\xdf\xef\x7f\xbb\xcd\xd6\x8d\xb0\xca\xc9\x96\x56\xfa\x76\x04\xc6\xa8\x99\x65\xe0\xb7\xe7\xd0\x04\xc5\xd7\x89\x35\x89\x92\xc6\x6a\x2e\x56\xe7\x51\x2d\x6f\x3b\xba\x52\x76\xf7\x57\x30\xc4\xa0\xb3\x9d\x80\xc2\x96\x27\xc6\x0e\x31\xb3\x26\x85\x0a\xd4\x4d\xc0\x50\x9a\x55\x88\x45\x74\x84\x6b\x47\xd3\xec\x0e\x30\x62\x7b\xc1\x89\xbe\xa6\x2a\x4b\xe9\x05\x4a\xaf\x37\xd5\xba\x2e\xc7\x52\x55\x3f\xbf\x7a\x80\xa4\xdc\x34\x27\x7f\xb1\x2d\xd8\x02\x83\x41\xc5\x87\xad\xd0\x24\xdc\xd1\x0d\x0f\xbc\xfc\xa2\x10\xec\x5e\x90\x31\xdc\x0a\x33\xa2\x9c\xb5\x6a\x23\xa0\xe1\x38\xad\x50\xb8\x72\x2f\x23\x8b\xa3\xd4\x09\x61\x91\xdc\x24\x13\xa5\x8c\x3b\xe5\xb8\x9f\xd8\xef\x54\x28\xf2\x19\x62\x02\x8d\x66\xb9\xa3\x31\x21\x91\xa6\xee\x9e\x04\xa7\xfa\x33\x61\x48\x85\xaf\x20\x18\xbc\x5c\xae\x1b\x34\x5c\xba\x3f\xc6\x28\x75\x19\xcb\x4c\x99\xbb\x4e\xef\x41\x8c\x27\xd6\xf4\x98\x18\xc0\x00\xb1\x06\x78\x32\x69\x74\x9b\x03\xd8\xd6\xbd\x4d\x4d\x54\x6b\x5a\x99\x8f\xaa\xac\x08\x9f\x0a\xd4\xab\x78\xcc\xfc\x5e\x2e\x05\x57\x8f\x81\x4d\x06\xc7\x3d\x56\xa7\xec\xbb\x39\x0e\x67\x4c\x58\x70\x34\x1b\x75\x19\xad\xca\x31\xad\x04\x42\x4c\x28\xce\xab\x4a\x19\x41\x2f\x6c\x8a\x3a\xe7\x01\x2d\xee\xc0\xed\x1b\xce\xbc\xcc\x43\x51\x25\x5c\x1f\x9a\xe5\xa1\x4a\x2c\xd2\x60\x0a\x45\xda\xea\xbc\xc1\xfe\x3f\xab\x8f\x8e\xcc\x71\x0d\xcc\x89\x18\x4f\x02\x2c\xb9\x67\x04\xed\x3d\xd8\xfe\xec\xb1\xbd\x7c\x31\xd4\x76\xf4\xc8\x50\x6b\xfb\xc6\x43\xbe\x45\x8d\x55\x8d\xfd\xb7\xa0\xf3\x0a\x8a\x88\x22\x48\x32\xbc\x9d\x3c\x5c\xb1\xe5\x71\x8c\xbd\x60\x47\x88\x64\xc2\x1e\x1a\x44\xf8\xbe\x2a\x8e\x07\xec\x8c\xc9\xb2\x3a\x73\xeb\x06\x90\xaa\xea\xdf\x77\xe4\x06\x35\xaa\xee\x6b\xc7\x15\xef\x45\xee\xa8\xed\xe6\x69\x6f\xb6\xbe\x87\x00\x3c\x5e\x34\x74\x5d\x27\x04\xeb\x1d\x3b\xd8\x8f\x74\x87\x3e\xc2\x2a\x76\xef\x63\x21\x40\x03\x8f\x6b\x1d\x85\x01\x3a\xef\x35\xa5\xa7\xea\x40\xb6\x4f\x31\xc1\x62\x57\xac\x60\xdd\x60\x06\xeb\x08\xae\x6c\xaf\x08\x9f\xe5\x6d\x3e\x0c\x26\x64\x61\xb5\xa0\xdd\x22\xf2\xc3\x19\x3e\xdd\x32\xf8\x69\x75\xdb\x97\xd2\xd5\x6d\x2f\x9a\x57\xb7\xb5\x88\xf7\xf4\x02\x83\x96\xb7\x8e\xd0\x96\xda\xfe\xa4\xad\x6e\xdb\x87\x16\xad\xea\x67\x87\x80\xa3\xe5\xad\xab\xb3\x49\x6d\x87\xe0\xa4\xe5\x6d\x41\x44\x7d\x3f\xb1\x4a\xcb\xdb\xce\x46\xd6\xe5\x6d\xd7\xb8\xa6\xe5\x6d\x2e\xd5\xf1\x3d\x05\x39\xf5\xda\x11\x4e\xec\x2b\x4b\xe7\xf8\xf5\x5e\xfc\xa4\x6e\x1d\x83\x78\xb7\xc8\xa8\xe5\x6d\x5e\x00\x7c\x26\x51\x52\x4b\xba\xfa\xca\xba\x6e\x5e\xaf\xfc\x98\x72\xdc\x43\x9c\x8f\x57\x28\x7a\x3e\xf5\x26\xd8\xa9\x31\x22\xbb\xd0\x80\xa5\x0d\x30\x6c\x2c\xd8\x61\x3e\x4c\x60\xd6\xf2\xd6\x1d\xe3\xa4\xd6\x11\xfb\xa4\xd6\x19\x72\xa3\xc0\xf3\x25\xd9\x85\x3f\xa2\xac\x43\x96\xe9\x28\xeb\x44\x59\x67\x8b\x16\x65\x9d\x4d\x5b\x94\x75\x56\xb5\x28\xeb\x2c\x69\x51\xd6\x89\xb2\xce\x5e\xed\xe9\xc9\x3a\x64\xa9\xea\xcc\x60\xf6\x37\x32\xb8\xce\x5b\xc8\x50\x9a\x0a\x21\x41\x6d\x53\x99\xe3\xfd\x37\x9e\xc4\xde\xa2\x79\xcd\x47\xba\x6b\x2e\xc7\xc0\x5e\xf6\x5f\xbe\xd8\x30\x9d\x70\x79\xdb\x27\xe8\xa7\xd9\xb6\x4d\x3d\x9c\x6f\xab\x3c\x12\xef\xcd\xbb\xe4\x4f\x6a\xe5\xf0\x68\x49\x98\x2b\x1c\x44\x55\x55\xac\x1c\x2c\xe3\xb6\x65\x10\x17\x39\x54\x0e\xd1\x56\x0a\x73\x1d\x13\xac\xa4\xf7\x77\xb8\x4d\x1d\xec\x36\x83\x04\x38\xc5\xc1\x0f\xa1\x9a\x85\xca\x81\x12\x54\xc3\xa1\x77\x53\x80\x00\x2b\x76\x04\x83\xf1\x80\xa5\x94\xec\xcd\xa5\x8f\x39\x3b\xee\x35\xdd\xe3\xb9\x23\xae\x1a\xff\xe3\xa6\xed\xfd\xe3\x30\x05\x69\x4b\x9e\x65\x33\x06\x53\x91\xd8\x6a\x7d\x18\x50\x28\x2c\x39\x3b\xf7\x71\xa5\xec\x21\x1e\xee\x2b\x12\xf6\x17\xce\xd6\x76\xfe\xea\xd0\xf6\x97\xdd\x16\xe6\xb1\x3b\xbd\x99\x93\x4b\x08\x42\x83\x95\x6a\x95\x75\xa3\x91\xbf\x12\xff\x89\x08\xfe\xf6\xdd\xae\xee\x31\xd6\x11\x4f\xd8\x9b\x0f\xcc\x2b\x50\x65\x96\x39\xf4\x26\x8f\xd9\x22\x08\x96\x78\xb2\x96\x64\xeb\x90\x9b\x35\x6f\x64\xed\xe0\x3b\xb7\xaa\x50\x99\x1a\xcf\x9a\x3b\xe8\xef\x81\xa9\xcb\xe3\x70\x66\xca\xa1\x17\x01\xdd\x21\xba\x9a\xdb\xf2\xe8\x0b\x59\xd9\xa2\x2f\x64\xa1\x45\xfb\xc0\x7c\x8b\xf6\x81\x2d\x5a\xb4\x0f\x2c\x69\xd1\x3e\xb0\xd8\xa2\x7d\x20\xda\x07\xf6\x69\x9f\xbe\x7d\x80\x45\x5f\xc8\xaa\x16\x65\x9d\xba\x45\x59\x67\xf3\x16\x65\x9d\xc5\x16\x65\x9d\x28\xeb\x44\x59\x27\xca\x3a\xbb\xb6\x3d\x90\xbb\x50\x69\xe7\x29\x32\x85\x4a\xd7\x64\xc8\x90\xbd\x3a\x51\xfd\x4c\x25\x55\x65\x12\xf7\x89\xf7\x7c\x18\x9e\x93\x09\xbd\xc7\xfe\xa5\x24\x50\x7a\x02\x95\xbc\xcd\x81\x29\xbc\x44\xa2\x50\xe9\x91\x39\xde\x21\xf0\x3c\x66\xd8\xc4\x0c\x9b\x9f\x41\x86\xcd\x84\x1b\x5f\x38\x09\x49\xeb\xea\x84\x9b\xc6\xf1\xbf\x05\x9d\xff\x6c\xf3\x6d\x1c\xc2\x79\x84\xc1\x7b\xea\x6a\xa4\x20\xd8\xa5\xde\xb7\x0b\xe9\x75\x1b\x62\x5e\x2f\xa3\x2b\x7a\xd2\x14\x52\x56\x80\xee\x13\x92\x29\x36\x12\xbe\x7e\xd8\x1c\xfe\x7a\x08\x3f\xf3\xbc\x99\x36\x24\x9e\x75\xf2\x4c\x7b\x29\x9d\xf9\xa6\x9a\x2e\xba\x16\x57\x7c\x76\xa9\x34\xdd\x68\xa5\x7d\x66\xbd\x3b\xed\xeb\xbd\xf4\xd2\xae\x94\x48\x54\xf2\x6e\xb6\x2a\x93\xbc\xba\x2d\x2d\x6e\xfb\xcf\x12\xf4\x8c\xa9\x29\xe8\x5a\x31\xaa\x6e\xf7\xe9\x55\x97\xd4\x24\xdc\x17\x50\xee\xc6\xc0\xd3\x89\x29\xa2\x4b\x4d\xbd\x6b\xaf\x21\x7b\x62\xd5\x93\x57\xb7\x6e\x15\x87\x0e\xd5\x86\xe7\x56\x8b\x79\x75\xeb\xd4\xfc\xc6\x3a\x36\xc1\xb1\x0e\xcd\x70\xac\x5b\x53\x1c\xeb\xdc\x1c\xc7\xba\x34\xc9\xb1\x0f\x5e\x41\x7a\x75\xeb\xd8\x7c\xc4\x3a\xb7\xd2\xb1\x67\x58\x8f\x7a\x75\x7b\x0f\xe0\xee\xd2\x62\xc7\x62\x75\xeb\xbd\x5b\xd7\x06\x35\xd6\xb5\x51\x8d\x75\x8d\x87\x3b\x55\xd1\x5e\xdd\x62\x7d\xed\xf7\x20\xa7\x75\x26\x44\xec\x5b\x93\xfb\xb1\x89\x76\x80\x93\xd5\xdd\xbf\x1f\x4a\x01\x22\x2e\x5d\x5f\x38\xeb\xc6\x6e\xdc\xf5\x85\xa1\x9a\xcd\x8b\x51\x43\xdc\x2a\x62\x34\xfe\x9e\x06\x83\x57\x29\x1b\xc5\xe3\x1a\x9d\x2d\x5c\x3d\x53\x9b\xce\xaa\xcb\x67\x9c\x52\x50\x5f\x5a\xd5\xf8\x18\xdf\x1d\x50\x38\x69\x2d\x4d\xc8\x74\x3e\xc0\xb4\xfe\x02\xf5\x0b\xba\x0e\xf7\x20\xd8\xb1\x0f\x4d\xfd\xc6\xc1\xa0\x79\x73\xae\xef\xf1\xe8\x7f\xff\x7d\xdc\xaa\xde\x52\x77\x18\xb5\xbf\x8d\x5b\xd4\xfe\xf6\x6a\x51\xfb\x5b\xd9\xa2\xf6\xb7\x47\x8b\xda\xdf\x66\x2d\x6a\x7f\xab\x5b\xd4\xfe\xa2\xf6\xb7\x43\x8b\xda\x5f\xd4\xfe\x76\x6d\x3f\x63\xed\xaf\xdb\xa8\xe6\xa6\x2e\xe6\x83\x44\x50\x7e\xb4\xdc\x8a\xa4\x8e\x78\x0e\x6f\xd1\xbf\xba\xd5\x01\x9b\xfa\xdd\x72\x0d\xb0\xa9\x25\x2e\x68\xc1\x83\x47\xd4\xbd\x4a\x21\x5c\xf8\x72\xbd\x26\xf8\xa9\x45\x6e\x77\x86\x89\x0d\x97\x70\xa7\xa8\x78\x1b\x02\xcb\xea\x8b\xdb\xab\xa8\xb3\x94\x1d\x05\x5f\x3c\x5e\xc4\x22\x95\x6d\x3f\x94\x56\xf4\xeb\x37\x2a\xef\x3c\x06\xd5\xb4\xf2\xf9\x5b\x2e\xe4\x2a\x86\xad\x8a\x8f\xaa\xb1\xc7\x91\x47\xd0\xad\x39\xe0\xc5\xb7\x23\x21\x29\xd2\x31\x5c\x1a\xa4\x64\x08\x9a\x22\x7a\x4a\x57\x2f\x78\x3c\x27\xd1\x17\xe7\x83\xf2\x6f\x0d\xbb\x46\x94\x0f\xc7\x43\xc6\xa5\x4f\x86\x55\x32\xdc\x6a\x4f\x37\xd5\xd7\xf2\x72\x75\x17\x4b\x35\xfa\x80\xbd\x42\xac\x6f\x76\x2c\x0c\xc2\xc7\x5f\x13\xd1\x0d\x22\x3f\xad\xc2\x0d\xf7\x5b\x17\x6e\x98\x8b\x18\x89\x75\x1b\x62\xdd\x86\xbd\xea\x36\xe0\x43\x3a\xdc\x9d\x17\x70\x60\x7f\xf3\xd7\x2b\x69\x40\x50\xe5\x65\x66\x45\x51\x47\x60\x1b\x1a\x2a\x23\x4d\x62\xe4\x23\x41\xdb\xf8\xee\x46\xe3\xc9\x64\x1e\xef\xb1\x3f\x8c\xd8\x36\x48\x4e\x7c\xb4\x25\x5e\x86\x84\x15\x07\x82\xda\x41\x21\xa5\xe2\xf9\x47\x0a\x5e\x20\xc1\x36\xb5\xd6\x4c\x77\x75\x39\x3a\x9f\x39\x94\x70\x14\x7b\x0d\x83\x68\x5e\x68\x81\x51\xab\x62\x0a\xb2\xe6\x12\x47\xe6\xf8\x38\x48\x43\x9d\x72\xaf\xf7\xc2\x7d\xfe\xd4\xe0\x12\x7f\xd9\x84\xff\xe0\x82\x2a\x0e\x54\x83\xaf\xe6\x3f\xcf\x3b\x24\x72\xff\xe8\xb6\x2e\x2c\x72\x9d\x45\xb5\x7d\xf4\x88\xb6\x9f\x53\xed\x8b\x27\xe9\xc3\x78\x72\x5a\xc7\xa7\xe1\xb7\x88\x09\xa3\x9b\xb7\xe7\x90\x30\xfa\x91\x7c\x13\xcf\x27\x6f\xf4\xd9\xfa\x23\x9e\x4b\xde\x68\xf4\x41\x6c\xd5\x3e\xd5\x74\xce\x76\xeb\xd0\xe7\x10\xfd\x0d\x1d\xcb\x54\x9d\x30\xff\xf7\xe3\x67\xe8\x04\xff\x3a\x8d\x2e\x8b\x91\x65\x1f\x33\xb2\x2c\x6a\x61\x51\x0b\x6b\xb7\xa8\x85\x2d\xb4\xa8\x85\x6d\xd1\xa2\x16\xb6\xba\x45\x2d\x6c\xb1\x45\x2d\x2c\x6a\x61\x1b\xb4\xa8\x85\x45\x2d\x6c\xd3\xf6\x33\xd3\xc2\xba\xab\xb7\x1e\x23\xbc\xde\x43\x84\x57\x37\x94\xb0\x03\xfa\xd7\x09\xd6\x75\x14\xd1\x15\xa3\xb9\x9e\x76\x34\xd7\x9e\x65\xe7\xa4\x15\xef\xa7\xf4\x5c\x73\xb7\x57\xd5\x9f\xe3\x53\x25\x52\x56\x94\xd6\x57\xdf\x8a\x35\xe8\x9e\x72\x0d\xba\xd6\x8e\xc6\x42\x74\x1b\x15\xa2\x5b\x05\xb3\x58\x8d\x6e\x45\x7b\x3a\x31\x66\xb1\x1a\xdd\xb6\x2d\x56\xa3\x5b\xde\x62\x35\xba\x35\x2d\x56\xa3\x8b\xd5\xe8\x62\x3d\x82\x3d\x5a\xac\x47\xb0\xa4\xc5\x7a\x04\xbb\xb7\x58\x8f\x60\xa3\x16\xeb\x11\xc4\x7a\x04\xed\x16\xbd\x50\xfb\xb5\x58\x8f\x60\xcf\x16\x3d\x53\xb1\x1e\xc1\x5e\x1d\xc6\x6a\x74\x9f\x54\xcc\x20\x8b\xda\x5f\xd4\xfe\x36\x6e\x51\xfb\x5b\xd9\xa2\xf6\xb7\x47\x8b\xda\xdf\x66\x2d\x6a\x7f\xab\x5b\xd4\xfe\xa2\xf6\xb7\x43\x8b\xda\x5f\xd4\xfe\x76\x6d\x3f\x63\xed\x2f\x56\xa3\x7b\xf2\xb1\x8a\xec\x29\x66\x24\xc5\x6a\x74\x31\x7e\x71\xa7\xed\x8e\xd5\xe8\x1e\x6f\x3f\xfb\x6a\x74\xad\x58\xba\x8f\x57\x92\x6e\xfb\x69\xc4\xba\x74\xb1\x2e\x5d\xac\x4b\x17\xeb\xd2\xc5\xba\x74\xb1\x2e\xdd\xe6\xed\xe9\x7b\x33\x9e\x9c\xfe\xf1\x69\x78\x30\x62\x45\x84\xcd\x5b\xac\x88\xb0\xb2\xc5\x8a\x08\xb1\x22\x42\xf4\x46\xec\xd2\x62\x45\x84\x2d\x5b\xf4\x3c\xc4\x8a\x08\x5b\xb5\x58\x97\xee\x93\x89\x31\x8b\x5a\x58\xd4\xc2\xda\x2d\x6a\x61\x0b\x2d\x6a\x61\x5b\xb4\xa8\x85\xad\x6e\x51\x0b\x5b\x6c\x51\x0b\x8b\x5a\xd8\x06\x2d\x6a\x61\x51\x0b\xdb\xb4\xfd\xcc\xb4\xb0\x58\x97\xee\x49\xc7\x7a\xc5\xba\x74\x4b\x5a\x8c\xeb\x7a\xda\x71\x5d\x3b\xe2\x0a\x2f\xad\xca\x55\x29\xed\x0d\xe8\xa9\x48\xe0\x2c\x49\xdc\x5f\xb7\xea\x0e\xb6\x8c\x25\x6a\xab\xa1\x6b\xba\x65\x42\xa6\x22\x41\x45\xf2\x7e\x02\x58\x56\xce\xc9\xb7\xf8\x1e\xe3\xf4\x22\xb3\xf8\x66\x8d\x5e\x38\x4f\x47\xd4\x30\xc0\x06\xbb\xde\x16\x5e\x04\xa1\xa1\x52\x19\x70\xb9\xc5\x97\x9e\x1b\x82\xde\xf2\x34\xb7\x00\xf2\xda\x93\xe2\xba\x33\x36\x84\x4c\xc9\xb1\x8f\xe7\xf1\x27\x60\xc0\xce\xeb\x17\x12\x2e\xf1\xf0\x94\x5a\x83\xb4\xd9\x0c\xe1\x80\x05\xae\x50\x6b\xc8\xd5\x14\x52\x24\xd9\x18\x46\x44\x72\x24\xb7\x2c\x03\xee\xc6\x92\x50\x0f\xe6\x0e\x0f\x67\xd7\xd8\x3f\x75\x3a\x04\x1f\xda\xb4\x13\x10\xb7\xa7\x8d\x3b\x51\xc3\x39\xcb\x86\x17\x9b\x90\x2f\x25\xa8\x1f\x35\x56\x88\x47\x73\xa6\x4a\x76\xcf\x49\x52\xd2\xa5\xc4\xc3\x8c\x4b\x77\xa0\xdd\x72\xf0\x3d\x64\x92\xdd\xcd\x0f\x7d\xa4\x6a\x5b\x7e\xb6\x8f\x39\x80\xeb\xf1\x4e\x4c\xaa\xb5\x35\x87\x67\x7a\x5c\x92\x48\xe8\x51\x19\xa4\xd5\x33\x8c\xb7\x23\x99\xa2\x81\x89\x39\x1f\xc3\xe1\xa1\x61\xe7\x6f\x2e\x1c\xf9\x2b\x8d\xa3\xd6\xbe\xca\x9e\x27\x87\x85\x56\x53\x91\x3a\xe4\xfe\x96\x6b\xc1\x87\x99\x93\x3b\x47\xa0\x41\x3a\xb1\xe0\x97\x47\xdf\x9e\xbd\xfb\xfb\xd5\xd9\x9b\x57\xc7\x28\x81\xc2\x43\xc1\xa5\x3b\x15\xa5\xa9\x03\x45\xfd\x70\x6e\x20\x90\x53\xa1\x95\x74\xf3\x43\x5d\x8d\xb3\x69\xe8\x35\xa9\x0e\x83\x06\xa3\xb2\x29\xa4\x24\x27\x57\xa3\x05\xae\x23\x64\x51\xda\xa0\x3b\x62\xf8\xa2\x3b\x40\x32\x99\x70\x39\x76\xf3\xbc\x50\xa5\xeb\xef\x97\xbf\xc4\x19\x69\x48\xcb\x84\x24\x27\x1e\xb0\xf6\x97\xbd\xc0\x29\x1c\xad\x37\x54\x12\xd1\x24\xbc\x08\x73\x6e\x2e\xcb\xcc\xa4\xe5\x0f\xa7\x14\xbf\x77\xf0\xcb\xc6\xa3\x83\x50\x4e\x52\xb9\x21\x88\xdf\xd0\xac\x32\xac\x64\x98\xb1\x83\xe6\xdb\x03\xf6\xca\x8d\x01\x69\x13\x80\x14\x7e\x09\x53\xd0\xa8\x79\x7a\xf0\xf5\x98\x86\x31\xd7\x69\x06\x06\x03\x0f\x03\x6d\x26\xed\xc0\x03\x0c\x2a\xbd\x56\x2a\xbb\x8c\x98\xb0\x37\x0a\x83\x10\x47\xea\x94\x4d\xac\x2d\xcc\xe9\xc9\xc9\x5d\x39\x04\x2d\xc1\x82\x19\x08\x75\x92\xaa\xc4\x9c\x58\x6e\xee\xcc\x89\x90\xee\x70\xf5\x53\x6e\x79\xbf\x71\xaa\x4f\x88\x73\xf7\x13\x95\xe7\x5c\xa6\x7d\xee\xb1\xab\x5f\x6d\xeb\xc9\x2f\x3c\x4f\xed\xf3\xea\x2d\x21\xfb\xbc\x6f\x26\x90\x65\x87\x3b\xe0\xf3\x7e\x32\xdf\x1e\xb2\xde\x5e\x32\x9e\x5f\xfb\xfe\x07\xf8\x55\x75\x5e\x09\x06\x03\x76\xa5\xac\x8f\x8f\xf5\xa1\xd8\x48\x47\x11\xbe\x2b\x8f\xf4\xab\xab\xdb\x77\xff\x7d\xfd\xf6\xf2\xea\x36\x9e\xec\x78\xb2\xe3\xc9\xde\xe3\x64\x83\x9c\xee\x7d\xaa\x83\xcc\xd9\x38\x26\xd5\x7e\x23\xa7\x36\x60\xc3\x31\xa8\x36\x60\x6f\x09\x91\xda\x47\x83\x7a\x0b\x02\xaf\xe4\xf4\x5b\xde\xb6\xb0\xcb\xa5\xe0\x60\xfe\x05\x12\x94\x2b\x19\x7c\x9f\xf8\xf8\x3d\xac\x59\xfb\xba\xaf\x76\x92\x22\xa9\xed\xef\x5a\x72\x43\xef\x6e\x68\x68\x6d\xdf\x15\xcf\xeb\x0a\xd5\x4b\x76\x6d\xc0\xde\x04\xb5\x87\x9d\xff\xfd\xf2\xe2\xd5\xd5\xed\xe5\x97\x97\xaf\xde\xed\xae\x47\x77\x60\x71\x41\x9b\x42\x47\x00\x38\xdc\x91\x4b\x16\x1a\xa6\x42\x95\x26\x9b\x55\x56\x90\xe5\x44\x60\xfe\xf4\x7b\xbf\xef\xac\xd2\xc7\x97\x7e\x16\x99\x6d\xb7\xcc\xf6\x02\x46\xbc\xcc\x48\x7b\x3a\x38\x18\xec\xc2\xe5\xa8\x75\x85\xbe\x5f\x6a\xb5\x47\x05\xe6\x16\x0a\xdf\x50\xed\xf6\x91\xd2\x2b\x8f\xf1\xa1\x8f\x3e\x68\xb1\x1e\x2f\x3c\x92\x85\xce\x4b\x8f\xe4\x24\xdb\x13\x3a\x7b\x7a\x19\xba\xf1\xbd\x27\x4a\x8e\xc4\xf8\x0d\x2f\xbe\x86\xd9\x3b\x18\xed\x67\x26\x6e\xc3\x1b\xad\x8f\xde\x95\x8c\xb6\x4a\xc7\xce\x68\xb0\xfd\xdc\x34\x9d\x39\x69\xba\x8a\xce\xd8\x3f\x32\xa3\xbb\x40\x8a\x4e\x82\x28\x16\xea\xe1\x93\x1d\xda\x5b\x94\xbb\x8a\xb1\xe9\xc4\x73\xbf\x1f\x97\x0f\xad\xcd\xec\x9a\xec\xde\xd3\x59\xbb\xa9\xda\x91\x28\x99\x40\x61\xcd\x89\x9a\x3a\xce\x05\xf7\x27\xf7\x4a\xdf\x39\x3d\xc2\xe9\xae\x7d\xc2\x5a\x73\x82\x3e\x83\x93\x5f\x90\x1b\xec\xf6\xed\xc5\xdb\x53\x76\x96\xa6\xfe\x72\x93\xd2\xc0\xa8\xcc\xfc\x75\x02\x03\xc6\x0b\xf1\x2d\x68\x23\x94\xec\xb1\x3b\x21\xd3\x1e\x2b\x45\xfa\xc5\xee\xc4\x39\xb4\x0e\x77\x41\x15\xe4\xea\xec\x78\x27\x6e\xd0\xc7\x32\x6b\xf1\xae\x8a\x88\x38\xae\x25\xac\x41\xdc\x0c\x56\x67\x2f\x64\x74\x04\x9a\xed\x4d\xf4\xf3\x0d\xb7\xb0\x5b\xba\x7a\x58\x13\x56\x72\x71\x7a\x44\x2d\x54\x7a\xca\x4c\x59\x14\x4a\x5b\xc3\x72\xb0\xdc\x29\xbd\x03\x87\x61\xbd\xf6\x9f\xe8\xab\xea\xb1\x1f\xab\x1f\xd1\xe1\x64\xbe\x3b\x3c\xfc\xd3\xd7\xaf\xfe\xfb\x2f\x87\x87\x3f\xfc\xd8\x7c\x8a\xac\x90\xa2\x80\xda\xaf\x98\x02\x92\x81\x54\x29\x5c\xe1\x18\xf8\xa7\x69\xb9\x59\xfc\x03\xcb\x6d\x69\x06\x13\x65\xec\xe5\x75\xf5\x67\xa1\xd2\xf9\xbf\xcc\x1e\x12\x07\x7b\x9a\x8c\x01\xb7\xe8\x9a\xdb\xc9\x13\x61\x0f\x35\x2d\xe9\xf8\xa8\xfa\x5e\x9b\x97\xe8\xe4\x1c\xff\xf9\x65\x00\x81\x93\x9e\xee\xb5\xb0\x16\x5d\x6f\x3e\x15\x5c\x8d\x7a\xee\xd4\xd6\x62\xe7\xf4\xe5\xde\xf5\x51\x3a\x25\x6d\xd5\x0e\x76\x0c\x30\x84\x88\x87\x16\x1d\xe4\x8a\xc1\x2e\xba\x98\xcf\xae\x2f\xd9\x94\x20\xfc\x64\x80\x13\xd2\x7b\xbf\x7c\xaf\x34\xae\xba\x74\xc9\x83\xaa\xd2\x10\x4f\x29\x28\xa8\x4a\x32\x66\x99\xc8\x85\x8f\x35\xf4\x17\x34\x19\x76\x44\x3f\x0e\x92\xa2\xec\xf9\x17\x06\x39\xe4\x4a\xcf\xaa\x3f\xa1\x98\x40\xee\x34\xad\xbe\xb1\x4a\xf3\x31\xf4\xaa\xcf\xe9\xb3\xea\x2f\xfa\xb0\x35\xc0\xe2\xd7\xa4\x0a\xd7\xae\x52\x4f\x91\x21\xfd\xf4\x68\x5b\x00\xfd\x13\x21\x6d\x15\x66\x5c\xbd\x07\x91\xb0\xb2\xc4\x91\xc0\x59\x41\x11\xf5\xc9\xa9\xca\xca\x1c\x4c\xaf\x12\x83\xc8\x1a\x20\xa7\x4e\xb3\x34\x4f\x4a\x50\x4b\xc5\x54\x98\x2e\xc2\x88\x97\xc8\x69\xc2\x47\xe4\xab\xd2\x16\xa5\xf5\xf5\x66\x1a\x17\xbb\x29\x83\x76\x8b\xaa\x28\x40\x8b\xec\xbf\x3c\xd8\x3f\x1a\x9d\x5b\x0b\x5a\x9e\xb2\xff\x39\xfa\xfe\x57\x3f\xf5\x8f\xbf\x38\x3a\xfa\xee\x45\xff\x8f\x3f\xfc\xea\xe8\xfb\x01\xfe\xe3\xf3\xe3\x2f\x8e\x7f\x0a\x7f\xfc\xea\xf8\xf8\xe8\xe8\xbb\xaf\xdf\x7c\x75\x7b\xfd\xea\x07\x71\xfc\xd3\x77\xb2\xcc\xef\xe8\xaf\x9f\x8e\xbe\x83\x57\x3f\x6c\xd8\xc9\xf1\xf1\x17\xbf\xdc\x7b\xea\x5c\xce\xde\xee\x49\x40\xa9\xf5\x3b\x2b\x17\x34\xdf\x63\x47\x71\xd6\x0f\xfd\x5a\x69\xea\x0b\x69\xfb\x4a\xf7\xa9\xeb\x53\x66\x75\xb9\x1f\x31\xa9\x99\x52\xd7\xe7\x3f\xdc\xde\x75\x5a\x33\xa4\x8a\x5d\x3f\x99\x03\x6e\x20\xd1\x60\x3f\x84\x25\x87\x46\x0a\x72\xca\x5c\xcc\xe3\xa7\xc6\xe7\x7e\x0e\xc6\x9d\x2a\x64\x10\xf7\xb5\x96\x44\x47\x5a\xe5\x03\xd6\x70\x6f\x4c\x31\xe1\xc3\xbf\x77\x07\x7b\x58\x41\x43\x8b\xc6\xa0\x68\x0c\x5a\xd1\x1e\x35\x06\xdd\x10\x1e\x3e\x59\x4b\x10\xc8\xe9\xae\x2e\x8c\xa5\x1e\xf4\xa0\xeb\x58\xc5\x0a\x55\x94\x19\xb7\x2b\x3c\x63\x4b\xdc\xe9\xfe\xa8\xd7\xf1\xc8\x75\x30\x0d\x31\xb4\x7c\xb9\x0f\x93\x9d\x65\x19\x13\x92\x0e\x3e\x76\x10\x1c\x66\x1a\x48\xb5\x61\x9c\xfc\xd9\x53\x37\x85\x7b\x5f\x56\xae\x19\x97\x63\x98\xb1\x5c\x5b\x8c\x3d\xc6\xb2\x73\xc4\x4a\xbc\xf7\x49\xc8\xba\xf8\x5c\x25\x1c\x56\xb9\x20\x4b\x6f\xc6\xcc\xb8\xb1\x61\xda\x38\x1b\xcb\xef\xd0\xdb\x98\x40\x0a\x32\x01\x4c\x4c\x2b\xa1\x5e\xeb\xd0\xe9\x6d\xec\x95\x9c\x52\x1f\x9c\xa5\x25\x05\x83\x10\xf9\x5b\xde\xc7\xa7\x15\x80\xe0\x10\xf1\x26\x5c\x60\x5c\xc5\x21\x20\xd5\xaf\x34\xec\x2a\xbf\xaf\xb2\xb2\x9a\x8f\x13\x79\xb0\x3f\xcf\xac\x3c\x5b\x7b\x09\x43\x0b\xcc\xb2\x36\x3f\xb7\x99\xe4\xa7\xe0\x0c\xdc\x9f\x7d\xfe\xec\x58\x67\x47\x6c\xb3\x1b\x96\xb9\x85\xef\xa4\x4b\x36\xd9\x85\xb3\xa4\xd0\x30\x12\x0f\x1d\x9d\xd3\x33\x59\x5b\x62\x44\x0a\xd2\x8a\x91\xa0\x3b\xef\x0b\x0d\x05\xc8\xb4\x2a\x5c\x8a\xc9\xe1\xb2\x0d\x9b\x27\x19\xcc\x43\x02\x77\xb7\xa4\xec\x66\x99\xb0\x1f\xe9\x18\x8b\x74\x6c\xe7\xf6\x81\xe8\x98\xc7\xdc\xa7\x43\xc4\x30\xf2\x7c\xff\xe8\xf7\xf3\x76\x28\x3b\x22\xf2\xd6\x88\x56\x67\x76\x9d\x60\x2f\x86\xb2\x24\xab\x34\xec\x8a\x34\x5a\x45\xc1\x6b\x6c\x22\xc6\x0e\xb2\x19\x4c\x21\xf3\x72\x13\xcb\xb9\xe4\x63\xca\xef\xb6\x2a\x98\x6a\x9d\xa2\xe5\xf0\x58\x8b\x74\x21\xee\x1e\xe5\x78\x87\xdb\x99\xe2\x29\x3e\xd4\x2a\xcb\x40\x1b\x96\x89\x3b\x60\x17\x50\x64\x6a\xe6\xd3\xb5\x65\xca\x6e\x2c\xb7\x0e\xab\x6f\xc0\xee\xe6\xf6\xdd\x0b\x63\x71\xc6\xd7\x65\x96\x5d\xab\x4c\x24\x3b\x19\x55\xda\x3b\x77\x89\xfb\x55\x94\x59\xc6\x0a\xec\x72\xc0\xde\x4a\x24\x1a\x67\xd9\x3d\x9f\x99\x1e\xbb\x82\x29\xe8\x1e\xbb\x1c\x5d\x29\x7b\x4d\xd2\x77\x3b\xe0\x8e\x5e\x64\x62\xc4\x4e\xb1\xba\x8d\x65\x96\x8f\x51\x77\x0a\x6e\xc0\x9e\x83\x7f\xb3\x03\xa2\x0f\xf7\xc2\x2c\x55\x56\xf6\x46\x9c\x5f\x60\x4f\x8e\x56\xd1\xdf\x1f\x7c\x9b\x32\x31\x82\x64\x96\x64\xfb\x1f\xad\xb3\x04\x03\x18\xea\x8c\xf3\x06\x7e\xfb\x6a\xea\x3e\xc7\x13\xb5\x40\x21\x19\x95\x39\xa7\xfa\xed\x35\xaa\x57\x33\x22\x6d\xd7\x74\xaa\x24\xee\xcc\x3c\xf7\x65\x9b\x85\x32\xf6\xc6\x69\xe8\x9d\x14\x43\x3f\xbc\x0e\xdd\x31\x2c\xf9\x9c\x65\x90\x32\x91\xe7\x90\x3a\x2d\x3e\x9b\x31\x3e\xb2\x98\x6b\xdb\xb2\x10\x24\x1a\x08\x6b\x7d\x15\x93\x09\x97\x69\x06\x9a\x8d\xb8\xc8\xbc\x3d\xa0\xf5\xbe\x05\x9d\x0b\x89\x66\x01\xf2\xc8\xa2\x89\xc1\xfd\x95\x24\x4a\x87\xf2\xf4\xc2\x9a\xf0\xa8\x3e\x98\xc8\x47\x1a\x08\x30\xef\x5a\x66\xc3\x4c\x25\x77\x86\x95\xd2\x8a\x8c\x26\xa3\xd4\x1d\x4b\x54\x5e\x64\x78\x74\xf6\x38\x59\xd5\x3f\xfb\x15\x2a\xf5\x5d\xef\xe6\xe4\x17\xf5\x23\xfc\x61\x57\x86\xde\x81\x20\xd6\x85\x18\x06\x0f\x90\x74\x96\xe7\xff\xea\x01\x92\x46\x61\x09\xbc\x8f\x01\x4f\x34\xe6\x79\xf2\x3b\xf8\x84\x2a\xd9\xed\x91\x4b\xd7\x6c\x2d\xf8\x9d\x53\x9f\xa1\x10\x96\x1f\x82\x65\x42\x22\x7d\xf3\xf9\x75\x4c\x48\xe3\x38\x7b\xeb\x30\xd0\xd1\xf3\x42\x2b\x4b\x85\xc6\x2a\x08\xb3\x2a\x90\x3a\xf4\x85\x05\x06\x94\xb2\xec\xe8\xf0\xe4\xf0\x78\xc1\xfe\x78\xe8\x24\x90\x0c\x88\xd6\x86\xc4\xbd\x6a\x52\x46\xe4\x45\x36\xc3\x79\x1c\xa6\x3d\x26\x6c\x88\xb4\xd6\xa5\x0c\xb3\xf2\x49\x7f\x3d\x66\x14\xb3\x9a\x87\xea\x2a\xf4\xab\x7b\xc9\xea\xd2\x53\xf9\xa3\xc3\x9f\x0e\x7b\x0c\x6c\x72\xcc\xee\x95\x3c\xb4\x38\xfd\x01\xbb\x55\x4e\x94\xae\x3b\x9a\xa9\x92\x49\xa0\xc0\x7e\x78\x28\x32\x91\x08\x9b\xcd\x90\x62\x31\x55\x5a\xca\x21\xe6\x36\x24\x1b\xbe\x7a\x10\xd6\xc7\xab\x39\x92\xf1\x02\xa1\x49\x54\x8b\x71\x27\xe6\x4c\xe1\x64\x02\x3c\xb3\x13\x0a\x12\x91\x4a\xf6\xff\x05\x5a\x61\x0e\xa2\xf4\x4f\x3e\xb9\xaa\x7f\x9d\x68\x0e\x8e\x88\x7e\x05\xdd\x5d\xe2\xf3\xd7\xdb\xdb\xeb\xaf\xc0\xce\x91\x0c\x37\x4a\x08\xdd\x41\x6b\x00\xe8\x91\xd2\xf9\x13\xa0\x1d\xdd\x38\x2b\xfb\xac\x50\xfa\x29\x90\xb0\x89\x32\x7b\xed\x25\x5b\xd8\x4f\x65\x2c\x6a\x43\x5e\x1a\x93\x90\xb8\x1d\x6c\xc7\x90\x84\x7b\x6e\x2e\xaf\x07\xec\xbf\x55\xe9\x56\x33\xe4\xc3\x6c\x56\x55\x62\x30\x60\xd9\x81\xeb\xea\xc0\x91\x27\x87\x0d\x7f\x05\x9e\x3a\x15\xc5\x51\x0f\xe0\x4f\xe3\x3e\x2b\xe6\xcf\x83\x9f\x5b\xb7\x7c\xa0\x34\x56\xe5\x6c\xe2\x97\xdd\x4e\xbd\xf4\x27\x63\x80\xa7\x27\xe4\x35\x69\x28\x88\xc2\xf9\x6f\x3e\x39\xfa\xb5\x40\x37\x08\xee\xfe\xf7\x21\x96\xb1\x4a\x9a\x60\xf3\x17\x3a\x51\x62\x90\x24\x60\x39\x54\x83\xdd\x5c\x25\xcd\xf6\x84\x6b\x8f\xee\x9c\xc8\x39\xdf\x11\x3a\xf5\xf6\x8f\xf5\xea\xb4\xf2\x68\x37\x71\x03\x6c\x99\x91\xd5\xe3\x0c\x59\x5f\xc8\x9e\x83\xe6\x98\xe0\x43\x4d\xb8\x54\x52\x24\x3c\x13\xff\x82\x94\x95\x85\x92\x3e\x7e\x0e\xe5\x9c\x84\x1b\xe8\xa3\x53\x57\x5a\x5f\x33\xad\xce\x56\x74\xc7\xd1\x2a\x85\xc2\x07\xba\xf1\x1c\x7d\xa4\xf1\x9e\x6e\x81\xcd\x0f\x01\xe6\x6e\x50\x8c\x75\x09\x81\xa2\x83\x00\xf2\xc5\xf0\x71\xab\x9c\xb6\x8b\x09\x9e\x44\xc2\x91\x18\x19\xd0\xd3\xfd\x51\xa0\xbb\xa5\xab\xdd\xed\x0a\xa1\x2d\xc9\xc6\xd6\x4c\x96\xf9\x10\x74\x9d\xff\xa2\xed\x22\x40\x1a\xf1\x0f\x57\xf4\x7a\x30\x1a\xb7\x2f\x69\x74\x5f\xfe\xfe\x77\xbf\xfb\xcd\xef\x06\xd4\x7d\x15\x0b\x21\xd9\xe5\xd9\xd5\xd9\xdf\x6f\xbe\x3d\xc7\x14\xdc\x7d\xa1\xda\x51\xa0\x67\xd7\x61\x9e\x9d\x06\x79\xbe\xd7\x10\x4f\x4c\x2c\xd9\x9b\x8a\xb4\x3d\x0c\xd8\xa5\xc3\x00\xa7\x1d\x3a\xbd\xd6\x4b\x98\x8d\x92\x68\x4e\xa2\x6d\x9b\x6b\xdd\x51\x7b\x12\x67\xcc\x26\xc5\x8d\x4a\xee\x3a\xd4\x9e\x2e\xa0\xd0\x90\x90\x35\xee\xf6\xfc\x9a\x7a\x77\x5a\xec\xd5\xdb\xdb\x3a\xa1\x01\xa3\x7e\xd8\xeb\x60\xc5\xfa\xab\xb7\xd7\x39\xcd\xf7\x0e\x0a\x5b\x19\x08\x86\x3c\xb9\xbb\xe7\x3a\x45\xfb\x19\xb7\x62\x28\x32\x41\x25\x86\xc3\xd5\x93\x52\x51\x58\x21\x95\x52\x53\xa3\xf9\x02\x9e\xb5\xd1\x15\x0d\x63\xc4\x02\x47\x5c\x64\x68\xa7\x2d\xa5\x15\x39\xf8\xb8\xa3\xa4\xa8\x0c\x87\x4d\xcb\x79\x54\xf1\x42\x7b\xb2\x2a\xde\xe1\xdb\xe0\x3b\xdc\x5a\xdb\xdb\x37\xfa\xf1\x09\xb3\x3a\xcf\xe2\x28\xed\x24\xb2\xba\x9f\x05\xab\x2b\x34\xdc\x58\x55\x74\xe4\x8b\xa1\xce\x56\x78\x62\x86\x30\x52\x8e\x08\xaf\x74\xad\x84\x9b\x88\x25\xa6\x20\x06\xdb\x99\x6a\xb9\x4f\x28\xee\xd3\x94\xc9\x24\x98\x41\x25\x18\x73\x82\x4e\x97\xb2\x20\xdd\x18\xc9\x75\xa9\xa1\xe7\x56\x07\x39\xce\xae\x57\xe7\x52\xb8\xe1\x41\xd2\x8f\x60\x13\xb2\x0f\x37\x08\x39\x96\x1f\xf5\xd3\x9f\x77\xd6\x24\x9a\x9b\x09\x60\x11\x13\x78\x10\xe1\xce\x95\x6b\x95\x1e\x1e\xd6\x4b\x71\x8c\x65\xac\x79\x02\xac\x00\x2d\x94\x63\x46\xa5\xb4\xa9\xba\x97\x6c\x08\x63\x21\x4d\x00\x85\xeb\x3b\xc0\x0c\xbd\x3e\xc2\x54\xe5\xe7\x06\xec\x5d\xab\xa4\x8a\x4f\x76\x4a\x54\x7d\x34\xfd\x9c\xe7\xfd\x55\xc8\xb1\x1a\x17\x33\x57\x10\x0e\x41\xb8\x76\x83\x29\x1f\x95\x12\x47\x4e\x21\xe3\x33\x8a\x69\x1d\x09\x89\x9a\xa3\x36\xc7\x1d\xf8\xb5\x1c\x08\xeb\x67\x2b\xe7\x81\x17\x02\xf0\x64\xb2\x9f\x8b\x39\x3a\xc2\x36\x6c\xd1\x11\xb6\x4f\x27\xd1\x11\x16\x1d\x61\x8f\xb4\xe8\x08\x8b\x8e\xb0\xb9\xf6\x64\xb5\xa4\xe8\x08\xdb\xb9\x45\x47\xd8\xfa\x16\x1d\x61\x1b\xb4\xe8\x08\xdb\xb0\x45\x47\xd8\xea\x16\x1d\x61\xfb\x4d\x26\x3a\xc2\xa2\x23\xcc\xb7\x9f\x9f\x75\x30\xb4\xe8\x08\x5b\xe8\x24\x3a\xc2\xa2\x23\x6c\xe3\xf6\x64\x55\xbc\xe8\x08\xa3\x16\x1d\x61\xed\xf6\xf3\x62\x75\xc1\x8d\x74\xed\x14\xca\xfd\xf3\xf3\xae\xd1\x75\x21\x12\xef\x8d\x6a\x5e\x80\x57\x0d\xd5\xb8\xf3\xae\x51\xe2\x24\xa4\x15\x79\xbf\x53\xed\xcd\x5a\x9a\xfb\xb5\xad\x43\x24\x24\x4c\x9a\x93\x42\xd1\xff\xd5\xee\x90\x86\x1f\x84\xd4\xea\xdd\xf3\xef\x3e\x5a\x66\xd9\x3e\xce\x8f\x0f\xe3\xf8\x78\x22\x5e\xa2\x0e\x9c\x1d\xd1\xd1\xf1\xc9\x39\x3a\x3e\x9d\x1b\x80\xbd\xff\xff\x76\xa2\xc1\x4c\x54\xb6\x33\xa2\xb7\x90\xfc\x8d\x90\x22\x2f\x73\x87\x73\xc6\xe1\xb3\x98\x56\x81\x06\xa6\x42\x57\xa2\xd8\x64\xab\x74\x2f\x8a\x14\xb0\x70\x2b\x17\x99\xdb\x46\xcc\x45\x9d\xf0\xa9\xc3\x75\x53\x26\x09\x00\x5e\x0b\xd7\xd4\x70\x7e\x33\xa8\x46\xaa\xae\x01\x79\xb9\x1f\xbd\xd9\x8f\x89\x53\x69\x55\xec\xe5\x37\xbf\xde\xa9\x8f\xb1\x2e\xba\xa1\xcb\x5f\xbd\xbb\x3e\x6f\x5e\xf9\x2d\x03\x59\x16\x72\xaa\x32\x84\x2a\xa7\x97\x9c\xb0\xf6\x11\x89\xf4\xfe\x6a\xc7\x5e\x2a\x47\x17\x3c\x62\x5f\xa9\xba\x6d\x37\x73\xb2\x73\xdb\x72\x34\xc6\xbd\xa4\x0a\xfe\x1b\xcb\xce\x7b\x53\xb7\xfd\xe5\xd9\xfd\x8f\x03\xc3\x12\x3b\xb8\xf0\xce\x00\x7c\xe0\xaf\x9c\x0e\x2c\xb8\xa9\xb8\x84\x5b\xad\xac\x62\x45\xc6\xeb\x7b\xa9\x70\x07\xfe\x8a\x7c\xe3\x7c\x02\xc9\xdd\x3b\xef\xa3\x3d\x32\x00\x95\x3c\x39\x16\x76\x52\x0e\x07\x89\xca\x4f\xdc\x31\xa6\xff\x1b\x66\x6a\x78\x92\x73\x63\x41\x3b\x11\xd3\xb3\xa5\x7e\xe2\x7a\x11\x72\x3c\xc8\xd3\xe3\x01\xfb\x5e\x52\x76\x7d\x7d\x0f\x66\xa3\xb6\x84\x1b\x3f\xd4\xf9\x18\x82\xa3\x88\x4a\x37\xaf\x2f\x1f\xce\x70\x7a\x83\x7d\x0a\x35\xef\xcd\x46\xf6\xf4\x8f\x7f\x78\xdf\x78\xa4\x5c\xac\x03\x23\xc9\x73\xf3\x81\x77\x16\x0b\xd2\x81\xef\xfb\x09\xf9\xbd\x9f\x8c\x38\xfb\x54\x7c\xdd\x4f\xb0\xda\x75\x07\xfe\xed\x2e\x7c\xdb\xdd\xf9\xb5\xdf\x43\x51\xe8\xe7\xec\xcf\xee\xd0\xe8\xd7\x91\x1f\xfb\x43\xf8\xb0\x3b\x59\xf5\xbe\xbe\xeb\x0f\xe7\xb7\xee\x66\xb9\x5d\xaa\x1b\xcf\xd5\x57\xdd\x81\xf1\xbe\x4b\xc3\x7d\x67\x46\xfb\xf7\xe6\x9b\xde\xdf\x2f\xfd\x04\x7c\xd2\x7b\x03\x59\x48\x61\x05\xcf\x2e\x20\xe3\xb3\x1b\x48\x94\x4c\x77\xe6\x63\x73\xb5\x48\xab\xf3\x63\xa8\x5b\x6f\xc1\x6a\x27\x7a\x4c\xb8\x2f\xb9\xee\xf4\x36\x4a\x6c\x09\x5e\x0e\x2f\xb6\xa0\xbf\x99\x66\xf9\x24\xfd\x16\xec\xc9\x98\xca\x28\xeb\xa5\xcb\x4d\xfc\xab\xba\x67\x6a\x64\x41\xb2\x23\x21\xc3\x3e\x1e\x37\x94\xcd\xda\x6e\x59\xa1\xb5\x7b\xfa\xf2\x45\x78\xf9\xd3\x33\x48\xa2\xe9\xd5\x98\xf7\x6f\x1f\xf6\x03\x3d\x6e\x20\xf6\x2f\x8e\xca\xac\x6d\x24\x26\xc3\x71\x9b\xde\xbc\xac\x8b\x46\xbf\xc4\x7e\xab\xd3\xc6\x65\xca\x7c\x26\xdc\xa7\xb7\x69\x7b\x47\xdc\xb4\x45\xbf\x2a\xc2\xe6\x31\x7b\xf2\xed\xf9\x75\x34\x27\x3f\x2d\xa3\xcc\x47\x8a\x5a\x79\x82\x82\xee\x33\x8d\x54\x89\x82\xee\x16\xad\x91\x1b\xfb\x95\xe6\x09\x5c\x77\x2e\x23\x84\xe3\xc4\xd2\x52\x73\x4f\x00\x2b\x91\x2f\x1c\x1e\x09\x90\xd2\x69\xaa\xf2\x89\x31\x53\x77\x54\x66\xd9\x8c\x6c\x0e\xad\xec\x6b\xf2\xc2\xcf\x27\xf3\xa2\xe1\x7f\xc9\x28\xb5\x60\x59\x68\xe5\x79\xa6\x2e\xa5\x74\x34\xb8\xbe\xf9\x0d\x05\x49\x2c\x46\xcd\x5b\x29\xc3\x46\x8c\xdd\xf4\x1d\xff\xc3\x6c\xe2\x3a\x34\xb1\xd5\xa1\xfb\x7a\xa4\x74\x22\x86\xd9\x8c\x4d\x78\x56\x5d\xf3\xc3\xd9\x9d\xc8\x32\xdf\xcd\x80\xdd\x80\x25\xc7\x05\xf1\xce\x4c\xc9\x31\x4e\x8e\xcb\x70\xbd\x24\x24\xee\xdb\x24\x03\x2e\xcb\x82\xc6\x73\x9c\x78\xa6\x4a\x1d\xc6\x1b\x54\xee\x8f\x8a\x03\x4b\x91\xf5\x1a\x97\xd8\xad\xdd\xd8\xda\x44\x63\x9c\x00\xf0\x36\x14\xdf\xee\x35\xfb\x0c\xf5\xd1\x4d\xe3\x0a\xa3\x42\xab\xa9\x48\xc9\x87\x12\xc0\x86\xd7\x65\xd3\x35\x45\xd5\x79\x96\x4a\xf6\x25\x8c\x39\x0a\x2a\xfe\x14\xd1\x9e\x51\x3f\x14\x5b\x20\x53\xbc\xb8\xc8\x49\xf8\xaa\x68\xa5\xf3\x4f\x05\x5d\xb9\xdc\x80\x1c\x3b\x92\x8a\x29\x8c\x54\x2d\xa5\xb0\x74\x8d\xff\xa4\xb4\x2c\x55\xf7\xf2\xd8\xdb\xac\x84\x61\x9c\x0d\xc1\xf2\x46\xac\xa9\x67\x70\x86\x81\xe4\xc3\xcc\xed\x39\x86\x62\xdd\x2e\x05\x10\x1b\x01\xb7\xa5\x06\x36\xe6\x16\x96\xca\x39\xb4\xde\xf5\xe0\x15\xc6\x1b\x58\x47\xac\x94\x06\xf6\x64\xef\x9d\x09\x47\xbf\xff\xed\x6e\x34\x42\xe4\xa0\x4a\xfb\x41\xb4\xbf\xfb\x89\x48\x26\x4d\x61\x56\xe4\x60\x98\x2a\xe7\xd4\xe2\x97\xfe\xb3\xe5\x3b\x14\x55\xc0\x65\x6d\x57\xf3\xf1\x12\xeb\xd7\x7c\x39\x86\xfa\x7e\x6f\x8c\x20\xbf\xb8\xba\xf9\xfb\xeb\xb3\xff\x7a\xf5\x7a\xc0\x5e\xf1\x64\xd2\xac\xc9\x21\x19\x47\xa2\x81\x84\x62\xc2\xa7\xc0\x38\x2b\xa5\xf8\x67\xe9\xdd\xca\x47\xd5\xb7\xc7\x9d\x56\xa4\xdf\x91\xfb\x3a\x6a\xb3\x13\xc6\x2f\xbd\xf4\x0e\x7b\xf3\x11\x5b\xca\x00\x5e\x53\xb3\x20\x3e\x55\xbe\xec\x19\xa9\x08\x28\x70\x61\x60\xfd\xc5\xdb\x57\x37\x18\xb0\x5f\x68\xaa\x54\x82\x11\x5e\xf8\x1c\x7b\x1a\x82\xfb\xc2\xdf\x4f\x3c\x60\x67\x72\x46\x0f\xe9\x4c\x09\xc3\x32\x61\x2c\x20\xd7\xf3\x62\x5b\xf0\x92\x1f\xbc\x18\xe0\xff\x0e\x18\x4f\x53\xed\xe4\xba\x2a\x70\x2d\x59\x88\x24\x25\xc9\x4f\x0c\xb3\xc6\x02\x24\x58\x8a\x53\x7b\xa3\x52\x3f\x73\xe4\x24\xe8\x21\x23\x36\x68\xac\xe6\x16\xc6\x22\x61\x39\xe8\x31\xb0\x82\xdb\x64\xc2\x72\x3e\x63\x89\xd2\xba\x2c\xe8\x36\x83\x94\x5b\x3e\x60\x5f\x2a\xcd\xf2\x70\x88\x1d\xce\x3b\x3e\x7c\xb3\x3c\x72\xa0\x3e\xd9\xcd\x7f\x0a\x63\x4a\x30\x27\x2f\x5f\xfc\xe1\xd7\xbf\xfb\xdd\x27\x75\x01\x5e\x15\xda\x8b\x71\x2f\x8d\x0b\xf0\x78\xd8\x05\xda\x75\xba\x10\x51\xc8\x71\xd6\xc4\xaf\xdd\x18\xc0\xbe\x5a\xe6\xbe\x3a\x66\xbf\x5e\xc1\xf5\xae\xaa\x66\x27\x17\xf1\xd5\x73\xe8\xe8\xfa\xaa\x9a\x0f\x06\xc5\xca\xd3\x06\xd5\xbc\x91\xf8\xf2\x3a\x1c\x4c\x2f\xe7\xe4\x73\xd7\xd8\x16\x75\x0c\x54\x8f\xbd\x60\x7f\x62\x0f\xec\x4f\xa8\x68\xfd\x7e\xdf\xcb\xbe\xf6\x55\x81\xba\x08\x69\x72\xfa\xfd\xe5\x75\x47\x10\xff\x9b\x23\x9a\xae\x47\x07\x55\xab\xd8\x50\x78\xc1\x1e\x1e\x2c\x68\x27\x68\xfa\x9d\xf8\xa8\xd7\xa4\xb9\x09\x7e\x40\x34\x23\xc7\xc3\xe5\xa8\x1d\x46\xb5\x1d\xa2\xb9\xcf\xff\xaa\x8c\xbd\xf2\x54\xa8\x7d\xe1\x4f\xdd\x5b\x8e\x84\xbf\x45\xc6\x1c\xdf\x30\xb6\x3e\x60\x86\xa5\x0a\xa3\xba\x28\xc4\x79\x22\xf6\x08\xd6\x78\x3a\x68\xbc\x9f\xff\xbe\xb5\x9f\xeb\x76\x6a\xce\x94\x82\x3a\x90\x17\xb1\x1a\x35\xba\x0a\x95\x7a\xe9\xcc\x4d\x2b\x6d\xf0\x8c\x35\xe2\x99\xb7\xda\x54\xf6\x66\xc4\x25\x77\x9e\x12\x2e\x29\xc9\x64\x04\x5a\x53\x54\xfa\x70\x16\x82\x03\xf7\xde\xbc\xbd\x4e\x52\xa1\x95\x55\x89\xda\xe3\x26\xb7\xb6\xb7\xdb\x77\x87\x40\x28\x08\x77\x3d\xe4\xbf\xb9\xb8\xee\xb1\xdb\xf3\x6b\xbc\xdd\xea\xe6\xfc\xf6\xba\xad\xb3\x1c\xdc\x9e\x5f\x1f\x7c\x54\x50\xb0\x20\xf0\xa1\x89\x7a\x87\x4e\x5a\x26\x28\x27\x4d\xf6\x73\x5e\xf4\xef\x60\xb6\x23\x4f\xed\x82\xaf\xf7\xab\x1d\xee\x64\x41\x04\xe6\x9c\x17\x5b\xf7\xa6\x81\xa7\xe2\x03\x65\x7a\x85\xb0\xdb\x6a\xcc\xe5\x29\x5f\xb9\x9a\x42\x4a\x52\x7a\xf8\x02\x64\x5a\x28\xe1\xe4\xc5\x98\x07\xb6\xfd\xd7\x31\x0f\x6c\xe3\x16\xf3\xc0\x62\x1e\xd8\x62\x7b\x32\x81\xb3\x31\x0f\xec\xd3\xf2\xe0\xc7\x3c\xb0\xed\xdb\x47\x77\xdc\xc7\x3c\xb0\xe5\x2d\xe6\x81\xc5\x3c\xb0\xcd\x5a\xcc\x03\xdb\xbe\x3d\xb9\x90\xa3\x98\x07\xb6\x55\x8b\x79\x60\x8b\x2d\xe6\x81\xad\x68\x31\x0f\x6c\x45\x8b\x79\x60\x8b\x2d\xe6\x81\x6d\xd7\x62\x1e\x58\xcc\x03\xfb\xa4\xc3\x63\x59\xcc\x03\xf3\x2d\xe6\x81\x7d\x12\x41\x80\x2c\xe6\x81\x6d\xd4\x62\x1e\x58\xcc\x03\xdb\xa5\xc5\x3c\xb0\x4f\xc5\x28\x13\xf3\xc0\x62\x1e\xd8\xcf\x47\xd0\x8d\x79\x60\x31\x0f\x2c\xe6\x81\xc5\x3c\xb0\xb5\xb3\x88\x79\x60\x9f\x82\x0a\xa8\xc1\x88\x7f\xc1\xb5\xca\x44\x32\xdb\x3b\x4a\xf1\x9d\xbf\xf8\xd8\xf8\x6e\x59\x81\xfd\x36\x42\xab\xf6\xc8\x3c\x79\x62\x09\x37\xef\x1a\x80\x6b\x26\xde\x54\x97\x3f\xbf\x07\x10\x3c\x89\xe4\x9b\xb0\xc0\xab\xdd\x3d\x29\xfd\x70\x01\x01\x81\x6f\x37\xbb\xc5\xde\x2a\x42\x73\x21\x1d\xc5\x83\x1f\x36\x33\x22\x2b\x4c\xb0\xaa\xa2\x60\x62\x25\x82\xf0\xa2\xc8\x04\x98\x01\xbb\xa9\x2e\xe0\x41\xea\x65\x4e\x59\x52\x94\x3d\x96\x43\xae\xf4\x6c\x0f\x6d\xa2\x03\x81\xb3\xb5\x6b\x1d\x81\xec\x1d\xf5\x19\xc0\xe0\x94\x88\xa2\xc8\x66\x24\x4c\xd5\xa9\xa4\x15\xd4\x44\x20\x2e\x29\x8a\x3b\x73\x51\x1e\xc2\xb6\xd4\xb0\x2b\x65\xdf\x79\x84\xff\x68\xb1\xf6\xab\xa2\xca\xb9\x55\xb9\x48\x76\x21\xd8\x44\x63\xf7\x8f\x29\x3f\x57\x79\x51\x5a\x68\x91\x6d\x02\x16\x49\x72\xc2\x34\x55\xb8\xfd\xa3\xc1\x13\x25\x47\x62\xec\x45\xf1\x13\xba\xd1\xbd\x5f\xad\xa7\xdf\xb8\x45\xfd\x19\x86\x82\x27\x19\x17\xbb\xfb\xed\xdb\xa1\x55\xe7\xd8\x17\x66\xe8\xd6\xc1\x55\x18\xa3\x5b\x41\xab\x57\x05\x2e\x09\x3a\x26\x83\xf0\x88\x3e\xee\x51\xa4\xaf\xd3\x3f\x50\xe8\x5c\xb2\xa1\xdf\xcb\x5a\x3c\x96\x8c\x67\xc5\x64\xbd\x80\xec\x26\x72\x31\x93\x3c\x17\x49\xc0\x98\xb3\x2c\x53\x09\x29\x44\x6d\x11\x39\xf4\x4d\xfd\xb9\x41\xf2\xbc\xb4\x7c\x98\xc1\x80\x5d\x52\x86\x90\x92\xd9\xcc\x61\x93\x01\x1b\x1c\x1f\x7e\xfb\x77\x8e\xc1\xda\x3f\x00\x63\xcf\xe0\x8b\xa5\xd2\x10\x6e\x08\x65\x43\x81\x74\xa7\x4c\x49\x60\x20\xad\x9e\xb9\xbd\xbb\x56\xe9\x8d\xdb\xbe\xd6\xdb\x7b\x27\x49\xed\x19\x73\xd1\x45\xbc\xc5\x9e\xb1\x16\xdd\x44\x48\xec\x1f\x1d\xb1\xe8\xe6\x6d\xe4\x2d\x36\x03\x1f\x5b\xbb\x5a\xa8\x74\xb0\xe4\x54\x06\xd1\xe0\x5a\xa5\x8e\xc1\x69\x68\x5e\x85\xe7\xf5\x43\x3c\x20\x39\xbf\x43\x15\x9b\xdb\x9a\xf3\xf1\x29\x17\x99\x3b\x42\x4b\xf2\xf1\xf7\x0b\x9c\xe8\x40\x34\xe8\x3a\x19\x8c\xed\x8b\x41\x5d\x26\x73\x31\xbc\xb9\x2b\x17\xbb\x55\x7f\x60\x0b\x8c\xf7\x35\xf6\xd5\x08\xc7\x72\x38\x91\xf3\x07\xd4\x59\x79\xae\x4a\x69\x29\xc3\x8b\xf8\x73\x45\xf4\x29\x68\xed\xc9\x71\x5e\xd6\x0d\xd9\xe1\x69\x48\x81\xb9\xee\x22\x9a\x9c\x5b\x0b\x5a\x9e\xb2\xff\x39\xfa\xfe\x57\x3f\xf5\x8f\xbf\x38\x3a\xfa\xee\x45\xff\x8f\x3f\xfc\xea\xe8\xfb\x01\xfe\xe3\xf3\xe3\x2f\x8e\x7f\x0a\x7f\xfc\xea\xf8\xf8\xe8\xe8\xbb\xaf\xdf\x7c\x75\x7b\xfd\xea\x07\x71\xfc\xd3\x77\xb2\xcc\xef\xe8\xaf\x9f\x8e\xbe\x83\x57\x3f\x6c\xd8\xc9\xf1\xf1\x17\xbf\xdc\x79\xca\x7b\xdb\xa8\xbb\xb3\x50\x77\x64\x9f\x7e\x2f\xd6\x69\x1f\xc7\xd9\xd1\x59\xf4\x31\xe8\x0b\xa7\xd1\x5b\x90\xd6\x9d\xc6\xc0\x25\x51\x11\xa9\xfa\x11\x86\xa9\x5c\x58\xa7\xc0\x39\xb1\x86\x37\x33\xcf\xe6\xd4\x13\x4f\x07\x30\xf7\x92\x63\x8a\x58\x23\x6b\xab\xa1\xd5\xa8\x60\x8a\x45\xf5\x48\x32\x91\x17\x19\xe4\x20\x2d\x9e\xe7\x7e\x90\x04\x51\x5f\x1c\xd4\x33\x49\x48\x62\x87\x87\x04\x20\xf5\x83\x45\xd2\xf1\x78\x8b\xa4\xe3\x53\x24\x1d\x7b\x1b\x2f\xe6\xe9\x46\xa3\x3b\xaf\x8c\x99\x60\xf7\x41\x8b\x46\x95\x65\xa2\x46\xe8\xd5\x98\x8a\xb4\xe4\x59\xb3\xae\x45\xa8\xb0\x30\x68\x2a\x4b\x39\x9f\x2d\xe8\x46\x42\x8a\x66\x41\x8c\x5e\xe5\x77\xc2\x17\xbd\x54\x50\x5b\xbb\x0f\xce\xb2\x7b\x3e\x33\x07\x54\x3b\x49\x2a\xd9\x9f\xeb\x80\x29\x1d\xbc\x55\x4d\xf1\x73\x49\xca\xcc\xc2\x62\xda\x29\x33\x5e\x98\x3d\x3c\x34\xd5\x9b\xc1\x9e\xe5\x67\x58\x47\x6d\x39\xb4\x40\x4f\x97\x0d\xda\x64\x1b\x86\xbc\x9e\x78\x65\x2e\x6d\xcf\x9b\x3c\x54\x58\x89\xc2\x3d\x1c\x29\xb7\x70\x2c\x73\x35\x1a\x41\x62\x4f\x7d\xee\xcf\x92\x6f\x28\xf6\xc5\x0a\x59\xf2\x2c\x9b\x35\xee\x3f\x55\x92\xc1\x83\xb0\xac\x94\x56\x64\x0e\x92\x4c\xc3\xb8\xcc\x78\x53\x1f\xf5\x23\x06\x27\x64\x3a\x60\x6f\xa5\x93\xc7\xd7\xbc\xec\x98\x45\x06\xd6\x41\x91\x63\x32\x6f\x1b\xfc\xe8\x02\x6c\x21\x64\xbd\xf4\x30\xdf\xca\x8d\xe5\xb1\xa3\xbe\x25\x3b\x15\xa3\x91\xeb\x05\x53\xf9\xa5\xd2\x39\x5f\x1c\xc1\xe7\x21\x53\x1c\x56\xb3\x12\x07\xd6\x64\x3b\x70\xfa\x43\xc2\xf5\x41\xd3\x1e\x70\x96\xd9\x89\x2a\xc7\x93\xa5\x50\x34\x16\x9d\x6e\x6e\xc2\x26\xb8\x47\xe7\x5f\x71\x7c\x47\x26\x40\x6c\x4e\x01\xe1\xd3\x3d\x17\x76\xd1\xfa\x4d\xb1\x13\x04\xa3\x10\xc2\x87\x5e\x4c\x48\x1b\x91\x8f\x12\x1e\xec\xdc\x28\x03\x76\x49\xf9\x2b\xbd\x55\x6f\x54\x93\x6c\x78\x0e\x83\xaf\x77\x71\x5d\xa2\x8a\x24\xc4\x42\x1d\xf4\x22\x97\xb3\x10\xd5\x84\x5e\x41\x0a\x38\xac\x02\xa6\xb2\x59\xbd\xbf\x3b\x19\x64\xf7\x22\x90\x06\x92\x52\x0b\x3b\x3b\x57\xd2\xc2\xc3\x4e\x91\x1d\x6d\x4a\x76\xd3\xee\xb0\x45\xcb\xc2\x60\x4c\x15\x94\x89\x3e\x57\xea\x6f\xa2\xca\x2c\xc5\xf2\x12\xa5\x44\xac\xa6\xba\x41\x60\x69\x7b\x90\xb2\xa0\xd6\x3b\x3f\x48\xf0\x23\x93\x7b\xfb\x9f\xa5\x98\xf2\x0c\xa4\x6d\x7c\x71\x8d\x9e\xd3\xe6\x47\x9b\xca\x2e\x96\x9b\xbb\x5a\x70\x81\x7e\xa1\xd2\x5a\x4e\x39\x09\x4b\xc2\x9f\xe0\xc1\x3e\x47\x63\x23\x52\xfc\x6b\x2d\xa6\x22\x83\x31\xbc\x32\x09\xcf\x50\x3e\xeb\x46\x24\x3e\x5b\xd1\x3b\x6e\xbc\x56\x99\x71\xbc\xc3\x89\xa4\x8e\x7b\x51\xe8\x01\x5a\xf4\xc6\x5c\x48\xaa\xd4\x57\x84\x8f\x0d\xc5\x30\x38\x29\xb7\xe0\xda\x6d\x70\x15\xab\x80\x44\x6d\xa8\x54\xe6\x6b\x30\xe0\xa9\xf2\xfd\xfb\x6a\x24\x52\xfd\x5d\xc2\xfd\xdf\x5d\x6f\x86\x8d\x32\x3e\xae\x89\x23\xd8\x85\x28\xa3\xba\xeb\x95\x0b\xc0\x02\x07\xa5\x23\xdd\x8e\xd6\xd6\x01\x1b\x4d\x7a\x70\xca\x5e\x1e\x23\x3a\x73\xc3\xaa\x3e\x52\xf6\xeb\x63\xa4\x02\xe7\x67\xd7\x7f\xbf\xf9\xef\x9b\xbf\x9f\x5d\xbc\xb9\xbc\x62\x57\xca\x02\xc9\xee\x0d\x46\x9a\x54\x86\x72\x37\xcb\xca\x8f\x31\x50\x66\x80\xb6\x22\xcc\xa2\x91\xa9\xba\x37\x3b\x7b\x73\x08\xfd\x1c\xf0\x80\xcb\xdd\xcc\xd5\xbc\xe0\x43\x91\x89\x7d\x24\xe5\x85\xcc\x96\x66\xa7\xc8\x6b\xd2\xf4\x24\xd5\xaa\x20\x20\x84\xe0\x9a\x86\xa1\xb7\xe5\xbe\x6f\x66\xe8\xe2\xfe\x8e\xda\x1d\x8e\x35\x97\xb6\x16\x3b\xea\x3d\xd3\x8e\x79\x63\x3d\xaa\x3d\xb7\xe3\xe3\x29\x30\x5d\x58\x3b\x79\xda\x5d\x7d\x95\xb3\x34\x85\xb4\x05\xfe\xbd\xa3\x18\x9f\x5a\x5e\xe4\x79\x58\x5c\xc3\x7d\xcf\xae\xdf\xde\x5c\xfe\x7f\x73\x78\x3c\x2b\xf6\x4b\xd0\xea\xa6\x56\x97\x56\x45\x67\xbb\xfb\xce\xd7\x82\x8a\xfb\xfb\x24\xf6\xb7\xe2\x96\xdd\xa4\x05\xbc\x2b\x65\xbb\xc8\x72\xdd\x3f\xcb\x55\x0a\x03\x76\x5d\xc5\x27\xb6\x9f\x36\xf5\x07\x0d\xcc\xbd\x22\xad\x40\x8d\xa9\x21\xa2\x59\x45\x75\x91\x5a\xd5\x22\x9b\x84\x7c\xc4\x33\xf3\xb1\xa9\xf1\x3e\xbc\xd1\xc9\x11\x6f\x54\x29\xbb\x89\xfb\xaf\x7a\x63\x29\x48\x65\xbd\x60\xed\x66\x89\x15\x38\xb5\x4a\x18\xd9\x18\x1b\x49\x60\x2d\xfe\x66\x28\x46\x32\xb0\x46\x61\x02\xb0\xaf\xab\x9e\x29\xbc\xa4\x34\x30\x2f\xa0\x7b\xd6\x58\x5b\x1d\x5d\xef\x1a\x78\x8a\x86\x83\x82\xdb\x09\xa9\x8a\x39\x37\x77\x90\xd2\x0f\x5e\x34\xab\x1c\xc0\xa8\xe3\x87\xa1\x6e\xdd\xbc\x83\xaf\x17\x45\x32\xca\x2c\x41\x2f\xb1\x53\x8d\x3f\xea\xae\xef\x71\x08\x1d\x50\xde\xca\x6c\xf6\x4e\x29\xfb\x65\x55\xd8\xab\x13\x0c\xf8\x9b\x97\x96\xdb\x0e\x78\x14\x27\x39\x8e\xdb\xc7\xdd\xc0\x43\xd5\xac\x29\x76\x51\xef\xf8\x73\x3f\x52\xba\x94\x67\xe6\x2b\xad\xca\x9d\x99\xd8\x82\xb0\xf9\xd5\xe5\x05\x92\xa2\xd2\x87\x48\x4b\xab\x67\x58\xcc\x70\xb1\x22\x7d\xa5\x18\x7c\xe3\x83\xbc\x9b\x67\xa2\x8e\xc7\x65\x6f\xf8\x8c\xf1\xcc\xa8\x00\x4b\xef\x9e\x9f\xd7\x42\xbd\x8a\xeb\x1e\x0f\x95\x9d\x2c\xe8\xb6\xee\x40\x2d\x7e\xd7\x6b\x44\x4c\xd7\x71\x4d\x42\x2e\x7c\x6e\xd1\xf7\x5b\x68\x48\x20\x05\x99\x7c\xec\x6d\xff\xd8\x81\xc6\x88\x3a\x57\x4a\xba\x83\xd9\x09\xf2\x5c\x56\x11\xe6\x1e\xa4\x4d\x54\x41\xe7\xbe\xd7\xfe\x38\x9a\x4e\xf1\x58\x96\x06\x4d\x4f\x23\x54\x1f\x69\x27\xbf\x2e\x87\x90\x39\xc8\x3b\x95\x14\xeb\x21\x73\x4b\xe6\x0c\x91\xf3\x31\x30\x6e\x2b\x4c\xb3\x8a\x81\x34\xa5\xf6\x9b\xd8\x34\x8f\xf9\xa1\xbe\xb9\xbc\x60\x2f\xd8\x91\x1b\xeb\x18\xf1\x67\xc4\x45\x86\xc1\xec\x68\x53\x9d\xd3\x51\x47\xa1\x0b\x9c\x12\x22\x2f\x53\x9a\x88\x44\x8f\x49\xc5\x4c\x99\x4c\xc2\x9c\x9c\xde\x1b\xd4\x66\x9f\x80\x89\x1e\xe4\xa7\x89\xeb\x1f\x97\x42\x7d\x63\x40\x77\x46\xa0\xbe\xd9\x81\x40\x35\xc5\x28\x87\x73\x6d\xe8\x11\x62\xe5\x60\x79\xca\x2d\xf7\x84\x2b\xbc\xf0\x64\xb7\xf4\xe7\x4d\xbe\x0c\xbc\x16\xb2\x7c\xa0\x84\xa7\xee\x4c\x2d\x37\xaf\xb0\x5b\x96\x04\xa8\xe3\xae\x53\x10\x71\x1a\xac\x29\x4d\xab\x79\x0b\x57\x7a\x2b\xc4\x44\xa4\x13\x9c\x82\xfa\xc0\x09\x27\x5c\xa6\x2a\x5f\x18\xcc\x09\x91\xd0\xba\xcb\x65\xc0\x22\xf6\xb5\xdb\x13\x31\x0a\x65\x30\x85\x3d\xaa\x9d\xcf\xdf\x5d\xe3\x7a\x73\xc0\x09\x18\x81\xdd\xb3\x8c\x0f\x21\xf3\x01\xa7\x14\xc6\xbe\x88\x81\x1f\x3b\x0b\x56\xab\xac\xbb\xb2\x1d\xef\x54\x06\x94\x56\x16\x00\xe1\xba\x7f\x16\x70\xc0\x4e\xba\x82\x03\x6a\x83\x2d\x38\xa0\x5e\xfb\x1c\xe0\x50\xee\xc1\xea\xd9\x3c\x1c\x9c\xdc\xd0\x86\x03\x32\xef\xa7\x0e\x07\x03\x49\xa2\xf2\xe2\x5a\x2b\xa7\x76\x76\xc6\x9b\x7c\xb7\xb5\xcf\x90\x0c\x1b\x4b\x42\xd0\x91\x17\xb4\x5f\xe6\xba\x91\x50\xca\x2d\x31\x89\x90\x55\xfa\xff\x34\x78\x16\x92\x9e\x79\x46\x16\x7a\x69\xb9\x17\xdd\x97\xfe\xc1\x73\x66\x07\x5d\xd4\x64\xd8\xc3\xd8\xd9\x09\x37\x52\x09\xcf\xf0\x36\x9b\xfd\x50\x8e\xcd\xa3\xdd\x7c\xc7\x8d\x34\x62\xf4\x51\xe2\x6f\x8d\x8c\x09\x8e\x86\x96\x60\xc2\x94\x2a\x85\x86\x2f\x9b\xa2\xb0\x6f\x29\xdd\x14\xdf\x0b\x19\xcc\x4e\xae\x08\x6e\xe5\xb4\xf5\xb5\x55\xbe\x26\xfb\x9b\xea\x8e\x1c\x37\x41\x90\x18\xcf\x50\x70\x3b\xe9\x31\x0d\x19\xe5\x3e\x7b\x22\x70\x47\x1a\xe4\x21\x1e\x89\xd0\x69\x38\x0f\x61\xe8\x90\x60\x51\xf7\x8c\xd2\xd3\x88\x28\xad\x30\xec\xe0\x75\x58\xfb\x81\x7f\xe7\xea\xed\x6d\x33\x78\x88\xcb\x19\x45\x10\x52\x04\xce\xc7\x26\xbc\x9d\x32\xa0\x03\x82\x42\xb5\xd9\x64\x08\xbd\x13\x32\xf5\x59\xc4\x2d\x58\x56\x97\xd6\x91\x98\x8c\xf9\xe9\x22\x6d\x92\x9e\x53\xf6\xbd\x64\x15\x40\x59\x7f\x67\xec\x79\x47\x12\x75\x30\xe1\xf5\xd7\xdb\x65\xab\x41\xe6\xbb\xf9\x46\x22\x6a\xb8\x71\xfb\x4e\xb1\x5f\x7c\x2f\xac\xe5\xa3\xd6\x2d\xf6\xc4\xb1\x6b\x25\xe7\x6f\xd4\x6d\x90\xf8\x13\x87\xd2\x56\xc8\xb1\x69\x2a\x3a\x3c\xcb\x5a\xb6\xf2\x65\x9a\x4e\xd8\xe1\xea\x8a\xc2\x45\x0d\x63\xae\xfa\xc1\x73\xd1\x52\x32\x27\x6d\x3c\x73\x1d\x65\x9c\x1b\x7e\xae\x1d\x24\xac\xe0\xd9\x4d\xb1\xfb\x9d\x2a\x6c\xa1\x7e\xff\x9b\x9b\xb3\x76\xd7\xc8\xcb\x7d\xea\x0d\xe0\x73\xc6\xd3\x5c\x18\x83\x76\x32\x18\x4e\x94\xba\x63\x47\x6b\xaf\x96\xec\x1b\x31\x36\x27\x1e\xe7\xfb\x6e\xf6\xc7\x4c\xc8\xac\x0a\x9a\x42\x35\x59\xda\x2a\xdb\x07\x07\x49\xaa\x59\xe0\x1e\xfa\x8b\xb6\x7c\x2c\xc3\xe2\x34\xe9\x6a\x2d\x87\x05\x1f\x9d\x60\x2f\x6e\xcf\x7e\x19\xd3\x8f\x6e\xd1\x95\xc7\xed\xf9\xb2\xf2\x4b\xe1\x48\xc2\xe5\x47\x07\x92\x97\x3d\x12\x30\xdd\x55\xb3\xfe\x6b\xdd\x27\x4b\x81\xe2\x4f\x01\x83\xa3\xf8\xca\x18\x3c\x34\x5b\x1f\x62\x8d\x2a\xff\xe9\x61\x3b\xc6\x33\x73\xd0\xe4\x18\xb4\x6b\x9a\x0e\xdf\xfa\x92\xb7\xaa\x26\x2f\x45\xd5\x3a\x81\xa5\x39\x13\x22\x6f\x47\xf5\x95\x36\x21\xfc\xd8\xaa\x70\x49\x5c\x2e\x1e\xdc\x28\xcd\xaf\xe6\x42\x53\xa5\x92\xfd\xe5\x8f\x8f\x07\xec\x52\x56\x01\xfd\x3d\xb7\xda\xe6\x8b\x21\x82\xcb\x3a\x62\xd8\xbc\x60\x10\xe7\xdf\xb4\x3f\x39\x21\x4b\x97\x1d\x60\xc6\x3e\x56\x65\xd6\xb4\x2c\x77\x7a\x6c\xd0\xc2\xec\x3b\x75\x2c\x26\xf0\xca\x7d\x2c\xce\xee\x95\xf7\x65\x75\x7e\x1e\x7e\x04\xb6\x77\x74\x6e\x23\x6c\xb8\x83\xd0\xdc\x66\x10\xb2\x58\xf4\x5b\x5d\xab\x74\x31\x36\xd9\x17\x67\xad\x4a\x24\x34\x64\x21\xa9\xbc\x26\xd0\xa8\x92\xea\xef\xca\x4a\x7d\x08\xbc\x57\xd1\x29\xbc\xb9\xdd\x73\x5d\x5f\xaa\x71\x4d\x5c\xaf\x4e\x68\xad\x6e\x9a\xab\x22\xaa\xff\x81\x87\xb2\x8a\xe7\x0c\x65\x23\xaf\xab\xcf\x21\xe4\x3e\xf8\x3b\x23\x31\x57\xdd\xaa\x60\x01\xf0\xa1\xee\x3e\x6e\xd4\x29\x60\x5c\xf3\xdc\x91\x42\xc3\x3c\x08\x86\x30\x16\x14\x57\x58\xd1\xb5\xc3\x46\xb0\x7c\x8f\xc4\x26\x61\x59\x2e\xc6\x13\x42\x14\xc6\xb1\xc0\x16\x0b\xbe\xb9\x4c\xf1\x14\xef\x9a\xc6\xb4\x08\xae\x73\x47\x5f\x79\x32\x41\x47\x1f\x97\x2c\x2d\x35\x5e\x9f\x64\x81\xa7\xb3\xbe\xb1\xdc\x3a\x89\x12\xb4\xd7\xcb\xc2\xfc\xe3\x5d\x79\x6b\x5b\xbc\x2b\x6f\xc3\x16\xef\xca\x8b\x77\xe5\x2d\xb6\x27\x13\x64\x19\xef\xca\xfb\xb4\xaa\x1c\xc7\xbb\xf2\xb6\x6f\x1f\xbd\xb8\x71\xbc\x2b\x6f\x79\x8b\x77\xe5\xc5\xbb\xf2\x36\x6b\xf1\xae\xbc\xed\xdb\x93\x2b\xcb\x1e\xef\xca\xdb\xaa\xc5\xbb\xf2\x16\x5b\xbc\x2b\x6f\x45\x8b\x77\xe5\xad\x68\xf1\xae\xbc\xc5\x16\xef\xca\xdb\xae\xc5\xbb\xf2\xe2\x5d\x79\x9f\xf4\x15\x22\x2c\xde\x95\xe7\x5b\xbc\x2b\xef\x93\xb8\x28\x81\xc5\xbb\xf2\x36\x6a\xf1\xae\xbc\x78\x57\xde\x2e\x2d\xde\x95\xf7\xa9\x18\x65\xe2\x5d\x79\xf1\xae\xbc\x9f\x8f\xa0\x1b\xef\xca\x8b\x77\xe5\xc5\xbb\xf2\xe2\x5d\x79\x6b\x67\x11\xef\xca\xfb\x14\x54\x40\x63\x53\xb1\x53\x89\xcd\x4d\xaa\x01\xf9\x30\xee\x46\xf2\xfd\xb0\x1c\x8d\x40\x23\xe5\xc2\x91\x17\xc2\xaa\xea\xc2\x87\xf3\xae\x5c\xb0\x3d\x2c\x2c\xe4\x33\x5e\x56\x7c\xee\xb3\xfd\xb1\x14\xa6\x06\x83\xb5\x70\x24\x7b\xf5\xf6\xcb\x25\xa5\x87\x76\x8e\x37\xdc\x35\x7a\x1a\xe7\xfc\x56\xee\xe6\x85\x5f\x01\xf0\x65\x19\x58\x1e\xee\x49\xa6\x8c\x0f\x7d\x47\x60\x25\x13\x2e\x25\x04\x7d\x4f\x58\xb4\xa3\x0c\x01\x24\x53\x05\x78\x1f\x38\x67\x46\xc8\x71\x06\x8c\x5b\xcb\x93\xc9\xc0\x8d\x24\x03\xb0\xeb\x38\x75\xff\x8b\xb1\x1a\x78\x4e\x40\xd7\x90\x73\x41\x5d\x31\x9e\x68\x65\x0c\xcb\xcb\xcc\x8a\xa2\xea\x8c\x19\xc0\x94\x14\x62\x54\x15\x30\x30\x5e\xae\x0e\x6e\xef\xd5\xa3\xf9\x69\x29\x39\x5f\x09\xb9\x87\xf7\x0a\xe4\x85\x9d\x55\x11\xbe\xc0\x46\x42\x1b\xcb\x92\x4c\x20\xb7\xc6\x11\x29\x39\x19\xfb\xab\xea\x8b\x4b\x3f\x53\xe3\xa7\x2a\x53\x14\x5b\x0b\x6b\x28\x5e\xb6\xee\xd0\x77\x95\x0a\xe3\xc5\x7c\xd3\x63\x3c\x14\x26\x23\x40\x87\x99\x22\xa8\x03\x67\xa1\xde\xfd\x4f\x8d\xee\x9a\x05\x9a\xab\x80\xe2\x1a\xd1\xb1\xf2\x58\x40\xce\x5e\x2b\x1f\xa2\x16\x28\xfc\xf5\x39\x73\xc7\x00\x37\x40\xc2\xd4\xe1\x00\x24\xe0\xf8\x2b\x5f\x81\xf5\x1f\x1c\xe9\x1b\x4c\xf1\x0d\x18\xc3\xc7\x70\xbd\xa3\xa3\x61\x95\x46\x86\xbe\x86\x7a\x63\x10\x15\xb2\xd6\x15\x85\xcd\xb8\xcd\xb6\x18\xc4\x72\x9a\x53\x25\xfc\xdc\x6b\x61\x2d\xe0\xa6\x62\x09\x3b\xf4\x88\xce\x67\xb8\x1f\xce\x45\x7f\xbe\x09\x9d\xd4\x1f\x3b\xa2\x2e\x53\x8a\xc5\x1c\x02\x1b\x6a\x01\x23\x36\x12\x18\xe0\x89\x21\x97\x3d\xaa\x68\xc4\xc9\x0a\x60\x8c\xd3\x77\x95\x0c\xb2\x6c\x98\xd7\x80\xfd\xcd\x4f\xcc\xea\x52\x26\xbc\x51\x2c\x16\x73\x34\xc5\x88\x8d\x31\x64\xd3\x4b\x8b\xbf\x7d\xf1\xc7\xdf\xb3\xe1\xcc\xb1\x34\x94\xac\xac\xb2\x3c\xab\x16\x99\x81\x1c\x3b\x58\xd1\xf1\x6c\x67\x19\x56\x10\xc0\x5b\x81\x68\xe2\x2f\x7f\x7d\x37\x6c\xf3\xd8\x93\x14\xa6\x27\x0d\xf8\xf5\x33\x35\x5e\x76\x8f\xde\x07\x2f\x21\xbe\x04\xcd\xba\xb9\x15\x21\x94\xd6\x62\x13\x75\x4f\xb2\xfe\x12\xec\xa9\x13\x96\x0a\x55\x94\x19\x19\x9d\xbf\xac\xf2\x73\x4b\x03\x8b\x59\x74\x4b\xcf\x05\x9a\x49\x7d\x17\xf3\x85\xc9\x29\x52\x37\x0c\xa9\x7c\xd6\x89\x37\xe4\x55\x15\xb6\x50\x11\xfa\x92\x67\xd9\x90\x27\x77\xb7\xea\xb5\x1a\x9b\xb7\xf2\x95\xd6\x4a\xb7\xe7\x92\x71\x47\x2d\x27\xa5\xbc\xa3\x9b\x60\xaa\x1a\x04\x6a\xec\x5d\xb9\x21\xc5\x61\xd9\x82\x29\x21\x3d\x10\xe1\xc5\x8b\x11\xe0\x41\xd4\xba\x8e\x64\xe0\xc6\x27\x8c\x6c\xf6\x6f\x9a\xc8\xf6\xeb\x17\xbf\xfd\x03\xa1\x2e\x53\x9a\xfd\xe1\x05\x46\x73\x9b\x1e\x1d\x62\xa4\x6d\x8e\x51\xe4\x3c\xcb\x9c\xda\xd0\x44\x4a\x07\xe8\x65\x48\xf8\xc1\x71\xd0\xee\x8f\x6e\x1b\x8b\x52\xb7\xb7\xff\x4d\xf7\x68\x58\x03\xd9\xa8\x47\xf9\x4a\x95\x5a\x73\x88\x8c\xe1\xd0\x53\x1f\x4c\x1a\x7b\x02\x02\xd0\x54\x65\x65\x0e\x17\x30\x15\x5d\x5c\xf6\xd9\xea\x2d\xa8\xfa\x99\x30\x98\x1a\x36\xcc\x54\x72\xc7\x52\xff\xb0\x11\xdf\x32\x5f\x6a\xfb\xf9\xde\xdb\xdc\x5c\x7f\x2b\xb6\x27\xe7\x45\x51\x65\x0f\x69\x7e\xdf\x02\x06\x9e\x49\x4c\xf8\x7f\xfe\xf7\x36\xd3\x8a\x1c\xdd\xdc\xb9\x8b\x9d\x03\x82\xf6\xb7\x51\xd7\xb3\xef\xe8\x76\xce\xba\xc3\x70\x1a\x0a\xfc\x37\xe5\x9b\x2c\xe4\x4b\x56\x29\x77\x15\x62\x90\x00\xe0\xd0\x07\x49\xf2\x47\xbb\x5f\x98\xed\x1d\xd8\xd4\x82\x8b\x5c\x73\xc5\x25\x67\x05\x68\x23\x8c\xe3\xcb\xdf\xe2\x81\xa2\xbb\x4d\x6b\x13\xe0\xc7\x01\x02\x1d\x6e\xac\x4f\xbc\x3f\xa5\xbc\x56\xa9\xef\x10\x49\x21\xd5\x66\x5e\x22\xd6\xb6\xa5\xda\x0e\x19\xea\xc7\x26\x95\xdf\xd6\xd0\x6c\x53\x4a\xf7\x4b\x45\x2a\xe9\xad\x4f\x89\x40\xe2\xfa\x9e\x2b\x7d\xac\x26\xdf\x11\x19\x40\xc2\xe8\x37\xb7\x4d\x09\x5b\xca\x23\x1d\x94\x86\x48\xef\xf5\xc0\x01\x23\x2f\xb8\x3b\x13\xfe\x53\x76\x78\x7a\xf8\x51\x89\x24\x81\x48\xab\x82\x8f\xf7\xba\x2c\x67\x0e\x52\xf3\xdd\x36\x4b\x35\x38\x35\x08\x9f\x57\x75\xcd\xf0\x2d\x48\xeb\x4a\x34\x58\x67\x88\xbc\xa3\x01\xc0\xe1\x6e\x37\x94\x6d\xef\xf9\x8c\x71\xad\x4a\x99\x7a\xfb\x52\x65\xe0\x7b\x33\x37\xf0\x95\x92\x50\x5f\x22\xdc\xbe\x7e\x1b\x2d\xfa\x42\xb2\x97\x83\x97\x2f\x3e\x15\x4e\x85\x2b\x9c\xe3\x54\x57\x15\xa7\x22\xfa\xf4\x51\xd7\x1a\x4a\xca\x77\xb4\xde\x37\xde\xc4\x52\x57\x8c\x17\xa1\x1e\x35\xfe\x74\xaf\x85\x85\xc6\x5d\xa1\x47\xa8\xb8\x38\xfd\xb0\x51\xaf\xe1\x78\xd9\x55\x0d\x7b\x02\x69\xbf\x02\x19\xa6\x1c\xbe\x47\xba\xe5\x09\x14\x1e\xb7\x65\x16\x2e\xb3\x86\x84\x35\x01\x75\x70\xc0\x8e\xe8\xcd\x43\x4a\x75\x3e\xfe\xa8\xa8\xe5\x81\xf6\xea\xa1\xd8\xa3\x88\xe5\x5c\x56\x7d\xc1\xd1\x06\x57\x74\x08\xc1\xff\x82\x09\x9f\x02\xa6\x78\x8b\x8c\xeb\x0c\x7d\x8e\x37\x34\x77\x36\x2c\x2d\x03\x39\x15\x5a\xc9\x1c\xa4\x65\x18\x03\x3f\xcc\xa0\x79\x55\xfe\x2f\x8f\xbe\x3d\x7b\x87\x01\x0d\xc7\xbe\x58\x85\x9f\x65\x69\xc2\x25\x92\xcd\x99\x34\xba\x7b\x74\xfb\xc2\x3c\x1c\x0c\x91\xe6\x86\x79\xb9\x71\xf2\xd2\xd2\x4d\x91\xf0\x90\x64\xa5\x11\xd3\x8f\x45\x49\x7c\xee\xfd\x85\xd8\x69\x9f\xe7\xea\x00\xd4\x80\x5a\x48\xe9\x47\xd3\xfa\x92\x34\xc0\x05\x87\xc9\xa1\xa9\x52\x03\x9b\x3e\x70\x6f\x7a\xf2\x55\x36\x28\x7c\x2e\x94\x34\x5c\x10\x21\xb0\xa2\xcc\xc7\x35\x42\xa5\xd2\x9c\xe3\x0c\xb7\x03\x6b\x3b\x20\xb9\x95\x2d\x78\x71\x75\xd3\x2c\x4f\x42\xea\x92\x4a\x07\xec\xba\xfe\xb1\xae\x61\x83\x15\xc8\x2a\x25\x12\xf4\xb8\xae\xda\x3d\x06\x09\x1a\x85\x04\xd7\x65\xeb\xfe\x65\x36\xe4\x86\x9c\x3c\x17\x57\x37\x64\xb3\xdd\x0e\x66\x3b\x8b\xd9\xbb\x4b\xa8\x98\xd2\x82\x69\x0c\x3b\x08\xb7\xed\x4b\xc9\x2a\x83\x95\x03\x0c\x2a\xa5\xd4\x31\xbb\xbc\x66\x3c\x4d\x35\xba\x7d\xe6\x92\x6f\x9c\x7e\x1e\x7c\x0b\x58\x2f\x86\x1b\x68\xce\xa9\x01\x6e\x24\x71\x35\x60\xd9\x45\x59\x64\x82\xdc\x08\xcd\x0f\xea\x3a\x37\x78\x8b\xd6\xf6\x48\xbb\x8f\x9a\xb7\xb3\x92\xb7\x07\x15\x52\xbb\x96\x75\x5c\xb3\x7b\x1a\x8c\xca\xa6\x75\xc5\xde\xb9\x5d\xf3\x27\x02\x4d\xe2\xd5\xae\x85\x2a\x8e\x1b\xed\x18\x48\xab\x05\x2c\xee\x16\x7b\xe7\x46\x2e\xf1\x34\x55\x1d\x8a\x29\xa0\x7f\xdc\x17\xb0\xa4\x8f\x1a\x35\x84\xc9\x37\x4c\x65\x9c\x81\xeb\x40\xd1\x70\x56\x3b\x9e\x44\xf6\xb1\x10\x61\xde\xd8\x71\x71\x75\x43\x94\x90\x16\x5f\x5d\xff\xba\x6c\x97\x6a\xaa\xb6\x33\x06\x7e\xb4\xfa\x43\xfb\x68\x1e\x73\xb7\xe7\xf9\x6b\xff\xf7\x0a\x64\xd9\x43\xfc\xdb\x2b\xd9\x6e\x8f\xd1\x0d\x70\x9d\x4c\x76\x81\xff\x1a\x42\x40\x9d\xb2\x54\x51\x24\xc0\x48\x69\x54\x89\xfb\x48\xde\x33\xa5\xee\xca\x62\x13\x8a\xee\xbb\xa1\x1b\xcd\x36\x22\x10\xad\x2f\x7e\x56\x34\x3d\x95\x66\x17\x7f\x6f\x5b\xf6\x01\x4b\x12\x0f\xdd\x5e\x5e\x25\x50\xa8\x79\xbd\xe9\x3c\x2b\x8d\x05\xfd\xa5\xd0\x58\xa0\x9a\x2a\x2e\x23\x06\x93\x4d\xe4\xb0\xf9\xc2\xdf\x84\x9d\xf8\xa2\x8e\x87\xbd\xf6\x23\xf7\xb7\xef\xf8\xd0\xe9\xb4\x87\x57\x4a\xc2\xe1\x60\x5e\xec\xaa\x48\x79\x45\xd6\x56\xf2\x14\x3f\x75\x03\x19\xc5\x8b\xe2\x83\x06\xae\xdc\xfa\x7a\x96\x6e\x84\x40\xff\x0c\x58\xc6\xb1\x78\x1c\xbe\x3d\xa9\x0b\x50\x52\x45\x29\x2a\xa0\xa9\xbc\xa0\x37\x6b\x82\xa8\x51\x64\xca\xaa\xd5\xcb\xde\x45\x9e\xdb\x1a\x03\xe8\xb6\x3e\x5f\x95\xe4\xb5\x90\x77\x5b\xa2\x5f\x3b\xba\xe4\xd5\x42\x6f\xad\x8a\xdc\xe4\xa3\x15\x92\x82\xef\x1c\x8b\xe1\x43\x55\xda\x50\xf9\xc4\x34\x14\x47\x21\xff\x41\x7b\x81\xf6\xf6\x82\x6a\xf9\x2d\xd3\x11\x4d\x8f\x8c\x3e\x41\x09\x34\x33\x69\x39\x16\x1d\xbd\x50\xc9\x1d\x68\x96\xb9\x69\x0c\x58\x1d\xf8\xd2\xaa\x73\xa9\x4b\xd8\x32\xea\x62\x57\x4b\x07\x14\x13\xc8\x41\xf3\xac\xd2\xbe\xf6\x01\xf5\x6b\x4f\x38\xab\x5e\x9b\x31\x29\x54\x2e\xcd\x17\x68\x74\xe7\xf0\xd5\xb2\xb7\x72\x3e\x0b\xb5\x62\x85\xc4\x70\x83\x07\x61\xd0\xac\x5f\xa8\xb4\x99\x78\x56\x1a\xd0\xfd\x2a\x2d\xd0\xe7\xde\x98\x2a\x10\x27\x85\x61\x39\x1e\x0b\x39\xf6\xd4\x19\x69\x7a\xa3\x60\x75\xa5\xe9\x60\xa4\x77\xa2\x81\x5b\xca\xd8\x29\x54\x4a\xf1\x65\xa2\xf9\x7e\xae\x52\x7a\x7d\x38\x23\x6d\x30\xec\x6c\x1d\x20\x7d\x29\x99\xd2\xbe\x00\x03\x4f\x53\x9c\xfb\xe2\x0a\xf1\x69\x7b\x55\xbd\x2a\x8e\x83\x22\xbb\xab\xaf\x1a\x60\x31\xe5\xd0\x09\x3b\xa5\xde\xb6\x76\xe8\xae\x84\x7f\x27\xa2\xdf\xae\x2a\x74\x26\xeb\x2d\x3e\x6f\x06\xcc\x71\x66\x21\x2f\x94\xe6\x7a\x36\xef\xc2\x74\x44\xca\xa1\x80\x03\xe0\x1c\xa4\xae\x55\x8a\x74\x7c\xc9\xc6\x4f\xe9\xaa\xdc\x25\x7b\xbf\x14\xc7\x90\x0a\x4a\xc5\x02\x44\x1d\xbd\x36\xc9\x04\xd2\x12\xa3\xc7\xc7\x25\xc7\xab\xbc\xdd\x29\xf6\xc6\xee\x99\x0f\xcb\x23\x64\xa8\x02\xfe\xaa\x34\x81\x19\x06\xc9\x60\x7d\x4e\xf7\x0b\xd6\xf9\xa4\xd0\x40\xba\xc9\x18\x6f\x35\xad\xa2\x04\x6f\xeb\xcb\x15\x70\xb1\x30\x15\x89\x0d\x1f\x8d\x56\x21\x4e\xc2\xab\x0b\x54\xaf\x95\xaf\x0b\x98\x80\x23\x46\xd6\xd4\x4b\xf1\x51\x25\x58\xf9\xf3\x7b\xe9\x98\xc4\x6a\x5c\xac\x11\xef\x11\x94\x43\xb9\xba\xbd\x15\x6b\x8e\x6f\x05\xa5\x25\x6b\xdf\xb6\x24\xd3\x1e\x42\xf9\xee\x1e\xb7\x9d\x3c\x65\xfb\xc8\xff\x5c\x8f\xf7\xd7\x95\xfe\x7f\xf6\xfe\xc7\xb9\x6d\x1b\xeb\x17\xc6\xff\x15\x8c\xb7\x73\x6d\x6d\x25\x39\x69\x77\x77\x76\x73\xfb\xdd\x8e\xd7\x76\x5a\x4f\x13\x47\xd7\x76\xda\xdb\x6f\xd2\xa7\x0f\x44\x42\x12\x1e\x93\x00\x97\x00\x65\x6b\xdf\xbc\xff\xfb\x3b\x38\x07\x00\x41\x4a\x76\x6c\x92\xb1\x65\x97\xdc\x99\x6d\x2c\x51\x20\x78\x00\x9c\xdf\xe7\x73\x76\x0f\xf2\x79\x91\x42\x4a\x9a\xd5\x3c\x4b\x80\x65\xdc\x73\xe0\xd7\x32\x22\xeb\xf0\xed\x51\x58\xc2\x10\xe6\x66\xbb\x02\x10\xa3\x0a\xb5\xf4\x77\xd6\x1d\x9e\x27\xc6\x38\xf3\x5e\xd4\x92\xb7\x5a\x2b\xce\x7a\xf4\xfc\xd3\x9c\x15\xcb\x45\x66\xa4\x31\xe8\x10\x01\xf4\x48\xb4\xa0\x62\x0e\x6e\x70\x59\x98\xf1\xbe\xfa\x0a\x66\x94\xb3\xb8\x88\x6c\xe7\x05\x97\xff\xfc\x95\xf3\xfe\x59\xa0\x20\xe8\x0f\xa7\x22\x9a\xb9\x39\x87\xaf\x85\xa2\xfa\x15\xe1\x63\x36\x26\x3b\x5f\x05\x5f\xed\xe0\xd3\xb3\x5c\x9a\x47\xd8\xd4\x69\x98\x55\xc2\x35\x1c\x84\x9d\xf0\xee\x31\x39\x36\xcf\x80\x88\x88\x27\x60\x90\xdd\x3b\x2d\xc9\x37\x24\x39\x9b\xd3\x3c\x4e\xa0\xe2\x6e\xe6\x95\x12\xac\xcb\xb1\x04\x83\xd3\x07\xf9\x74\x42\xea\x4d\xde\xc9\x3b\x96\x45\x68\xaa\x2e\xd5\x3e\xaa\x32\xa3\x98\x6a\x3a\x82\x6e\x15\xc8\x34\xf6\xd1\xbc\x1e\x59\xfc\xd3\x11\xb5\x7b\x6a\xe4\x97\x75\xff\x4f\xb6\xb2\x6a\x44\xfd\x5d\x5c\x8c\xe8\x08\x90\x48\x9b\xe7\x8a\x3e\x42\x5a\x41\x2b\x4b\xb7\x05\x0c\x6e\x5d\x3d\xf5\x30\xe8\x40\x03\x68\xb6\x51\xc2\x5e\xfb\x0c\x06\x8b\xf4\x5a\x39\xc8\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\xe7\xb9\x3f\xcf\xfd\x79\x6e\x71\x9e\x99\x58\xb6\x3e\xcb\xde\xfe\xd9\x64\x12\xd6\x20\xec\x82\x8a\xea\x67\x94\x9c\x75\x2c\x96\x3f\x53\xa3\xf0\x65\x39\x53\xa0\x8b\x18\xbd\x71\x53\x14\xd5\xde\x80\xfd\xaa\x0e\x9f\x7c\x76\xd6\x23\xe6\x56\x75\x98\xb3\x72\x1a\x00\x01\x6c\x5a\xb5\xb0\x7f\xdc\xe1\xef\x27\x47\xc7\xa7\x17\x27\xaf\x4f\x8e\xcf\x1e\x35\xd9\xa0\x25\xb8\x5b\x55\x1a\x37\x94\x92\x59\xce\x96\x5c\x16\x2a\x59\x79\x14\xda\xcd\x4c\x60\x3d\x5f\x4d\xc4\xd0\x02\xcf\x01\xed\x6e\xfc\x59\x2f\x6c\xbb\x15\xb6\xd5\xdc\x8b\x16\xb8\x1e\x5d\x6d\xdf\xd7\xb9\x4c\x3b\xda\xc2\xe7\x68\xb2\x3b\x97\xf7\xa6\xfd\xb4\x6b\x21\x00\x2a\xa2\xc7\x2a\x8f\x25\xde\x80\xd1\x42\xd3\x4c\xb7\x68\x0b\xd0\x09\x68\x68\x37\xf8\x9a\x98\xa7\xf0\x96\x66\x3f\xb1\xd5\x19\x6b\x09\x1f\x52\x0b\x35\x24\x2c\x32\x82\x8e\x5c\xb2\x15\x46\x20\x0f\xdd\xc3\xda\x81\x60\x6e\x21\xe6\xea\x25\x6b\x83\x87\xdb\x25\x58\xea\x25\x6b\x91\xb8\xe8\xae\x35\x40\x4f\xb3\x84\xa0\xa7\x99\x35\xdd\x2a\x08\xd3\x2f\x00\x0e\xbb\x1b\x8a\x7b\xcb\x67\xf5\xbd\xd1\x15\xe4\xd2\x48\x2e\x76\xb5\x6f\x93\xb6\x46\xc6\x62\x1d\xe1\xae\x55\xfb\x90\x99\xb2\xff\x27\x04\x8e\xbd\x78\x77\xf4\xee\x15\x39\x88\x63\x9b\x3c\x5c\x28\x36\x2b\x12\x4c\x03\x56\x63\x42\x33\xfe\x33\xcb\x15\xf4\x55\xbb\xe4\x22\x1e\x92\x82\xc7\xdf\xb7\x01\x5d\xc2\xab\xc3\x55\x90\x2e\x60\xd3\xed\x4a\x9c\xdb\x78\x5c\x28\xbb\x3c\x13\x21\x58\x19\x08\x7b\xd3\xe1\xaf\x58\x25\xa3\x23\xd2\xb4\x6d\x21\x47\x70\x09\xbb\xe5\xab\xbb\x25\x63\xc5\x3c\x71\x0f\x50\x15\xbf\x22\xaa\x00\xa0\x18\xe5\xfb\xbe\x41\xc7\xd1\x61\xf5\x4f\x95\xd1\x88\x0d\xc9\x7f\xfb\x0f\xa1\xe1\xb9\xfa\xb0\xbb\xfb\xdd\x4f\xc7\xbf\xfe\x73\x77\xf7\xb7\xff\x0e\xbf\x05\x51\x08\x56\x73\xed\x16\x88\xef\x08\x19\xb3\x53\x78\x06\xfc\x69\xd5\xb5\x83\x28\x92\x85\xd0\xf6\x0b\xa8\xea\x1d\x2f\xa4\xd2\x27\x13\xff\x67\x26\xe3\xfa\x5f\xaa\x15\x92\xd8\x56\x0a\x06\x58\xa2\x16\xd5\x29\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\xfe\x18\xd1\x82\xa5\x88\x65\xf4\xda\x91\x00\x7a\xb8\x3a\xf8\x00\x01\x35\xd7\x46\x33\xad\xc2\xca\xed\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\x75\x56\x4a\x19\x8d\x3d\x98\x9c\x90\x25\x52\x78\x6b\x88\xe3\xa2\x60\xaf\xbf\x28\x8f\x0b\x63\x6d\x15\x0b\xf1\x15\x81\x62\x0a\xf7\xbd\xad\xb3\x57\x1e\xfa\x8a\x19\xc3\x66\x0f\x3f\x1c\x47\x59\x31\xb4\x37\x8c\x53\x96\xca\x7c\xe5\xff\xf4\x31\xbe\x91\xd2\x32\xa7\x73\xa8\xcb\xc0\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x54\xe4\x46\x69\x48\x56\x8e\x23\x37\xc4\x8b\x28\xaf\x2d\xe4\x6d\x8e\xf4\x5b\xc2\xda\xfc\xce\x68\xdb\xb0\x15\xaf\xea\x86\x2c\x03\xf5\xa0\x70\x7a\x2a\x82\x3d\x69\xeb\x4e\x87\x5e\x0d\x42\x6f\x80\x58\x1a\xcb\xb2\x31\x72\x56\x79\x75\xc8\xcd\x62\xbe\xe4\x4a\xb6\xa8\x3e\xf1\x03\xdd\x9c\x52\x6f\xa1\x2f\x30\x71\xc8\xbb\xcd\xae\x33\x00\x0b\xf2\xe7\xb5\xc6\xf6\x5f\xb6\xe9\x4a\x84\x57\x46\xb5\x66\xb9\x78\x45\xfe\x6b\xef\xe3\xd7\x9f\x46\x83\xef\xf7\xf6\x3e\xbc\x18\xfd\xe3\xb7\xaf\xf7\x3e\x8e\xe1\x1f\x7f\x1e\x7c\x3f\xf8\xe4\xfe\xf8\x7a\x30\xd8\xdb\xfb\xf0\xd3\xdb\x1f\x2e\x26\xc7\xbf\xf1\xc1\xa7\x0f\xa2\x48\x2f\xf1\xaf\x4f\x7b\x1f\xd8\xf1\x6f\x77\x1c\x64\x30\xf8\xfe\xab\xd6\x53\xef\x00\xbb\x13\xaf\x2e\x11\x3c\xab\x23\x76\xb2\xfd\xbe\x20\x6c\x3d\x5e\x6e\x7b\x75\x7d\xfe\x5d\xf6\xf0\xab\x52\x20\x79\x71\xbd\x35\x07\x5c\xb1\x28\x67\xfa\x21\x3c\x39\xf8\xa4\x00\x41\x60\x57\x11\x6f\x5a\x3c\x37\x39\xf7\x47\x70\xee\xf8\xb6\x76\xb0\xae\xa5\x26\x3a\xcb\x65\xea\xaa\xc2\x21\xbc\xb1\x84\x4c\x60\x7b\xdf\x25\x6b\xd5\x1c\x15\xaf\xde\x19\xd4\x3b\x83\x6e\xb8\x3e\xeb\x0c\x3a\xc7\x7d\xb8\xb5\x9e\x20\x26\x96\x4d\x43\x18\x1b\x23\xe8\xce\xd6\x09\x21\xd4\xee\x16\x50\x1b\xbb\xa3\x5e\xf6\x83\x2c\x53\x68\x50\xa0\xa5\x9b\x63\x98\xe4\x00\x7a\x35\xe3\xc1\x87\x01\xca\xb2\x0b\x34\x6d\x2c\xc2\x1f\x5b\x9a\x29\x78\x88\xe8\x0a\x18\x24\x24\x3a\x42\xea\xe9\x2f\x98\x09\x7a\x89\xc9\xa1\xc6\x48\xe3\xa2\x84\xd1\xf4\xca\x61\x89\xbd\x4c\x95\x92\x11\x26\xb5\xfa\x22\x00\x40\x76\xb3\xd3\x86\xd9\x40\x83\xf8\x2c\x67\x11\x8b\x99\x88\x98\xc5\x65\xae\xf4\xbe\xa4\x82\x1c\x8b\xa5\xc3\xa6\x8e\x5d\x49\x09\xcc\x64\xf3\x18\xcf\x2b\x01\xc1\x6c\x44\x1b\x04\x0b\xf2\x10\x80\xeb\x97\xd9\xac\x90\x8a\x21\x67\xa5\x97\xb5\x59\x7b\xbc\xd6\x52\xbc\xbd\xcc\xf4\x91\xad\x56\xca\xd0\x9a\xb0\x2c\xdd\xcf\x55\x21\xf9\x1c\x82\x81\xed\xc5\xe7\x1f\x4e\x74\x76\x24\x36\xbb\x11\x99\xf7\x88\x9d\x74\x29\x26\xbb\x08\x96\x64\x39\x9b\xf1\xeb\x8e\xce\xe9\x81\x28\x3d\x31\x3c\x66\x42\xf3\x19\xc7\x12\x93\x2c\x67\x19\x13\x58\x25\x40\xa3\x05\xf0\x7e\x2b\x29\xcb\xe0\xf4\x36\x26\xf3\xa0\xc2\xdd\x2d\x2b\x3b\xdf\xa4\xec\xf7\x7c\x8c\xf4\x7c\xac\xf1\xf5\x40\x7c\xcc\xee\xdc\xed\x61\x62\x90\x79\xde\x3e\xe7\xfd\xb0\x8a\xb5\x62\xbb\xd2\xde\x73\xa3\x95\x65\x47\xfb\x30\x4a\x23\x07\x74\xab\xfd\x00\x8f\x9d\x14\x49\xd2\x11\x3e\xf5\xee\x09\x50\x23\x2b\x92\xc4\x96\xe5\x8e\xc9\x3b\x01\x47\xf2\x00\xfa\x20\x0c\xc9\x29\x5b\xb2\x7c\x48\x4e\x66\xa7\x52\x4f\x50\xb7\xad\xa6\xb3\xe1\x8d\x84\xcf\xc8\x2b\x63\x35\x29\x4d\x34\x62\xd1\x07\xc8\x39\x32\xaf\x0c\x50\x82\x72\xb5\x48\x43\xbf\x79\x59\xfe\xe4\x0a\x26\x47\x8f\xb4\x4c\xbe\xd9\x47\x07\xe6\xa9\x1d\xc9\x25\xc8\x41\x52\xa4\x8d\x8e\x6c\xaa\x7a\x7d\x82\x40\x14\x99\x54\xfa\xdc\x58\xb1\xdd\x34\x82\x99\xb8\xe1\xa0\xb7\x02\x4d\x12\x16\x57\x3a\x01\x61\x07\x0b\x5a\xb5\xa2\xa1\x1e\xd7\x37\x54\x60\x64\x41\x45\x9c\xb0\x1c\x40\xd1\x55\x1d\xf9\x89\x97\x5d\x00\x7c\xdf\x06\x57\xa0\x49\xa3\x48\xe6\xb1\xed\xc0\x6a\x0b\x25\x61\x32\xfe\x78\x01\xaf\x4d\xa9\xa0\x73\x06\x9e\x85\x35\x68\x5d\x00\x5c\x56\x41\xf3\x87\x85\x94\x97\x24\x92\x69\x96\xc0\x01\x68\x71\x3e\xca\xde\x33\x7e\x8b\x8e\xcc\xe8\x6a\x3f\x68\x4b\x03\x1f\xb4\xeb\x4a\xd3\x4a\x59\xe9\x42\x55\x61\xd7\x2c\xea\xac\x6f\xdd\xf1\x35\x8b\x82\xc6\x8b\x66\x49\x6c\xe7\x45\x2d\xc1\xb7\xd1\xbe\x9f\x6e\x6b\xb7\x7c\x57\xae\xf0\x16\x55\x66\xe1\x55\x03\x5a\x83\x31\x1d\xae\xb4\x7d\x04\x40\xf4\x63\x55\x31\x54\x9e\x39\xa8\xe9\xca\x61\xc0\xa3\xb7\x86\xce\xe6\x93\x8d\xdd\x58\x50\xfb\x2c\xa5\x26\x7b\xbb\xfb\xbb\x83\x35\x1f\x5d\x0d\x9c\xf8\x22\xf8\x25\x07\x34\xbe\x0c\xa0\xed\x58\xb4\x1b\x0f\x09\xd7\x8e\xd9\x22\x28\x00\xcc\xca\x96\xc3\x41\x87\x7a\x9d\xd3\x98\x5b\x2b\x08\x3e\x35\x37\xe9\xbc\xb0\x88\x00\x7b\xbb\x9f\x76\x87\x84\xe9\x68\x40\xae\xa4\xd8\xd5\x30\x7d\x80\xcf\x28\x54\x30\xd0\x4a\x16\xd0\xa5\x0e\x49\xe0\xb1\x30\x0c\xc7\x22\xb2\xc0\x96\x36\x0b\xaa\x5d\x19\xde\xf1\x35\xd7\xae\x8d\x83\x9c\x91\x17\xd8\x51\x87\x51\xeb\x25\x4c\xf8\x92\xed\x2f\x18\x4d\xf4\x02\x13\x29\x84\x14\x23\x6c\x8a\x66\x58\x89\xfd\xa6\x6d\x4c\xa1\x9d\xcb\x2d\xbc\x5a\xb8\xdf\xd6\x27\xd4\x52\xbb\x36\x4c\xf4\x87\xe6\x9d\x5a\xc9\x5a\x13\xe3\x8b\x8b\xc9\x0f\x95\x5e\xad\xc0\xc5\xb5\xce\x5c\x7a\x4b\x80\x2b\xb1\x05\xbc\xa3\x9b\x80\x5e\xab\xa6\xad\xa4\x43\x16\xd6\xb6\x79\x2b\x59\x6f\x4a\x7d\xbf\xae\xad\xe4\x57\x59\x40\xb7\x39\x3a\x4d\x56\xe4\x8a\x0a\xed\x4a\xf1\x76\xcc\x50\x3b\x86\x3d\x99\xdd\xf0\x23\xa3\x31\xcb\x15\x70\x0f\x46\x1b\xe3\x67\xb9\xab\xb3\x40\x53\x30\xb7\x6e\xe5\x40\xa1\xb4\x4c\xc9\xc2\xbe\x76\xb5\x3c\xd1\x9e\x8c\x31\x9c\x1e\x57\xfb\x93\xb3\x0c\x39\x9c\xfd\xcd\xb3\xe3\x5f\x6b\x7c\x03\xe9\x5e\xc1\x99\x8f\x42\xb2\x85\xdd\x48\xb8\x40\x62\x61\x1f\xc1\x8e\x78\x69\x07\x09\x02\xa4\xc3\x24\x01\xd2\xae\xd8\xb1\x3e\x10\x04\xbe\xda\xe7\x43\x75\x96\x77\x40\x3a\x8b\xad\x93\x4d\x8e\x48\xbb\x67\x30\x0b\x16\x7d\x1e\x15\xe8\xb8\x88\x0a\x29\x78\x44\x13\xfe\x1f\x16\x63\x57\x5c\xcc\x31\x03\x3d\x27\xa2\x8a\x8d\x20\xf0\x29\x90\xff\x05\x6d\x5e\x85\x39\x8e\x5a\x4a\x50\x3e\x20\xd4\x65\xf8\x23\x3e\xaf\x7d\xe6\x02\xe9\x36\x6e\x4e\xda\x17\x6d\x86\xd7\xed\x64\xee\x66\x8b\x91\x2e\x29\x90\x75\x90\x64\xbd\x9e\x62\xbd\xd6\xb3\x1b\x98\x11\xa2\xc2\x6e\x8d\x2c\x6b\xdb\xc0\x9c\x6c\xae\x58\xce\x89\xf0\xfd\x66\x9f\x46\x13\x73\xd2\x5d\x32\x64\xd7\xa9\x90\x9d\x26\x42\x7e\xd1\x34\x48\x28\xbe\x68\xcd\x45\xaa\x5e\x78\x18\xd2\xec\x00\x63\x1d\x1a\xbb\xd6\x6a\x98\xd6\x87\xe4\x7a\x62\x54\x9d\xae\xe6\xa8\x6d\xc5\x19\xd3\x51\x76\x2e\xa3\xcb\x0e\xad\xa7\x23\x96\xe5\x2c\x42\x6f\xdc\xc5\xe1\x04\x47\x37\x56\xec\xe9\xbb\x8b\x32\xe9\x1f\x32\x63\x4a\xf7\xe8\x8f\xd6\x5f\x67\x2c\xdf\x4b\x96\x69\xef\x20\x98\xd2\xe8\xf2\x8a\xe6\x31\xf8\xcf\xa8\xe6\x53\x9e\x70\xbd\x02\x17\x40\xce\xa0\xa2\x40\x48\x4c\xbd\x43\x28\x46\xe9\x1a\xaa\xfa\x6e\xdf\xde\x53\x06\x7e\x38\x2b\x02\x67\x94\x1b\xab\xdf\x77\xcd\xc5\xdc\x9c\x28\xf3\x8e\xc3\xd0\xff\xdd\x9b\x78\xee\xda\x5a\x13\x2f\xe8\x08\x7b\x5f\x6b\xaf\x6d\x86\xe0\x16\x8b\x3a\x2b\xe2\x72\xdf\xf0\xac\x17\x75\x1d\x8d\xb7\xbd\xa2\x2e\xcb\xd9\xb9\x96\x59\x47\xb1\x18\x1c\xec\x86\x48\xcc\x94\xcd\xa4\x61\xc2\x37\x86\x56\xe2\x82\x59\x50\xce\x83\xc9\x89\xf7\x9d\xc9\x4a\xf8\x04\x73\x23\x1d\x12\x67\xc2\x97\x4c\x30\xa5\xf6\x21\xe8\x52\x64\xb6\xe9\xbf\xed\x6d\x3b\x34\x6f\xc7\x52\x98\xdd\xb0\xac\x37\xb0\x9d\x75\xe1\x43\xa6\x23\xf4\x0f\x07\x8c\x1c\x9a\x76\xd9\xe9\xd7\x83\x35\x51\x4e\xd5\x02\xbb\xce\xb2\x6b\xae\x6d\xe7\xe4\x09\x22\xf5\x86\xcd\x6f\xe7\x39\x8d\x18\xc9\x58\xce\xa5\x11\x46\x85\xd0\xb1\xbc\x12\x64\xca\xe6\x5c\x28\x47\x0a\xc0\xda\xb4\x34\x83\xa8\x0f\x57\x1e\x98\x6d\x4c\xce\x2a\xb0\x23\xb6\x20\x28\x92\xe5\xd1\xb4\x73\xae\xc7\xab\x40\x62\x01\x9d\xb0\x87\x8b\xa7\x70\xd8\xd6\xe6\x73\x53\xde\x2b\x04\x3c\x39\x66\x09\x5d\x61\xde\x27\x74\xa4\xe6\xff\x61\xb9\x1a\x74\x10\xd7\xc2\xc6\x4c\xee\xbb\x1b\xe7\x01\x20\xa7\x34\x5a\xb4\x0b\x14\xf7\x81\xb0\x3b\x5e\x7d\x20\xac\xcd\x20\x7d\x20\xac\x0f\x84\x7d\xe6\xea\x03\x61\x7d\x20\xac\x76\x6d\xad\x95\xd4\x07\xc2\x1a\x5f\x7d\x20\xec\xf6\xab\x0f\x84\xdd\xe1\xea\x03\x61\x77\xbc\xfa\x40\xd8\xcd\x57\x1f\x08\x6b\x37\x99\x3e\x10\xd6\x07\xc2\xec\xf5\xc7\xf3\x0e\xba\xab\x0f\x84\xad\x0d\xd2\x07\xc2\xfa\x40\xd8\x9d\xaf\xad\x35\xf1\xfa\x40\x18\x5e\x7d\x20\xac\x7a\xfd\xb1\x44\x9d\x0b\x23\x4d\x8c\x41\xd9\xbe\xa9\x30\x98\xa5\x96\xc7\x3e\xcb\x12\xae\x36\x51\x86\x87\x89\x30\x6c\x49\x38\xa6\x83\xa8\x42\x1f\x51\x78\x76\x11\x85\x6e\xbc\x71\x1d\x78\xe2\x5a\xf3\x64\x1b\x68\xbf\x58\xe4\x4c\x2d\x64\xd2\x78\xa3\x57\x36\xf9\x5b\x2e\x78\x5a\xa4\x66\xcf\x29\xb3\x9f\xf9\xd2\x47\xf4\x55\xd9\x69\x19\x02\xfd\xe8\x14\x34\x37\xf2\x98\x01\x8a\x28\xe5\x89\x59\x46\x28\xfa\x5c\xd0\xa5\xd9\xeb\xaa\x88\x22\xc6\xa0\x47\x59\x68\x4a\x7c\x3b\xf6\x4f\xf2\x3d\x29\x5e\xb6\xe3\x37\xed\xa4\x25\xe2\x7c\xc2\x28\xdf\x7e\xd3\x68\x8c\x79\x9e\x75\xc3\x97\x7f\x38\x9b\x1c\x06\x7c\x99\x0a\xc7\x96\xb9\x58\xca\x64\x89\x9d\x6c\xe1\x26\xa3\x15\x3d\x22\x93\x6e\xaf\xdf\xb7\xd2\xed\xbb\x90\x11\x6d\xd5\xd7\xaa\xee\x61\x94\xd4\xaa\x8b\x66\x0e\x6b\x89\x70\xf2\x77\x56\x52\x5b\x73\xb7\xf6\x8a\x63\xfb\xe3\x40\x00\xef\x05\x5e\xbc\x33\x02\xef\xd8\x3e\xdf\x4e\x04\x87\x16\x82\x6b\xb1\xa4\x25\xc9\x12\x5a\x36\x49\x82\x15\xf8\x11\xe4\xc6\xe1\x82\x45\x97\x67\x36\x18\xba\xa7\x18\xf3\x99\x2c\x73\xae\x17\xc5\x74\x1c\xc9\x74\xdf\x1c\x63\xfc\xbf\x69\x22\xa7\xfb\x29\x55\x9a\xe5\xfb\xb1\x8c\xac\x58\x1a\x45\x66\x14\x2e\xe6\xe3\x34\x1e\x40\x1b\xde\x93\x6a\x53\xc6\x00\x8a\xc1\x3c\xdf\x1a\x70\x64\xca\x0c\x47\x94\x60\xa4\x07\x78\x6e\x66\x7a\xf7\x6e\x9c\x1b\x5e\xad\xc5\x48\xcb\x40\xf4\xc3\x07\xa1\x7b\xce\x45\x3a\xf0\x46\x3c\xb5\x60\x73\x67\x49\x17\x1d\x04\x99\xb7\x28\xc0\xbc\x35\xea\xec\xb6\x04\x95\xb7\x10\x7a\xb9\x83\x40\x72\x17\x41\xe4\xee\x02\xc8\x5f\x00\xa1\xf8\x29\x07\x8e\x3b\xf4\xae\x75\x14\x30\x7e\x88\x60\x71\x27\x6f\xdd\x36\x48\xfc\x70\x01\xe2\x6e\x5e\xb7\x4b\x73\xe3\xa9\x06\x85\x3b\xf0\x92\x77\xe9\x21\xef\xcc\x3b\xfe\xc5\x82\xc0\xed\x03\xc0\x5b\x10\xfc\x6d\x4d\x64\x2e\xb8\xe6\x34\x39\x62\x09\x5d\x9d\xb3\x48\x8a\xb8\xb1\x1c\xab\x01\x63\xfa\xf3\xa3\x70\x58\xeb\xc1\xaa\x56\x54\x2c\xa8\xc5\xff\x36\x76\x1b\x56\x90\xb8\xc8\x85\x55\x5b\x20\xe8\x80\xb3\x6c\x02\xad\x77\x25\xf3\xcb\x44\xd2\x58\xed\x67\x12\xff\xaf\xac\x97\x08\x0a\x25\xf0\x59\xed\x2a\x25\x1e\xdb\x55\x86\xe5\x25\x5d\x2e\xe2\x8f\xf2\x8a\xc8\x99\x66\x82\xec\x71\xe1\xd6\x71\x10\x18\x9b\xa5\xdf\xd2\x6f\x6b\xf3\xed\xcb\x17\xee\xe6\xe7\xe7\x90\x04\xd7\xab\x52\x5f\xde\x3f\x6c\x1f\xf4\x79\x07\xb1\xbd\x71\x56\x24\x55\x27\x31\x3a\x8e\xab\xfc\xe6\x65\x89\x60\xfc\x12\xc6\xf5\xa7\x8d\x8a\x98\xd8\x92\xb3\xe7\xb7\x68\xad\x53\x5b\xaa\xaa\x9f\x4f\x65\xf9\x9c\x3f\xf9\xe2\x70\xd2\xbb\x93\xb7\xcb\x29\xf3\x48\xe9\x21\x5b\xa8\xe8\x3e\xd1\x94\x90\x5e\xd1\xbd\xc7\x15\x14\xa1\xfe\x90\xd3\x88\x4d\x3a\xd7\x11\xdc\x71\x22\x71\x91\x53\xcb\x00\xbd\xca\xe7\x0e\x8f\x60\x2c\xc6\xd3\xe4\x0b\x77\xa1\x24\x76\x56\x24\xc9\x0a\x7d\x0e\x95\x32\x67\x8c\xc2\xd7\xab\x66\xc1\xf1\xbf\xe1\x29\xa5\x62\x99\xe5\xd2\xca\xcc\xbc\x10\xc2\xf0\xe0\xb2\x0d\x19\x28\x92\x80\xdd\x4c\x2b\xb5\xb9\x8a\xcf\xcd\xf4\x8d\xfc\x83\xb2\xdd\x32\x07\xb0\x32\xa0\xf9\xf5\x4c\xe6\x11\x9f\x26\x2b\xb2\xa0\x89\xef\x39\x43\xc9\x25\x4f\x12\x3b\xcc\x98\x9c\x33\x8d\x81\x0b\x94\x9d\x89\x14\x73\x98\x1c\x15\xae\xd7\x21\x8b\xcc\x6f\xa3\x84\x51\x51\x64\xf8\x3c\x23\x89\x57\xb2\xc8\xdd\xf3\xc6\x3e\xfc\xe1\x25\xb0\xe0\xc9\x30\xe8\xa8\x76\xeb\xc2\x96\x2e\x1a\x65\x14\x80\x77\x0e\xab\x7a\x18\x8e\x29\x97\x2c\xcf\x79\x6c\xa3\x09\xf8\x59\x96\xcb\x25\x8f\x31\x86\xe2\xc8\x06\xbd\x9b\xb1\x67\x8e\x3f\xcf\x42\x8a\x91\x60\x73\x0a\x8a\x8a\x3d\x45\xb8\x66\x38\x0e\xe6\x16\x88\x18\xba\xe8\x18\x0d\x5f\x66\x95\xba\xf9\x25\xc7\xfe\xbf\x01\xe5\xc8\x9e\x90\x44\x42\x4a\x68\x21\xb8\xc6\x9e\xf2\x8b\x42\x93\x58\x5e\x89\x81\xf5\x59\x71\x45\x28\x99\x32\x4d\x83\xa4\x4e\x2b\xe0\x14\x61\x82\x4e\x13\xb3\xe6\x90\xad\x74\xb1\x91\x40\x64\xc6\xa8\x2e\x72\x46\xe6\x54\xb3\x8d\x7a\x0e\xbe\xef\xed\xe4\xe5\xca\x3a\x58\x67\xa4\x10\x8a\xb5\x14\xef\x9d\x29\x47\x7f\xfb\x4b\x33\x1e\xc1\x53\x26\x0b\xfd\x20\xd6\xdf\xd5\x82\x47\x8b\x50\x99\xe5\x29\x53\x44\x16\x35\xb3\xf8\xa5\xfd\xd9\xe6\x15\xea\x4d\xc0\x4d\x57\x53\xf7\xf1\x06\xef\x97\x6d\xcb\xba\x9e\xd9\x17\xb4\x9d\x86\xa4\xed\xa3\xd3\xf3\xdf\xdf\x1c\xfc\xeb\xf8\x8d\x3d\x9f\x22\x14\xfa\x85\xe0\xff\x2e\x18\xa1\xa9\x34\xba\x70\x12\x26\x08\x0e\xc1\xa2\x0f\x3e\x80\x93\xdc\x6d\x2a\x61\x43\x81\x0c\x3d\xf2\xdb\x27\x4c\x42\xa7\xfd\x2f\x9f\x2f\xf9\xd8\xbd\xc3\x7c\x57\x0a\xc8\xd2\x08\x7a\x87\x51\x22\x98\x36\x27\x0f\x35\x4a\xec\x25\xc7\xc5\x3c\x09\x95\xc9\x66\xec\xaa\xad\x4d\xd4\xd6\x22\x1a\x95\x6f\x30\x69\x6a\x18\x75\xd2\xc3\xac\x9c\x43\x47\x9d\x7f\x4a\xae\xed\xcc\x00\x6c\xcd\xec\xcc\x00\x54\x3d\x4e\x26\x84\xc6\x71\x0e\x6a\x0a\x9c\xfa\xb4\xd6\x01\x34\x2b\x33\x76\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\x2c\xf8\x5b\xdb\x3e\x49\x6d\x15\xf6\x2e\x12\x70\x8c\x35\x7a\x32\xe9\x88\xe2\xbf\x2c\xa8\x86\x11\x0d\x55\xb5\x24\x53\x6e\xd5\x50\x76\xad\x59\x6e\xd4\x22\xbb\x12\x8f\xda\x61\xca\x4c\xf0\x01\xb7\x19\xba\xc9\x4f\x66\xd5\xa4\x9f\xfb\x6d\x34\xf3\x73\x63\xdf\x9f\x5a\x2e\x54\xed\xe6\x52\x8e\x96\x52\x1d\x2d\xaa\x6c\xcc\x28\x18\xaa\x22\x9c\x62\x09\x6c\x1c\x13\x72\x17\xbc\x45\x6a\xc1\xf6\x6c\xe3\x76\xd1\xe6\xca\x7a\xde\xb6\x52\x35\xc3\x1f\xe4\xbc\x55\x0c\x02\xe8\xa6\x4c\xc6\x63\x72\x4c\xa3\x05\x4c\x2b\x0e\x64\x86\xb1\x40\x60\xb0\x05\x5d\x9a\x85\xb7\xbf\xc5\x38\x36\x68\x2b\xde\x3b\x0a\x7b\xc9\x9c\xa7\x88\x0a\x6c\x41\x3a\x63\x79\x8e\x39\xd4\xd3\x95\x4b\x65\x6b\xbd\x78\xad\x4e\x52\x96\x4b\x2d\x23\xd9\xa2\x09\x56\xbd\x2e\x03\x86\x03\x22\x64\xb8\x77\x2d\xe5\xdf\x1f\x4d\x86\xe4\xe2\x70\x02\xad\x8b\xce\x0f\x2f\x26\x55\x0d\x7b\xe7\xe2\x70\xb2\xf3\xa8\xa4\x20\xce\xcd\x06\x0e\xd5\x06\x83\x54\x1c\x26\x09\x57\x7a\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\xef\x0b\x80\xee\x7e\xf5\x05\x40\x77\xbc\xfa\x02\xa0\xbe\x00\x68\xfd\xda\x9a\x8c\xc9\xbe\x00\xe8\x79\x85\x6e\xfb\x02\xa0\xfb\x5f\x8f\x1e\xb1\xed\x0b\x80\x36\x5f\x7d\x01\x50\x5f\x00\x74\xb7\xab\x2f\x00\xba\xff\xb5\x75\xb9\x26\x7d\x01\xd0\xbd\xae\xbe\x00\x68\xfd\xea\x0b\x80\x6e\xb8\xfa\x02\xa0\x1b\xae\xbe\x00\x68\xfd\xea\x0b\x80\xee\x77\xf5\x05\x40\x7d\x01\xd0\xb3\xce\x8b\x24\x7d\x01\x90\xbd\xfa\x02\xa0\x67\x91\xfd\x45\xfa\x02\xa0\x3b\x5d\x7d\x01\x50\x5f\x00\xd4\xe4\xea\x0b\x80\x9e\x8b\x53\xa6\x2f\x00\xea\x0b\x80\xfe\x38\x8a\x6e\x5f\x00\xd4\x17\x00\xf5\x05\x40\x7d\x01\xd0\xad\xb3\xe8\x0b\x80\x9e\x83\x09\x98\x33\xc5\xff\xc3\x26\x32\xe1\xd1\xaa\x75\xc2\xdf\x99\x6d\x2d\xab\xec\xb0\x24\x83\x71\x83\xd4\xaa\x16\x45\x1c\x5b\x56\xbb\x72\x16\x10\x2e\xac\x61\xf1\xed\x75\xbf\x00\x09\xb6\xa2\x8e\xc5\xbd\xe0\x69\xf3\x48\x0a\x0c\x62\xac\x46\x24\x5f\x33\xbf\x45\x6b\x13\x21\x7c\x91\x8e\x52\xab\x77\xc3\x52\x38\xbf\x13\xb4\xf4\x1c\x8c\xdf\xb8\x41\x68\x96\x25\x9c\xa9\x31\x39\xf7\x2d\x4e\x80\x7b\xa9\x57\x24\xca\x8a\x21\x49\x59\x2a\xf3\x55\x0b\x6b\xa2\x03\x85\xb3\xb2\x6a\x1d\x91\xec\x0c\xc7\x74\x64\x30\x46\x44\x96\x25\x2b\x54\xa6\xca\xca\x41\x4f\x35\xee\x98\x4b\x0c\xea\x4e\x2d\xcb\x83\xeb\x8a\x19\x76\x2a\xf5\x99\xdd\xf0\x8f\x96\xb6\x7e\x53\x82\x36\xd5\x32\xe5\x51\x13\x86\x8d\x3c\xb6\x43\x6e\x7d\xe7\x0c\x6d\x72\xbc\xe1\x53\x70\x5d\xab\xcc\x0c\x92\x97\x43\x26\x39\xa3\xf1\x0a\x86\x84\x66\x3e\x81\x55\xfc\x04\x13\xbd\xa3\x84\xf2\xe6\x51\xf9\x6a\xe2\xd4\x21\x8c\x45\xcc\x56\x28\x53\xa7\x20\x03\xd7\x93\x6f\xe8\xd3\x92\x38\x1e\x82\xb1\xfb\x0a\x7f\x3c\xc4\x3c\x5e\x43\x72\x50\x29\x41\xf1\xe6\x2a\xb4\xb8\x3f\x8a\x52\xf9\x15\x84\x26\xd9\xe2\x76\xf5\xd7\x4c\xe4\x68\x25\x68\xca\x23\xb7\x31\x0e\x70\xed\x8c\xb9\x53\x55\x80\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x4a\x23\x05\x74\xba\x87\xfc\x0b\x1b\xd6\x70\x9b\xa8\x69\x86\x55\xfb\xf4\x8a\x96\xa9\x15\x1b\x4f\x0f\x2c\x08\x96\x0d\x31\x61\x76\xbe\x14\x8c\x30\xa1\xf3\x95\x59\xbb\x89\x8c\xcf\xcd\xf2\x55\xee\x6e\x5d\x4d\xd4\x32\xa3\xa2\x8b\x6c\x8a\x96\x99\x14\xdd\xe4\x3f\xb4\xcf\x7d\x58\x0f\xe2\x06\x05\x7e\x61\x5a\x63\x65\x55\x0d\x0f\xdb\x70\x2a\x9d\xe0\x9f\xc8\xd8\x88\xaf\x9c\x85\xad\xc4\xac\xf5\x07\x07\x24\xa5\x97\x60\x40\x53\x5d\xca\x35\xba\xa4\x3c\x31\x47\xa8\x2c\x0f\x68\xa9\x2b\xba\xab\x03\xc1\xdf\x75\xd5\x14\x69\xbb\x83\xba\xac\x7a\x22\xd0\xf9\x28\xe5\xcd\x2a\xf8\xc9\x9a\x0e\xf8\x06\xc6\x0a\x92\xad\xcc\x9e\x48\xe9\x35\x58\xa4\x34\x95\x85\xd0\x66\xa7\x44\x32\xcd\x0a\x5d\x95\x99\x20\x7e\xef\x6d\xaa\x46\x52\xcc\xf8\xdc\xba\xb8\xf6\x53\x2a\xe8\x9c\x8d\xfc\xb0\xa3\x92\xf5\xee\xb7\xb3\x53\x5b\xb1\x1d\x1a\xbb\x02\x97\x49\x17\xb9\xe2\x54\x6b\x96\x8b\x57\xe4\xbf\xf6\x3e\x7e\xfd\x69\x34\xf8\x7e\x6f\xef\xc3\x8b\xd1\x3f\x7e\xfb\x7a\xef\xe3\x18\xfe\xf1\xe7\xc1\xf7\x83\x4f\xee\x8f\xaf\x07\x83\xbd\xbd\x0f\x3f\xbd\xfd\xe1\x62\x72\xfc\x1b\x1f\x7c\xfa\x20\x8a\xf4\x12\xff\xfa\xb4\xf7\x81\x1d\xff\x76\xc7\x41\x06\x83\xef\xbf\x6a\x3c\xe5\xd6\x1e\xe8\xee\xfc\xcf\x1d\x79\x9f\xbf\x88\xef\xd9\x66\x69\x76\x74\x16\x6d\x86\xf9\xda\x69\xb4\xfe\xa1\xdb\x4e\xa3\x93\x92\x60\x66\xf8\x71\xb8\x22\x32\xe5\x5a\x5b\x2d\x99\x86\x75\x65\x35\xe3\xc3\xf2\x01\x3e\x43\x4e\xcf\x55\x58\x93\x15\xd8\x2c\xd2\x39\x5a\xc1\xf8\x11\x84\xa7\x59\xc2\x52\x26\x34\x9c\xe7\x91\xd3\x04\xc1\x1a\x1c\x97\x33\x89\xa8\x30\x3a\x3b\xbb\x8e\x18\x8b\xed\xc3\x7a\xd6\xf1\xf9\xab\x67\x1d\xcf\x91\x75\xb4\x76\x4d\xdc\xe6\x94\x58\x73\xde\x99\x93\x8a\x87\xc5\x79\x7a\xe0\x76\x5f\x57\x22\x67\x84\xd1\x68\x11\xfc\xc0\xe2\x16\x50\x44\x2d\x40\x04\x14\xba\x5a\x33\x93\x6a\x08\x47\x98\xdc\x6f\x4f\xba\x72\x31\x22\x54\x28\xa5\xd8\x0e\xec\x23\xc5\xa2\x22\xe7\x7a\x75\x28\x85\x66\xd7\x8d\x22\xcd\x37\x85\xda\xcf\xab\x43\x5b\xa3\xd8\x66\x0d\xdb\xef\x88\xcc\xb0\x46\xf6\x46\xf4\xa9\x85\x2c\x92\x18\xb0\x1d\x0a\x01\xeb\x80\x30\x21\x4c\x63\x64\x0c\xa8\x09\xba\x7b\xfd\x71\x2e\xd6\x85\x43\xff\xbb\xe0\x4b\x9a\x30\xa1\x83\x5f\x4c\x20\xba\x13\xfe\xa8\x91\x83\xee\x91\x9d\x1b\xa0\x77\x4e\x72\xbe\xe4\x09\x9b\xb3\x63\x15\xd1\x04\xe4\x41\x37\x22\xf8\xe0\x86\xd1\x61\x89\x72\x99\x28\x63\x2b\x19\x11\x68\x0e\x07\x06\x32\xc1\x83\x30\xa7\x5c\x90\xd4\x88\xb3\xcc\xfd\x58\x61\x44\xd4\x48\xd5\x8c\xe6\x66\x29\x7c\xe4\x13\x4e\xd4\x54\xca\xc4\x56\x74\x27\xab\x72\x7c\x8e\x66\x99\x90\xbf\x0b\x76\xf5\xbb\x19\x4d\x91\x59\x42\xe7\x3e\xe0\x69\x4e\x56\x3d\x67\xa1\x1c\xfa\xc6\x17\x80\x72\xe9\x82\x11\x9a\x5c\xd1\x95\x2a\xc3\xbf\xe5\x18\x5c\xbd\x22\x2f\x07\xb0\xf1\xa8\x22\x7e\x8c\x98\x7c\x33\x80\x24\xc6\xc3\x83\xc9\xef\xe7\xbf\x9e\xff\x7e\x70\xf4\xf6\xe4\x94\x9c\x4a\xcd\x50\x57\x08\x8e\xb9\x3d\xfc\x76\x96\xde\x2b\x3a\x96\x6a\x0c\xb6\x29\xe4\xe4\x8b\x58\x5e\xa9\xc6\xbe\x61\xdc\x7e\x86\x78\x8c\x8a\x66\xee\x31\x9a\x51\xe8\xac\xdd\x42\x32\xaf\xe5\xc9\x87\x83\x82\x6a\x14\xc7\xfb\x71\x2e\x33\x24\x82\x0b\xd5\x87\xcc\xf2\xa8\x96\x81\xe3\xea\xfd\x60\x7d\x67\xd5\x01\xe7\x39\x15\xba\x8c\x59\x97\x6b\x66\x5b\x7a\x8f\x5b\x2f\xc7\xe3\x29\x4c\x5d\x78\x57\x68\xdc\x1d\x5a\xc3\x41\x1c\xb3\xb8\x42\xfe\xd6\x39\x51\xdb\x56\x65\x75\xe8\x5e\x2e\x08\x06\x92\xc9\xbb\xf3\x93\xff\x5b\xdb\xc7\xab\xac\x5d\xb9\x47\x37\x20\x3a\xb9\xcc\x3a\x5b\xdd\x33\x96\xca\x65\xbf\xbe\xdb\xb2\xbe\x5e\x5a\x76\x93\x64\x7c\x56\x88\x50\xa0\x89\x60\x7c\x92\xca\x98\x8d\xc9\xc4\x67\x3b\x55\xbf\x0d\x81\x3a\x73\x46\xcc\x2d\x42\x73\x9a\x24\xab\x50\x99\xd2\x12\x51\x56\x2a\x30\x6e\x21\x23\x9f\xd1\x44\x3d\x36\x37\x6e\x23\x1b\x8d\x1e\xf1\x56\x16\xa2\x9b\x2c\x62\x3f\x1a\x89\x99\x90\xda\x2a\xc3\x66\x96\x00\x8d\x97\xcb\x88\xa0\x4f\x23\x28\x29\xa9\xc8\x37\x85\x19\x57\x4e\x34\x72\xe5\x88\x3d\xf1\x23\x63\xb0\xba\x50\x4c\x6d\x16\x8d\xa5\x97\xc3\x8c\x9e\x33\x1a\x83\x19\x93\x51\xbd\xc0\x8c\xf0\x94\xaa\x4b\x16\xe3\x07\x56\x35\xf3\x01\x27\x70\x90\xbb\x47\x5d\x98\x79\xbb\xd8\x12\xa8\x64\x98\xa7\x0e\x51\x29\x16\x3f\xf2\xaa\xb7\x38\x84\x86\x28\xef\x44\xb2\x3a\x93\x52\xbf\xf6\x30\x41\x9d\xec\x80\x5f\xac\xb6\x5c\x0d\xf8\x81\x3a\x49\xe1\xb9\x23\x58\x0d\x38\x54\x21\x42\xd1\x51\xb9\xe2\x4f\xfd\x48\xe5\x85\x38\x50\x3f\xe4\xb2\x68\x2c\xc4\xd6\x94\xcd\x1f\x4e\x8e\x80\x15\x15\x36\xe1\x52\xe8\x7c\x95\x49\x8e\xce\xc1\x1b\x0c\x83\xf7\x36\x65\x34\x3c\x13\x65\x76\x1f\x79\x4b\x57\x84\x26\x4a\x3a\x5a\xda\x70\x60\xcd\x5e\x24\xd6\x18\x35\x5f\x4f\xa5\x5e\xac\x59\xa1\xe6\x40\xad\xff\x6e\x18\xe4\x5f\x96\x59\x12\x5c\xac\xfd\x5c\x43\xac\x29\xcb\x59\xc4\x62\x26\xa2\xc7\x5e\xf6\xc7\x4e\x5b\x84\xad\x73\x2a\x85\x39\x98\x9d\x6c\x9e\x13\x9f\xaf\x6a\x49\x1a\x6e\x15\x08\x26\x5a\xeb\x8f\x42\xfe\x2b\x1c\xcb\x42\xb1\x1c\x93\x75\xf3\x82\xe1\x4a\xfe\x54\x4c\x59\x62\x28\x6f\x4c\x52\x00\x2a\xa5\x1a\x1d\x0f\x3c\xa5\x73\x46\xa8\xf6\x3b\x4d\x4b\xc2\x84\x2a\x72\xbb\x88\x5c\x93\x58\xb2\x12\x5d\x8c\x2a\xf2\xfe\xe4\x88\xbc\x20\x7b\xe6\x59\x03\xd8\x3f\x33\xca\x13\x48\x8d\x05\x37\x55\xcd\x46\x9d\xb9\x21\x60\x4a\xb0\x79\x89\xcc\x91\x49\x0c\x89\x90\x44\x15\xd1\xc2\xcd\xc9\xd8\xbd\xce\x6c\xb6\xe5\x5c\x10\xb1\xda\xce\xbd\xfe\xb8\x1c\xea\xbd\x62\x79\x67\x0c\xea\x7d\x03\x06\x15\xaa\x51\x66\xcf\x55\xa9\x87\x1b\x2b\x65\x9a\xc6\x54\x53\xcb\xb8\xdc\x0d\x5b\xbb\xa4\x7f\x6c\xf6\xa5\xd8\x1b\x2e\x8a\x6b\x74\x91\x76\xe7\x6a\x39\x3f\x86\x61\x61\x0f\x01\xd5\x61\xd5\x31\x25\xd1\x67\x6e\x05\xc9\x45\x27\x95\xbd\x32\xbc\x41\x4d\x04\x3e\xe1\x12\xc0\x8c\x72\x42\x45\x2c\xd3\xb5\x87\x41\xb6\x59\xc5\x5b\x3e\x26\xfd\xee\xab\x5e\x5b\xe2\x14\x4a\xd8\x92\xb5\x80\x21\xae\xed\xbc\x37\x66\x34\x43\x1c\xb7\x23\x60\x78\x92\xd0\x29\x4b\x6c\x82\x1b\x26\xc5\xae\xef\xc0\xc7\xae\xa9\xcb\x65\xd2\x1d\x08\xc0\x99\x4c\x18\x16\xa9\x38\x42\x98\xe1\x9f\x04\x1d\x60\x90\xae\xe8\x00\xd6\x60\x85\x0e\x60\xd7\x3e\x05\x3a\x14\x2d\x44\x3d\xa9\xd3\xc1\xe8\x0d\x55\x3a\x80\xf0\xde\x76\x3a\x28\x16\x45\x32\xcd\x26\xb9\x34\x66\x67\x67\xb2\xc9\x0e\x5b\xc6\xf9\xd0\xb1\xb1\x21\xe5\x15\x64\x41\xf5\x66\x9a\x07\xe5\x69\x54\xa3\x90\x70\x35\x6a\xff\x2b\x90\x59\xc0\x7a\xea\x82\xcc\x8d\x52\x09\x04\x9a\x5f\xda\x2f\x9e\xb2\x38\xe8\xa2\xc2\xbb\x85\xb3\xb3\x13\x69\x24\x23\x9a\x40\x9b\x89\x76\x5b\x8e\xd4\xb7\x5d\x7d\xe0\xa0\x28\x11\x62\x94\xf0\x59\x90\xa1\x4d\xc1\xd1\xe2\x5c\x98\x42\xc6\x2c\x88\x3a\x63\xd6\xe7\x05\x16\xaf\xc1\x7d\xae\x1e\xd2\xe8\x15\x36\xff\x86\xc5\x95\x5f\x6b\x69\x11\x9e\xdf\xfa\xe6\x15\x66\x82\x4c\xc4\x5c\xcc\xc1\xaf\x36\x24\x39\x4b\xb0\x92\xd2\x32\x81\x4b\xb4\x20\x77\xe1\x48\xb8\x41\xdd\x79\x70\x8f\x76\x09\xdd\xe5\xc8\xa0\x3d\xcd\x90\xd3\x72\x45\x76\xde\xb8\x77\xdf\xb1\xf7\x9c\xbe\xbb\x08\x33\x14\xa8\x58\x61\xc6\x12\xfc\xe4\xd1\x19\x6f\xa7\x02\x68\x07\xa9\xe0\x17\x1b\x1d\xa1\x97\x5c\xc4\xb6\x26\xb1\x42\x4b\x67\x06\x5b\x35\x19\xaa\x5d\x79\x1c\xb2\x9e\x57\xe4\xa3\x20\x9e\xa0\x64\xd4\x78\xf7\x9c\xa1\x46\xed\x5c\x78\xa3\xdb\xfd\xb2\xfe\x21\xf5\x61\xde\x0b\xd8\x1a\xe6\xb9\x23\x63\xd8\xaf\xdf\xe7\xde\xe5\x51\x51\x50\x2d\x73\xec\xda\xc8\xf9\x05\x87\x75\x1a\x7f\x64\xb6\xb4\xe6\x62\xae\x42\x43\xa7\xda\x72\x6c\xb3\xa5\xe3\x56\x78\x96\xcb\xd4\x25\x7c\xd7\x2d\x87\x6a\x2d\xf5\x53\xb1\x52\x12\xa3\x6d\x3c\x71\x1b\x65\x9e\x2a\x7a\x98\x1b\x4a\x68\x4e\x93\xf3\xac\x79\x87\x06\xb2\x86\x06\xfe\xf6\xfc\xa0\x3a\x34\xc8\x72\x9b\xea\xcf\xe0\x7b\x42\xe3\x94\x2b\x05\x7e\x32\x36\x5d\x48\x79\x49\xf6\x36\x40\x1b\x07\xe9\x6f\x8a\xcf\xd5\xbe\xdd\xf3\x23\x33\xfb\x01\xe1\x22\xf1\x89\x4e\x60\x26\x0b\xed\xab\x0b\xe0\x21\x91\x9f\x05\xac\xa1\xed\x80\x63\x73\x19\xd6\xa7\x89\x3d\x6f\xcc\x2e\x78\x74\x86\xbd\xbe\x3c\xed\xea\x2f\x3f\xbb\x44\xa7\x76\x6f\xd7\x41\xaa\x37\xd2\x11\x95\xcb\x47\x27\x92\xd5\x3d\x22\xa6\xba\xc3\xc6\xfd\xb1\x1c\x93\xc4\x0c\xa1\x0a\x18\x24\x47\xd1\x1b\xb3\xe5\xc0\x6d\xbd\x0b\x88\x37\xf6\xa7\xbb\xa1\xc2\x7d\x90\x24\x86\x9a\xd4\x30\xaf\x5d\x15\x06\x7c\xcb\xee\x4b\x1e\xe1\x93\xcd\x66\x2c\x02\x85\x25\x9c\x09\xb2\xb7\xbd\xb2\x41\x86\xab\x41\xd4\xd2\x75\x6f\x4a\xf9\xb5\x79\x4a\xf8\xab\x5a\x0f\x48\x21\xc5\x68\xf3\xd7\x83\x31\x39\x11\x3e\x81\x78\x68\xde\x36\xbc\xd1\x65\x70\x69\xc3\x0c\xc3\xce\x5f\x30\xff\xd0\xff\x64\x94\xac\xbc\xe8\x60\x67\xb4\xf1\x2a\x93\xd0\xb3\xdc\xe9\xb1\x01\x0f\xb3\x1d\xd4\x88\x18\x27\x2b\xdb\x78\x9c\xcd\x2d\x5f\xca\xeb\xfc\x34\xe2\x08\xa4\x75\x6e\x2d\x42\xab\xf5\xed\x98\xee\x76\xf5\xed\x98\xee\x78\xf5\xed\x98\xfa\x76\x4c\xeb\xd7\xd6\x64\xde\xf5\xed\x98\x9e\x17\x90\x66\xdf\x8e\xe9\xfe\xd7\xa3\xe3\x67\xf6\xed\x98\x36\x5f\x7d\x3b\xa6\xbe\x1d\xd3\xdd\xae\xbe\x1d\xd3\xfd\xaf\xad\x43\xfe\xed\xdb\x31\xdd\xeb\xea\xdb\x31\xad\x5f\x7d\x3b\xa6\x1b\xae\xbe\x1d\xd3\x0d\x57\xdf\x8e\x69\xfd\xea\xdb\x31\xdd\xef\xea\xdb\x31\xf5\xed\x98\x9e\x35\x4a\x3d\xe9\xdb\x31\xd9\xab\x6f\xc7\xf4\x2c\xb0\xb8\x49\xdf\x8e\xe9\x4e\x57\xdf\x8e\xa9\x6f\xc7\xd4\xe4\xea\xdb\x31\x3d\x17\xa7\x4c\xdf\x8e\xa9\x6f\xc7\xf4\xc7\x51\x74\xfb\x76\x4c\x7d\x3b\xa6\xbe\x1d\x53\xdf\x8e\xe9\xd6\x59\xf4\xed\x98\x9e\x83\x09\xa8\x74\xcc\x1b\xe1\x2e\xde\x05\x22\xc6\xe6\xf6\x06\x15\xd9\xd3\x62\x36\x63\x39\x70\x2e\x78\xf2\x5a\x5a\x55\x89\x86\x57\x0f\xe5\x32\x3d\x04\xb4\x19\x5b\x06\x71\xc3\xcf\x6d\x09\x38\xe0\x23\xe6\x4c\x01\x40\x8a\x20\xc7\xef\x5e\x6f\xc0\xa3\x69\x9c\x6f\xd8\x34\xa5\x16\xe6\xfc\x4e\x34\x8b\xc2\xdf\x40\xf0\x4d\x65\x39\x96\xee\x51\x22\x95\xcd\x87\x06\x62\x45\x0b\x2a\x04\x73\xf6\x1e\xd7\xe0\x47\x99\x32\x26\x88\xcc\x98\x8d\x81\x53\xa2\xb8\x98\x27\x8c\x50\xad\x69\xb4\x18\x9b\x27\x09\x47\xec\x32\x79\xd9\x7e\xa2\x74\xce\x68\x8a\x44\xcf\x59\x4a\x39\x0e\x45\x68\x94\x4b\xa5\x48\x5a\x24\x9a\x67\x7e\x30\xa2\x18\xd4\x29\xa0\xa0\xf2\xc4\x80\x7c\xb9\x32\xe3\x79\x58\x3e\xcd\x4e\x4b\x86\x80\x60\x60\x6d\x0e\x01\xdc\x3a\xcd\xf4\x8a\x98\x57\x4e\x2c\xae\x6a\xae\x34\x89\x12\x0e\xd2\x1a\x9e\x88\x15\xab\x30\xde\xd0\xc9\x6a\x61\x67\xaa\xec\x54\x45\x0c\x6a\x6b\xa6\x15\x81\x04\xe1\x72\x40\x3b\x54\xcc\x95\x55\xf3\xd5\x90\x50\x87\x56\x85\x84\x76\x33\x05\x52\x3b\xc9\x82\xa3\xdb\x8f\x82\xe1\x02\x94\x4e\x87\xe0\x6b\x6b\x75\xb0\x68\x26\xa1\x73\xbf\x39\x87\x95\x24\xf9\x52\xa1\xb0\x3d\x1c\x6a\xc7\x00\x16\x40\xb0\xa5\xd9\x03\x2c\x62\x46\xbe\xd2\x1b\x76\xfd\x83\x6f\x7a\x4d\xf3\x39\xd3\xbe\x8d\x59\xd3\x2c\xf2\x6a\xf2\x49\x88\xa7\x1b\x1a\x22\x25\xc9\x80\x3a\xb6\x1b\x4a\x50\x99\xb4\x09\xb0\x17\x67\x68\x71\xca\x36\xdd\xe0\x14\x23\x4c\xde\x2c\x5b\xe8\x64\x34\x62\x8a\xec\x9d\x4c\x0e\x87\x64\x72\x72\x64\x33\x34\xe5\x6c\x53\xa1\x70\x09\xa8\x6c\x95\xc4\x4d\x0f\xf2\x10\x68\xc1\xf0\x41\x71\xa5\x7d\xf6\xc4\xeb\x57\xd0\x17\x67\x13\x07\x00\x95\xcb\xe3\xba\x13\x85\x2d\xbe\xac\x4f\xc8\x6c\x05\x54\x68\xec\xe6\x63\x65\x41\x9f\x03\xf6\x71\xbf\xf0\x13\xb1\x54\xb2\x9d\x7b\x5c\x44\x1d\x18\x2c\xc8\x6b\x6d\xbf\xaa\xf4\x1f\x11\x36\xbb\xa6\x51\x56\x4d\x2b\x0b\x29\x50\xc5\xde\x32\xa5\xe8\x9c\x4d\x1a\x86\xb7\x6e\xf2\x03\x40\x84\xab\x64\x07\xc0\x80\x92\x4a\xef\xb5\x30\x5b\xb8\xaa\x7c\x93\x14\xe7\xe4\x77\xd6\x55\xce\xb5\x66\xc0\x4a\x00\x4d\x0f\x16\xbb\x5e\x6c\xbf\x5b\xcb\x39\x7e\xeb\x06\x29\x7f\x6c\x54\x09\x11\x63\x06\xf0\x94\x91\x69\xce\xd9\x8c\xcc\x38\xa4\x15\x43\xa2\xef\x10\xc1\x95\x28\xfa\x9e\x94\x62\x39\xb6\x5b\x42\x0b\xca\xcd\x6b\x4c\x7e\xb1\x13\xd3\x79\x21\xb0\x9d\x96\x55\xee\xa1\x5c\x94\xcf\xc8\x1c\x12\x85\xad\x8d\xf2\x97\x17\xff\xf8\x1b\x99\xae\x8c\x22\x05\x1b\x52\x4b\x4d\x13\xff\x92\x09\x13\x73\x43\x2b\x14\x0a\xd5\x82\x47\x4f\x01\x68\x88\x82\x13\x7f\xf9\xcd\xe5\xb4\xaa\xd9\xed\xc7\x6c\xb9\x1f\xd0\x6f\x94\xc8\xf9\x98\x1c\xfa\xfa\xc2\x22\x8b\xc1\xcf\xdf\x1c\x0b\xbb\xbb\x6d\xd6\x0d\x20\xbc\x43\xf9\x22\x0b\x79\x85\x16\xe6\x86\xdd\x53\xd6\x4e\x65\x32\x2b\x12\x0c\x75\xbc\xf6\xa5\xc2\x85\x62\xeb\x05\x7d\x1b\xcf\x05\x38\xe7\xed\x10\x35\x3e\x6a\xf3\xc3\xdd\x23\xa5\x2d\x80\xb1\xee\x63\x0f\xf6\x05\xcc\xe4\x35\x4d\x92\x29\x8d\x2e\x2f\xe4\x1b\x39\x57\xef\xc4\x71\x9e\xcb\xbc\x3a\x97\x84\x1a\x19\xbd\x28\xc4\x25\x36\xc1\xf0\x70\x08\x72\x6e\x13\x08\x1c\x7a\xf6\xa6\x17\xc6\xda\x78\x27\xfa\x9d\xf1\x5d\x8e\xc2\xae\x79\x69\x61\x0b\xc2\xcc\xf3\x71\x47\x86\xe3\xab\x70\xb3\x7d\xf3\xe2\x2f\x7f\xc7\xad\x4b\x64\x4e\xfe\xfe\x02\x6a\x08\xd4\x10\x0f\x31\x48\x54\xa3\x9e\xa4\x34\x49\x0c\x23\x0f\x37\xa5\x21\xf4\xa6\x4d\xf8\xe0\x7b\x50\xb7\xdf\x6e\x77\x56\xe0\x2f\x2e\x7e\xc5\xbe\x01\x5a\xb1\x64\x36\xc4\xd2\x29\x6f\x4c\xef\x82\x3a\xb2\x6b\xb9\x0f\xd4\xaf\x6d\x81\xda\xbd\x94\x49\x91\xb2\x23\xb6\xe4\x5d\x74\x31\xac\x8c\xe6\x1c\x4c\x09\x57\x20\x07\xa7\x89\x8c\x2e\x49\x6c\xbf\x0c\xb2\xaa\xea\xa8\xdf\x4f\xb7\x21\x6d\xf8\xfe\x95\x8c\xb2\x94\x66\x99\xd1\x01\xa0\x40\x33\xa7\x57\x15\x62\x94\xfd\x28\x9e\x7e\x43\x5a\x7c\x23\xc3\x37\x1b\x0f\xd1\x38\x0d\xad\x7d\x64\xa4\x9c\x7d\x47\x8d\x09\xcb\x01\xdd\x69\xc8\xe0\xdf\x58\xe5\xb4\xa6\x98\x7b\xd4\x4a\xbf\x31\x50\x01\x30\xdb\x07\x58\xf2\xa3\x35\x4e\x25\xad\xd3\xe9\x2a\x74\x11\xb7\x74\xf7\xa3\x24\x63\xb9\xe2\xca\xc8\xe5\x9f\xe1\x40\x61\x5b\xc7\xd2\xf1\xfc\x38\x44\xc0\xc3\x0d\x50\xc9\xed\x39\xa5\xb1\x53\x70\x40\x60\x85\x08\x13\xbd\x41\xad\xad\x6a\xb5\xe7\xc5\x14\xf6\x0f\xdc\x7e\x9f\x56\xb1\x1d\x4a\xe2\xc7\xe6\xb1\x3f\x97\xcb\x50\x65\xb1\xe6\x13\xcf\x63\xf1\xae\xe7\xc4\x59\xe1\xfd\x9e\x2a\x63\xf5\x93\xef\x88\x7f\x00\x47\xb5\x8b\x5b\x65\xa1\x15\xab\x13\x4f\x58\x60\x0b\x58\x03\x72\x4c\x30\x69\xc3\x9c\x09\xfb\x53\xb2\xfb\x6a\xf7\x51\xb9\x2b\x92\x28\x97\x19\x9d\xb7\x6a\xf8\x53\xa3\x54\x7d\xd8\x10\x6e\xc2\xd8\x4f\x01\x2b\xc9\xec\x5d\x86\x93\x38\x34\x1d\xc0\x4a\xc2\x60\xbe\x23\xb0\xb5\x2c\x10\x77\xea\x8a\xae\x08\xcd\x65\x21\x62\xeb\x0e\xf5\xfe\xe8\xb7\xb5\x07\x9f\x4a\xc1\xca\xc6\xab\xd5\x96\xc5\x10\x80\xe2\x82\xbc\x1c\xbf\x7c\xf1\x5c\x44\x1c\xb6\x15\xab\x8a\xb8\x53\x2f\xe2\x90\x3f\x3d\xea\xbb\x3a\x58\xfc\x8e\xde\xf7\xad\xf5\xcd\x94\xa8\xf7\xdc\x61\x6a\xc3\x47\x57\x39\xd7\x2c\xe8\xaf\xb8\x07\x16\x8f\x31\x2c\x03\xcc\x89\xc1\xa6\x76\x13\x2d\x89\xd4\x0e\xe4\x43\x15\xd3\x2f\xc8\xb7\x2c\x83\x82\xe3\xb6\xc9\x35\xa6\x6e\x61\x61\x21\xa1\x76\x76\xc8\x1e\xde\xb9\x8b\x95\xf9\x83\x47\xdd\x5a\x96\x68\xc7\xd7\x59\x0b\x20\xce\x1a\x08\x44\x46\xc1\x79\x97\x75\x48\xc1\x7f\xb1\x05\x5d\x32\x40\x24\xe0\x09\xcd\x13\x08\x91\x9f\xe3\xdc\xc9\xb4\xd0\x84\x89\x25\xcf\xa5\x00\x3f\x31\x94\x6c\x4c\x13\x16\xb6\x17\xff\x6a\xef\xe7\x83\x33\xc8\xbf\x19\x60\x5b\x15\x37\xcb\x42\xb9\x36\xee\xe1\x4c\x82\xe1\x3e\xbb\x7c\x6e\x1e\x86\x86\xc0\x73\xdd\xbc\xcc\x73\xd2\x42\x17\xd8\xbb\xe5\x3a\x4a\x0a\xc5\x97\x8f\xc5\x49\x2c\x54\xc4\x11\x6f\xb4\xce\x35\xd8\x8a\x92\x50\x6b\x08\x14\x65\x98\xe0\x33\x38\xd7\xbb\xca\x57\xb2\x86\x29\x1b\xd6\x67\x45\x52\x3e\x5f\x68\x9b\xed\x59\x8b\x1c\x04\x21\xa8\x14\xdc\xbc\x8f\xe9\xbd\x32\x62\xf7\x20\xe1\x54\xdd\x57\xe5\x5a\x2b\x97\xb4\xa3\x40\xa2\x87\xb0\x68\x79\x34\xf1\x4e\x19\xf3\x20\xf4\x54\x9e\x4c\x6c\x04\xcd\xd1\x8d\x8b\xff\xc1\xc4\x1a\x6f\x96\x60\xa2\x0c\xfe\x04\xdd\x8d\x33\x12\xc0\x05\xb9\x84\x12\x60\xfe\xd0\xa2\x00\x2c\x12\x21\xc5\x68\x11\xc0\x39\x65\x32\xbe\x67\x29\x61\x53\xc3\xa3\x91\xc9\xb1\x99\x82\x64\x21\x93\xd8\x75\x0f\x47\x5f\xce\x94\xe9\x2b\xc6\x04\x39\x99\x00\xfd\xcc\x2b\x62\x39\xd7\x66\x2a\x62\x58\xc1\xb7\xad\xdf\x44\xcf\xfb\x6e\xb0\x16\x56\x49\x1b\x95\xde\xbf\x69\xeb\x33\xff\xa3\xa7\x99\xcb\xc8\xa6\x53\xb9\x64\x40\xd2\x38\xce\x99\x6a\x01\x7c\xf4\x08\x76\x6a\x2b\x56\xca\x1b\xf5\xcf\xa9\x06\x46\x3c\xd9\x9c\x6b\x09\xd4\x77\x38\xaa\xb0\xf1\x1e\x98\x83\x9d\x4c\x0e\x5b\x70\xaf\xdd\xf7\x36\x2e\x62\x86\xda\xdd\x55\x84\x67\x51\x19\x73\x1d\x93\x32\xdc\x18\x14\x4a\xa0\xc6\x78\xbf\x58\x57\x53\x35\x31\x60\x6a\x2d\x99\x34\x11\x38\x8c\x61\x2b\xb6\x14\xdb\xba\x73\x20\xe8\x00\x6d\x8a\x2b\xd4\x50\xee\x17\x21\x41\x5c\xb2\x04\x32\x79\x9b\x3a\x32\xf4\x49\xc8\x35\xc6\x04\xae\x77\x97\x7e\x18\x70\xf1\x35\x62\x3e\x18\x2d\x27\x27\x47\x5d\x6e\x97\x8c\xc7\x5b\xb7\x5d\xde\xab\x7b\x97\xf4\xdf\xfe\x92\x80\xe9\xf7\xb9\xb7\xc4\x60\x93\x85\xe9\xb3\x7f\x43\x9a\xba\xd4\xc4\xb6\x4f\xf4\x99\xb0\x9b\x12\x3a\x80\x8b\x54\x9f\x34\x34\x7f\xcf\x8a\x04\x36\x69\x99\xdc\xeb\x33\x93\xa9\xcf\x0b\x05\x6d\x80\x2e\x29\x4f\x40\x7b\x0e\x0a\xf7\xd6\x86\x74\xe1\xf7\x44\xd2\x18\xcb\x3d\x2e\x59\x2e\x58\x42\x52\x19\x17\x09\x7a\xf3\x7c\x9b\xde\xb7\xef\x8e\xde\xbf\x39\x76\x49\x58\xac\x5c\xce\x21\xa1\x44\xb0\x2b\x18\x5d\x80\x42\x12\x59\xe0\x2e\x5f\xf6\x63\xce\xd3\xb9\x4d\xcb\x40\x33\x14\x1d\x13\xee\x85\x52\xae\xf9\x9c\xea\x4a\x4b\x5b\x32\xcd\x19\xbd\x94\x85\x26\xcb\x22\x11\x2c\x2f\xdb\x4c\xb2\x25\x13\xe8\x83\x35\x3f\x30\x8f\x0d\xb1\x1a\x79\x5e\x41\xc8\xb4\xc0\x69\xe6\x55\xcc\x58\x34\xb2\x9a\xbc\x2d\x31\x82\x2f\x83\x1e\xcb\x95\x4e\x8c\x55\xa7\x09\x4d\xb2\x05\x1d\x61\x9b\x0e\x0b\xad\x06\xb4\x5e\x48\x21\x73\x0c\xab\x61\x39\xb1\x3d\xf8\xd8\xc7\x0f\x86\x73\xe8\x92\x98\x46\x73\xee\x32\x60\x6c\xe2\xcb\xc3\x1d\x87\xfb\xbb\x5b\xaa\x15\xa2\x55\xf8\x16\x3b\xa0\x93\x7d\x13\x19\xdf\x60\x35\x94\x7a\x17\xdc\x1f\x76\x9e\xd6\x92\x50\x82\xee\xf6\x91\x83\xbf\x81\x4c\xd9\x26\x6c\xf0\xde\x42\x13\x2c\x8f\x49\x91\x24\xe7\x2c\xca\xd9\x7d\xc3\x0c\x55\x4e\x71\x52\x1b\xeb\x26\x0b\x20\x30\x67\x01\x13\xc4\xde\x2c\x4a\xfc\x81\x20\xcf\xa9\xac\xc5\xcd\x8a\x04\x52\xc3\x01\x82\x1e\x09\x0e\xb3\x57\x41\x4c\x97\x2b\x97\x65\x86\xdc\xa7\xb2\x0a\x8a\xf9\x87\xf9\x1e\x66\x54\x29\xcc\x3c\xe0\x22\xe6\x4b\x1e\x17\x34\x81\x07\x81\x51\x66\x13\xb6\xa8\xc5\xfb\xc6\xb3\x9c\x3a\x94\xe0\xfb\xe6\x30\x97\x67\x72\x1f\xe7\xfd\x27\x9c\xde\x8a\x8b\xf9\x08\x3e\x31\x0f\xb6\x33\x1c\x49\x31\xa2\x23\xb3\x6d\x9e\x88\xdd\x02\x38\xf7\xef\xc0\x30\x38\x73\xeb\xeb\xd8\x90\x22\x4c\xc8\x62\xbe\x00\x62\xe5\x29\x75\x50\x9a\x09\xd3\x80\x92\x68\xf3\x19\x30\x89\xcd\xfe\x36\xb6\x56\x46\x88\x1a\x59\xdd\x1b\x4f\xc4\x76\x69\xea\xe0\xad\x25\xe3\x07\x6c\xc6\xd2\x48\xdf\x7b\x07\xca\x25\xcb\x97\x9c\x5d\xed\x5b\xcd\x6f\x64\x64\xc2\x08\x29\xa2\xf6\x81\xb0\xfb\x7f\x42\xeb\xe8\xe2\xdd\xd1\x3b\xe8\xdc\x6d\xbd\xee\x4e\x54\x19\x51\xa0\xc6\x84\x66\xfc\x67\x96\x2b\x00\x55\xbe\xe4\x22\x1e\x92\x82\xc7\xdf\x3f\x60\xc2\x17\x17\xbc\xcc\x62\x6d\xc5\xb5\xde\x58\xae\x64\xab\xe8\xf9\x7f\x70\x7b\x06\x12\x74\xca\x12\x29\xe6\x01\x06\x00\x48\xf3\x13\xc1\xf5\x5a\x93\x63\x44\x3a\x05\x0f\x8f\xcc\x63\xc8\x15\xe6\x32\xaf\x84\x33\xcc\x78\x80\xff\x18\x64\x1c\x1b\x96\xc6\x2b\xe3\x41\x1a\x97\x2a\x75\x24\x4c\x04\x72\xe5\xc2\x0e\x1d\xdb\xe1\x4a\xa2\x2c\x5e\x50\x11\xc3\x9f\x51\x24\xf3\xd8\xce\x97\x6b\x9f\xde\x8c\xc9\x70\x98\x81\x05\x62\x08\x1b\x7a\xd4\x9f\x0c\x6a\x5a\x9e\x56\x52\x61\x9d\xd6\x5e\x08\xfe\xef\x82\x11\x9a\x4a\xc3\x88\xeb\xcd\x12\x6a\x14\x49\xe9\x0a\x64\x21\x4c\xf5\x8d\x2b\xd7\xb0\x35\xb6\x6a\x48\xce\x98\x51\xba\x4a\x98\x80\x21\x79\x53\xc5\x0d\x18\x9a\xb9\x9c\x63\x41\xb3\xfd\x08\x67\x9f\x33\x25\x8b\x3c\x62\x67\x18\xe3\x4c\x5d\x3e\xdd\xfa\xcb\x98\x55\xd1\xf4\x92\x09\xf4\x29\x19\xd2\x40\x18\xb7\xc8\x61\x0d\xa2\x05\x8b\x0b\x90\x2a\xd3\x15\x99\x71\x6c\xb0\x02\xa2\x9d\xcf\x17\x4c\x69\x67\x1b\xed\x43\x8e\x5a\xd9\xab\xce\x4d\x00\xb6\x6f\x90\xcc\x5e\x7a\x61\x53\x0a\xb0\xe5\x70\x64\xa9\x76\xf5\x5a\xa8\x0d\xaa\x22\x75\x67\xb9\x4e\x69\x35\x26\x6f\xcc\xa3\x70\x3f\x05\x9d\x29\x78\x8d\xb8\x10\x63\xb6\x6e\x64\x32\xa3\x6a\x01\x6d\x5d\xea\x4b\x60\x9b\x3e\x44\x45\x6e\x18\x46\xb2\x82\x42\x4e\x68\xc7\x0f\xad\x9b\xa1\x73\xfb\x26\xbf\x63\xcb\xfa\x1c\x33\xd9\x51\x20\xef\x9e\x8a\x10\x3b\xf0\xf5\x16\x86\xf0\x51\x8d\x13\xe0\x4a\x1a\x81\xe5\x70\xdd\x8c\xc2\xed\x03\xfe\x86\x2b\x3c\x9c\x48\x6a\x1e\xde\x6f\x14\x96\x6f\x23\x01\x69\x3e\x6f\xef\xb8\xdb\x3d\xc8\xe7\x05\x1e\x74\xcb\x85\x4b\x44\xfa\x71\x2d\xef\x1e\x94\x29\x63\xab\x1e\xbe\x3d\x0a\x0b\xfd\xc2\x0a\x26\x57\x26\x39\x26\x3f\xb7\x0d\xb3\xd4\xe3\x2c\x86\xa1\x97\xc1\x9b\xb2\xef\x8a\x61\x1a\xc9\xd2\x99\x04\xfe\x69\x4e\xf3\xe5\x22\x2b\xb4\x95\x84\x01\x40\x57\xb4\xa0\x62\x0e\x6e\x12\x59\x98\xf1\xbe\xfa\x0a\x66\x94\xb3\xb8\x88\x6c\xd3\x1a\xb7\x6b\xbf\x72\x41\x07\x0b\xa7\x07\xec\x4a\x45\x34\x73\x73\x0e\x5f\x4b\xad\x84\xa6\xd7\xaf\x08\x1f\xb3\x31\xd9\xf9\x2a\xf8\x6a\x07\x9f\x9e\xe5\xd2\x3c\xc2\x16\x18\xc1\xac\x12\xae\x21\xd1\x67\x27\xbc\x7b\x4c\x8e\xcd\x33\x20\x10\xeb\x09\x18\xd4\xc0\x4c\x4b\xf2\x0d\x49\xce\xe6\x34\x8f\x13\xeb\x30\xbc\x0a\x0a\xa7\x3c\xc1\xd8\x35\x57\x5a\x59\x6f\x41\x0b\xe6\xa4\xa9\xba\x34\xac\xc8\x1c\xae\x51\x4c\x35\x1d\x05\xa7\x7a\x1f\x4d\xad\x91\x45\x09\x1f\x51\xbb\xbb\x4a\xae\xb5\xff\x27\x5b\x7f\x3c\xa2\xfe\x2e\x6e\x94\x72\xc0\xeb\x6e\xae\xea\x3c\x35\x2f\x71\x0b\xb0\xf8\xea\x01\x3e\x2e\x3b\x48\x00\x0d\xa0\x4f\x51\xa9\x32\x79\x3e\x6a\xf1\xd0\x6f\x38\xd2\xc7\xa7\x17\x67\xbf\x4e\xde\x9d\x9c\x5e\xf4\x27\xbb\x3f\xd9\xfd\xc9\x6e\x71\xb2\x99\x58\xb6\x3e\xd5\xce\x7a\xda\x94\xb7\x50\x87\x7c\x0d\x4a\xf0\x9e\x51\x76\xe8\xb1\x58\xfe\x4c\x8d\x32\x6d\xfd\xda\x36\xe8\xba\x21\x8d\xc3\xde\x80\xaa\xfb\xe1\x93\x4f\x0f\x7d\xc4\xe4\xce\x0e\x93\xe6\x42\xc7\xca\xa6\x55\x0b\x9b\x70\x1e\xfe\x7e\x72\x74\x7c\x7a\x71\xf2\xfa\xe4\xf8\xec\x51\xb3\x9d\x5a\x82\xa1\x56\xe5\x72\x43\x29\x99\xe5\x6c\xc9\x65\xa1\x92\x95\x47\x6d\xdf\xcc\x04\xd6\x13\x66\x45\x0c\x1e\x0f\x07\x4c\xbf\xf1\x67\xbd\xb0\xed\x56\xd8\x56\x93\xbf\x5a\xe0\x60\x75\xb5\x7d\x5f\xe7\x32\xed\x68\x0b\x9f\xa3\x2f\xc6\x05\xdb\x36\xed\xa7\x5d\x0b\x99\x53\x11\x3d\x56\x79\x2c\xf1\x79\x8c\x3e\x9a\x66\xba\x45\x1b\x9d\x4e\x40\xb6\xbb\xc1\xa3\xc6\x84\xb3\xb7\x34\xfb\x89\xad\xce\x58\x4b\xb8\xad\x2a\xbd\x59\xc2\x22\x23\xe8\xc8\x25\x5b\x61\x76\xf1\xa1\x7b\x58\x3b\xd0\xe8\x2d\xc4\x28\xbf\x64\x6d\xf0\xe3\xbb\x04\x17\xbf\x64\x2d\x32\xa7\xdd\xb5\x06\x80\x6d\x96\x10\xf4\x34\xb3\xa6\x5b\x05\xf9\xfd\x05\xc0\xd4\x9f\x6f\x1c\xa5\x7a\x75\xb8\x0a\x2e\x7c\xdb\xf1\x4a\x60\x24\x7d\x55\x91\x5d\x9e\x89\x10\xac\x69\x86\xbd\xe9\x42\x0f\x56\xc9\xe8\x88\x34\x6d\xfb\x70\x12\x5c\xc2\x6e\xf9\xea\x6e\xc9\x58\x31\xe7\xc2\x03\x3a\xc6\xaf\x1c\x06\x88\xf2\xcd\x33\xa1\x6d\xf3\xb0\xfa\xa7\x4d\x6b\xf9\x6f\xff\x61\x42\xa7\x2c\x51\x1f\x76\x77\xbf\xfb\xe9\xf8\xd7\x7f\xee\xee\xfe\xf6\xdf\xe1\xb7\x20\x0a\x31\xbc\x5d\xbd\x05\x00\x4d\x84\x8c\xd9\x29\x3c\x03\xfe\xb4\xea\xda\x01\x86\x50\xec\x17\x80\x47\x30\xc6\xd4\x3b\xff\x67\x26\xe3\xfa\x5f\xaa\x15\xf2\xe6\x56\x0a\x06\x58\xa2\x16\xe5\x71\x78\x75\x27\x1e\x4a\x5e\xd2\xf1\x51\xb5\xa3\xfa\x7e\x52\xd1\x82\xa5\x88\xfd\xf7\xda\x91\x00\x1a\x61\x3b\xe0\x13\x01\x68\x11\x46\x33\xad\xc2\xb0\xee\x2c\x5f\xee\x6c\x95\x80\xf1\x2b\xd8\x31\xc1\x80\x22\x96\x5a\x78\x90\xbd\x80\xf5\x69\x2e\xbe\x01\xed\xc1\xe4\x84\x2c\x91\xc2\x5b\x43\x1c\x17\xde\x7c\xfd\x45\x79\x9c\x0f\xa2\xd6\xab\xd2\x5f\x61\x5a\x99\xfb\xde\x22\x84\x28\x0f\x15\xc9\x8c\x61\xb3\x87\x1f\x8e\xa3\xac\x18\xda\x1b\xc6\x29\x4b\x65\xbe\xf2\x7f\xfa\xca\xe4\x91\xd2\x32\xa7\x73\x28\x0c\xc3\x9f\xe3\xcf\xfc\x5f\xf8\xc3\xca\x03\xd6\x7f\x8d\xa6\x70\x19\x4b\xb5\x1c\xb9\x21\xd2\x4d\x79\x6d\x21\x6f\x73\xa4\xdf\x12\xd6\x16\xb5\xc5\x2b\xab\x5e\xd5\x0d\xe9\x3d\x71\xa8\x70\x7a\x2a\x82\x3d\x69\x2b\xe6\x87\x65\x16\x1b\x78\x03\xc4\xd2\x58\x96\x8d\x91\x26\xcb\xab\x43\x6e\x16\xf3\x25\x57\xb2\x45\xf9\x9b\x1f\xe8\xe6\x8c\x47\x0b\xda\x83\x59\x5c\xde\x6d\x76\x9d\x01\xb8\x9e\x3f\xaf\x35\xb6\xff\xb2\x4d\x17\x3f\xbc\x32\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfe\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xbd\xf7\x71\x0c\xff\xf8\xf3\xe0\xfb\xc1\x27\xf7\xc7\xd7\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x5f\xb5\x9e\x7a\x07\x58\xd7\x78\x75\x89\x78\x5d\x1d\xb1\x93\xed\xf7\x05\xdb\xbc\xe0\xe5\xb6\x57\xd7\xe7\xff\xcc\x71\xcd\x20\xab\xc7\x89\xeb\xad\x39\xe0\x98\x16\xfa\x10\x9e\x1c\x7c\x52\xb5\x60\xcc\x9b\x16\xcf\x4d\xce\xfd\x11\x9c\x3b\xbe\x0d\x2c\xac\x6b\xa9\x89\xce\x72\x99\x3a\x58\x0a\x08\x6f\x60\x01\xa5\xbd\xef\x92\xb5\x6a\x26\x8e\x57\xef\x0c\xea\x9d\x41\x37\x5c\x9f\x75\x06\x61\x11\xc1\xf6\x7a\x82\x98\x58\x36\x0d\x61\x6c\x8c\xa0\x3b\x5b\x27\x04\x7f\xbc\x5b\x40\x6d\xec\x8e\x7a\xd9\x3f\xb9\x4c\xa6\x41\x81\x96\x6e\x8e\x61\x92\x83\x24\x21\x5c\xe0\xc1\x87\x01\x7c\x2d\x16\x43\xd3\xc6\x15\x11\x2f\xcd\x14\x7c\xd5\x55\x05\x3c\x19\x72\x8b\xb9\x98\xdb\xc2\x28\x14\x25\x36\xfa\xc4\x45\x09\x3b\xed\x95\xc3\xb2\x57\x01\x55\x4a\x46\xd0\x14\x0c\x2b\xad\x3c\x26\xa5\x9d\x36\xcc\x46\xd3\x4b\x88\x36\x46\x2c\x66\x22\x62\xb6\x8f\x41\xa5\x57\x34\x15\xe4\x58\x2c\x5d\x2f\x87\xb8\xc0\x64\x10\x64\x7f\x9b\xc7\x78\x5e\x09\x08\x66\x23\xda\x20\x58\x90\x87\x00\x5c\xdf\x5b\xd8\x14\x52\x31\xe4\xac\xf4\xb2\x36\x6b\x27\xdb\x5a\x8a\xb7\x97\x99\x3e\xb2\xd5\x4a\x19\x5a\x13\x96\xa5\xfb\xb9\x2a\x24\x9f\x43\x30\xb0\xbd\xf8\xfc\xc3\x89\xce\x8e\xc4\x66\x37\x22\xf3\x1e\xb1\x93\x2e\xc5\x64\x17\xc1\x92\x2c\x67\x33\x7e\xdd\xd1\x39\x3d\x08\xea\x09\x79\xcc\x84\xe6\x33\x8e\x1d\xb3\xb3\x9c\x65\x4c\x80\xab\x15\x4a\x34\x0c\xef\xb7\x92\xb2\x0c\x4e\x6f\x63\x32\x0f\x2a\xdc\xdd\xb2\xb2\xf3\x4d\xca\x7e\xcf\xc7\x48\xcf\xc7\x1a\x5f\x0f\xc4\xc7\xec\xce\xdd\x1e\x26\x06\x99\xe7\xed\xb3\xdf\x0f\xab\xa9\xec\xb6\x8b\x7b\xdb\x12\xe2\x5a\x81\xbe\x67\x8d\x5a\x62\xf2\x1a\xd6\xb1\xe5\x04\x6b\xf6\x51\x6f\x22\x29\x15\x74\x8e\xad\x28\xb4\xf4\xe0\x55\x32\xf7\xed\xc4\xea\x79\xf7\xa0\xc7\xbb\x12\x2f\xf8\x32\x97\x49\xc2\x72\x45\x12\x7e\xc9\xc8\x11\xcb\x12\xb9\x4a\x6d\xee\x6b\x4c\xce\x35\xd5\x66\x57\x9f\x33\xdd\x2c\xec\xdb\x0e\xd5\xc6\x55\xa1\x77\x84\xfd\x8f\x65\xed\x50\x14\x4e\x32\x5b\x41\xf9\x4e\x00\xd3\x38\x80\xce\x46\x43\x72\xca\x96\x2c\x1f\x92\x93\xd9\xa9\xd4\x13\xd4\xbe\xab\x09\x77\x78\x23\xe1\x33\xf2\xca\xd8\x75\x4a\x13\x8d\xdd\x65\x82\x02\x75\x99\x57\x06\x28\x71\x0b\xbb\xa8\xcf\x5b\xaf\x3d\x87\x91\x7c\xe5\x79\xa3\x48\x46\xab\x65\xf2\xed\xbb\x5a\x2f\xd0\x01\xd6\x93\x96\x50\xd6\xc1\xfe\x46\x5c\x05\x87\xc4\x07\x56\x20\x17\x24\x67\x2a\x93\x42\xb1\x2a\xcc\xa8\x9f\x11\x5a\xbb\xdd\x62\x18\x37\x16\x9e\x6d\xc5\x66\x26\x95\x86\x12\xda\x6e\x9a\xc2\x4d\xdc\x70\x50\x91\x4c\x93\x84\xc5\x95\xae\x80\xd8\xcd\x8a\x56\x3d\x04\x16\x0d\xc5\xf7\xb7\xc1\x42\xe5\x4a\x8d\x73\xe5\x7e\xdf\x61\xd2\xf5\x70\x72\xed\xc5\x6f\xaa\x6c\x2e\x0f\x26\xc8\x91\x60\x03\xac\x01\x9e\x03\x0c\xbe\x0a\x1a\x41\x2d\xa4\xbc\x24\x91\x4c\xb3\x04\x8e\x4e\x8b\x93\x55\xf6\xa1\xf3\x5b\x69\x64\x46\x57\xfb\x41\x8b\x3a\xf8\xa0\x5d\x87\xba\x56\x8a\x58\x17\x6a\x18\xbb\x66\x51\x67\x3d\x6c\x8f\xaf\x59\x14\x34\x61\x06\x48\xb6\xc8\x21\x44\x98\x13\xdb\xbe\xb7\x7e\xeb\x90\x43\x57\x6e\xfe\x16\xb5\x74\xe1\x55\x43\xb1\x84\x31\x1d\xda\xbf\x7d\x04\x34\x4e\x01\x5b\x08\xeb\xeb\x42\x18\x0d\xbf\x19\xf1\xe8\xad\x41\x5f\xfa\x44\x6a\x37\x16\xb4\x48\x93\x52\x93\xbd\xdd\xfd\xdd\xc1\x9a\xff\xb1\x06\x19\x7f\x11\xfc\x92\x03\xd4\x69\x06\xb8\xa1\x2c\xda\x8d\x87\x84\x6b\x97\x69\x8d\x70\x4f\x30\x2b\x5b\xf4\x37\x24\x4a\x12\x9d\xd3\x98\x5b\x35\x06\x3e\x35\x37\xe9\xbc\xb0\x5c\x7e\x6f\xf7\xd3\xae\x6d\xed\x75\x25\xc5\xae\x86\xe9\x8f\xc9\x05\xe2\xc4\xf8\x81\x56\xb2\x00\x5c\x28\x24\x41\x96\xf0\x88\xeb\x64\x05\x1c\x8b\xc8\x02\x31\xa9\x8c\xbc\xb0\xc5\x86\xc7\xd7\x5c\xbb\xe6\x3a\x72\x46\x5e\x60\x77\x3d\xc4\x70\xa2\x0a\x3a\xac\xef\x2f\x18\x4d\xf4\x02\x93\x44\x84\x14\x23\x6c\x90\x6a\x58\x89\xfd\xa6\x6d\xbc\xa4\x9d\x3b\x31\xbc\x5a\xb8\x16\xd7\x27\xd4\xd2\x72\x30\x4c\xf4\x87\xe6\x5d\xdb\xc9\x1a\x7a\xdd\xc5\xc5\xe4\x87\x4a\xdf\x76\xe0\xe2\x5a\x67\x2e\x75\x07\xbc\x01\x2c\x9f\xc9\x3c\xdd\x02\xde\xd1\x4d\xb0\xb2\x55\x03\x77\xd2\x21\x0b\x6b\xdb\xc8\x9d\x6c\x46\x23\xbc\x7b\x07\x77\xf2\xab\x2c\x00\x0c\x84\x4e\x93\x95\x47\x62\x50\x4c\x93\x1d\x33\xd4\x8e\x61\x4f\x66\x37\xfc\xc8\x68\x8c\x40\x19\x4a\x33\xda\x48\x75\x0b\xaf\xce\x82\x68\xc1\xdc\xba\x95\x03\x85\xd2\x32\x25\x0b\xfb\xda\xd5\xd2\x4b\x7b\x32\xc6\x70\x7a\x5c\x5d\x53\xce\x32\xe4\x70\xf6\x37\xcf\x8e\x7f\xad\xf1\x0d\xa4\x7b\xa5\x89\x47\x14\x92\x2d\xec\x11\xc5\x05\x12\x0b\x71\x67\x3a\xe2\xa5\x1d\x24\x3f\x90\x0e\x13\x20\x48\xbb\x42\xce\xfa\x40\x10\xd4\x6b\x9f\xeb\xd5\x59\x4e\x05\xe9\x2c\x6f\x80\x6c\x72\xb2\xda\x3d\x83\xde\x17\xf4\xe7\x80\x3b\xc6\xc5\x50\x23\x2a\xa4\xe0\x11\x4d\xf8\x7f\x58\x8c\x1d\xf2\x31\x7f\x0e\xf4\x9c\x88\x2a\x36\x82\xa0\xae\xb0\x8d\x3d\x83\x6a\x45\x73\x1c\xb5\x94\xa0\x7c\x78\xe4\x33\x7c\x5e\xfb\xac\x0c\xd2\x6d\x4e\x00\x69\x5f\x90\x1a\x5e\xb7\x93\xb9\x9b\x2d\x46\xba\xa4\x40\xd6\x41\x02\xf9\x7a\xfa\x38\x82\x55\x41\x81\x27\xb2\x70\x60\x46\x08\xaf\xb9\x35\xb2\xcc\xe8\x24\x9d\xbe\x3a\xba\xe3\x73\x22\x7c\xef\x79\x87\x25\xbc\x4e\x90\x20\xff\xc1\xb6\xaa\x77\x4e\x63\x27\xf4\xa8\x98\x33\xf2\xd2\xfc\xf2\x6f\x7f\xfd\xeb\xb7\x7f\x1d\xe3\xf0\x3e\x17\x42\x90\x93\x83\xd3\x83\xdf\xcf\x7f\x3e\x84\x12\xdc\xb6\x54\xed\x28\xd1\xb3\xeb\x34\xcf\x4e\x93\x3c\xbf\x68\x8a\x27\x14\x96\xb4\xe6\x22\xd5\x08\x03\x0c\x19\xa2\x88\x5a\x0d\x33\x40\xf3\x43\xa4\xdb\xd0\x5d\x6b\x8e\xda\x56\x9c\x31\x1d\x65\xe7\x32\xba\xec\xd0\x7a\x3a\x62\x59\xce\x22\xf4\xc6\x5d\x1c\x4e\x70\x74\x63\xc5\x9e\xbe\xbb\x28\x0b\x1a\x20\xeb\xa7\x84\xec\xfb\xd1\xfa\xeb\x8c\xe5\x7b\xc9\x32\xed\x1d\x04\x53\x1a\x5d\x5e\xd1\x3c\x06\xff\x19\xd5\x1c\x00\x8a\x11\x61\x30\x67\xb6\x59\x1c\xa6\x15\x22\x94\x9a\x6b\xc6\x8d\xbc\x1c\xdd\x14\xce\xe9\x0a\x8e\x31\x14\x81\x33\xca\x13\xf0\xd3\xda\x3e\xd8\x98\x77\x14\x65\xde\x71\x18\x7a\xce\x7b\x13\xcf\x5d\x5b\x6b\xe2\x05\x7d\xba\xef\x6b\xed\xb5\xcd\x7e\xdc\x62\x51\x67\x45\x5c\x5e\x69\x99\xdf\x8b\xba\x0e\xc6\xdb\x5e\x51\x97\xe5\xec\x5c\xcb\x46\x7d\x37\xc8\x7a\x2c\x06\x07\xbb\x21\x12\x33\x65\x33\x69\x98\xf0\x8d\xa1\x95\xb8\x80\x43\x48\x05\x94\x20\x3a\xdf\x99\xac\x84\x4f\x30\xef\xd3\xa3\xe4\x5b\x78\xd6\x7d\x15\x62\xb2\xba\x8e\xe3\x43\xf3\x76\x2c\x85\xd9\x0d\xcb\x5a\x0a\xdb\xef\x1c\x3e\x64\x3a\x42\xff\x70\xc0\xc8\x01\x9f\xd4\x4e\xbf\x1e\xac\x89\x72\xaa\x16\xd8\x0b\x9c\x5d\x73\x6d\xd1\x5f\x27\x32\xae\x77\xf0\x9f\xe7\x34\x62\x24\x63\x39\x97\x46\x18\x15\x42\xc7\xf2\x4a\x90\x29\x9b\x73\xa1\x1c\x29\x00\xa2\xdd\xd2\x0c\xa2\x3e\x5c\x79\xf8\xb9\x31\x39\xab\x40\xaa\xd8\x62\xa7\x48\x96\x47\xd3\xce\xb9\x1e\xaf\x02\x89\x05\x74\x42\x58\x7d\x4f\xe1\xb0\x67\xd8\xe7\xa6\xbc\x57\x08\x78\x72\xcc\x12\xba\xc2\x9c\xd6\x19\x17\x60\x39\xe6\x6a\xd0\x41\x5c\x0b\xbb\xde\xb9\xef\x6e\x9c\x07\x57\x24\x67\x34\x5a\xb4\x0b\x31\xf7\x81\xb0\x3b\x5e\x7d\x20\xac\xcd\x20\x7d\x20\xac\x0f\x84\x7d\xe6\xea\x03\x61\x7d\x20\xac\x76\x6d\xad\x95\xd4\x07\xc2\x1a\x5f\x7d\x20\xec\xf6\xab\x0f\x84\xdd\xe1\xea\x03\x61\x77\xbc\xfa\x40\xd8\xcd\x57\x1f\x08\x6b\x37\x99\x3e\x10\xd6\x07\xc2\xec\xf5\xc7\xf3\x0e\xba\xab\x0f\x84\xad\x0d\xd2\x07\xc2\xfa\x40\xd8\x9d\xaf\xad\x35\xf1\xfa\x40\x18\x5e\x7d\x20\xac\x7a\xfd\xb1\x44\x9d\x0b\x23\x4d\x8c\x41\xd9\xbe\x3e\x6f\x02\xa1\x0b\x1e\xd9\x68\x94\x9c\x55\x6a\xba\xf0\x51\xe3\xb2\xdf\x46\x00\x71\xe2\xca\x8a\x6c\xdc\xa9\x8c\x66\x6d\xac\xfd\x6a\xd9\x13\x2f\x93\x71\x19\x0e\x09\xe2\x20\x68\x56\x37\xaf\xbf\x7b\xb4\xca\xb2\x36\xc1\x8f\x87\x09\x7c\x6c\x49\x94\xa8\x83\x60\x47\x1f\xe8\x78\x76\x81\x8e\x6e\x9c\x84\x1d\x38\x08\x5b\x8b\x0a\x1b\xff\xbf\x58\xe4\x4c\x2d\x64\xd2\x78\xa3\x57\x36\xf9\x5b\x2e\x78\x5a\xa4\xd0\xf5\xd6\xec\x67\xbe\xf4\x89\x06\xaa\x6c\xab\x0f\x1c\x1b\x7d\x95\x41\x7b\x5c\xd7\x16\x17\x6a\x51\x6d\x9b\x7b\x55\x44\x11\x63\xd0\x16\x2e\xb4\x70\xbe\x1d\xfb\x27\xf9\x36\x20\x2f\xdb\xf1\x9b\x76\x42\x1c\xa1\x55\x61\x94\x6f\xbf\x69\x34\xc6\x3c\xcf\xba\xe1\xcb\x3f\x9c\x4d\x0e\x03\xbe\x4c\x85\x63\xcb\x5c\x2c\x65\x02\x54\xa5\x78\x93\x51\xd6\x1e\x91\x49\xb7\x37\x3b\x5a\x99\x1c\x5d\xc8\x88\xb6\x5a\x75\xd5\x6f\x66\x74\xe7\xaa\xe7\x68\x0e\x6b\x89\x08\xfe\x77\xd6\x9d\x5b\x73\xb7\xf6\xfa\x6c\xfb\xe3\x40\x00\x62\x07\x5e\xbc\x33\x02\xef\x9c\xdb\xd6\x55\x56\x04\x87\x86\x8b\xeb\x6a\xa5\x25\xc9\x12\x5a\xf6\xa5\x82\x15\xf8\x11\xe4\xc6\xe1\x82\x45\x97\x67\x36\x46\xbb\xa7\x18\xf3\xfa\xe4\x9c\xeb\x45\x31\x1d\x47\x32\xdd\x37\xc7\x18\xff\x6f\x9a\xc8\xe9\x7e\x4a\x95\x66\xb9\x51\x31\xad\x58\x1a\x45\x66\x14\x2e\xe6\xe3\x34\x1e\x8c\xc9\x47\x81\xd5\xf5\x65\x1f\xcc\x00\x5b\xc2\x3c\xdf\xe1\x7c\x4c\x99\xe1\x88\x12\x7c\x07\x01\x84\x9e\x99\xde\xb8\x0d\x50\x73\x6b\x31\xd2\x32\x3e\xfe\xf0\xb1\xf1\x9e\x73\x91\x0e\x9c\x24\x4f\x2d\x06\xde\x59\x2e\x48\x07\xb1\xef\x2d\x8a\x7b\x6f\x8d\x3a\xbb\x2d\xb1\xee\x2d\x44\xbb\xee\x20\xbe\xdd\x45\x6c\xbb\xbb\xb8\xf6\x17\x00\x85\x7e\xca\xf1\xec\x0e\x9d\x7e\x1d\xc5\xb1\x1f\x22\x86\xdd\xc9\x5b\xb7\x8d\x5d\x3f\x5c\xdc\xba\x9b\xd7\xed\xd2\xdc\x78\xaa\xb1\xea\x0e\x9c\xf7\x5d\x3a\xee\x3b\x73\xda\x7f\xb1\xd8\x74\xfb\xb8\xf4\x16\xc4\xa4\x5b\x13\x99\x0b\xae\x39\x4d\x8e\x58\x42\x57\xe7\x2c\x92\x22\x6e\x2c\xc7\x6a\x58\xa4\xfe\xfc\x28\x1c\xd6\x7a\xb0\xaa\x85\x1e\x0b\x6a\x21\xd7\x8d\xdd\x86\x85\x2d\x2e\xca\x61\xd5\x16\x88\x37\xe3\x2c\xb7\x32\x6e\x41\xb6\xc6\x55\x86\x55\x2f\x5d\x2e\xe2\x8f\xf2\x8a\xc8\x99\x66\x82\xec\x71\xe1\xd6\x71\x10\x18\x9b\xa5\xdf\xd2\x6f\x6b\xf3\xed\xcb\x17\xee\xe6\xe7\xe7\x90\x04\xd7\xab\x52\x5f\xde\x3f\x6c\x1f\xf4\x79\x07\xb1\xbd\x71\x56\x24\x55\x27\x31\x3a\x8e\xab\xfc\xe6\x65\x09\x1a\xfd\x12\xc6\xf5\xa7\x8d\x8a\x98\xd8\x4a\xb8\xe7\xb7\x68\xad\x33\x6e\xaa\xaa\x9f\xcf\xb0\xf9\x9c\x3f\xf9\xe2\x70\xd2\xbb\x93\xb7\xcb\x29\xf3\x48\x59\x2b\x5b\xa8\xe8\x3e\xd1\x4c\x95\x5e\xd1\xbd\xc7\x15\xd4\xc6\xfe\x90\xd3\x88\x4d\x3a\xd7\x11\xdc\x71\x22\x71\x91\x53\xcb\x00\xbd\xca\xe7\x0e\x8f\x60\x2c\xc6\xd3\xe4\xeb\x89\xa1\x52\x77\x56\x24\xc9\x0a\x7d\x0e\x95\xea\x6b\x8c\xc2\xd7\x8b\x79\xc1\xf1\xbf\xe1\x29\xa5\x62\x99\xe5\xd2\xca\xcc\xbc\x10\xc2\xf0\xe0\xb2\xf3\x1b\x28\x92\x00\x46\x4d\x2b\x25\xc3\x8a\xcf\xcd\xf4\x8d\xfc\x83\x6a\xe2\x32\x35\xb1\x32\xa0\xf9\xf5\x4c\xe6\x11\x9f\x26\x2b\xb2\xa0\x89\x6f\xf3\x43\xc9\x25\x4f\x12\x3b\xcc\x98\x9c\x33\x8d\x81\x0b\x94\x9d\x89\x14\x73\x98\x1c\x15\xae\xbd\x24\x8b\xcc\x6f\xa3\x84\x51\x51\x64\xf8\x3c\x23\x89\x57\xb2\xc8\xdd\xf3\xc6\x3e\xfc\xe1\x25\xb0\xe0\xc9\x30\x68\x62\x77\xeb\xc2\x96\x2e\x1a\x65\x14\x80\x77\x0e\x7c\x7b\x18\x8e\xe9\xf0\xd1\x55\xd0\xc2\x28\xcb\xe5\x92\xc7\x18\x43\x71\x64\x83\x76\xd9\xd8\xa6\xc8\x9f\x67\x21\xc5\x48\xb0\x39\x05\x45\xc5\x9e\x22\x5c\x33\x1c\x07\x73\x0b\x44\x0c\x8d\x8b\x8c\x86\x2f\xb3\x4a\x39\xff\x92\x63\xcb\xe5\x80\x72\x64\x4f\x48\x22\x21\x53\xb5\x10\x5c\x63\x1b\xff\x45\xa1\x49\x2c\xaf\xc4\xc0\xfa\xac\xb8\x22\x94\x4c\x99\xa6\x41\xae\xa9\x15\x70\x8a\x30\x41\xa7\x89\x59\x73\x48\xc5\xba\xd8\x48\x20\x32\x63\x54\x17\x39\x23\x73\xaa\xd9\x46\x3d\x07\xdf\xf7\x76\xf2\x72\x65\x1d\xac\x33\x52\x08\xc5\x5a\x8a\xf7\xce\x94\xa3\xbf\xfd\xa5\x19\x8f\xe0\x29\x93\x85\x7e\x10\xeb\xef\x6a\xc1\xa3\x45\xa8\xcc\xf2\x94\x29\x22\x8b\x9a\x59\xfc\xd2\xfe\x6c\xf3\x0a\xf5\x26\xe0\xa6\xab\xa9\xfb\x78\x83\xf7\xab\x0e\xc7\x50\xf6\xf7\x86\x0c\xf2\xa3\xd3\xf3\xdf\xdf\x1c\xfc\xeb\xf8\xcd\x98\x1c\xd3\x68\x11\x62\x72\x08\x42\x81\x69\x00\xa3\x58\xd0\x25\x23\x94\x14\x82\xff\xbb\xb0\x61\xe5\x3d\xff\xdb\x41\xa7\x88\xf4\x0d\xa5\xaf\xe1\x36\x8d\x76\xfc\xc6\xa6\x77\x30\x9a\xcd\xd8\x92\x8a\x41\x9b\x9a\x35\xf5\xc9\xc7\xb2\x57\x68\x22\x80\xc2\x05\x89\xf5\x47\xef\x8e\xcf\x21\x61\x3f\xcb\x11\xa9\x04\x32\xbc\xe0\x7b\x18\x69\xca\xcc\x2f\x6c\x7f\xe2\x31\x39\x10\x2b\xfc\x12\xcf\x14\x57\x24\xe1\x4a\x33\x90\x7a\x56\x6d\x73\x51\xf2\x9d\x17\x63\xf8\xdf\x0e\xa1\x71\x9c\x1b\xbd\xce\x27\xae\x45\x6b\x99\xa4\xa8\xf9\xf1\x69\x12\xbc\x80\x60\x1a\xf3\xd4\xde\xca\xd8\xce\x1c\x24\x09\x44\xc8\x50\x0c\x2a\x9d\x53\xcd\xe6\x3c\x22\x29\xcb\xe7\x8c\x64\x54\x47\x0b\x92\xd2\x15\x89\x64\x9e\x17\x19\x76\x33\x88\xa9\xa6\x63\xf2\x5a\xe6\x24\x75\x87\xd8\xec\x79\x23\x87\xcf\x37\x67\x0e\x94\x27\x3b\xfc\x27\x57\xaa\x60\x6a\xff\xe5\x8b\xbf\x7f\xf3\xd7\xbf\x3e\xab\x06\x78\x3e\xb5\x17\xf2\x5e\x82\x06\x78\xd4\xad\x02\xae\x3a\x36\x44\xe4\x62\x9e\x84\xfb\xab\x99\x00\x68\x6b\x65\xb6\xb5\x31\x47\xe5\x1b\x4c\x9a\x9a\x9a\x9d\x34\xe2\x2b\xe7\xd0\x51\xfb\xaa\x52\x0e\x3a\xc3\xca\xf2\x06\x19\x76\x24\x3e\x99\xb8\x83\x69\xf5\x9c\xb4\xd6\xc6\x36\x2b\x73\xa0\x86\xe4\x05\xf9\x8e\x5c\x93\xef\xc0\xd0\xfa\x5b\xdb\x66\x5f\x6d\x4d\xa0\x2e\x52\x9a\x8c\x7d\x7f\x32\xe9\x88\xe2\xbf\x18\xa6\x69\x46\x34\x54\xd5\x92\x4c\xb9\x55\xec\xd9\xb5\x66\xb9\x51\x34\xed\x4a\x3c\x6a\x9b\x34\x33\xc1\x07\xdc\x66\x18\x78\x38\x99\x55\xd3\xa8\xee\xb7\xd1\xcc\xcf\x7f\x94\x4a\x9f\x5a\x2e\x54\x6d\xf8\x53\x8e\x96\x02\xe3\xaf\xb0\x31\x23\x37\x94\x2e\x0f\x98\x22\xb1\x84\xac\x2e\x4c\x71\x5e\xf0\x16\xc9\x1a\xdb\xb3\x8d\xdb\xc5\xef\x2b\xeb\x79\xdb\x4a\xd5\x5c\x29\x60\x03\x59\x15\x2b\xc0\xe8\xca\x64\x6c\xb5\x33\x33\xad\x38\x90\x19\xb7\xa8\x67\xd6\x6b\xe3\xfd\xcd\xb0\x97\xcc\x79\x8a\xa8\xc0\x22\x93\x19\xcb\x73\xcc\x4a\x9f\xae\x5c\x72\x60\xeb\xc5\x6b\x75\x92\xb2\x5c\x6a\x19\xc9\x16\x9d\xdc\xaa\xd1\x6e\x3b\x1c\x10\x21\xc3\xbd\x6b\x29\xff\xfe\x68\x32\x24\x17\x87\x13\xe8\x6e\x75\x7e\x78\x31\xa9\xda\x2c\x3b\x17\x87\x93\x9d\x47\x25\x05\x71\x0a\x1f\xb8\xa8\x1b\x0c\x52\x71\x41\x19\x6d\x72\x94\xd2\x6c\x74\xc9\x56\x0d\x65\x6a\x17\x72\x7d\xe4\x57\xb8\x93\x17\x42\x32\xa7\x34\xbb\xf7\x68\x39\xa3\x31\x7f\xa0\x4a\x2f\x97\x76\xeb\x9f\xb9\xb9\xe4\x2b\x95\x4b\x16\xa3\x96\xee\x7e\xc1\x44\x9c\x49\x6e\xf4\xc5\xbe\x0e\xec\xfe\xbf\xee\xeb\xc0\xee\x7c\xf5\x75\x60\x7d\x1d\xd8\xfa\xb5\x35\x89\xb3\x7d\x1d\xd8\xf3\x8a\xe0\xf7\x75\x60\xf7\xbf\x1e\x3d\x70\xdf\xd7\x81\x6d\xbe\xfa\x3a\xb0\xbe\x0e\xec\x6e\x57\x5f\x07\x76\xff\x6b\xeb\x52\x8e\xfa\x3a\xb0\x7b\x5d\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\x70\xf5\x75\x60\x37\x5c\x7d\x1d\xd8\xfa\xd5\xd7\x81\xdd\xef\xea\xeb\xc0\xfa\x3a\xb0\x67\x9d\x1e\x4b\xfa\x3a\x30\x7b\xf5\x75\x60\xcf\x22\x09\x90\xf4\x75\x60\x77\xba\xfa\x3a\xb0\xbe\x0e\xac\xc9\xd5\xd7\x81\x3d\x17\xa7\x4c\x5f\x07\xd6\xd7\x81\xfd\x71\x14\xdd\xbe\x0e\xac\xaf\x03\xeb\xeb\xc0\xfa\x3a\xb0\x5b\x67\xd1\xd7\x81\x3d\x07\x13\x30\x67\x8a\xff\x87\x4d\x64\xc2\xa3\x55\xeb\x2c\xc5\x33\xdb\xf8\x58\xd9\x61\x49\x06\xe3\x06\xa9\x55\x2d\x2a\x4f\xb6\xac\xe0\xe6\x2c\x20\x5c\x58\x78\xe3\x9b\x3f\x7f\x01\x12\x6c\x45\xf1\x8d\x7b\xc1\xd3\xe6\x91\x94\x91\x6b\x40\x80\xe4\x6b\xe6\xb7\x68\x6d\x22\x84\x2f\xd2\x51\x3e\xf8\x6e\x58\x11\xe9\x77\x82\x96\x9e\x83\xf1\x1b\x37\x08\xcd\xb2\x84\x33\x35\x26\xe7\xbe\x01\x0f\x70\x2f\xf5\x8a\x44\x59\x31\x24\x29\x4b\x65\xbe\x6a\x61\x4d\x74\xa0\x70\x56\x56\xad\x23\x92\x9d\xe1\x98\x8e\x0c\xc6\x88\xc8\xb2\x64\x85\xca\x54\x59\x4a\xea\xa9\xc6\x1d\x73\x89\x41\xdd\xa9\x65\x79\x70\x5d\x31\xc3\x4e\xa5\x3e\xb3\x1b\xfe\xd1\x72\xed\x6f\xca\x2a\xa7\x5a\xa6\x3c\x6a\xc2\xb0\x91\xc7\xb6\xcf\x29\x3f\x94\x69\x56\x68\x56\x61\xdb\x48\x2c\xd4\xe4\xb8\x0a\x4d\xb8\xf6\xd9\xe0\x91\x14\x33\x3e\xb7\xaa\xf8\x3e\x76\x74\x1f\xf9\xf7\x19\x05\x5d\xd4\x9f\x60\x2a\x78\x94\x50\xde\x3c\x6e\x5f\x4d\xad\x3a\x84\xb1\xa0\x42\xb7\x4c\xae\x82\x1c\x5d\x4f\xad\xa1\x4f\x5c\xe2\x78\x4c\xc6\xee\x2b\xfc\xf1\x10\x33\x7d\x8d\xfd\x01\x4a\xe7\x86\x05\xfd\x28\x4a\xf5\x58\x10\x9a\x64\x8b\xdb\x15\x64\x33\x91\xa3\x95\xa0\x29\x8f\xdc\x8e\x39\x48\x12\x19\xa1\x41\x54\x55\x91\xdd\xd8\x38\x9e\x79\x48\x9a\x16\x9a\x4e\x13\x36\x26\x27\x58\x21\x24\x45\xb2\x32\xbb\x49\x31\xed\x02\x1f\x76\xf9\x1b\xe7\x60\xb5\x4f\xc0\x68\x99\x7c\xb1\x51\x1b\x82\x05\xc1\x6a\x28\x26\xcc\x29\x93\x82\x11\x26\x74\xbe\x32\x6b\x37\x91\xf1\xb9\x59\xbe\xca\xdd\xad\x8b\xa4\x5a\xe6\x5c\x74\x91\x6f\xd1\x32\xd7\xa2\x9b\x0c\x89\xf6\xd9\x11\xeb\x61\xde\xa0\x6e\x31\x4c\x7c\xac\xac\x6a\x26\xe3\xf1\x86\x53\xe9\x54\x83\x89\x8c\x8d\x80\xcb\x59\xd8\x0a\xcf\xda\x87\x70\x40\x52\x7a\x09\x26\x36\xd5\xa5\xe4\xa3\x4b\xca\x13\x73\x84\x36\xd4\xe3\xb7\x4b\x9c\xe8\x40\x35\xe8\xba\x18\x8c\xb4\xdd\x41\x5d\x16\x73\x11\xe8\xdc\x95\xf2\x66\xe8\x0f\x64\x4d\xf0\xbe\x81\xb1\x82\x74\x2c\xb3\x27\x52\x7a\x0d\x36\x2b\x4d\x65\x21\x34\x56\x78\xa1\x7c\xf6\x4c\x1f\x93\xd6\xb6\x4e\xf2\x92\x6e\xd8\x0e\x8d\x5d\x09\xcc\xa4\x8b\x6c\x72\xaa\x35\xcb\xc5\x2b\xf2\x5f\x7b\x1f\xbf\xfe\x34\x1a\x7c\xbf\xb7\xf7\xe1\xc5\xe8\x1f\xbf\x7d\xbd\xf7\x71\x0c\xff\xf8\xf3\xe0\xfb\xc1\x27\xf7\xc7\xd7\x83\xc1\xde\xde\x87\x9f\xde\xfe\x70\x31\x39\xfe\x8d\x0f\x3e\x7d\x10\x45\x7a\x89\x7f\x7d\xda\xfb\xc0\x8e\x7f\xbb\xe3\x20\x83\xc1\xf7\x5f\x35\x9e\x72\x6b\x1f\x75\x77\x1e\xea\x8e\xfc\xd3\x5f\xc4\x3b\x6d\xf3\x38\x3b\x3a\x8b\x36\x07\x7d\xed\x34\x5a\x0f\xd2\x6d\xa7\xd1\x49\x49\x30\x44\xfc\x38\x5c\x11\x99\x72\x6d\x0c\x38\xa3\xd6\xd0\xb0\xf2\xac\x66\x9e\x58\x3e\x00\xb5\x97\x14\x4a\xc4\x82\xaa\xad\xc0\xaa\x91\xce\x15\x0b\xe6\x91\x20\x3c\xcd\x12\x96\x32\xa1\xe1\x3c\x8f\x9c\x26\x08\xf6\xe2\xb8\x9c\x49\x84\x1a\x3b\xbb\x8e\x18\x8b\xed\xc3\x7a\xd6\xf1\xf9\xab\x67\x1d\xcf\x91\x75\xb4\x76\x5e\xd4\xf9\x46\x30\x9c\x35\xc6\x94\xf3\xfb\x80\x47\xc3\x57\x99\xc8\x19\x44\x35\x96\x3c\x2e\x68\x12\xe2\x5a\x38\x84\x85\x71\x68\x2c\xa5\x74\xb5\x66\x1b\x71\xc1\x43\x40\x8c\xa1\x8f\x3b\xc1\x8d\x56\x2b\x28\xbd\xdd\x3b\x07\xc9\x15\x5d\xa9\x1d\xc4\x4e\x12\x52\x8c\x6a\x03\x10\x99\xbb\x68\x55\xa8\x7e\x6e\x28\x99\x59\x7b\x99\x6a\xc9\x8c\x55\x66\x77\x77\x95\xbf\xd3\xf9\xb3\xec\x0c\xcb\xac\x2d\xb3\x2d\x20\xd2\xa5\x9d\x35\x59\xa5\x21\x2d\x27\xee\xdd\xa5\xd5\x79\x63\x84\x0a\x90\x28\xcc\x97\x33\x69\x5e\x1c\x60\xae\x66\x33\x16\xe9\x57\xb6\xf6\x67\xc3\x6f\x30\xf7\x45\x73\x51\xd0\x24\x59\x05\xfd\x4f\xa5\x20\xec\x9a\x6b\x52\x08\xcd\x13\x43\x49\x92\xb3\x79\x91\xd0\xd0\x1e\xb5\x4f\x74\x41\xc8\x78\x4c\xde\x09\xa3\x8f\xdf\x72\xb3\x11\x16\x09\xd3\x86\x8a\x14\x8a\x79\xab\xe4\x87\x10\x60\x65\x43\x96\xaf\xee\xe6\xeb\xc3\x58\x76\x77\x94\x5d\xb2\x63\x3e\x9b\x99\x51\xa0\x94\x5f\xc8\x3c\xa5\xeb\x4f\xb0\x75\xc8\x98\x87\x15\x22\x71\x00\x26\xdb\x8e\xb1\x1f\x22\x9a\xef\x84\xfe\x80\x83\x44\x2f\x64\x31\x5f\x6c\xa4\xa2\xd2\x10\x74\x33\x13\x56\x2e\x3c\x5a\xbf\xc5\xc8\x1d\x11\x31\x14\x73\x92\xe1\x7e\xba\xa2\x5c\xaf\x7b\xbf\x31\x77\x02\x69\xe4\x52\xf8\x20\x8a\xc9\xe2\x20\xf3\x51\xb0\x6b\x5d\x7b\xca\x98\x9c\x60\xfd\xca\xf0\xa6\x3b\xfc\x24\x83\xc8\xa1\x8b\xf5\xae\xbf\x17\xf7\x99\x84\x00\xd4\x81\x37\x52\xb1\x72\x59\x4d\x10\x15\xc4\x84\x43\x9f\x30\x95\xac\xca\xf5\x6d\xe4\x90\x6d\xc5\x20\x15\x8b\x8a\x9c\xeb\xd5\xa1\x14\x9a\x5d\x37\xca\xec\xa8\x72\xb2\xf3\xea\x80\x15\x5e\xe6\x1e\x46\x64\x86\x95\xe8\x35\xa8\xbf\x85\x2c\x92\x18\xe0\x25\x0a\x01\xbb\x1a\x71\x83\x98\xc6\xe5\x01\xce\x02\x56\x6f\xfd\x21\x2e\x8e\x8c\xe1\xed\x7f\x17\x7c\x49\x13\x26\x74\xf0\x8b\x09\x44\x4e\xc3\x1f\xdd\x55\x77\xd1\x54\x5d\x96\x8a\x0b\x1b\x65\x32\x2e\xf5\x94\x7d\xf7\x4a\xf0\x11\xbb\xd6\x4f\xd1\xd9\x08\x1c\x7f\x92\xf3\x25\x4f\xd8\x9c\x1d\xab\x88\x26\xa0\x9f\x75\xa3\x12\x1f\xdc\x30\x3a\x2c\x7c\x2e\x13\x65\x64\x87\x51\x49\x8d\xf4\xc2\xd4\x03\xf0\xe8\xcd\x29\x17\x88\xd4\x97\xb9\x1f\x2b\xcc\x61\x30\x5a\x6e\x46\x73\xb3\xc0\x3e\x57\x01\x98\xda\x54\xca\xc4\x62\x30\xc0\xa9\xb2\xe3\x5b\x34\x12\x21\x7f\x17\xec\xea\x77\x33\x9a\x22\xb3\x84\xce\x4b\xe6\xc8\xf4\x5a\x96\x51\x39\xf4\x8d\x2f\x00\x00\x07\x85\x61\xdd\x86\xd7\x96\x09\x1b\x21\x3f\x78\x45\x5e\x0e\x60\x3b\x53\x45\xfc\x18\x31\xf9\x66\x00\x5c\xe0\xf0\x60\xf2\xfb\xf9\xaf\xe7\xbf\x1f\x1c\xbd\x3d\x39\x25\xa7\x52\x33\xd4\xdd\x03\x41\x1a\x79\x47\xb9\x99\xa5\x8f\x63\x8c\xa5\x1a\x83\xaf\x08\xaa\x68\x44\x2c\xaf\x54\xe3\x68\x0e\x6e\x3f\x43\x3c\x46\x45\x33\x77\x35\xcd\xe8\x94\x27\xbc\x8d\xa6\xbc\x56\xd9\x12\x0e\x0a\xb2\x26\x8e\xf7\xe3\x5c\x66\x48\x04\x97\x5c\x13\x38\x7a\x2b\xe1\xfb\xb0\x42\x17\xd6\x77\x56\x1d\x70\x9e\x53\xa1\x4b\xb5\xa3\x5c\xb3\xdc\x08\x6f\xc0\xa3\x6a\xb9\x1c\x8f\x67\xc0\x74\xe1\xed\xa4\x71\x77\xf8\x2a\x07\x71\xcc\xe2\x0a\xf9\x5b\x67\x31\x6e\x5b\x5d\xe4\xa1\x7b\xb9\x20\x7c\x4f\x26\xef\xce\x4f\xfe\x6f\x6d\x1f\xaf\xb2\x76\x05\x5a\xdd\x60\x75\xe5\x32\xeb\x6c\x75\xcf\x2c\x16\x54\xbf\xbe\x5b\xb1\xbe\x5e\x5a\x76\x53\x16\x70\x56\x88\x2a\xc8\x72\x39\x3e\x49\x65\xcc\xc6\x64\xe2\xf3\x13\xab\xdf\x86\xf6\x43\xce\x88\xb9\x45\x68\x0e\x16\x53\xa0\xa2\x69\x89\xb8\x48\x15\xb4\xc8\x90\x91\xcf\x68\xa2\x1e\x9b\x1b\xb7\x91\x8d\x46\x8f\x78\x2b\x0b\xd1\x4d\xde\xbf\x1f\x8d\xc4\x4c\x48\x6d\x15\x6b\x33\x4b\x40\xe0\xcc\x65\x44\xd0\xc7\x18\x14\x81\x55\xe4\x9b\xc2\x1c\x49\x27\x1a\xb9\x72\xc4\x9e\xf8\x91\x31\xbd\xa4\x50\xac\xae\xa0\x5b\xd1\x58\x7a\x1d\xcd\xe8\x39\xa3\x31\x38\x0e\x32\xaa\x17\x68\x2a\xa6\x54\x5d\xb2\x18\x3f\xb0\xaa\x99\x0f\x00\x83\x8d\xef\x1e\x75\x61\xe6\xed\x62\xbd\xa0\x92\x61\x65\x09\x44\x89\x8d\x69\xfc\xa8\xab\xde\xe2\x10\x1a\xa2\xbc\x13\xc9\xea\x4c\x4a\xfd\xda\x03\x7b\x75\xb2\x03\x7e\xb1\xda\x72\x35\x00\x0f\xea\x24\x85\xe7\x8e\x60\x35\xe0\x50\x85\x98\x62\x47\xe5\x8a\x3f\xf5\x23\x95\x17\xe2\x40\xfd\x90\xcb\xa2\xb1\x10\x5b\x53\x36\x7f\x38\x39\x02\x56\x54\xd8\x14\x69\xa1\xf3\x15\x80\x19\xae\x23\xd2\x7b\xc3\xe0\xbd\x4d\xf2\x0e\xcf\x44\x99\x8f\x4b\xde\xd2\x15\xa1\x89\x92\x8e\x96\x36\x3c\x5f\xb7\x42\xad\x89\x6b\xbe\x9e\x4a\xbd\x58\xb3\x6d\xcd\x81\x5a\xff\xdd\x30\xc8\x98\x2e\xf3\x9a\xb8\x58\xfb\xb9\x86\xd8\x6f\x96\xb3\x88\xc5\x4c\x44\x8f\xbd\xec\x8f\x9d\x68\x0c\x5b\xe7\x54\x0a\x73\x30\x3b\xd9\x3c\x27\x3e\xc3\xdc\x92\x34\xdc\x2a\x10\xdc\xb7\xd6\x1f\x05\xd7\x29\x1c\xcb\x42\x81\xeb\x69\x06\xe6\x23\xae\xe4\x4f\xc5\x94\x25\x86\xf2\xc6\x24\x05\x3c\x64\xaa\xd1\x9d\xc1\x53\x3a\x67\x84\x6a\xbf\xd3\xb4\x24\x4c\xa8\x22\xb7\x8b\x18\xba\xc7\xec\xa3\xde\x9f\x1c\x91\x17\x64\xcf\x3c\x6b\x00\xfb\x67\x46\x79\x02\xc9\xec\xe0\x53\xad\xd9\xa8\x33\x37\x04\x4c\x09\x36\x2f\x91\x39\x32\x89\x21\x11\x92\xa8\x22\x5a\xb8\x39\x19\xbb\xd7\x99\xcd\xb6\x00\x13\x22\xc8\xdb\xb9\xd7\x1f\x97\x43\xbd\x57\x2c\xef\x8c\x41\xbd\x6f\xc0\xa0\x42\x35\xca\xec\xb9\x2a\xf5\x70\x63\xa5\x4c\xd3\x98\x6a\x6a\x19\x97\xbb\x61\x6b\x97\xf4\x8f\xcd\xbe\x14\x7b\xc3\x45\x71\x8d\x05\x4f\xdd\xb9\x5a\xce\x8f\x61\x58\x12\x39\xaa\xc3\xaa\x63\x12\x71\xec\xbc\x29\xa1\xd7\xbc\xb2\x57\x86\x37\xa8\x89\xc0\x27\x28\x26\xf5\x31\xa3\x9c\x50\x11\xcb\x74\xed\x61\x46\x89\x64\x95\x5e\x2e\x63\xd2\xef\xbe\xea\xb5\x25\x4e\xa1\x84\x2d\x59\x0b\xb4\xf3\x7a\xef\x1a\x33\x9a\x21\x8e\xdb\x11\x30\x3c\x49\xe8\x94\x25\x36\xe1\x14\xd3\xd8\xd7\x77\xe0\x63\x57\xc1\xe6\x32\xe9\x0e\xb6\xe3\x4c\x26\x0c\xcb\xca\x1c\x21\xcc\xf0\x4f\x82\x0e\x30\x48\x57\x74\x00\x6b\xb0\x42\x07\xb0\x6b\x9f\x02\x1d\x8a\x16\xa2\x9e\xd4\xe9\x60\xf4\x86\x2a\x1d\x40\x78\x6f\x3b\x1d\x14\x8b\x22\x99\x66\x93\x5c\x1a\xb3\xb3\x33\xd9\x64\x87\x2d\x63\x86\xe8\xd8\xd8\x90\x82\x0e\xb2\xa0\x7a\x33\xcd\x83\x82\x52\xaa\x51\x48\xb8\xaa\xd2\xff\x15\xc8\x2c\x60\x3d\x75\x41\xe6\x46\xa9\x84\x17\xcd\x2f\xed\x17\x4f\x59\x1c\x74\x81\xc9\xd0\xc2\xd9\xd9\x89\x34\x92\x11\x4d\xa0\x9b\x4d\xbb\x2d\x47\xea\xdb\xae\x3e\x70\x50\x46\x0c\x31\x4a\xf8\x2c\xa8\x98\xa0\xe0\x68\x71\x2e\x4c\x21\x63\x16\xc4\xb2\x31\x0b\xfb\x02\xcb\x4d\xe1\x3e\x57\xc1\x6c\xf4\x0a\x17\x56\x8e\x2b\xbf\xd6\xd2\x62\xb2\xbf\xf5\x3d\x72\xcc\x04\x99\x80\x7c\x86\x8c\xea\xc5\x90\xe4\x2c\xc1\xda\x67\xcb\x04\x2e\xd1\x82\xdc\x85\x23\xe1\x06\x75\xe7\xc1\x3d\xda\x15\x58\x94\x23\x83\xf6\x34\x43\x4e\xcb\x15\xd9\x79\xe3\xde\x7d\xc7\xde\x73\xfa\xee\x22\x4c\x1e\xa2\x62\x85\x19\x84\x98\x81\xf3\xd8\x8c\xb7\x53\x01\xb4\x83\x54\xf0\x8b\x8d\x8e\xd0\x4b\x2e\x62\x5b\x45\x5c\xa1\xa5\x6f\x5a\x87\x6a\x32\xd4\xa7\xf3\x38\x64\x3d\xaf\xc8\x47\x41\x3c\x41\xc9\xa8\xf1\xee\x39\x43\x8d\xda\xb9\xf0\x46\xb7\xfb\x65\xfd\x43\xea\xc3\xbc\x17\xb0\x35\xcc\x73\x47\xc6\xb0\x5f\xbf\xcf\xbd\xcb\xa3\xe2\x16\x5b\xe6\xd8\xb5\x91\xf3\x0b\x0e\xeb\x34\xfe\xc8\x6c\x69\xcd\xc5\x5c\x85\x86\x0e\x4d\x92\x8a\xaf\x7c\x93\xa5\xe3\x56\xd8\xb7\x28\x5c\xb7\x30\x6a\xe8\x07\x4f\xc5\x4a\x49\x8c\xb6\xf1\xc4\x6d\x94\x79\xaa\xe8\x61\x6e\x28\xa1\x39\x4d\xce\xb3\xe6\x3d\x55\xc8\x1a\x7e\xff\xdb\xf3\x83\xea\xd0\x20\xcb\x6d\xe9\x0d\x83\xef\x09\x8d\x53\xae\x14\xf8\xc9\xd8\x74\x21\xe5\x25\xd9\xbb\xb5\xb5\xe4\x48\xf1\xb9\xda\xb7\x7b\x7e\x64\x66\x3f\x20\x5c\x24\x3e\x69\x0a\xcc\x64\xa1\x7d\xb5\x0f\x3c\x24\xf2\xb3\x80\x35\xb4\x8d\xb6\x6c\x2e\xc3\xfa\x34\xb1\xb5\x96\xd9\x05\x8f\xce\xb0\xd7\x97\xa7\x5d\xc5\xf4\x67\x97\xe8\xd4\xee\xed\x3a\xac\xfc\x46\x3a\xa2\x72\xf9\xe8\x44\xb2\xba\x47\xc4\x54\x77\x68\xd6\x3f\x96\x63\x92\x98\x61\xfe\x29\x83\xe4\x28\x7a\x63\x0e\x1e\xb8\xad\x77\x01\xa3\xca\xfe\x74\xb7\x9a\xe3\x99\x18\x6a\x52\x48\xda\x55\x61\xc0\xb7\x6c\xf2\xe6\x31\x79\x31\xab\xd6\x28\x2c\xe1\x4c\x90\xbd\xed\x95\x2d\x6d\x5c\xfa\xb1\x96\xae\x49\x5c\xca\xaf\xcd\x53\xc2\x5f\xd5\x52\x53\x85\x14\xa3\xcd\x5f\x0f\xc6\xe4\x44\xf8\x84\xfe\xa1\x79\xdb\xf0\x46\x97\xc1\xa5\x0d\x33\x0c\x1b\x0c\xc2\xfc\x43\xff\x93\x51\xb2\xf2\xa2\x83\x9d\xd1\xc6\xab\x4c\x42\xcf\x72\xa7\xc7\x06\x3c\xcc\x76\x50\x23\x62\x9c\xac\x6c\xe3\x71\x36\xb7\x7c\x29\xaf\xf3\xd3\x88\x23\x90\xd6\xd9\xb9\x41\xda\x70\x07\xa9\xb9\x61\x12\x32\x5f\x8f\x5b\x4d\x64\xbc\x9e\x9b\x6c\xc1\x59\x3d\x44\x42\xa0\x0b\x09\x69\x2d\x81\x00\x25\xd5\xf6\xca\x8a\x6d\x0a\xbc\x35\xd1\x31\xbd\xb9\x3a\x72\x89\x2f\x15\xb4\x89\x1b\x96\x05\xad\xbe\xd3\x9c\xcf\xa8\xfe\x1f\x38\x94\x3e\x9f\xd3\xc1\x46\x4e\xfc\xcf\x99\xab\x7d\xb0\x3d\x23\xa1\x56\x5d\x4b\xe7\x01\xb0\xa9\xee\x36\x6f\xd4\x18\x60\x34\xa7\xa9\x61\x85\x8a\x58\x12\x4c\xd9\x9c\x63\x5e\xa1\xe7\x6b\xbb\x41\xb2\xfc\x10\xd5\x26\xae\x49\xca\xe7\x0b\xdc\x28\x84\x02\xc0\x16\x71\xb1\xb9\x44\xd2\x18\x7a\x4d\x43\x59\x04\xcd\x53\xc3\x5f\x69\xb4\x80\x40\x1f\x15\x24\x2e\x72\x68\x9f\xa4\x19\x8d\x57\x23\xa5\xa9\x36\x1a\x25\xcb\xad\x5d\xe6\xe6\xdf\xf7\xca\xbb\xf5\xea\x7b\xe5\xdd\xf1\xea\x7b\xe5\xf5\xbd\xf2\xd6\xaf\xad\x49\xb2\xec\x7b\xe5\x3d\x2f\x94\xe3\xbe\x57\xde\xfd\xaf\x47\x07\x37\xee\x7b\xe5\x6d\xbe\xfa\x5e\x79\x7d\xaf\xbc\xbb\x5d\x7d\xaf\xbc\xfb\x5f\x5b\x07\xcb\xde\xf7\xca\xbb\xd7\xd5\xf7\xca\x5b\xbf\xfa\x5e\x79\x37\x5c\x7d\xaf\xbc\x1b\xae\xbe\x57\xde\xfa\xd5\xf7\xca\xbb\xdf\xd5\xf7\xca\xeb\x7b\xe5\x3d\xeb\x16\x22\xa4\xef\x95\x67\xaf\xbe\x57\xde\xb3\x68\x94\x40\xfa\x5e\x79\x77\xba\xfa\x5e\x79\x7d\xaf\xbc\x26\x57\xdf\x2b\xef\xb9\x38\x65\xfa\x5e\x79\x7d\xaf\xbc\x3f\x8e\xa2\xdb\xf7\xca\xeb\x7b\xe5\xf5\xbd\xf2\xfa\x5e\x79\xb7\xce\xa2\xef\x95\xf7\x1c\x4c\x40\xa5\x63\xde\x08\x62\xf3\x2e\x68\x40\x36\x8d\x3b\x28\xbe\x9f\x16\xb3\x19\xcb\x81\x73\xc1\x93\xd7\xd2\xaa\x4a\xe0\xc3\x7a\x28\x97\xe9\x21\x00\x0b\xd9\x8a\x97\x1b\x7e\x6e\xab\xfd\x01\x0a\x33\x67\x0a\xb0\x70\x04\x39\x7e\xf7\x7a\x03\xf4\x50\xe3\x7c\xc3\xa6\xd9\xd3\x30\xe7\x77\xa2\x59\x14\xfe\x06\x82\x6f\xaa\xc0\xb2\x74\x8f\x12\xa9\x6c\xea\x3b\x10\x2b\x5a\x50\x21\x98\xb3\xf7\xb8\x06\x3f\xca\x94\x31\x41\x64\xc6\x6c\x0c\x9c\x12\xc5\xc5\x3c\x61\x84\x6a\x4d\xa3\xc5\xd8\x3c\x49\x38\x62\x97\x79\xea\xf6\x13\xa5\x73\x46\x53\x24\x7a\xce\x52\xca\x71\x28\x42\xa3\x5c\x2a\x45\xd2\x22\xd1\x3c\xf3\x83\x11\xc5\xa0\x24\x05\x05\x95\x27\x06\xe4\xcb\x95\xc9\xed\xc3\xf2\x69\x76\x5a\x52\xd4\x91\x90\x87\xd0\x57\x20\xcd\xf4\xca\x67\xf8\x32\x32\xe3\xb9\xd2\x24\x4a\x38\x48\x6b\x78\x22\x16\x27\xc3\x78\x1e\x5f\x5c\xd8\x99\x2a\x3b\x55\x11\x83\xda\x9a\x69\x85\xf9\xb2\xe5\x80\x76\xa8\x98\x2b\xab\xe6\xab\x21\xa1\x0e\x98\x0c\x09\xed\x66\x0a\xa4\x76\x92\x05\x47\xb7\x1f\x05\xc3\x85\x00\xcd\x3e\xa1\xb8\xdc\xe8\x80\x3c\xe6\x36\xe7\xb0\x52\x0f\x51\x2a\x14\xb6\x7d\x4e\xed\x18\xc0\x02\x08\xb6\x34\x7b\x80\x45\xcc\xc8\x57\x7a\xc3\xae\x7f\xf0\x4d\x1f\x08\xc5\xb7\x4c\x29\x3a\x67\x93\x86\x81\x86\x9b\x2c\x32\x88\x35\x94\x0b\x03\x5b\x21\xa9\xb4\x28\x0c\xf3\x36\xab\x6a\x10\x49\x71\x4e\x5e\xf9\xb9\xca\xb9\xd6\x0c\x16\x15\x20\xec\x20\x22\x5a\xaf\x70\xdf\xad\x65\x7f\xbe\x75\x83\x94\x3f\x36\x4c\x5d\xc4\x98\x8b\x39\x65\x64\x9a\x73\x36\x23\x33\x0e\x09\x9e\x90\x72\x39\x44\x44\x23\x8a\x5e\x00\xa5\x8c\xbd\x2b\x85\xd3\x65\xdd\xbc\xc6\xe4\x17\x3b\x31\x9d\x17\x22\xa2\x01\x58\x2c\xd4\x68\xf2\x19\x99\x43\xca\xa6\xd5\x16\xff\xf2\xe2\x1f\x7f\x23\xd3\x95\x11\x69\xa0\x59\x69\xa9\x69\xe2\x5f\x32\x61\x62\x6e\x68\x85\xc7\xb3\x5a\x65\xe8\x29\x00\x5d\x81\x70\xe2\x2f\xbf\xb9\x9c\x56\x65\xec\x7e\xcc\x96\xfb\x01\xfd\x46\x89\x9c\x6f\xea\xa3\xf7\xe0\x10\xe2\x1b\xb6\x59\x37\x5d\x11\x1c\xb4\x16\x59\xc8\x2b\xd4\xf5\x37\xec\x9e\xb2\x60\x29\x93\x59\x91\xa0\xd3\xf9\xb5\xaf\xcf\x2d\x14\x5b\xaf\xa2\xdb\x78\x2e\xc0\x4d\x6a\x87\xa8\x03\x93\x63\xa6\xae\x7b\xa4\xb4\x55\x27\xd6\x91\xe7\x11\xb6\xc0\x10\x7a\x4d\x93\x64\x4a\xa3\xcb\x0b\xf9\x46\xce\xd5\x3b\x71\x9c\xe7\x32\xaf\xce\x25\xa1\x86\x5b\x2e\x0a\x71\x89\x9d\x60\x3c\x06\x81\x9c\xdb\x50\xae\x2b\x71\xd8\xf4\xc2\x58\x90\xee\x98\xf0\x7a\x63\x04\x76\xcd\x4b\x5b\x47\x10\x66\x9e\x8f\x3b\x32\x1c\x5f\x85\x9b\xed\x9b\x17\x7f\xf9\x3b\x6e\x5d\x22\x73\xf2\xf7\x17\x90\xcd\xad\x86\x78\x88\x81\xb7\x19\x41\x91\xd2\x24\x31\x66\x43\xb8\x29\x0d\xa1\x37\x6d\xc2\x07\xdf\x83\xba\xfd\x76\xbb\xb3\x2a\x75\x71\xf1\x2b\xf6\xd1\xd0\x8a\x25\xb3\x21\xd6\x2b\x79\xb3\x66\x17\x04\xc3\xae\xe5\x3e\x50\x34\xb6\x05\x0a\xd0\x52\x26\x45\xca\x8e\xd8\x92\x77\xd1\xec\xb3\x32\x9a\x33\xf5\x13\xae\xa0\x34\x6c\x9a\xc8\xe8\x92\xc4\xf6\xcb\x20\xbf\xa5\x0e\xb5\xfd\x74\xfb\x36\x87\xef\x5f\xc9\xed\x49\x69\x96\xf9\xea\xa1\x9c\x5e\x55\x88\x01\x67\x12\x0a\xfe\x9f\x7e\xdf\x66\x7c\x23\xc3\x37\x1b\x0f\xd1\x38\x21\xa8\xbd\x8f\xba\x9c\x7d\x47\xdd\x39\xcb\x01\xdd\x69\xc8\xe0\xdf\x58\x6f\xb2\x56\x2f\xe9\x4b\xee\xfc\xc6\x40\x05\xc0\x6c\x1f\x60\xc9\x8f\xd6\x5f\x98\xb4\x4e\x6c\xaa\xd0\x45\xdc\xd2\xe2\x92\x92\x8c\xe5\x8a\x2b\x23\x97\x7f\x86\x03\x85\xbd\x4d\x4b\x17\xe0\xe3\x10\x01\x0f\x37\xe0\x13\xb7\xe7\x94\x13\x19\xdb\x01\x81\x15\x22\x36\xf3\x06\xb5\xb6\xaa\xd5\x76\x28\x50\x1f\x9b\x55\xfe\x5c\x52\xb3\xca\x29\xcd\x27\x9e\x55\xe2\x5d\xcf\x89\x41\xc2\xfb\x3d\x55\xfe\xe8\x27\xdf\x11\x1b\x00\xc6\x68\x17\xb7\xca\x09\x2b\xc6\x23\x1e\x94\x40\xa5\xb7\x76\xe0\x98\x60\x14\xdc\x9c\x09\xfb\x53\xb2\xfb\x6a\xf7\x51\x99\x24\x92\x28\x97\x19\x9d\xb7\x6a\x96\x53\xa3\x54\x7d\xd8\x10\xaa\xc1\x98\x41\xf0\xbd\xc7\x35\x83\xbb\x58\x5c\x22\xd1\x00\xce\x10\x46\x47\x1d\x81\x5d\x6f\x37\xd0\x6d\xaf\xe8\x8a\xd0\x5c\x16\x22\xb6\xfe\x25\xef\xe0\x7b\x5b\x7b\xf0\xa9\x14\xac\x6c\x22\x5c\x6d\xbf\x0d\x1e\x7d\x2e\xc8\xcb\xf1\xcb\x17\xcf\x45\x52\xc1\x1b\xd6\x24\xd5\xa9\x97\x54\xc8\x9f\x1e\xf5\x5d\x1d\xa4\x7c\x47\xef\xfb\xd6\xba\x58\x4a\xc4\x78\xee\xf0\xa8\xe1\xa3\xab\x9c\x6b\x16\xf4\x0a\xdd\x03\xc3\xc5\xd8\x87\x01\x5e\xc3\x60\x53\xab\x86\x96\x44\x6a\x07\x90\xa1\x8a\xe9\x17\xe4\x5b\x96\x41\xc1\x71\xdb\xe4\xe1\x52\xb7\xb0\xb0\x90\x50\x3b\x3b\x64\x0f\xef\xdc\xc5\x52\xe7\xc1\xa3\x6e\x2d\x4b\xb4\xe3\xeb\xac\x05\x88\x65\xad\xaa\x3e\xa3\xe0\x83\xcb\x3a\xa4\xe0\xbf\xd8\x82\x2e\x19\x94\x78\xf3\x84\xe6\x09\xc4\x1c\xcf\x71\xee\x64\x5a\x68\xc2\xc4\x92\xe7\x52\xa4\x4c\x68\x02\x39\xf0\xd3\x84\x85\xad\xf2\xbf\xda\xfb\xf9\xe0\x0c\x12\x1a\x06\x16\xac\xc2\xce\xb2\x50\xae\x89\x64\x38\x93\x60\xb8\xcf\x2e\x9f\x9b\x87\xa1\x21\xf0\x5c\x37\x2f\xf3\x9c\xb4\xd0\xd8\x29\x92\x5d\x47\x49\xa1\xf8\xf2\xb1\x38\x89\xad\xbd\x3f\xe2\x8d\xd6\xb9\x86\x03\x50\x12\x6a\xad\xa4\x1f\x5c\xeb\x1b\xca\x00\xd7\x02\x26\xbb\xca\x97\x06\x86\x31\x70\xeb\x7a\xb2\x28\x1b\x98\x3e\xe7\x20\x0d\xd7\x54\x08\x40\x94\x79\x5c\x27\x94\x90\x31\xbb\x3f\x1e\x4f\x35\xbd\xc7\x0e\x81\x31\xf3\xa0\x4e\x50\x45\x0b\x16\x17\x89\x6d\xee\x0f\xe8\xa3\xc6\x7c\xa0\x25\x8e\x9d\x80\x36\x3c\x27\x33\x0f\x76\x20\x46\xe0\x1c\x44\x9a\xbb\xdf\xe7\x0e\x1a\xc1\x7d\xa0\x6a\x23\x82\x51\x6a\xc6\x1a\x12\xaa\x54\x91\xe2\x91\xc0\x0e\x03\x33\xae\x95\xef\x55\xed\xb4\x63\x73\x30\xee\x59\xb6\xd5\x82\xbe\xe7\x2c\x81\xcd\xd5\x82\xc6\xbb\xa7\xc1\x38\x48\x68\xe5\xfe\xb2\x1b\xce\x26\x4c\x40\xb4\xcd\xe7\x71\x4a\xf0\x92\xce\x38\x74\x29\xa2\x96\xde\xe7\x1b\x7e\x89\xaa\x03\xde\x01\xc0\x31\x74\xca\x12\x55\x1f\x68\x5a\x2e\x8a\x85\xfd\xb4\x84\x6f\xd9\x4e\x9b\x2a\xc5\xe7\x02\x1a\x54\x9a\xd1\xee\xd9\x8a\xb2\xb1\xcd\xd4\x45\xbb\xec\xc6\x5c\xad\x92\x85\x95\xd2\x6c\x64\xad\x5e\x2d\x53\x1e\xdd\x63\x24\x79\xcf\x29\xd7\x2a\xb2\x2b\x95\xbe\xef\xce\xd7\x3c\x3e\x2a\xf0\x6a\x8c\xc9\xb9\x4c\x6d\x8a\x93\x08\xda\x64\xb9\x6e\xa5\x46\x62\xe4\xcc\xd0\x02\x12\x8f\x78\x19\x8d\x87\xb6\x32\xae\xd6\x1a\x9e\xe3\x55\x72\x1b\xc6\x05\x00\x47\xdb\x2d\xd5\xf7\x33\xb6\xe3\xba\xbd\x0d\x29\x30\xaf\xc8\xa8\xd6\xfa\x75\x5c\x85\xdd\xbc\xfd\x39\xf6\xde\xe1\xe7\x9f\x82\xf9\x39\x00\x68\x77\x72\x14\xfe\x79\x32\x39\x0c\xff\x7c\xaf\x0c\x95\xec\x07\xf5\xa9\x55\xdb\x1e\xdc\x7c\x57\x08\x40\x7d\xd3\x5d\x33\xec\x1c\xf4\x99\xaf\x0f\x17\x54\xb8\x40\xd6\x8d\xcf\x5b\xa9\x48\x27\xe5\x74\x16\x34\x67\x16\x59\xce\x70\x72\x95\xd1\xe8\xc6\x59\x78\x18\xb7\x5b\x6f\xb8\x75\xa6\xaa\xc8\x5c\xe3\xfe\x04\x6e\xf4\x33\x29\xb7\xdd\x87\x3f\xff\x76\x47\x62\x7e\xee\x37\x9b\x48\x7b\xfb\x6f\x2a\x7d\xf1\xee\xf4\x8b\xcd\x5d\xb3\xee\xf6\xdb\xa0\xf1\xdc\x9d\xee\xbf\xa9\xe9\xed\x5d\x9f\xe6\x9a\xa5\xdd\xed\xc5\xea\xab\x7d\x87\xdb\x61\x49\xef\x87\x89\xd0\x98\x85\x37\x75\x77\x35\x70\x52\x35\x77\x4e\x35\x33\xf6\x6b\x0a\xc0\x0d\x60\xa0\x16\x80\x4d\xcc\x49\x05\x56\xaa\xc8\x73\x26\xb4\xd1\x99\x0a\xc8\x74\x74\x6d\xf1\x91\x49\x03\xb3\x05\x1e\xee\xe0\xdc\xc9\x81\x97\x85\x36\x03\x2e\xa5\xd0\x7a\x3f\x80\x7b\x9e\x15\x90\xd0\x08\xac\x1f\x61\xea\xa4\x30\xf3\x78\xb5\x09\x87\x43\x66\x4c\x94\x7b\x65\xdf\x6a\xcd\x23\xb3\x87\x2a\xc8\x1c\xa8\x08\x8c\xd3\xf8\x4f\x59\x42\xf5\x4c\xe6\xe9\xc8\xa9\x87\xa3\x8a\x92\x40\x0e\x21\xb5\x46\x39\xfb\x0a\xf3\x5b\x11\x6d\x53\xc4\x09\x0b\xa4\xb9\x7f\x55\x11\x23\x38\x15\x29\x44\xce\x22\x39\x17\x50\x79\x6c\xbf\xe5\x95\xb6\xff\x54\x19\x49\x4a\x44\x91\x24\xf7\xcf\x43\x68\xa8\x04\xc8\x25\xcb\x17\x8c\xde\x73\xf3\xd6\x52\x5a\xec\x18\x65\x73\x4f\x65\x91\x0b\xac\xca\xeb\x1e\x62\x54\x63\x19\x41\x6d\x9b\xed\xbb\x6f\x13\x97\x29\x08\x74\x40\x48\x27\x73\xbe\x64\xc2\x81\x76\x1f\x26\xd4\x37\xa8\x46\x22\x79\xe0\xf0\x42\x4b\x9f\xb4\x40\xa8\x0e\xa0\x83\x21\xc7\xc9\xc6\x4b\xc3\x71\x82\x5b\x6c\x7b\xeb\xc4\xb5\x12\xbb\xcb\x9d\x90\x37\x80\xbd\x15\x87\xe5\x2b\xa5\xce\xb7\x5a\xc1\xdc\x24\x11\x64\xb7\x38\x53\xc4\x66\xb5\x7c\xfe\x11\x36\x25\xcd\xf0\xa0\x4d\xc3\x58\x75\xd9\x63\xc3\x96\x84\x4d\x0c\xfb\x5f\xa1\x92\x73\x32\xab\x3e\x89\x57\x50\xed\xa1\xf6\x09\xd4\xef\xd2\x1e\x9c\xc8\xd8\x68\x61\x43\xe2\x97\x32\xec\xee\x6d\xe3\x2d\x78\x26\x83\xc3\x88\x4a\x5a\x9e\x33\x95\x49\x04\xd7\x0f\x1f\x3b\x0c\xfc\x5f\x5c\x57\x92\xed\xb0\x4d\x9a\x3f\x1a\x88\xdb\xf6\x1f\x96\xcb\x8d\x3a\xfc\x9c\xeb\xf1\xe5\xdf\x41\x81\x67\x62\x41\x45\x84\xb6\xd3\xfe\x25\xcb\xd4\xbe\xe2\x73\xd4\xd7\xff\xf6\xf7\xbf\x83\xf2\xee\x48\xb2\x7f\x76\x7c\x70\xf4\xf6\x78\x9c\xc6\x4f\x48\x93\xcf\xa8\xd6\x2c\x17\xaf\xc8\x7f\xed\x7d\xfc\xfa\xd3\x68\xf0\xfd\xde\xde\x87\x17\xa3\x7f\xfc\xf6\xf5\xde\xc7\x31\xfc\xe3\xcf\x83\xef\x07\x9f\xdc\x1f\x5f\x0f\x06\x7b\x7b\x1f\x7e\x7a\xfb\xc3\xc5\xe4\xf8\x37\x3e\xf8\xf4\x41\x14\xe9\x25\xfe\xf5\x69\xef\x03\x3b\xfe\xed\x8e\x83\x0c\x06\xdf\x7f\x75\xcf\x89\x36\xac\x4b\x69\x5b\x8b\xd2\xaa\xfe\xa4\xc3\x9a\x93\x2c\x67\x2c\x05\xf6\xd7\x24\x5b\xab\xea\x25\xad\x0d\xe5\x04\xac\xfd\xcb\xf0\x44\xf7\x34\x31\x37\x6c\x52\x21\xeb\x4c\xe4\x15\x64\x58\x72\x69\x94\x9f\x31\x79\x07\x72\x90\x9c\xb2\x25\xcb\x87\x6e\xd4\x37\xe6\xa6\x89\xbf\x27\x74\xc3\x6d\xba\xa3\x61\x8e\x7f\xc3\x35\x71\x73\x6f\x41\x3c\x6c\x0c\x62\x27\x0f\xfc\x69\x4c\x7e\xa6\x39\x97\x85\xb2\xba\x08\xe0\xe7\x4a\x01\x32\x09\x53\xc8\xbc\x24\x01\xaf\x84\x0d\xf0\xf8\x41\x7c\x65\x98\x8b\xf1\x78\xda\x1c\x78\x7e\x7d\xb8\x59\x24\x70\x6d\x56\x6a\xe9\x1e\x95\xbb\x54\x57\x6c\x94\x10\x3c\x19\x85\xc1\x46\xfe\xef\x24\x9a\x0a\x27\x0a\xc3\xb8\x79\x00\x6f\x3d\xb5\xc8\x26\x8c\x2c\xf8\xdc\x25\x54\xc3\xfb\xa3\xf9\x1a\x7c\xea\x77\x48\x83\x25\x6d\x72\x4c\x9b\xe6\xf5\x67\xf5\xf7\x6b\xb1\x2d\xaa\x48\xcb\x21\x58\xb3\xab\x28\x2a\xcf\xcd\x0e\xee\x13\x10\x22\xa3\x28\xe7\x9a\x47\x34\xd9\x01\xe1\xe4\xbe\x8a\x92\xc2\xe8\x89\xe1\xb7\x39\x23\xfa\x4a\xe2\x53\x68\x42\x2e\xd9\xea\x4a\xe6\xb1\x93\xcf\xee\x89\xe5\x5a\x28\xed\x1e\xc9\x99\x3d\xc0\xe8\x66\xc8\x53\x96\x93\x29\x73\x1e\xf4\xda\xcd\xab\x31\x39\xf0\x2d\x63\x44\x58\x64\x18\xe0\xbf\x81\x8e\x80\x5a\x54\x65\x93\x58\x21\xe6\x9e\x46\xb5\x05\xc4\xd9\xec\x5d\x36\x0a\x98\x3f\x05\x4e\xfa\x3b\xf7\xb2\xcc\x6d\x95\x13\x9c\x8e\x1c\x6b\xb4\xa4\xfb\xfa\x41\xb8\x85\xd1\x6f\xb8\x60\x4a\xfd\x60\x96\xb2\x8d\xba\x5a\xdd\x1d\x14\xd4\x12\x3b\x36\x54\x4a\x95\x29\xc5\xcc\x1c\x29\x8c\x11\x1b\x36\x2c\xe3\xf2\xce\x31\x39\x80\x0f\x20\x27\xde\x68\x5e\x50\x45\x67\x06\xe3\x5a\xd5\xbb\xb7\xe3\x1d\x07\xa7\x47\x2e\x77\x19\x35\x05\x55\x05\x52\x47\x95\xb9\x3a\x13\xd0\xf4\x6c\x06\x2d\xfb\x77\x41\xa1\x11\xed\xce\x45\x5e\xb0\x9d\x66\xaa\x12\x42\xf4\xef\xff\xf5\xef\x2f\x40\x5b\xf2\xcf\x1b\xc1\xf3\x9a\xa8\x4a\xf7\xcf\x91\x69\x94\x1d\x53\x4f\x0c\x3a\x0b\xf7\x83\x23\xb8\xb3\x3b\x6c\xd0\x0a\x6a\x7b\x61\x99\x3c\xcd\x1b\xb9\x56\x1b\xe5\xc2\x34\xcf\x82\x19\x95\xd3\xbd\xb8\x7f\x93\xb0\x36\x09\x2c\x95\xe7\x76\x11\xe5\x2a\x47\xc3\x55\x51\xb8\x24\xfe\x39\x81\x67\x17\x7b\x60\xd8\x8f\x21\x1d\x16\x18\x17\x44\x05\x80\x3d\x36\xec\x98\xd5\x98\xdf\xa0\xf1\x0a\x69\x75\xad\xfc\xdb\x67\x95\x91\x2c\xe7\x76\xa2\xa2\xf6\xa5\xaf\x21\xb7\x09\xd3\xae\x36\x07\xc0\xa7\x3c\x6a\x8c\x83\xf9\xe7\x2a\xec\xf8\x01\x95\x39\xa8\x15\xb8\xc9\xab\x20\x39\x32\x66\x84\x2e\x29\x4f\x20\xae\x0b\x26\x9d\x54\x15\x27\x3b\x4e\x28\x92\x42\x15\x29\x3c\x23\x35\xd2\x05\x65\xc6\x47\x51\xd6\xa4\x1a\x36\x97\x2d\x6e\xaf\x4a\x35\x33\x3c\x5a\x09\x9a\xf2\xc8\xbd\xe1\x41\xe2\xfa\xa7\xd5\xea\x52\xdd\xd8\xde\x4d\xce\xd3\xb4\xd0\x66\x9a\xf7\x44\x35\x7d\x64\x7e\x14\x2c\x64\x18\x37\x67\xd7\x34\xd2\xc9\x0a\x1c\x55\xd5\x9b\xf4\x22\x97\xc5\x7c\x41\x28\x81\xbf\xcf\xe1\xab\x31\x39\xd1\xc6\x96\x84\x9e\xe7\x16\xae\x81\x6b\x94\xdf\x85\xe0\xff\x2e\x58\xb2\x22\x1c\xfa\xee\xf8\x98\x49\x75\xd8\x00\x3d\x7e\x62\xd4\xd8\xc3\x72\x89\x51\x0b\x60\x2c\x76\x90\x07\xd6\xb4\xbf\x61\xf2\x68\xb7\x83\xf6\x60\x04\x3e\xbd\x7f\x12\xcf\x23\xf1\xcf\x06\xd9\x7f\x6d\xd8\x66\xd3\x4c\xaa\x75\x2c\xb6\xcd\x2b\xcc\x83\xf0\x71\x54\x5f\x63\x30\x55\xca\x04\x2c\xe8\x77\x78\x74\x7a\xfe\xfb\x9b\x83\x7f\x1d\xbf\x79\xf0\x5a\x12\x9c\x65\x6b\x62\xe0\x59\x08\x72\x5e\x6d\x9f\xb0\xc0\x64\xab\xec\xd9\xe6\xef\xf9\x68\x4d\x38\x2a\x02\xa6\x4d\x3f\xa2\x6a\x3b\xe4\xfa\xa8\x75\x87\x3d\xad\x1d\x76\x6b\x24\x58\x39\x0c\xa0\x96\xc2\xc7\xdf\x68\x99\xe6\xd0\xae\xec\xbf\x45\x86\x55\x85\x4e\x17\x2c\xcd\x8c\x7d\xdc\x19\xbd\xaa\xd2\x39\x1c\xfe\x33\x84\x73\xb7\xde\x9d\x80\x28\xe8\x18\xd1\xee\x97\x61\xd2\x0e\xe4\x9d\xa2\xb3\x97\x12\xc1\xae\xaa\x0f\x73\x29\x3d\xee\x17\x53\x59\x08\xdb\x5a\xde\x0d\xfe\x0b\xa2\x78\xd8\x9c\x14\x40\x08\x4f\x98\x76\xd6\x5d\x75\xcd\x6d\xb5\x39\x36\x8a\xb2\xf7\xd9\x2e\xab\x12\x61\x53\x9d\xda\x81\xc7\xd0\x7c\x62\x2c\x25\x29\xe6\x0e\x06\x64\xce\x04\xcb\x41\x41\xf1\x0e\x96\xe1\xda\x0b\x01\x6a\x1a\xb5\x4c\x0d\xc7\x75\xd9\x1c\xb7\xbe\x5e\xce\x22\x99\xc7\x68\x15\x99\x97\x43\x03\x68\x5c\xd9\x09\xe7\xf0\x19\x53\xb7\xe9\x0f\xb6\xfd\x07\x54\x90\xcf\xeb\xca\x90\xaf\x22\xa8\x38\xb0\x2b\x74\x0a\x6a\xae\x72\x99\x90\x2c\xa1\x82\xd9\x32\x74\x6f\x74\xaf\xb3\xa2\xa6\x50\xec\xdd\xa4\x71\x18\xcd\x19\x72\x39\x2e\xd9\xea\xde\x9c\xa9\x81\xe4\x5c\x7f\x38\xbe\x47\x4a\xb3\xfb\x69\xdb\x46\x7b\x6d\xed\x4d\xdd\x3d\xc3\x81\x48\x56\xba\x4f\xd7\xea\x85\x7d\x3e\x25\x1c\x1c\xeb\x38\x3d\x00\xf0\x85\x21\x79\x27\x5e\x63\x35\xea\x10\x7d\xa9\xd0\x03\x4f\xc9\xd4\x56\xc1\x5e\x6b\x35\x24\x90\xf1\x4b\x89\x2a\xa6\x8a\xd9\x86\x6e\x46\x97\xb6\x41\x3d\x1b\xb5\xcc\x58\x9e\x72\x1d\x66\xaf\x9a\x2d\x87\x8f\xe9\x14\xd6\x63\xff\x4f\x96\x7a\x23\x7c\xe9\x26\x46\xfc\xfd\xcd\xa3\x20\xd2\xd3\xd2\x5b\xb7\x7b\x56\x1b\xab\x62\x2a\x56\x22\x59\x55\x5e\x0b\x59\x5f\xe8\xee\x20\xf3\x5c\x16\x99\xe3\x23\xd5\xd6\xbd\x65\x1f\x3e\xc7\x2b\xd1\x05\x56\x1d\xda\x33\x3b\x30\x38\x59\xc9\xfb\x63\xa3\x72\x29\x55\x7a\xc9\x10\xb5\x00\x23\x7e\x79\x21\x5c\x9b\x5b\x06\x6e\xb2\x20\x77\x70\x27\x61\x73\x1a\xad\x76\xaa\xcf\xd9\x94\xa9\x89\x56\x15\x4f\xb1\xf5\x11\x3e\xaf\xac\x41\x86\x52\x65\xb0\x1a\xd1\x36\x46\x53\x40\xd9\x29\x3a\x17\x9d\x03\xd1\xc0\x48\x74\xde\x22\x92\xf6\xd7\xbf\xff\x75\xe4\x62\xe5\x30\x95\x07\xd9\x50\x3e\xd3\xb2\x53\xdf\x6f\x65\xcd\x8c\xb0\xe3\x2a\x83\xf5\x05\xcf\x69\xe9\x7e\xf3\x4f\xbf\xcd\x3d\xba\x79\x10\xb7\x00\xe5\x10\x0f\x48\x2e\x2e\xe6\x6d\xfd\xa1\x3b\xe7\xd5\xa1\xec\x6e\x94\x19\x35\x42\xdb\xd5\x25\x5b\xde\x86\x29\xad\x01\x89\x2d\x51\xa0\x50\xb7\x9c\x53\xc9\x5d\xcd\x72\xac\x8f\x6f\x08\x1c\x9c\x14\x4f\x5c\xa5\xe9\xca\x9d\xee\xea\xb4\x00\xaf\x53\x33\x5f\x91\x53\x26\xe6\xfa\xe3\x48\xb5\xd1\xac\xea\x69\xbf\xcc\xeb\x5e\xf5\xf7\x8c\xcc\x5b\x1a\x4e\x6e\xc3\xdc\x54\xa3\xab\x10\x24\xbb\x4d\x23\x40\xf8\x15\x50\x49\x52\xb9\x84\x8c\x53\xc3\xfa\x8d\x0a\x70\x45\xf3\x58\x55\x3d\x23\x16\xad\xcb\x7a\x37\x6c\x60\xc8\x69\x11\x13\x19\x97\x33\xf0\xde\xcb\xaa\x2f\xe4\x09\xf9\x3b\xaa\xd4\x84\xd7\x2f\x93\x3b\x80\x73\x4f\x30\x61\x77\x5e\xd0\x3c\x06\xaf\x78\xb9\x11\x7a\x37\xc2\xa6\xab\x3b\x37\x82\x6b\x68\x54\x1e\x48\x74\xb5\x1d\x03\x9c\x51\xf5\xd3\xa0\xdd\x70\x4d\x55\x6f\xda\xf2\xfa\x8f\xac\xc8\xd6\xb2\x11\xdb\xa8\x45\xf5\xc6\xba\x0b\x99\xc4\xa0\xc0\x8c\x12\xb6\x64\x89\x7f\x94\x61\x7c\x39\x9f\x16\xda\xa6\x9b\x45\x32\x4d\xab\xd8\x53\xb6\x55\xff\x98\x94\xe0\x43\x61\x2a\x00\x70\xe2\x31\x21\xe7\x8c\xc1\xda\x85\xf3\x00\x0d\xda\x89\x38\x2b\x04\xe4\x8c\x30\xb3\x91\x70\x83\x3c\x50\x7a\x4d\xf3\x83\x65\x93\x92\x5b\x66\x3f\xee\x1c\xf8\x68\x6f\x98\x3b\x8c\x8a\x27\xca\x45\x9a\x65\x09\xc7\x52\xf5\x9a\xcd\x01\x65\xd9\x65\xf6\xba\xad\xd2\x32\xb4\xb0\x1e\x7c\x38\xae\x3f\x15\x53\x63\x8b\x83\x2b\x00\x2c\x56\xcc\xf1\xba\x32\x43\x2c\x78\x86\xa7\x9a\x6a\xff\x73\x30\xdf\xcd\xd7\x21\x84\xe5\x2b\x23\x91\x5e\xa2\x35\x2f\xaf\x20\xbb\xee\x87\x93\x23\xaf\xbb\x98\xbb\x5e\x9f\x63\x6a\xf4\x37\x78\x97\x62\x7a\xce\x63\x32\xc5\x02\x18\x23\x09\xf7\x04\xbb\xc2\x92\x7a\xeb\x93\xf0\xf1\xc9\xa5\x2b\x35\xc7\xd1\xfc\xc3\xed\x90\x03\xf2\xad\xf5\x23\x18\xe3\x07\xb3\x1b\xa6\xdc\x96\xdc\xbe\x3b\xdb\x75\x69\x7f\x57\xa3\xfc\x6a\x34\x1a\x8d\x6c\x9e\x3c\x68\xcf\xc3\x0a\x0d\xbc\x54\x4f\x65\xcc\x67\xab\x1a\x25\xcc\x36\x2f\x1f\x01\x3b\x92\x8a\x95\x9d\xdd\x98\x9c\x4a\x88\xbd\x53\x1d\x66\x51\x94\x6d\x81\xcd\x2b\x42\xb8\x16\xb2\x89\xa5\x1a\x0b\xeb\xee\x71\x99\xa8\xf7\xb7\xe0\xdb\xa5\x35\xb5\x81\xb5\xdc\x90\x72\xdf\x36\xcf\x77\x53\x16\xbf\x8b\x5a\xf9\x1e\x74\x72\x86\x9b\x14\x50\x08\x6e\x58\x18\x27\x87\xec\xae\xb1\xd1\x2b\xcc\x76\x60\xd7\x99\xc4\xbe\x4d\xe0\xc9\x9e\xc8\x78\x3d\xcd\x13\x95\xad\x2c\xc3\x62\xc5\xca\xa9\xb1\x86\x1e\x66\x16\x3b\x22\x90\x29\x35\x43\xfa\xe9\xec\xd5\xf6\xc9\x00\x82\x2b\x30\x34\xc8\x3b\x21\x6d\x63\x7d\x22\x05\x61\xd9\x82\xa5\x2c\xa7\x49\xf5\x41\x16\xed\xec\x95\x61\xb7\xb9\xd9\xa5\x98\x4a\x99\xd2\x0c\xb9\x2d\x30\xcf\x98\xe7\x80\x1a\xcb\x2b\x29\xce\x3b\xef\xc4\x99\x94\xfa\x2d\x57\x60\x53\xda\xa4\x12\xf4\x00\xec\x6c\x32\x34\xdc\x77\x65\xe9\x78\xdb\x9d\xfc\x60\x79\xc4\xc4\x75\xd7\xef\x82\xd7\x1a\x0e\x62\x98\xd6\x7d\x1b\xe8\xbf\xb7\x60\xc8\x60\x08\x3b\xa1\xe5\x73\xda\x36\xb5\xc7\x5f\xeb\x8d\xff\xc0\xcd\xf1\xad\x3f\x94\xea\x0a\xea\x78\xcb\x45\x7f\x42\xdc\x0b\xb6\xcc\xa9\x84\x73\xd2\x72\xd3\x9c\xac\xf7\xe4\x2f\xb7\x08\xe8\xb8\x66\x2f\x51\x88\xab\x4a\x31\x82\x1e\xd9\x85\x72\x09\xe0\xb9\x4b\x9d\xab\x08\xa0\xa5\x39\xd2\x2e\x91\x0b\x4a\x65\x8d\x95\xe8\x76\x98\x51\x9d\x84\x2a\x72\xe6\x2b\x3d\x63\xc9\xca\x7e\xd9\x54\x91\xf7\x27\x47\xe4\x05\xd9\x83\x2a\x67\x8f\x74\xe7\x63\xf5\xf5\x52\xdc\x99\x1b\xa2\xea\x52\xb2\xc0\x9a\x42\x22\x2f\xb2\x73\x32\xec\xd5\x89\x61\xdb\xa0\x04\x3a\xc6\x6c\xdf\x1e\x6f\xba\x1f\x9b\x61\x19\xf8\x6a\xa1\x0e\x78\xd0\xfb\x06\x3c\x28\x54\xac\xcd\xf6\xaa\xd2\x0a\xf7\x50\xca\x34\x05\xd0\x56\xe4\x4d\xee\x86\xad\x5c\xbd\x3f\x3a\x87\xaa\x16\xfc\x75\xb0\xa9\xce\x8f\x61\x40\x17\x4e\xb0\x6a\x3c\xda\x0e\xf1\xba\xed\xe0\x78\xc1\x67\xb0\x00\x5c\x4c\xcf\xe3\x2c\xe6\x54\xc4\x32\x5d\x7b\x9a\x59\x4d\x30\xde\x82\xd5\xec\xb7\xdd\x4d\x57\xab\x14\x81\x76\x09\x02\x60\xe3\x77\x00\x21\xf6\x06\x7c\x05\x5c\xf9\x9d\x80\xce\x03\x28\xae\x5f\x33\x5b\x5b\x23\x4c\xb6\x8e\xf7\xe7\x32\x69\x18\xd8\xaf\xa6\x41\xc8\xc4\x82\x41\xb8\xd7\x36\x03\x6f\xed\x5b\xeb\x86\xe9\x96\x75\xf6\xb2\xca\x6a\x6f\x0d\xee\x9c\x6d\x7d\xeb\xa2\x91\x94\x26\xf5\xb7\x86\xd2\xe0\xca\x5b\x83\xdc\xdd\xc6\xb7\xae\x56\x82\x77\x20\x4c\xec\x80\x44\xda\x7a\x74\xdb\x91\xb1\x0e\x16\x5b\x56\x9a\x82\x13\xea\x69\xf1\xd1\x36\x70\x82\x58\x30\xf6\xd0\xac\x5b\x46\x34\x01\xd0\x86\xa6\xeb\x4c\xea\x6b\x5d\x1f\x32\x28\x6a\xa1\x66\xb6\xf0\x59\x50\x9a\x49\x11\xe9\x5a\x96\x81\xf2\x5a\x50\xdc\xba\xe9\xec\x2f\x5d\xe6\xa0\x91\xbf\x65\xa5\x68\xf8\x6b\x2d\x01\xa8\xa8\xec\xa8\x47\x61\x82\x0c\xd3\x66\x32\xaa\x17\x43\x92\xb3\x04\x9b\xe4\xd8\x73\x76\x89\xa6\xd4\x6e\xa5\xfc\xd4\xed\x58\xf7\x68\x97\x14\x5c\x8e\x0c\x5a\xc6\x0c\x59\x17\x57\x64\xe7\x8d\x7b\xf7\x1d\x7b\xcf\xe9\xbb\x0b\x77\x1f\xe4\x77\xf8\x0a\x99\xa6\x29\xe2\xdb\xc2\xbf\x77\xf0\x9d\xfd\xd2\xa2\x93\xeb\x92\x8b\xd8\x36\x97\xa9\x50\xce\x57\x42\xa3\xea\xe8\x1c\x50\x8e\x15\xd0\x9c\x81\x2f\xd8\x93\x8f\x8c\x1a\xef\x15\x9b\xc1\xe0\xf2\x58\x46\x37\xe8\xa0\xce\xe5\xe2\x1e\x52\x1f\xe6\xbd\x80\x8d\x20\x00\x66\x42\xc8\x0d\xf7\xb9\x77\x69\x96\x43\xd5\x86\x33\xaf\xe1\x81\xb4\xe4\xce\x07\x3e\x74\x3e\x47\x78\x91\x40\xc3\x2f\xdb\x7e\x58\xb3\x11\x4c\x4c\x2e\x6a\x9a\xf9\x10\x56\xc7\x96\x15\xaf\x09\x2f\xac\x62\x4b\x69\xbe\x22\x3f\x9c\x1c\x59\xd8\x1a\xeb\x07\xdd\x0b\x43\xf4\x03\x0c\x62\x63\xa0\x22\x65\xe9\x14\x9d\xa3\x6a\xbd\x94\xbb\x02\x0a\xe6\x53\xf5\x0a\x1e\xdf\x62\xef\xd6\xad\x13\x21\x43\x14\x04\xf7\xee\x39\x60\x23\x58\xfb\x46\xac\x36\x2b\xf5\x5f\x64\x86\xd8\x09\x4d\x9b\xb3\x82\xbe\x5e\xbe\x64\x43\xc2\x96\x4c\xd8\x6a\xb6\x15\xdc\x61\x44\x1f\x17\x51\x52\xc4\xee\x71\x80\xf2\xaf\xf4\xa3\x49\xcb\x66\xd8\xc3\x8d\x91\x87\xdb\xf6\x74\x6a\x65\x63\x23\x16\x50\xcb\x13\x77\x6e\x11\x85\x16\x32\x89\x09\xf5\xc7\xcf\x27\xe3\xc6\xee\x39\x98\x15\x16\xe0\x8a\x8d\x8d\xe5\x6a\x33\xae\x0a\x51\xc2\x95\xb8\xfb\xf7\xea\xfa\x94\xe3\x78\x03\x0b\xb2\xe7\xdc\x7a\x09\x2d\x44\xb4\xf8\xa3\x6c\x99\x0d\xd4\xf7\x71\x22\x4a\x2e\x59\x2e\x58\x42\x32\x9a\xd3\x94\x41\xa3\x17\xe7\x5f\x78\xf8\x5c\xfd\x76\x88\xd4\x2d\xd0\xa4\x47\xe8\xfb\x78\x84\xf2\x82\x36\xe8\xbe\x1b\x13\x4a\xa8\x9b\x12\x76\x2b\x6c\xb4\x8c\xa4\x8b\x82\x00\xa0\x68\x27\xaf\x86\x7d\x1e\xb7\xe3\xdd\xaa\x00\x72\x1d\x98\x86\xbf\xe0\x80\x25\xd2\xa5\x4b\x03\xb9\xaf\xaf\xd1\x29\x94\xeb\xf8\xf2\xbb\x6a\xcd\x8f\x57\x6d\xc6\xf9\xc0\x81\x86\xc6\x7c\x17\xc0\xa8\x9e\x94\x7b\x70\x9e\x2a\x7a\x98\x33\xa8\x12\xa3\xc9\x79\xc6\xa2\x0e\xec\x8f\x1f\xde\x9e\x1f\x54\x07\x05\xa1\x84\xa5\x57\x0b\x06\xdf\x07\xb8\x15\x57\x6c\xba\x90\xf2\x92\xec\x6d\xc0\xde\x0a\x72\xa9\x14\x9f\xab\x7d\xbb\xbd\x47\x66\xde\x03\xc2\x05\x34\x49\xf2\x42\xd5\x37\x97\x72\x0f\x89\xfc\x2c\x60\xad\x6c\x22\xb6\x15\xc3\xeb\xd3\x3c\x6d\x95\xaf\xd6\x9a\x27\xad\x2f\x46\xf3\xfa\xa4\xcf\x2c\xc8\x4d\x18\x6c\x1b\xa9\x86\xde\xa0\x47\x21\x89\xf5\x55\x18\x0d\xbc\x03\x3a\xfc\x58\x8e\x16\x62\xfa\xf3\x59\xa5\xdd\x60\x69\x46\xfa\x48\xef\x2e\xb4\x3d\xb7\x3f\xdd\x0d\xcd\x8e\x83\x24\x41\xce\x3f\x71\xa5\xe7\xce\x55\x56\xe6\x43\xfa\x82\x2e\x6f\x39\x54\x66\x82\x2c\x6a\xcf\x01\x07\xeb\xb0\x18\xdb\xe6\x53\xa6\xfc\xda\x3c\x25\xfc\x55\x88\x0d\x01\xe5\x49\x62\xb4\xf9\xeb\x01\x94\x9e\x38\x63\x6a\x68\xde\x36\xbc\x31\x68\x6b\x29\xe0\x8b\x53\xc4\x76\xc0\xf9\x87\xe1\x1c\xdb\xa1\xb2\xcd\x3e\x68\x8e\x2b\xef\xe3\xb1\x1d\x1d\x09\x88\xcb\xda\xe1\x8c\x50\x70\x62\xae\x4d\x9c\x16\x6c\xc8\x0e\x62\xb5\xeb\xb2\xec\xc1\x45\xe0\x43\x9e\x75\xc5\xf2\x25\x8f\xd8\x41\x14\xc9\x42\xb4\x4a\x75\x3d\x62\xe6\x15\xa8\x66\xf1\x79\x65\x4c\x74\xeb\xc7\xf0\x2d\x66\x96\xd3\x84\x53\xc4\x84\xae\xde\x89\x88\x48\xe5\x38\x10\x16\xa8\xcd\xd0\x6e\x19\xa5\x19\x6d\x96\xb6\xda\x92\x42\x6d\xeb\xa4\xd6\xdf\x78\x93\x24\xa8\x51\xd0\x46\x04\xd6\x6a\xa0\xee\x56\x80\xa6\xa9\xba\x2c\x91\xb2\x19\x60\xc6\xf8\xc3\x14\x7c\x6e\x5f\x74\x44\xf1\xa9\x8d\xd0\xb3\x1b\x50\x57\x1b\xbe\x67\x5e\xfe\x40\xbd\xfe\x3f\x47\xa7\xed\xca\x86\x7c\x93\x60\x04\x23\x59\xd8\xa1\xbd\x4a\x1b\x62\x28\x86\x58\x52\xe6\xc9\x43\x92\x53\xdb\xff\xd0\xf6\xbe\x4f\x18\x45\xdf\x03\xd9\x0b\xca\xb4\x90\xa7\x97\x21\x79\xe4\xf4\xb6\x55\x7d\xca\xa8\x50\x01\x5e\x18\x83\xa1\x9d\xf3\xcb\xcf\x07\xb5\x5a\xbb\xda\xd6\xca\xde\x73\xae\xdb\xea\x1d\x4a\xe7\x45\xa4\x49\xa1\x95\xf9\x1c\x1f\xee\x18\xe6\x1d\x1e\x9f\xb3\x39\x57\x3a\x5f\xb9\x26\xfa\xb3\x60\x12\xd6\x7b\xe2\x6f\xb9\x64\x2b\xf2\xe3\x4f\xc7\xbf\xfe\xfe\xe6\xdd\xe1\xc1\x9b\xdf\xdf\x1e\x1c\xfe\x78\x72\x7a\xfc\xf1\xe3\xf9\xaf\xe7\x17\xc7\x6f\x3f\x7e\x3c\x44\x38\x58\x8b\x9d\x76\xce\xf4\xc7\x8f\x76\xa7\xaa\x8f\x1f\x2f\xa2\x8c\x67\x1f\x3f\x4e\x9c\xaf\x00\xdb\x63\xfe\x9f\xa3\x53\xe0\x9f\x08\xe1\xe3\x73\xab\x40\xb4\x22\xd1\x61\xde\x0b\xaa\xca\x4c\xce\x4a\xb1\x65\x83\x96\x2a\x4d\xc5\xdd\x46\xfc\xea\x56\x87\x7d\x01\x4e\x53\xd7\xd7\xda\x79\x33\xcb\xd2\xf2\x29\xd3\x57\xcc\x62\x4e\x6d\x44\x4c\xa7\xf5\xc2\x70\x9b\xdd\xbd\xa1\x77\xae\xc3\x84\x59\x72\x76\x85\x00\xa1\x7c\x2e\x68\x12\x34\x70\x06\x0c\x3a\x8c\xb2\xac\xe3\xb2\x83\x8e\x94\xc9\xd8\x37\xab\xae\x79\xb7\xd7\x3c\xdb\x95\x1a\x4a\x44\xde\x67\x31\x99\x9c\x1c\x91\x97\x63\x54\x72\x4e\x8e\xb0\x11\xc8\x46\x58\x70\x67\xd1\x19\x81\x8a\xd2\x77\x43\x69\x43\xb9\x01\x9a\x30\xa3\x06\x3b\xa0\x98\xc6\x32\xa5\xf7\x6d\x4b\xff\x99\xe2\xc5\x59\x91\x24\x2b\xf2\xef\x82\x26\xa8\x03\x4c\x64\xbc\xce\x99\x76\xbe\x73\x1f\xfd\x73\xfc\x9d\x9f\xc7\x3f\xc7\xdf\xb9\x72\x7e\x20\xdb\x3f\xc7\x6a\x19\x8d\xbf\xb3\x68\x76\xc4\xde\xb4\x31\x11\x79\xad\xd4\xd5\xaa\xb3\xf8\x1b\x04\x08\x00\x75\xf7\x41\x6a\x1d\x83\x46\xbe\x3f\xe4\x34\x62\x13\x96\x73\x50\x99\xa4\x88\xdb\x54\x3e\xba\x2d\x43\x62\x87\xef\xcc\x05\x51\x38\xac\x27\x81\x60\x2c\x46\x25\xd1\xce\x82\x91\xb9\x99\x04\x2c\x0c\x6a\x81\x00\xa2\x10\xe5\x8c\x62\x3e\xbb\x45\x54\x70\xa0\xbd\x63\xeb\x66\x72\x31\x56\xa3\xf0\x0b\x36\xc7\x48\xa9\xf5\xb7\x63\x34\x16\xb9\x2c\x02\xed\xf9\x18\xa0\xd2\x32\x23\x3c\x4d\x59\x6c\x14\xa0\x64\x45\x96\x9c\x22\xe7\x87\x82\x49\x3c\xa7\x7b\x42\x12\x09\x5e\xeb\x42\x70\xeb\xc4\x5a\x14\x9a\xc4\xf2\x4a\x0c\xca\x56\xed\xf8\x00\x63\xac\xf0\x64\x58\xa9\x1e\x86\x57\x22\x19\x10\xb6\x0a\xe3\xe0\xf4\x25\x98\x61\xe5\x36\xab\x7b\x6c\x22\x1e\x62\x24\x20\xfc\xa4\xe3\x20\x0e\xeb\xb9\xac\xbd\xc7\xd0\x0c\xb4\xbd\xaf\x34\x6b\xb6\x2f\xe5\x78\x09\xa6\xb7\x21\x17\x0b\x07\x34\xbf\x9e\xc9\x3c\xe2\xd3\x64\x45\x16\x34\x29\x1b\x37\x87\xb4\x19\x93\x73\xa6\xc3\xd7\x4f\xa4\x98\x87\x82\x1a\x41\xbc\xa1\xcc\x9b\x51\x51\x64\xf8\x3c\x23\xdf\x56\xb2\xb8\xc1\x60\xf8\xf6\x85\x7b\xd5\x47\x80\xd5\xbc\x57\x78\x45\xcb\x84\xe1\xfa\xb4\x39\x29\x1b\x8b\xaa\x77\x55\x38\x7a\x13\x42\x3c\x46\xe9\xaa\x43\x39\x81\x1d\x71\xe1\xe7\x0f\x96\x86\xd6\x14\xaa\xba\xcd\x69\xc7\x6f\xa0\xa4\x6e\x45\x8c\xd4\xb2\x18\x5c\x21\x3c\x80\xce\x79\x96\x30\xf2\xdd\x25\x5b\x0d\x11\x7d\x15\x95\x90\x7f\x06\x3d\xb1\x3c\x7e\x1d\xa2\xe4\xcb\x9c\x7c\xe7\xfe\xf5\xcf\x07\x2c\x83\x6d\xe3\x6d\xc4\x97\x6a\x1d\x21\x3a\xc6\x52\x9b\x2a\x1c\x2b\x52\xd6\x56\xe1\x68\x89\xe4\x1a\x93\x63\x00\x3d\x40\x8d\xd4\xf6\x05\x4a\x92\xca\xcd\xca\x6a\x36\x55\x28\x4f\x70\xbf\x04\x25\x38\xa7\xd2\xd6\x29\x33\xc0\x44\x9e\xb1\xbc\xfc\x04\x18\xcc\xa9\x3c\xbe\x66\x51\xa1\x1f\x12\x5a\x10\xaf\x4b\xd6\xbe\xeb\xfa\x4f\xcc\xe3\x45\x23\x6d\x8c\x16\xee\xcb\x1f\xca\xd3\x19\x64\xc0\xdd\x4e\xdb\x4b\xb6\x52\x1e\x11\xff\x12\x47\xb7\x85\xfa\x7e\xff\x3a\x41\x76\x7c\xcd\x95\x56\xff\xdb\xb5\x7c\x4f\xa7\x65\xb3\x7d\x8a\xa9\x68\xe5\xe8\x41\x37\x04\xf3\x27\x3c\xe6\xa1\x09\xee\x5e\xa0\x35\xd5\xdf\x39\x4a\x04\xfd\x0e\xa8\x79\xa7\x5d\x65\x73\xa0\xa4\x80\x6a\xb8\x10\x38\xbf\x4c\xcf\xc1\x1f\xe3\xfe\x44\x1a\x02\x5d\x8e\x8d\x92\x57\x15\x33\xf6\x23\x7b\x13\x07\x08\x58\xbe\xa4\x09\x13\xb6\x8f\x50\x12\x47\x34\xc7\x50\xb6\x45\x7f\x56\xb6\x15\x99\x85\x3d\x35\x32\xce\x72\xb2\x72\x95\x95\x0d\x79\xd1\x5c\xf3\xa8\x48\x68\x4e\xcc\x79\x9c\xcb\xfc\x9e\x20\xd1\x78\xb5\x5a\x93\x72\x8b\x36\x52\xe7\xf0\xaa\xf2\xf7\xfa\x88\xf5\xae\x14\x56\x7b\x31\x26\x13\x47\x9c\xcb\xf0\xa0\xec\x55\x5b\x99\xc9\x99\xe3\x4d\x9e\x51\x84\x7d\x0d\x74\x15\x77\x6a\x2e\x64\xce\xe2\x41\x20\x3c\xfc\xc9\x1c\x93\x7f\x79\xa8\x90\x21\x29\x5d\xc6\x50\xf8\x6a\x9f\x69\x8f\x8d\x5d\xae\xf2\x50\xcf\x64\xce\x96\x2c\x27\x7b\xb1\x44\xe4\x8c\x25\x8f\xf4\x60\x4c\xfe\xff\x46\x53\x04\x1f\xb2\x53\x27\xed\x31\xf3\xc5\xbe\x65\x77\x85\x17\x64\x0f\x7e\x16\xaa\x92\x03\x17\x50\xb1\x6d\x5b\x9e\x58\xd6\x48\x8b\x48\xf0\x86\x28\x70\x85\x8d\xa2\xa6\x58\xdb\x1a\x5e\xf2\x4b\xcf\x21\x3d\x4f\xe4\xca\x9e\xd2\x8a\xe7\xd6\xc7\x23\x1c\x0b\xf5\x1b\xe7\x7f\xc0\x47\x4f\x72\x36\x87\xf3\x87\xa7\xe7\x01\x4f\x9f\x96\x99\x4c\xe4\x7c\x75\x9e\xe5\x8c\xc6\x87\x52\x28\x9d\x03\x6b\x68\x03\xc6\x7f\xd3\x98\x01\x8c\xe3\x42\x5e\x11\x6a\x13\xbd\xe4\x0c\xdb\x19\xc8\x62\xbe\x40\xd4\x16\xf8\x21\xa1\x51\x2e\x01\x9a\x14\x87\xb3\x46\xa7\x1a\x3b\x00\x17\xe7\x3e\xf0\x20\x2f\x30\x0a\x38\x3c\xae\xe8\xca\x1e\x26\x3a\xe5\x31\x53\x41\x22\xb4\x9b\x0c\x46\x7e\x6e\x7c\x7f\xe0\xca\x07\xa7\x47\xf7\xed\x80\xf9\x88\x0a\xed\x0d\xaf\xe2\x35\x23\xa4\x7a\x49\x5f\xaf\x91\x02\xdd\x68\x2a\xad\xa6\x8a\x8d\x77\x1c\x65\x9e\x08\x44\x4b\x4a\xaf\xcf\x2f\xd9\x55\x83\x5f\xba\x17\xfd\x89\xdd\x3f\x65\x6a\x04\xf6\xe8\x7b\xa1\xa8\xe6\x6a\x06\xad\x72\x1f\x50\x1f\x87\xca\x86\x66\x1d\x3d\xf1\xaa\x16\x08\x85\xa3\xb9\xca\x73\x8f\xb4\x5a\xd9\x2c\x36\x4f\xae\xb4\x83\x6c\x9a\x24\x54\x5a\xf8\x66\xa0\xe6\x04\x45\xb6\x41\xb6\x96\x65\xbc\x16\x23\x15\x45\x3a\x65\xb9\x3f\xfb\xe8\x0c\xe0\x79\x0d\x86\xb1\x76\xf6\x9f\x20\xba\x2b\x90\xe7\xf8\xda\x68\x1e\xaa\x59\x42\x0f\x5e\xd5\xfe\xf6\xb5\x41\x31\x3c\xe6\x12\x1d\x6b\xcb\x50\xe9\x33\x6b\x51\xc1\xcb\x4f\x9a\xf2\xb9\xf2\x6a\x93\x72\x88\x57\xe3\xc4\x43\xbc\xea\xe9\xd6\x37\xbe\x7e\xad\x59\x6d\x58\x55\x68\x9d\x42\x6a\x88\x0a\x3c\x3a\xb0\x01\xfd\xcc\x0a\x76\xb8\x19\x94\x7a\xab\xcd\x19\xa3\xc8\xdc\x84\xbf\x6b\xdb\x8a\xba\xf1\xfe\xc4\xab\x5d\x5e\x23\x5e\x23\xf3\x4a\xad\x7e\xef\x88\xd5\x78\x90\xb6\x87\x0d\xaf\x86\x06\x75\x79\x55\x36\xd4\x65\x69\x5a\xe3\xce\xaa\x98\xd6\x25\xb3\x2b\x0d\xeb\x56\xcf\xee\xa0\x11\x3d\x69\x69\xe3\x96\x57\x85\x10\xf2\x1e\xd6\x2e\x25\x16\x10\xd5\x9e\x8e\x8d\x36\xef\x89\x18\x92\x53\xa9\xcd\x7f\x02\xf3\xf7\x48\x32\x75\x2a\x35\x7c\xb2\x15\xa4\xc4\x57\xe8\x90\x90\xae\xe7\x23\xb6\x50\x30\x7c\xd3\x86\x68\x8d\xc4\x73\x04\xdb\x60\x58\x9c\x08\x22\x73\x47\x31\x6f\x5d\x28\x3b\x44\x18\x56\xb0\x40\x5e\x37\x1a\x27\x66\x9c\x90\xce\xb7\x0c\x67\x87\x02\x44\x1e\xfc\x06\x40\xe8\xb3\x04\x12\xe9\xe3\x22\xc7\x86\x43\x46\xd7\xd4\x6c\xce\x23\x92\xb2\x7c\xce\x08\xe0\x62\x76\xb1\x7c\x6d\xe4\x0a\x5e\x2d\xa5\x4b\x38\x99\x16\x7b\x09\x44\x36\xa8\x58\x1d\xaa\x00\x38\x1e\x8a\xb5\x94\x82\x25\xf5\xff\x78\x1f\xf4\xff\x4b\x32\xca\x73\x68\x50\x64\x63\xc7\xe1\x77\x36\xfa\x12\x0e\x63\x46\x58\xf3\x2d\x51\x41\x18\xd6\x43\x99\xd1\xeb\x8a\xc7\x90\x5c\x01\xe2\xb1\xe1\x89\xde\xfd\xb1\x73\xc9\x56\x3b\xc3\xb5\xad\xb7\x73\x22\x76\xca\xc0\x70\x65\xb3\x79\x21\x0c\x40\x4f\x3b\xf0\xdd\xce\x97\xd3\x55\x5a\x09\xdb\x2e\xda\x3b\xd6\x27\xd4\x70\x5f\x95\x8b\xf7\x53\x03\x68\x44\xb2\x56\x75\xf8\xb6\x32\x9e\xd3\x96\xb4\x55\xd2\x4b\xf1\xa7\x30\x39\x3e\x01\x57\xfd\xc2\xda\xdd\x72\xc9\x5c\x17\x7f\xb4\x2f\x39\x80\xc4\xdb\x94\x19\x9a\x44\xd8\xa1\x15\x57\x15\x06\x31\xab\xe9\x6c\x8c\x44\xca\xcb\x22\x73\xbb\x02\x92\x0c\x00\x6a\x47\x44\x32\xb5\x56\x07\x3e\x1f\x1c\x2b\x76\xcb\x8d\x6c\x20\x0f\xb7\xaf\xdf\x1c\xb6\x2f\x62\xc5\x9c\xa9\x4e\xd8\xfb\x1d\x98\xe1\x7e\xde\x04\xbe\xe3\x2b\xf8\x9c\x97\x70\x76\x16\x42\x8f\xa6\xde\x5d\x3e\x93\xf9\x94\xc7\x31\x98\xd2\xf8\x20\x9f\xfc\x57\x23\xb4\x39\x13\x15\xeb\x6b\x5c\xbf\x63\x43\xea\x7a\xdd\x5c\x13\xbb\x1a\x13\x20\xe0\x07\xa0\xa0\xc4\xd2\x7c\xe8\x1f\x7d\x03\x41\xfd\x1b\x5a\xb7\xa5\x61\x18\xa2\x48\x12\x8f\x62\x8d\x86\x05\x7a\x25\xe1\x80\x5a\x77\xfe\xdc\x1c\x59\x5d\x25\xf4\x46\x1c\xdc\xf5\xfe\x40\x66\x2a\xd5\x57\x3c\x11\x13\x19\x57\x5d\x18\x15\x48\x5c\x5b\x35\xe4\xb0\x74\xf7\x02\x50\x5d\x9f\x52\xd5\xa4\x58\xb4\x9d\x94\x69\x21\x5b\x5a\x4a\x94\x9b\x50\x4a\xa9\x96\x29\x8f\x1a\xb0\x12\x70\x9f\xb4\xe6\x21\xbb\x6f\x71\xa0\xc0\xd5\x87\xe9\x05\xf3\x9c\x61\xf1\x38\x1c\x2f\x38\x6e\x16\x1f\xbf\x10\x6c\xc9\xcc\xb6\x8a\xb9\xb2\xf8\xa5\x2e\x5b\xe9\xbf\xd7\xbc\x2b\xff\xbf\x23\x79\x2a\xb5\x73\x00\xfe\xb7\xf3\xa0\xa3\x28\xbb\xe6\x69\x91\x96\x78\xfb\x24\xe6\x33\xd7\xc0\xc8\x25\x49\x55\x5d\x0f\x55\x0f\x98\x3d\x22\x9a\xe6\x73\x48\x96\xb6\xae\x07\x27\xb1\xe6\x89\x9c\xd2\x84\xa4\x5c\x98\xc7\xd8\x3c\x88\xca\x67\x7e\x26\xf6\xcf\x5b\x1e\x04\x62\x95\xcf\xf9\x34\x61\xd6\xb7\x51\xeb\xad\x18\xfc\xb8\x76\x23\x1c\xad\x04\x9a\x36\x2d\xa8\x20\x6f\xb9\x38\x72\x8e\xd1\xd7\xe6\xc8\x5e\xd3\x34\x4b\x18\xd6\x0c\x93\x6f\x47\xff\x91\x82\x11\x9b\xeb\x33\x24\x6e\x79\x6c\x0a\x98\x96\xe4\x25\xca\xe4\xb2\xa1\xac\x4f\xe4\xaa\x72\x50\xe7\x94\x55\xe4\x9b\xfd\x6f\xf6\x5f\xbe\x32\xea\x28\x46\xfc\xa8\xb2\x90\x69\xeb\xd4\x78\x39\x26\x9f\x88\x99\xc1\x4b\xfb\xdf\x6f\xec\x7f\xbf\x25\x9f\xc8\x27\x42\x26\x64\x42\xc2\xff\x9a\xff\x90\x4f\x64\x64\x88\x10\x4c\xf5\xe5\xb0\xca\xb8\x2a\x88\xdd\x76\x2f\x80\x18\xc1\xa1\x81\x55\x44\x32\x65\x30\xd5\x6f\xfe\x77\x88\x74\xcc\x35\x91\xc2\xde\xf9\x72\x0f\xa6\x34\x20\x57\xe0\x9f\x4f\xe9\x25\xfa\xa6\x0e\x22\x5d\xd0\xc4\x3c\x7c\xef\xdb\xd1\xcb\x01\x91\xa2\x7a\xfb\x92\x4b\xe8\xdb\x62\x67\xb8\xf7\x72\x30\x5e\x9b\xf2\x37\x1b\xa6\x5c\x99\x2d\xcc\x82\x8a\x15\x0c\x7d\xf3\x7e\x77\x5b\xfd\x40\xac\xae\xe8\xca\x6f\x78\x27\x37\xe7\x7c\xe9\xbb\xbc\x06\xa0\x49\x90\xb8\x00\xfb\x97\x3b\x1c\x3c\x1c\x74\x45\xb8\x1e\x93\x13\xbd\xbb\xab\x20\xec\x80\x6e\x03\xd7\x8e\xf6\x28\xc4\xf7\x05\xc2\xc3\xde\x78\x51\xab\x6b\x68\x80\x26\xd9\x69\x84\xe8\x5e\xfd\x64\xf1\x4a\xfd\x29\xe9\x40\x4d\xf2\x63\x55\xd0\x37\xd6\x4f\x7d\xfd\xe0\xfa\x1c\xcc\x5b\x4f\x77\xad\xdb\xa1\x63\x43\x97\x56\x25\x2b\x4f\x7e\xf9\x4e\x43\x48\x07\x74\xd2\x93\x58\xf1\x09\x51\x3f\x45\x3e\xee\x54\xcf\xe5\xc7\x1d\x88\x03\x7a\x55\xdc\x96\xd4\x5b\xf5\xc6\xa2\xb5\xba\x6d\x1c\x20\x0a\x1e\x88\xb8\xcc\xbe\x6a\x38\x7f\x68\x5d\x0a\xe6\xe7\x1c\x42\x92\xf9\xfa\x9b\x04\x19\x5a\x95\x84\x5e\x73\x0a\x03\xe0\x78\x72\x80\x1b\x58\x41\x1c\xf5\x2e\xf3\xba\x91\x76\x41\x0b\x01\x50\x98\x7c\x3c\x29\xc5\x1e\x8b\xe6\x76\x7b\xb0\xd1\xed\xed\x7a\x26\xfa\x65\x3d\x99\x6d\x48\xa9\x2b\x63\x4d\x08\x96\x6b\x36\x09\x94\x2a\x85\xfb\x27\xe8\xe6\xfa\x72\x03\x72\xac\x3d\x2e\xaa\x4a\xae\x17\x76\x23\x95\xcf\x94\x1a\x9f\xfb\x4b\x9d\x7f\x78\x3b\xbe\x22\x37\x41\x4b\x6b\x22\x2c\xbe\x19\xd6\x66\x6f\x3f\xff\x6b\x13\x19\xf2\xcd\xab\xfb\x09\x07\xfb\xdf\x8b\xca\x32\x6f\x5c\xdd\xbf\xee\x95\xb3\x1c\x40\x2e\xc4\x86\x43\x00\x75\x53\x65\x5c\x7c\xec\x05\x9a\xe2\xba\xa0\x58\x6a\x25\xd8\x95\xcd\x7f\xbd\xf9\xa5\x02\xdd\xdc\x31\xf7\xa1\x91\x3f\xb4\x80\xb6\x9a\x69\x56\x00\x84\x80\x21\xa4\xd3\xb4\xbf\xdd\xfb\x96\x8c\xc8\x8b\x81\xd9\x0d\x02\xb7\x15\x10\x33\x14\x65\x80\x66\x83\xaa\x80\x5e\x18\xe5\xc9\x50\x46\x0d\xb1\x15\x63\x92\xd4\x85\xd0\x7d\x14\x6f\x4f\x9b\xc7\x55\xba\x1f\x4b\x16\x08\x19\xb3\x83\x19\xb4\xd1\x59\x35\x05\xca\xae\xcb\x84\xd3\xb5\x31\x03\xd9\xb0\x90\x57\xe4\xca\x66\x69\xc3\x96\xb3\xb5\x86\xe1\x44\xf6\xcd\x1f\x7e\x4f\x01\x3f\xf3\x2c\xd9\xaa\x10\x9e\x95\xda\x63\xa4\x60\xd9\xdf\x85\x30\x3f\x23\xf2\xa3\x14\x32\x7f\x85\xda\x91\x19\x52\x95\xac\xf8\xe6\xc7\x21\xab\x09\x41\x4f\x2a\x02\x41\x19\xf5\xe6\x04\xac\xc3\x57\x9f\x1b\xc5\xdb\x90\x90\x30\x1e\x7b\x3e\x76\xdb\xe0\x08\xfe\x7e\x43\x66\xb2\x07\x1a\x5f\x73\x4d\x99\x6f\xe1\x75\x6d\x93\xaf\x71\x6d\xff\xdb\xf6\x08\x6e\x43\xbb\x14\xe7\x5a\x3b\x16\xb3\x72\x27\x66\x7a\x8a\x4b\x81\x4b\x77\xdb\xb1\x98\x25\x74\xde\x62\xcf\x37\xb4\xf7\x0c\x25\x2f\x20\x2f\xa1\xcb\x0d\x1b\x8e\x78\xeb\x76\x45\xe4\x2f\xcc\x8b\x68\xbd\x35\x71\x57\x18\x8e\x2a\x0b\x6d\x47\xad\x34\x15\x84\x8f\x58\x6c\x6f\x9c\x49\xe7\x93\x59\xf3\x5f\x2c\xa0\xb4\xb7\xcc\xcc\x19\x56\xf6\x5a\x7d\xd3\xba\x17\xb8\xc3\x36\x6d\xb5\x25\xf1\x99\xcf\x7f\x4f\x06\x79\x13\x1d\x24\xeb\xf9\xb1\x9c\x11\x7d\xc9\x40\xfe\xc1\xca\xa1\xa3\x6a\x0c\x74\xb1\xe6\x8c\x2d\x44\x41\x9f\x64\xd9\x9b\xd8\x45\x65\xb1\x6d\x6e\x44\x93\x50\x9b\x32\x1a\x19\x8f\x59\x8e\x02\x76\xca\x2a\x65\x4b\x3e\xdf\x85\xfc\x52\xde\x89\xe5\x4a\x90\xd7\x8d\x03\xfd\x13\xcb\xc9\x77\xa6\x45\x74\xc9\xb4\xf3\x67\xe7\x50\x69\x91\x15\x9a\x4c\x69\x42\x45\x64\x36\x6f\x3d\xbf\x41\x4b\x1c\x0c\x7f\x09\x4f\x41\x8c\x1c\x5f\x4e\x83\x43\x07\xd9\x98\x5c\x28\x6d\x46\xc3\x34\xcd\x72\x82\x07\x89\x92\x43\x73\x44\xdd\x00\xeb\xce\x04\x18\xca\xfe\x1b\x5d\xf4\x56\x18\x30\xa6\x6d\xbd\x5e\xe0\x57\xb7\x74\xae\x09\x30\xac\x4a\xaf\xb2\x89\x31\x61\xe3\x39\x28\xbc\xb5\x25\xdb\xa9\x16\x8d\xba\x3a\xa4\x9d\x21\xbe\xb5\x59\x39\x5b\xc4\x6b\xbd\x1d\xb6\x87\x49\xf0\x56\x22\x86\xda\xf6\xfa\xc0\xfe\x8e\xea\x13\x8c\x3a\xe4\x46\x07\xb5\xf5\xf6\xd1\x4f\xf4\x26\x8b\xf7\xa1\xcf\xcc\x9a\x7d\xdf\xde\xe1\xb6\xae\xf2\x57\x39\x39\x64\xde\xd0\xc4\x55\xc4\x40\x53\x58\x0f\x30\x2f\x76\x77\x4b\xcf\x00\x1c\x05\xe4\x2c\xa5\xed\x62\xb8\x68\xc5\x76\x20\x7b\x4e\xf5\x23\x9a\x25\x09\x1e\xd6\xd2\x84\x32\xaa\x70\xd8\x78\x8d\xc3\x08\x55\x2f\xc6\xc6\x1f\x6e\xe8\xd6\x86\x8e\xb2\x95\x87\x86\x1c\x92\x69\xa1\xc9\x9c\x2f\x8d\x00\xb8\x93\xd3\x03\x1d\x3b\x0b\x96\x64\x24\x67\x71\x11\x59\x28\x07\x90\x4e\x07\xa1\x85\x06\x99\xeb\x9e\x3b\xec\x54\x08\xba\x63\xd1\x25\xab\xc2\x87\xcf\xe0\x80\x80\xa2\xc5\x67\x84\x2d\x59\xbe\x22\x99\x54\x0a\x8e\x21\xb0\x2d\x2c\x68\x84\xd8\x99\x47\xb1\x06\x6b\x02\x66\xe5\x14\xf8\x1d\xab\xc1\xef\x80\x85\x2b\x2b\xac\xe8\x61\x1c\x7a\xdf\xee\xbf\xdc\x7f\x79\xbb\x31\x36\x81\xff\x95\x1e\x3a\xf7\xdf\x93\xd9\x06\x9b\xb3\x9c\x4b\x65\xe7\xdc\xc7\x89\xf7\x0d\xf8\xda\xbe\x1d\x04\xbe\xbc\x6f\xf7\xbf\xd9\x7f\xb9\x67\xe6\xfa\xcd\xc0\xcc\x3a\xf0\xd2\x7d\x13\x78\xe9\xfc\x2f\xed\x8c\x98\xaa\xf8\xe9\x4e\x84\xad\x5e\xbd\x92\x79\x6c\xb3\x74\x5d\x25\xa4\x99\x11\x22\x04\x1a\xd9\x90\x3a\x5e\x8e\xdb\xae\xea\x25\xd8\xd5\xe8\x2e\xe4\x9a\xfc\x39\x95\x39\xfb\x73\x70\xff\x8d\xfe\xb5\xe6\x6e\xb3\x47\xee\xa1\xd6\x3c\x45\xb2\x6d\x82\x64\x37\xcd\xd8\xb0\x91\x4f\x9b\x9c\xe6\xdd\x37\xae\xff\x25\x0e\x65\x93\xc7\xd0\xa9\x9b\xda\x24\xc7\xe9\x2a\xac\x89\x9e\x32\xa3\xd2\xa2\x0f\xac\x04\x18\xbc\x67\xbf\x5f\xa5\x65\x4e\xe7\x6c\xdf\x3e\xb6\x49\x05\xf3\x63\xe4\x22\xff\x8c\x9d\x93\x2a\x99\x42\x08\xdd\x64\x7b\x2a\xb9\xb2\x74\x97\x43\x0a\x5c\x80\x46\x50\xd1\x09\x84\xac\x80\x83\x06\xb5\xa2\x4f\x24\x1d\xf9\x81\x3b\x46\xd2\x2b\x75\x9c\x50\xa5\x79\xf4\xaf\x44\x46\x97\xe7\xda\x58\x3d\xad\x55\x8b\x4d\xa3\x56\xd6\x54\x90\x83\x5f\xce\xc9\x11\x57\x97\x65\xdb\x64\x6c\x81\x53\x2d\xa2\xa4\x1e\x02\xda\xe2\x69\x90\x94\x46\x0b\x54\x5d\xad\x0f\xda\xb5\x01\xeb\xee\xac\xfc\x89\x5e\x29\x86\xd3\x87\xb6\xb4\xe6\x6b\xd6\x9c\x05\x3f\x1a\xe6\x24\xbe\xce\xc9\xd1\x23\x24\x2f\xcf\xd4\x45\x63\x40\xeb\xf5\x66\x72\xae\x2b\x01\xe2\x42\x24\x0c\xab\x8d\x10\xdf\xbb\xda\x20\x0e\xf6\xd0\x4a\x16\xe4\x8a\xa2\x5d\x0d\x1c\x76\x4c\x2e\x78\xf6\x8a\x1c\x07\xad\x96\x36\x0d\x65\xb4\x0f\x8f\xdc\x6a\x0d\x6a\xd8\x73\x98\x8c\x64\x18\xb2\xad\x73\x22\xc7\xa8\x5a\xa9\x57\x64\x87\x5d\xeb\xbf\xec\x0c\xc9\xce\xf5\x4c\x99\xff\x08\x3d\x83\xd6\x6c\xb6\x15\xb7\xd1\xf1\xc4\x8c\xe5\xa5\xe9\x88\x3f\x58\x07\x83\xea\x7e\xcb\x92\x8b\x77\x47\xef\x5e\x81\x2e\x1f\x4b\x63\xf5\x65\x39\x5b\x1a\x9d\x92\xe5\xb9\x2c\xb1\x37\x02\x32\x40\xfa\x4c\x24\xd3\x2c\x97\x29\x0f\x0a\x90\xe1\xc8\x35\x39\x01\xa4\x8b\x0c\x38\x30\x6c\x61\x33\x74\xb2\x9f\xfc\x70\x6e\x4b\x05\x1f\x88\xbb\x6c\xa6\x93\x19\x91\x98\x28\x50\x85\x40\xe0\xca\xdf\x64\xb6\x8f\x1d\x45\x00\xae\x54\xb9\x61\x8c\x66\x6e\xbf\xda\x8f\xd9\x72\x5f\xc5\xf4\xe5\x10\x1e\x83\xbb\x61\x55\x9b\x13\x55\x64\xe7\xe5\xce\x98\x9c\xf3\x94\x27\x34\x4f\x6c\xc7\x6b\x3b\x44\x79\x9f\x31\x14\xdc\x80\x60\xfe\xbe\xd8\x21\x7b\x88\x41\x00\xea\x46\xc2\x1c\x20\x9d\x47\x2a\x85\x24\x9d\x41\x23\xed\x92\x74\xe0\x8c\x27\xad\x1d\xf2\x04\xb8\x24\x8d\xdf\x89\xa4\x71\xe6\x76\x75\x73\xb8\xd1\x5c\x01\x5f\x5e\x58\x7f\xe6\x4c\xe6\xd6\x08\xf4\xb7\x38\xa0\x23\x2e\xac\xda\xf2\xd6\x2c\xbd\xda\x1a\xf1\x43\x3a\x00\xdf\x23\x5e\x8a\x74\x43\x5f\x37\x1a\xa4\x22\x60\xab\xe8\x93\x23\xc7\xc4\x33\x96\x2b\xae\xb4\x61\x51\x71\x45\x35\xe0\xa8\x2f\xec\x1d\xa4\xf4\x3f\x52\x90\xe3\x7f\x9d\xdb\x69\x0d\xb6\x90\xd8\x0d\x39\x1d\xfd\x4f\x91\x33\xa3\x11\xb5\x56\xbf\xfc\x48\x75\x95\xcb\x7c\x4e\x8e\xa8\xa6\xa8\x79\x21\xa7\x92\x25\x38\x18\xb6\xaa\x87\xa2\x2d\x87\xfc\xd6\x50\x79\x26\x8f\xaf\xfd\x98\x1d\x74\xda\x1c\x75\xdb\xfc\xfc\xfd\xd9\xc9\x23\xe8\x4e\x11\x88\xdb\xf9\x5b\x19\x77\xa4\x40\x05\x03\x3a\x91\x07\xa0\xa6\x87\xf8\x39\x49\xcd\x93\xc8\xa9\x14\x6c\x48\xce\x18\x8d\x89\xe1\x6e\xf6\x9f\xbf\xe4\x5c\xdf\x17\xff\xaa\xbc\x5a\x8b\x7e\xb7\x88\x9d\x10\xc2\x0d\xe6\x88\x10\x36\xba\x07\x80\x4e\x60\x3a\x56\x07\x98\x26\x72\x4a\x2c\xb3\x78\xcc\xb7\x7f\x7f\x76\xd2\xd9\xcb\xbf\x3f\x3b\x71\xef\x6e\xfe\x29\x67\xdb\xf9\xda\x1d\x1a\x0f\xa5\xed\xf0\xba\xa6\xec\x97\xea\x5c\xd9\x8f\xa8\x6e\x10\xdc\xdd\x1a\x18\x77\x65\x07\x3c\x16\xcd\x2f\xb9\x68\x5c\x03\x58\xe5\x36\xd0\x6c\xc8\x43\x62\x05\x41\x34\x40\xe2\x8b\x5f\x91\xb4\x48\x34\xa0\x1e\xc1\x5e\x33\x9b\x0f\xb2\xc5\xdc\xae\x23\x16\x01\x94\x90\x23\x86\xe1\x88\xf8\x95\xab\x43\xf1\xbf\xd8\xfc\x83\xb7\x54\xd0\xb9\xb9\x1d\x24\x20\x49\xf1\xcf\x60\x93\xef\xa1\xd3\x5d\xf8\xaf\xe8\x92\xf2\x84\x4e\x79\xc2\x35\xe8\x73\x83\xb1\xd3\xe6\xb1\x54\x01\xa6\xfc\x68\xdc\xaf\x53\xd5\xd6\xab\xad\x21\x3e\x0c\xc0\x1b\x92\x3d\xf3\xdd\xfe\x95\x61\xf5\x83\x31\xf0\x7d\xb8\x11\x50\xdb\x6b\xca\xef\xd9\xe7\x94\xdf\x47\xd1\x53\x61\xbd\x5f\x37\x6c\x94\xb6\xae\x3b\x99\x91\x36\xea\x4e\xf0\x85\x05\x1d\x7d\xe6\xea\x13\x36\xab\x6f\xa1\x40\xc1\xd9\x69\xf8\xfb\xb6\x2a\xd4\x97\x39\x38\xf1\xf3\x3b\x38\x04\x5b\x4a\xda\x95\xee\x84\x5c\xe5\x70\x4e\xd7\xf0\xe0\xd2\xf8\x55\xad\x7c\x1e\x4f\xd6\xb9\xe5\xe5\x0e\x74\x1a\x7e\x6f\xce\x53\x13\x70\x0d\xbc\x5a\xb3\x5f\xbf\x83\xbb\xa1\x8b\x1b\xcd\x91\x05\x85\x14\x7c\x4c\x1a\x9f\xb3\x96\xaf\x19\xb1\x6c\x31\x6b\x9f\xd9\x6e\x86\x79\x7d\x5e\x8d\xda\x1c\xb2\x6c\x41\x5e\x9f\x6f\x60\x93\x58\x55\x60\xde\x5b\x61\x2c\x67\x57\x91\x84\xcf\x98\xe6\x8d\x88\xf0\xc8\x8c\x32\x95\x82\x6b\x99\xab\x47\x60\x73\xee\xd1\xdd\x28\x6e\x6e\x34\xb3\x3f\xcf\x1c\x51\xc8\xdb\xe0\x53\x4a\x22\x99\x24\x2c\x72\xb9\xfe\xb0\xc4\xfe\x67\x1b\x1c\x31\x36\x03\x41\x8d\x2f\xff\x0e\xae\x18\xeb\x74\xd9\xc7\x6d\xb7\x7f\x76\x7c\x70\xf4\xf6\x78\x9c\xc6\x7f\x5a\xc8\xab\x91\x96\xa3\xff\x8f\xbd\x77\xed\x6e\x1b\xb7\x16\x86\xbf\xf7\x57\x60\xf9\x74\x2d\xdb\x53\x49\x4e\xa6\x3d\xed\x69\x9e\x9e\xce\x72\xed\x64\x1e\x9f\xc9\xc5\x8f\x9d\x99\x59\xe7\x4d\x72\xce\x40\x24\x24\xa1\x26\x01\x0e\x01\xca\x51\x3b\xfd\xef\xef\xc2\xde\x00\x08\xe8\x4a\x49\xf4\x2d\x43\x7e\x49\x4c\x91\x20\xb0\xb1\xb1\xef\x97\x4a\xb1\x3e\xd7\xfb\xc9\x5b\x0f\x58\x4f\xa4\x05\x4b\xb7\x9e\xb4\x65\xe4\xd6\x13\xb3\x65\x75\x51\xeb\xef\x55\x5d\x76\xde\xf9\x9d\x4b\x29\xf5\x62\xe1\xf9\x51\x95\x65\xb8\xb7\xba\x64\xac\x17\xda\xb7\xb7\x2c\xcb\x5f\x5f\x8f\x4b\x16\xae\xcd\xbc\x11\x88\xee\x56\x32\x7e\x2c\x07\x64\x7f\x59\x61\x57\x49\x9b\x2c\xec\x43\x3d\x5e\xbc\x13\xd7\xd1\x7d\x74\x88\xe8\x89\xd9\x97\x1b\x36\x23\x50\x3a\x62\x24\x4b\x68\xe3\x12\xe3\x27\xd3\x09\x00\xef\xa4\x52\xac\x1c\x58\x81\xe3\x91\x00\x7e\x1f\x51\x04\x16\x72\xc5\x46\x6d\x82\xfd\x8a\x8d\x96\x41\xdd\xde\x86\x5a\xb7\x3e\x3c\xce\xc8\x2b\x95\x9e\x60\x6c\x2c\xd6\xd8\x46\xd8\x2e\xdd\x06\x5b\xfb\xe3\x91\xc0\x7d\xaf\xaa\x0d\x6d\x54\x16\xda\xa7\x93\x22\x59\xd8\xbc\xd0\x6c\x69\x37\x49\x6f\xed\x06\x91\x53\xa3\xc5\xb2\xdb\x93\x5b\x59\xde\x70\x31\xee\xdf\x72\x3d\xe9\x23\xa4\xd4\x09\x54\xfc\x3f\xf9\x37\xf8\xc7\x7a\x91\x4f\xd3\xd4\xc6\xbf\x55\x8a\x8d\xaa\x0c\x23\xd3\xd4\x80\xd0\x82\xff\xc0\x4a\x05\x51\x96\x37\x5c\xa4\x3d\x52\xf1\xf4\x9b\x5d\x77\x8c\xb4\x71\x5a\xcc\xd9\x6f\xe7\xa0\x40\x4f\x27\xae\x6c\x07\x43\xcb\x46\x4b\x47\x93\x4a\x9a\x4a\x85\x7d\x9f\x0c\xa8\xa2\x23\x40\xd3\x9c\x8b\xc7\x72\x02\x76\xd5\x0e\xb8\x48\x77\x83\xe4\x9c\x03\x02\xc6\x89\xd5\x03\x7b\xcf\xba\xb1\x7d\xcc\x0f\x75\xd6\x13\xec\x1e\x6f\xa3\x7f\xe2\xd8\x9f\x46\x84\x25\x9f\xa9\x9f\xb3\x3e\x7e\xa5\x5f\xa4\x35\x5c\xbb\x40\x9e\x6d\xae\xfb\x0b\xe4\x69\xd7\x20\x7f\x0f\xe1\x39\x77\x8a\x71\xe4\x11\xcb\xcc\x77\x6b\x07\x7b\x40\x50\xef\x2f\x19\xdf\x8d\x84\x56\x73\x1f\xe8\x49\xa8\x5c\xa1\x3c\x10\xc0\x90\x2a\x39\x7b\x1a\xc4\xc8\xd7\x4d\xb0\x5c\xb5\x87\x44\x0a\x61\xfb\x23\xbc\x2b\x98\xb8\xd6\x34\xb9\xd9\xd3\xab\xdb\x49\x55\xbf\x32\xa9\xea\x8e\x02\x81\x1c\x8a\x62\xe2\x9d\x0d\x7f\xab\x83\xbd\xf1\x90\x3f\x41\x02\x8c\xcd\xfe\xde\xd0\x62\x7f\xeb\xaa\x1b\x69\x4e\x82\xf2\xb7\xad\x41\x15\x92\x83\x0a\x59\x40\xb1\x31\x9b\x82\x0a\x70\xbc\x7f\x89\x67\xdf\xf3\x6d\x59\x4c\x7b\x31\x30\xc1\x80\x31\x45\xcd\xcd\x9d\x21\xd7\x35\xad\x54\x4c\x63\x29\x28\x5b\x22\x59\x0a\x92\xd8\x72\x0f\x20\x8f\x04\x45\x0c\x02\x59\x45\x10\x99\x68\x97\x35\xea\xab\x46\x3d\x7b\xf6\xec\x19\x56\xc2\xf9\xd3\x9f\xfe\x44\x64\x09\xbd\x48\x13\x9e\x2f\x3e\x08\x4f\xfd\xfb\xf3\xe7\x03\xf2\xdf\xa7\x6f\x5e\x43\x46\x43\xa1\x15\x56\x7d\xc3\x91\xcd\x03\xd1\xcb\xaa\x47\xfe\xeb\xfa\xdd\xdb\xba\x46\x43\xfc\x2b\xa8\xe6\x7e\x79\x71\x5f\x90\x67\x7f\xfc\xc3\x1f\x06\xe4\x9c\x97\x90\xd1\xc5\x99\xef\xcd\xee\x4d\x2d\xb4\x64\x58\xb9\x07\x6a\xa8\x38\x89\x8b\xfb\xf6\x8e\x36\x3f\x39\xe7\xe3\x89\xb6\x19\xb1\x06\x21\x33\x9e\x68\x4c\x1e\x43\xb2\xe6\x5a\xbf\x63\x4b\x11\xdb\xa4\xc7\x4a\x7f\x30\xb9\x1e\xc9\xf8\x0d\x23\x23\xf5\x6d\x29\xab\xa2\x2e\xf3\x88\x05\x5a\x5c\xa2\x0c\x0e\x56\xef\x95\x62\xfa\x89\x87\xad\xee\x65\x6a\x8e\x70\x1b\x46\x9a\x13\x58\x6d\x7a\x6b\x5d\xea\xb0\xa0\xdc\x27\xc3\x40\x04\x60\xd4\x03\xd4\xdb\x7a\x52\x72\xe6\xa9\x8a\xab\x39\x52\x94\xf2\xef\x88\x02\x90\x8b\x1c\x90\x67\xc8\x15\x86\x9d\xb4\x99\xc2\x81\x77\xcb\xe5\x53\xdb\xe6\xec\xee\xb6\xed\x64\xb3\xd8\x0e\x2c\xe3\xca\x7c\x02\x8a\xfd\xac\xf9\x72\xdd\xcb\xd8\x60\xa9\x42\x7c\xa9\xc4\xc2\xdb\xb6\xb0\x8a\x25\x97\xb6\x09\xa8\xad\xaf\x58\x8f\x81\xe5\x01\x6c\x1d\x1c\xfb\xac\x83\x92\x07\x44\x14\x6f\xad\x98\xae\x2c\x68\x20\x8a\xde\x7c\x1b\x1a\x54\xc2\x0a\x73\x5a\xde\x18\xc5\xd5\x52\x97\x01\xb9\x34\x93\xf4\xa5\x74\xb0\xd8\xf1\x14\x1d\x9b\x39\x9d\xc1\x67\xad\xe0\x06\x1f\x39\x1c\x0c\x0e\xf1\xf8\xc9\x92\x28\x4d\x4b\x7b\x96\xcc\xfd\x2f\xa3\xca\xfa\x1b\x5a\x28\xac\xfa\x6b\x24\x55\xa8\x88\x2d\x21\x77\x5d\x4f\x1c\x09\xa2\x16\xd6\x5d\x65\x74\xd2\x07\xc0\xec\x3c\xc0\x23\xaf\x8a\x6e\x77\xdf\x9e\xf2\x47\x51\xb2\x3b\xdf\x43\xe0\xc0\x6b\xde\xa7\x9a\xce\x79\x36\x1a\xc9\x1b\xb6\x2b\x54\xc6\x9e\x94\x80\xb1\xbc\x0b\xac\x25\x9c\xa1\x00\x16\xb6\x07\x7d\xba\x72\x04\x5e\x6d\x48\x13\x78\xed\x2f\x53\xe0\xb5\x8f\x13\x19\xaf\x08\x87\x9d\x27\x19\x81\x69\x19\x18\xf2\xa8\x51\xbd\x05\xd0\xab\xaf\x08\x8e\x35\x36\xb6\x75\x0d\x9a\x05\xa1\x43\x25\xb3\x4a\xe3\xab\xf5\x8f\x21\xf7\x83\x41\x5d\xcd\x70\x60\x79\xfe\xb1\x80\x17\x82\x14\x80\xec\x63\x1f\xb6\x88\xd7\xde\x64\x63\x1f\x23\xc4\xaf\xc8\x00\xb1\x37\x9c\xbd\xc2\xd6\x06\xac\xdd\x60\x3e\xe3\xee\x76\xc2\x6c\x08\x44\x20\xf7\x19\x6a\x6a\x68\x04\x08\x95\x4e\x84\xc3\xc2\x39\xe9\x83\x98\x19\x13\xc5\xf7\xb7\x25\x28\x4e\x8e\xce\x7c\x7a\xbc\x0b\xbb\xbb\x10\x9a\x95\x23\x9a\xb0\xe3\xd0\xc6\xc0\x8a\x09\xcb\x59\x69\x00\x65\x9f\x73\x39\xda\x13\x2a\x52\x5b\x76\x2a\x61\x25\x9c\x60\xf6\x59\xb3\xd2\x00\xf5\xec\xfa\x82\xa4\x25\x9f\xb2\x52\x91\xa3\xbf\x41\x39\x41\x2c\x37\x75\xfc\x04\xc3\x60\x71\x21\x0f\x61\x01\x81\x0f\xb7\x93\xfa\x01\x43\x39\x1a\x2e\x02\x3a\x53\x6f\x95\xab\x8d\x65\xb6\x55\x85\xb6\xa3\x81\x39\x10\xc0\x42\x81\xfa\x42\x47\x6b\xf4\x6d\xba\x62\xf6\xd0\x78\x2b\xd1\x38\x30\x55\xa4\x64\x63\xa3\x8d\x95\x41\xd1\x3e\x2c\x93\xf2\x60\xc9\x0d\xed\x27\x94\xd4\xce\xaa\x75\xb9\x1f\x23\xab\x57\xca\x29\x4f\x9d\x38\x84\x85\xf1\x7d\x69\xb8\x82\xaa\xa0\x78\x01\x55\x4a\x26\x1c\x4c\x4d\xc1\xd6\xa0\x96\x0a\x42\x53\xdc\x0a\xcd\xb9\x9b\x43\x37\x99\x84\x86\x42\x3b\xf5\x61\x25\xad\x30\x44\x99\xb2\xcb\x6a\x98\x71\x35\xb9\x6e\xd5\x25\xb2\x6c\x60\x0c\x4a\x5c\x88\x54\x59\xe9\x19\x51\x4c\x28\x6e\xdb\xe6\xa3\xb8\xc5\x25\x74\x59\x30\xdb\xe0\xde\x0e\x0f\x85\x84\x6c\x78\x68\xc6\xef\x7e\x7a\x5b\xcf\xc3\x16\x2b\xc1\x2e\xd0\x29\xfb\x5e\x14\xd1\xfd\x84\x66\x99\xb2\xf2\xad\xef\x71\xe2\x78\x0f\x4a\xa8\xae\x80\x09\x62\x05\x37\x08\xe3\x66\x0f\x21\x38\x48\xbc\x7c\x43\x9e\xa5\x0b\x53\x41\xb9\x61\x29\xdc\x43\xd0\xcc\xda\xbd\xe0\x21\x84\x99\x38\x88\x74\x0f\xd8\x0a\xa5\x73\xff\x3c\x3d\xf7\xcf\xdd\xe4\x54\xd4\x2d\x46\x29\xdc\xec\x43\x86\x16\xba\x36\x2a\xdb\x36\xd7\x31\x1a\xc7\x90\x36\x84\x69\x3e\x98\x0b\x18\xe7\x77\xaa\x6d\x2f\x8a\x76\xac\xbb\xf3\x83\x82\x28\x66\x54\x71\xa0\x50\x7d\x0b\xbf\x24\x38\x52\x56\x47\xf6\xe7\x7c\x91\xae\xd5\x3c\x1d\xd8\x39\xde\x3c\x54\x24\x95\x49\x65\x94\xaf\x1a\xec\x75\xc0\xc5\x7e\xdd\x0a\xbf\xac\xf6\x49\xa9\xbc\x15\xb7\xb4\x4c\x4f\x2f\x77\xca\xcd\x8d\x85\xb3\x7a\xac\x50\xf4\x76\xb7\x89\xb9\x4f\x87\x50\xf0\xd6\xd6\x36\xec\xbc\x7d\x4b\x87\x08\xa9\xf9\x32\x73\x9b\x96\x86\xc8\x36\xf4\xe6\x6d\x6b\xb0\xeb\x1c\x84\x9d\x83\x30\xba\x1e\x93\x83\xf0\x02\x1d\x84\x61\xa7\xdf\x88\xbc\x58\x0b\xad\x81\xf8\x17\xe1\x63\x3a\xaf\x49\x2a\x4a\xe2\xf3\xf9\xbc\x73\xc2\x3f\x1e\xde\x1a\xeb\x02\x85\xc1\xd1\x5c\x90\xcb\xbe\x04\x7f\xd4\x23\xf0\x27\x01\x2c\xf7\xd0\x0a\xf1\x8a\x09\x7e\x9d\xaf\x86\x55\x6a\xd1\x31\x1d\x78\xb8\x0b\x99\xda\xde\x06\xd0\x74\x03\x1b\x08\xf4\x7c\x67\x40\xe1\xd2\x4d\x41\x3a\x2f\x68\xc2\x80\xbe\x79\xf1\xa7\x15\x27\xc1\x9e\x08\x40\x5a\x42\x02\x02\x88\x00\xd0\xb9\xdc\x07\x1b\x48\x6b\x18\x61\xae\x5a\xe3\xd9\x77\xa4\xf9\x8a\xa2\x38\xaa\x43\x04\x95\x4c\x58\x4e\xe1\xbf\xaf\x1c\x08\x0c\x6d\x34\xca\x83\x66\x58\x02\x8e\x95\xb9\x22\x72\xd4\x8b\x22\x5d\x0f\xa6\xcf\x0f\xf6\x73\x36\x90\xf6\xfc\x94\xc4\x9d\xa3\xcb\xbd\x9d\x3d\x64\x1e\x60\x97\x91\x6f\xc7\x9c\xa1\xba\x07\xa6\xab\x7b\xef\x23\x28\x80\x7f\x20\x84\x1f\x0d\x70\xda\x76\xe2\xee\xea\xbc\xed\x79\xaf\xc1\x13\x10\xfe\x3a\xe7\xed\x97\xe8\xbc\x0d\x18\xa3\x23\x74\x4b\x1c\xb9\xa1\x4b\xc0\x79\x73\x87\xcc\x29\x35\x56\x87\x71\xae\x5c\xe7\xc7\x95\x65\x1c\xba\x74\x38\x18\x1c\x1e\x3a\xef\xae\xc5\xfb\x4a\x8f\xfa\xff\x41\x98\x48\x64\xea\x1a\xf8\x8e\x78\xa9\x34\x88\x7b\xb5\xb9\x2d\x9c\x4b\xee\xbe\x15\x86\x3f\xc1\xd8\x6d\x6c\xf5\xde\xb4\xc5\x95\x24\x7c\x75\x07\x42\x4c\x2d\xba\xf8\xc2\x87\x16\x44\xbe\x9e\xb5\x95\x61\xdc\xef\x8a\x64\x3c\xe7\xb6\xff\xbd\x39\xe8\x4c\x69\x45\x8e\xf0\xe6\x20\x29\xaa\x9e\x7d\x60\x90\xb3\x5c\x96\xb3\x9e\x7f\xc8\xfc\x18\xbd\x65\x9f\x38\xc6\x7e\x27\x55\x59\x32\xa1\xb3\xd9\x97\x2c\x01\x39\x20\x3e\x12\x01\xc8\xef\xf1\x3e\x15\x47\xea\x2b\x46\xad\xda\xe3\x0b\x66\xf3\xa0\xbf\x80\xaf\x46\xab\x7a\xb5\x5f\xdc\xdc\x65\x62\x4a\xa6\xb4\xdc\xb2\x72\xfc\xb2\xab\x45\x99\x27\xe5\x53\xae\xe4\xce\x6e\xd1\x60\xa0\x10\x3c\xd7\xde\x08\x6d\x0e\x9b\xac\x74\x51\x69\x4b\xd1\xdd\x09\x74\x55\xc6\xfd\xc9\x9b\x13\x0e\x9f\xef\xd2\x45\x29\xbe\x0a\xaa\x35\x2b\xc5\x0b\xf2\x3f\x47\x1f\x7f\xf7\x4b\xff\xf8\x9b\xa3\xa3\x0f\xcf\xfa\x7f\xfe\xf4\xbb\xa3\x8f\x03\xf8\xcf\x57\xc7\xdf\x1c\xff\xe2\xfe\xf8\xdd\xf1\xf1\xd1\xd1\x87\xef\xde\x7c\xfb\xfe\xf2\xe5\x27\x7e\xfc\xcb\x07\x51\xe5\x37\xf8\xd7\x2f\x47\x1f\xd8\xcb\x4f\x0d\x07\x39\x3e\xfe\xe6\xb7\x7b\x4f\x9d\x8a\xd9\xbb\x3d\x49\x21\x5e\xfd\x16\x59\x72\x3c\x62\x2b\xe8\x37\xd7\x56\x82\x0b\xdd\x97\x65\x1f\x87\x7e\x01\xc5\x82\xf7\xfc\x80\x43\xaf\xb6\xcf\x7f\x2d\x06\xd4\xe5\xf6\x9d\x50\xff\xc0\x07\x1c\x5c\x9f\xe7\xbc\x85\x34\x63\x37\x52\x9c\x26\xa3\x59\x5e\xc8\x92\x96\x33\x92\x5a\x6b\xe6\x6c\x49\x05\xa2\xa0\x04\xd1\xde\x25\x85\x61\x1e\x29\x2f\x1f\x20\xd3\x78\xef\x8a\x42\x2c\xe5\x55\xde\x52\x3d\x21\x18\x2b\xdc\x8c\x5b\xa8\xbc\x6f\xab\xf6\xbb\x90\x22\xfb\x98\x75\x68\x0c\x69\x72\x83\x1a\x94\xdf\x2d\x94\x1b\x83\xd4\xfa\x83\x03\x1b\x12\x91\x33\x2a\xbc\x61\x1f\x62\x5b\x64\xca\xcc\x56\xba\x87\x71\xec\xc8\x08\x8f\x9e\x76\x1b\x40\x58\x77\xa4\x92\x25\x79\x03\x02\xd0\x83\xee\x3e\x69\xa5\x56\x08\xff\x07\x7b\x6d\xa4\xbe\x96\x32\x51\xdd\x70\x2e\x80\x48\x4b\xd0\x37\x6d\x5d\xaf\x11\x34\xd9\xaa\x23\xc4\x22\xc9\x02\x36\xf2\xa5\x3b\x96\xce\x7f\x6b\xb6\xd3\x8c\x8a\xb2\x29\x18\xa6\x33\x85\x71\x2b\x3c\x81\x3e\x50\xa0\x9b\xc2\x76\xf8\x2d\x7c\x1f\x34\xea\xaf\x94\xf9\x92\x14\xf1\x33\xf5\x87\xb0\x4d\xd6\x10\x71\xc2\x75\xd7\x8e\x35\x6a\xf3\xcb\xb5\x5f\x59\x6d\xcf\x80\x94\x65\xa7\x7e\xaa\x0a\x94\x14\xfb\x15\x2b\x6a\xcb\x11\x44\x56\x04\xfd\x7a\x5c\x4b\x9a\x05\x44\x15\x3c\x8b\x31\xd5\x75\x9e\xf0\x0b\xaf\x84\x0d\x28\x7c\x70\xb4\x7b\x72\xd2\xc7\x9e\x32\x47\x5b\x92\x46\x2b\xf2\x45\xeb\x52\x85\x8f\xdc\xdc\xbf\xdf\x6b\x1d\x04\x1a\xb1\xd5\xb0\x47\x46\x1c\x10\x4a\x7d\x5b\x34\x47\x13\x5c\xd4\xc1\x7b\x6f\x51\xb2\xec\x36\x99\x25\xb6\xc2\x13\x8f\x3a\xf8\xe0\xb0\x78\x34\x20\xb7\xaa\xef\xbb\x57\xd7\x76\x09\x32\x64\x23\x0c\x7c\xc2\x77\xc0\x60\x60\x33\xc2\x52\x96\x31\xcd\x82\xb6\xf3\x05\x36\xca\x2e\x59\x2e\xa7\xb6\x4d\xeb\xf7\xca\xba\xcd\xf9\xe8\x05\xa1\xc7\x51\xde\xb1\xb2\x7d\x90\x19\x4b\x31\x4d\x2c\xe8\x2d\x58\x56\x42\xf5\xc8\xf0\xd8\x85\xb5\xda\x2e\x98\x25\xd8\xd6\x6c\x93\x2f\x30\x67\x95\xcc\x00\x00\x6a\x55\x95\x32\x27\x4a\xd0\x42\x4d\xa4\x06\xcb\x09\x2d\x68\xc2\xf5\x8c\xe8\x92\x26\x37\xe6\x11\x70\xa7\xc2\xe7\x7a\x24\x39\xb6\x51\xee\x21\xf8\xe2\xcc\x35\x3d\x29\x65\x35\x9e\x40\x2a\x15\x3e\x95\x64\x54\xb9\xd5\x2f\x7d\xdf\xaa\xf2\x8a\xa4\x33\x41\x73\x9e\xf8\x16\x22\xa5\x9c\x72\xc5\xa5\x75\x78\xb9\x71\x2f\x7d\x33\x06\x74\xa2\x9d\x65\x94\xe7\xe4\x48\x31\x46\x5e\x3a\x94\xc0\x5f\xae\x51\xa0\x44\x83\x62\x19\xc7\xd6\xd9\xba\x8f\xb6\xfe\x80\xb9\x53\x53\x60\x1f\xb1\x80\x32\x81\x99\xf9\xd2\x8f\x1e\xfb\xed\x5a\x3e\x27\x59\x42\xdc\x9b\xeb\x04\xc4\x44\x2a\x83\xc0\x98\xd3\xcb\x0b\x15\xaa\xb9\xb6\x9b\x22\x8e\x04\x3f\x64\x52\x8c\xc3\xfa\x77\x35\x66\x1a\x5a\x2f\xa0\x2d\xe6\x94\xa7\x15\xcd\x90\xca\xdb\xc9\x9c\x5d\x5f\xe0\xeb\x7c\x3c\xd1\xfd\x5b\x06\x46\x50\x64\x86\xf5\x99\x71\x1f\xe5\x0b\x01\xb7\x5c\x01\x57\xd0\xd6\xd8\x86\x06\x65\x68\x3d\x49\x67\x50\x7f\xd7\xc6\x78\x46\x31\x39\xae\x5a\x3d\x0e\xb1\x0c\xe2\x30\xbd\x53\xdf\x27\xd1\x48\x46\x60\x25\x36\x20\x06\x4c\x5d\x9c\x1b\x34\x7d\xac\x5b\x6f\xf8\xdb\xba\x6e\x00\x09\x72\xf1\xee\x8d\x82\x1f\x4c\x9e\x9d\xd6\x68\xf2\x9e\xe5\x45\x46\x75\x3b\x11\x26\x07\x3f\x06\x56\xf0\xc0\x87\x6c\x8e\x23\x15\x69\x9f\x66\x06\x23\x2f\x7f\x38\xb3\x09\x6e\x78\xc0\xa2\x28\xb6\xf7\x75\xab\x52\xd7\xa5\xda\x08\x4b\x4b\x8f\x16\x94\x54\x1b\xb2\x14\x88\x91\xfd\x32\x98\x2a\x6e\x05\xb6\x0a\x36\x7f\x5c\xfe\x70\xd6\x23\x7c\xc0\x06\xee\x2f\xff\xa8\xa3\x86\x5a\x8e\x31\xcf\xc1\x27\xd2\x00\x3e\xc3\x54\x42\x1b\x70\xf8\xee\x4f\x7f\x31\x93\x34\xbf\xfe\xb5\xff\x97\xa0\xa5\xd1\x5f\x7f\x32\xc4\xb5\x34\x0f\xc4\x77\xc3\x30\x73\xa0\x7b\xe6\xaf\x9f\x2e\x65\x7a\x5d\xb0\x64\x80\xcb\x52\x3f\x61\xb0\x00\x61\x42\x1b\x91\xfb\x52\x42\x80\x19\x4f\x11\xcb\xe1\xdb\x25\xfb\xbb\xf3\x13\xd8\xae\xa9\x96\x90\x24\x54\x33\x01\x0c\xc0\xe5\x1b\x0b\xa9\xf1\x75\xec\xb7\x0a\xf3\x3f\x1a\x85\x1d\x50\xb5\x94\x70\xcc\x91\x94\x9c\x0a\xc2\x3e\x73\x05\xe5\x67\x70\xad\x00\x0e\x6a\x63\xd8\x1d\x4f\x33\xc3\x1a\x08\xfb\x6a\x43\xd0\x82\xd5\xcc\xed\x2b\x21\xf5\x57\x7e\xfb\x5d\x7c\x22\xf6\x33\x27\x74\x2a\x79\x4a\x2a\x68\x9f\x65\x4e\xa0\x00\x03\x77\xdd\xc1\x70\x38\x23\x39\x57\x9a\xde\xb0\x01\xb9\x36\x3c\x2b\x0c\x34\x40\xe8\x09\x02\xcd\x68\x58\x4a\x2a\xa1\x79\x06\xbf\xd6\xe3\x98\x29\x87\xbc\xec\x62\x44\x54\x95\x40\x8f\xde\x92\xf5\x1d\x77\xb4\x4f\x2d\xd0\x98\x7a\x2d\x3d\xbf\xd9\x13\x8a\x6a\x54\x91\xc2\xab\xd8\xf1\x57\x58\xf4\x5a\x08\xaf\x36\xf3\x94\x22\xa9\x39\x22\x00\x13\xba\x6c\x1b\x26\x98\xb9\x38\x20\xd4\xe8\xac\xdf\x40\xb0\x84\x29\x45\xcb\x19\x36\x45\xe5\xbe\x77\xa3\x8d\x7c\x05\x4e\x9d\x53\x51\xc1\x00\x25\xc3\x16\xbb\x55\x02\xd0\xa1\x64\x58\xca\x1b\x26\x7c\x26\x81\xd9\xc5\x38\xae\xba\x0e\x1e\xc5\xee\xd3\x24\x99\x50\x31\x66\x75\x32\x79\x4e\x53\x80\xfd\x77\x5e\xd2\x72\xeb\x31\x10\xa0\x23\x23\xb0\x70\x0d\xa0\x18\x1a\xfe\xe4\xbd\x1f\x1f\x85\x2f\x87\xdb\xab\xdd\x13\x66\x49\x3c\xdb\x89\x26\x92\x76\xec\xe1\xfb\x5b\xc2\xfb\x20\x50\x3c\x60\x0c\x77\xce\x34\x4d\xa9\xa6\xad\xc5\x71\xbf\xa1\xbe\xf9\xa7\x8d\xed\x00\x74\x08\x62\x3e\x2c\x8f\x75\xa2\xa4\x2c\x78\x58\x5e\x00\xa8\xc1\xc4\xed\x3e\x94\xa7\xd2\x06\xaf\xad\xef\x11\xc3\xb3\x41\x56\xa3\x59\x26\x6f\x6d\xc1\x3a\x37\x1a\x92\x2c\x96\x92\xb4\x02\xb1\xaf\x26\x69\xfb\xf8\xc6\x5b\x71\x9d\x98\x8d\x6e\x0d\xca\xef\xeb\x10\x80\x24\x0e\xd1\x5e\x2a\xa0\x21\xaf\x63\x42\x73\x6c\xa5\xef\xea\x41\x58\xe0\x57\x02\x8f\xea\xdc\x36\xc0\x3e\x8d\x99\x56\x75\x70\x25\x72\x13\x43\x22\x2d\x2f\xb7\xb6\x04\x60\x35\x76\x6b\xac\x3a\xbe\x5c\x52\xc4\x8d\x53\xd2\x72\x0b\xc3\xbf\x1e\x7c\x67\xda\xf3\x21\x61\x17\xdc\x37\x32\xdd\xdf\x19\x35\xd7\xce\xb5\x1e\xb8\x4e\x3a\xc1\x04\x24\x05\xb6\x1e\x7c\x00\x5c\xf3\x2a\xaa\x96\x81\x2c\x60\x42\xa7\xbb\x5b\x55\x6b\xc9\xb4\xef\x7b\xb6\xc1\xe7\xfa\xf0\xb9\xfe\xf3\x7d\xed\xd7\xfb\x07\x2f\xba\x6b\xcf\x20\xc6\x78\x42\x2d\x38\x2c\x0c\x69\xbd\x6e\xc5\x9f\x30\x57\x4c\xc9\x8f\x6b\xf9\xaf\x0d\xd0\xf0\x41\x31\x36\xad\x96\x71\x43\x35\x5f\x90\xaf\x22\x89\xcb\x4a\xb6\x5e\x1b\xc6\x64\xa6\x23\xa7\x1e\x0f\xec\xc6\xbb\xaa\x5e\xf1\xe3\xc7\x73\x83\x81\xa8\xb7\x5c\x6b\x74\x49\x53\x5e\xfc\x36\xa2\x32\xb4\xe3\xf7\xa9\xaa\x06\x99\x4b\x99\x65\xae\x85\x3b\x6a\xc8\x73\x21\x4e\xd0\x3e\x08\x9d\x26\x3d\x6f\x86\xf0\xf2\xbe\x60\xb7\x5e\xb0\xa3\x0a\xab\x96\x3a\x97\x3d\x98\x4a\x5c\xdc\xd9\xb2\xf1\x06\xd0\x03\x1f\x7e\x3f\x15\x33\x9c\xfc\x79\x00\x5c\x34\x30\x90\xb1\xf9\x94\xd1\x01\x04\x1d\x66\x46\x0a\x09\x36\xc0\x7f\x67\x8e\xa5\x69\x19\x3c\x75\xc5\x46\xd6\x32\x10\xde\x6a\xf6\x2e\xf2\xc3\xe8\xc5\x41\x1d\x25\x69\xc5\xe4\xa0\x52\xa6\x85\x7a\xf4\x48\x1c\x55\x34\x37\x5a\x54\xb0\x67\xd9\x0c\xf6\x0c\x3d\x68\x31\xf8\xa0\xbd\xf0\x03\xa8\x0d\xc3\xc5\xee\x31\xc5\xf5\x30\x3b\x74\x0c\x9f\xbf\xda\x8b\x62\x80\x40\x4e\x88\xe2\x6a\xc3\x1d\x1c\x91\x9d\xd3\xcb\x0b\x18\xd8\x69\x98\x63\xf8\xc3\x49\x1e\xde\xaf\x39\x64\x86\x2e\xd4\x15\xad\x00\x23\xc3\x77\x97\x84\xb9\xd5\x87\xf3\x3b\x68\xdf\x64\xdd\x45\x2e\x7d\xd9\x30\xae\xd3\xcb\x0b\xfc\xe2\x00\x3a\xf8\x52\x31\xb3\x32\xa1\x9e\xf0\x32\xed\x17\xb4\xd4\x33\x34\xb2\xf4\xa2\xaf\xf9\x1c\xce\x16\xc0\xd1\xaa\x27\x7b\x9f\x8e\x6f\xe1\x15\xed\x11\x80\xcf\xf9\x89\xac\xa3\x6f\xe5\xce\x3c\x36\x88\xec\x9b\x51\xea\xae\x08\x22\x61\xc7\x1f\x67\x63\x79\x12\x10\x89\x68\xf4\x5d\xc9\x0f\x86\xfc\xab\x38\xfa\x06\xc5\x01\x90\xf5\xad\x5d\x4c\x86\x69\x6e\x5e\xb6\x04\x23\x85\x19\xa9\x47\xf8\xc8\x30\x62\x29\xfa\x36\xb9\xde\x1b\xf1\xad\x7c\xea\xc2\x54\xd1\xe0\x00\x47\x37\xf8\x4a\xf8\xaa\x3f\xe5\xe4\x48\x48\x81\x27\x1f\x9f\x3d\xc6\xf8\xdc\x15\x16\x68\x78\xc4\x73\xf3\xd0\x2e\x11\x50\x1a\x27\x26\x70\x91\x9a\x6d\x07\xb6\x07\x16\x0b\x55\x25\x09\x63\xde\xc6\x15\xf6\xb5\xaf\x29\x93\x9d\x72\x4e\x75\x32\x61\x8a\x28\x09\xf5\x51\x95\xa6\x59\x56\xdb\x96\x2c\xa0\x24\x48\x3a\xce\xce\x1f\x08\x40\x51\x36\xba\x35\xb3\x15\x19\xb5\xb6\x9c\x51\x25\x12\x8c\x00\xe3\x7a\x16\x76\x46\x8d\x84\x3d\x50\xa8\x15\x9a\x9c\xf8\x08\xad\xcb\x81\x62\xec\x81\x09\xa4\x75\x86\xc4\x74\xe2\x7a\x8f\x83\xae\x66\x8b\x00\x1a\x3a\x3a\xa4\xc9\xcd\x2d\x2d\x53\x05\x89\xf6\x54\x73\xec\xc5\xd8\x43\xa9\x23\x14\x22\xc4\xe1\x61\xe8\xa8\xe5\x62\x5e\xbe\x09\x27\x72\x14\xcc\x7a\x41\xee\x39\xf6\xf2\x8e\x62\xbe\x4b\x5f\x3d\x31\x42\x2b\x2d\x73\xaa\x79\x02\xa6\x28\x3e\x0a\xbc\x0b\xb9\xef\x6e\xe1\x9d\xc4\xc8\x05\x80\xaf\xd8\x85\x5b\x3c\x58\x2e\x01\x2d\x99\x78\x30\x57\xb7\xcc\xe5\xf3\x0a\x58\x93\xfd\xd0\x7b\xf4\x57\x83\x17\xac\x64\x8c\xf0\xdc\x08\xb0\x14\x1a\x68\x8f\x7c\xce\xbf\x73\xb9\xac\x03\x8a\x91\xd2\x7f\x04\x3f\x57\xf0\x14\xda\xd3\xb2\x4c\xde\x2a\xa2\x6f\xa5\x57\xfa\x6b\x6f\x82\x4d\x6e\xef\xcd\x89\x74\xf6\x1d\x73\xd4\x0c\x58\x82\x73\xd4\x33\xb8\x73\xcb\xb2\xcc\xfc\xbb\xee\x34\xa9\xc1\xb2\x19\xf1\xb1\xc0\xf4\x67\xae\x9c\x05\xc6\xc6\xb3\x1f\xa5\xa5\x2c\x0a\x6b\x4b\xcd\x8f\xe7\x67\x04\xae\xcb\x72\xca\x14\x78\xef\x5d\x84\xbc\x01\xc3\x98\x09\x56\x52\x0d\x8e\x10\x5b\xd4\x11\x08\xca\xfc\x27\xa2\x6d\x5c\x3a\xb9\x10\x5c\xe8\x08\x5a\x0f\x1e\xfb\x2b\x58\x2c\x0c\xa4\x1c\xc2\xa8\x01\x16\xce\x39\x26\xdf\x2b\x5c\x90\x3f\xb3\x3e\x9a\xbf\x91\xce\x80\x66\x5f\xab\x36\x0c\xc8\xd1\x69\x56\x4c\x82\x51\x43\x29\xdd\x67\x4b\xc5\x33\x8d\xbe\x77\x56\x4a\xa5\xde\xba\x57\xb6\xf9\x74\x27\xc1\xaf\x1b\xa6\x93\xe0\x3b\x09\x7e\x87\xab\x93\xe0\xe7\xaf\x4e\x82\x9f\xbf\x3c\x81\xbf\x13\xb0\x78\xf1\x26\xe6\x25\xeb\x00\x44\xde\x4a\x6d\x5d\xac\x20\xe2\xd1\x95\x96\x22\x0a\x8c\xe4\x96\xce\x06\x82\x69\x5b\x51\xc7\x19\x05\xaf\xdc\x78\xdf\x96\x46\xd8\xb1\xb2\x71\x70\x58\xdd\xc9\x77\xb5\x7c\x82\xaf\x68\x89\xfc\xb7\xf6\xf8\xc2\xfd\x43\x65\xfd\x9d\xe6\x77\xc8\xaf\x0b\x07\x48\xd8\x80\x5c\x33\xd7\xc2\x24\xfa\xf8\x62\xd5\x94\x94\x69\xca\x33\x55\x33\xdc\xf7\x2b\x18\xf8\xee\x0c\xf5\x31\xe1\x99\xcf\x89\x68\x57\x4b\xac\x93\x9c\x82\xc0\xb3\x30\xa2\xb3\x7e\x60\x95\xcb\xe1\x62\x44\xae\x58\x22\xa7\xac\x44\xd8\xbe\xfc\x5c\x50\x61\x34\xa1\x57\x94\x67\x06\xb2\x0e\xc2\xb5\x71\x15\xda\x79\xc5\x2e\xbe\xc0\xa2\xed\xd1\xda\x6e\x63\x6e\x27\x65\x0b\xee\x98\xe7\x6d\x20\x51\x51\xb2\x29\x97\x95\x72\x71\xa7\x95\x46\xa6\xa4\xb4\xd5\x3d\x26\x7c\xec\xbb\x6e\xfa\x70\xb0\x92\x25\xb2\x4c\x6b\xf4\x55\x9a\xea\x4a\xc5\xa9\xec\x09\xfa\xd4\xda\x73\xa7\x78\x38\x3e\x22\x29\xad\x4d\x79\x06\x00\xd6\xc2\x38\xf3\x31\x40\xa0\xad\x28\xa8\xa9\x11\x50\xc0\x90\xfa\x61\x96\x10\x17\xb8\xa1\x06\x89\x06\xee\x27\x7c\xb9\x57\xe3\x4e\x1d\x9c\xc1\x55\x1d\x5d\x5c\x47\x3a\x70\xd0\x4f\xa8\x21\x28\x81\x22\xee\xc9\x09\xa0\xaf\x13\xeb\xcf\x51\xf3\xbf\xb2\xdf\x3a\xcd\x8c\x36\x82\xe4\x29\x20\x29\x4b\xa2\x28\x78\x9e\x57\xda\x9c\x83\x01\xb9\xc0\xbc\x5b\xd0\x69\xac\xaa\x3c\xaa\x73\x3e\x59\xa9\x76\x8e\x7d\x08\xaf\xf6\x9c\x6f\xa4\x3d\x07\x1c\x99\xdf\xea\xab\x70\xd3\xc2\x6a\x7a\x52\x30\x8c\x61\x32\xfb\xeb\x62\x9c\xa2\xa7\x77\x2e\x99\x15\x5f\x2d\x1e\x2d\xbc\xda\x53\x83\xf0\x6a\x45\x8b\xc1\xab\xcd\xb3\x8f\x57\x5b\x72\x21\x5e\x8b\xd2\x21\x50\x76\xb0\xcc\x45\x52\x62\x84\x1d\x85\x4c\x07\x4b\x28\x80\x8f\xb9\x93\xa9\x0d\xa8\x8b\xed\x87\x98\x66\x7f\x61\x86\xbf\x71\xc1\xab\x9e\x0b\xd1\x29\xe5\x19\x64\x4c\x70\xa1\x78\xca\xb0\x2b\x90\xa5\x1c\xad\xad\xb7\x55\x81\x74\x2e\xd8\xdd\x10\xcf\x7e\x4e\x8b\xfe\x0d\x9b\xb5\xb4\xdd\xad\x61\xe2\xe2\x44\x11\x12\x39\x2d\xf6\x1e\x1d\x93\x49\x5a\xe7\x49\x87\xaf\x31\x49\x05\x6f\x0e\xad\x68\xe4\xf2\x66\xea\x9c\x9d\x44\xe6\x45\xa5\x59\x20\x42\x59\x61\x67\x6b\xb9\x22\x2a\xd5\x78\x92\x53\x41\xc7\xac\xef\x87\xed\xd7\xec\x62\xe7\xd6\xe1\xe1\xd5\x32\x19\x6c\xb7\xa6\x60\x78\x3d\xb9\x74\x9a\xf8\x6a\x2d\xa1\x97\xdc\x49\x52\x2f\x69\x3f\xb1\x97\xdc\x7d\x72\x2f\xf1\xc5\x16\xda\x3f\xf7\x57\xae\xf8\xc3\xdc\xc9\xb7\xaa\xd2\xba\x93\x1f\x55\x19\xf6\xe3\x70\x45\x64\xce\xb5\x66\x2e\xa8\xda\x9f\x64\x08\x82\x09\x93\xdf\x2d\xcd\x01\xef\x15\x46\x4e\xb3\xcf\xbe\xbd\x6a\xa0\xd0\x83\xb5\xed\x96\x2b\x54\xc1\x05\xe1\x79\x81\xcd\x1e\x80\x76\xf4\x9d\xa4\x6c\xbd\x43\x7e\x26\x09\x44\x6f\x12\xf6\x19\x7c\x64\xf8\xb1\x8e\x4c\x75\x64\xaa\x23\x53\x77\x41\xa6\xb0\x26\xc0\xfe\x25\x36\x22\xf2\xe4\x06\xb5\x45\x28\xe9\x90\x65\xe4\xe7\x8a\x95\x33\x22\xa7\x2c\xc8\xcc\x82\x46\xb5\x46\x90\xc5\xdc\x26\xeb\x29\xdf\x57\x92\x7d\xa4\x66\x09\xd0\x17\x5e\x7e\x2e\x4a\x86\xb5\xc3\x5a\x67\x0a\xf3\x1f\x88\x4b\x80\xe2\x2e\xf8\x9d\x09\x0d\x5a\x18\x56\x1d\x99\xb8\x68\xc9\xc8\xe9\xdb\xf3\x36\x2d\x8f\x8f\x5d\xe9\x3f\x5d\x03\x22\x04\xa5\xff\x05\xf8\x9e\x8f\x8c\xf6\xce\x65\x72\xc3\x66\x3d\x9b\x80\x60\xbb\x94\xbb\x87\x31\x97\x27\x6e\x95\xb8\x5f\x89\xed\xf8\x7a\x02\xf6\x82\xfd\x5a\xe3\xc5\x63\x39\xe0\x3e\x52\xfb\xc3\xde\x2d\xf4\xc2\x6b\x55\x3b\x3d\xc4\x56\xe8\xbe\xe5\xea\x0c\x78\x04\x85\xda\x0a\x40\x61\x1f\xad\x59\x80\x40\x97\x27\xdc\xc6\x3b\x02\x96\x3f\x82\x51\x26\xfb\x0d\x9b\x1d\x2a\x5b\x85\x4e\x0a\x35\xe1\x85\xeb\xaf\x0e\x74\xd2\x9e\x4a\xf2\x03\xa4\x8c\xb8\x21\x90\x22\x5e\x88\x1e\x79\x2b\xb5\xf9\xe7\x25\xe4\xc0\xc1\x39\x3e\x97\x4c\xbd\x95\x1a\xee\x3c\x6a\x70\xe3\xd2\xee\x08\xd8\x36\x2c\xc7\x9a\xad\x21\xdb\x13\xaa\xbe\xb8\xcc\x28\x00\xaa\x0d\x16\xf7\x1b\xc3\x15\xb9\x10\x44\x96\x0e\xaa\xda\xb5\x8c\x55\x76\x08\xe7\xd8\x0f\x82\xad\x96\x8c\x61\x37\x43\x96\xd1\x5e\xac\x19\xce\x87\x53\x71\xf7\x0b\xf8\x12\x21\x34\xce\xa7\x73\x41\xdb\x52\xaa\xd9\x98\x27\x24\x67\xe5\x18\x2a\x16\x26\x93\xb6\xb7\xb8\x2d\xbe\x88\x57\x8b\xdc\x11\xaf\x56\xf1\x10\x44\x94\xd7\x90\xa8\x77\x37\xe2\x0f\x8e\x8d\xec\x3a\xa7\x85\x41\xc1\x7f\x1a\xae\x0c\x58\xf0\x2f\x68\x8b\xac\x06\xe4\x94\x28\x2e\xc6\x19\x8b\x7e\xb3\x2e\xb8\x70\x18\x33\x82\x51\x6f\x7f\xae\xf8\x94\x66\x0c\x13\x6b\xa9\xf0\x4d\x0b\xe5\x68\x41\xe8\xea\xd9\xde\xc8\x86\x2e\x7b\xa3\xee\xc1\x0d\x9b\x1d\xf4\x16\xd0\xf6\xe0\x42\x1c\xd4\xc5\x4f\x23\x44\xf5\xc2\x05\xf8\x63\x0e\xe0\xb7\x83\xfb\x91\xd3\x9e\x80\x1a\xdb\x1a\x4e\x5a\x2f\xe9\x59\x46\xd1\x2f\xdf\xae\x47\x7b\x7e\xf4\x65\x2d\xd9\xae\x83\x67\xea\x68\x06\x9b\xb4\xdd\xba\xeb\x17\x8a\x86\xb4\x95\x42\xd7\x02\xfc\x71\x5e\xfb\x34\x02\x71\xd7\x92\x26\x3a\x50\xbe\xd8\x15\x95\x89\x6a\x91\xd5\x11\xe3\x2b\x20\xfe\x03\x38\xf1\xe5\x88\xbc\xaa\x5b\xad\x81\xbb\xd4\x88\x55\xb6\xcc\x8c\x90\x9a\x70\x91\x64\x95\xf5\xdf\xc3\xab\xe8\xf4\x7d\x5c\xe0\x6d\x1d\xb1\xeb\x61\x1d\x46\xbb\x18\xf7\x85\xda\x01\xf3\x11\xbf\x10\x00\xee\x63\x5c\x11\xda\x0f\x09\xad\xd1\x4e\x59\xd2\x71\x8b\xc0\x24\x96\x2f\x5f\xf1\x61\xc9\xc8\xd9\x84\x0a\xc1\xb2\xa0\xfe\xa2\xb5\x95\x52\xad\x69\x32\xc1\x30\x13\x4a\xcc\x39\xce\x98\x3e\x54\x64\x22\xc1\xa7\x98\x4c\xb8\xf0\x15\xc9\x84\xaf\x43\x5a\x97\x62\x78\x80\xa6\x9a\xfb\x2a\x48\x2d\xf6\x63\x3c\xb4\x0d\x19\x2d\xde\x85\x9d\x10\xe3\x3e\x8d\x75\x6b\x9f\xf9\x67\xea\x1e\x57\xf6\xcc\x03\xe4\x91\x2f\x43\xd3\x40\x78\x76\x7d\xa7\xc7\xdc\xdb\xbb\xb9\x18\xb1\xb2\xc4\x1d\x1a\x32\xfb\x02\xe1\x23\x52\x89\x20\x78\x1c\xdb\xbf\x4d\xe4\x2d\x49\x25\xb9\x65\x10\x2d\x64\x04\x08\x08\x3f\x57\x4e\xf4\x08\x66\x0a\x99\x2a\x89\xcc\x8b\x52\xe6\xdc\x87\x6f\x5b\xf4\x78\xb0\x52\x83\x59\xb5\x73\xb7\x86\x78\x17\xb3\x4a\xc4\x6d\xd2\x5f\x9d\x11\x4d\xcb\x31\xd3\xe6\x1b\x44\x54\xf9\x90\xed\x59\x51\xf1\xa1\xfb\xf9\xb4\xda\x3f\xef\xd0\x37\xd0\x8b\xa0\xb6\xa1\x33\x1e\xb9\x72\x6f\x41\xa0\x01\x64\xc1\x8c\x64\x99\xb8\xb0\x46\xd7\x93\x0f\x1b\x38\x19\x2c\xfc\xc1\x32\xce\x4a\x68\xb5\x67\x3f\xa5\x7d\x3a\xeb\x21\x2a\xfc\xf8\xe3\xdb\x76\x1a\x22\x1d\xd6\xe3\xad\xc2\xba\x5b\x59\x66\xe9\x2d\x4f\x5d\x50\xd7\x91\x79\xf8\x78\x3f\x08\x3c\x60\x7f\xa4\xbd\x4f\xfa\xed\x2d\x4f\x5b\x02\x3e\x0c\x15\x03\xdd\xa5\xf4\x19\xa0\x13\x80\x3a\x4f\x99\xd0\x86\x58\x96\x8a\x1c\xc1\x1b\xc7\xe4\x25\xc7\xe2\x55\xf0\x3e\x84\xa2\xe5\x43\x2e\xea\xc2\x68\xf5\xa6\x1a\x76\x69\xe8\x86\x53\xef\x15\xd3\x58\x76\x08\xb2\xcc\xa5\x9e\x10\xc5\xf3\x2a\xd3\x54\x30\x59\xa9\x6c\xb6\x27\x6a\x3f\xd5\x8d\x1d\x65\xec\x33\x9e\xf0\xfd\x85\x1e\x3f\x54\x2c\xfc\x40\x72\x55\x5d\x6b\x70\x41\xfa\xa9\x73\x13\xd3\x13\x2f\x09\xf9\xda\x59\xec\x33\x4b\x6c\x59\x85\x22\xab\xc6\x7c\xa7\x3a\x3a\x5d\x07\xf1\x9d\xde\x6e\xd6\x41\xbc\x6e\x94\x5c\x29\x56\xd7\xfc\xb5\x45\xee\x1e\x4a\x2e\x69\xbf\xe1\xf7\xc3\xca\x97\xef\x97\x37\xfb\x4e\x59\xc1\x44\x0a\x4d\x87\x5e\xd5\xe7\x0f\x27\xff\x60\xb0\xb7\xcd\x7e\xda\xe1\x15\xae\x73\x50\xc4\xa5\x83\x00\xc9\x89\xcc\x52\x45\xd8\x67\x5d\x52\xc3\x0e\x72\x43\xf8\xfd\x3b\x23\x42\xc5\xbe\xa4\xfd\x4b\x69\x59\x4b\xee\x49\x02\x4d\xbf\x50\x09\x54\xb5\xda\xcb\xfe\x50\x85\x1d\xec\x6b\xe8\x45\xb7\x5b\x6e\x6b\x8f\x0c\xd4\x52\x07\x15\x97\x44\x58\xd2\x7e\xbe\x4e\xa9\x5a\xac\xed\xb3\x63\x1b\x7a\xb5\xa4\x29\xf5\xdc\xac\x1e\xf0\xb0\x76\x3d\xe9\x9f\x56\x4f\xfa\x11\x54\x48\xdd\xbf\x6d\x88\x1d\x67\xce\x66\x67\x6f\x5a\xb1\xb5\x89\x8d\xce\x9e\xa8\x80\x27\x9b\x7d\x73\x03\xd9\x4a\x63\x44\x99\xdd\xa8\xd3\x22\x2b\x21\x76\xa3\xe6\x0f\xdd\xb1\x9b\x6a\xaa\x98\xde\xc7\x92\x1c\x0b\x98\xf5\x78\x86\xe4\x84\x98\x6f\x7f\xc2\xbe\xf7\x50\x79\xc4\x55\x0d\x25\xfd\xbf\x5a\x59\x54\x44\x4f\x1a\x29\xd4\xc1\xdd\xb5\x15\x61\x3e\xb2\x0c\xc7\x48\xcd\x6e\x27\x54\xef\x9c\xb1\xbb\x37\x37\xb6\xb3\xfd\xfe\xfb\x8b\xf3\x36\x41\x68\xc6\x73\xd2\x2a\xfc\x3f\x06\xe3\xc0\x27\x93\x55\x82\xff\x5c\x85\x8a\x36\x54\x3b\xf7\x80\xb3\xcf\x3f\x04\x74\xc6\x09\xab\xdd\x04\xe7\x5c\xdd\xec\xdf\x1a\x68\x61\xc8\xf8\xb8\x7f\x7b\xf6\x92\xd8\xbb\x8d\xac\xf3\xdb\x98\xe7\xf7\x6d\xec\x31\x4e\x58\xed\xb8\x4b\xb9\xba\x79\x80\xb6\x42\xfb\xea\xc0\x45\xfa\x76\xb7\x94\x9c\xc7\xe9\x69\x98\xd7\xf0\x5c\xe7\x81\xa0\x25\xc6\x4c\x56\xe4\xd6\x56\xde\xb6\x1a\xe2\x7b\x5e\xbc\x20\x2f\x85\xaa\x4a\x56\x47\x68\xcd\x0f\x65\xe4\xad\xc6\xfa\x22\x14\x37\x57\x2f\x5a\xf3\x4a\xb4\x8d\xa9\x5f\x8a\x9b\xa3\xa0\xa5\x06\x45\xae\x1d\x44\xf2\xc3\x39\x3a\x1d\xdc\x10\x4d\x30\xe9\x62\xe4\x72\x33\x7a\xb6\x0c\xaf\x6f\x39\xe4\x1e\x32\xb8\x13\xd4\xe5\x0f\xb1\xe5\x95\xef\x85\x41\x4e\x52\x36\x3d\x51\x29\x7d\xde\x83\xcf\xb8\x2c\xf7\x78\x4e\x54\x91\x83\xe7\x07\x03\x72\xcd\x73\x9e\xd1\x32\x9b\x45\xad\x81\xeb\xe7\x0c\xdb\x75\x03\x42\x34\xcb\xb3\x03\x72\x24\x4b\x18\x39\xa1\x82\x64\xcc\x15\x01\xb3\xa7\x7a\x86\x7a\xc7\xf1\xe3\x20\x91\xe4\xd1\x78\x8a\x90\x5a\xb6\x84\x6b\xa9\x93\xa9\x2c\xbf\x8f\xfa\x3c\x9c\xd7\x0c\x8f\x0b\xc3\x05\x07\xe4\x7b\xcb\xbe\xac\x5c\x80\xc8\x00\x87\xd9\x3d\xf1\xb8\x36\xeb\xf1\xd9\x43\x76\xb2\x6c\x2c\xba\xee\x1e\x1b\xa0\x77\xb5\x9e\x8c\xb9\xbe\x62\x85\x6c\x41\x86\xc3\x81\xe6\xfc\x0b\x5c\x9b\x1b\x52\x71\x68\xec\x48\x35\xa1\x48\x92\x92\x2a\xa3\x46\xa9\x43\xef\xc2\x80\x9c\xbf\xbc\xbc\x7a\x79\x76\xfa\xfe\xe5\xf9\x0b\xf2\xad\x1d\x89\x87\x7a\xc0\x80\xbc\x0f\x5b\xb5\x04\x09\x6f\xb6\x1f\x86\xff\x56\xcf\x92\x58\x2a\xea\x96\x73\x50\xba\x9e\x0a\x72\x21\xb8\xae\x9b\xed\x62\x5e\x40\x26\x85\x8d\xf4\x37\x6f\x5b\xef\xc6\x98\x6b\x5b\x0c\x19\x07\x33\x3f\xc7\xa3\xd9\xac\x70\x23\x6c\xd6\x49\xdd\x4f\x50\xf8\xab\xb7\xe7\x21\x14\x55\xd7\x45\xb2\x1d\x1d\xcb\x77\x10\x75\x15\xb2\xd0\x5b\x5c\xdf\x47\x66\xeb\x1b\xa6\xbb\x5e\x14\xb2\x8c\xfa\x99\x0f\x06\x87\x03\x62\xd8\xf8\xe1\xe0\xd0\x89\x7c\xd9\x42\xd3\x7d\x3f\x68\xd8\xf2\x27\x46\xf8\x01\x21\xef\x5c\x56\x25\xd4\x41\x5d\xde\xbf\x1f\x4b\x96\x07\xdd\xda\xe7\x8e\x8d\xab\x36\x53\x0d\xc3\x8f\xda\x1e\x41\x63\x3e\xb5\xd5\x2c\x1f\xcc\xa7\x50\x4f\xb5\x95\x6d\x0c\x57\x6e\x35\xe5\xab\xd7\x0f\xb7\x36\xa4\x38\x2d\xad\xcc\x92\x2f\xbb\xae\x44\xe6\x39\x36\xb5\x99\xf8\x3a\x7b\x75\xa9\x3c\x4f\x1d\x1f\x44\xcb\xc7\x56\x3e\xa3\x9d\x0e\xf6\x1c\x67\x70\x43\xcd\x69\xf5\xfe\xb6\xcd\x7e\x16\xb5\x3a\xb5\x7d\x07\x60\xdb\x4b\x4a\xb9\x12\x64\x96\xcd\x9e\xf8\x8f\x9f\x5c\xbd\x3c\x3d\x7f\xf3\x72\x90\xa7\x4f\x90\x48\x33\x91\x16\x92\x0b\xad\x76\xd5\xf0\xa9\x9e\x3c\x00\x79\xf7\xd3\x6e\x47\x86\xf3\xc3\xb9\xf3\xe3\x6e\x04\x8d\xc1\x6c\x71\xb7\x00\xbb\xb4\x2c\x64\x26\xc7\xcb\x5b\x07\x6f\x81\x36\xff\x86\x4d\x25\xfa\xb4\x6f\xf0\xf1\xe1\x94\x5d\x3d\x69\x4b\xcf\xd5\x13\x07\xc8\x1a\x5a\x5e\x6f\xd4\x93\x2f\x03\x60\xf7\xa8\x46\x2c\x40\x11\xcd\x39\x40\xde\x5c\xdf\xb6\xba\x11\x5a\xc1\xca\x9c\x63\x16\x4a\x53\xfd\xe2\x61\x80\xbf\xab\x6a\x61\x28\xf9\xe5\x8e\xe8\x1a\x43\xdd\x8d\x14\x33\x90\xa2\x64\x7d\xdf\x69\x66\xc4\x33\x06\x55\xd5\xbd\x84\x14\xf2\x13\x67\x09\x76\x76\x63\x7c\x2a\x9b\xcd\x5b\x84\x83\xc2\x6e\xce\x10\x8f\xf5\xa7\xb3\x6c\x56\x77\x13\xb4\xd6\x30\x3a\xc6\x0e\x32\xa5\x75\xc8\x15\x25\x9f\xf2\x8c\x8d\xa1\x53\x28\x17\xe3\xa0\xf2\x60\x58\xab\xd0\x96\xa9\x8c\x9d\x53\x6f\xcc\x5f\x41\xd3\x6a\xc0\xac\xb7\xef\xde\x43\xd3\x59\x08\xa9\xd8\x5b\xe1\x34\x1f\x84\x33\xdf\xef\xf7\xc1\xf4\x77\xf4\x77\xa3\xf9\xa4\xd9\x31\xf9\x91\xd9\xef\x48\xe8\x8a\x5b\xf2\x44\x93\xdb\x89\xf4\x2d\x4a\x61\xae\x35\x64\x01\xa1\x31\x8c\xcf\x3e\x75\x62\x9e\x34\x12\x35\xb2\xf2\xe8\x79\xce\xa0\xef\x57\x1d\x67\xf0\x14\xb5\xa4\x07\x62\xa0\x2d\x53\x7b\xe7\x6c\x5a\x76\x46\x7c\xf8\x80\xe3\x0b\x94\xa8\x59\x9e\x71\x71\x53\xb7\x55\x1a\x49\x5b\x99\x95\x11\xf3\x83\x3b\x35\x25\xa3\xd9\x6a\x8e\xb1\x0b\x8e\x3e\x18\xb7\xd0\xad\xf9\x23\xc0\x5f\x60\xa8\xc5\xff\x75\xc4\xcb\x06\x80\x85\xa4\xfe\xe0\xe0\x49\x43\x8c\xab\x44\xf1\xfd\xc9\x3b\x0c\x13\xd1\x76\x41\x2e\xae\xcf\xae\x2f\xee\xd5\xeb\xb7\x8a\xb9\xc2\xec\x9e\xb4\xf6\xc0\x7f\xde\x2d\xaa\xaa\x4f\xb2\x6a\xd7\x37\xd1\xf4\x72\x29\x4b\x4d\xb3\x07\x20\x9c\xc9\x84\x16\xa7\x95\x9e\x9c\x73\x05\x05\x86\xdb\x11\xff\x16\x46\x0d\xf2\x15\xb1\x75\xb3\xeb\x51\xc7\x1d\xfa\xda\xe7\xce\xfe\xef\xe9\x25\xa1\x95\xc1\x47\x6d\xbb\x72\x3e\x58\xb0\x9c\x5b\xc5\x35\xe6\x40\xb7\x0a\x19\x3b\xe6\x06\xb8\xb8\xa7\x1e\x13\x54\xee\x2f\xeb\xad\xf3\x47\x03\xe7\x42\xaa\xff\x85\xf8\xa0\xb9\xe0\x9a\x53\x2d\xcb\xd6\x7c\x83\xd1\x88\xde\x60\x58\x29\x2d\x73\x7b\x8a\x2e\xdc\x13\x10\x90\x05\xf2\xdb\xc2\x4b\xb5\x35\x11\xb4\x4f\x80\xf9\x85\x30\xba\x22\x4d\xd8\x5c\x9a\x4d\x0f\xba\x65\xe2\xd8\xdc\x3f\xf3\x17\x6b\x44\x87\xce\x45\xd9\x5f\x5f\x44\xfd\xe4\xeb\xd6\x94\xae\x09\xb0\xb5\x62\x26\x52\x08\x96\xec\xd3\x5b\x79\xff\x2d\xf9\xb9\x1d\xd2\xc6\x7f\x16\x73\xfe\x04\x04\xd1\xff\xab\x68\x86\xa0\x7d\xfb\x90\xc6\xf7\x78\x4b\xdb\x59\x71\x8c\x25\x76\xf1\x35\x4a\xbc\xf5\xd6\xb6\x4a\x61\x5f\x26\x84\x88\x2e\xa9\x50\x06\x4f\x62\x7b\xc6\xa1\x0d\x80\x38\x24\x47\x3a\x29\x8e\x1f\x0c\x52\x6d\xa5\xc3\x66\x95\x08\x85\x55\x5c\xfb\x7b\x44\x8d\xd7\x3e\x1d\x76\xbf\x65\x3e\x78\x90\x03\x9c\xf6\x76\xec\xb6\x76\x2c\x8f\x47\x21\xbc\x50\x40\x24\xaf\xb9\xd2\x98\x47\x83\x0f\x43\x19\x17\xcc\x27\x34\xba\xc0\x25\x91\x25\xe1\xc5\xff\xd2\x34\x2d\x5f\xa0\x1c\x61\x75\x55\xf8\xbf\xf2\x9d\x82\xa8\xf0\xd1\x36\x47\x7a\x56\xd8\x1e\x71\xef\xcf\x2e\xe1\x49\x45\xfe\xe3\x8f\xcf\x40\x2f\xf8\xfd\xd7\x7f\x7c\xb6\x27\x22\x3e\xd5\xac\x42\xd2\xb6\x4d\xb4\xf5\xc8\x8a\x2f\x24\x8b\x24\xca\x16\x81\x76\x32\x46\xda\xbd\xc6\xe4\x0c\xc3\x27\x2d\xd1\xc4\x83\x60\xb0\xd2\x73\xef\x36\x65\xe2\x2e\xeb\xe2\x57\x94\x75\x41\x7c\x36\x3e\x12\xd6\x56\x10\x39\x1c\x10\xca\xea\x2c\x12\x70\xa4\xdd\x97\x4f\x85\x76\xef\x08\xdd\x5d\x31\x39\xc6\xe0\x30\xc4\xcf\x26\xe2\x06\xe9\xa9\xe7\x6f\xaf\xff\xf7\xf5\xe9\xdf\x5e\xbe\x86\xb5\xda\xa8\x40\x83\x9e\x56\x13\xda\x25\x66\xbd\x39\xba\xef\x6e\xdc\xda\x15\xa4\x6d\x04\x18\x88\xb9\xd0\x02\x41\xde\xbe\xba\xde\x36\xaa\x60\x5f\x75\x56\x8c\xf6\x80\xde\x53\xf3\x6b\x98\x57\xa1\x5f\xeb\x43\x64\xce\xb7\xec\x14\x09\xaa\xe2\x47\x76\x14\x83\x43\xb8\xc6\xbd\x4d\x1d\x3b\xe2\x06\x79\x74\xb2\xde\x7a\xff\xb7\x81\x18\x42\xb1\x75\xcf\xf7\xbd\x42\x7b\x3f\x19\xb2\x6c\xab\xac\xc3\x21\x8e\xe5\xc4\x47\x43\xc2\x90\x77\x94\x86\xab\x1a\x7e\xca\x94\x6f\x50\xf4\x05\x60\x6b\xb1\xac\xdd\xf4\xfe\xdc\x61\xe9\xb0\xf8\xdf\x6b\xd7\x2d\x30\x88\x2a\x88\xf2\xba\x57\x75\x94\x77\x11\x99\x34\x0f\x1a\x6b\xb6\x59\xf9\xb1\xbe\x85\x77\xb0\x49\xde\x13\x64\x30\x30\xf1\x07\x4a\x2f\xf3\xdf\x6e\xe7\x38\xfa\xe1\xe6\x2b\xad\x6c\x85\x25\x84\x2a\x27\xc8\xd9\x58\xf3\xb0\x24\xcb\xa3\x44\x21\xf2\xe8\xf8\x90\x67\x43\x3f\xee\x68\x6e\x78\x48\x53\x43\x31\x91\x5a\x8a\x96\x73\x68\x97\x0d\x1a\x13\xb6\x4b\x78\xe2\x0c\x33\xdd\x33\x56\x06\xf4\x16\x33\x88\xbc\x5b\xdd\x68\x1e\x8e\x75\x4b\xe1\x1c\xec\xb1\x7b\xfd\xe9\x51\xa2\x22\xbd\x38\x7f\x00\x22\xf4\xa5\x15\x3b\xda\xd6\x4d\xf8\x60\x81\xb2\x69\x4b\x99\xfb\x66\x20\x07\xf3\x8b\x73\xab\x2e\xb8\xb4\x7c\x65\x8f\x15\x59\x7d\xae\x1e\x44\x94\x92\xa5\xbe\x95\x65\x5b\xe5\xe3\xe2\xe1\xe6\xa2\x30\xed\x6f\x0b\xc5\x38\xbe\x4c\x2a\x82\xab\x7c\xf2\x94\xe4\x1a\x28\xc9\x5c\xe7\xee\x55\x14\xe5\x2e\x08\xca\xd3\x21\x24\x77\x23\xb8\xdc\x6d\x25\xae\x07\x53\x7f\xdd\xf1\x68\x05\x58\x6e\x30\x6b\x06\x35\x88\x52\xd3\x5d\x0a\xe6\xe6\x80\xf2\x3c\x08\x9d\x2d\xa5\xa1\x43\xbb\x91\x93\x98\xc4\xba\x91\xd0\x39\x88\x5d\x1d\xb3\xcc\xec\xac\x14\x61\x3f\x48\x5b\xac\xab\x47\xb0\x67\x62\x4e\x0b\x85\x4d\x29\x52\x79\x2b\x6e\x69\x99\x92\xd3\xcb\x8b\xfb\xa7\xab\x7b\x67\x82\xe2\x79\xd8\xa7\xb7\x40\x9c\x0b\x5a\x8f\x07\x11\xf8\x10\x24\x64\xfe\x18\x72\x8d\x6d\x9b\x31\x18\x5f\x87\xd6\x28\xc3\xa7\x7c\x24\x8b\xa1\x74\x86\xaa\xd9\x91\x02\xb1\x4a\x10\x99\x68\x9a\x61\x0b\x10\x32\x64\xfa\x96\x31\x41\x9e\x3d\x7b\x86\x0e\x8a\x67\x7f\xfa\xd3\x9f\x08\x34\xe5\x4c\x59\xc2\xf3\xc5\x07\xe1\xa9\x7f\x7f\xfe\x7c\x40\xfe\xfb\xf4\xcd\x6b\x42\x13\xd0\xe5\xb0\xf2\x2d\x8e\x0c\xfb\x19\xbe\xac\x7a\xe4\xbf\xae\xdf\xbd\xad\x1b\xca\xc7\xbf\x02\xba\xf8\xe5\x0d\xc8\x79\x10\x7b\x1f\x3a\x0f\xa8\x9e\x00\x34\x84\xd4\x84\x8e\x46\x88\x70\xae\xab\xbd\x25\x26\xae\xf6\x1c\x1f\x4f\x60\xb9\x5c\x00\xaa\x65\x90\x14\xc0\xcd\x14\xc1\x61\xe3\xea\x38\x62\x8e\x03\x8c\xe5\x99\x08\x4c\xa5\x47\x32\x7e\xc3\xc8\x48\x7d\x5b\xca\xaa\xa8\x1b\xa7\x94\x4c\x19\x05\x2c\xa1\xc2\x8c\x8e\x83\xd5\x3b\xa3\xd8\x9e\xb5\x31\x1f\x3a\x72\xc2\x9e\xd3\x76\x5c\xc8\xf6\xcc\xbb\x16\x62\xb6\x37\xa0\xcb\xd1\x42\x92\x61\x76\xe1\xa9\x46\x32\x44\xab\xbd\xf4\xeb\x41\xa4\xb2\xd5\x0f\x6b\xca\x48\x33\x29\xc6\x21\x0e\xd6\xd2\x87\x0b\xa6\x9c\x15\x6c\x57\x60\xb4\xd4\x50\xa7\x9d\xf6\x74\x48\xdc\xdf\xd0\x62\xbf\x4e\x20\x71\x8c\xae\x1b\x33\xaa\x43\x49\x87\xb2\xd2\x2e\x66\xcf\xfe\x0e\xe5\xdb\xb4\x74\xa0\xdf\x6b\x0a\xad\x75\x29\x6a\xaf\xef\x5f\x4b\x4d\xb7\xe2\x98\x39\xe0\xda\xb1\xc8\xda\x23\x8c\x26\x13\x72\xc3\x66\x7d\xe4\x00\x05\x85\xea\x11\x00\xed\x73\x03\x63\x2c\x93\x1b\x87\x33\x24\x2c\x35\xda\xa4\xdd\x0a\x17\x60\x19\xc8\x07\xae\xfa\x84\x53\xb8\x94\x95\xcb\x6d\x2b\x2b\x11\x58\x28\x5d\xef\xca\x44\x0a\x6d\xfb\x62\xfa\xde\x55\x10\x30\x3a\x57\x90\xc0\x50\x18\x96\x9a\xd7\xd4\xba\x2f\xd7\x51\xa5\x86\xa3\x58\xf9\xa3\x12\x0b\x6f\x43\x3d\x77\x88\xe9\x55\xcc\x56\x46\xa2\xae\x27\x62\x10\x99\x3a\xe1\x09\x64\x1c\x99\xc7\xed\xb3\x0e\x4a\x1e\x10\x51\xc1\x04\xc5\x74\x65\x41\x03\x71\xc2\xe6\xdb\x4c\x29\xc2\x61\x85\x39\x2d\x6f\x98\x2b\x34\x4c\xb3\x01\xb9\x34\x93\xf4\xd5\xe6\xb1\x95\xe0\x14\x13\x44\x0c\x8d\x09\x2b\x41\x98\x8f\x1c\x0e\x06\x87\xc8\x2a\x97\xd4\x85\xd8\x1b\x6b\xda\xec\x22\xd7\x5a\xf7\xb8\x08\x95\xdf\xd0\x42\x61\x37\x3d\xa3\x5a\x40\xc7\x4a\x09\x75\x5b\xf4\xc4\x09\x13\x74\xcf\x12\xe2\xe1\xd5\x72\x1b\xb3\x76\x3b\xa1\xb6\xd7\x07\x75\x0f\x5f\x7b\x7c\xb5\xdd\xff\xb4\xc5\xee\xa7\xab\x7a\x9f\x5a\x1c\xb2\x94\xa4\xad\x8e\x8c\xad\xb7\xdc\xcc\x5b\x68\x6c\xe6\xae\xd8\x75\x04\xf2\x6d\x54\x4b\xba\x91\x2e\x62\x4b\xa9\x67\xec\x49\x29\x1f\x17\x23\x20\xa9\xcb\x6b\xdd\x84\x7a\x99\xe3\x30\x06\x02\x0f\xaf\x75\xec\xdb\x65\xcf\x5d\x77\xd1\xa6\x7e\x7f\xb5\x64\xfe\xda\x27\x88\x66\xfe\x8a\x0d\x19\x41\x59\x09\xcf\x6a\xc3\xec\x63\xd8\x2a\x2d\xa1\x5b\x67\x4d\x1c\x06\xe4\x8d\x65\xc5\x88\xe4\x74\xa8\x64\x56\x69\x5f\x89\x62\x09\x9f\x86\x41\x5d\x6f\x4f\x2c\xda\xe4\x1e\x0b\xb8\x36\xc8\x2b\xc8\xca\xda\x61\xe0\x78\xb5\x48\x7c\xf6\x0d\x90\xc5\xeb\x57\x16\x26\x8b\x57\x8b\xbb\xe0\xc4\xc5\x96\x77\xc2\x0d\xeb\xab\x77\xba\x8c\xc8\x48\xba\x85\x18\x59\xad\x50\x74\x76\x82\x2a\xe6\x50\xee\x5a\x01\xbb\xbe\xf6\xb7\xea\xda\x75\x59\x03\xe3\xe9\xe5\x45\x8b\x5a\x69\x30\xea\x0a\xbd\x34\x7c\xa2\xd3\x4c\x9b\x5c\x11\x80\x2f\x50\x33\x35\x22\xbd\x33\x20\x9d\xd7\x10\xb5\x2e\x3d\x43\x94\x7f\x05\xaa\xcd\xc2\xc2\x5f\x19\x66\x14\x26\x73\xc5\x1d\x3a\xd0\x18\x5c\xb3\xad\xa0\xab\x87\x8b\xe1\x01\x12\xf7\xe5\xab\x41\x8f\x54\x79\x01\xe8\xef\x91\xb1\x33\x7f\xc5\x5c\xf4\xca\x01\x91\x5c\xb3\xcc\x30\x3d\x32\x67\xb2\x29\x64\xfa\x02\x7b\x7e\x53\x21\xa4\x06\xbc\x51\x3d\x92\x41\x3f\xf2\x1e\x9a\x62\x8c\x04\x1a\x44\x7f\x95\x81\xd3\xb4\x65\x99\xb3\x35\xe4\x21\xad\x23\x10\x01\x24\x02\xd8\x5d\xb6\x83\x49\xe4\x0e\xb0\xc9\x5c\xb5\xa8\xd2\x66\x5b\xfe\x08\xaf\xec\xf8\x0e\x89\x54\x32\x61\x39\xc5\x7e\x24\x0e\x40\x86\x5e\xdf\x96\x5c\x6b\x86\x55\xc7\x59\x99\x2b\x22\x47\xbd\xc8\x6f\x7c\x30\x7d\x7e\xd0\x96\x3c\x4b\xee\x42\xa1\x26\xee\x84\xee\x5a\x06\x6c\xd5\x15\xfb\x0d\x22\xe5\xc2\x9c\x4e\xd0\xa6\x33\x68\x90\x24\xe6\x0c\x96\x46\x88\x98\x22\xfc\x1f\x35\xe8\xee\xce\x16\xb1\xab\x0d\xa2\xe7\x05\xd3\xce\x06\xd1\xd9\x20\xda\x18\xf1\xce\x6c\x10\x01\xe3\x76\xc4\x74\x89\x3d\x22\x4c\xc4\x73\x46\x89\xba\x94\x45\x50\x26\xda\xa0\xbc\x33\x47\xc8\x32\xf6\x15\x1c\x0e\x06\x87\x87\xce\x48\x61\xcf\x47\xa5\x47\xfd\xff\x20\x4c\x24\x32\x45\xa4\x32\xe3\x97\x4a\x83\x50\x5b\x6b\xe5\xe1\x5c\x72\xf7\xad\xd0\xdf\x00\x63\xb7\x8b\x12\x2d\x52\x28\x17\x92\xf2\xea\x4e\x45\xb0\x5a\xf0\xf2\x65\xc0\x2c\x00\x7d\xb5\x44\x2b\x81\xd5\x21\x32\x19\xcf\xb9\xad\x4f\x68\xc8\x05\x53\x5a\x91\x23\xbc\x39\x48\x8a\xaa\x67\x1f\x18\xe4\x2c\x97\xe5\xac\xe7\x1f\x32\x3f\x46\x6f\xd9\x27\x8e\x41\x6a\x4b\xaa\xb2\x64\x42\x67\xb3\x5f\xaf\xfc\xe6\x40\xfc\x88\xc5\x37\x8f\x15\xfb\xe4\x7d\x2c\xbb\x62\xb4\xac\x9b\x08\x80\xf5\xce\x43\x1b\xf8\x90\xcd\xc0\xe8\xd5\xc6\x1f\x73\x97\x89\x29\x99\xd2\x72\xe7\x0c\x8c\x65\xd7\x9d\x48\x6c\x29\x9f\x72\x25\x77\xce\x61\x5b\x3a\x64\x08\xbc\x6b\xcb\x94\xd1\x46\x2c\x2b\x5d\x54\xda\x72\x17\x77\xb6\x5d\xc9\x3e\x7f\xa6\xe7\x04\xdf\xe7\x07\x2d\x4e\xae\xa0\x5a\xb3\x52\xbc\x20\xff\x73\xf4\xf1\x77\xbf\xf4\x8f\xbf\x39\x3a\xfa\xf0\xac\xff\xe7\x4f\xbf\x3b\xfa\x38\x80\xff\x7c\x75\xfc\xcd\xf1\x2f\xee\x8f\xdf\x1d\x1f\x1f\x1d\x7d\xf8\xee\xcd\xb7\xef\x2f\x5f\x7e\xe2\xc7\xbf\x7c\x10\x55\x7e\x83\x7f\xfd\x72\xf4\x81\xbd\xfc\xd4\x70\x90\xe3\xe3\x6f\x7e\xdb\xe2\x22\xa8\x98\xbd\x6b\x8d\x04\xe3\xd5\xbf\x13\x31\x22\x1e\xbb\x65\xd4\x25\xe4\x73\xbf\xb6\x68\xf7\xb9\xd0\x7d\x59\xf6\xf1\x23\x2f\x88\x2e\xab\xb6\x48\x57\xcd\xfe\xee\x8e\xc6\xd4\x42\x4c\x5d\x01\xd3\x29\x36\x8f\x90\x88\x60\x60\x6a\x8b\x96\x61\xdb\xc7\x76\xb9\x51\xd8\xfe\xd8\xd9\x83\x9b\x5c\x77\x18\xa9\x64\xeb\xd9\xfc\xca\xc3\x94\xae\x6d\x37\xe5\x2e\x46\x69\xe1\xea\x62\x94\x16\xaf\x2e\x46\x69\xcb\xab\x8b\x51\x72\x57\x17\xa3\xd4\xd9\x07\xf7\xbf\x7e\xe5\xf6\xc1\x2e\x46\x69\xdb\xab\x8b\x51\xda\xf9\x7a\x42\x31\x4a\x28\xe4\x2f\x8b\x54\xb2\x62\x7e\x1d\xa6\xf4\x68\xa3\x94\x94\xc1\x87\x84\x9d\x26\x89\xac\x84\x7e\x2f\x6f\xd8\x9e\x8e\xdc\x39\x9d\x74\x61\x74\x28\x89\xb8\x42\x47\x5d\x7c\xf8\x51\x2a\xac\x6d\xc9\xa3\x2d\xc8\x8f\xed\x49\x8e\xb4\x4a\xb9\xd1\x51\x5b\x3e\x2c\x6e\xd8\xb0\x2c\xb6\x48\x59\x5a\xff\x60\x49\x9a\x36\xfb\x3d\x20\xa7\xa4\x64\x09\x2f\xb8\x61\x00\x50\x2b\x08\xee\xe3\xf1\xf1\x5d\x9c\xb9\x56\x2c\x1b\xd9\x4e\xb6\xa2\x4e\x73\x2e\x03\xfd\xd3\x72\x94\xa5\x9f\x41\x19\x42\xba\x5e\xa3\x44\x4d\x64\x95\xa5\xa4\x64\x7f\x77\xc2\x87\x9d\xcd\xfb\x70\x84\xd0\xa4\x0a\x4b\xa9\x3f\x6b\x07\xa7\x05\xb7\x45\xc5\x1e\x13\x19\x64\x9f\x0b\x5e\xc2\x61\xbb\x66\x89\x14\x69\xdb\x16\x92\x85\xf1\x6b\x59\x01\xfc\x42\x2c\x25\x69\x85\x0f\x40\x3a\x26\xcd\x78\xca\xf5\xcc\xc7\x73\xe0\xb1\x37\x62\x2b\xf6\x0e\xb6\x88\xa0\xea\x8d\x20\xb4\x28\x4a\x49\x93\x09\x53\xc1\xd7\x50\x08\xb5\x85\x32\x7c\x96\x67\x56\x8d\xb9\x40\x39\x14\xde\x31\xc2\x4a\x36\x23\xa5\xd4\x2e\x34\x6d\xc5\x07\xdf\x07\x83\xc1\xeb\x28\x71\xe8\x72\x06\xf1\x6b\x32\x1c\x02\x67\xc5\x47\xe1\x1f\x8a\xc8\x2c\x75\xa5\x59\xff\xe3\x99\x11\xfc\x13\x8b\xc5\x86\x09\x40\xd1\x4c\x2d\x49\x66\x84\x27\xc3\x18\x56\xbf\xfc\xf5\x1f\xc8\x44\x56\xa5\x1a\x84\xc5\xfe\x9e\xc3\x3d\xb4\x70\x38\xc5\x41\x93\x8c\x51\xa5\xc9\xf3\x67\x24\xe7\xa2\x32\x1c\xbf\x25\xc4\x6b\x4b\xd6\x0d\xa4\xdc\x3f\xfe\x61\xcf\xd1\xda\x91\x6f\x57\x4a\xb6\x05\x76\xcc\xb3\xe2\xad\x3d\xe3\x58\xd0\x03\xbb\x66\xce\x09\xbb\x96\x25\x85\xbb\x28\xb4\x7c\xe0\x93\xff\x73\x25\x87\x33\xbd\x7f\x09\x1b\x3b\x4e\x5c\xbb\xe6\xff\xd9\x9b\x4d\x4a\xc5\xd6\x95\x62\x77\x98\xca\x83\xf7\xf8\x1e\x73\xa5\x77\xea\xf0\x5d\xd7\xbc\xd9\xe1\xe5\x7d\x99\xf9\xd8\xe8\xc7\xad\x64\xd2\xc3\x48\x4e\xa3\x73\x16\xe9\x24\x61\x0a\x48\x91\x2b\x0a\x07\xc6\x5d\x7c\x76\xc7\x8f\x3e\xd2\x6a\x33\xcb\x8a\xc8\x38\xe4\x6f\xa1\x57\xe9\x5e\xc0\xda\x47\xe4\x77\x88\xdd\x12\xb4\x70\xb0\x98\x46\x28\x2e\xc6\xd8\x5a\x34\xaf\x32\xcd\x8b\xac\x86\xdc\x95\x7b\xc1\x32\xe0\xd0\x5b\x40\x03\xf3\x34\xc5\xa2\x57\x58\xfd\x1c\x3c\x2b\x47\x7e\x2c\x26\x34\x76\xc8\x2c\x0d\x1f\x2f\x68\x49\x3d\xf8\x13\x99\xe7\x54\x1d\x5b\xc7\x03\x85\x28\x18\xdb\x06\xc8\xbc\x45\xb3\x7a\xc6\x41\xd4\xc1\x43\x21\xae\x66\x82\x8a\x9d\xdd\x7f\x71\xc1\x79\x18\x8a\xc8\x5b\x1f\x68\x8f\x4d\xee\xe7\x30\xd6\x0a\xc4\x7f\xa3\xc9\x0d\x13\x29\xf9\x5e\x39\xc0\xa5\x33\x41\x73\x5b\x3f\xbe\x28\x25\x76\x51\x67\xe9\xdc\xfb\xaa\x67\xcd\x8e\x58\xfa\xc4\x15\xb0\x42\x79\xeb\xa1\xa0\x58\xa9\x96\x8a\x07\x9b\x81\x36\xd1\x3b\x85\x26\xdd\x92\x4f\x13\xe6\x64\x47\xf3\xde\x43\x2d\x7e\xba\x73\xb5\x3a\xb2\xbc\x74\x94\x6d\x63\x8a\xa7\x10\x58\xba\xf7\x5c\x42\x99\x78\x9a\x19\x12\x37\xf3\x35\x7f\xe6\x10\x6c\x38\x03\xbb\xd7\x83\x54\x1e\x2b\x87\xfb\xd7\x94\x3a\x2c\x87\x69\x4c\xcc\xae\x68\x2a\x15\xf9\x5b\x26\x93\x1b\x72\xce\x40\x69\xb8\xcb\xe6\xfb\xe5\x30\x7d\xda\x8d\x33\x73\x3a\xde\x2d\x62\xa4\x4f\x72\x29\xb8\x96\xe5\x2e\xf4\xf8\x11\x15\x0a\xec\x5a\x19\x36\xa9\x98\x6e\xce\xd9\x97\xd2\xc8\xd0\xa0\x7c\x3b\xa8\x03\x43\x79\xd3\x09\x50\x1e\xbc\x05\x44\x75\x67\x3a\xf2\x6f\x13\x79\xdb\xd7\xb2\x5f\x29\xd6\xe7\x3b\x07\x42\xed\x0d\xa8\x1b\x36\x83\xa8\xb2\x56\x40\x65\x07\x8b\x34\x77\x2d\xc1\xce\x0e\xf7\x8d\x7c\x77\xf5\xb7\xf3\xef\x15\x2b\x07\xa1\xb6\x72\xc2\x74\x72\x92\xb0\x62\x72\x62\x47\x78\xf2\x60\x75\x64\xb3\x1d\xb8\xba\xd1\x50\x10\x48\x64\x96\xd9\x02\x63\x72\x44\xce\x58\x31\xf1\x9f\x7b\x1c\x70\x7b\xca\x3d\xe5\x0a\x29\xdb\x69\x37\x75\x68\x46\x8a\xc9\x06\xdc\x41\xaa\x11\x20\x7f\x39\xdc\xae\x91\xf7\x63\x44\xf7\x7b\xec\xce\xb2\x4b\x2b\xbe\x47\x01\xde\xc7\xd3\xd2\xef\x30\xea\xe9\x17\xe6\x0f\xc5\x0d\xfb\x5c\x74\x6a\x44\xb6\x2f\x46\xa8\x8c\xa6\x2c\x25\x72\xca\xca\x92\xa7\x4c\x11\x4f\xb7\x43\x1b\x14\xcf\x1e\x07\xe4\xbb\xde\x81\x4f\x2b\xe0\xe0\xf1\x98\x1f\x0e\xc1\xfe\x10\x11\x71\xb8\xb3\x40\xc4\x69\x9a\x73\xf1\x38\xb0\x7d\x47\xb8\xa9\x84\x66\xec\xe2\xdd\xde\xda\xba\x1d\x27\x56\xd8\xaf\xed\xcd\xa0\xa7\xc0\x86\x3a\xfb\xdf\x79\xdc\x25\x42\xa6\xbb\x39\xd0\x1e\x58\xed\x1e\x53\xcd\x6e\x77\x14\x84\xfa\x35\xc9\xdf\xf5\x7d\x50\xcf\x9e\xb6\xda\xfe\x28\x3a\x85\x04\xa7\x1c\x4b\xfe\x3f\x94\x90\x65\xf1\xa9\x1d\x47\x12\x8e\x15\x36\x65\x9b\x6f\xc5\xe6\xce\xec\xe9\xe5\x05\xf9\x16\x1f\x7f\xb8\x2e\x28\xa5\xd4\xa8\xf2\x9c\xcb\x9c\xf2\x76\x1a\xa0\xcf\x0f\x3a\xdf\x0f\x2b\x04\xc2\xa5\x7f\x96\xd8\x87\x8d\x50\x54\x97\x1b\xae\x4a\x96\x12\x6b\x4f\xf9\xc2\x5a\x3c\x2c\x88\xd3\x5f\x46\x8b\x87\xbb\xea\x92\x1d\x98\xe6\x5d\xfe\x4e\x2d\x45\x3b\x74\x02\x21\xc2\xc7\x3a\x11\xc5\x84\xe2\x10\xde\x10\x44\xe0\x81\xa8\x0d\x61\xe9\x3e\x59\x07\xc5\xee\x1e\x79\x2d\xc7\x5c\x38\x2a\x26\x6d\x54\xcd\x88\xf2\x6c\x3f\x70\x76\x72\xf2\xaf\x4c\x4e\x56\x2a\x7b\x29\xe8\x30\xdb\x3d\x64\x32\x3e\x04\x7e\x38\xf2\x2a\xa3\x63\xc2\xe0\x8f\x93\x94\x2b\xf3\x2f\xb9\xbe\x7e\x0d\xce\xe0\x4a\x38\xfd\x12\xdc\x9c\x96\xb7\xf8\xd4\x68\x24\x32\x0f\x47\x17\x90\x88\xb7\xd6\xc1\x23\x18\x8f\x70\x91\x9a\xa5\x33\x15\x05\x25\xdb\x27\xb0\x57\x8a\xcf\xbb\xc3\xd0\xc7\x21\x23\xef\x27\x3c\xb9\xb9\x0c\xfc\xbf\xb2\x34\xf7\x44\x70\x2b\x12\x52\xe6\x7f\x7b\x28\x6e\x64\x97\x75\xd9\x96\x41\x2d\x18\xcf\x71\x6a\x47\x4e\xaf\x2d\x04\xe1\x37\xaa\x94\x4c\x78\x1d\x7f\x00\x96\xe8\x9a\x7d\xa7\xc0\xbe\x1f\x0e\x2a\x20\x70\xb6\x03\x10\x94\x73\x97\x48\x2d\x0e\xa3\xec\x13\x54\x85\x52\x0a\x17\x0e\x6e\x0f\x06\x04\xc4\xf1\xd6\x5a\x9a\xd6\xc3\x2d\xb6\x34\x75\x6a\xe6\x9c\x8b\xdc\x25\xbc\x5a\x04\x72\x2a\x83\xed\xa1\xbd\x88\x42\xbe\xb5\xa9\x6d\x66\xf2\x20\xa0\xdb\x3d\x35\x7d\x99\xf9\x6f\x2e\x3e\x08\xef\x59\xa7\x39\xd0\x9e\x42\x16\x55\x86\x91\xb5\xfb\x77\x76\x75\x3e\x46\xfc\xce\x03\x38\xd1\x1f\x5b\x67\xa7\xc3\x30\x3d\x6f\xfb\x7c\xc5\x2f\xa3\xbf\x53\xa0\x5a\x3c\xfb\xe3\x1f\xfe\xf0\xd4\x3b\x3e\xed\x67\xb8\x7b\xe8\x96\x4f\x7b\xb9\xde\x96\xd4\x66\xb8\xe8\x6a\x33\x74\xb5\x19\xe2\xeb\xc1\xfd\xc3\xf7\x5f\x7d\xa1\x95\xec\xb6\x36\x32\xdb\xf6\xad\xaf\xb0\x67\x56\x5c\x3b\x19\x71\x7b\x57\x50\xb8\x8f\xba\x09\x2d\xe5\x88\xed\x5f\x23\xa1\xab\x8c\xf0\xeb\xaa\x8c\xd0\x5e\x8e\x58\x5b\x55\x10\xf6\xcf\x0d\xfb\xf5\x54\x3c\xd8\x9b\x6c\xec\x9b\x57\xbf\x77\x36\x7d\x5b\x4d\x3f\xda\xb2\xee\xb7\x66\x61\x38\xac\xc7\x5b\x6a\x6f\x71\x25\xde\x5c\x35\xfd\xc3\x43\x15\x14\xcb\xd7\xd2\x50\x97\x07\x54\x9d\xc9\xde\x96\x07\x9c\x8a\xdc\x89\x77\x2f\xb3\xe2\xbd\xbb\x9e\x0b\x10\xf0\xb7\x1f\x7f\x5c\x40\xe7\x20\xdf\x2f\x4c\xfd\xcb\x72\x8f\x7e\xa1\x1d\xf0\xef\xca\x3d\xaa\xa2\xaa\xb9\xce\xea\x08\x04\x12\x44\x38\x39\x0c\x3b\xd3\xd4\x64\xe1\xf4\xf2\x82\x24\x25\x83\xd2\x0e\x34\x53\x03\xb2\x44\xc2\x73\x0e\x24\x2b\x11\x3a\xc9\x8e\x6a\xcd\xf2\x42\xef\x8b\x79\x9d\x77\xf4\x57\xe6\x1d\xbd\x73\x2f\xc5\xa4\xca\xa9\xe8\x1b\x6a\x01\xfe\xd1\x28\xee\x64\x8e\x1f\x0e\x88\xa5\x0b\x28\x56\x80\x2d\x14\x52\x9a\x2b\xc1\x7f\xae\x58\x6d\xae\xf0\x52\xc7\x23\x70\xee\xc0\x3c\x5a\x86\x1d\x4a\x54\x73\x54\x24\x91\x0b\x49\x5c\x16\x20\x1e\x8e\x8e\x60\x04\x62\x59\x64\x7a\xd3\x13\x86\xd2\xdb\x25\x14\x49\xa8\x9f\x8a\xf5\x43\x54\x10\x69\x96\xc9\x5b\xfc\x76\x28\x8f\x98\xfd\x33\x73\xb1\x75\x49\x86\x8c\xe4\xbc\x2c\x65\x69\xdd\x48\xe1\x74\x30\x7c\xc8\xe8\x99\xac\x44\x85\xad\xb4\x41\x1f\xd7\x4c\xdb\xad\x06\x54\xd1\x92\x50\x81\x09\x9c\xe6\xff\x2e\xe2\x1a\xbe\xed\xe8\xdd\x90\x4d\xe8\x94\xcb\xaa\xc4\xb7\xb5\x24\x07\xf6\x27\xe0\xbd\x33\x59\x79\xdb\x79\x05\x19\x5a\x7e\x75\x6a\x09\x9c\xde\xd6\x3f\x82\x82\x9b\x4a\x67\x8e\xec\xb3\xcf\x5c\xe9\xc5\xb5\x38\x10\xb9\x96\x13\x0f\x81\x79\x53\x55\x18\x06\xfb\xc3\xce\xb9\xb7\x31\xbe\x85\xa3\xc5\x92\xea\xf4\x1a\x7e\xda\x24\xa7\xda\x8a\x35\x98\x32\xef\xd2\xe1\x9e\x5e\x0c\x2b\xae\x72\xc7\x5e\x57\x8f\x52\x50\xee\x84\xe4\xb5\x97\x8f\xb2\xc8\x78\x32\xbb\x38\x6f\x37\x72\x03\xc7\x74\xec\x4f\xf9\xa8\x0d\x73\x9f\xfc\x8d\x2a\x96\x92\x37\x54\xd0\x31\x5a\x5d\x8e\xae\x2f\xff\xf6\xe6\xd8\x60\x11\x58\x75\x2e\xce\x97\x86\x76\x5c\x87\x83\xbf\x7d\xa8\x3c\x77\x32\x0f\xba\xd6\xc4\x86\x85\x51\x77\x04\xdf\x83\x95\x00\x20\x5e\x26\xd8\xa7\x7d\xda\x12\x71\xe0\x72\xbe\x48\x14\x86\x6f\xb8\xea\x6f\x6a\x9e\x54\x4f\xf3\xf4\xe6\x2e\x01\x10\xd8\xcd\xd7\xad\xb2\x99\x0f\xac\x81\x9f\x2b\xee\x46\xa2\x4b\xaa\xd9\x78\x76\xce\x8a\x4c\xce\x0c\x02\x5c\x06\x66\x7c\x7c\x74\x88\x62\x43\x39\xa4\x09\x29\xab\x8c\x61\x6f\xa1\xf9\xb2\x6b\x82\xb1\xb4\xa6\x74\x5c\x28\x4d\xa1\xe8\x1a\x8e\xbf\x76\x46\x8d\x99\x55\x53\xb6\xd4\xc7\x79\x6e\x7c\x2a\x2e\x51\x69\x4e\xc9\xda\x57\x9a\x33\x26\xf8\xfc\x66\x9c\xdd\xc6\xaf\xd9\xd8\x83\x19\x77\x07\x84\x53\x7e\x55\x65\x86\xf9\x64\xe9\x5c\x8b\x57\x90\xd3\xec\x1e\x63\xb5\x0b\xa0\x09\x66\xf6\x3d\x32\xac\x8c\x10\xc7\x54\x64\xe3\x5e\x2c\xf5\x79\x3b\x41\x97\xb6\x79\x89\xd0\xa2\xc8\x38\x86\x30\xcb\xd2\xfa\xa5\x03\x83\xe6\xe2\x63\x4d\x48\xcb\x96\xb2\xcc\x76\xb2\x4b\x9f\x4c\x59\x39\x6c\x52\xa7\x62\x5b\xb1\x84\x16\x1c\xfc\x38\x8d\xa5\x98\x68\xe3\x4e\x2f\x2f\xf0\xed\x65\x86\x63\xf7\x23\xee\xa0\xdd\x1b\xe7\xde\xb0\x3d\x83\x50\x73\xf1\x95\x96\x4e\x2f\x2f\xb0\xb4\x97\x2d\xb6\x54\x9b\x3f\x8c\x9e\x40\x31\xc8\xb1\xae\xf0\x48\xc7\x66\x44\x4d\xa4\xf0\x1f\x65\xa2\xca\x19\x16\x68\xaa\x9b\x8d\x19\xe5\x51\xcc\xea\xd1\x6b\xeb\x89\xd1\x75\x8c\xea\x73\x70\x10\x0a\xc2\x98\xfa\x50\x06\xf3\x01\x62\x72\xf0\x55\xf4\x94\xa1\x1c\xf5\x84\x9b\xb2\x9f\xed\xa3\x04\xb6\x8c\x0a\xd8\x9a\x9f\x09\x29\xae\x2c\xa8\xbe\xbf\x7a\xbd\x1b\x22\xbc\x8d\xc7\xb0\x45\x7d\x18\xd4\x2f\x2c\x68\xa9\x39\xcd\x48\x55\x66\xce\xad\x88\x39\x02\x36\x14\x6f\x42\xa7\x41\xe1\xa3\x01\x21\x5f\xe1\xee\xdb\xcd\xc1\x33\x8e\x0d\x7c\xad\x29\xb8\xca\xb2\x1e\x19\x71\x68\xd9\xae\x59\x41\x42\xb7\xd6\x35\x17\x89\x51\x07\x45\xdf\x77\xe4\x81\x19\x39\x25\xd1\x1f\x74\xf0\x9a\x82\xcc\xcc\xb2\x14\x8a\x61\xc2\x27\xcc\xa1\x4f\xc0\x64\x61\xb4\xd8\xb3\xac\x52\x9a\x95\x57\xd2\x30\x94\x20\x6c\x07\x0a\x83\xd0\xf0\xe7\xbf\x71\x91\x42\x9c\xd6\x15\x30\x9f\x84\x0a\xc2\x38\x18\x83\xcc\x90\xe0\x7f\x37\xc8\x52\x23\xe5\x91\xaa\x92\x89\x59\xd2\x41\x21\x53\x75\x60\x48\xd1\x01\x9a\x0c\xd5\xc1\xb1\xf9\x6b\x7e\x0d\x18\x85\x13\xbc\x77\x42\x0b\x7e\x70\xdc\x23\x00\x20\x70\x00\x4a\x3d\x79\xba\x78\xe8\xd6\x0a\x3a\xfa\x4e\x58\x78\x15\x8e\x00\x38\x28\x6a\x57\xdf\xed\x84\x6b\xe6\xdb\xab\xa3\xa5\xc9\x57\xba\x99\x27\xf8\x84\x9c\x0a\xc2\xf2\x42\x83\xf5\x9a\xe4\x8c\x3a\x97\x38\x9b\xb2\x72\xa6\x27\xb6\x12\x88\x23\x20\x4f\x1e\xe8\xfb\x01\x7c\xae\x77\x7d\x8d\xe4\x70\xc2\x16\x80\x7b\xf8\xd5\xe1\x3c\x21\xad\x39\xc2\x93\x05\x25\xb0\xe8\x9d\xc0\xf8\x83\x79\x33\x06\x21\xde\x42\x6a\xe9\xe9\xc7\xeb\xd7\xd6\xb1\x82\xb0\xfa\x8e\x8b\x54\xf9\x6e\x8a\x36\xee\xdb\xc2\x7b\x29\x90\x61\x86\x4f\x11\xc0\x8b\x22\x70\x53\xb1\x75\xcd\xf0\x4e\xea\x5f\x35\xd4\xda\x01\xac\xea\xf0\x46\xa6\xcb\x8f\x4e\xb4\xbf\x17\xc1\xc3\x3e\xd8\xa0\xb6\xbb\xd8\xb1\xac\xb8\x3b\x2b\x96\xea\x04\xeb\xb7\x63\x0d\xe8\x57\xcd\xa4\x36\x38\x00\x9d\x0c\x7e\x01\x6b\x12\xd6\x39\x27\xa3\x8c\x8e\x6b\x34\x02\xaa\x87\x82\xd6\xd9\xf5\x0f\x6e\x09\x8a\xf0\xe5\x22\xef\x46\x99\x78\x93\x14\xdc\xaf\xa1\xb4\xf2\x09\xf3\x91\xa5\x3f\x6e\x16\x85\xfd\xe0\xab\xb1\xa9\x89\xb3\x51\xaf\x35\xe4\xad\x82\xbf\xb3\xd9\xd1\x00\x13\x5c\xc1\x36\xa7\x98\x42\xfc\x14\xc8\x21\xd7\x3f\x44\x68\xb2\x61\xbe\x2b\x90\xf6\x86\xcd\x6e\x65\xb9\xbc\x16\x7b\x2c\xd7\x7b\x3a\xe4\x5e\x71\x1a\x98\x73\x5e\xa2\x7d\x50\x2e\x2d\x3a\xbf\x33\xaa\xae\x9d\x7c\x46\x87\x2c\xdb\x3c\xf5\x37\xb4\x30\xf3\xae\xe3\x5e\xd1\x10\x60\xdd\xa6\xa8\x8a\x60\x88\x9a\x0b\x0b\x94\xe5\x98\x0a\xfe\x0f\x0c\x16\x4e\x0c\x49\x90\xa5\xf9\xf3\x08\x5d\x2f\x68\x46\xc8\x58\xa2\x8f\x2d\x2a\x2f\x25\xa1\x1b\x70\x9d\xa6\x29\x47\x41\xe4\x72\x03\x5a\xae\x07\x02\x17\x37\xdb\x6c\x1f\x3c\x8f\xd1\x64\xb8\xd8\x3b\xde\xbb\x35\x67\x7d\xf3\x71\x5c\xef\x03\x6e\xc0\x2e\xaa\x72\x4d\x78\xd8\xda\xf7\x73\xca\x6d\xb3\xe0\x6d\xa0\x6b\x31\x87\x5a\x09\xd3\x10\x48\xb3\x3e\x3f\xda\x3d\x1c\x96\xbd\x00\xce\x72\xca\x77\x85\x18\x5e\x7b\x6c\x59\x4e\x75\x55\x72\xbd\x94\xfd\xae\x7f\x91\x8b\xef\xaa\x21\xb3\x1e\xf5\xad\x5f\x17\x10\x58\x79\x7a\x79\xb1\x14\x2c\xed\xb0\x59\xb0\x7b\xd8\x09\x1a\x29\x8d\x54\x82\xe6\x43\x3e\xae\x64\xa5\xb2\x59\x68\xc6\xa5\x10\x10\x30\x20\xe4\x02\xed\x58\xe2\x50\x13\x2a\xa4\x98\xe5\xf6\x51\x91\x64\x55\xca\xa2\x11\xc1\x6f\x3a\x95\x3c\x25\xb4\xd2\x32\xa7\x9a\x27\x24\x91\xac\x4c\xc0\xc7\x1a\x8e\x54\x29\x46\xe8\x8a\x77\x93\x4a\x69\x99\x93\x9c\x96\x6a\x42\xb3\x6c\xd5\x1e\xb7\xc0\xc3\xd7\x15\x6b\xef\xc3\xfa\x57\xfe\x38\xc5\x59\xef\x88\xdf\x1b\x6a\xd3\x37\xc0\x6f\x33\xb9\xbd\x06\x98\xae\xc6\xd2\x06\x63\xd8\xaa\x08\x4b\xeb\x3d\x45\x08\xf7\x7e\xc2\x48\x51\x0d\x33\xae\x40\x33\x05\x4a\x34\x23\x43\x36\xe1\x36\x3a\x7b\x33\x09\x5a\xb9\xc5\x9b\xe0\xbc\x8e\x06\x6c\x84\xd0\x1a\x92\xbd\xf6\x5d\xcb\xd2\x2e\x72\x3a\x6e\x20\x80\xbf\x36\x04\x9b\x8a\x99\xe7\x84\x50\xe4\x54\xf5\x88\x2c\x6d\xc4\x8e\xef\x49\x6f\x7f\xf2\x85\x72\x4b\xf2\xce\x82\xce\x86\xce\x5b\x7c\x87\x84\x0a\x56\x8e\x64\x99\x1b\x00\xf3\x92\x8c\x2a\x01\x06\x4a\x65\x23\xed\x81\x4b\x58\x1b\x17\xcd\x94\xf4\x67\x19\xf6\x42\xb8\x49\x10\xaa\xc8\x2d\xcb\xb2\x01\x39\xcd\x32\x5b\x7d\x35\xa8\xb3\x51\xe7\xca\xd7\xf1\x1c\xc3\x19\x49\xf9\x98\x29\x4d\x8e\xae\xff\xef\xe9\x31\x88\x28\x60\xff\x99\x11\x4d\x5d\xaa\x60\x6c\xd7\x02\x61\x27\xad\x40\x28\x4a\xa8\xa6\x99\x1c\x63\x48\x03\xd8\xc8\x45\x4a\x8a\x8c\xce\xa0\xb5\x42\x41\x4b\x88\xf6\x4d\xd0\xb6\x45\xca\x4a\x40\x51\xe9\x7b\xe5\x5d\x9b\x89\xca\xba\xba\xcf\x7d\xc0\xc9\x1d\x89\xc6\x86\xea\xba\x77\xcb\x14\x4b\x56\x64\x74\x85\x35\x66\xe1\xc0\xd7\x89\xe0\x46\x3d\x00\xd5\x5f\x0a\xe6\xc7\x18\x90\x6b\xc4\x9d\x9c\xea\x04\xfd\xc9\x3f\xe5\x4c\xd3\x94\x6a\x3a\x30\x3a\xf4\x4f\x71\x56\xa2\xcc\x52\x33\xd0\xea\x8d\x5e\x31\x67\x14\x8e\xe5\x66\x22\xf5\xda\x48\xf0\xfe\x71\xd0\x6b\xdc\x79\x5c\x6b\xfe\xd9\x93\x3e\xc1\xf2\x5f\x7e\x36\x2a\xec\x5a\xff\x65\x34\xd7\xf9\x97\x62\xeb\x4c\x16\xaf\xc4\x62\x6b\xce\xa0\x44\xe7\x7b\xdb\x85\xca\xdd\x01\xd3\xf3\xe9\xdb\xf3\xd5\x66\xc2\xcd\xa6\x96\x0d\xa6\x95\x79\xf9\x74\xe5\xf4\x9c\x61\xde\xfe\x12\x7b\x66\x5c\x2a\x12\x24\x6f\x62\x62\x0f\x15\x9e\x73\xb8\xe2\xfc\x19\x58\x0c\xc2\xb4\x53\x7c\x6f\xb5\x5d\xa9\x91\x6b\xac\x89\x43\x6c\x53\x96\x5f\xdf\x4f\x76\xe5\x43\xcd\xfc\x63\x1b\x33\xf1\x56\x65\xda\x21\xe4\x21\x31\xc7\x99\x96\x3d\xb0\x9b\xfa\x13\x1b\xda\xc5\xdc\x52\xb7\x98\xa8\xdf\xca\x28\xe8\xeb\x86\xcd\x0e\xad\x8e\x68\x30\x7d\xc2\x0b\x4c\x15\xb5\xee\x1b\xbb\xbb\xe4\x07\x9a\xf1\xd4\x0f\x81\x58\x7d\x21\x7a\xe4\xad\xd4\xe6\x9f\x97\x9f\xb9\xd2\xa8\x6b\x9f\x4b\xa6\xde\x4a\x0d\x77\x5a\x59\x2a\x4e\x61\x8b\x85\x5a\x6d\x1f\x3d\x00\x70\xae\x02\x9b\x80\x5b\xd0\xc5\x28\x92\x8c\xcc\xd3\x17\xc2\x48\x04\x76\x45\x3e\x85\x5a\xd9\x21\x5c\xfe\x8f\x90\xa2\x0f\xbe\x81\xa5\x63\x58\x40\xc8\x32\x82\xc3\x9a\xe1\xec\x50\x18\x7c\x09\xbf\x70\xe5\x88\xb8\xe7\xd9\xd4\x99\x2b\x79\x42\x72\x56\x8e\xc1\xdb\x95\x6c\xf0\xf6\x34\x35\xe1\x36\x32\xdc\x6e\xdc\x2b\x20\x99\xaf\x57\x5a\x69\x16\x36\x29\x78\x1e\xc9\x52\x8e\xa6\x9b\x7f\x1a\xea\x03\x90\xfa\x17\xe4\xd1\xab\x01\x39\x75\x2d\x7e\xc2\xdf\xac\xd7\x2f\x1c\xc6\x8c\xc0\x15\x31\xa4\x64\x4a\x33\x86\x1d\x0e\xa8\xf0\xb9\x6e\x72\xb4\x40\xd8\x7b\x36\x9f\xde\x9c\x59\x2f\x32\x1d\xdc\xb0\xd9\x41\x6f\x61\x6b\x0f\x2e\xc4\x41\x9d\xf0\x18\x6d\xa6\x27\xa2\x20\x6d\x1d\xc0\x6f\x07\xbb\xf3\x82\xb5\xc4\xb2\xb9\x2d\x69\xe3\xbe\xa9\x1b\xbe\xdc\xf5\xbf\x54\xd8\x38\x52\xc7\x60\xf6\x10\xd8\x6b\x49\x96\x60\x06\x36\x77\xc3\xd2\x2a\x46\x54\xbd\xe1\x45\x51\x57\xa2\xa9\x8a\x71\x49\x53\x46\xc6\x25\x2d\x26\xdb\x8a\x25\x28\xdb\x2c\x1b\xfe\xc9\x08\xba\x2b\x80\xbf\x46\x37\x5c\xfb\xde\x2d\x1b\x4e\xa4\xbc\x81\x34\x44\x40\x84\x3b\xb4\x64\xfc\x88\xdf\x3a\xaf\xef\x39\xa5\x54\x91\x94\x69\xca\x33\x88\xa3\x79\xf7\xfa\x8d\x8d\xb4\x71\x7c\xdc\xcd\x72\x79\xd0\x4a\x0b\x0a\x00\x4d\x6d\x04\xd8\x15\x9b\x72\x76\x6b\xed\x1b\xab\x62\x64\xfa\x64\xcc\x04\x04\x86\xac\x09\xa0\xea\x13\xc5\x53\xf6\x12\x92\x9e\x57\x0f\xb4\x87\xc3\x61\xc5\x9c\x37\x1d\xde\xf5\x14\x7c\x23\xf5\x6e\xc0\x65\xbd\xfa\x7b\x29\xcb\x35\x45\x98\x9a\xe5\x60\x37\xcb\xaf\xb6\x51\xfc\x2f\xc8\x1f\xfe\xf0\xfb\x95\x0f\xe5\xf4\x33\xcf\xab\xfc\x05\xf9\xe3\xbf\xff\xfb\xef\xff\x7d\xf5\x63\x5c\xe0\x63\xcf\x57\xaf\xcf\x9e\xb6\xb3\xab\xf3\x47\x00\xef\xd4\x47\x32\xae\x77\x66\x36\x18\x6a\x44\x79\x56\x95\x36\x86\xb6\xa1\x8a\xf0\x2a\x7c\x07\x1c\x51\x75\xd2\x09\x75\x23\xba\x40\x3b\x1b\x80\x37\xe2\x82\x29\x68\x9e\x53\x89\x92\x25\x72\x2c\xf8\x3f\x58\xea\x7a\xe7\x40\x40\x0c\x54\xd9\x77\x28\x4e\x98\x48\xb1\x87\xa9\xe1\x79\x13\x2a\xd2\x6c\x5d\xa0\x44\x83\x95\x86\x27\x78\x2f\x90\x01\xe7\xd9\x0a\x60\x6f\xea\x37\xe6\xc0\x05\x9d\x58\xad\xdb\x0e\x39\x1a\x82\x6d\xaf\x95\x22\x61\xbc\x5e\xa3\x58\x2f\x99\xe3\x82\xde\x87\x2a\x2b\xdc\xfb\xb9\x62\xe5\x0c\x12\x6c\x6a\xc1\x3e\x08\xc2\x7b\x5f\xd7\x6f\x70\xcb\xb0\x12\x15\x16\xd0\x99\xd3\x85\x6b\x21\xa6\x0e\x93\x99\xfb\x36\xbc\xc3\x30\xec\xc0\x79\xcd\xc8\x29\x11\x55\x96\xad\x7a\x54\xc8\x75\xfe\xb5\x10\x76\x1b\x54\xc9\x66\x3a\x5e\x53\xb3\xc0\x12\x48\xdf\xab\x71\x20\x5c\x78\x4b\xa2\xfc\xe3\x36\x17\x84\x0b\x6e\x14\x4f\xdb\x3c\x96\xb6\x59\x99\xa0\x06\x66\x04\xbc\xb6\x09\xb6\x6d\x58\xdc\xe7\x2e\x0d\x0b\x78\x6d\x15\xd7\xd4\xcc\xc8\xb0\x64\xea\x8f\xce\xd4\xb0\xc3\xe2\x9b\x98\x1d\x96\x2c\xbd\x33\x3e\x2c\x00\xbc\x69\x14\xd9\x16\x11\x64\x0d\x77\xb2\x81\x51\x02\xaf\xce\x34\xb1\x15\x27\x6a\x40\x98\xb7\x33\x53\x34\xde\xd5\x92\x71\x31\x95\x58\x64\x7b\x2b\x19\xee\x6a\xe1\xc5\x39\x51\xee\x16\x28\xab\x95\xe5\xbc\xf0\x1b\x8a\xb4\x46\xa1\x25\x95\xda\x6c\xec\x5e\xbf\x82\xf5\x79\x37\xad\xe8\x20\xf1\xca\xab\x8c\xfd\xc8\xf5\xe4\x9d\x2b\xaa\x6f\xb1\x5a\x57\x45\x06\x8b\x0d\x7e\x30\x28\x74\x55\x4b\x86\x17\xd8\xc6\x8d\x25\x32\xcf\x99\x48\x31\x88\x28\xa7\x37\x8c\xd4\xad\x42\x8d\x8c\x07\x62\x30\x0c\xc7\x3e\x17\x54\xd4\x72\xe2\xd4\xd0\xf2\x75\x18\xd5\x10\x9f\x9a\xf2\xda\xc6\x09\x2d\xeb\x13\x59\x82\x4c\x94\x28\x61\x85\x0c\x59\x26\x21\x05\x1e\x23\x6c\x31\x06\xdc\xe5\x80\x18\x92\x6c\xef\x5a\xae\x67\x0b\x6e\x32\x31\xae\xeb\x78\xa9\x0c\x9a\xfa\x5a\x0a\x2c\x05\x1b\x90\x2b\x2b\xc2\x34\x93\x8a\x9a\x90\xd3\x86\xa4\x74\x0b\x86\xf8\xb9\x5f\x57\xcb\xe8\x1b\x61\xb7\x6f\x67\xa3\x65\xce\x93\x4d\x9b\xb2\xd9\xd6\x81\xd7\xfc\xb6\xb8\xf7\xc2\x8d\x99\xba\x7b\x4d\xb6\xc6\x3d\xdc\x6d\xce\x8a\xcb\xb7\xda\xd8\x6e\x6f\x62\x62\x52\xf3\x23\xbf\x31\x73\x64\x33\xc1\x66\xd5\x60\x24\xec\x93\xb3\xab\x97\xa7\xef\x5f\xf6\xc8\xf7\x97\xe7\xf0\xef\xf9\xcb\xd7\x2f\xcd\xbf\x67\xef\xde\xbe\x7d\x79\xf6\xde\x48\x30\x5f\x61\xd3\x00\xa3\x40\x9a\xad\x31\x9c\x50\xc6\x74\x8a\x8a\x19\x19\x55\xda\x10\xa2\xfa\x63\xd1\x2c\x28\x5a\x1f\x68\x9a\x1a\x65\xf5\xc9\x21\xc0\x72\x80\xcf\x1b\x6c\xc2\x6e\x29\xd8\x67\xc1\xa6\xc8\x6d\x16\xd0\xee\x07\xc3\x1a\x27\x99\x44\xeb\x3d\xd8\x31\xbb\xe4\xa3\x20\xaf\x64\x49\x6c\x6f\x3a\x68\x56\x9a\xaa\x43\x9b\xc3\x63\xfe\x3f\xc0\x5b\x27\x99\x1c\x1f\xfa\xd4\x1e\x46\x32\x39\x26\xaa\x1a\xfa\x94\x2b\x10\x02\xe0\xe9\xaf\xdc\x63\x51\xa6\x4a\xcf\xe7\x5d\x05\x6f\xf9\xc1\xa3\x77\xc2\x07\xc2\x71\x4f\xa0\xa1\x5c\xf4\xa4\xb9\x31\x3f\xe0\x57\x27\xcb\x67\xe0\xe4\x3d\x5e\xce\xbd\xf1\x51\x18\x5c\xbf\xe5\x59\x9a\xd0\x32\x5d\x40\x78\xe0\xc9\x88\x2f\x00\x3d\xac\xb2\x8c\xcd\xbf\xeb\xc1\x6d\x6d\x14\x39\x65\x65\x46\x0b\x4c\x08\x80\x32\xd7\x10\x31\x05\x1f\x39\x67\x05\x83\xb4\x37\xd7\x9c\x9e\x89\x24\x93\x50\x86\x05\x19\x7a\x2f\x5e\x3a\x46\x50\xb9\x5a\x95\x2e\xf9\xd2\x1f\xaf\x83\x2f\x93\xc0\x42\x1c\xf9\x56\xa8\x8f\x91\xe7\x2b\x0b\x01\xf9\x1c\x1f\x54\x94\xbd\xb4\xcf\xc8\x81\xcd\x48\x3c\xe8\x91\x03\x5f\xeb\x26\xb5\x9a\xc1\xc1\x57\x07\xf5\x03\x61\x4e\x1b\x28\x06\xd6\x0d\xd6\x87\xef\x84\xd9\xb3\x80\x1d\xce\x59\xe7\x3f\x5d\xd7\x2b\x32\x1c\xd9\x1a\xee\x60\x0e\xf1\x40\x83\x68\x22\x0b\x5f\xad\xd3\x31\x37\x7e\xd1\x4c\x3f\x78\x5d\x43\xf9\x03\x4c\xeb\xb4\xc0\x29\x99\xd9\x4a\x17\x84\x77\x1d\x61\x9e\x77\x36\x86\x05\x95\x78\x49\x0a\x5a\x1a\xf5\xcb\x3d\x19\xb7\xc4\xfb\x6a\x63\x43\xbc\x06\x18\x14\xf8\x94\x1a\x6a\x2a\xd7\xfe\x8d\xb3\x8c\x2a\xb5\xc4\xda\x0c\x54\xc4\x0c\x4c\x18\x8e\x4c\xa8\x73\xb8\x41\xbd\xf3\x09\x9d\xae\x29\x88\xd1\x60\xd2\x9a\x96\x63\xa6\xd7\x7b\x83\xa8\x98\xbd\x5b\x5b\x42\xaf\xdf\xb8\x68\x6f\xbf\xd9\x51\x8c\x0e\x21\x17\xba\x2f\xcb\x3e\xbe\xf2\x82\xe8\xb2\x5a\xe5\xd7\xd3\x3c\x67\xb2\xd2\xd7\x2c\x91\x62\x79\xf6\x8b\x7d\xae\x35\xf7\xd6\x16\x29\x41\xd6\xc3\x7a\xea\x04\x98\xb0\xe8\xa5\x53\x46\x6b\xe9\xc6\x79\x55\xe3\xb2\x3d\xef\x5e\xbf\xd9\x67\xb3\x09\xa4\xcd\xaf\xdf\xc9\x1f\x2c\xcf\x10\x63\x3f\x53\x3b\xf3\xb5\xaf\xbd\xa9\xf4\xf6\x2f\x9d\x79\x6f\xdd\xfa\xa7\x2d\x30\xd6\x97\x5e\x59\xb9\x7e\xa5\xa9\xae\x16\xb0\x21\xda\x1b\x4b\x2c\xaf\x31\xfd\xd0\xaa\x22\xd7\xf0\x5e\x68\xd8\x5c\xac\x37\x81\x35\x6c\xe0\x39\x17\xa0\x39\x20\xf6\x45\x73\x3e\x75\x49\x39\x2a\xcd\x34\xd1\x15\xe4\xb1\x53\x6d\x83\x39\x6d\xc1\xa5\xdf\x2c\x5b\xc6\x52\x35\x79\x9d\x6a\x9c\xb0\x52\xab\xd7\x54\xe9\xef\x8b\x94\xae\xc8\x74\x9b\x0b\xd2\x54\x1a\x0e\x0c\x8a\xf4\xb7\x82\xa5\x86\xc2\x5b\x10\xe0\x78\xe4\xd6\x90\xde\x0a\x47\x5c\x19\x7a\xb0\x12\xe5\xdc\x01\x32\xaf\xf7\xcd\xa7\x96\xcf\xfa\x4a\x1a\x98\x9c\x2e\x25\x40\x71\x78\xca\xa6\xd9\x1a\x76\x52\xc2\x68\x44\xb0\xcf\xcb\xac\x0c\xfb\xcf\x38\x63\x54\x2c\x4f\x36\x98\xc3\x28\x78\x6e\x7b\x1c\xb2\x1f\x20\xb7\x13\x6e\xe4\x5d\xcc\x08\x54\xc4\xc9\x5f\x29\xcb\xd8\x8a\xc4\xc0\x3d\xc3\x67\xed\x17\xce\xed\x07\x1a\x85\x76\x5d\xc6\xef\x78\x27\x86\x95\xe0\x6d\xea\x49\x2d\x69\x5b\xe9\xc1\xeb\x6b\xf3\xab\x02\xf1\x65\x98\xc9\xe4\x06\x0b\xd0\x41\xed\x07\xfe\x0f\x56\xba\x58\xfb\xba\xf9\x9c\xed\x88\x36\x76\xdd\x5e\x1d\xdc\x5c\xfb\x2b\x18\xc5\x8c\x6d\x00\xe8\xc7\x97\x65\x6d\x4d\xad\x84\xcd\xb4\xbc\x9f\x70\x5d\xa7\xe5\x40\x8e\x42\xe4\x2d\x59\x54\x78\xb0\x56\x0d\xd4\xc7\xb4\xca\x2a\xcd\x6d\x6e\xd0\xc9\x77\xab\xf3\x68\x5a\x0d\xc1\x5d\x97\xcd\x83\x4f\x00\xf8\x44\xb2\xb6\xb4\xd1\xda\xbc\x9f\xa6\xd6\xbe\x0d\xf9\x3d\xa4\xb9\x84\xef\xa7\xdc\x64\xb4\x56\x03\x2a\x5b\xf7\x70\xae\x4c\x7d\xa8\xaf\x6d\xfc\x96\x4d\x0b\xf3\x6e\xe5\x59\x13\xdb\x14\x50\x8d\x0b\xcd\x78\xb5\xc3\x66\xf1\x62\xf4\xc1\x48\x96\x2b\x15\x98\xf6\x26\xbf\x3e\x1b\x6c\xe3\x40\x46\xfa\x5c\x1d\xaf\xb7\x98\xb0\x64\xa8\x97\x7f\xa5\x47\x28\x99\x70\xa5\x65\x69\xdd\x89\xd0\xbc\xae\xa4\xd0\x5c\x77\x79\xdc\x5b\x3b\x11\x80\x67\x7e\x0a\x84\x16\x05\xa3\xbe\xaf\x95\xe5\x4d\xd0\x98\xaa\x64\x89\x2c\xd3\xa5\x13\x73\xa6\x81\xa5\xb2\xd4\xd2\xcf\xb7\x90\xd9\x9a\x51\xa5\xdf\xfb\x39\x18\x01\xa1\x21\x35\x8e\xc5\x1f\xbb\xc4\x7a\x35\xae\xf4\x8f\x14\xf5\x8f\x92\x50\x81\x26\x91\xfd\x64\xf0\xcd\x42\x46\xbd\x36\x94\xe6\x76\x5a\xd7\xad\x97\xdc\x82\x25\xde\xcf\xcc\x73\xa6\xd4\xda\xe4\xaa\xb9\xc0\x14\xa8\x21\x4d\x7c\x0d\x69\xfb\xba\x63\xf6\x28\x20\x60\x08\xaa\xab\xf2\x36\x5b\x8d\x6a\x04\xc4\x04\x34\x28\xf8\x63\xb5\xd7\x96\x15\x13\xaa\x9a\x2e\xc6\x9f\x22\x1f\xd6\xdc\xf8\x38\x34\x9c\x4d\xc9\xa8\x5a\x97\x68\x3a\x07\xdb\x61\xc9\xd9\x88\x9c\xd1\x9c\x65\x67\x54\xb5\x09\x5c\xa0\x00\x03\xc2\x06\xe3\x01\x39\xbc\x0a\x3c\xcc\x6f\xa5\x7e\xb3\xae\xc7\xc7\x86\xf2\x0f\x4d\x4e\xf4\x9d\x9e\xe5\xbd\x95\x84\xcd\x27\x77\xcf\x33\xbb\xf7\x0c\xd7\x9c\xd0\x47\x71\x36\xd7\x67\x4b\xaf\x3a\x8f\xf1\x49\xac\x4a\xb0\xf8\x25\xbb\x9e\xc8\x0d\x09\x9c\xab\x4e\xe1\x63\x3e\x7f\x1b\x96\xe4\x87\xb8\x5e\x6a\x32\x59\x58\xdd\xfb\x48\x73\x05\x9f\x41\x18\x54\x08\xe5\xe1\xcd\x4c\xcf\xae\x7f\x68\x53\x6c\x79\xd8\x52\x05\x76\x03\x57\xfe\xbe\x46\x2e\xef\xaf\xe7\xc2\xfb\x96\x41\x48\xc1\x4b\x63\x30\xe0\x3e\x83\x4e\xce\xdd\x57\xad\xad\xc3\x57\x76\x86\xbf\x46\xb6\x83\x9e\x7d\x26\xc2\x8f\x23\xe8\x55\xc8\xa6\xd8\x20\x14\x92\x5c\x18\x11\x4c\x99\x43\x71\xbc\xe6\xf3\x0d\x15\xaa\x66\xca\xd4\x66\x45\x77\xa3\x12\x4b\x36\x6f\xad\x7b\x68\xdd\x06\xe3\xd5\x54\x67\x6b\xa0\x13\x6f\xa1\xac\x6d\xd6\x78\xb6\x18\x6c\xa3\xf8\xb7\xe5\x78\xcb\x0d\xb8\xf3\xd7\x5c\x25\x69\xf3\xca\x15\x10\x69\xf4\x2a\x27\x86\x02\x27\x50\x5f\x1c\x69\xb7\x25\x4f\xb1\xfd\xf6\x6a\x9e\x06\x42\x88\x65\x8c\xe1\x6d\x2d\xab\xaa\x78\x7b\x30\xdf\x58\x7f\xa4\xf1\x78\x8f\xa0\x98\xca\x46\x04\xba\xdb\xe2\x0c\x78\x6d\xc2\xba\x87\xc7\xb7\x26\x95\xb2\xd6\xe2\xd8\x1d\xd5\xb5\x51\xac\x9c\xb2\x34\xf2\xd4\xd9\x3a\xff\xf1\xbd\xc0\x6f\x5b\x8f\x6f\xc1\x4e\xfe\xf9\xaf\xdf\xfc\xa6\xdf\xef\xff\xa6\x0e\x29\x7b\x41\x68\xc1\xd9\x67\xcd\x30\xea\x70\x70\xf3\x1f\xd0\xcc\x69\xfa\xfc\x37\x80\x70\xe4\x0c\xac\xcd\xce\xcc\x7a\xee\xb3\x26\x7f\xe3\xb2\x4e\xcd\x47\xa8\x10\x52\x87\x51\x50\x89\x14\xba\x94\x59\xc6\xca\xfe\x98\x89\xc1\x4d\x35\x64\xc3\x8a\x67\x29\x2b\x61\x70\xf7\xe9\xe9\xb3\xc1\x9f\x07\xcf\x7e\x43\x7c\x8e\xa9\x91\xec\x95\xa6\x79\xf1\x02\x92\x5d\x7e\x63\x31\xce\x55\xef\x2b\x32\x2a\xd4\xc0\x87\xb6\x0f\x12\x59\x32\x69\xfe\xc9\x7f\xa3\x0a\x96\x98\x6f\xe3\x41\x23\x4b\x9f\xb1\xa6\x33\x3b\x45\x5b\xab\xae\x06\x53\x9f\xc8\x2c\x87\xff\xe3\xd2\x6d\xb9\xc1\xcb\xcc\xd6\x2e\xcc\xb8\xd2\xdf\xcd\xff\xf2\x9a\x2b\x64\x97\x45\x56\x95\x34\x8b\xa7\x0a\x3f\xa8\x89\x2c\x75\x54\x96\xb7\x4f\x38\xb2\x46\xc5\xc5\xb8\xca\x68\x19\xbd\xf5\x1b\x17\xf3\x50\x9b\xeb\x0c\x97\x9c\x46\x21\x80\xfd\x28\x40\x98\x0b\xcd\xca\x33\x99\x55\x79\x68\x1d\xeb\x2f\xca\x95\x23\x5e\x2a\x6d\xeb\x21\xc6\x4e\x85\x65\x72\x31\x7c\x3f\xc0\xd1\xbf\x2b\x29\xc0\x5d\x48\x06\x06\xdc\x83\xd5\x2f\x7d\x78\xf6\x29\x78\x0f\xf7\x30\x96\x57\x97\x9e\x92\x25\x33\xa6\x45\x51\xca\x29\xc5\x6a\x8e\x6b\xe6\xe2\x9e\x5b\xf8\xec\xe9\xe2\x0f\x2b\xbe\xbd\x7c\xc8\xc8\x47\x17\x0e\x19\xfd\xa0\x97\x54\xba\xc4\x87\xa7\xcf\x69\x56\x4c\xa8\xcb\xad\x54\xc9\x84\xe5\xb4\xde\x24\x59\x30\x71\x7a\x79\xf1\xc3\xef\xaf\xe7\x7e\x58\x5e\xfb\xd2\xa0\x9c\x4f\x27\x0c\xba\x30\x50\xa7\x8b\xf9\x74\x90\xfa\x04\x2c\x4c\x73\x41\xc8\x5b\x2e\xd4\x19\xa9\x1c\xcf\xf8\xdc\x6d\x03\x9d\xe0\xd6\x2a\xe1\x2a\x20\x32\x73\x84\x2e\xee\x37\x57\xc7\xa9\x46\x2b\xb3\x08\xcf\x52\x0b\xb3\x3a\x7a\xc7\xb9\x79\xea\x45\x0b\xbb\xa6\x01\x31\xc8\xc8\x4a\x5f\xf9\x09\x53\x57\x35\x09\x72\x2e\x71\x34\xe5\xea\x39\x42\x8a\x95\x86\xb8\x85\x52\xb8\xa6\xd1\x3d\xdf\xfb\xbe\x64\x66\xdc\x38\x6b\xd3\xa5\xa1\x2c\x69\x89\x37\xe6\xda\x91\xd0\x44\xe6\x79\x25\xb8\x9e\x9d\x00\x35\xe4\xc3\xca\xec\xc6\x49\xca\xa6\x2c\x3b\x51\x7c\xdc\xa7\x65\x32\xe1\x9a\x25\xba\x2a\xd9\x09\x2d\x78\x1f\x26\x2b\x30\x00\x27\x4f\xff\xcd\xd3\xf1\x79\xa5\x73\x25\x87\x59\x26\x23\xc4\xb0\x86\x7a\x7a\x3c\xe8\x6d\x8f\xed\xb7\xa3\x1a\xb5\x50\x25\xf9\xe5\xf5\xfb\xda\xc5\x88\xd5\x91\x00\xc2\x81\x93\xad\x06\xb6\x01\x14\xf4\x2e\xb2\x45\xe1\x5d\x3a\xab\x4f\x62\x85\x9e\x00\x19\x37\x3a\x89\xaa\x86\x39\xd7\xca\x45\x59\x62\xd4\xe1\x19\x70\x10\xa8\x2b\x8a\x96\x9a\x01\xb9\x10\xb5\x7e\x7f\xe7\xa0\x86\xa8\xa0\xbe\x01\x5f\x73\x60\x87\x0c\x70\xf1\x85\x25\x8a\x94\x63\x51\x2b\x77\x27\x38\xe3\xd7\x05\x4b\xfc\x69\xf0\x67\xfa\x14\xeb\xeb\xdb\x46\x0e\x3e\x90\x53\x62\x47\x72\x78\x79\x21\xa4\x60\x8d\x5e\xb7\x5a\x97\xeb\x93\x25\xf4\x34\xfe\x69\x49\xec\x42\xbf\x19\x1b\x21\x1b\x14\x32\xf7\xe9\xcd\x76\x20\xc7\x1b\xac\x76\x0c\x7d\x11\x3c\xc3\xb0\x39\x28\xa0\x2b\x8b\x10\xb6\x90\x97\x11\x84\x28\x1b\xc8\x1e\x9c\xba\x62\x90\xd8\x4b\xe0\x0d\x15\x15\xcd\x96\x06\xb0\xad\x95\xef\x1c\x6c\x56\xd7\x94\x58\x55\x0d\x79\x35\xe8\x5a\xad\x4f\xb1\x76\xf6\x36\x47\x7c\x6d\x59\x8d\x55\x01\x5e\x88\x8d\x5b\x97\xe3\x08\x7a\x0e\xac\x72\x69\xee\x13\x83\x74\x10\x9e\xa9\x85\xb0\x11\x64\xa0\xeb\x43\x47\x94\x66\x85\xaa\x0b\x73\x68\x49\x12\x99\x17\x19\xd3\x31\xef\x85\x88\xde\xed\x62\x94\xe6\x03\x76\x77\x3c\xa9\xb6\x4e\xcb\xf5\x0a\x7f\x6d\x1f\x2d\xbb\xdb\x9c\x3f\xad\x99\xa8\x0c\x15\xbe\x8e\x2a\xc7\xaf\x68\xf9\x1b\x1f\xc9\xd5\xef\x86\x75\x19\x31\x03\x37\xee\x2e\xe5\x62\x4c\x5c\x65\xe9\xd4\x06\xa6\xa6\x41\xaa\xde\xea\xd0\x92\x3d\xe3\x74\x56\xcb\x2a\xcb\x97\x59\xe7\xd1\x2c\x74\xca\x5d\xf1\xfe\x46\xb5\x10\x92\x14\xd7\x45\xe3\xc5\x9c\xfc\xc2\x02\xb4\xb4\x3d\x45\x29\x29\x38\xc3\xc0\x7b\x2f\x0e\x01\xc0\x18\x4d\xed\x4d\xc3\xf0\x4a\xe6\x83\xcb\xad\xbd\x1b\x06\xa8\xc5\x25\xe8\x01\x45\x31\xca\x9d\xfc\xd7\xf5\xbb\xb7\x27\xdf\x4a\x9b\x40\x69\xdb\xcc\x00\x26\xe7\x10\x0f\xef\xba\xa9\xa4\x4c\x19\xf4\xbc\x06\xe3\x79\x4e\x05\x1f\x31\xa5\x07\xbe\x2e\x8a\xfa\xf0\xf5\xa7\x41\x98\x57\xd0\x73\x85\xf0\xbd\x50\x61\x51\x03\x48\xb9\x59\x4c\x5d\x52\xd4\x37\xb0\x2d\xa4\xeb\x3a\x73\x0b\x93\xd5\xf4\xc6\xd0\x6f\x9c\x6c\x65\x74\x99\x1b\xf6\x82\x1c\xa0\x6a\xe2\x3f\xfd\x4f\x23\x86\xff\xeb\x80\x1c\xdd\x42\xc8\xf3\x81\xf9\xf3\x00\x3f\xe8\x65\xc0\xb0\xf1\x52\xfd\x61\x0c\x94\x2e\xf9\x78\xcc\x4a\xeb\x3b\x02\xb3\x2a\xf4\x97\xe1\xd0\x32\xb6\x7e\x58\xd8\xfe\x7b\x75\x9d\xd1\xf9\x89\x7c\xf8\xfa\xd3\x01\x39\x8a\xd7\x45\xb8\x48\xd9\x67\xf2\xb5\x77\x3f\x14\x32\x3d\xb6\x51\x59\x6a\x26\x34\xfd\x6c\xc6\x4c\x26\x52\x31\x81\x21\xdf\x5a\x62\xcb\x1f\x25\xc1\xb3\x95\x65\x7d\x94\x12\x52\x72\x8b\xa9\xd2\x0e\x94\x98\x7a\x0c\x65\x9a\x62\x09\x19\xdb\x2d\xc3\xd7\xcc\xb6\x8d\xc1\xb4\x62\xa4\x2f\xec\x09\x84\x59\x11\x61\x65\x28\x55\xe1\x26\x19\xd2\x37\xa1\x02\xdc\x2c\xb6\x95\x90\x91\xa7\x06\xab\x7c\x92\x1b\x31\x7e\x9d\x49\x6b\x89\xd8\xda\xa4\x25\xf5\x3d\x09\x85\x8d\x97\xb8\xce\x60\xf6\xa0\x5d\xb7\xf7\x5a\xd1\xda\xe8\xa3\xc5\x65\x61\xc8\xd1\x3d\xac\x0d\x7a\x13\x9f\xec\xbc\x34\x27\x52\x6f\xc3\x09\x0e\xaf\xf1\xc0\x27\xf3\x6f\x9b\xe3\x82\x11\x87\x56\x69\x0d\x28\x5c\x4e\x53\x24\x81\x54\xcc\xee\x1c\x8d\x0d\x00\xc1\x6b\x9b\xcc\xfa\xd6\x2e\xd7\xa7\x22\x35\xff\x57\x5c\x69\x73\x7f\x67\x88\xad\x31\x84\xc6\x50\xfa\xfe\xe2\xfc\x7e\x90\xbb\xe2\x3b\x9e\xd6\x61\x25\xd2\x8c\xbd\x96\xf2\x66\x45\xfa\x73\xb4\xa0\xbf\x85\x4f\x7b\xef\x1c\x6a\x69\x5c\xf4\x7d\x0c\x6d\xa0\xe5\x92\xa2\xca\x90\xbc\x56\xa2\xa0\xc9\x0d\x1d\x33\xfb\x51\x60\x23\xb6\xa8\x01\x6a\xca\xa0\x0a\xb4\x5a\x4b\x6f\xe5\xec\xd1\x1a\x60\xe7\xb9\x62\x9a\x8e\x2f\xda\x52\x0b\xd4\xcd\x7b\xf3\x7c\x5b\xf1\x2b\x47\x12\xee\x15\x1b\xad\x7c\xd0\xb7\x06\x58\x95\x7f\xd2\x87\x36\x70\x2b\x7f\x74\xc5\x9f\x97\x3e\xb0\xd9\x87\x38\x3f\xcf\xa6\xd1\x4d\x73\xaf\xb9\x1d\x71\x04\xc3\x42\x39\x7a\x0c\xee\xd8\x5d\x80\xce\x7d\xb7\x54\x01\x05\xca\xa6\x36\x32\xe7\x5e\xca\x40\x6d\x16\x9b\x97\xac\x77\x07\xe1\x39\x9c\xf8\x46\xbf\xdd\x46\x41\x7a\xc9\x9c\x3a\x71\xba\x13\xa7\x1f\xb9\x38\xbd\xd5\x19\xd8\x1c\x7a\xf0\x34\x04\xec\xad\x16\xbd\x39\xda\xfe\x51\x8a\xdc\x5b\xaf\xb1\x41\xf0\xff\xa3\x15\xc2\xb7\x5a\x6c\x43\x81\x7c\xd9\x92\xbf\x64\xb1\x7c\x2b\x18\x6e\x8c\x87\x79\x84\x82\x7a\xe3\x05\xae\x4f\x0a\x59\xb2\xbe\x20\x1f\x63\xce\x0e\x6c\x26\x8d\xed\xec\xbd\x9d\x36\x14\x93\x37\x89\x53\xad\x54\xbd\x6d\x2d\xfa\xae\x51\xd8\xdc\xca\x52\xcc\x78\x35\x8d\x99\xdb\x26\x5b\x04\xaf\x35\x71\xe6\x75\x5c\xf1\xde\x69\x23\x78\x6d\x91\x59\xd5\x34\x11\xa3\x5e\x76\x93\x44\x92\x2d\x96\x6c\x64\xf8\xa2\x94\xc3\xa6\xb5\x72\xee\x60\x55\x0d\xa3\x0c\xf7\x0c\x67\x87\xec\x7c\xbf\xbf\xad\x2d\x76\x53\x12\xc7\x92\xb9\x63\x1d\xbf\x28\x92\xcc\xef\xc7\xa1\x82\x4d\xbe\x8b\x99\xee\x1c\x7c\x19\x88\xd5\x38\xc9\x9e\xf3\x60\xbe\x2f\x2b\xd6\x23\xaf\x68\xa6\x58\x8f\x7c\x2f\x6e\x84\xbc\x6d\x6f\xbe\xeb\x2b\x32\x2c\x99\xed\x7b\x5b\x7b\xa1\x41\xae\x50\xe3\xa9\xd4\xda\x7d\x43\x62\x7f\xe1\x5f\x70\x16\x1a\xab\xa1\xf7\x2b\xc1\x7f\xae\x62\x45\xc5\x3b\x99\x8e\xe6\x55\x98\xb3\xeb\x1f\x00\x39\x50\xdd\x56\x51\x21\x5f\xf3\xa3\x5a\x1d\x56\xdd\x24\x0f\x6a\xad\xa2\x1a\x27\x86\x1b\x45\x3f\x56\xb5\x32\x5b\x92\x71\xde\x2c\x53\x54\x59\x36\x20\x17\xfa\x50\x99\x39\xf0\x84\x66\xd9\xcc\x68\x2d\x73\x1d\xd2\xf6\xcb\xe0\x6a\xc0\x20\x16\x0e\x1b\x56\x5c\xe1\x53\x16\xbc\xee\x00\x8d\x06\x27\x96\xda\x75\xec\x57\x26\x72\x4d\x2f\xb0\x25\x53\xbb\xb2\x8f\x3b\x44\x09\xf7\xbf\x86\xaa\x1d\x14\x75\x4d\x40\x1a\xc1\xc8\x48\x56\x22\x25\x54\xc3\xf6\xec\x38\xe7\xd8\x87\x7b\x7f\x0e\xff\xf5\xf2\x53\x3b\xc6\xc6\xc0\x03\x5f\xe7\xf1\xad\x11\xbe\x6a\x22\xc7\x3e\xb3\xa4\x0a\x62\xbc\xc2\x18\x8e\xdd\x6c\x8d\xed\xe6\xbe\x3e\x48\x62\xea\xfd\xe6\x94\xb6\x9d\x3a\xe9\x31\xa0\x79\x54\x77\x33\x51\xa1\x85\xd8\xf3\x26\x85\x9d\x9a\x57\x26\x5a\x86\xf6\xc0\x15\x6d\x2f\x70\xa6\x82\x15\x2e\xe0\xb7\xa1\x27\x14\x2a\xb0\x18\x26\x63\x3b\x41\x40\x9d\xaa\x89\xdc\x99\x32\x36\xcd\x4f\x7c\xe3\xe4\x37\xf3\x41\x90\xed\xfa\x0b\xb2\x9d\xe5\x7f\xb5\x6c\x07\x0d\x8b\xea\x50\x1a\x60\x92\x39\x9d\x41\x68\x5a\x5e\xc8\x52\x53\x74\x70\x54\x22\x65\xa5\xd2\x14\x6b\x94\xb8\xbc\xbc\xc2\xac\x79\x42\x15\xe1\x5a\x91\xc4\x26\x19\xe2\x86\xdd\x51\x26\x63\x00\xec\x4b\xf3\x82\x17\x11\xa2\x8f\x23\x5f\x8d\x36\x66\xed\x2e\xac\x9f\x58\x46\xd7\x04\x56\xed\x4b\x67\xaf\x35\x2b\xe6\xe9\x6a\xb0\x08\x01\xe2\xf8\x94\xa7\x18\x8c\xc4\x0a\xc2\x45\x3b\x44\x75\xb3\x03\x07\x1d\x13\xab\x8f\x55\xdf\x5b\x69\x56\x3e\xb0\x46\xa3\xdd\x4c\xd4\x65\x81\x91\xf2\x9b\xce\xfe\xaa\xd8\x3c\xbc\xfc\x2a\xf6\x24\x97\xab\x23\xe5\xf0\x5a\xd8\x55\x97\x7d\xb1\x66\x77\x83\x58\x5d\x88\x06\xd5\xa5\x95\xa4\x66\x8d\xf6\x98\xdc\x77\x95\x9b\x0d\xa9\x7f\x1b\x0b\xb1\xf4\x83\xc0\xc1\x86\x8f\x81\x61\x72\xed\xb3\x9b\xf2\x08\xef\xbb\xae\xce\x9e\x15\x53\xea\xcb\xb9\x90\x5a\x19\x6c\xb3\x95\xbd\xe1\x40\xf5\xd6\xb4\x3c\x5c\x03\xfb\x78\xc3\x31\x1b\x25\x00\xb6\x9f\xf6\xc6\x8a\x38\xed\x77\x19\x4f\x2a\x68\xa9\x79\x52\x65\xb4\xac\xcf\x3e\x10\xf9\x85\xbc\xa5\xad\xe7\xac\x34\x2d\x75\xa3\x22\x0b\xd7\xee\x49\x5f\x73\x11\x0a\x2e\x4c\x98\xf0\xce\x3f\x4c\x03\x23\x43\x36\x36\xcc\xb3\x28\xb2\x99\xcb\x31\xa8\x23\xd8\x33\xae\x74\xdd\xf0\x10\x64\x81\xa6\xa1\x10\x5b\x97\x6b\xf8\x55\xe7\xd1\xc9\x2c\x4f\xa4\x18\xf1\xf1\xfd\x65\xd1\xbd\x7b\xfd\xe6\x0c\x3e\x09\xf7\xea\x1c\x3a\x7f\x7f\x21\x83\xae\x9e\x24\xdc\xae\x93\xe4\xfc\x0f\x75\x8a\x9c\xad\xe7\xb0\x24\x3f\xce\x65\x5f\xb9\xfd\xdc\x31\xef\xca\x4f\xd3\x45\x65\x78\x56\xac\x0a\x29\x14\x37\x32\x31\xd4\xcf\x82\x87\xb0\xe3\xcb\xbb\xd7\x6f\xda\x4d\xba\xea\x32\xac\xba\x0c\xab\x2e\xc3\x6a\xd3\x81\x6a\x90\x61\xe5\x4f\x33\xe4\x57\xb9\xb0\x3d\xf3\x7f\x9b\x26\x54\x1f\x77\x5f\xd3\xba\xe9\xc7\xd7\xcb\x87\x23\x46\x0d\x68\x36\x47\x16\xbe\xb2\x0f\xd6\x9d\x87\xa2\x3c\x5d\x4b\x66\x40\x17\x7f\xf7\xfa\x8d\x1f\xf7\x0e\x72\x22\x52\xae\xcc\x67\xce\x64\xc1\x59\x7a\x76\xfd\x43\xb3\xc6\xd4\xe7\xf3\x6f\x45\x39\x1d\xf8\xa3\x99\xf9\xa1\x22\x07\xf8\x10\x39\xbb\xfe\xe1\xc0\x2d\x04\x36\xa2\x6e\x5e\xe6\xb3\xda\x08\xd5\xa1\x40\x80\xf4\xbf\x47\x30\x0a\x89\xc6\xb7\xd3\xa8\xb9\x93\x14\xb6\xd3\xce\x84\x2a\x32\x64\x4c\x04\x83\xa2\x0a\xfc\xce\x3e\x0d\xa5\x40\x6d\x9c\x12\x54\xf0\xc6\x8e\x01\x75\x54\xc3\x80\xfc\x68\x44\x9b\x92\x31\x61\x96\x91\xf6\x60\x0b\xb0\x42\x2e\x03\xde\x8b\x2e\xbd\x60\x61\xea\x00\x56\x04\x65\x7c\x56\x4c\x72\x7d\xc6\xc8\x3a\x9d\xd4\xc6\x67\x22\x91\xb8\x9e\x89\xe4\xc2\xd0\xd8\x15\xa9\x73\x0b\x3b\x75\xb9\xea\xed\x68\xc7\x80\x5f\xe0\x39\x99\x89\x04\xa9\xb8\x79\xc6\xac\xca\x7e\xbf\x04\x99\xaa\xb4\x8d\x19\xec\xb0\xc1\x3d\x52\xb0\x92\xcb\xd4\x7a\x21\x92\x09\x4b\x6e\xe6\xf4\xd7\x28\xb6\x51\xfd\x1f\x1b\x4b\x17\x15\x6e\xc7\x31\x48\x05\xfd\x11\xd2\xaa\xee\xd8\x91\x53\x4d\x8e\xa0\x5e\xd3\xc1\x1f\x9f\xe5\x07\xc7\x18\x19\x87\xe1\x5f\xb4\xa4\x39\xd3\xac\xec\x61\xb4\xd7\x44\x56\xa5\x22\x47\x07\x93\x83\xe3\x1e\xc9\xb9\xa8\x34\x33\x7f\xe6\xe6\x4f\xc3\x8e\x14\xd6\x38\x27\x47\x07\xea\xe0\xd8\x59\xaf\x7c\x08\x9a\xdd\x7d\xe8\x59\xe1\xee\xf5\xc2\xb9\xd9\xa6\xbc\x9e\xf1\x21\xe5\xaf\x43\xd8\x6c\xe8\x1d\xbc\x11\x02\x69\xe7\x94\x21\xf0\x1e\x19\xae\xfa\x82\xfc\xcf\xd1\x87\x67\xfd\x3f\x7f\xfa\xdd\xd1\xc7\x01\xfe\xe7\xf8\x9b\x23\xf5\x4b\xfe\xcb\xe4\xf8\xf8\x77\xbf\x8d\x89\xe4\xe6\xac\xb9\x9a\x4c\xae\xac\x3e\x74\x87\xa4\xf2\x3e\x9c\x12\x07\xb5\x2b\xc2\xd3\x59\xe7\xa3\x06\x0a\x24\x18\xa1\x66\xe7\xb4\xf7\xb8\x06\x3a\x58\xdd\x49\xe2\xf4\xf2\xc2\xd7\x20\x1e\x90\x7e\xbf\x6f\x83\x0d\x75\x59\x25\x1a\xeb\x8a\x69\xec\xfc\x65\x46\x4d\x79\x09\xa2\x8e\x62\x60\x46\x74\x0d\x0e\x2d\x69\xc3\x08\x41\x88\xe6\x1d\x58\xd3\x67\x0d\x8a\x01\x89\x03\x3e\x3f\x0a\x80\x04\x79\x25\xa5\xdd\x24\xfc\xe6\x3f\xc9\xc9\x09\xb9\x9a\xf3\xae\x0c\x0d\x9e\xd9\xb6\x3e\xa0\x3c\x8e\xa4\x3c\x8c\xed\xac\x6c\x60\x5e\xfc\x4e\xc8\x5b\xb1\xec\xeb\xf0\x2d\x5a\xb2\x17\xe4\xe3\xc1\xe9\x94\xf2\xcc\xd0\xbf\x8f\x07\x3d\xf2\xf1\xe0\xd2\xc6\xba\x73\x31\xfe\x68\x7b\x65\x7c\x3c\x38\x67\xd0\xb4\x3e\xfd\x78\x60\x86\xfd\x1d\x74\x3c\x7c\xc3\xca\x31\xfb\x8e\xcd\xfe\x13\x06\xf3\xb7\xaf\xb1\x3b\xe2\xec\x3f\xb1\x39\xa2\xb9\x6f\xb8\xdd\xfb\x59\xc1\xfe\x33\xa7\x85\xbf\xf1\x86\x16\xfe\xe5\x20\x8c\xe7\xc3\x27\x23\x26\x4c\x9f\x0f\xea\x1d\xfd\xe9\xef\x4a\x8a\x17\x1f\x0f\x82\xfa\xaf\x32\x37\x98\x51\xe8\xd9\xc7\x03\x12\x7d\xf5\xc5\xc7\x03\xf8\xae\xbb\xef\x26\xf9\xe2\xe3\x81\xf9\x92\xb9\x5d\x4a\x2d\x87\xd5\xe8\xc5\xc7\x83\xe1\x4c\x33\xd5\x7b\xde\x2b\x59\xd1\x33\x5c\xe1\x3f\xeb\x2f\x7c\x3c\xf8\xc9\xec\xc9\xc9\x09\x36\x78\xc1\xcd\x54\xe4\x5f\xcb\xbb\xb2\xb4\x60\x53\x5d\x74\x54\xad\x7c\x74\x53\x71\x35\x74\xba\xec\x62\x7a\xdd\xb3\xa3\xfb\xce\x85\x66\x17\x5f\xac\x5b\xbd\xee\x17\x4e\x64\xcf\x2f\xea\x36\xc3\xc0\x96\x01\x7e\x0b\x34\x5e\xd4\xa3\x62\x00\x6f\x3a\x20\xd8\x4e\x14\x13\x58\x0d\x83\x80\xf0\x0b\x60\x0e\xc2\xb2\xac\x45\xeb\x88\xa1\x1d\x78\xe6\xed\x30\xa0\x36\x24\x09\x2b\xb4\x39\x5d\xf7\x54\x10\x77\xbb\xb2\xb2\xf9\x82\x6b\x68\xf7\xb0\x1f\x04\xb5\xe5\xb2\xd4\xb5\xc2\xc6\x65\xed\xb9\xf8\x9c\x7e\x7e\x0d\x7d\xc9\x5e\x90\xdf\x7f\xfd\xa7\x3f\xfe\xc7\x2a\xbf\xc0\x10\xad\x41\xdf\xae\xcd\x7b\x5f\x02\x86\xc5\x17\xe7\x6d\xf3\x03\xa7\xbc\x0c\xea\xa4\xfa\xba\xfb\x70\x1c\xf3\xa5\x98\x26\x43\x70\x7f\x56\x85\x81\xcb\x2b\x97\xea\x2c\x12\x8c\x47\x5d\x3a\x18\xf7\x04\x3c\x9b\x91\xe7\x5f\x63\x43\x2d\xf8\xf4\x02\xf9\xfe\xf0\xf9\xd3\x60\xc9\x94\xb9\x22\x7f\xee\xcd\xcd\xc7\x08\xcc\x15\x30\x3d\x83\x38\x18\xe9\x50\x32\xe4\x84\xce\x26\xb7\xc8\x09\x99\x9f\xef\xa6\x8d\xdb\xa2\x3f\xcc\x1f\xff\xb0\x7a\x7f\xb9\xe0\x79\x95\xbf\x20\xcf\x56\x7a\x59\xb6\x70\x4a\x5b\xa7\xb3\x17\x04\x28\xf6\x40\xa0\x39\x14\x84\x08\xe2\x8e\x42\xd4\xd6\xdb\x45\x8e\x91\xcb\x52\xa6\x55\x62\x74\x79\x39\x72\x32\x61\x12\x12\x28\x68\x4c\x64\x4e\x83\x15\xb9\xd9\x67\x03\x74\x56\x77\xa8\x12\x29\x74\x70\xe2\x62\xac\xea\x2a\xa0\x40\x40\x90\xeb\xde\x4e\x18\xb0\x1e\x1d\xf6\xb0\x85\x59\x29\x9e\x42\xce\x05\x25\xe3\x8a\x96\x54\x68\x86\x9d\x3e\xb0\x8f\xad\x15\x53\x3d\xc9\xa3\x41\x61\x55\x7b\x1a\xf1\xa8\x22\xb1\x32\x53\xb4\xa6\x04\xec\x7f\xdc\xda\x51\x7d\xfe\xec\xeb\xb5\x5b\xee\x9f\x5b\xed\xa1\xf1\xe2\xf0\x87\xd3\xfe\xff\x47\xfb\xff\xf8\x74\x64\xff\xf3\xac\xff\xe7\xff\xed\xbd\xf8\xf4\x55\xf0\xe7\xa7\xe3\x6f\x7e\xdb\x86\xbd\x5e\xb5\x1a\x99\xd7\x08\x68\x9b\x3b\x0e\x1d\x98\xaf\xae\x6b\x09\xd7\x27\x07\x30\xa5\xf5\xcf\xd8\xe9\xae\x53\x50\x9a\x01\x49\xcf\x07\x04\x1a\xdd\xbb\xc6\x33\xa0\x78\x46\x2c\x1d\x58\x09\x77\x90\xc8\xfc\x24\x30\x4f\x19\xd1\xfa\x0d\x15\x33\x52\x93\x35\x14\x4a\xe7\x31\x5d\x41\x96\x22\x4d\x4a\xa9\x54\xe4\x62\xb8\x61\xc4\x4b\xae\x48\x2c\x87\x2c\xa1\x20\x8b\x97\x43\xae\x4b\x5a\xce\x02\xd5\xc3\x75\x48\xa8\x14\x1b\x55\x19\x39\x52\x8c\x91\x81\x90\x29\x5b\xa4\xae\xc7\x48\x43\xe9\x90\x67\x5c\xcf\x50\x69\x4e\xa4\x18\x65\xdc\xaa\x00\x2e\xfc\xc1\xb5\x8d\x1e\xb3\xcf\x84\x6b\xec\xaa\x86\x21\x67\x47\xa9\x50\xcf\x9f\x7f\xfd\xfb\xeb\x6a\x98\xca\x9c\x72\xf1\x2a\xd7\x27\xc7\xdf\x1c\xfd\x5c\xd1\x0c\x74\xc7\xb7\x34\x67\xaf\x72\xbd\x57\xa4\x61\xcc\x16\x9f\xff\xb1\xc1\x29\x3a\xfa\x80\x67\xe5\xd3\xd1\x87\xbe\xfd\xdf\x57\xee\xd6\xf1\x37\x46\xd7\x5c\xf7\xfb\xf1\x57\x66\x0d\xc1\x09\xfc\xf4\xa1\x5f\x1f\xbf\xc1\xa7\xaf\x8e\xbf\x09\x7e\x3b\xfe\x6d\xe7\xa1\xa9\x5d\x2e\x81\xee\x75\x6f\x9e\x1a\x3b\x86\x57\xa4\xe6\x3d\x36\xf3\xbf\x2f\x7a\x6e\x16\x26\x8f\x1e\x9c\x25\x15\x10\x93\xe8\x23\x81\x8f\x67\x7e\x88\x86\xe5\x10\xdb\x72\xf7\xcc\xaf\x11\x25\x5d\xc4\x0d\xaf\xe9\x03\xad\x37\xc4\xe7\xa7\x85\xe7\x7f\xb2\xd9\x45\x81\x09\x0d\x2c\xe1\xb3\x38\x3a\x4a\x82\xe5\x30\xae\x37\xe4\x93\x4d\x97\xd8\x05\x3b\x1f\x52\xe7\x43\xea\x7c\x48\x8f\xc3\x87\x34\x7f\xe4\xc1\x97\x04\xfd\x78\x55\xe0\x89\xa0\x69\xce\xc5\x8a\xe3\xbf\xfe\xdc\x5b\xea\xd0\x23\x85\x34\xb2\x0c\x07\xab\xb9\x9c\xb2\xb2\xe4\x10\x33\x89\xef\x94\xac\xee\x60\x19\xe6\x2f\xb4\x64\x84\x4d\x59\x91\xc9\x59\xbe\xaa\xee\xfd\xdd\x84\xa3\xdb\x45\xb6\x1c\x01\xdf\x19\x7e\x3b\xc3\xef\x17\x64\xf8\xed\xac\xb9\x9d\x35\xb7\xb3\xe6\x2e\xb9\x3a\x6b\x6e\x67\xcd\xed\xac\xb9\x9d\x35\x77\xe1\xea\xac\xb9\xf6\x99\xce\x9a\xdb\x59\x73\xef\xdb\x9a\x5b\x5f\x2a\xaa\x08\x7d\x4f\x6a\x65\x93\x68\xa7\x05\x85\xde\xf6\xe6\xb5\x2a\x7d\xac\x99\x2f\x51\xe7\xb9\x56\x2e\x53\x15\x34\xf7\x41\xd8\xc3\xaf\x61\x31\xf0\x76\xb4\xf6\x2e\x74\xaa\xd3\xa0\x3b\x0d\xba\x0b\x9d\x8a\xaf\x4e\xd9\xf6\x57\xa7\x6c\x77\xca\x76\xa7\x6c\x77\xca\x76\xa7\x6c\xcf\x5f\x9d\xb2\x8d\x57\xa7\x6c\x77\xca\xf6\x92\xeb\x69\x28\xdb\xeb\x42\xa7\x46\x06\x65\xdd\xcd\x4d\xb1\x53\x24\x0c\xaa\xf9\xba\x0b\xaa\xe9\x82\x6a\xba\xa0\x9a\x2e\xa8\xc6\x5d\xf7\x1d\x54\x13\x5b\xe0\x30\xf2\x25\xb2\xb8\x01\xce\x16\xa5\x9c\xf2\x94\xa9\xb9\x10\x1c\x5f\xac\x31\xe0\x32\x39\xb4\x77\xac\xc3\x6a\xd8\xfd\x04\xd5\x74\xe6\xb9\xce\x3c\xd7\x99\xe7\x3a\xf3\x5c\x7c\x75\xe6\x39\x7f\x75\xe6\xb9\xce\x3c\xd7\x99\xe7\x3a\xf3\x5c\x67\x9e\x9b\xbf\x3a\xf3\x1c\x5e\x9d\x79\xae\x33\xcf\x2d\xb9\x9e\x86\x79\x2e\xc4\xa0\x2e\xbd\xa2\xd3\x3e\x3b\xed\xf3\xf1\x69\x9f\x9d\x4a\xd9\xa9\x94\x9d\x4a\xb9\xe4\xea\x54\xca\x4e\xa5\xec\x54\xca\x4e\xa5\x5c\xb8\x3a\x95\xd2\x3e\xd3\xa9\x94\x9d\x4a\xd9\xa5\x57\x6c\x99\x5e\xf1\xee\xf5\x9b\x20\x9e\x03\xe3\x3c\x02\xcc\x82\xee\xec\x50\xb5\xd9\xf1\xe4\xce\x17\xdb\x69\xc3\x9d\x36\xdc\xf9\x62\xed\xd5\x29\xce\x9d\xe2\xdc\x29\xce\x9d\xe2\x1c\x6d\x5c\xa7\x38\x77\x8a\x73\xbc\x95\x9d\xe2\xbc\x3d\xd0\x3a\xc5\xb9\x53\x9c\x97\x6c\xc5\x97\xa1\x38\x77\x55\x66\xb5\x2c\xa1\x7a\xec\xfd\x57\x98\xfd\xd6\xf7\x87\x5d\xac\x2e\x0b\xbf\xad\xac\x2c\x8b\x13\x86\x9f\x96\x55\x95\x95\x88\x95\x8b\xe5\x64\x5d\x47\xda\x07\x28\x25\x8b\x5d\xa5\xac\xe2\x50\x09\x0e\x62\x4f\x5e\x65\x9a\x6b\x26\xa8\x48\x66\xc0\x66\xdf\xbd\x7e\x43\x72\x2a\xe8\x38\x68\x0c\xa5\x06\xe4\x42\x03\xbd\xd1\xa5\xef\x04\x66\x9b\x57\xf9\x04\x90\xb0\x57\x16\x54\xa2\xf0\xed\xaa\x40\xe1\x08\xda\x0f\x19\x01\xd0\xb0\x0f\x68\x6d\x15\x76\xb5\xfa\xcd\xfc\x01\xef\x52\x62\xba\x94\x98\x2e\x25\xe6\x91\xa4\xc4\x00\xfd\x58\xd9\xaf\x30\x22\x32\x3b\x34\xe2\xb2\x3d\xcb\x16\xe5\xab\xaa\x00\xdb\x9a\xb7\x60\x91\x73\x7c\x72\x0b\x13\xab\x62\x19\x4b\xb4\x2c\x97\x09\x6f\x71\x1b\x61\xfb\xa0\x7d\x03\x97\x19\x2d\xed\x50\xad\xa7\x5b\x0d\x56\xba\x69\xb6\x04\x44\x17\x9d\x4c\x5e\x7e\x2e\xc0\xd2\xb8\xc2\x34\xbc\x30\xfb\xf9\x97\xf0\x44\xb9\x8e\x8d\x19\x1d\xb2\xcc\x83\xc2\x51\xd2\x1c\x8f\x0c\x4a\x6a\xf5\x1d\x10\x30\x4f\xdf\x9e\x2f\x5a\xb9\xe3\x05\xae\x32\x4c\x93\xf5\xc6\xe9\x85\xa9\x9f\xae\x99\x9e\x25\x0c\xee\x17\xb0\x2a\x78\xe5\x15\x89\x5e\x8f\x50\x72\xc3\x66\x48\x1f\xa3\x2c\x2d\xf3\x70\xc9\x80\x9a\xc2\x66\xde\xb0\x19\x3c\x64\x89\xe5\x06\x01\xb3\x95\x26\xf4\x37\x6c\x15\x84\xf0\x77\x37\xd9\xd5\x02\x6a\xa3\x76\xef\x37\x6c\xb6\xee\xe7\x39\x80\x1b\x38\x78\x1b\xa2\x81\xbc\xb9\xe1\x0d\x36\x1e\xd8\xb4\x28\x32\x68\x7c\x28\x57\x83\x8a\x34\x6f\x63\xee\x96\xba\xc5\x44\xfd\x56\x06\x16\x27\xd8\xec\x43\x85\x1b\x6b\x30\x7d\xc2\x0b\x2b\x64\xa0\x68\xe1\x58\xe1\x0f\x34\xe3\x81\x18\x03\x58\x7d\x21\x7a\xe4\xad\xd4\xe6\x9f\x97\x9f\xb9\x21\xf5\x06\x1f\xce\x25\x53\x6f\xa5\x86\x3b\xad\x2c\x15\xa7\xb0\xc5\x42\xad\x66\xc7\x03\x4f\x89\x1c\x45\xfc\xd0\x88\x61\xa3\x28\x1d\xd0\x3c\x7d\x21\x8c\x3a\x69\x57\x14\x19\x43\xcc\x10\x79\xa5\x80\x81\x09\x29\xfa\x68\xbf\x58\x36\x86\x05\x84\x2c\x23\x38\xac\x19\xce\x0e\x05\x76\x12\xfc\x05\x25\xa0\xcc\x88\xb2\x24\xc5\xf6\xd3\xc0\xcd\x0d\xd1\xe6\x09\x41\x6f\x07\xf8\x1c\x9a\x80\x77\x1d\x5d\xc1\x6b\x03\x75\x69\xb8\x57\x40\x32\x5f\x9b\x03\xb0\x05\x89\xc5\xe7\x91\x2c\xe5\xb4\x30\xdb\xf4\x4f\x43\x7d\x00\x52\xff\x22\x05\xe5\x46\x62\x3e\x05\xe9\x3f\x63\xd1\x6f\xb6\xeb\x66\x38\x8c\x19\x81\x2b\x62\x48\xc9\x94\x66\x86\xde\x81\x7d\x9e\xb0\x0c\xa9\x9f\x11\xd2\xe7\x08\x7b\x8f\xdc\x4e\xa4\x42\x62\x86\x56\x2a\xae\xc8\xc1\x0d\x9b\x1d\xf4\x16\xb6\xf6\xe0\x42\x58\x37\xd5\xc2\x66\x7a\x22\x0a\x3d\x49\x0f\xe0\xb7\x83\xdd\x79\xc1\x5a\x62\x49\x53\x34\x1f\xd0\xec\xb2\x01\x35\x5b\xbb\x6f\xb1\x7f\xd9\x68\x50\x0d\xf8\xfa\xfc\x2b\x8e\xf8\x61\x6a\x6e\xa8\x9b\xc0\x93\x84\xe2\xa3\xd6\x0f\x0c\x9d\x75\xd1\x3c\x62\x9b\xd1\x16\x99\x9c\x79\x38\x1f\xa9\x63\xdc\x59\x23\x8f\x3a\xd8\x83\xa6\xb7\x5a\x34\x58\xb5\x38\xa3\x3e\x24\x97\x98\x41\x9c\x9e\x5e\x5e\x6c\x6e\xd4\x7c\x0d\xaf\x10\xcd\xb2\x0c\xbd\xd8\x46\x66\xd5\xd2\xca\xac\x4b\x45\x98\x22\x18\x3f\x50\xf2\x57\x4e\x76\x55\xef\x5f\x14\x85\xbc\x12\xbb\x79\xae\xef\xe7\x5e\xb0\xe4\x8e\x7d\x2e\x32\x9e\x70\xed\xe8\x77\x2d\x5b\x81\x3e\x04\x2f\x01\xe1\xe2\x20\x0d\x28\xa6\x7b\xb5\xac\xc6\x15\xe1\x63\x21\xcb\xe5\xf8\x79\x37\x11\xec\x84\x7c\xee\xdf\x54\x43\x56\x0a\xa6\x99\xea\x1b\x19\xab\x6f\x5f\x60\x8b\x47\x60\x5e\x84\xdd\x04\xa5\x83\xef\xe3\x17\x22\x05\xd4\x0e\xe6\x68\xeb\x6c\xa1\x51\x35\x3c\xe5\x21\x08\xe7\xb9\x64\x68\x31\xf4\x0e\x14\x7d\x2b\x89\xaa\x0a\x9b\x64\x3e\x37\xa4\x39\x9a\xe4\xa3\x70\x82\xf6\x8b\xba\xb9\x34\x10\x0a\x88\x97\x70\xb9\xed\xf6\x64\x59\x4d\x19\xb6\x2b\x97\x53\xe6\xd4\x58\x64\x09\x86\x19\x14\x13\xaa\x58\xad\x83\xa9\x2a\x49\x18\x4b\x59\x8a\x3f\x58\x56\xc2\x46\x23\x96\x68\x3e\x65\xd9\x0c\x8c\xff\x0a\x45\x12\xff\x7d\x83\xd9\xf8\xf9\x7a\xc1\x73\x5f\x14\xec\xb3\x76\x4a\x3a\xe1\xa0\x84\xc7\x96\x8a\xd2\x2f\x77\x42\x15\x19\x51\x9e\x19\xbd\xee\xa3\x20\xef\x59\x32\xb9\x2c\xd9\x94\xb3\xdb\xef\x85\xa2\x23\xf6\x8a\xf2\xec\x95\x2c\x6f\x69\x99\x06\x30\xb8\x8b\xe5\x9b\x59\xf9\xdf\x70\x4a\x0e\x2e\xa7\x9e\x70\x66\xb3\xa0\xcd\xb7\xf5\x8c\x99\xf5\xde\xba\x05\x5e\x66\x06\x62\xe0\x70\xa5\x46\xa1\xf5\x18\x45\x4a\x36\x62\x25\x13\xe6\x3c\x51\x37\x7e\xf0\x92\x67\x0f\x09\xb6\xbf\xae\x3b\x94\x5b\xbd\x17\x1d\x63\x14\x3e\xe6\xa0\xe7\xdc\x40\xcc\x88\x0a\xd0\x0e\x04\xcf\x6e\x60\x34\xfa\x28\xc8\x8f\xa7\x57\x6f\x2f\xde\x7e\xfb\x02\xb8\xca\x3a\x08\x2f\xe2\x35\x57\xa4\x82\xa7\x02\xab\x87\xaa\x32\x6d\x50\xbc\x12\xde\x5f\x34\x64\x13\x3a\xe5\xe6\x0c\x94\xd6\x1e\x32\x65\xd8\x96\xde\xa8\xc1\x24\x93\xca\x8c\x93\x31\xa5\xc8\x4c\x56\x18\xc7\x93\x32\x56\xa0\x8b\x5b\x69\x2a\xa0\x99\x89\xf5\x67\xcc\x2f\x82\x0c\x99\xf9\xd5\x59\xc4\x16\x4e\xd7\x32\x7f\xc2\x06\xca\xe1\x34\xdd\x15\x8a\x2c\x59\xeb\xf0\xe8\xaf\x79\xcb\xfc\xba\x0e\xc4\xb1\xda\xdf\x3c\x60\x0a\x15\xff\x75\x1d\xb8\xc3\x07\xaf\xb6\xd7\xfd\x57\xeb\x51\x18\xf8\xf1\x3d\x62\xe1\x16\x1a\xff\xfa\xa0\xaa\x68\x95\x41\x70\xcd\x9c\xec\xbd\x8c\x73\x06\x41\x42\x6d\x32\x9b\x2e\x5a\xab\x8b\xd6\xea\xa2\xb5\x96\xfd\xde\x45\x6b\x75\xd1\x5a\x5d\xb4\x56\x17\xad\xd5\x45\x6b\x75\xd1\x5a\x5d\xb4\x16\xe9\xa2\xb5\xea\x67\xba\x68\xad\x2e\x5a\xeb\xe1\xd2\x9c\x02\xc5\x74\xa3\x8e\xf9\xba\x7e\x16\xa5\x13\xed\xe2\xa1\xdc\xc9\x8c\x45\xc3\x79\xad\xd3\x9e\x62\xc3\x8f\xed\x30\x5b\x1b\x96\x9b\x08\x5d\xa2\xb9\x21\x37\x36\xe1\x06\x96\x93\x05\xef\xb8\xe7\x40\xd1\xa2\x1e\xab\xa9\x36\x76\x2e\x5c\xb1\xd1\x96\xbe\x85\x2b\x36\x0a\xad\x6d\x08\x98\xd8\xa5\x60\x23\x56\xbc\xcf\xe1\x0e\xc2\x07\x56\xc7\x38\x2d\x5d\x82\x11\xf6\x9d\xc9\xd4\xe2\xa3\x5d\xc3\x4a\x5f\xe8\xc6\x23\x0d\xfc\xf8\x92\xea\x49\xa3\x19\x1c\x5e\x58\xb0\x81\xe3\x10\x5c\xb9\x05\x67\x09\x8b\xc2\xa8\x40\x8e\x63\x34\xb5\x37\x8d\xe0\x53\x32\xfb\x5b\x0f\x25\x0e\xeb\x2e\xad\xc3\xac\x8c\xd0\x44\xa8\x21\xc4\x3c\x25\xff\x75\xfd\xee\xed\xc9\xb7\xd2\xca\x0a\x46\x9b\x51\xb6\x61\x52\xce\x84\xee\x11\x55\x25\x13\x42\x95\x99\x9a\xd1\x6f\xaf\xc1\xf4\x90\x53\xc1\x47\x4c\xe9\x81\x1d\x8d\x95\xea\xc3\xd7\x9f\x06\xb1\xc5\x83\x5b\x9f\xaa\x0b\x46\xb2\x08\x00\x67\xc3\x2c\xc6\xbf\x0b\x42\x2b\x4c\xa9\x90\xa9\x9d\xf4\x2d\x4c\x56\xd3\x1b\x46\xa4\x9d\x6c\xc5\x80\x29\xbc\x20\x07\x06\x4d\x82\x4f\xff\xd3\x1c\xac\x7f\x1d\x90\xa3\x5b\xb0\xea\x1f\x98\x3f\x0f\xf0\x83\x3e\x76\xcc\xdc\x0b\x38\xbe\xfd\x30\xca\xf7\x25\x1f\x8f\x41\xdc\x02\xd3\xed\x94\x09\x7d\x0c\xfc\x6d\x44\x84\x0c\x1e\x16\xd6\x45\x56\x3b\xc6\xe6\x27\xf2\xe1\xeb\x4f\x07\xe4\x28\x5e\x97\x11\x41\xd9\x67\xf2\xb5\x77\x86\x15\x32\x3d\x76\x5a\xeb\x4c\x68\xfa\x19\x14\x83\x89\x54\x4c\xa0\x2f\x41\x4b\x34\xc8\x2a\x69\x94\x4f\x96\x65\x7d\x14\x30\x53\x72\x8b\x36\x38\x07\x4a\xf4\x27\x17\xb4\xd4\x73\x91\x75\xef\xdf\x9d\xbf\x7b\x81\x5f\x33\xdb\x36\x16\x4e\xcb\x1d\x71\x41\x33\x6b\xd9\xf6\xf2\xa1\x99\x48\x85\x9b\xa4\xa5\x55\x6d\x9d\x51\x77\x54\xe9\xaa\x64\x83\xf9\x48\xab\xc6\x18\xbf\x2c\xcc\x6d\x39\xb2\x43\xb8\xdb\xfc\x41\x7b\xc0\x60\xb2\xc6\x4b\x14\x2b\x9c\xad\x8b\x4b\x7c\x1b\xe0\xe0\xda\x25\xd6\xa4\xd9\xac\x32\x95\x89\x32\x0b\x4c\x58\xa1\xd5\x89\x9c\x1a\xd2\xc9\x6e\x4f\x6e\x65\x79\xc3\xc5\xb8\x6f\x90\xac\x8f\x3b\xaf\x4e\x80\xc5\x9c\xfc\x1b\xfc\xb3\xd7\x8a\x80\x4f\x35\x5f\x16\xc6\xb4\xde\xc3\xda\x80\x7d\x9e\xec\xbc\x34\x27\x5f\x6e\xc3\x09\x0e\xaf\x9d\xf2\x37\xf7\xb6\x39\x2e\xe8\x0b\xb7\xc1\xae\x01\x85\xcb\x69\x8a\x24\x90\x8a\xd9\x9d\xa3\xb1\x01\x20\xe8\xf8\xc9\xac\x6f\xa3\xd1\xfb\x54\xa4\x7d\x2f\x5f\x27\xb3\x9d\x21\x56\xf1\x86\x07\xf8\xfb\x8b\xf3\xfb\x41\xee\x8a\x6f\x75\x5a\xdb\xca\x25\x20\x51\xfc\x39\xcd\x8a\x09\x6d\xab\xf7\x42\x17\x85\x0e\x57\x17\x85\xde\x45\xa1\x77\x51\xe8\xf5\xf5\x48\xa2\xd0\xbb\x28\xf2\x2e\x8a\xbc\x8b\x22\x5f\xfd\x73\x17\x45\xde\x45\x91\x77\x51\xe4\xf3\x57\x17\x45\xde\x45\x91\x77\x51\xe4\x5d\x14\xf9\x92\xab\x8d\x82\x75\x4f\x30\xfe\xb2\x73\x8e\x3d\x0d\xe7\x58\xe7\xee\xea\xdc\x5d\x9d\xbb\xab\x73\x77\xed\x80\xf1\x9d\xbb\xab\x73\x77\x75\xee\xae\xce\xdd\xf5\x48\xdd\x5d\x5b\x75\x19\x7f\xd2\xb5\xb3\xee\xbf\x6c\x16\xdc\x5a\xac\x98\xb5\xb2\x58\x96\xad\x93\xb5\x50\x0c\xab\xae\x83\x75\x86\xe9\x94\x77\x5f\x04\x2b\x36\x00\xba\x06\xcd\x5b\x34\x65\xef\x1c\x7a\x9d\x43\xaf\x73\xe8\x6d\x3a\x25\x5b\x38\xf4\xc0\x97\x17\x1e\x05\xab\x8e\xd4\x29\x1c\xef\x96\xbb\x36\x56\x7f\xba\xb9\x69\xc5\x5a\x55\xc2\xcf\xbb\x5c\x94\xfa\xfb\x81\x85\x05\x4e\x8a\xd9\xd0\x44\xe6\x85\x14\x06\x31\xda\x71\x2e\xd6\xe3\x35\x48\x58\x75\x8f\xda\xfb\x43\x16\x06\x93\x5b\xcf\x56\x5e\x48\xc5\x22\x3b\xee\x0e\x8a\xf7\x7a\xd7\x54\x1f\x9d\x3e\xce\x84\xb6\x83\xe2\x1e\xbd\xdf\x48\x16\x79\x1d\xbe\x61\x5d\x93\xe0\x79\xfa\xb9\x62\x25\xb6\xd1\xaf\x1d\x38\x35\x50\x9c\xc9\x15\x5d\x52\x11\x58\x0e\xd7\x6c\x66\x43\x30\x35\x59\x2a\xd9\xc2\x1f\xbb\xb0\xea\x7b\xf5\xc9\x92\xc6\xfe\x93\x06\xde\x93\xc7\xed\x9f\x25\x4d\x7d\xb4\xa4\xa1\x9f\x96\x34\xf0\xd5\x92\x66\xfe\x5a\xd2\xd8\x67\x4b\x9a\xf8\x6d\xc9\x1d\xfb\x6e\x49\x73\xa7\x26\x69\xec\xc3\x5d\x98\xf4\xa3\xf3\xe3\x6e\xb9\xec\x26\xfe\xdc\x85\x45\x77\x3e\xdd\x39\x50\x6f\xf6\xeb\x92\xa6\xbe\x5d\xd2\x3c\x3d\x69\xa3\x8f\x97\x74\x7e\xde\xed\xf8\xcb\x46\xa2\xbb\x9d\xbf\xb7\xd1\x5e\x96\x6c\xd4\xcc\x49\x7f\xc5\x46\xb8\x98\x40\x9c\xa8\x1d\x1d\x72\xa5\x0c\x51\x4b\x1d\x3d\x4b\x45\x5d\xfd\x9c\x48\x76\xb9\x9f\x88\xa8\x2b\x9e\x4c\xae\x42\xe3\x15\x0d\x6c\x59\x40\x23\xdd\x6c\x7b\x84\x89\x92\x27\x13\x37\x59\x23\xe4\x5a\xcf\xda\xfa\x9a\x27\xe1\xb4\x37\x6c\x68\x33\x76\xb6\xd9\x9b\xb3\x64\xa1\x3b\xf8\x74\xc2\x89\x6f\x24\xde\xeb\x0b\xca\xac\x98\x54\x50\x09\x64\x2e\x03\xdf\xea\xe1\x51\x96\xba\xc7\xa0\x7b\x0c\x6d\x59\x3e\xdd\x7a\xb6\xe1\x64\xa9\x4b\x50\x5d\xac\xd9\x22\xea\xc9\x5b\x87\xec\x9a\x5c\xfb\x70\x19\x0d\xc4\xae\xe6\x82\xd7\xc6\x7a\x20\xe1\x83\x2b\x2b\x83\xd4\x57\x73\xe9\x6b\xbb\x6a\x21\xf5\xb5\xe0\x07\xdf\xa7\x3a\x48\x5b\x9c\xae\xbe\x9a\x96\xe9\x88\xc1\x80\x4e\xf8\x56\x41\x70\x4b\x21\xda\x64\xb8\x10\x83\xf0\x20\x8b\xdc\x58\x95\x64\xc5\xea\x4e\xf7\x2d\x4a\xd2\xf6\xe2\x37\x15\xa2\x58\xb1\x8e\xf7\xdb\x55\x97\x68\x7b\xd6\x9b\xea\x1f\xac\x98\xf5\x75\xab\x95\x10\x76\x9c\xfb\xfa\xa2\x04\x2b\x66\xfe\x7e\xbe\x3c\x41\x8b\xd3\xda\x18\xb7\xb0\x64\x3e\x5d\xf4\x42\x17\xbd\xf0\xc8\xa3\x17\xb6\x3a\x03\xeb\x22\x19\x96\xa1\xff\x63\x8d\x67\xd8\x6a\xd1\xeb\x62\x1b\x96\x2d\xfa\x91\x44\x38\x6c\xbd\xc6\xb5\xd1\x0e\xab\x16\xfa\x48\x62\x1e\xb6\x5a\x6c\xc3\xf8\x87\x65\x4b\xfe\x92\xa3\x20\xb6\x82\xe1\x9a\x88\x88\x65\x70\x7b\x14\x71\x11\x2b\x17\xf8\xab\x6e\x2c\x16\x96\x3f\xbe\xbf\x00\x89\xeb\xe0\xab\x73\x41\x12\xe1\x4f\x0b\x81\x12\xd1\x6c\x31\x58\x62\x49\x53\x31\x55\x0d\xc3\xff\xcf\x47\x55\xa8\xf8\xe3\x4d\x3a\x8c\x85\xf6\x35\x88\x09\x38\x93\x59\x95\x87\x36\x8e\xfe\xa2\xe8\x5f\xd0\xe4\xc6\x68\x2d\xf6\x7b\x43\xf0\xac\x05\xc8\xf9\x77\x25\x05\x48\x94\x64\x00\x62\x88\x81\x60\xf0\x33\xee\xcf\x25\x0e\xf2\x9b\xb5\x18\xbc\xf4\xf3\xae\x46\xb5\xf5\xd6\x3b\x0d\xa4\x16\x7e\x8a\x85\xa1\xe7\x67\x84\xaf\x2e\xcc\xe9\x7a\xfe\x76\xe3\x29\x4d\xa8\x10\x2c\x33\xb4\x00\x3d\xfa\x20\xdd\x79\xf8\xac\x07\x8f\x7d\x79\x61\x36\x67\x0b\xf7\x97\x4c\x27\x4a\xd1\xdf\x37\x46\x26\x44\x51\x72\xc3\x58\xa1\x02\x67\x49\x05\x3e\x15\xc8\x05\x19\xce\x8c\x7a\x97\xdc\x40\xb9\x51\x90\xca\x60\xbd\x67\xb8\x31\x2d\x27\xd0\x03\xb2\x17\x2c\x09\x6e\x75\x21\x38\x5d\x08\x4e\x17\x82\xb3\xe9\x8c\x35\x08\xc1\x09\x0f\x7c\x14\x86\x43\x05\x39\x2d\x8a\x0c\x8c\x52\xae\x34\xac\xad\x39\x68\x0b\x6e\x2c\x58\xe2\x76\x4c\x2f\x9a\x63\x0e\xee\xf6\x02\x85\x8e\x7f\xf0\x4c\x6d\xee\x89\xb5\x11\x36\x48\x4f\x97\xc9\x77\x6b\xa5\xc3\x44\x8a\x11\x1f\x6f\xce\x8b\x09\x60\x79\x06\xaf\xd4\x1e\x33\x1c\xa2\xb2\x95\x6d\x6b\x4e\x05\xe9\x5b\x11\xdf\xbe\x8b\xe4\x98\x11\x48\x60\x2b\xc3\x03\xa2\x55\x5c\x8c\xea\xe9\xf5\x20\x9a\xa6\xe4\xa9\xa5\x8f\x85\x4c\x0f\x15\x50\xb3\xb4\xca\x6c\xa9\x69\x2c\xc5\x62\x8e\xa6\xe0\x99\x59\x49\x9f\x6a\x3c\x0f\x4c\x61\xbe\xe3\x57\x42\xea\xaf\xfc\x48\x68\x78\x29\xf9\x98\x7b\xd2\xe7\x5b\x96\x14\x32\x1d\xf8\x62\x0e\x1a\x5c\x96\xf1\x80\x03\xf2\xbd\xb2\x0e\x66\x47\x1c\x8e\xfe\xf9\xaf\x63\x43\x58\x59\x89\x85\x3a\xed\xc0\xd1\x7b\x1b\xa2\x40\x5a\x8a\xed\x11\x32\x65\xa7\x1b\x40\xbd\x00\xee\x73\x1f\xbf\x65\x5e\xf7\x5b\x15\x02\xb9\xac\xb2\x20\x4d\xcc\xc0\x68\x7f\xb7\x6a\x53\xc7\x46\x81\x56\x3e\x96\x9e\x83\xdb\xfe\xda\xcf\xea\x02\x33\x25\xf1\xf6\xcb\xcf\x2c\xa9\xf4\x46\x95\x73\x89\x11\xd9\x2e\x13\x0c\x52\x59\x66\x3f\x07\xa2\x93\xfd\xc1\xac\x17\x18\xa7\x01\x8f\x0d\x6d\x53\x54\x73\x35\x9a\x61\xde\xad\x03\x18\x0b\x62\xa3\xea\xf3\x65\x04\x95\xa0\x0e\xf1\xb0\xd2\x58\xda\x74\x46\x92\x89\x34\xf8\x45\x11\xee\x30\xee\x94\x4b\x0c\x20\x02\x7b\x70\x49\x72\xc3\x01\xac\x76\x17\x0c\x8f\x1e\xef\xfa\x35\xa3\x0a\x4b\xa5\x6b\x58\xb9\xa0\x1a\x33\x0c\xd8\xd9\xcc\x1f\x63\xa3\xae\x80\xc7\xaf\xca\xcd\xa0\xb7\x8c\x8f\x27\x5a\xf5\x08\x1f\xb0\x01\xec\x2e\xa3\xc9\x24\x18\x36\x67\x4c\x2b\x42\xb3\xcc\x37\x26\x09\x50\x22\x74\xb7\x1f\x79\xa6\x69\x19\x5c\xcf\xd3\xdb\xf9\x5d\x5b\x0a\xae\x1e\x61\x3a\x19\x1c\xf7\xc0\x83\x67\x4e\x0b\x85\x39\x0e\x67\x84\x6b\xa8\xc5\x0d\x0c\xba\x94\xd5\x18\x57\x62\x03\x0d\x94\x97\x8e\xac\x7d\x56\xa4\xa0\x4d\x88\x31\x39\xc0\xc5\x1d\x38\x81\xc7\x0c\x67\x4d\xae\xb0\x3e\x57\x5a\x16\x2d\x9e\x65\xc9\x54\x21\xb1\x07\xcb\x7c\xe4\xc2\xff\xf1\x2f\x1d\xa9\xe3\x1a\x98\x13\x3e\x9e\x38\x58\xd2\x12\x69\x4a\xbc\x07\xcd\x9c\x8f\x4d\xc2\x48\x1a\x06\x91\xc4\x7e\x1e\x57\x2e\xbe\xc6\x89\x60\xf7\x34\x2b\x73\x0f\x03\xd8\x60\xd4\xf5\xad\x51\x36\xb7\x39\xcc\x08\x44\xf2\x8c\x1c\x01\x8a\x70\x7d\xa8\x00\x5d\xfb\xb2\x38\x1e\x90\x53\xd0\x76\x1b\x7c\x40\x48\x3f\xbe\x1d\xc8\x7c\x54\xc9\x7a\xac\x66\x3e\x8b\x66\x9e\xda\x6d\x7c\xb5\x86\x9b\x17\xde\xa4\xd4\xe8\x71\x84\xc9\xc6\x47\xb7\xf1\xdb\x92\x60\x0e\x4d\x9e\x5e\x70\xe9\x01\x4a\xd7\x61\x8b\xac\xcc\x7b\x84\x2a\x25\x13\x5e\x37\x4e\x5a\xc4\x74\x5c\x49\x13\x3f\xce\x96\xf0\x27\x5b\xaf\x9f\x6c\x19\x98\x1a\x5f\xf3\xf1\x9d\x36\x24\x35\x86\x4a\x44\xb0\x86\x33\xf8\x15\x1c\x85\x43\x96\x6d\x88\xce\x0c\xaf\x6d\x82\xbf\xdc\xd5\x38\x08\x6c\xc5\x82\x56\x2e\xe4\xc1\xe2\x55\x97\xc1\x64\x0b\xe4\xc0\x6b\x9b\x63\x5a\x5f\x4d\x22\x5b\xe7\xdf\x68\x14\xe7\x1a\x5f\xdb\xe3\x2f\x5e\x8d\x62\x60\xe3\x6b\x41\x24\x69\x2b\x14\x36\xbe\xb6\x0c\x49\xa8\xaf\xe6\x61\xb2\x6b\xd6\x75\x75\x57\xb1\xb2\xbd\x38\x50\x96\x7c\xab\x11\xd7\x5f\x37\xa4\x6c\x2d\x00\xa8\x69\x40\xed\x1a\xf0\x9c\x3e\x99\xa0\xda\x25\x43\x7d\xab\xcd\x30\xaf\x57\xbe\x0c\x0e\x5b\xea\x82\x4b\xad\xf0\xd6\x9b\x2b\x48\x03\xb6\xa8\xa2\x64\x86\x61\x61\xef\x2f\xdb\x09\xe5\xce\xe2\x78\x97\xed\xfe\x76\x84\x1d\xaf\xad\xc9\x7b\xf8\xc1\xad\xd0\x0d\x58\xe4\x2b\x68\x9c\x75\x3f\xdc\x11\x9b\x74\x75\xdc\xb1\xe3\x8e\xf1\xd5\x71\x47\x7f\x75\xdc\x71\xc3\xd5\x71\xc7\x8e\x3b\xde\x39\x77\x44\x5d\x76\x07\xe5\xf9\x47\x34\x71\xcc\x6b\xcb\xc0\x69\x9d\x5f\x28\x56\x9b\x0d\xbf\x71\x09\x14\xef\x41\xd5\xb6\xb6\xe3\x12\x62\xc3\x9e\xf7\x9f\x3f\x7b\xb6\x8d\x52\xbd\xa9\xe1\x5b\x78\x05\xcd\xdf\x7e\xff\xf5\xda\x37\x56\xd9\xdf\x5a\xb0\x9a\x5a\x1c\xf7\x86\xbc\x48\x76\x58\x61\xf8\x04\xea\x24\xa4\x26\x39\xd3\x84\xea\xc8\x54\xc4\x73\xd6\x73\x86\xe5\xba\xc5\xf6\xb0\x36\xcd\xa6\x44\x0a\x17\xa9\x28\x53\x36\xd8\x6d\x06\x09\xa3\x0a\xf2\x4d\x86\xcc\xcf\x42\xe6\xe6\xab\x5c\x68\x77\x5c\xcc\x14\x98\x83\x0a\x39\x62\x83\xf1\x80\xa4\x15\xb3\x09\x4e\xe8\xa7\xb3\xed\xac\xd4\x4c\x69\x96\x83\x25\x57\x96\xbe\xe9\x9b\x2e\x21\x46\x11\x02\x25\x2b\x9a\x65\x33\xc2\xa6\xdc\x66\xfb\x9a\xc1\xc1\x4d\x08\x35\xe1\xcd\x4a\x1a\x99\x08\x5b\xcf\x4f\x98\xc7\xe0\x4d\xa9\x0a\xdb\x70\xfb\x85\xb1\xb7\x8e\x34\xbe\xb2\x2b\x19\xac\x14\x56\xb5\x19\x17\x6d\xe0\xf0\x5f\x40\xae\x77\x57\x9b\x4d\xae\x64\x6b\x4a\xb6\x05\xf5\x9a\x17\x4b\xab\x2c\x33\x88\x81\x56\xd8\xc5\x05\x2c\xb1\x8e\x2e\x49\x64\x43\xc3\x7b\x1e\x24\xb4\x61\x13\x73\x59\xc8\x4c\x8e\x67\x21\xa4\xb1\x83\x1c\xcf\x0b\x67\x1c\x47\xaf\x1e\xf3\x0d\x9a\xdf\xce\x6d\x4d\x67\xf9\xeb\x2c\x7f\x9d\x6e\xb3\x70\x75\xba\x8d\xbf\x3a\xdd\x66\xc3\xd5\xe9\x36\x9d\x6e\xd3\x59\xfe\x48\xc7\x1d\xd7\xc0\xa4\xe3\x8e\xa4\xe3\x8e\x2b\xd7\xd5\x71\xc7\xb5\xe0\xe9\xb8\x63\xc7\x1d\x97\x5d\x85\x4c\xf7\x08\x74\x2c\x64\xba\x26\xce\x11\xad\x3e\x89\xec\x67\x32\xc1\xb6\x13\x98\x98\xea\xec\x7c\x8a\xe6\x68\x88\xea\x91\x7f\x48\xc1\x30\x78\xcd\xec\x0d\x98\x93\xa0\x0e\x82\x79\xfc\x48\x1d\xaf\x0d\x6c\xea\xe2\x24\xbb\x38\xc9\x47\x1f\x27\x39\xa1\x0a\xf7\x15\x89\xd2\xea\xb0\xc9\xe0\x40\xbe\x67\x65\xfe\x44\xa3\x26\x0d\xba\xd8\xed\x86\x14\x9b\x7a\x4b\x71\xe5\xa9\xf5\x17\xb0\xf4\x32\x5e\xaf\x95\x97\xb1\x56\x53\x9a\xb2\x94\x14\xac\xec\x23\x8a\x48\x32\xe2\xb6\x98\xd5\x1c\xf6\x59\xf8\x3c\x68\xf4\x63\xbc\x8e\x07\x0c\x81\x8c\x27\xb2\x83\xcd\x35\x34\x1c\x47\x14\xfe\x51\x04\x44\x6e\x2b\xd5\xf7\x89\xb6\x46\xde\xef\x1a\xca\xf5\xdb\x8b\xe6\x8d\x4a\x9f\x2e\x5e\x4b\xeb\x69\xae\xad\x7d\xda\xf3\x05\x1e\x12\xaa\x90\x53\x6c\xab\x5a\x6e\xa9\x46\xed\xa6\xa7\xec\x6e\x89\x26\x0f\x5e\x2e\x75\xf1\xda\x55\x74\xdb\x49\x70\x7b\xfc\x45\x56\x57\x01\x68\x6b\x05\x9d\xec\xac\xa4\x93\x9d\x14\x75\xb2\xab\xb2\x4e\xf6\x50\xd8\xc9\x6e\x4a\x3b\xb9\x87\x12\xaf\x8b\xd7\xce\x2a\x2a\xd9\x43\x8f\x27\x4f\xa2\x30\xec\xe2\xb5\x17\xb0\x76\xd3\xe9\x49\x57\x4e\x76\x8b\x6b\x77\x95\x9b\xec\xae\x76\x93\xdd\x31\xa3\x61\x59\xda\xc5\xab\x2b\x54\xbb\x17\x67\xdf\x81\x71\x6d\x5f\xcc\x76\xd5\xc7\xb7\xc2\x12\x5f\x67\xa8\x7d\x61\x53\xd7\x9d\x0d\xc3\x5e\x9b\x8e\xc1\x40\xa8\x45\xc0\x5c\x7c\xd4\x08\xe0\x18\xdc\x4f\x9d\xf2\x5b\x89\xa0\x72\x6b\x30\x98\xaf\xa0\x3b\x17\xd2\x64\x37\x5e\x0a\xa6\x40\xb0\x63\xde\x44\x14\x36\x57\x34\xcf\x0e\x30\x1c\xa4\xe6\x76\x22\x9d\x0f\x10\xa9\xdf\x00\x19\x31\x67\x54\x28\x72\xe0\x6c\x4f\x87\xaa\x7e\xe2\x60\x50\x67\xf7\xf9\x11\x21\x09\x39\xcc\xe8\x5b\xdf\xd4\x7d\xdd\xce\x76\x92\x76\x27\x69\x77\x92\x76\x27\x69\x2f\xbd\x3a\x49\x7b\x8b\xab\x93\xb4\x3b\x49\x7b\xdd\x87\x3b\x49\xbb\x93\xb4\x37\x7f\x7c\x37\x49\x7b\xd7\x38\xa1\x50\xee\xb5\xce\x39\xac\x9c\x05\xad\xf9\x7d\x0c\x91\x2f\x50\x0a\xff\x6b\x57\xde\x0e\x65\xe9\xe5\xd2\x76\x28\x91\x2f\xe8\x16\x83\x0d\xa2\xb5\x17\xbe\x17\xde\x5c\x2f\x75\x3f\xae\x58\xa8\x1d\x70\x23\x70\x28\xec\x88\x1c\xef\x9d\x2b\xdc\x56\x9a\x1b\xb2\xda\x4f\x9e\x92\x23\xe7\x71\x81\x0a\xd1\x42\xea\xf8\x47\xa1\x79\xbf\x7e\xc2\xfb\x60\xc0\xbd\x18\xe5\xdb\x64\x71\x7f\x35\x31\x57\x5b\xb1\xde\x4f\x43\x42\x58\x19\xcd\x81\xbb\x46\x7a\x10\x2d\x51\x56\x42\x98\x51\xa1\x4a\x36\x78\xe3\x90\xe6\x60\x01\x38\xdf\xd9\xdf\x08\x4b\x30\x1f\x90\x98\x6a\x28\x05\xfe\x4e\x6a\xcb\x48\xdb\x50\x7e\x29\xac\x47\xd4\xdc\x71\x5e\x5f\x87\x94\xb0\x22\xee\xbf\x3e\x20\x2f\x01\x0f\xc3\x81\x6d\xc9\x69\x9a\x65\xf2\x76\x1b\x92\x74\x5f\x69\x51\xb7\x5b\xa7\x45\xcd\xf9\xef\xba\xac\xa8\x5f\x49\x56\x14\xfc\x88\x47\xa8\xf5\xf4\x28\xf2\xe3\x84\x01\x16\x95\x0c\x40\x95\x57\x99\xe6\x45\x1d\x2b\xa5\xf0\x53\x19\x4a\x99\x23\x1b\x79\x12\xe3\xa5\xf9\x1a\x4d\x26\xf3\xf8\x09\xe3\x41\x6c\x95\x82\x43\x6b\xa3\x3b\x68\x96\xd9\x9c\x22\x27\x92\x62\x08\x0b\x7f\xe8\xc8\x84\x73\x57\x15\xd1\x69\x33\x40\x64\x8e\x0c\x2d\xcc\x66\xb6\x52\xdd\x1a\x22\x8a\x4a\xd1\x94\x39\xd6\x3b\xe6\x53\x26\x6a\x4a\x7a\xa4\x8e\x8f\x1d\x0f\x6f\x95\xc2\xdf\x09\x85\xfe\x4b\x40\x49\xff\xda\x84\x46\xc3\x82\x3c\x95\xae\xc1\x57\xd3\xe8\x87\x0c\xc1\xd8\xc6\xcf\xbf\x9d\x8d\x61\x07\xff\xfe\x3d\xfa\xf6\x9f\x4e\x66\xd9\x03\x5b\x18\x1f\x22\xb6\xfe\xd1\x5b\x15\xbb\xe0\xfa\xfa\xda\x37\xb8\xfe\xce\x2d\x87\x0f\x1b\x63\xff\x04\xac\x85\x0f\x19\x63\xdf\x59\x08\xd7\x6e\xca\x63\x0b\x7d\x8f\xaf\x9d\x2c\x82\x9d\x35\x70\x67\x2e\xbc\x25\xc3\xd9\xd7\x0a\xb8\x25\x46\xec\xe8\x67\xef\x7c\xec\xf7\xe3\x63\xef\x24\xde\x86\x57\x27\xf1\xae\x04\x4a\x27\xf1\x92\x4e\xe2\xdd\xb4\xbc\x4e\xe2\x5d\x0b\x9e\x4e\xe2\x5d\xbb\x29\x9d\xc4\xdb\x49\xbc\xe4\xa9\x49\xbc\xbb\x54\xe9\xea\x7c\xdd\x7b\xf9\xba\xb7\xa5\x16\x5b\xd1\x88\x2d\xf1\x60\x6b\xdf\x76\xe7\xd7\x7e\x2c\x7e\xed\xc6\x09\xff\x42\xf3\x7d\x93\xfe\xc3\xbd\x5a\x95\xf9\x4f\xa7\x92\xa7\xa4\xa8\xb4\xcd\xa7\xee\xb2\xff\xdb\xc8\xfe\x8f\x20\xdf\x95\x00\x68\x54\x02\x60\x15\xcc\xba\x3a\x00\x5d\x1d\x80\x96\x9d\xd0\x5d\x1d\x80\xae\x0e\x40\x57\x07\xc0\x5d\x5d\x76\x12\xe9\xb2\x93\x1a\x5d\x5d\x76\xd2\xea\xab\xcb\x4e\x7a\xb4\xd6\x57\xd2\x65\x27\x3d\x6e\x4b\x2c\xe9\xb2\x93\x3a\xeb\x6c\xc3\x8d\x7a\x82\xd9\x49\x5d\x1d\x80\xc7\x1a\xa3\x40\x3a\x49\xbb\x93\xb4\x3b\x49\xbb\x93\xb4\xd7\x5f\x9d\xa4\xbd\xc5\xd5\x49\xda\x9d\xa4\xbd\xee\xc3\x9d\xa4\xdd\x49\xda\x9b\x3f\xde\xd5\x01\x78\x42\xb1\x11\xa4\xab\x03\xd0\xc5\x4b\x74\x75\x00\x7e\xbd\x75\x00\x22\xdf\xfd\xc3\x15\x03\xd8\x7e\x1a\x5d\x45\x80\xae\x22\x40\x57\x11\xa0\xab\x08\xe0\xae\xae\x22\x00\x5e\x8f\xc9\xd6\xd8\xe5\x47\xad\x04\x4a\x97\x1f\x45\xba\xfc\xa8\x4d\xcb\x7b\x02\x76\xc3\x2e\x3f\xea\x11\xda\x0a\xbb\xfc\xa8\xce\x2e\x38\xbf\x39\x4f\x24\x3f\xaa\xab\x08\xf0\x18\xbd\xed\x9d\xc4\xdb\xf0\xea\x24\xde\x95\x40\xe9\x24\x5e\xd2\x49\xbc\x9b\x96\xd7\x49\xbc\x6b\xc1\xd3\x49\xbc\x6b\x37\xa5\x93\x78\x3b\x89\x97\x3c\x35\x89\xb7\xab\x08\xd0\x55\x04\xe8\x2a\x02\x3c\x45\x0f\xf7\xc6\x9d\xa6\x42\x48\x8d\x32\xcb\xaa\xbd\x8d\x65\xf9\xfa\x79\xcb\xe3\x2b\xa1\x74\x59\x25\xba\x2a\x59\x0a\xc0\x40\x40\x19\xaa\xad\xb4\x2c\x9d\xa3\x1b\x1c\x85\xe7\xac\xc8\xe4\xcc\x10\xcd\x1e\xb9\x94\x69\x8f\x9c\x5e\x5e\x5c\xb3\x72\xca\x13\xe6\xf6\xec\x9d\x25\xcd\x03\xf2\x7e\x56\xf0\x84\x66\x19\x48\xfe\xf5\x57\x73\x3a\x03\xdf\x21\xd3\xe6\xd4\xb2\xcf\x9a\x95\x82\x66\x44\x4b\x99\x41\xda\x3c\x7c\x14\x0e\x67\xc9\x74\xc9\xd9\x94\x11\x5a\x0e\xb9\x2e\x69\x39\x23\x39\xd3\x34\xa5\x9a\x0e\xc8\xf7\x8a\x85\x64\x41\x4b\x52\x94\xac\x8f\x78\x10\x7d\x0f\xf6\xf1\xdd\xeb\x37\x0e\x7f\x69\x9a\x7a\xc7\xa7\xdd\xc5\xeb\x6a\xe8\x41\x74\x68\x90\xc9\xad\x52\xf5\x60\x63\xad\xea\x52\x70\x85\x6b\x5d\xa9\x9a\x34\xe0\x0a\xdb\xf1\x80\x8d\xfb\xcf\xc4\xb4\xd1\xbe\xbf\x14\xd3\x58\x4f\x65\x62\xca\x4b\x29\x80\x03\x4f\x69\xc9\xe9\x30\x63\x08\x7f\xa6\xdd\x5e\x5a\xfe\xc9\xca\x01\x39\x03\x90\x9a\x8d\x43\x4f\xf6\x4a\xfc\xdd\x4c\xf8\x36\x90\xba\xf9\x69\xff\x40\x63\x51\x5d\x2c\x9d\x3a\xb1\x0f\x98\xa9\x53\x72\xe6\x27\xbe\x01\xb2\x1b\x18\x78\x13\xfd\xb0\x0f\xc4\x69\xe5\x03\xcd\xb4\x38\x33\xc4\x7a\xda\x1c\x81\xe5\x2d\xcd\xeb\x12\x0f\x4b\xa0\x31\x20\x6f\xac\x84\x4c\xc9\xd9\xff\x5e\x9c\xbf\x7c\xfb\xfe\xe2\xd5\xc5\xcb\xab\xf5\x44\xa7\x21\x5b\x01\xfa\xb0\xc5\x64\x0f\x7f\x70\x7b\x04\x69\xfe\x4c\x18\x0e\xfc\xdb\xa3\x1f\x4e\xaf\xfe\xf7\xed\xe9\x9b\x97\xc7\x20\x7e\xb1\xcf\x05\x15\x29\x4b\x49\xa5\x1c\x4b\x28\x4a\x36\xe5\xb2\x52\xd9\xcc\x93\xf7\xe5\x48\x3b\x8f\xad\xd6\xd0\x30\x23\xf6\xb8\x2e\x7f\x0d\x34\x10\x5a\x23\x50\xe2\x31\xbc\x64\x4a\x66\x53\x96\xa2\xac\xe9\x27\xed\xbe\xc3\x45\x51\x69\xa7\x11\x41\x08\x8a\x39\x15\x22\x99\x50\x31\x66\xe9\x80\x9c\xcb\xca\x8c\xf7\xdb\xdf\xc2\xc2\x4a\x96\x56\x09\xca\x3a\xd4\x09\xcc\xbf\xed\x39\x4e\x62\x78\x81\xc2\x32\x1a\x2a\xa1\x85\x5b\x7a\x08\x1d\x35\x13\x9a\x7e\x7e\x81\x31\x18\x07\xbf\x0d\x7e\x3a\x70\x25\x48\xa4\xf9\x04\xf2\x23\x9c\x55\x06\xd5\x2f\x32\x72\x10\x3e\x3d\x20\x2f\xcd\x37\x58\x1a\xee\x03\x86\xd0\xb0\x29\x2b\x41\x9f\xb2\xbb\xd0\x23\x25\x1b\xd3\x32\xcd\x98\x82\xe0\x91\xdb\x09\x83\x72\x2e\x28\x61\x5b\x80\x31\xaf\xad\x09\xa9\x07\xe4\x9c\x8d\x68\x95\x69\xa0\x21\x07\x07\x83\xc3\xd6\x50\xed\x55\x29\x37\x14\x3f\x88\xd0\xed\x1a\x8b\x8a\x8c\x64\xb9\xf2\x78\x1c\x5a\xd3\x54\x44\xd6\x94\x91\x24\xac\xa6\xef\x78\x35\xea\x97\x0d\x56\xd2\x40\x11\x68\x6e\xce\x49\xa4\x18\xf1\xf1\x1b\x5a\x7c\xc7\x66\x57\x6c\xb4\x65\x34\x0c\x0a\x51\xd6\xa6\x01\x02\x8c\x21\x87\x38\xe0\x66\xa1\xe3\x0e\x63\x39\x9a\x18\xcd\xb6\xb3\x79\x35\xb6\x74\x2d\x94\x34\x41\xa1\xcf\x8a\x6f\x2d\x16\x67\xaa\xaf\xcd\x14\x7d\xe9\xe4\x0e\x43\xd2\x6e\xcf\xa9\x1e\x90\x37\x12\x42\xb2\x46\xf2\x05\x99\x68\x5d\xa8\x17\x27\x27\x37\xd5\x90\x95\x82\x69\xa6\x06\x5c\x9e\xa4\x32\x51\x27\x89\x14\x09\x2b\xb4\x3a\x91\x53\x43\xf9\xd8\xed\xc9\xad\x2c\x6f\xb8\x18\xf7\x8d\x08\xd7\xc7\x5d\x55\x27\x20\x4c\x9f\xfc\x1b\x6a\x6c\xef\xdf\x9d\xbf\x7b\x41\x4e\xd3\xd4\x56\x6c\xaa\x14\x1b\x55\x99\xad\xde\x32\x30\x42\xcf\x0f\xac\x34\x4a\x79\x8f\xdc\x70\x91\xf6\x48\xc5\xd3\x6f\xd6\x1f\xee\x1d\x21\x26\x0b\x94\x8b\x76\x80\xda\x35\x28\x0a\xb3\x88\x4e\x79\xa4\x37\x14\x8a\x6b\x05\x7b\xee\x0c\x47\x96\xa1\x6c\xb1\x8c\xa1\x94\x19\xa3\x62\xc3\x1b\x00\xb6\xed\xcf\xec\x61\x7d\x68\x51\x9c\xb5\x08\x50\xc8\xf4\x05\x51\x55\x51\xc8\x52\xab\x5a\xf8\x35\x3b\xd7\x8b\xff\x04\xe5\xa8\x47\x7e\xf2\x37\x41\xc3\x51\x1f\x0e\x0f\xff\xf2\xdd\xcb\xff\xfe\xeb\xe1\xe1\xa7\x9f\xc2\x5f\x03\x01\x39\x7e\xc4\xa8\x5c\x03\xa3\xee\xbc\x85\x6f\xc0\x9f\x96\x8d\x9e\x26\x89\xac\x84\xb6\x3f\x68\xaa\x2b\x35\x98\x48\xa5\x2f\x2e\xfd\x9f\x85\x4c\xe7\xff\x52\x1b\x38\x01\xb9\x5b\xa2\x03\xe0\xbc\xa4\x7a\xd2\x32\xe9\xa9\xcf\xc5\x0e\xe8\x6a\xdf\x0c\x2b\x64\xe5\x14\xfe\xfb\xca\x4d\xd7\x70\xa0\xdb\x92\x6b\xcd\x04\xc8\x1d\x10\x77\x29\x47\x3d\x83\xb9\x35\x9b\x9d\x3e\xdf\xca\x1c\xd1\xf8\x28\x7a\xa8\xed\xb0\x38\x98\xbd\x5d\x99\xd7\xcd\x90\xd0\x2e\xea\xf5\xa7\x97\x17\x64\x8a\xd0\x68\x7d\x21\x2e\x0a\xef\xd5\xde\x67\xd2\x57\x2a\xb3\xcb\xf2\x92\xe6\x0b\xb4\x2c\xfa\x78\x3f\x92\xf1\x9c\x5b\x07\x80\xad\x6a\xa6\xc8\x11\xde\x1c\x24\x45\xd5\xb3\x0f\x0c\x72\x96\xcb\x72\xe6\xff\x64\xc5\x84\xe5\x46\x62\xeb\x1b\xed\x97\x8e\x59\xcf\xbf\x8e\xaf\xf9\xbf\xf0\xc5\xe8\x03\x8b\x6f\xa3\x48\x9d\x54\xa5\x61\x1e\xd9\xcc\x51\x10\x96\x3e\xec\x59\x74\x60\x6a\xf9\x28\xfa\xdd\x78\xbb\x23\xcb\xf5\xda\x22\x32\x6d\xbf\x2a\x90\x21\xa7\x32\xab\x72\xa6\x7a\x9e\x3d\xa1\xb4\x2e\xa6\x46\x9a\x54\x77\xc2\x08\x53\x3e\xe5\x6a\xa7\xf8\x84\x6b\x6f\xa9\x05\x13\x69\xa5\x8d\xa6\x82\xc9\x00\x41\x45\x40\xa9\x40\x07\xf0\x31\xaa\x11\x49\x79\x7e\xd0\xcc\xfb\x4e\xb5\x66\xa5\x78\x41\xfe\xe7\xe8\xe3\xef\x7e\xe9\x1f\x7f\x73\x74\xf4\xe1\x59\xff\xcf\x9f\x7e\x77\xf4\x71\x00\xff\xf9\xea\xf8\x9b\xe3\x5f\xdc\x1f\xbf\x3b\x3e\x3e\x3a\xfa\xf0\xdd\x9b\x6f\xdf\x5f\xbe\xfc\xc4\x8f\x7f\xf9\x20\xaa\xfc\x06\xff\xfa\xe5\xe8\x03\x7b\xf9\xa9\xe1\x20\xc7\xc7\xdf\xfc\xb6\xd1\xf4\xa8\x98\xbd\x6b\x70\xe0\xf1\xea\xef\x90\x61\x51\xbf\xb5\x85\x83\xe6\x73\xbf\x16\xda\xfa\x5c\xe8\xbe\x2c\xfb\xf8\xfa\x0b\xa2\xcb\x6a\xf3\xc1\xa8\x89\xda\x2e\x78\xee\xca\xc1\xbd\xa8\x09\x9a\x27\xcd\xad\x23\xb2\x62\x49\xc9\x74\x5b\x1a\x0c\x8e\xe6\xf8\xc7\x9c\x49\xbe\x53\x6a\x6a\xa5\xc6\xdb\xa5\x01\x5e\x35\xe7\x1d\x95\x32\x1f\x90\xc0\x2c\x34\x05\x4f\xb6\x7d\xee\x86\x6d\xd0\x72\xdd\xd5\x29\x41\x4f\x4b\x09\xba\xc6\xfd\xbd\x73\x0d\x88\x89\xe9\x3a\x33\xcd\xbc\x4d\xf7\x15\xa4\x32\x85\xe6\x68\x27\x40\x69\x49\x0a\x59\x54\x19\xd5\x2b\xcc\x76\x4b\x6c\xd3\x16\xf7\x6b\x2f\x90\xd9\x68\xb0\x03\x5b\x2a\x97\x2f\x37\x86\x92\xd3\x2c\x23\x5c\xe0\x49\x80\x01\x9c\x35\xaf\x64\x28\x2f\x11\x8a\x06\xe7\xa9\x99\xc2\xad\x4d\xb8\x0a\x0c\x8d\x5c\x19\x5d\xa7\xd4\xe0\xf1\x81\x84\x2c\xa4\x59\xd6\x34\xc6\x45\x9d\x96\xe5\xb9\xad\xf7\x52\x2f\xad\xbf\x99\x51\xa5\xdd\xb4\x61\x36\x9a\xde\x80\x29\x34\x61\x29\x13\x09\x83\x10\x94\x8a\xd5\x6b\x1d\x1a\x61\x10\xcc\xfb\x30\x06\x25\x69\x55\x64\x3c\x31\xf0\x33\x33\x59\x3e\xc6\x45\x9e\x57\x1a\x0c\xc5\xf7\x65\xc5\x37\x3b\x7e\xed\xca\xfd\x7a\x63\x3e\x90\x2a\x2f\x5a\xfb\x68\x1b\xaf\xba\xab\xfd\xcc\xf7\xcd\x08\xaf\x37\xb7\x6d\xe4\x54\x0b\x14\xb7\xb6\x31\xc4\x94\xf6\xbe\x2d\x86\xcd\xe8\xec\x17\x49\x63\xb7\xa0\xaf\xcd\x69\xeb\x16\xc6\xa5\x6d\xe9\x69\x53\x6b\x52\x51\xb2\x11\xff\xbc\x05\x3e\x9e\x8a\x5a\x45\xe1\x29\x13\xda\x28\x02\xa5\x75\x8c\x16\x4c\xd4\x5e\x4f\x08\xf0\x13\xf1\x3a\xee\xd4\x63\x84\x52\xc6\xf6\xc7\xeb\x7a\x99\x14\xd3\x9d\xad\x2f\xfc\x6c\xd9\x5d\x6f\xff\x60\x09\x99\x6e\x0c\xfe\x9f\xdb\xc7\xe0\x8d\xb9\x48\x67\x5b\xfe\xdd\x4e\xd2\x68\x6f\xde\xe5\x54\xc8\x14\x6b\x9c\xeb\x3a\x08\x65\x40\xae\x97\xbc\x09\xb1\x26\xf6\x89\xc3\x43\x85\x61\x29\x6a\x7e\xa0\xb9\xec\x76\x8c\x68\xc0\x41\xb7\x44\x29\x64\x75\x55\x09\x96\xdf\x13\xaa\x14\x1f\x8b\x7e\x21\x53\xa8\xcb\x7e\xb2\x0a\x21\xee\x3f\xaa\xc1\x1b\x27\x9a\x6d\xd3\x95\xb7\xbf\x05\xb2\x85\xeb\x08\x50\x06\x3f\x5a\xbb\x8e\xcb\xa3\x08\x64\xc8\x5a\x22\xda\x0f\xa6\x39\x15\x74\xcc\xfa\xf6\xe3\x7d\xff\xf1\xbe\xff\xd6\x3e\x60\x6e\x42\xb5\x92\x8c\xf2\xf5\xa1\x64\x11\xf0\x0e\xce\xe0\x79\x5b\x28\xc0\x47\xe0\xcd\xa5\x31\x3b\x69\x93\x0b\x74\x09\xb8\x9f\xf0\xe5\x1e\xa2\x24\x2d\xad\x1b\x75\x09\x7c\x3f\x0a\x0c\x24\xb3\x71\xc5\x59\x31\xa1\x41\x40\x9f\xdd\x19\x45\x98\xa0\xc3\xcc\x79\xc1\xcf\x67\x82\xe6\x3c\x71\xbb\x7b\x9a\x41\xc0\x17\x97\x82\x8c\x18\xd5\x55\xc9\xc8\x98\x6a\x56\x8f\xed\x23\x45\x79\xbd\x99\x17\x9a\x24\x54\xa0\x99\xd6\x46\x1d\x99\xd3\xe5\x67\xa6\x06\xeb\xec\x5d\xcd\xa2\xf8\x1a\xc4\xee\xcd\x95\xe5\x0f\x80\x17\x3a\xe3\xa5\x30\x4a\x8f\x2e\x81\x3d\x5f\xca\xd4\x50\xc7\x41\xf4\xf4\x86\xa4\x88\xc6\xec\xaf\xa9\x91\x63\x43\x70\x0b\xb9\x6b\x4e\x0a\x8c\x34\x20\x95\x0e\x3f\x0d\x7a\x46\xd0\x2a\x64\x3a\x58\x82\x99\x8e\x09\x5f\xca\xd4\xc6\x0d\xea\x08\x53\x0c\xba\x02\x92\xe4\xf4\xc6\xc5\xfc\x79\xe3\x18\x9d\x52\x9e\x41\xa8\x03\x17\x8a\xa7\x46\x34\x4a\x36\x07\x16\xb9\xab\x21\xf3\x8c\x6c\x82\xe6\x10\xf6\x73\x5a\xf4\x8d\x36\xba\x1e\x54\x1b\x77\x66\x71\x60\x9c\x51\x4e\x8b\x95\x6f\xa1\x3b\xa2\x31\xed\x38\x7c\x8d\xee\x8e\xd4\xb7\x16\xc2\xd8\xef\xcf\x3c\xaf\x72\x42\x73\x59\x61\x78\xf7\x22\x29\x76\x41\x90\xad\x10\xdb\x25\x44\x56\xad\xa4\xb2\xa4\xf9\x31\xd9\x3e\x5c\xfb\x91\x5a\xc5\x1b\x59\xc3\xb7\xb3\x82\x6f\x61\xfd\xde\xd9\xea\xed\x1c\x5c\xcd\xf1\xf1\xca\xf9\xdc\xe6\x30\x92\x8b\x8d\x18\x59\xfa\x5e\x29\x17\x23\xe2\xc7\xe1\x8a\xc8\x9c\x6b\x6d\x9d\x41\x01\x01\xe8\x11\xae\x23\xcf\x89\x3d\x0b\xd0\x2b\x08\xdb\x2b\xb1\xcf\x45\xc6\x13\x0e\x1e\x38\xe7\xf1\xec\xa1\x84\x7e\xcb\xb1\xb2\x10\x15\x84\xe7\x05\x26\x42\x00\x4e\xf7\x1d\xa7\xb5\x01\x4a\x7e\x26\x36\x3c\x8d\x7d\x4e\x18\x4b\xed\xc7\xba\xe3\xd3\x1d\x9f\xe5\xc7\x47\x6d\xa3\xe6\x84\x1a\x4e\x1d\x1c\xef\x35\x1d\x83\xf8\xae\xa7\x19\x04\xff\x23\x0e\x99\xa3\x02\xf9\x59\x46\x5c\xbb\x62\x60\x74\xbc\x66\x5a\xd9\x70\x7b\x78\xc3\x48\x84\x0b\xd9\xcb\xce\xc8\xea\xb3\x38\xe8\x68\x14\x3f\x51\x07\x60\x23\x6f\x8e\xf9\x3f\x68\x45\x2c\x2f\x32\xaa\x99\xd7\x99\xf6\x88\xc8\x6e\x22\xc0\x6c\x93\x3a\xfc\xb0\xc9\xc2\x77\x23\xb2\x3e\xca\x14\xe0\x3b\x90\x76\x37\xbb\xf3\x1a\xa6\xf2\x36\x97\x8a\x1b\xf9\xfb\xee\x3a\x41\x77\x2b\x4b\x4f\xd3\x24\xdc\xc7\x9f\x76\xbb\xc5\xb2\x9b\xa6\xd6\x76\xc9\xb4\xeb\x40\xdd\x2c\x21\xae\x71\x32\x5c\xa3\xfd\x6b\x98\x14\xdb\xa5\xc1\x6e\xc1\x5f\xee\x40\xf8\xdb\xb8\x97\x5a\x66\xac\xdc\x22\xd5\xed\x7d\xfd\xbc\x6f\xad\x89\x91\x23\xc1\x48\xf7\xe3\x00\x7d\xef\xc4\x16\x73\xb6\xea\x79\x01\x6a\x69\x4d\xa1\x8f\xa6\x96\x6e\x5e\x66\xe3\xc4\x8c\x98\x3d\xd3\xb6\xa9\x6a\xd0\x65\x54\x97\xe0\x4f\xfe\x8b\xc7\xb6\x1e\x03\xf9\xe9\xaf\x41\xea\x8c\x4f\xad\xf4\x18\xf2\x17\xf7\xbf\xbf\xee\x99\x12\xd5\x8c\xb1\xe1\x94\xb6\x10\x30\x5e\xc2\x0b\x84\x8b\x14\x7c\xd7\x76\xa9\x00\x01\x1c\xcb\xc0\x07\x96\xe5\x52\x2b\x31\x47\xd7\x5a\xd0\xc1\xc9\x5d\x3f\xac\xac\x37\x3e\x50\xbb\xac\xc5\xa1\x3e\x19\x8c\xbc\x95\xb6\xde\x2d\xeb\x91\x4b\x30\xc3\xd5\x77\xe0\x24\xbd\x95\x58\xf9\x76\xa5\x9b\x3c\x84\xdb\x46\x2e\xb2\x91\xd1\x47\x00\xf9\xae\x66\xf2\xb8\xb2\x88\xc9\xd7\x18\x1c\x25\x59\xaf\x83\xcc\x0d\x9b\xd5\xcc\xc6\x8a\x10\x40\xf2\x7b\x35\x96\x38\x56\x80\xbc\xe3\xff\x38\x2b\x6e\x3e\xe4\x02\x3f\x86\x43\xbb\xad\x80\xd1\x1d\x40\x8d\x64\x97\x65\xf8\x99\x36\xc0\xd5\x4c\xce\x88\x60\xf6\x6e\x0b\x19\xc3\x53\xc9\xe5\xd2\x45\x20\x52\xbc\xfc\xb9\xa2\x59\x9c\xdf\x64\x6f\xd9\x87\x16\xa8\xfa\x2d\xcf\xd2\x84\xfe\xff\xec\x7d\xeb\x73\x1b\x39\x76\xef\xf7\xfc\x15\x28\xed\x07\x49\x29\x92\xb6\xf7\x4e\x66\xb6\x7c\x53\x5b\x25\x4b\xf6\xac\xb2\xb6\x47\xb1\xec\x99\xca\x4d\x52\x59\xb0\x1b\x24\xb1\x6a\x02\x9c\x06\x5a\x32\x93\xca\xff\x7e\x0b\xe7\x1c\xbc\x9a\xa4\xd8\x4d\x51\x0f\xcf\x88\x1f\x66\x2c\xb2\x81\xc6\xf3\xbc\xcf\xef\xd4\x14\x40\x0a\x77\x94\x19\x4d\x46\x72\x20\x04\x05\x57\xe1\xb6\xc7\x3d\xc2\x12\xbb\x6c\xc1\x6b\x2b\x8b\xa6\xe2\x35\x73\x77\x61\xaa\xeb\x4e\x39\x48\x5b\x57\x34\x1e\x9a\x4b\x51\x68\x55\xf6\x51\x00\x3e\xb7\xdb\xb6\xc3\x38\x16\xa2\x96\x84\x24\x2b\xe7\xa2\x7d\x48\x8f\x72\x77\x99\x9e\xf8\x5b\x1d\xae\x58\x66\x18\xc9\xad\xf9\x08\x45\x7d\x9c\x90\xc7\x70\x2b\x46\xec\xcd\xd2\x5b\x61\xc0\x22\x43\x89\x5b\x46\x58\x9f\x63\xe7\x8f\x2c\x2d\x76\xbc\x50\x13\x5d\x43\xde\xdb\x51\xa9\x31\xd9\xeb\x5a\x16\xf6\x78\xc4\xfe\x9f\xa8\x35\x82\x03\x88\x29\x02\x03\xd3\x11\x0f\x8a\x2b\xd4\xc4\x86\xe0\xa0\x97\xec\x08\x41\x9a\xe5\x7c\x2e\x4a\xc9\xad\xa8\x96\xc7\xa8\xc7\x7a\x98\xe7\x2e\x5b\xd7\xc5\x68\x90\x60\x7a\x7f\xff\xdd\x2d\x4f\xf6\x4d\xcf\xfc\xd9\x27\xbc\xc5\x95\xc1\xf0\xa4\xd6\x16\x06\x1e\xa4\x6f\x11\x37\xd3\xf0\xa6\x88\x17\xe0\xc9\x4c\xd8\xe0\xbf\xbb\x73\xc0\x59\x2d\xa6\x70\xca\xf1\xe4\xde\xf1\x8c\x63\xa0\xf6\x07\xdd\xa8\xcd\x16\xc3\x6c\xe2\xef\x49\x09\xff\x39\x69\xb8\x31\x01\xfa\x41\xc4\x84\x64\x24\x89\x05\x93\x33\x30\x5b\x02\x3b\x77\xe4\x01\x9f\x8a\x41\x6e\x1d\x7c\x12\x7b\x4c\x76\x86\xb1\x6c\x49\xa8\xd9\x4b\x4a\x74\x78\x51\x8f\xb3\x0c\xb9\x27\xb4\x30\xad\x94\x60\x4b\xe4\x00\xce\x27\xae\x60\x3c\xa0\xf0\x2e\x51\xfa\x00\x59\x84\xb1\x80\xa6\xec\xf0\xf5\xe1\x5e\x88\x2f\x4e\xa7\xd6\x0b\x3e\xe5\xdb\xa1\xf4\x73\x65\xa4\xd5\x94\x95\xc2\x8a\x7a\x0e\x98\xe7\x33\x7d\x83\xbf\x23\xdb\x5a\xd0\x53\x82\xe0\xe2\xdd\x6c\x67\xda\x00\x57\xca\xf3\xa3\xe1\xfe\x42\xcc\xc5\x0d\x5f\x32\x5e\xeb\x46\x95\x24\x35\x05\x02\xfa\xa1\xf5\xe2\x8f\x5a\x89\xe8\x35\xcb\x7d\xae\x63\x61\xb9\xbb\x36\xaf\x46\xaf\xb6\x94\x35\xe8\xb8\x60\x3d\x53\xe2\x61\x34\x2d\x4b\xa1\x0f\xc3\xf1\x77\x66\x2f\xe3\xaa\x05\x2f\x7f\x52\x55\x1f\x59\xee\x03\x1e\x2f\x68\x3a\x04\x25\x4c\x4e\xc0\x76\x3b\xc0\xaf\x6e\x6a\x69\x45\x42\x1e\x8f\x26\xbc\x32\xc2\xa9\xee\x8d\x0a\x22\xec\x71\x2e\x82\xc0\x23\x5d\x26\xb4\x3d\xd4\xcc\x34\xe3\x3b\xde\x33\xba\x50\x70\xe4\xe2\x35\x0b\x07\xee\xd0\xdc\x72\xe5\xf2\xbc\x71\x76\x84\x4f\x3a\x89\x4d\x6b\x7b\xbc\x9f\xf8\x33\x9c\xa0\xd3\xac\xfb\xa8\x24\x1e\x92\x60\xb1\xc7\xd9\xbe\x11\x33\x7e\x2d\x0c\x33\x72\x2e\x2b\x5e\x57\x90\x86\x7c\x89\xe3\x63\xe3\xc6\xae\x07\xb7\xe8\x07\x9c\x90\x8e\x24\xe9\x6e\xeb\x52\xfb\x71\xb8\x75\x02\x1a\xe1\xc7\x85\xf5\x25\x7c\x51\x8a\xaf\x45\xd5\x18\x79\x7d\xd7\xdb\x44\x89\x55\x3b\xb0\xea\x36\x97\x5e\x50\xa4\xc4\x03\xf2\xe8\x5c\xc3\x70\xa4\xaa\xf4\x9b\x0e\x3c\x19\x95\x7d\xd0\xdc\x21\xee\x84\x17\x85\x30\xc6\x87\x6b\x2f\xd3\x10\xf2\x30\x87\x6f\x05\xab\x84\xdf\x98\xb7\x15\x37\x56\x16\x6f\x2a\x5d\x5c\x5d\x5a\x5d\xf7\x82\x03\x59\xd7\xbe\x85\xf0\x72\xf2\xcb\x25\x3b\x93\xe6\x2a\x49\x54\x22\x9f\x6a\x6a\x2e\xe1\xec\xaa\x19\x8b\x4a\xd8\xc3\x43\x83\x5c\x6e\xce\x8b\x19\xe2\xff\x00\x83\x53\x21\xdb\x8d\x14\x3e\xb7\xca\x7d\x7d\xa6\x94\x53\xf9\x82\xce\xeb\x1f\xf8\x8d\x11\x38\xfc\xb1\x1b\x3e\xc0\x15\x75\x01\xbb\xd8\xab\x9f\x02\x07\x73\x7e\xb6\x27\x1f\xc4\xc4\x7c\x76\x63\xec\x67\xdc\x3e\xc4\x56\x5e\x75\x98\xc8\x4a\x50\x61\x1b\x37\x61\x1f\x79\x43\xb7\x02\xf6\x6f\xa9\x1b\x76\xc3\x51\x47\x06\x8a\x38\x62\x9f\xe5\xe2\x35\x7b\xab\x4c\x53\x8b\x68\xdd\x68\x77\x25\x4d\x4c\x61\xf5\xca\x15\xec\x37\x2a\x20\x8e\xee\x91\xae\xc5\xde\x7e\xe5\xf3\x45\x25\xcc\x6b\x76\x20\xbe\xda\xef\x0e\x06\xec\xe0\xeb\xc4\xb8\xff\x29\x3b\x31\x07\x23\x76\x3e\x0f\x4e\x79\xa9\x26\xa2\xae\x85\x8f\xb1\xc4\x06\x8e\x35\x27\x5c\xf7\x5e\x8e\x0b\xc5\xeb\x3a\xd9\xad\xd4\xec\x06\xa1\x6e\x1c\xc1\x17\x75\xad\xeb\x90\xe2\x92\x2c\x03\xf0\x9a\x42\xcf\x17\xb5\x9e\xcb\xc4\xcc\x07\xc7\x7d\xaf\x81\xbc\x60\x7c\xe8\x52\xeb\xa9\x7d\x1a\x42\x43\x7f\x20\x92\x2f\x54\x97\xa3\x70\x3e\xf1\xb1\x16\xa8\x45\x92\x5a\x0f\xdd\xd1\x43\x6e\xf3\xa9\x17\x47\xc8\xd2\xed\x7e\x17\x72\x75\xd9\x8b\x52\x5c\xbf\x30\x25\x7f\x35\x80\xd7\x18\x8a\x31\xce\xc7\xc4\x0d\x3b\x78\x75\x30\x62\x97\x9e\x11\x0f\xd2\x31\xc6\xe7\x26\xba\x0e\x1d\x82\x9d\xfd\xe5\x01\x3b\xd2\x35\xf4\x5c\x70\xc5\x2a\xc1\xaf\xc9\xb6\x8c\xd7\x6d\x89\xea\xee\x71\xe7\x5c\xeb\xae\x69\xa7\xdd\x8b\x7a\x75\x15\x52\x57\x37\xd1\xb7\xf3\x26\x80\xba\xa1\x34\xa4\x89\xae\x09\x62\x28\x3c\x62\x84\x85\xab\x27\x55\xa6\x42\x3f\x02\x81\x65\x3d\x51\x3a\x3c\xf5\xec\xbb\x3a\xbe\x1d\xe8\x40\x4a\xfe\xda\x08\x76\x7e\x16\xb0\x3a\x44\x6d\xa4\xb1\xee\x1a\x97\x19\xeb\x92\xc8\xcf\x8e\x4e\xe6\xfc\xbf\xb5\x62\x6f\xdf\x5c\xd2\x00\x8e\x1f\x75\xa9\xb6\x52\x03\xfe\xdf\x4d\x2d\x1c\x17\xee\xc1\xdc\x43\x9b\x36\x43\x77\xdf\xb3\x33\x6e\x39\xf2\x75\x0a\xc4\x52\x91\x94\x3b\x96\x3d\x96\xaa\xa4\x9f\x12\x86\xfd\xd0\xbc\xd5\xed\xde\xc7\x6d\x51\xaf\xfe\xc1\x2f\x9f\xce\xf7\xc4\x83\x0b\x20\xe6\xd3\x0f\xba\xec\xcd\x88\x93\xa6\x9e\xf8\xfe\xc5\xad\xe9\x29\x7e\xcf\xe6\xae\x4f\xe6\xb4\xf7\x01\xfb\x24\x78\xc9\xdc\xfd\xa5\x7f\xfe\xe2\x74\xcf\xce\xb4\xaa\x13\x0b\xf1\x0b\xd8\x73\x1a\xbe\x99\x9f\x42\x9a\x44\x53\xba\x93\x03\xd7\x8a\x78\xc9\xb8\xd2\x63\x46\xd7\x61\xdf\x63\xff\xf2\xe9\x7c\x87\xa1\x7f\xf9\x74\xee\x47\xee\xfe\xa9\x27\x0f\x37\xe8\x9d\xc4\xb7\x28\xbd\xbd\x6b\x89\x5b\x91\x25\xc7\x9c\xb0\xb6\x48\xd6\x5d\x1e\x1b\xed\x4b\x12\xdb\xe7\x8a\x5d\x49\xd5\x21\xc1\x3f\xbf\x65\xae\x8d\x53\x28\x30\x56\x2d\xf1\x23\x5e\xce\x38\xa0\x2a\x84\x5c\x5f\xd8\x67\xb7\xf1\xc6\x71\x05\xbf\xe3\x4e\x09\x04\xda\xc6\xce\x04\x7a\x39\xcb\xd7\x3e\x76\x20\xb4\x58\xdf\xe0\x03\x44\x6a\x96\x44\x5f\x19\x06\x6e\x96\xc9\x01\x3b\x42\xab\x92\x0a\x3f\x51\xec\xba\xac\x24\x54\xe9\x70\xda\x7d\x1a\xac\x6a\x60\xc8\x7b\xbd\xf5\x3b\x8a\x1c\x41\x9c\x58\x31\x6e\xb1\x23\xf7\xdb\x0b\x30\x8e\x1d\x8f\x80\x5a\xc1\x83\x10\xc6\xdf\x12\x4a\x3e\x6d\x13\x4a\xf6\x26\x3f\xc0\x0e\xb8\x1b\xd3\x97\x2b\xba\x36\x6b\xb9\x22\xfc\xe0\x51\x74\x9f\x32\x63\xc4\x34\xce\x4e\xac\x11\xce\xd7\xd6\x27\xbb\x33\xc7\xbb\x1e\xae\xf2\xdb\x38\x5c\x2c\x24\xcb\xee\xc0\x3f\x63\x43\xcf\x87\x42\xaa\x8c\x87\x03\xc9\x42\x33\xf1\xf4\x5d\x12\xad\x21\x74\x37\xe4\xba\xee\xcc\x75\x29\xb9\xd9\x07\x0f\xc6\x9f\x88\xbe\xb3\xf2\xed\xfc\xa4\x90\x04\xc2\xd7\xac\xc3\x59\xec\x3c\xc8\x42\x2c\x66\x93\x3e\x2e\x71\xd7\xe0\xdd\x65\x6e\x09\x3c\x15\x8b\x19\x7b\x77\xb9\xe6\x1a\xc3\xda\xc3\xa8\x0d\xda\x07\x0f\x0d\xab\xe4\x44\x58\xb9\x65\x0a\xf7\x70\x91\xe7\x5a\x49\xab\xeb\xcd\xe8\x0a\xac\xd7\xe5\xf4\xdd\xf5\x65\xa8\xbe\x9d\xdb\xd9\x88\x4d\xf4\x21\xf9\x96\xb3\x42\x57\x95\x28\x2c\xa1\xe5\xc1\xf2\x86\x66\x6b\x94\x27\x41\xf6\x80\xd1\xd5\x9f\x40\x7d\x22\x45\xe9\x05\x6e\xee\x8b\x4f\x6f\x4f\xce\x3e\xbc\x1d\xcd\xcb\x3f\xcc\xf4\xcd\xd0\xea\x61\x63\xc4\x50\x76\x00\x3f\x7a\xbc\xe8\x45\xfc\x2c\x3a\x61\xf1\xb5\x0d\x32\x08\x23\xf8\x93\x4f\xcd\x66\x5f\x0c\x46\x2d\x80\xed\xc8\xfb\xa4\xb4\xb6\x03\x56\x73\x4a\xbf\xe6\x64\x7a\x6a\xaa\x0a\x57\xdb\xd6\x42\x0c\x52\x5b\xcc\xad\xa9\x21\xbd\x27\x76\x67\x43\x45\x36\xc1\xfb\x95\x21\x1e\xfe\xc0\xf5\xe1\x18\xdb\x65\x92\xd5\x55\x8c\x2d\xf3\x75\xbc\xcc\xbe\x47\xc3\x99\x9d\xb9\x55\xbd\x12\x4b\x06\x81\xc0\x13\x5d\xbb\xf3\x54\xe7\x67\x43\xd8\x02\xa6\xfe\xa2\x31\xa2\x1e\x11\xdb\x79\xf0\x65\xeb\x01\x50\xb6\x03\x2e\x64\x68\xb8\x6e\xcd\xe8\xeb\x08\x1a\x4e\xf2\x1a\x6f\xec\x4c\x28\x2b\x29\x81\x99\x56\x66\xed\x22\x52\x1c\xf6\x83\xaf\x5a\x47\x7c\xb4\x7e\x68\x66\xcf\x08\x60\x7d\xce\xa4\xbb\x35\x7d\x8f\xa3\x6b\x03\x79\x8a\x29\x99\x0f\xb9\x5c\x35\x2f\x35\x04\x6c\x20\xb8\x65\x76\xd0\x78\x39\x97\xea\x09\xde\xce\x42\xaa\x72\xdb\x3a\xb4\x0c\x60\xd0\x22\x17\xc5\xe8\x3b\x32\xe8\x07\xbf\x21\xf7\x9a\x14\x62\x69\x90\x07\x31\xf7\x1f\x76\xba\x7c\xf3\xa5\xf9\xb5\x1a\xe2\x5b\x86\x8b\x32\xae\xca\xb3\x33\x70\xd5\x83\xb7\x5f\x93\xd2\x03\xb8\xf8\xf6\xb4\xdb\xec\x81\xa5\xa1\xfb\xd5\x73\x1f\x64\xa1\xfa\xc8\x3c\x77\xe5\xde\x91\x66\x2e\xb4\xa4\xf0\xcf\x00\x36\x8a\x77\xd4\xeb\xcb\x6e\x3d\x16\xbc\xe6\x73\x61\x45\x8d\x21\x70\x14\x54\xa7\x28\x3b\xe1\xa7\x85\x50\x97\x96\x17\x57\xfb\x46\x59\x7e\xe6\xb8\xf7\xc7\x71\xef\xec\x0a\xf4\x07\x81\x20\xd7\x96\xa9\x17\x59\x2a\xe2\x42\x4f\x84\xc4\x04\xa4\xc3\x3e\x56\x8e\x80\x74\x97\x73\xd7\x88\x7c\x88\x86\x0d\x88\x74\x0b\xd0\x9d\x10\xc1\x8f\xab\xb0\x1f\x6e\xd8\xfd\x0e\x10\x09\xdc\xc5\x8f\x96\x34\xcd\xa9\xc3\xdc\x7d\x33\x96\x36\xde\x7b\x23\x2c\x5b\x88\x7a\x2e\x29\xad\x5b\x2b\x56\x50\x5a\x00\xf0\x35\xc7\xc3\xa8\xbb\x84\xe7\x29\xa6\x0b\xcb\x29\x67\x86\x8d\x85\xbd\x11\x42\xb1\x97\x2f\x5f\xbe\x04\xb9\xe4\xe5\x0f\x3f\xfc\xc0\x00\x66\xa2\x14\x85\x9c\xaf\x3e\x08\x4f\xfd\xd3\xab\x57\x23\xf6\x6f\x27\x1f\xde\x43\x54\xd9\xc2\x1a\x36\xd6\x76\x46\x3d\xbb\x07\xb2\xc6\x66\xc0\xfe\xe5\xf2\xa7\x8f\x11\x62\x29\xff\x15\x54\x90\x30\xbd\x3c\x44\xf0\xe5\xf7\xdf\x7d\x37\x62\x67\xb2\x86\x7c\x62\x09\x19\x10\x21\x08\x72\xe1\x03\x03\xa1\xa6\x5d\x3b\x83\x9f\x38\x08\x05\x09\xcf\xe5\x74\x06\x0b\xe0\x2e\x84\x56\x93\x4a\x16\x16\xe1\x4a\xf1\xea\xe3\x42\x13\xfc\x0e\xa7\x74\x2f\x92\x22\x60\x70\x03\x56\xc9\x2b\xc1\x26\xe6\xc7\x5a\x37\x8b\x98\xe6\x58\x0b\xe3\x64\xd9\x82\x2b\xc8\x2a\x81\xce\xe2\x5e\x19\x61\x1f\x35\x08\xa3\xa3\x21\x28\x3b\x83\xd0\xa6\x25\xa0\x0c\x02\x6c\xe3\x10\xcf\xc3\x82\xcb\x10\x38\x08\x3e\xf5\xac\x68\x48\xd0\x3d\xcb\x04\xa6\xd2\xe7\xae\x2c\x6a\xfd\x77\xdc\x2a\xa9\x7c\x16\x14\x49\xc8\x86\x64\x32\x4a\x3a\x55\x89\xcd\xd5\x67\xe5\x3b\x5e\x48\x19\xff\x49\xfe\xd4\xf9\x24\x4d\xb4\x83\xb4\x74\xac\xdc\x99\x61\xea\xae\x79\x73\xac\x03\xe1\x4e\x13\x95\xd9\x6b\xd4\x4a\x6b\x2a\xd1\x44\xe4\x87\x0a\x77\x51\x0a\x5b\xec\x03\x43\x71\x29\x01\x28\x29\x07\x97\xe1\x5c\x66\x51\x3e\x46\xd8\x86\x96\x06\x22\xaf\xdc\xbb\x85\x31\x94\x47\x34\xe7\xf5\x95\x53\x12\x88\x0a\x8c\x20\xea\xd9\x84\x1c\x26\x4c\x28\xbb\x46\x63\xf9\x9c\x2f\xb3\xac\x01\xf7\x92\xc3\xd1\xe8\x10\xaf\x89\xae\x11\x26\x18\xcf\xbc\xfb\xfe\x91\xf2\xa5\xf3\xa8\x74\xbe\xc0\x8a\xae\x60\xcf\xa1\x8a\x48\x3c\x8b\x76\xe6\xb4\x52\x5d\xc0\xc1\x7b\x56\xc4\xed\x57\x7a\xbd\x7b\xc9\xf5\x21\x4c\xa0\xc3\xa3\x7d\xcb\xab\xf7\x28\xab\xbe\x09\xad\x81\xd6\x98\x6e\x42\xd7\x62\xc3\xbd\xcb\x0c\xcc\x3b\xb1\xbe\x35\x43\x3d\x9c\x13\xe7\xfb\xa9\x1f\xe7\xa3\x7c\xbd\xac\xee\xe0\xd3\x67\x75\xe7\x13\xcc\x74\xc9\x49\x17\x91\x86\x54\x14\x08\x35\xfe\x62\xda\xcb\x93\xe6\x68\xe9\xb1\xe9\x57\xd3\xa2\x0f\x77\xc3\x4f\x37\xc7\x04\x7e\xb2\xb3\xe6\xbd\x13\x38\x69\x22\xa5\x8b\xac\x76\x50\x85\x76\x03\x90\x31\xfd\xe5\x19\xb1\x0f\x44\x6a\xf1\x90\xf1\xb1\xd1\x55\x63\xb1\x69\xfc\x31\xa5\xc3\xd0\xa9\x47\x59\x00\xe2\x1b\x1e\x4b\xa8\xb2\x8d\xd5\x13\xbb\x11\x68\xfc\xf4\xb8\x9c\xcf\x40\xc2\xf7\x08\x24\x1c\xa0\xaf\x4d\xc7\x52\x70\xe6\xde\x90\xbb\x0b\x23\xfb\xe8\x57\x46\xb2\xa3\x58\x81\xc8\xbb\xe3\xcf\x95\x15\xf5\x84\x17\xe2\x38\xd5\xbb\x42\xa5\xa7\x10\x22\xe4\xf3\x22\x66\x5c\x95\x15\x0a\xe0\x85\xa8\xe1\xec\x87\xd2\xca\xa7\x97\xe7\xac\xac\xe5\xb5\xa8\x0d\x3b\x7a\x23\x9c\xbc\x88\xf8\xa9\x9d\xb2\xab\xf6\x1b\x5b\x09\xc3\xd8\x97\xa6\x07\x9d\xf5\x0d\xd5\x83\x46\x9e\xf2\xa8\xe4\x7e\xc5\x65\xc2\x55\xc5\x25\x35\xa9\x2e\x3b\x72\x47\x09\x08\x34\xd0\x8c\xa5\x6e\x6a\xb2\xa2\x7b\xc8\xe6\x42\xd7\x4e\x5d\xc2\x8e\xb9\x61\xb5\x98\x3a\x69\xb6\xf6\x75\xec\x05\x2b\xaa\xc6\x7d\xb1\xd7\x70\xb6\xbb\x04\x00\x46\xd3\xec\x6d\xb1\x7a\x13\x92\xaa\xf5\xb5\x2c\x3d\xab\xc4\xb2\xfa\xa1\x60\xea\x82\x9b\x24\xd5\x26\x29\x6e\x91\x2c\x2c\xca\xe8\xc0\x50\x43\x12\x6b\x16\xec\x9f\x1a\x85\x35\x60\x5b\x74\xa8\x4c\xd3\x87\x08\xeb\x52\x5c\x34\xe3\x4a\x9a\xd9\xe5\x8e\x26\xc4\x75\x5d\x60\xb0\xc2\x8a\xd7\x6f\xa3\x25\xd1\x08\x65\x24\xb0\x3c\x47\xc6\x1d\xd3\x95\x4e\x8e\xd2\xb0\x88\xbe\x75\x7a\x20\x35\x64\x7f\x54\x82\x10\x0c\xdc\x4f\x1f\xe3\x38\x28\x29\x0d\x31\x4b\x4a\xf1\x45\x2d\xb2\xef\x0b\x5e\x55\xa6\x9d\xb0\xeb\x29\x26\xca\x1e\x3e\x51\x0d\xf7\x54\xba\xed\x0e\x45\x97\x5a\xe0\x98\x1b\x27\x66\xd8\x5c\x63\x1a\x8f\x02\x70\x5e\x7c\x08\xa0\x57\x7c\x83\x24\x91\x11\xd2\x95\xe1\xc8\xec\xb9\x2a\xed\xb3\xb9\xf4\xfe\xcc\xa5\x77\x8d\xc3\x33\xa1\x40\x1d\x4f\xb2\xa1\x33\x58\xd2\x40\x4a\x3d\xc9\xdd\x12\xd4\xb1\x57\xb7\x02\xbe\xf3\xc4\xda\x5a\x8e\x1b\xdb\x1f\xef\xad\xd5\x1c\xd8\xb4\x53\x44\xe0\x16\x0f\x69\xf6\x45\x72\x44\x23\x72\x7a\x4e\x3e\xe3\xdd\x8f\x3c\x07\xd8\x0d\x7e\x79\x68\x58\xa9\x8b\x26\xc0\xc6\xc2\xa2\x45\x07\x5a\x17\xf4\x44\xd6\xf7\x5e\xf5\x87\xf4\x4a\x5f\xb2\xf5\x78\x95\xfa\x46\xdd\xf0\xba\x3c\xb9\xd8\x12\x7d\x9f\xb3\xf3\xd8\x2a\x15\x94\xfc\xd7\x50\x60\x94\x8f\x75\x63\x23\x74\xe8\x6f\xc7\x5e\xbd\x4e\x4d\xb7\xda\x91\x86\x8e\xf6\xe8\xbe\x8a\xfe\xb3\x89\xfb\xd9\xc4\x9d\x7d\x76\x31\x71\x9f\xa3\x89\x3b\xc5\xc1\xcd\xae\xab\x87\x57\x90\x55\xd7\xd8\xde\xfb\xb4\x92\x9e\x45\x02\x83\xd2\x54\x3b\x8e\xbf\x25\xc0\xe1\x15\x89\x7b\x9b\x08\x7d\x9e\x02\x01\xcf\x7e\x7c\x8b\xea\x3d\xd9\x49\xbb\x97\x40\xc7\xcf\xa6\x1a\xa5\xb7\x95\x44\x07\xa9\x21\xa9\x61\x3e\x20\x14\xe8\x01\xe9\x5d\xaa\x8c\xd5\x41\x11\x84\xba\x47\x05\x64\xfc\xf4\x5c\x7c\xd6\x7b\x03\x58\xcf\xfa\xe4\xf8\xe9\xbb\x1b\x6c\x87\x5a\xe5\xf8\x79\xe4\x8a\xe5\xf8\xe9\x6d\xfb\x66\xfd\xab\x97\xaf\x99\xee\xfd\xd6\x30\xdf\x71\x6a\xbb\x9b\xf5\x77\x35\xe7\x0f\x62\xe5\xcc\xa7\xcf\xd6\x9f\xcd\xf9\x2b\x9f\x07\x34\xe7\x27\x84\xdb\x13\x83\x35\xa6\xfd\xd4\xdc\xe6\xed\xfb\x63\xe1\xc5\xca\x51\x44\x5f\x73\x47\xce\x5b\xf6\x63\xb9\x26\x74\xab\x1e\x8e\x46\x87\x87\xde\xde\x4f\xe7\xb3\xb1\x93\xe1\x9f\x98\x50\x85\x2e\x71\x53\x5d\xff\xb5\xb1\xc0\xf4\xa3\x9a\x9e\x8e\x65\xee\xdf\x95\xba\x66\xa1\xef\x7e\x5b\xd2\xe3\x06\x7b\x48\x80\x77\x77\x62\x91\x91\x31\x06\x88\x01\x9a\x60\x40\x15\x22\x0e\x19\xab\x9b\x60\x61\x9f\x50\x6b\x0b\x2a\x8a\x1c\xe1\x97\xa3\x62\xd1\x0c\xe8\x81\xd1\x5c\xcc\x75\xbd\x1c\x84\x87\xdc\x8f\x59\x2b\x7a\x02\xb1\xa7\x8a\xa6\xae\x85\x82\xfa\x26\x4f\x95\xbf\xfa\x25\xb8\x47\xf6\x1a\x56\xbd\x5b\x76\x5b\xfc\xe4\xdb\x1a\x7d\x00\x60\x92\x8a\xd5\xea\x26\x01\xd9\xc4\x0c\xa2\x9f\xc3\x7d\x2b\xd4\x35\xbb\xe6\xb5\xe9\xba\xe6\x6c\x57\x8e\x5a\xca\x6b\x69\xba\x40\xfe\x6f\x98\xdc\x65\x30\xfb\x00\xec\x60\x63\x17\x8d\x25\xea\xe4\xcf\xae\x47\x6a\xca\x8b\xce\x45\xc1\xe1\xd5\x6d\x75\xda\xda\x9f\x27\x5a\x48\x26\xff\x74\x2a\x2b\x93\x7f\xfa\x15\x99\x59\xdf\xb6\xe7\xd6\xdf\xa1\x7e\x53\xfb\xe3\xb7\x76\xf7\x3b\x12\x99\x4c\x04\x06\xf3\x82\xd9\x3d\x5c\x02\x30\x86\x9f\xc9\x5e\xa9\x08\xbe\x4d\x1e\x2e\x69\xc5\x7c\xa1\x6b\x5e\x2f\x59\x49\xb6\x86\xe5\x9a\x8c\xd0\x24\x25\xf4\xce\xd0\x30\x30\x8e\x52\xd6\x7b\xca\x46\xe8\x91\x0d\x2a\x4a\xd9\x6c\xac\x04\xbf\x69\xd9\xb0\x55\xba\x68\x37\x80\x06\x46\x48\x62\xde\xdd\x49\x8f\x79\x60\x45\x5e\x5c\x51\xc5\x20\xbf\xaa\xc8\xfb\x93\x24\x97\x83\x83\x16\x0e\x34\x98\xc7\xc0\xf7\x47\x45\x57\xfd\xc3\xd8\x77\x66\xca\x42\x6f\x08\x85\x05\x1c\xd1\x83\xc7\x4e\x22\xf9\x00\x6c\xf0\x81\x76\x89\xf5\xcc\x6c\x93\xff\x2d\xa0\x40\x58\xef\xd8\x78\xdf\x30\xc0\x41\x6b\x90\xcc\x43\xd9\xb4\x4a\x17\x89\xef\x39\xe3\x50\xb0\x0d\x6f\xfd\xe1\xf7\xb6\x7b\xb7\x19\xae\x57\x94\x2f\xc0\xe8\x53\x19\xf4\xeb\xc9\x02\xa0\x2d\x41\x8a\x87\xc5\x0c\x1b\xf0\x39\x29\x22\xd8\x18\xf7\x26\x40\x9e\x4f\x9e\x89\x2f\xba\xf1\x08\x9b\x36\xa9\xf3\x96\xeb\x1e\xee\x97\xcb\x30\xb3\xa8\xb7\x41\x0a\x84\x17\xd4\x4d\x03\x62\x22\xbd\x85\xc4\x25\x3d\x01\xdf\x55\x2c\x8b\x16\xc0\x1d\x57\x8e\x99\x92\x55\x7e\xce\x3c\x96\x5d\x98\x78\xa3\x28\xd0\xe0\x01\x0f\xcd\x13\xe6\x83\x9d\xb9\x5f\x7f\x9e\xd7\x93\xd3\xdd\x81\xbf\x85\x78\x8c\x1e\x1c\xe2\x20\x06\x71\x64\x2c\x22\x45\xc7\xcb\x03\x3a\xb8\x8f\x19\x08\x37\xcf\x7b\x86\x3e\x07\x0d\x97\x58\x47\xb1\x2c\x28\x67\x57\x66\xa8\x97\xd8\x2d\x1e\x40\x88\x6f\x1d\xba\xff\x78\x4d\xd8\x9b\xf5\xc7\x62\xa2\x63\xa1\x14\x54\x8c\x28\x2a\xb7\x14\x95\xb0\x10\x64\x2b\x02\x60\x29\x7a\x86\xe7\xfa\xda\x9d\xe9\xff\x50\xec\x8b\x87\xee\x97\x93\xd7\x8c\x1f\x67\x99\x10\x54\x7c\x46\x09\x51\x62\xa8\x6e\x15\xdf\x53\x37\xca\x0c\xd8\xf8\xd8\x87\xa5\xc0\xc5\x53\x4e\x3a\xac\xbc\xe0\x8b\xea\x75\x2d\xdc\x02\x40\xf6\x71\xad\xe7\xcc\x28\xbe\x30\x33\x6d\x41\x43\xe4\x0b\x5e\x48\xbb\x64\xb6\xe6\xc5\x15\x54\x2a\xaa\x05\xbd\x6e\xc0\x8a\x63\x8a\xef\x4a\x97\x2f\x8f\x1e\xb6\xb3\x5a\x37\xd3\x19\x04\xc4\xe2\x53\x45\xc5\x8d\x9f\xfd\xda\xf6\xa4\xf4\x18\x56\x62\xa1\xe2\x00\x1e\x58\xeb\x6b\x69\xa4\x26\xa3\xaf\xef\xf7\x22\x00\xc4\xa1\x21\x19\xcb\xff\x1e\x19\x21\xd8\x5b\x7f\x24\xf0\x97\x4b\x14\x6d\xd0\xc0\x51\xe7\x31\x02\x3a\x20\x9b\x2b\xc2\x45\x88\x74\x2e\xf8\xb0\x90\x6f\xba\x91\xaf\x7d\xe9\x71\xd8\xae\xf5\x63\xd2\x35\xf8\xef\x3d\x82\xa7\x50\xa5\x4e\x9c\x97\x27\x17\xe7\x26\x55\x4a\xf0\x6c\x11\xfc\x1d\xfc\x50\x69\x35\x4d\xd1\x04\xe2\xc9\x74\x14\x55\x41\x95\x97\x6b\x59\x36\xbc\x42\x5a\x4a\x83\x39\xbd\x3c\xc7\xe6\x72\x3a\xb3\xc3\x1b\x01\x46\x19\x64\x39\xf1\xce\xf8\x97\xca\x95\xa0\x1d\x69\x80\xf6\x5a\x32\x2a\xa0\x81\xcb\x0d\xed\x86\x2f\x01\xbd\x86\x22\x4d\x32\xbf\xa9\xc7\x17\xc3\x2e\xd6\xad\x38\x0c\xef\x24\x54\xed\x70\xd2\x03\x58\xad\xdc\x12\xc3\x49\x5d\x1d\x9b\x5b\xf8\x04\x0e\x30\x7c\x4d\x05\xda\xb8\xdb\x20\x27\xe3\xdd\xae\xd2\xdc\x83\x6c\x76\x1d\x37\xf9\x33\x55\x50\xec\x29\x23\x1c\xfc\x92\x58\xcf\x12\x7f\x87\xbb\x36\x5c\x95\x43\x5e\xb9\x93\x73\xf1\xf3\x29\x05\x3a\xe3\x45\xc8\xfc\xf9\xbe\x18\x92\x54\x01\x3d\xdb\x89\x0e\x6b\xaf\x00\xa4\xc3\x8f\x45\x09\x44\x23\xad\x1b\x79\xe3\x14\x65\x5f\xdc\xf9\xe7\xd3\x01\x93\x23\x31\xf2\x7f\x85\x47\x3d\xd5\xb2\x7a\x8a\xd1\x80\x21\xd4\x13\xce\x1d\x0c\x25\xb5\x49\xa5\x6d\xff\xf6\xcf\x6e\x90\xee\xd7\x3f\x0f\xff\x39\x01\x1d\xfd\xf3\xdf\xa8\x92\xf4\xdf\x5a\xdf\xa6\x21\x65\x01\x7c\xff\x6f\xbe\x8c\x37\x41\x57\xff\x8d\x6a\x72\x41\xe1\xea\x11\xd4\xa5\xbe\xe6\x95\x2c\xf1\x34\xc2\xbb\x6b\xf1\x77\x6f\x5f\x84\x65\x0a\xb6\x9d\x82\x5b\xa1\x80\x50\xfb\xdc\x0c\xa5\x2d\x36\xa7\xea\xb4\x6e\xfc\x47\x60\x19\xc0\xdc\xb2\x01\xb3\x5a\xc3\x75\xc4\x2b\x7f\xa2\x98\xf0\x25\x3b\x71\xae\xb0\x1c\x9c\xe2\xd5\x3c\xef\x71\xdd\xba\x15\x0e\x99\xb8\x6e\x1c\x30\xb6\x7f\x54\xda\xfe\x63\xd8\x7e\x1f\xa9\x01\x0c\x46\x33\x7e\xad\xa5\xc7\x21\x77\x37\x45\x61\x61\xc7\x80\x8c\x3d\x5e\xb2\xb9\x34\x96\x5f\x89\x11\xbb\x74\xbc\x25\x75\x8a\xe1\xea\x29\x06\x40\x96\xa2\x64\x8d\xb2\xb2\x82\x5f\x63\x3f\x6e\xc8\x29\xcf\x39\x9f\x30\xd3\x14\x8e\xb6\x2e\x6a\x31\xf4\x5c\x8c\x9e\x5a\xa1\x05\x71\x2e\x83\xb0\xd9\x33\x8e\x2a\xc1\xa2\x84\xa6\xb0\x1e\x5c\xd1\xf1\x5a\x09\xe7\x72\xe3\xd4\xaa\x88\x9c\x0b\x16\xd3\x8c\xd8\x47\x60\x56\x95\xf7\x0c\xa3\x76\x42\x76\x4c\x25\x0a\x61\x0c\xaf\x97\x03\xc0\x77\x97\x01\x13\x9c\x22\x78\x80\xa3\xce\xb9\x42\x74\xf5\x5a\x14\x5a\x19\x5b\x37\x85\xc5\x72\x7b\xe3\x5a\x5f\x09\x15\xa2\x06\x57\x8b\xdd\xc7\x30\x1a\x70\x7b\x69\x56\xcc\xb8\x9a\x26\xe5\x6a\xe6\xbc\x84\xb5\xff\x6b\x90\x72\xfc\x7c\xdc\x0a\xf0\x89\x13\x2c\xa4\x85\xa5\x18\x3b\x3e\x12\xac\xb1\xff\xa1\x02\x2c\xcf\x20\x9a\x4b\xdd\x94\x64\xb5\x85\x76\xf5\xa2\x5f\xac\xa7\x6d\x6f\x08\x6c\x7b\xcf\x71\x60\x73\x61\x79\xc9\x2d\xdf\x21\x16\xec\x43\xac\xb1\x47\x7e\x48\xaa\x73\x1a\xfc\x93\xc4\x87\xbc\xb8\xa5\x17\x32\x4d\x83\x82\x9b\x38\xf3\x2b\x0f\x89\xd7\xd6\x9d\x29\xf2\x17\x60\x88\x17\xc8\x33\xbe\x88\x99\xeb\xde\xf7\x86\xe4\x22\x56\x68\x8c\xe4\xa4\x9b\x37\xaa\xa7\x21\xd6\x2d\xfd\x0e\x6b\xf4\x39\xba\xcc\x8a\x3c\xcc\x6b\xad\x08\x82\x5c\x42\x28\x2b\x6b\x91\x66\x9d\xd1\xd2\x35\x0a\x0f\x79\x6b\x11\x61\x95\xa7\xc2\x9a\x18\xa8\x82\x74\xd8\x11\x17\xe2\x77\xa4\x93\x02\x91\xa6\x85\x25\xb5\x6e\xbd\x2c\x84\xcb\x6e\x34\xd1\x59\x47\xf9\xef\x65\x5d\x77\xb1\x3d\x63\x55\x81\x0f\xba\xec\x63\xae\x6e\x81\xf1\xc7\x2e\x62\x18\x27\x06\xe4\x1a\xd0\xed\xf1\x01\x70\x5a\x99\x2c\x77\x0e\x89\xdc\x8c\x5f\xef\x6e\xab\x8a\x32\xd2\x30\x20\x1a\xc3\xeb\x86\xf0\xba\xe1\xab\xee\x36\xbd\x3e\x81\x20\xfe\xd3\x39\x20\x24\x7f\x49\x2f\x03\xaa\x23\x29\x97\x3d\xad\x9e\xad\xa4\xe4\xd0\x03\xd1\x7c\x72\x26\x06\x07\x2e\x25\x3c\x08\xe9\xa8\xc5\x6b\xf6\x8f\x19\x97\x27\x69\x2a\x68\x4a\x18\xb0\x7b\xe4\x55\xa7\x11\x6d\x85\xcf\x41\xcf\x1f\x3f\x6e\x75\x06\xe2\xc5\x7a\x8d\xc2\x07\x06\x07\x91\xcf\x89\x67\x35\xd8\xd0\x7c\x1a\x82\x3b\x5e\xb5\xae\x2a\x51\xc3\x14\x48\x7b\x6a\x39\xd3\x01\xd2\x14\x4d\xbb\x83\xa0\xa2\x06\x19\x53\x89\x9b\x20\x4c\x70\x83\x08\x2e\xde\xf1\x25\xa8\x7e\xde\xc6\xfe\xa8\xba\x91\xfb\xfd\x44\x2d\x71\xf0\x67\xc9\xe2\xa2\xf2\xc9\xa6\xee\x55\x4e\xee\x54\x7c\x5c\x39\xce\x97\x6c\x40\x78\x4f\x8b\x94\x5b\x9d\x3c\xf5\x49\x4c\x48\x6b\x4c\xbf\xea\xd6\x16\xf9\x40\xd6\x70\x14\x23\x59\x7c\x71\xbb\x88\x5c\x42\xab\x9e\x3d\x92\x7b\xc0\x5b\xbd\x65\x09\xb5\xeb\x46\xd0\xd9\x81\xb7\x93\x0b\x6f\x17\x27\x1e\x64\x7f\x4a\xd5\x25\x62\x2a\x36\xb8\xb5\xce\x49\xfb\xb3\x8b\xd7\x0f\xc2\x6a\xc0\xdb\xdf\xcf\x85\x93\x97\x55\xbf\x38\x87\x2e\xbc\xee\x30\x85\x3f\x3c\x67\x0c\x3e\x8e\xb1\x70\xb7\x2f\xe6\x75\xc3\xbe\xa7\x6d\xd7\x04\x3e\xc4\x2b\xf0\x57\x00\x8f\x25\xa3\x76\x28\x8c\x56\x0b\x08\x5c\x81\x37\x8e\xa0\x7a\x02\x57\x4b\x92\x38\xec\x4c\xd6\xe5\x70\xc1\x6b\xbb\x44\x35\x77\x90\xbd\x2d\x64\x03\xf4\x9a\xf8\x8e\xde\xa7\x6e\x48\xcd\x1b\x57\x18\x26\xef\xad\xd9\xe4\x4c\xd8\xb8\xae\x0f\x31\x9f\xee\xf9\x06\x6b\xe7\x93\x22\xa1\x7a\xcd\xf5\xd1\xe6\x93\x51\x96\xbb\xf3\x37\x47\x9e\x4c\xee\x29\x46\x76\x95\x56\xda\xd2\x69\xd0\x76\x90\x46\x40\x71\x73\x3d\x0d\x9c\xbe\xcc\x63\x69\xf4\xc4\x00\x49\x12\x8d\x0f\xf9\xa1\xc2\x4c\xee\xd0\x27\x6f\x49\x9b\x86\xfb\xc1\x8e\x94\x56\x78\x67\xf0\xd9\x63\x8c\x75\xda\x60\x3d\x83\x47\x02\xb7\x49\x75\xb5\xe4\x8e\x7a\x36\x26\x55\xe9\x36\x0d\xc8\x32\x68\x71\xa6\x29\x0a\x21\x82\xde\x9f\xd6\xd2\x89\x77\x9a\x86\xec\x6b\x72\x1a\x0d\x68\x33\xc6\xf2\xaa\x8a\xfa\x36\x2d\x94\x06\x4e\xec\x6d\x94\x09\x83\xce\x32\x82\xc8\xf4\x00\xd5\xde\x31\x3e\xa7\x51\x05\xc6\x1a\x48\xbb\x4c\x71\xf8\x33\x61\x04\x14\x1d\x83\x6a\xb8\x9c\xa0\x65\x2c\x51\x58\xc2\x62\x02\x51\xa2\x5a\xf3\x33\x5f\x31\x05\xa4\x70\x02\x91\x70\x14\x68\xcc\x8b\xab\x1b\x5e\x97\x50\x73\x78\xc1\xad\x44\xfc\xf2\x01\x72\xc5\x94\xc9\xa9\xc3\xc3\xd4\x95\x23\x55\x9b\xff\xa6\x03\x39\x4a\x46\xbd\xc2\x97\x8f\x03\x3f\x36\x22\xa0\x6b\xc7\x81\x31\xde\x58\x3d\xe7\x56\x16\xa0\x9e\xcb\x49\x62\x19\x9d\x07\xb4\xc6\x56\x45\x45\xa0\xc8\xa1\x36\xff\x2f\xed\xc1\xdf\x3a\xf0\x64\xac\x7e\x9a\xeb\xc7\x95\x10\xf5\x50\xb9\x1f\x3c\x5a\x60\xc1\xaf\x85\x60\x72\xee\x04\x2c\x0e\x05\x49\x26\x21\xef\xca\x9b\x8b\x6f\x5b\x14\x27\x45\xfe\x02\x36\xfa\xe4\x29\xb4\x31\x38\x0d\xd4\x30\x7b\xa3\x83\x3a\x17\x2d\xa1\x94\xb8\x34\x68\x89\x1c\xd4\xc6\x5d\x35\xb7\x2c\xc9\x3d\x1a\xb8\xb3\x73\x23\xaa\xca\xfd\xff\xb6\xdb\x64\x46\xeb\x46\x84\x95\x81\x0d\x2b\xa5\x69\x95\xf7\x3e\x2a\x6b\xbd\x58\x90\x7d\x69\x7e\xdc\x1e\x11\xb8\x5d\xea\x6b\x61\x92\x0a\xd6\x28\xb3\x4d\x85\x0a\x25\xd8\x09\x14\x04\x08\x4a\xfb\x15\xd9\x36\xae\x1d\x5c\xba\x5c\x68\xc4\xbe\x7d\x79\xe8\x57\xd0\x45\xdd\x4a\xf9\x03\x63\x46\x98\xb4\x7b\xcc\xbe\x50\xe1\xa7\x70\x67\x43\x64\x64\x27\x99\x16\x4d\x61\x24\xd6\x8e\xd8\xd1\x49\xb5\x98\x25\xbd\xa6\x52\x64\x88\xb8\xce\x47\x9a\xbd\xef\xb4\xd6\xc6\x7c\xf4\x4d\xfa\xbc\xfa\x59\xc2\xec\xf8\x79\x96\x30\x9f\x25\xcc\xdf\xb7\x84\xe9\xe7\x03\x34\xe6\x8e\x93\x0a\xec\x37\xa7\x75\xb7\x4d\x8f\x7d\xd4\x96\xdc\x22\x20\x82\xf0\x8d\x9a\x36\x07\x42\x77\xc3\x97\x23\x25\x2c\x65\xf3\x7a\xa3\xca\x27\xdf\xdf\x8f\xb5\x63\xc6\x24\xbb\x25\xc7\xdc\xdf\x19\x9f\x47\x9c\xbc\xc5\x6a\xe4\x0f\xd1\x4b\x03\xdf\x1f\x1a\xf2\x51\xb8\xdf\x21\x96\x3e\xed\xa0\x10\x23\x76\x29\x3c\xa8\x67\xf6\xf2\xd5\xac\xd1\x52\x58\x2e\x2b\x13\x19\xc2\xe7\x0d\x0c\x66\x77\x82\x7f\xdf\xa7\x24\xc4\x8c\xee\xaa\x83\xc4\x40\xe9\x24\x24\x23\x8d\x28\x8a\x0f\x6c\x32\x81\x9e\x4f\xd8\x27\x51\xe8\x6b\x51\xe3\xca\x40\xf5\x60\x27\x67\xbf\xe3\xb2\x72\xeb\xe2\xd7\x27\x9a\x96\x00\x96\x39\x37\xec\x27\xf6\xbc\x70\x28\x69\x13\xe6\x34\x28\x4a\x17\x76\xcf\x93\x8b\x7d\x51\x8b\x6b\xa9\x1b\xe3\xe3\x9e\x1a\x8b\xc4\xd8\x58\x92\x6c\x67\x72\x1a\xd0\xfd\x43\xa0\x44\x2d\x0a\x5d\x97\xf1\xf0\x19\xcb\x6d\x63\xf2\x64\xab\x02\x6d\xf1\xfb\x33\xef\x86\x75\xbc\x67\x19\x60\x37\x7e\x0b\xd3\xed\xd5\xa2\xed\x1d\x07\x99\xd5\x40\x5e\x63\x42\x67\x52\x1a\x83\x71\xcd\x52\xe1\xc2\xbb\xcd\x1e\xf9\x9f\xb0\xf1\x20\xee\x71\x74\x5b\x4a\x93\x94\xf9\x0f\x3e\x40\x09\x52\x2a\x77\xd7\x36\x51\xc7\xc2\xa5\x85\x63\xe6\x85\xbb\x33\xd4\xff\x3e\xd1\xbb\x4e\x2a\x27\x93\x22\x11\x48\x2e\xee\x1a\xff\xa2\x9c\xcf\x1b\xeb\xce\xeb\x88\x9d\x63\x26\x0b\x48\xb6\xa4\x30\x4d\x62\x76\x86\xa8\x4d\x07\xaf\x60\xfa\xd9\xc5\x68\xcf\x76\x31\xdc\xaf\x6c\xd4\xa7\x74\xc9\x53\x54\x0a\xa7\xdd\x81\x6f\xde\xed\x8e\xf7\xdd\x67\x4f\x77\x48\xab\x5f\x37\xcb\x9e\x07\x18\x3f\xbb\x88\xb2\xf8\xe9\x29\x9f\xe2\x67\xb7\x5b\x83\x9f\xfe\x52\x07\x7e\x56\x65\x8f\x56\x11\x7f\x2f\x83\x64\x3b\xb3\xd0\xe5\x68\xcd\xdd\x09\x71\x1c\xba\xa4\x20\x8d\xdc\xfe\x82\x29\x5f\xe7\xae\xfb\x2b\x1f\xb8\x14\xe8\x2c\x95\x4c\xab\xc0\x92\x22\x4b\x81\x28\xb7\x74\xe7\x76\x98\xd9\x8e\xe2\x4e\x2b\x20\xd1\x91\x92\xe1\x9c\x2f\x86\x57\x62\xd9\x7b\x5b\x76\x38\x05\xab\x2f\xc7\x79\xcc\xf9\xa2\x47\x3f\x18\x40\x7b\x07\x4a\x7a\xf8\x1e\x43\x70\xf1\xcb\x31\x31\x5e\x1f\x15\x1c\x23\x92\x0b\x3d\x5f\x34\x56\x24\x0c\x9a\x58\x69\x6f\xae\x95\x81\x90\xbc\xc0\x3a\x7a\xc3\xd0\xed\x30\x12\xb9\x0e\x05\x70\xd2\xcf\xce\xd7\x7f\x57\xbc\x8d\xf4\xf3\x84\x03\x80\x5b\x93\xed\x9f\x0c\xc3\xee\x98\x10\xc3\xee\x92\x14\xc3\xf6\x99\x18\xc3\x42\x7a\xdd\x5d\x6e\xcc\x27\x9f\xd8\xd7\xba\x33\x24\xc2\xde\x76\x67\x32\x7c\xa7\xd0\x8f\x34\xbe\x20\x37\x85\x97\x85\x3b\x00\xae\xd9\x34\x3d\x8b\x6e\x2b\xd8\xac\x31\x86\x4c\x7c\x0d\x45\x18\x12\x35\x09\xb4\xff\x1b\x69\x50\xb1\x51\x4c\xce\x17\x08\xcc\x08\xb7\x6e\xe8\x25\x23\xb2\x09\x87\x91\x14\x10\x4b\xc3\xc4\x57\xb0\x8c\xe3\xcb\x9e\x2f\x38\x7b\xbe\xe0\x9d\xdb\x3f\xe6\x05\xc7\xfc\xb4\x3e\xe9\x93\xad\xba\x8e\xd8\x9c\x20\x53\xf8\x58\x54\xec\xd7\x46\xd4\x4b\xe6\xb4\xcd\x18\x85\x0d\xc5\x28\x9c\xe0\x82\x71\xcc\xe4\x59\xea\x2e\xb9\x3c\xa0\xa2\x05\xd2\xdd\xdb\xaf\x4e\xd5\x06\xd4\x81\x3b\x90\xbd\x76\x57\x39\xb0\x0c\xae\x56\x58\xc1\x54\x95\xc6\x40\xb0\x4c\xb9\x76\x3a\xd7\xc9\xc7\xb3\xdd\x2c\x16\x8f\xa1\xc6\x9c\xdc\x32\x41\x5c\x88\xf0\x4b\x5e\xfb\x33\xb8\x3c\xd8\x95\x58\x0e\x28\x5c\x91\x6a\xed\xf8\x87\x31\xea\x36\x07\x80\xef\x0a\x2c\xb6\x6e\x81\x1e\x5c\x03\xea\x0a\x19\x9e\xb7\xf2\x8b\xf0\x80\xba\x53\x0f\x68\xf1\xf4\xb3\x09\x66\x1c\xcf\x04\xe0\x25\xfb\x2c\xb4\x70\x0c\x20\xf3\x0e\xa8\xc5\x83\xaa\x34\x0c\x90\x7d\x71\x61\xef\x3c\xd5\x70\x4c\xb3\xfc\xa9\x2b\xb1\x3c\x34\x84\xf1\xa0\x95\x99\xc9\x85\xaf\xe6\x03\x94\x80\x4e\x2e\xfb\x19\xc2\x38\x7d\x17\x78\xe7\xcf\xd5\x80\x7d\xd4\xd6\xfd\xef\x2d\x44\x74\xc3\x59\x3f\xd3\xc2\x7c\xd4\x16\xbe\x79\xf0\xc5\xc2\xe1\xde\x79\xa9\xc8\x1d\x4a\x86\x22\xc8\x3c\x80\x6c\x5a\x1f\x29\x0c\x4b\x42\x41\x64\x61\x59\xa5\x61\xe7\x8a\xe9\xda\xaf\x89\xf5\xa5\x1e\x0c\x75\xe1\x5d\x3d\x89\x93\x7b\x4d\x1f\xb4\x94\xba\xce\x56\xf2\x96\xee\x82\x1b\x5b\xfa\x5f\xc0\x46\x0e\x21\x09\x21\xbc\x19\x0a\x16\x70\x2b\xa6\xb2\x60\x73\x51\x4f\x01\xcd\xa3\x98\xed\xbe\x41\xfd\xe9\x36\x7e\x76\xa2\xde\xe9\x8b\x7b\x9f\x0c\x60\x75\xef\x21\xc0\xfc\xae\x0c\x13\x7b\x41\x16\x31\xe7\x0b\x77\x28\xfe\xc7\x71\x02\xd8\x97\xff\x85\x02\x23\x66\xc4\x4e\x7c\x79\xfa\xf4\x37\x32\x17\xa7\xdd\xb8\x1e\x9c\xc8\xff\x6b\x23\xaf\x79\x25\x30\xed\x82\xab\x00\xba\xae\x27\x2b\x6c\x7a\x40\x55\x46\x1c\x95\x0a\xe6\x99\x83\x2b\xb1\x3c\x18\xac\x1c\xa4\x83\x73\x75\x10\x21\x75\xb2\xa3\x13\x18\x1a\xd8\x24\x0f\xe0\xb7\x83\x7d\x73\xf6\x47\x12\xed\x77\x38\x25\x64\x79\x3f\xad\x38\x7a\x6a\x76\xf5\x87\xb4\xfb\x59\x07\x97\x7d\x99\x3c\x13\x3d\x59\x94\x64\xb3\x77\xc7\x01\x24\x63\xf6\x0f\x08\xef\xb5\x7a\xd7\x54\xeb\xae\x3b\xcc\xd6\x5a\xf8\x57\x00\x99\xf2\xa9\xb6\x19\x8a\x41\x8c\x45\xdb\xb0\x5e\x3f\x83\x03\x47\x4f\xd8\xbb\x08\x83\x0d\x26\x78\xc7\xb4\x29\xf9\xd6\x29\xc2\x52\x15\x55\x43\xbe\x1b\x68\x8a\x8e\x84\xfb\x5f\x9c\x3b\x1c\xaa\xd8\x81\x3f\x4d\x3e\xf6\x6d\x25\xcf\xaa\x1d\x09\x04\x81\x61\x21\xf6\x05\xd7\x6a\xdf\x73\x9d\x6c\xc9\x6a\xc9\xa1\xd3\x8b\x5c\xf6\x78\x27\xc7\xb5\x60\xa7\x33\xae\x94\xa8\x12\x6c\x12\xb2\x85\x84\xe2\xa3\x20\x90\x50\xc9\xd1\xc3\xbc\xe6\xa8\xa7\x6f\x2a\x20\xe1\xc4\xa4\xb3\x3d\xc1\xf4\xff\x96\x4a\x80\x6e\x46\xaa\xef\x5b\xfc\x13\x81\xb5\x67\xfa\x86\x95\x9a\xdd\x40\x95\xa9\x6b\xc7\xb4\x20\xf8\xcb\x78\x76\x97\x8c\x14\xe2\x44\x0b\x3d\x5f\xd4\x7a\x2e\x43\xf0\x14\x6d\xe3\x5e\x81\x3c\xaa\xa6\x03\x62\x63\xbe\x07\x55\xa3\xf2\x02\x3e\xef\x4e\x99\xe5\xf5\x54\x58\xd7\x1b\x53\xcd\x7c\x2c\x3a\xa3\x8d\xdc\x07\x62\xec\xb7\x54\xf0\x7d\xbf\x25\x4b\x71\x1b\x7e\xf9\xe5\x63\x5f\xc0\xdc\xc3\xd8\x72\xd3\xde\xde\xe8\xba\x2a\x6f\x64\xe9\x1d\xce\x47\xee\xe1\xe3\xae\xe3\xdf\x33\x7e\x6e\x8f\x13\x7e\x73\x23\xcb\xde\xcb\x01\x8d\xf2\x65\xf0\x61\xe0\x6e\x19\x18\xac\x03\xd5\xe3\x94\x50\xf4\x04\x5a\x1c\xb3\xb7\x12\x93\xc0\xa1\x3d\x38\xae\xe7\x63\xa9\x22\x10\x40\x5c\x66\x47\x8c\xdd\x7d\xf1\xaa\x89\x11\x16\xd3\x77\x21\x73\x46\xdb\x19\x33\x72\xde\x54\x96\x2b\xa1\x1b\x53\x2d\x3b\x1f\x95\xc7\x59\xea\x49\x25\xbe\xe2\xc9\xee\xc3\xe4\x42\xa3\x9c\xd9\x41\x88\x6c\x44\xbb\x58\xe1\x76\x31\xc2\xbc\x7c\x11\x38\x5f\xc8\x0a\x17\x5f\x45\x41\xc9\x5b\x8b\xaa\x99\xca\x2d\x59\xaa\xbf\xb3\x1a\x34\xb1\xdc\x47\x63\x44\xc4\x55\xea\x5a\x85\xef\x81\x4a\xc6\x3c\x2e\x87\xff\xbc\xbe\x5c\x4c\x29\x16\x42\x95\x00\x60\xfb\x2e\x9e\x5c\x1c\xfc\x5e\x57\x8e\xc0\x60\xfb\x52\x2d\x8f\x21\x9b\x51\xf0\x24\x3c\x61\xa6\xab\xd2\x30\xf1\xd5\xd6\xdc\x11\xa6\xb9\x23\x41\xa1\xcd\x84\x71\xd5\x9d\xc8\x3c\x8d\x82\x0e\x6c\xef\xdc\xfe\x7e\xab\x9b\x3f\xc5\x02\xe5\x71\xee\xd9\xd7\x7b\x2e\x34\x84\x84\x98\xee\x8a\xc9\x13\xa4\xd6\x14\x04\x8a\x01\xac\xab\x99\xa8\x3b\x16\x06\x32\x6b\x4a\xa0\xb4\x46\xf5\x5c\x54\xfd\x9b\xa8\x12\x34\x01\xfc\x96\x3e\x90\x99\xd4\xa2\xa5\x51\xd3\x97\xbe\x38\x71\x07\x0d\x9a\xce\x6d\xc2\x07\xdc\xaa\xfb\x8e\x28\xfb\x9c\x19\xb7\x96\x31\xd4\xbb\x51\x6a\x1b\x15\xbb\x8f\x9a\x2f\xdc\x72\x23\x6c\x37\x6b\x4a\x2e\x3a\xc4\x96\xee\x02\xa6\xe7\x8b\x7e\xc2\x9a\x43\x90\x95\xe7\x31\x4d\xd8\xf0\xcf\x24\x65\xa8\xec\x49\x27\x5f\xf8\xf5\xf1\x90\x9a\x22\x78\x91\xb1\x8f\xd2\xed\x4a\xc1\x6d\xe7\x02\x89\x9d\xf8\x02\x8d\xe0\xcb\x97\xde\x95\xf7\x93\x96\x5e\x0e\x81\x7f\xe7\x8b\x30\x0a\x01\xb2\x8d\x92\xbf\x36\xa9\x3a\x00\x18\x64\x61\xda\xf4\xfc\xbe\xe6\x36\x2d\x44\x34\x5e\x9d\x49\x73\xd5\x07\x3a\x76\xa5\x71\x7e\x25\x7e\x3c\x7d\xcb\xe8\xdb\x4e\xf6\xa5\x3e\x06\xa6\xbb\x42\x52\x4e\x0b\x11\x8d\xb6\xa5\x34\x57\x7b\x82\x9d\xed\x2e\xd5\x2f\xca\x8f\xdb\x42\x1d\x1f\xce\xfe\xd5\x96\x7a\x3d\x92\x5e\x02\xf1\xb8\xd4\x0d\xbb\x21\x84\x2a\x92\x9a\x3f\xcb\xc5\x6b\xf6\x56\x99\xa6\x16\xd1\x73\xdb\xee\xca\x71\xdd\xce\x32\x34\x80\x80\x99\xd7\x7b\xb3\x95\xed\xfb\x94\x3c\x65\xe3\xdb\x82\xd7\x16\xc4\xe3\xbe\xc7\x20\x34\xf4\xf4\x29\xf9\x42\x75\x39\x07\xe7\x13\x1f\x77\x37\x20\x28\x9e\x00\x33\xeb\x1f\x72\x3b\x9f\xa0\xcf\xa5\x7b\xfd\x2e\x20\x33\xb2\x17\xa5\xb8\x7e\x61\x4a\xfe\x6a\x00\xaf\xf1\x99\x25\xf9\x98\xb8\x61\x07\xaf\x0e\x46\xec\x52\xce\x65\xc5\xeb\x6a\x99\x15\xce\x88\xcf\x39\x66\xe1\x3b\x04\xaf\xdc\xcb\x03\x76\xa4\x6b\xe8\xb9\xe0\x8a\x55\xc2\xa7\x75\xd3\x3d\x5b\xa2\xec\x78\xfc\xd0\xc4\x85\xdd\xab\xfd\x12\xe9\x4c\xef\x33\x51\x7a\x8e\x4d\xfc\x28\x43\x1d\x3c\x8b\x24\x5d\x2a\x47\xe7\x47\xec\x0b\x11\x68\xe2\x5b\xb8\x69\x70\x65\xfc\x13\x8f\xb5\xa8\x0f\xa3\xf7\xed\xa4\xc1\xad\x9a\x83\x1f\x6f\x99\xb6\x6b\x89\x53\x69\x3f\x89\x85\xee\x25\x21\x60\x93\x96\x3d\x4e\x5a\xf7\x85\x36\x12\x60\xe5\xb9\x65\x1c\xaf\x6d\xd1\x54\xdc\x89\xd5\x68\x8d\x1b\xb1\xb3\xb7\x17\x9f\xde\x9e\x9e\x7c\x7e\x7b\xf6\x9a\xfd\x48\x3d\xc9\x54\xc2\x1b\xb1\xcf\x29\x68\x67\x12\xf0\x4b\xc8\x88\xe1\x5d\x03\x22\x43\x5c\x45\x28\x6e\x80\x62\xe3\x8a\x9d\x2b\x69\x63\x31\x0b\x8c\x3b\xab\xb4\x12\xbe\xd6\xfb\x42\x93\x35\x70\x2a\x2d\x41\x14\x61\x67\xee\xe7\xbc\x37\xca\xe5\x70\xa2\x4c\x4c\xc5\x78\x70\xd1\x22\x2e\xee\xbe\xc4\x7f\x8f\x56\xdf\x57\xf6\x0d\xb5\x03\x7c\xbe\x31\x5a\xff\xe3\xf7\xc8\x0c\x42\x19\x1d\x8f\x4a\xa8\xeb\xac\xca\x0d\xd4\xc0\x77\x6c\xe6\x70\x74\xe8\x05\x8a\x6a\xa5\x64\x52\xe8\x34\x05\x5e\xcd\x0f\xdb\x88\xb1\x9f\x7c\x44\x37\x20\xaf\xac\xaf\xbe\x84\x20\x5e\x49\x0d\x9f\xd6\x91\xf5\x19\x88\xcd\x38\x7d\x29\x21\xb5\x4e\xe5\x35\xe1\x67\xec\xd5\x8a\x17\x5f\xdf\xbb\x96\x6d\x1c\x37\xe9\x1f\x9f\xde\xef\x77\x64\x78\xff\x7a\x8f\x8b\xae\x2d\x8d\xaa\xd0\xf3\x39\xc2\x7a\xce\x42\xbe\x7f\x4c\xd9\x0f\x54\x61\x6f\x9a\x0f\x02\x94\x4e\xb6\x1c\xfe\x16\x3d\xf3\x8d\x5a\x9a\x4e\xf8\x9a\x72\x16\x54\x14\x73\xfb\x57\xcd\x20\x2c\x5c\xe3\xd3\xb1\x89\xb4\xbf\x08\x2f\x7f\xf1\xe9\xed\xc9\xd9\x87\xb7\xa3\x79\xf9\xe0\xa4\x45\xa8\x72\xa1\xa5\xb2\x66\xbb\x7e\xb3\xad\x46\x60\x77\xf2\x13\x5e\xda\x97\x3b\x87\x86\xfe\x8c\xf9\x2f\x12\xf8\x60\x4a\x27\x4f\xf6\xd0\xea\x85\xae\xf4\x74\x7d\xb1\x8c\x1e\x9b\xf3\x07\x84\x01\x1c\xf2\xa1\xdb\xf5\xfd\x8a\xfa\x5d\xaa\x9e\xb5\xa5\x7c\xac\x72\xe6\x96\x21\xce\x35\x48\xcd\x50\x9c\xec\x89\x4e\xf7\x5e\x84\xb3\x95\x35\x40\x45\x12\x2e\xb0\x47\x56\x8e\x50\xc5\x49\xc5\xc1\xae\x52\xdb\x7d\x2f\xdd\x76\x81\xcd\xd1\x9f\xed\x65\x25\xf3\x35\xf3\x6d\x72\x02\xb7\xa8\xc5\x30\xa0\x6a\x42\x21\x3c\x5d\x27\x0c\x37\xa5\x77\xde\x7a\xe3\x6d\x3d\xf8\x54\xb5\x6c\x5b\x71\x92\xf4\x70\x6f\xfa\x42\x2c\xa3\xaa\x5a\x46\xb4\x6e\xd2\xa2\xf9\x14\xd1\x32\x6b\x32\x13\x2f\x6a\x79\x2d\x2b\x31\x05\xc4\x7c\xa9\xa6\x09\xce\x40\x8a\x4c\x40\x90\x12\xb9\xd1\xf5\x83\xfb\x2b\x29\x91\x02\xe7\xe2\xe3\x4f\x9f\xa1\xf8\x02\x38\xb8\xee\x2c\x84\xbb\x17\xc2\x7d\x1b\x0e\x87\x60\x32\x38\xfa\xbb\x93\x27\xcb\xea\x98\xfd\x22\xe8\x3d\x1a\xaa\x43\xd4\x50\xb8\x71\xa6\x03\x54\x3f\x8c\x35\xae\x2c\x1c\x47\x74\xef\xd3\x53\x2f\xdc\x93\x4e\x56\x42\x56\x93\x3d\x0f\x75\xea\x11\x61\x1b\x7d\x4c\x0f\x2f\x7b\xee\x91\xec\xef\x4c\xe5\xbc\x69\x75\xdd\xf9\x0c\x8e\x1f\x4f\x0f\x39\x33\xcb\x79\x25\xd5\x55\x84\x6f\x9d\x68\x42\x30\x11\xcc\xfd\xe0\x4f\x6c\x2d\x78\xb5\x99\x52\xee\x72\x3e\xf6\x4a\x25\xed\x0e\x16\x40\xb0\xd0\xb9\x7b\xf6\x17\x7f\xed\xc9\x0d\x9d\x92\xb8\x83\x83\x27\x37\x5f\x69\x0a\x23\xfb\x90\x35\x68\x90\xd1\x34\xc5\xce\x2f\x4f\x2f\xcf\x1f\xd4\x42\xbd\x89\x25\xc0\xe8\x1e\x51\xaa\x93\xbf\x6e\xf3\x0e\x0f\x59\xd5\x6c\x7f\x06\xd5\xbb\x0b\x5d\x5b\x5e\xed\x89\x08\x14\x33\xbe\x38\x69\xec\xec\x4c\x1a\x00\xab\xe9\x2b\x04\xac\xb4\x4f\x22\x9d\xb1\xc4\x86\xc7\x75\x96\xfe\x38\xd0\x73\xa7\x7f\x39\xb9\x60\xbc\x71\xfb\x6b\x09\x03\x7e\xaf\x0e\x77\x3f\xb2\x4b\xcc\x30\xd8\x71\x5e\xd4\x7a\xcb\xac\xfc\x53\xf7\x3d\xa7\xfb\x88\xc3\x7d\xf6\x45\x00\x0d\x45\x0a\xf6\x84\xfd\x0f\x52\x49\x2b\xb9\xd5\x1d\xcb\xca\x66\x47\x20\x6b\x1b\x0c\x02\x8d\xb1\x7a\x4e\x27\xf8\xdc\x3f\x01\x2e\x64\xe0\xe2\x2b\x8d\xa2\xb5\x00\xa4\x77\x58\xb1\x73\xe5\x64\x6d\x5e\x88\x56\x00\xe4\x00\xb0\xd9\xb1\x6f\x19\x9e\xf9\x67\x32\x50\x01\x0e\x69\xf5\xe7\xd7\x59\xc5\x9c\x95\xf2\x63\xde\x4a\x11\x6b\x5b\xed\xd5\xe2\x23\x7f\xed\x4b\x14\xe4\xaf\xaa\x65\x69\xc3\x09\xfe\x6b\xc3\x2b\x5c\x98\x8f\xfb\x36\x4b\xe5\x8b\xdc\x77\xbc\xf9\x0e\xd1\xd0\xe3\x76\x7c\x0c\x5a\x7a\x63\x10\xe1\x14\xe7\x63\x6b\xae\x8c\xdb\xa3\x5c\x17\x3b\x24\xc7\xd3\x21\x3b\xb2\xc5\xe2\x78\xaf\xf3\xec\x1f\xda\x5e\x35\x2a\x15\x38\x70\xe4\x9f\x71\x5b\xde\x87\xd0\xf6\xae\x83\xbc\x17\xd7\x10\x9c\xf2\xbe\x56\x15\x6a\x15\x76\x2b\x9d\x17\xb2\x7e\xf6\x5e\x1a\xeb\xeb\x66\xc1\x17\xd2\x50\xb9\x07\x90\xbb\x2e\x9c\x22\x27\x17\xff\xc5\xcb\xb2\x7e\x8d\x5c\x8a\x64\x72\xf8\xb7\x09\x98\x9b\x5c\x05\x5f\xe2\x91\x5d\x2e\x08\xd3\xf8\xf3\xe9\x05\xc3\x3a\x76\x7f\xfa\x1e\xeb\xf4\xff\x9f\x3f\x7e\xff\xb2\xf3\x76\x3f\x5e\xf0\xf8\x8e\x76\x8c\xbd\xfb\x98\x9e\x44\xdc\x60\x16\x1f\x08\x70\x8d\x4e\x36\xb9\xc4\x70\x3c\x47\x59\xe9\xaa\xe3\xc1\x72\xbb\x1c\xe8\xfd\x6e\x12\xcc\x73\x9c\xdd\xa3\xc6\xd9\xb1\x90\x51\x82\x44\xa2\xe7\x71\x49\x9b\x42\x8a\xe1\x2a\xd9\x41\x8a\x73\xf1\xf4\x28\xce\xd6\xb5\xd9\x7e\x8a\xf2\xd3\x93\x3a\xe3\x7d\x95\xc2\x18\xc2\x7e\xf6\xf1\xf2\xbf\xde\x9f\xbc\x79\xfb\x1e\x46\x4a\xfe\x7b\x77\x34\xa4\xda\x39\x7e\xaa\xfb\x51\xeb\xa2\xbc\x6e\x5f\x90\x7e\x6e\x19\xd5\x72\xc8\x28\xf6\xf1\xdd\x65\x5f\x5f\xcc\x5d\x05\x74\x35\xe9\x34\xf7\x87\xb5\xb6\x41\xf1\x39\x51\xef\x2f\x7f\x64\x67\xa3\x5c\x82\xb3\x95\xe9\x5f\x6e\xa7\x70\x84\x77\x56\x91\xb6\xee\x00\x7b\x02\x7e\x07\x37\x5f\x5c\x83\xbd\x7b\x1c\xee\x69\xad\xba\xca\x01\x75\xff\xc4\xa2\x43\x6c\xe5\x45\x00\x77\x49\x91\xb6\xd5\x8e\x66\x3b\x6a\x2d\x4c\x00\xc9\x7c\xa2\x27\x65\xb1\xae\x0c\x44\x1f\xea\xb5\xb6\x83\xac\xaa\x6c\xe6\x8b\xc9\x72\x29\x36\xd5\x74\xf1\x11\x0a\x7c\x9e\x40\x87\xef\x13\xdf\x20\x7e\x85\xdf\x20\x14\xf1\x83\x13\x40\x78\xed\x1e\x03\x69\x43\x7f\x7d\x0f\x72\x68\xd8\xce\x92\xeb\xb5\x43\x8c\x1b\xcf\xa2\x29\xe6\x28\x4d\xa7\x7b\xe4\xed\x63\x0f\xab\xed\xfc\xb2\xa3\xa2\xb3\x6f\x25\x67\x31\xd3\x56\xab\x9d\xa3\xe4\xd7\x35\xcf\x2f\xf4\x05\x3c\x71\x1a\xab\x0d\x26\xa5\xb8\x21\x82\x32\x38\x23\xa0\x86\x0e\xb1\x0b\xad\xbc\x5b\x22\x77\x4a\x3c\xb8\x08\x52\x9e\x9f\xed\xe9\xf2\x7d\xbb\x29\x9e\x7d\x8d\xc1\x7b\x0d\x06\x29\x7b\xe7\xa4\xb8\x26\x7e\xc5\xce\xcf\x48\x34\xf3\x09\x27\x86\x0e\x24\xdb\x7c\x22\xf7\xc6\x3a\x75\x6d\x6f\x74\xdd\x3f\xd5\x3b\x6f\xd8\x8a\x55\xa0\xdf\x56\x52\xb1\x9e\xe2\xed\xc1\x31\x3e\xf2\x0d\xba\x84\x1b\xd4\xaa\x24\xb1\xe9\x26\xdd\xc7\x45\x7a\xdc\x0b\x74\x57\x46\x75\xbf\x59\xbe\x7b\x15\xd2\xfd\x71\xeb\x39\x55\xdf\x8c\x8c\x09\x6e\x93\x22\xb5\xe0\x60\x72\x49\x6e\xdc\xde\xa8\x43\xad\xb1\x52\x78\x1f\xc2\xe0\xdb\xa0\x01\x17\x71\xa0\xab\xca\xad\xaa\x56\x29\x82\x34\xa5\xf1\x0e\x18\xa2\x2c\xcf\xf9\x82\x0a\xaa\x95\xfa\x46\xdd\xf0\xba\x64\x27\x17\xe7\xfb\xa1\x06\x3d\xe2\xac\xf1\x24\x75\x43\xf4\xca\x23\xad\x63\x4b\x2a\xa8\x27\xa0\x04\x36\x1b\x4b\x6b\x62\xe9\x65\x61\x53\xbd\xd2\x51\xc1\xe0\xcb\x72\x77\xd9\xdd\x5b\xea\x29\x61\x98\x8a\xe9\xc2\xf2\xca\x57\x6b\xa1\x72\x7c\x2f\x5f\xbe\x44\x53\xd8\xcb\x1f\x7e\xf8\x01\xcb\x4b\x96\xa2\x90\xf3\xd5\x07\xe1\xa9\x7f\x7a\xf5\x6a\xc4\xfe\xed\xe4\xc3\x7b\x2a\xff\x63\x10\x95\x04\x7b\x86\x75\x4f\x1b\x9b\x01\xfb\x97\xcb\x9f\x3e\xc6\xd2\x20\xf9\xaf\xb0\xad\x61\x7a\x23\x76\x96\xc4\x3f\xa5\x86\x2e\x6e\x67\x54\xd5\xd1\x32\x3e\x99\xe0\xc1\xf0\xf5\x49\xe8\xc2\xf9\xec\x71\x39\x9d\xf9\x72\x60\xee\x48\x54\x10\x98\xe5\x54\x72\x34\x0d\x7a\x64\x03\x8c\x33\x83\xbe\x02\x99\x84\xa1\x0c\x58\x25\xaf\x04\x9b\x18\x28\x0a\x16\xe1\xff\x6a\x61\x9c\x50\x4a\x45\xb0\xb1\xb3\xb8\x33\x46\x74\xc6\x7a\xb8\x0f\x0f\x50\xe7\x32\x44\xb9\xe9\x9e\xee\x90\x87\x6f\x25\xec\x62\x1f\x4b\x8a\x57\xd0\xad\xd6\xe3\x78\x64\xb2\xb1\x5e\x84\xd1\xe0\xd6\x11\x4a\x40\xa4\x13\xbc\xd2\x50\xce\x34\xec\x74\xe4\x62\x3e\xe4\x60\xb9\x10\xdb\xa7\xd2\x1b\x7c\xb1\x2f\x00\x2f\x12\xaa\x0f\xbc\x73\x75\xbd\x3c\x5e\xc4\xb7\xce\x70\x15\xf8\x58\x37\xd6\xfb\xb0\xe9\x77\x48\xc0\xb6\xda\x2f\x51\xc7\x97\xed\x80\x3c\xb9\x0b\x02\x71\x6f\x10\xd3\xdc\xdf\x0c\x3c\x21\x17\x25\x06\x4c\xf0\x62\xc6\xae\xc4\x72\x88\x74\x6b\xc1\x21\x9b\x07\x8b\x10\xb9\xb5\xc8\x2a\x4c\x25\xb5\xd6\x4e\xc3\x92\xf9\xc0\x80\x84\xfb\xf8\x6c\x20\x2f\x84\x1a\x92\x97\x08\x46\x54\x25\x96\x02\x8f\x55\x4d\x05\xd7\xfd\xd7\x54\x53\xe0\x7c\x25\x49\xc5\xdd\x37\x51\xba\x66\xe6\xb6\x37\xc7\x68\x08\x47\x07\x89\xbb\x35\x6a\xa5\x35\xd5\x56\x27\xe1\x0f\x5e\xc8\x3d\x3a\x73\x12\x51\x01\xd5\x8c\xa9\xb0\x22\x3d\xeb\x57\x29\x2c\x44\x96\x44\x63\x84\x6d\x68\x69\xb0\x2e\x69\xa3\x2a\x61\x0c\x93\x30\xc3\x39\xaf\xaf\x84\x07\x8c\xe1\xd5\x88\x5d\xb8\x41\x06\xfc\x2a\x84\x45\xbe\xa6\xb2\xb1\x7c\x99\x65\x07\xb9\x97\x1c\x8e\x46\x87\x48\xe0\xd7\xe4\x0a\xf5\x38\x1f\xbb\x61\xea\xee\x80\xa5\x9b\x1d\xc4\x0f\x7c\x61\x10\x19\xd8\x89\x7c\x80\x7c\xad\x21\x0b\xce\xce\x3c\x03\xe3\x9d\x41\x94\x56\xa7\xb3\x03\x00\xec\xae\xb8\xe5\xbb\xa0\x96\x77\xf2\x5b\xe4\x9f\xdd\xd1\xca\x77\xc2\x2a\xdf\x84\x54\x4e\x3b\x45\xb7\xad\x3f\x86\xf3\x1d\x20\xb6\xe7\xbd\x60\x5e\xfd\x27\x37\x52\x82\xdc\x91\xa1\xf4\x74\x92\x11\x09\xf4\xa9\x12\xdf\x94\x50\x78\x3e\x59\x57\x04\xd6\x27\x0b\x26\xf2\xb2\xa7\xa1\x58\x6c\xeb\xb1\xa5\xc1\x7e\xb5\x5c\x58\x6f\xf1\xb0\xfd\xe9\x23\x2e\xb6\x3f\xdd\x9c\x81\xed\x4f\xae\xb0\x25\x69\x49\x81\xe8\xa7\x51\xfc\xb0\xa4\x56\x03\x66\x77\xbc\x82\x23\xf6\x81\x98\x02\x1e\x46\x3e\x36\xba\x6a\x6c\xc8\x64\x5a\xc3\x31\xa0\x53\x8f\xf0\x8d\x29\xa5\xfe\xb1\x84\x7f\x00\xe7\x44\xb2\xdc\x97\x95\xe0\x67\xa7\x2b\xde\xb7\x18\xdd\x6f\x36\x98\xe4\x0e\x6b\xe8\x45\x89\x9d\xd7\xd1\x77\x10\x70\x27\x7c\x2c\x75\x26\xe3\x40\x24\x89\x35\x28\x40\x79\x71\x85\xea\x40\xf5\x9e\x62\x37\xab\x0d\x8d\x95\x0c\x13\x27\x17\xe7\x3b\x69\x00\x49\xfb\x0d\x3a\x40\xfa\xc4\x6f\x58\x0b\x38\x47\x2d\x20\x2d\xbb\x73\x16\x67\x4e\x26\x65\x47\x76\x9e\xbc\x18\xb9\x32\xec\x77\x8e\x58\xa6\x41\xa7\x39\x86\x1e\x1a\x7b\x22\x59\x4d\x70\xf7\xbc\xd7\x11\x2e\xf1\x53\x17\x39\x1f\x50\x7c\x84\xf5\xe8\x14\xdd\xd8\xfe\xac\x16\xbb\x83\xc9\xb2\x4b\x28\x6d\x83\xfa\x60\xa2\x58\x2e\x74\xf9\x1a\xab\x42\x40\xed\x38\x2c\x0a\x33\xc0\xda\x38\x66\x80\x0a\xa3\x93\x22\x12\x5f\x71\x9d\x98\xdc\x77\x96\x1b\x76\xaa\x72\x74\x97\x3a\x47\x6e\x03\x61\xe6\x17\x7d\x77\x91\xdd\xb1\x6c\x11\x4b\x58\xd3\x6e\x85\x50\xb2\x3d\xa5\x9e\xfc\x06\x9a\x62\x26\xe6\x1c\x31\xfc\xfc\xf4\x1c\x95\xb9\xa9\xa5\xb5\x02\xb1\x94\x44\x0d\x35\x5f\x07\x99\xcf\xe0\xe0\xfa\xd5\xc1\x2e\xe5\x60\xee\x58\xb1\x87\xc5\x5d\xd8\xc3\x62\x5c\x64\x22\x9b\x3b\xd7\xa0\x4b\x54\x00\xbc\xa9\x5a\x06\x09\xc7\x60\xae\x71\xf5\x1e\x7c\xe2\xfb\xd0\xa3\x76\xd5\x9f\x06\x41\x60\x78\xd6\x9f\x9e\xf5\xa7\xbd\xe8\x4f\x09\x63\xf1\x04\x67\x8d\x2e\x95\x06\x0c\x7b\x85\x2a\x26\x32\x25\x00\x3c\xee\x68\x7a\x55\x2a\x56\x4a\x47\x8b\x9b\xd3\x87\x0e\xbd\x82\x45\xe7\xb8\xb1\x93\xe1\x9f\x98\x50\x85\x2e\x71\xf3\x5d\xff\xb5\xb1\x20\xda\x44\x9d\x24\x1d\xcb\xdc\xbf\x2b\xb5\xda\x41\xdf\xbb\x6e\xdd\x4e\x74\xc0\xbb\x02\xdf\xed\x89\xc1\x47\xb6\x1e\x92\x89\x69\xfa\x01\x6b\x80\xf8\x7b\x74\x42\x62\xd5\xe9\x50\x04\x1f\x4a\xc7\x1e\xe1\x97\xa3\x62\xd1\x0c\xe8\x81\xd1\x5c\xcc\x75\xbd\x1c\x84\x87\xdc\x8f\x59\x2b\x7a\xe2\x18\x64\x82\xa2\xa9\x9d\x06\x58\x2d\xbf\x55\xe9\xc0\x2f\xd0\x03\x0b\x07\x61\x9f\xfa\x15\x0d\x4a\x3f\xf9\x91\x88\xa0\x62\xa0\xdf\xc7\x22\x4a\x93\x00\x79\x68\x06\x51\xed\x74\xdf\x0a\x75\xcd\xae\x79\xdd\x21\x12\x6f\xdd\xe7\x8e\xf2\x40\x29\xaf\xa5\xd9\xad\xde\x61\x6b\xea\x97\xc4\x34\xd0\xae\xa3\x1b\xbb\x68\x2c\x51\x4a\x7f\x2b\x7c\xca\x7c\xb8\x0d\x2d\xa1\xe8\xd5\xc1\x4e\xc3\xf8\x66\xea\x0b\xe3\x67\xc7\x2a\xc3\xf8\xb9\x6b\xad\xe1\xbc\x97\x9d\x8f\xcd\x5e\x0b\x8b\xfb\x8f\x3f\x16\xfb\xb8\x87\x91\x45\x46\x9c\x07\x2f\x9c\x3e\xd0\x45\xc3\x70\x93\x9d\xec\x36\x84\x50\xbf\xde\x64\x43\x3f\xfe\x86\xad\x35\xfb\xf5\xd9\x52\x7e\xe1\xef\xdc\x61\x7b\x49\xf5\x0c\x9e\xbd\xb5\x9d\x8e\xe0\xb3\xb7\xf6\xd9\x5b\xfb\xec\xad\x7d\xb6\x36\x3c\x5b\x1b\x9e\xbd\xb5\xec\xd9\x5b\xbb\x97\x35\xdc\x9f\xb7\x16\x45\xbd\x75\x3e\x5b\x12\xf6\xa2\xc3\xf6\x41\xfd\xb5\x54\xb8\xe7\xa4\x28\x74\xa3\xec\x67\x7d\x25\x3a\x3b\x1d\x5a\xf2\xff\x4a\x3f\x00\x80\xb0\x41\x1f\x58\x7d\xf8\xc1\x94\x83\xfe\x52\x49\x2f\xd9\x62\x17\xa9\x82\x37\xa5\x74\x92\xff\xce\xc7\xcc\x77\x90\x82\x13\xa9\x52\x94\xf1\x07\xba\xca\xd6\xad\xf5\x88\x9d\xb0\x5a\x14\x72\x21\xa9\x8c\x3c\xc7\xef\xf1\xe0\x85\xda\x08\xd2\x1a\x51\x4d\x08\xa3\x5e\xa5\xb5\x7e\xa2\xfc\x4e\x74\x70\xed\x6b\x90\x43\x69\x8f\x64\xee\x6b\x21\xd5\xe2\xef\x9e\xb5\xd1\x68\x3e\xa7\x3d\xa4\xe6\x15\x98\x4a\x56\x62\x08\x5e\xb6\x90\x94\x60\x7d\xdf\xd7\x5f\x7c\x5d\xc8\x1a\x0e\xef\xa5\x28\xb4\xea\x52\x53\x75\xc3\x06\xad\xf4\x14\xf9\x13\xd8\x46\x45\xc9\xca\xa6\x0e\x35\x53\xaf\x79\x25\x4b\x69\x97\xc1\x6b\x47\xe5\xb5\x38\xde\x98\xb0\x8d\x26\x2e\x23\xe3\x8b\x45\xad\x79\x31\x13\x26\x79\x1b\x0a\x28\x94\x44\x16\x62\xdf\xb1\x04\x1c\xc8\x28\xd0\xc6\x31\xc8\x6a\xc9\x6a\x6d\xbd\xe3\x7d\xc3\x0b\x3f\x27\x9d\x41\x73\xe4\x72\xb6\x5e\x82\x77\x5e\xa7\x5d\xe0\xa8\xe4\x24\xfd\xc3\x30\x5d\x95\x1e\xc2\xe4\x4f\x2f\x9d\x50\x58\xd0\x19\x74\xc4\x0f\x00\x2e\xac\x66\x95\x63\xd8\x8e\x20\x6e\x6e\xfc\xc7\xef\xd8\x4c\x37\xb5\x19\xa5\xa0\x03\xaf\xe0\x3b\xd4\xef\xbc\x50\x69\x59\x25\xb8\xb1\xec\xd5\x4b\x36\x97\xaa\x71\x7c\xaa\xf7\xb1\xe9\x2f\x07\x25\x12\xd0\xf7\xdf\x75\x6e\xd7\x57\xf6\xd9\x28\xf5\x2c\x10\x1b\x99\x44\x1f\xba\x49\x98\x18\x87\xc8\xe2\x2d\x41\x88\x88\x6e\xba\xda\xca\xea\x7b\xb8\x5f\xbf\x36\x7a\xbc\xb4\x7d\x92\x28\xa9\x45\x9e\x3d\xf9\xaf\xf4\x65\x17\xf0\x94\x88\x9d\x72\xeb\x4b\xef\xa5\xc2\xc5\x54\x1a\xbb\xa5\xbe\x45\xcc\xaf\xbc\xf5\xb1\xee\x6c\x65\xea\xb4\x83\x9e\xb9\x32\xd0\xc6\x4b\xc4\xde\xb6\x54\x14\x02\x8b\x59\x9e\xc5\x4a\x49\x4a\xe3\xb3\x5b\xbb\x7f\x64\xc0\x31\x7f\x40\xf6\x80\x9a\xde\x71\xaa\xdd\x84\x2e\x7f\x24\x7a\xcf\x15\x9b\xe5\xb7\xc0\x48\x35\x45\x90\xf3\x79\x53\x59\xb9\xa8\xe2\xbc\x3f\xf9\x06\x44\xc8\x53\x9b\x1b\x4f\xcc\x44\x1c\x13\x8b\x11\x6d\x0a\xec\x93\x47\xa1\x2f\xa1\x2c\x62\x75\xd7\x8e\x1f\x2c\x78\xcd\xc3\xe2\x41\x25\x5d\x73\x4c\xe6\x3b\x0e\x1e\x45\x82\xc3\x74\xad\x78\x15\x47\x9c\x78\x91\xf6\x79\x68\xac\x50\x5c\x75\x30\x55\xe7\xf0\x5c\xd0\x88\xe9\x9b\x10\x4c\x86\x65\x50\x5a\xa7\x85\x84\x9a\x37\xbc\xb8\x12\xaa\xc4\xa2\x51\x30\xed\x72\xa9\xf8\x9c\xd0\xb6\x92\x7a\xdc\xad\xf6\x66\x40\x86\x09\x4c\xdf\xf3\x69\xc6\xc8\x75\xf7\xb9\x06\x8d\xe9\x0d\x65\xe3\x9a\x6c\xbb\xe7\x06\x4d\x36\xb5\xbc\x2e\x84\xe7\xff\xae\xdd\x3e\x87\x7e\xdd\x21\x97\x7e\x65\xf0\x7e\x7b\x92\xf3\x0b\xe4\x3e\x58\xce\x01\x54\x8b\x57\xee\x6a\x2f\x43\xce\x68\x6b\x73\xc7\xcb\xfd\x56\xbd\xa9\xc7\x7d\x32\x7f\x0f\xeb\x71\x99\x5f\xe2\x4f\xbc\xd4\x86\xbd\xa9\x74\x71\xc5\xce\x04\x08\x5d\xf7\x59\x9e\xa5\x1e\x97\x8f\x09\xe1\x3d\xe7\xd3\x6d\x7e\xb6\x21\x9b\x6b\x25\xad\xae\x6f\xa7\x17\x0f\x57\x76\xf2\x19\xee\x79\x23\x42\x95\x3b\xcd\x4f\x19\xec\xd9\x1d\xb7\xbe\x1b\x0f\x8d\x82\x7a\x06\xb7\x13\xbf\xa2\x2a\x60\x3b\xde\xb5\x3f\xcc\xf4\xcd\xd0\xea\x61\x63\xc4\x50\x76\x70\xe8\xf6\x98\xe6\x95\x58\x82\x17\xbb\xe7\x44\xa9\x59\xa6\x33\x58\x0d\x16\x28\xf8\xde\x71\xee\x4f\x6f\xce\xbe\x18\x51\x8f\x52\x19\xf0\x85\xb0\xc5\x8b\x42\x2c\x66\x2f\xa8\x87\x27\xb9\x28\x9e\x88\xf4\x5d\x15\xdf\x0e\xd9\x4c\xa1\xab\x8a\x12\xb3\xf5\x84\x9d\x8a\xc5\x2c\x74\xfc\xd0\xb3\x7e\x3c\x44\xe0\x85\xd6\x7d\x81\x50\x0f\x5d\x9b\xfc\x12\xc1\x37\x78\x87\x92\xc3\x54\x8f\xfb\x15\xa1\x78\xa8\xe3\xf3\xa4\x4b\x6d\xde\xe3\xe2\xdc\x2f\x9c\xf2\x61\x86\xa7\x9c\xc6\x7b\xe6\x60\xc9\x3e\x62\x24\x23\x41\xe7\x13\x14\xba\x4b\x51\x32\x7d\x2d\xea\x5a\x96\xc2\xb0\x40\x83\x52\x2d\x55\x56\x0f\xbd\x6e\xcf\xb8\xcd\x8f\x8e\xdb\xbc\x83\x3a\x74\x08\xfa\x50\x46\xa6\xe0\x9b\x15\x32\xc5\xcb\xb9\x54\x4f\x8e\x50\x99\x82\x57\xe2\xfc\xa7\x1e\xfa\x07\xb5\xc8\x55\x90\x4b\xfa\x32\xc1\x4f\xdb\x82\x4a\xf6\xd7\x70\x6e\x98\xd2\xe5\x36\x93\xea\x3d\x28\x12\x53\x6e\xc5\xcd\x56\x76\x38\x8c\x84\x6a\xfb\x93\x20\x9c\x3e\xa6\xca\xf1\x24\x30\x02\x93\x33\x8f\xa0\x67\xfb\x64\xaa\xb4\x6b\x7d\x8d\x93\xd8\x2a\x85\xdf\x6d\x83\xee\xfa\x13\x7c\x72\x71\xce\x7e\xc4\xc7\xf7\x8b\x5e\x58\x6b\x8b\x62\xe0\x99\x9e\x73\xd9\xb7\xc8\x46\xbb\x79\x1b\x7d\x35\x9d\xc2\x45\x78\x96\xd1\xc3\x49\x01\x97\x89\x9c\x36\x4e\xa7\x23\x3d\xec\x49\x01\xcc\xad\x88\x2e\x4f\x17\x60\xee\xee\xd5\x20\x12\x93\x93\x8f\x8b\x8c\x12\x8b\xdf\x4a\x60\x25\xc1\x07\xca\x8c\x50\x46\x82\x43\x26\xf1\x8a\x53\xa5\x3f\x2c\x2d\x89\x41\x90\x28\xe2\x0c\xd8\x7b\x3d\x95\xca\xdf\x5e\x4d\xfe\xba\x09\x97\x55\xd7\xc5\x78\x96\x49\x1e\x5d\x26\x31\xa6\x7a\xab\xf8\xb8\xea\x12\x6e\x90\x1f\xb5\xd0\x90\xbd\xab\xf8\x94\x09\xf8\xe3\x45\x29\x8d\xfb\x3f\xbb\xbc\x7c\x0f\x46\xf8\x46\x79\x89\x19\x0c\xd4\x44\xfb\x42\x92\x02\x5e\xc4\xfd\xde\x1d\x24\x3d\x3b\xa0\xff\x25\x2d\x99\x54\xa5\x1b\x78\x52\x0a\x0e\x83\xa4\xe0\x09\xc4\x43\x0c\x31\xbf\x18\x36\x30\x16\xec\xf3\x4c\x16\x57\x17\x89\xdd\x5d\xd7\xee\x3b\x95\x7c\x95\x31\xb0\xf6\x6f\xfb\xa4\x96\x34\xd4\x8b\xfe\xaa\x71\xd2\xd2\xf3\x01\x4f\x30\x2e\x69\xfe\xf0\x1b\x37\x46\x17\x32\xfa\x5c\xc0\x46\x13\x99\x43\x09\xcc\x61\xbf\x73\x02\xf1\xa0\xef\x74\x50\xfe\x58\xc3\xd1\xfc\x6e\xfa\xea\xb8\x26\xe5\x60\x52\xf9\x59\xef\x75\x0a\x78\x66\x76\x80\x46\x8f\x0d\x57\xa1\xd1\xbd\x30\xdc\x72\x2c\xf8\x30\x75\xda\x3c\x2f\x88\xf9\xda\x9c\x2b\xdb\x17\x20\xd2\x09\x9a\x70\x6f\x13\xef\x92\xb6\xb1\x4e\x0d\x6f\x79\x13\xf1\x3b\x72\x35\xc0\x9d\x5b\xe8\x45\x53\x61\x3c\xc7\xdd\xf1\xdd\xbd\xcd\x18\xdf\xb3\x27\xd7\xc3\x43\xa0\x96\x1e\xa6\x81\xbd\xfd\x23\x9d\x7f\x1b\xd8\xa5\x89\x70\xf7\xf2\xfb\xef\xbe\xfb\xd6\xd1\x4c\xbb\xaa\xe0\xf7\x01\x67\xda\xd1\x44\xbb\x26\xbf\xe8\xfc\x39\xbf\xe8\xf7\x9b\x5f\x74\xff\x28\xb4\x7b\xce\x20\xea\x19\x9b\xdb\x2f\x2e\xb7\x7b\x8e\x50\xe7\xe8\xdd\xbe\x91\xbb\x3d\xb2\x80\xf6\x9b\xfb\xd3\x3b\x96\xb5\x4f\x9e\xcf\x73\x76\xcf\x6f\x35\xbb\x67\x97\x58\xd6\xfe\x99\x3c\x7d\x62\x58\x7f\x8b\x59\x3b\x3d\x2e\x67\xf7\xec\x92\x3b\xe7\x94\xf4\x07\x01\xec\x6f\x4f\xdb\xa5\x20\x55\x6c\xb9\x56\x83\xf4\x49\xe5\x1e\x7b\xec\xf0\xd0\x24\xd0\x62\x56\xbb\x1b\xf8\x20\x0a\x09\xeb\xa1\x8d\x61\xf7\xba\x4f\x6d\x48\x6a\xf3\xd3\x65\xcb\x31\x13\xbe\x7e\x1c\x7f\xcc\xef\xc1\xe1\xf1\x5c\xd3\xe5\x1b\x31\xb9\x9b\x0c\xad\xc5\x5b\x2b\x80\x04\x00\x23\xd7\xe3\x14\x25\x32\x5e\x9d\x93\x8b\x73\xa7\x83\x43\x1a\x11\xaf\xcc\x88\xad\xe1\xf3\xde\x5c\x4a\x72\x81\xe7\xef\xdc\x5a\x31\x5f\xd8\xee\xbb\xfe\x6c\x71\x7f\x74\x8b\xfb\x1e\x2d\x80\xb3\x66\xce\xd5\xd0\xdd\x28\xb0\xb9\x67\xde\xba\x16\x65\x1e\x31\xba\x3b\xc8\x9e\xc0\x02\x02\xc9\x05\x79\x61\x63\x9e\x94\xb9\xbc\x1f\xb3\x27\xf4\xbd\xf3\xcc\x91\xaf\xb6\x6e\x5a\xa1\x57\x02\x5e\x69\x3a\x61\x15\xfc\xa5\x4a\x98\x73\xa6\x86\xdb\x99\x40\x1e\x7e\x01\x09\x39\xf1\xa9\x5c\x92\x46\x51\x9a\x57\x95\xbe\xc1\x77\xa7\x7c\xcd\xad\xbe\x1b\x0b\x65\x9a\x8d\x05\x9b\x4b\xa7\xa3\x93\x81\x35\x1d\x0e\xba\x4c\x9d\x44\x2e\x6a\x14\x78\x6b\x72\xb6\x5d\x0a\x4b\x1b\x05\x1b\xed\xf4\x5b\x85\x01\xe1\xee\xdf\x3e\xaa\x08\xde\xed\x69\xc2\x58\xcc\xf8\xb5\xd4\x4d\x8d\xad\xad\x66\x07\xf4\x13\xf0\x86\xa5\x6e\x82\xbd\x0b\x8b\x61\x86\xd9\x99\x35\xeb\xf4\x31\xfe\x08\xaa\x40\xa9\xbd\x69\x62\x28\xbe\x4a\x63\x57\xe7\xe2\x97\xc8\xc3\xe0\xed\xeb\xdc\x5c\x9b\x85\x63\x0b\xbd\xab\xda\x65\xed\x72\x79\xe5\xfa\x12\x7e\xfa\x86\x6a\xda\x6d\x45\x77\x7d\x30\x11\xe8\x77\x28\xfe\x04\x4f\x58\x25\x8b\x65\xef\x72\x6f\xad\xd6\x9e\x68\x9b\xe0\x43\x73\xdf\xb3\x37\xdc\x88\x92\x7d\xe0\x8a\x4f\x51\xdf\x3b\xba\xbc\x78\xf3\xe1\xd8\xed\x2b\xe8\x93\xe7\x67\x6b\x1d\x6d\x97\x69\xe7\x1f\xf7\x99\x2f\xb2\x32\xf1\x1d\x58\xd5\x4a\xfb\x1d\x27\xbf\xd7\x44\x18\x16\xf8\x50\x37\xb0\xde\x35\x2c\xe8\xa2\x9d\xc2\xda\xae\xf9\xd9\x22\x30\xd7\xf3\xf2\x8e\x55\x3e\xa5\x32\x96\x57\xd5\x45\xc5\xd5\xc9\x62\x51\xeb\xeb\xf5\xda\x78\x36\x56\xff\xa0\x1f\x29\x86\x79\xf8\x2f\x17\xb8\xf4\xe0\xc2\x56\xec\x3c\xf6\x3f\x62\xe7\x36\x68\xe1\x5a\x01\x4b\x3d\x38\x69\xac\x9e\x73\x2b\x8b\x03\xa7\xac\x1f\x7c\xe0\xaa\xe1\xd5\xda\xa0\xab\x5b\xa7\xb1\x49\x44\xbc\xb5\xd1\x66\xe8\xba\x0e\xcd\x6e\x95\x35\x6e\x6f\x6f\x79\xed\xa8\xd3\xe9\xe5\xcf\xbd\xda\x1a\xcb\x6d\xb3\x42\x85\x6f\xe1\x0c\x9b\x79\xc1\x90\x55\xdc\xd8\x2f\x8b\xd2\x5d\xfa\xd6\xaf\xb7\x11\xfc\x82\x5b\x5e\xe9\xe9\x5f\x04\xaf\xd6\x9f\xf0\xec\x9c\x9c\xa6\x4f\x7b\x03\x14\x39\xfc\x9b\x71\x78\xf0\xd0\x30\x27\x60\xfb\x1c\xf8\x5a\x54\xe2\x9a\x2b\xeb\x9b\x63\x71\x75\x73\x48\xf3\x87\x53\x24\xa3\xf1\xb5\x14\x56\xd4\x73\xa9\xf2\x3e\x2f\xe1\xd9\x53\xad\x4a\x89\x66\x47\x30\xa8\x61\x8b\xbc\xdf\xcd\x47\x6d\x93\xa7\xe1\x16\xdf\x42\x8e\xae\x99\x8c\x27\x5f\x0a\x7c\x6c\x4c\xf2\xe5\x0c\xbf\x04\x4f\x7b\x36\xb6\x95\x95\x62\x57\xca\x09\x86\x80\x23\xb2\x9e\x6c\x6d\x95\x13\xb6\xc9\x07\x43\xbf\xc7\x38\x84\xcd\x81\xa3\x43\x1a\xf7\x26\x1f\xc4\x6d\x47\x0c\x3f\xdb\x25\x8b\xf6\x50\x36\xd3\xd4\x75\xe7\x2e\x34\xc3\x4c\x96\x56\x41\xfe\xec\xa1\xcd\x3c\xa0\x93\xe0\xd5\x4d\x46\xea\x8a\x6a\x9f\xd3\xda\x88\xc1\xbe\xa2\xca\x76\x90\x18\xb7\x32\xad\x8e\xe0\xf2\xb9\x62\x7d\x4e\xf1\x7f\x35\xa9\x22\x9c\x2d\xa4\x40\xf0\x13\xae\x68\xb1\x80\xb3\x08\x5e\xd2\x97\x8e\x83\x39\x95\x10\x7e\x1b\x90\x33\x1c\x8d\xcb\x14\x6b\xe1\x0d\xd4\x1c\xc1\x3f\xc0\x71\xf1\xe2\x47\x4d\x46\x5e\x4a\xd2\x75\x34\x00\x38\xf9\x80\x99\xa6\x98\x31\x6e\xdc\xd0\xdc\x81\x76\x37\x5e\x8c\xe6\x5c\xc9\x89\x30\x76\x14\x50\x82\xcd\xbf\xff\xf1\x3f\x47\xec\x9d\xae\x19\x05\xaa\x0f\x3c\xaa\x06\x8d\x33\x9e\x0b\x69\x70\x32\xa1\x6d\xd4\x5a\x17\xba\xa4\x41\xdf\xc0\x60\x2d\xbf\x72\x3c\x0c\x07\xdb\x08\x70\x5d\xbc\x66\x07\x4e\x4c\x4c\x5e\xfd\x3f\x8e\x2d\xfd\xef\x01\x3b\xba\x01\xa6\x7d\xe0\xfe\x3c\xc0\x17\x86\xb0\xc9\x54\xa9\x8e\x2f\xc6\x64\xc9\x5a\x4e\xa7\xa2\x46\xf5\x91\x41\x52\xe1\x31\xa1\x82\x28\x9d\x3c\xec\x9d\xd2\x51\xdd\x6c\x0f\xe4\xdf\xff\xf8\x9f\x07\xec\x28\x9f\x17\x93\xaa\x14\x5f\xd9\x1f\xd1\xba\x2c\x8d\x9b\xe3\x31\x39\x73\xcc\x52\x59\xfe\xd5\xf5\x59\xcc\xb4\x11\x0a\x55\x79\xab\xd9\x8c\x5f\x0b\x66\xb4\xd3\x80\x45\x55\x0d\xc9\x96\xce\x6e\x38\x20\xb5\xf8\xa5\x84\xc4\x7a\xb6\xe0\xb5\xcd\x8e\xc4\x88\x2c\x24\xf0\x36\xb7\x6d\x53\xe5\x3d\xd3\x13\xa9\xc8\x7f\x45\x9e\x33\xb7\xe7\x90\x18\x8a\x9b\x64\x35\x2b\x66\x5c\x4d\x43\x6e\xfa\xa4\xb1\x4d\x2d\xb6\xb8\x7e\x3a\xde\x81\x2b\xa9\x7a\xa5\x30\xff\x55\xaa\x76\x50\xc1\x7a\xbb\xd2\x54\x5a\x9f\x15\x41\xb1\x8a\x76\xf9\xc2\xed\x42\x2d\xc7\x8d\xd5\xb5\x79\x51\x8a\x6b\x51\xbd\x30\x72\x3a\xe4\x75\x31\x93\x56\x14\x6e\x5a\x2f\xf8\x42\x0e\x0b\xad\xdc\x8e\x03\x2a\xc3\xbc\xfc\x03\x94\x37\x1d\xba\xa1\x6e\x41\x9d\xee\x38\xe9\xed\x46\xb5\x47\x35\xa6\xed\x6d\x8e\x1d\xec\x41\xab\x13\x45\xdb\xcc\x03\xcc\x16\x0c\x21\x2f\xf6\x32\x59\x0f\x9a\xdc\x9f\xc7\x1c\x12\x0e\x78\xd1\xee\xc3\x5d\x3b\x0c\x20\x81\x5b\x99\x51\xca\x39\x2f\x91\x94\x72\xb5\xbc\xf7\xc3\xef\x96\x14\xe0\xf2\x8b\xe5\x10\xba\xd0\xd5\x90\xab\xd2\xfd\x1b\x13\x76\x8a\xe5\x5e\xd6\xb0\x91\xbd\x08\xc1\x97\xf3\xb3\x87\xb9\x12\x8d\xdc\xc3\xad\x27\x79\xad\xa3\x10\x85\xa2\x2a\x06\x6a\xd4\x8d\xf0\x4c\x33\x17\x50\xa5\xf1\xbd\xfe\x5f\xf2\xbf\x04\xb4\xb3\x6d\x22\xd5\xed\x5e\x93\x44\x76\xec\x38\xde\xf7\xb1\x45\x6a\x93\x83\xc0\x2b\x6e\x2c\x41\x6b\x79\x0c\x82\x6c\x1a\x5e\x41\x01\x06\xb3\xd9\x31\xdc\xe9\x0c\xf9\x78\x01\x37\x90\xe1\x5a\xcc\xa5\x22\x28\x25\xdb\x15\xa8\xa8\xbf\x64\x75\xd0\x70\x52\x56\x18\xcb\xf8\x35\x97\x15\x58\xe7\xf5\xd8\x88\xfa\x1a\x0b\x52\x11\xd4\x20\x6f\xeb\x59\x54\x73\x02\xc5\xa8\x07\xd2\x7c\xfc\x1c\x56\x77\xe5\xb6\x09\x80\x36\xd4\x1a\xfd\xc6\x51\xef\x45\xef\x41\xf5\x72\xe3\xcf\xee\x0d\x3b\xaa\x31\xee\xfc\xfd\x45\xf0\xda\x8e\x05\xb7\x9f\xe5\x6d\x7c\x77\xe5\x48\x67\xed\x42\x29\xf7\x70\xa0\x6f\x04\x9b\x6a\xeb\x44\xac\x06\xce\x3e\xca\xa4\x08\xea\x13\x0e\xda\x7d\x9f\xe8\x38\xcb\xcf\x35\x87\x14\x1f\xad\x7a\x4e\x33\x6f\xb8\x3a\x4f\x92\x8e\xe9\x24\x59\x7c\x1a\x81\x34\xb4\x12\xb4\x77\xe8\xcd\x00\x0a\xf4\x30\x53\x9e\x0b\x63\x6e\x05\xd8\xc8\xa3\x0b\xf1\x69\xbc\xca\x2d\xd7\xda\xdc\xff\x86\x69\x21\x4e\x80\x2e\x85\xe5\xb2\xf2\x57\x19\x97\x22\xac\xd2\x36\xea\x7a\xeb\x04\x6b\xc1\xcd\x6d\x02\x42\x36\xea\x4f\xf0\x30\x0e\x5a\x2b\x31\xbc\xd1\x75\xc9\x4e\xf9\x5c\x54\xa7\xdc\x08\xea\x2b\x4d\xd1\xc3\x3d\x3a\x34\x7b\x1d\xf2\x7a\xdb\xd7\x86\x21\xa3\xf1\x27\x9a\x84\xe1\xaf\xa8\x62\xe1\x00\x07\xde\x04\xf9\xb9\x6e\xc4\x80\xbd\x73\xdc\x6b\xc0\xbe\xa8\x2b\xa5\x6f\xee\x36\x56\x7b\xab\x17\x24\x1b\x69\x1a\xfe\xe1\x61\x75\x32\x83\x4f\x18\xee\x8e\x23\x22\x82\xbf\xc1\xd4\x98\x33\x9b\xf0\xa8\x1f\x91\xfb\xe7\x8a\x09\xca\x29\x8a\xb5\x9e\xd6\xc2\x20\x72\xcd\x5a\x90\xc4\xae\x26\xe7\x1f\x85\xa2\xe4\xbe\xad\xc3\x3b\x5f\xd7\xca\x8f\xd4\xf3\xb5\x69\xfc\x85\xf6\x9b\x5e\xb6\xa8\xd6\x8a\x1a\xb7\x47\x04\x26\x03\xdd\x60\x7c\xda\x34\xc2\xf5\x46\xa7\x84\xeb\x25\xcf\xa2\x50\x72\x9b\x75\xd4\xcf\xee\xf4\xf2\xe7\xcd\x8b\xbd\x91\xf7\x6d\xe3\x4f\xdb\xcd\x52\x77\x35\x48\x6d\xbd\x33\x5b\x8d\x50\xcf\xe6\xa7\x67\xf3\xd3\xb7\x64\x7e\xda\x7a\xe2\x6f\x33\x39\x7d\x1b\xc6\xa6\xad\x53\xbc\xcd\xc0\xf4\x24\x4d\x4b\x9d\x66\x74\xab\x39\xe9\xc9\x1a\x92\xb6\x4e\xad\xa3\xf1\xe8\xf7\x63\x36\xda\xba\x62\xb7\x98\x8a\x9e\xa0\x91\xa8\x8b\x40\x26\xca\x2e\x62\xe2\x79\xf2\x70\x2a\x28\xc6\x72\x96\xa1\x3b\x1f\x94\x93\x8a\x33\xbb\x4a\x8b\x4e\x80\xdb\x3a\xb6\x43\x1a\x5c\x77\xd9\x8b\x04\x46\x2a\xf6\xb8\x32\x58\x76\xf6\xf6\xe2\xd3\xdb\xd3\x93\xcf\x6f\xcf\xda\xf2\xdd\xba\x95\xde\x22\x89\xdd\x6e\x83\x18\x26\x92\xd8\x86\x07\x1c\x41\xde\xf0\x93\x3b\x03\x1b\x7e\x6a\x1a\xb9\xae\xd5\xdd\xe5\xc2\x3b\x71\xb9\x3b\xf1\x8f\xed\xb7\xb3\xeb\xf5\xfc\x82\x81\x53\x9c\x62\xce\x9c\xdc\x33\xd3\x55\x69\x7c\xdc\xea\xf9\x59\xc8\xa4\x92\xaa\xa8\x9a\xd2\x09\x17\x5f\xbe\x9c\x9f\x99\x11\x63\x6f\x44\xc1\x1b\x03\x56\x98\x52\xab\x43\xcb\x7e\xfa\xf8\xfe\xdf\x20\x1e\x1b\x9e\x18\x04\x5c\x13\x40\xe5\x95\x1c\x81\x85\x2d\xc2\xb5\xb1\x37\x02\x05\x15\x78\x73\xc1\x17\x8e\x8a\x19\xac\x5c\x61\x41\x16\x99\x89\x6a\xe1\x28\xe6\x95\x60\x11\x41\xd5\x75\x1c\x2b\xcc\xfb\xf0\xc9\xa9\xb0\x98\x75\x75\x5b\x84\xe4\xad\xab\xb6\xc5\xe2\x7a\x07\x5b\x6b\xa6\x3e\x92\x36\x7e\xc3\x0d\x59\xac\xd6\x8e\x76\xcb\xfe\x6e\xb7\xcf\x6c\x36\x71\x6c\x30\x6e\x20\x79\x86\xbf\x56\xc6\xec\x06\x1b\xed\x18\x18\x44\x22\x6d\x67\x6b\xea\xe6\x30\xa0\xf5\x75\x00\x56\x6c\x19\xa2\xbd\xc8\xd9\x8b\x43\x44\x76\x32\xe4\x6e\x63\x81\x22\x22\x65\x56\xfb\x93\xe2\xe7\xf2\xef\x9a\x71\xa8\xfe\x1a\xc7\x4b\x16\x19\xf6\x3f\xff\xfb\x0f\xff\xf0\xff\x03\x00\x00\xff\xff\x05\x75\x02\xbb\xcd\xa1\x0c\x00") +var _olmManifests0280CrdsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x79\x77\x23\xb7\x95\x30\x0e\xff\xfd\xf8\x53\xe0\x28\x99\xd3\x92\x43\x52\xdd\x71\x26\xcf\x4c\x4f\x12\x1f\x8d\xd4\x76\xf4\xba\x17\x1d\x49\x76\xde\x79\x1c\x4f\x0c\x56\x5d\x92\x88\xaa\x80\x0a\x80\xa2\x44\xc7\xf9\xee\xbf\x83\x0b\xa0\x16\xee\xb5\x48\x62\xb7\x81\x9c\x13\xb7\x58\x55\x58\x2f\xee\xbe\x0c\x87\xc3\xcf\x68\xc6\xbe\x03\xa9\x98\xe0\xaf\x09\xcd\x18\x3c\x68\xe0\xe6\x2f\x35\xba\xfb\x0f\x35\x62\xe2\x74\xfe\xea\xb3\x3b\xc6\xe3\xd7\xe4\x3c\x57\x5a\xa4\xd7\xa0\x44\x2e\x23\xb8\x80\x09\xe3\x4c\x33\xc1\x3f\x4b\x41\xd3\x98\x6a\xfa\xfa\x33\x42\x28\xe7\x42\x53\xf3\xb3\x32\x7f\x12\x12\x09\xae\xa5\x48\x12\x90\xc3\x29\xf0\xd1\x5d\x3e\x86\x71\xce\x92\x18\x24\x76\xee\x87\x9e\xbf\x1c\xbd\xfa\xdd\xe8\xe5\x67\x84\x70\x9a\xc2\x6b\x12\x51\x4d\x13\x31\xb5\x63\xa9\x91\xc8\x40\x52\x2d\xa4\x1a\x45\x42\x82\x30\xff\x49\x3f\x53\x19\x44\x66\x90\xa9\x14\x79\xf6\x9a\xac\x7d\xc7\xf6\xe7\xe7\x42\x35\x4c\x85\x64\xfe\x6f\x42\x86\x44\x24\x29\xfe\xdb\xad\xd1\x0e\x7b\x83\xc3\xe2\xef\x09\x53\xfa\x9b\xd5\x67\x6f\x99\xd2\xf8\x3c\x4b\x72\x49\x93\xe5\x09\xe3\x23\x35\x13\x52\xbf\x2f\x87\x37\xc3\x45\x54\x2b\x19\xd9\xc7\x8c\x4f\xf3\x84\xca\xa5\x6f\x3f\x23\x44\x45\x22\x83\xd7\x04\x3f\xcd\x68\x04\xf1\x67\x84\xb8\x9d\x72\x5d\x0d\x09\x8d\x63\xdc\x7d\x9a\x5c\x49\xc6\x35\xc8\x73\x91\xe4\x29\x2f\x86\x32\xef\xc4\xa0\x22\xc9\x32\x8d\x3b\x7c\x3b\x03\x92\x49\xd0\x7a\x81\x5b\x42\xc4\x84\xe8\x19\xf8\xb1\x8b\xaf\x08\xf9\xbb\x12\xfc\x8a\xea\xd9\x6b\x32\x32\x3b\x3c\x8a\x99\xca\x12\xba\x30\xb3\xa9\xbc\x65\x8f\xe9\xc2\x3e\xab\xfc\xae\x17\x66\xea\x4a\x4b\xc6\xa7\xdb\xa6\x62\xde\xdb\x7f\x0e\x76\x6b\x6e\x17\xd9\xea\x14\x96\x7e\xdc\x77\xfc\x2c\x1f\x27\x4c\xcd\x40\xee\x3f\x89\xe2\x93\x95\x39\x5c\xad\x79\xb2\x61\x22\x95\x4e\xfd\xbd\x19\x45\x12\xf0\xca\xdc\xb2\x14\x94\xa6\x69\xb6\x32\xc0\xd9\x74\x75\x8d\x31\xd5\xfe\x47\xfb\xd2\xfc\x15\x4d\xb2\x19\x7d\xe5\x7e\x54\xd1\x0c\x52\x5a\xc2\x83\xc8\x80\x9f\x5d\x5d\x7e\xf7\xc5\xcd\xd2\x03\x52\xdf\x9d\x1a\x9c\x13\xa6\x08\x25\x12\x32\xa1\x98\x16\x72\x61\x76\xeb\xfc\xe6\x3b\x35\x20\xe7\xd7\x17\x6a\x40\x28\x8f\x8b\x8b\x47\x32\x1a\xdd\xd1\x29\xa8\xd1\xca\x5c\xc5\xf8\xef\x10\xe9\xca\xcf\x12\xfe\x91\x33\x09\x71\x75\x16\x66\x7b\xfc\x9e\x2c\xfd\x6c\xf6\xbf\xf2\x53\x26\xcd\x98\xba\x72\x91\x6d\xab\x20\xb3\xda\xef\x4b\x2b\xfc\x79\xb8\xf4\x94\x10\xb3\x31\xf6\x4b\x12\x1b\xcc\x06\x0a\x81\xc2\xdd\x3a\x88\xdd\x6e\x5a\x60\x61\xca\xec\x88\x04\x05\xdc\xe2\x3a\xf3\x33\xe5\x6e\x95\xa3\x95\xce\x6f\x40\x9a\x8e\x0c\x42\xc8\x93\xd8\xa0\xc4\x39\x48\x4d\x24\x44\x62\xca\xd9\x4f\x45\xef\x8a\x68\x81\xc3\x26\x54\x83\xd2\x04\xef\x35\xa7\x09\x99\xd3\x24\x07\xdc\xec\x95\xbe\x53\xba\x20\x12\xcc\xb8\x24\xe7\x95\x1e\xf1\x13\xb5\x3a\x97\x77\x42\x02\x61\x7c\x22\x5e\x93\x99\xd6\x99\x7a\x7d\x7a\x3a\x65\xda\x23\xfb\x48\xa4\x69\xce\x99\x5e\x9c\x22\xde\x66\xe3\xdc\x20\xd4\xd3\x18\xe6\x90\x9c\x2a\x36\x1d\x52\x19\xcd\x98\x86\x48\xe7\x12\x4e\x69\xc6\x86\xb8\x18\x8e\x08\x7f\x94\xc6\xbf\x92\x50\xc5\x80\xcb\x60\xb0\x74\x1b\x88\xc7\xbb\x0d\x0f\xcb\xe0\x63\x0b\x98\xb6\x43\xbb\xd8\xf2\x4c\xcc\x4f\x66\x1b\xaf\xdf\xdc\xdc\x12\x3f\x23\x7b\x6e\xf6\x88\xca\x57\xd7\xec\x90\x3f\x2d\xb3\xb3\x8c\x4f\x40\xda\x2f\x27\x52\xa4\xd8\x2b\xf0\x38\x13\x8c\x6b\x8b\x35\x12\x06\x5c\x13\x95\x8f\x53\xa6\x15\x82\x35\x28\x6d\x0e\x72\xb5\xe3\x73\x24\x8e\x64\x0c\x24\xcf\xcc\xe5\x8d\x57\x5f\xb9\xe4\xe4\x9c\xa6\x90\x9c\x53\x05\x4f\x7e\x76\xe6\x8c\xd4\xd0\x1c\xc8\xde\xa7\x57\x25\xfd\xab\x1f\xac\xdc\x7a\x42\x3c\xcd\xde\xeb\xe5\x4d\x68\x82\x58\x9c\xb0\x8e\x26\x90\x2d\xd8\xc1\x34\x1a\xc7\x12\xd4\x9a\x07\xbb\xa1\xce\xb4\x33\xfb\xb9\x05\xbe\x99\x50\x06\x08\xa8\x26\x1f\xde\xbe\x23\x11\xe5\x24\x57\x60\xae\x70\x24\x38\x37\x50\xa6\x05\xa1\x86\xe6\x0e\xe1\x81\x29\x84\x4a\x09\x53\xa6\xb4\x5c\xac\x9e\xad\x69\x5f\x09\x99\x52\xfd\x9a\xfc\xc1\xbf\x36\xc4\x21\x84\x24\x2c\xfb\xd3\xeb\x3f\x64\x42\xea\x3f\xad\xfd\xf0\x03\x4f\x16\x66\xf0\x98\xdc\xcf\x80\x93\x9b\x62\x67\xc8\x1f\x2b\x7f\x7c\x2d\xb3\x68\xfd\xc0\x97\x53\x2e\xa4\xff\xda\x80\xf5\x65\x4a\xa7\x40\x26\x0c\x12\xbc\x68\x0a\xd6\x60\xb5\x2d\x60\x41\x2c\xe3\x37\x61\xd3\x77\x34\x6b\xbb\xd7\xe7\xbe\x03\x33\x03\x33\xa9\x2a\xdb\x52\x3e\xd4\x02\x6f\x94\x59\xbc\xf9\x27\x8d\xee\x08\x75\x83\xa7\x34\x1b\x2a\xbc\xcd\x3b\x36\x7e\xbf\xfd\x3b\xf7\x9d\x9a\x13\x29\x7f\xbe\x74\x58\xba\xf1\x0e\x55\x37\xa1\xf1\xb7\x25\x53\xb6\x73\x7f\xdf\xad\xa3\xa9\x7b\x8c\x31\x95\x59\x74\x25\x62\xbb\xec\xb6\xa7\xf8\x75\xb5\x13\x02\x0f\x99\x50\xa0\x48\xcc\x26\x13\x90\x06\x73\x8a\x39\x48\xc9\x62\x50\x64\x22\x24\x1e\x6d\x26\x62\x44\x13\xc5\x51\xd7\xf8\x91\x2b\xb1\x06\x6d\x92\x46\x77\x00\x99\x16\x0b\xe1\xbb\x60\x7b\x2d\x52\x22\x3b\x70\x8c\x69\x74\x82\xe2\xd1\x62\xfd\xd3\xa5\xad\x3b\x73\x2f\x7b\x40\x77\xac\xa8\xc3\x70\x2f\x94\xd9\x92\x17\xaa\xe8\x73\xfd\xfa\x77\x4e\x79\x9f\x69\x9b\xc6\x45\x0c\x67\x3b\xa6\xbf\xb2\x84\x0b\xfc\x63\x0c\x0a\x3f\x2f\xa6\x8a\x8c\x4d\x9c\x27\x88\xfb\xf2\xa4\x7e\xca\x9b\xd6\xb1\xe7\x5a\xf6\x5d\x8f\x7d\x0f\x26\x20\x25\xc4\x17\xb9\x01\xf5\x9b\x62\x56\x0e\xf3\xd9\x9f\xdf\x3c\x40\x94\x6f\xba\x8e\x1b\x97\xbe\x01\xf0\xab\xcd\x08\x1c\x6e\x27\x40\x92\x7b\x96\x24\x6e\x46\x06\x65\xf9\x07\x66\x4b\x90\x03\x34\x3b\xa8\x2c\x61\x51\x54\x33\x35\x59\xec\x1c\xc0\xec\x68\xb1\xe7\xf0\x60\x98\x1b\x94\x16\xf1\x22\xb1\x09\x83\x98\x8c\x17\x8e\x8f\x31\x48\x7d\x40\xc6\xb9\x26\x4c\x23\x93\x13\xcd\x84\x50\xcb\x44\x74\xb5\x51\x7b\xb4\x38\xaf\x39\x13\xc8\xa3\x12\xc1\xc1\x60\xc3\xd4\x70\x26\xee\xbe\x56\x86\x1f\xe1\xca\xcb\xcf\xd8\x32\x63\xb1\xda\x52\x43\xf1\x8a\xe3\xf2\x37\xc2\x0c\x73\xcf\xf4\x0c\xff\x98\x1a\x71\xc9\xf0\xc7\x2a\x4f\xcd\xa0\xf7\xc0\xa6\x33\xad\x06\x84\x8d\xd6\x30\x4d\xcb\xcd\x00\x20\xd0\x68\x56\x99\x56\x0a\xa0\x15\xa1\x49\xe2\x97\x50\x85\x5a\xcb\x81\xa4\x86\x57\x24\xc7\x9e\x99\xdc\x39\x8a\x63\x04\x07\x05\x07\xb3\x0c\x78\x6b\x8f\x6b\x40\x40\x47\xa3\x93\xc1\xce\xee\x23\x91\x66\xb9\x06\xc3\x01\xe7\xa9\x39\x5a\xa6\x8d\x0c\x66\x19\x5f\x29\xf2\xa9\xdd\x29\x48\xdc\xc4\xbd\xd8\x62\x29\xba\xc1\x7f\x34\x8e\xd7\xe1\xfc\xe5\x76\x64\x37\xf7\xc8\x4b\x26\x66\x38\x66\x37\x09\xf7\x2f\xa5\x3a\x9a\x39\x61\x29\x12\x52\x82\xca\x04\x37\x3d\xdb\x27\x6f\xca\xb5\xfd\x97\x79\x67\xe7\x78\xa6\xd3\x63\x75\x52\x1e\xf6\x8c\x4d\x67\xfe\xac\xa9\x04\xfc\xad\x0e\x23\xbb\x8e\xdc\xa2\x12\x2a\x25\xdd\x75\x8f\x98\x86\x74\x07\x22\x21\x2d\x6e\x3f\x21\x67\x9c\x40\x9a\xe9\x45\x05\xb0\x2b\x20\xa6\x41\xa6\xc5\x46\x22\x14\x22\xda\x53\x76\x13\x58\x9a\x25\x2c\x62\xda\x81\x39\x79\xb9\xc7\x78\xc7\xe6\x26\x10\xa6\x0d\xd1\x20\x5c\x0c\x45\x76\x32\x22\x67\x84\xe7\x05\xe2\xd9\x36\x05\x2e\x8a\x19\xb8\x8e\xcc\xb4\x94\x28\xfb\xda\x8d\x8f\xf6\x43\xdf\xb6\x6d\x66\xf2\x57\xdb\xd0\xcd\x1f\xf8\x1e\x97\xd0\xbc\x6e\x77\x6d\xe7\xab\xfb\x12\x12\xff\xb6\x9f\xc3\x3e\x6f\x2f\x53\x7b\x7b\x73\x14\x24\x10\x69\x43\x0d\x41\xa6\x03\x42\x95\x12\x11\x33\x52\x61\x09\xfb\xf5\x0b\x65\x57\xb2\x7b\xef\x49\xd3\xfd\x27\x8d\xd7\x4f\x50\xf1\x50\xbf\xdf\xfb\x7e\xb7\xb2\x1b\x09\x33\x32\xce\x64\x69\x57\x6a\x78\x77\xbc\xc0\xa7\x2f\x14\x49\xe8\x18\x92\x35\x42\xfb\xa6\xb6\xff\xe5\x2f\xdb\x9e\x68\x60\xc3\x82\xf6\x42\x08\x65\x5b\x86\x86\xca\xba\x9d\x8a\xa3\x80\x13\x43\xaa\x8c\x68\x4f\x19\x57\x4e\xbf\x33\x20\x94\xdc\xc1\xc2\xea\xe1\x28\x2f\x54\x71\x8d\xa6\x80\x1d\x4b\xb0\x04\xdd\xc0\xdd\x1d\x2c\xb0\xc3\x4d\x3a\xa4\x2d\x5d\x35\x85\x3b\xdb\x9a\x60\x80\xb2\x0d\xcd\x44\x1b\x7e\xd1\x62\x83\x9a\x5f\x0d\xdb\xee\x60\x2b\xfb\xbc\xae\xad\x68\xa9\x11\xdc\xf1\x3c\xf0\x90\x90\x02\x7b\x78\xa0\x59\x96\x30\x58\xaf\x6a\xda\xde\xb6\x4a\x7d\xdb\x9a\xdf\xbd\x4e\xeb\x6a\x78\x41\x4c\xbb\x2e\xd4\x75\x16\xde\x5f\x28\x0b\xaf\x06\xef\xcc\x58\x66\x15\x2d\x0a\x10\x8d\x34\x07\x5a\xdb\xbe\xa3\x09\x2b\x75\xd9\x0a\x99\x8d\x4b\x3e\x20\xef\x85\x36\xff\x79\xf3\xc0\x94\xe1\x31\x2f\x04\xa8\xf7\x42\xe3\x9f\x23\xf2\xb5\xb6\x57\xef\xed\x9e\x78\xb9\x6c\xad\xcf\xc0\xae\xef\xa9\x4f\xe0\x8c\x5b\x24\x6a\x76\xb8\xaa\x74\x55\x23\x72\x69\xd9\xc1\xc2\x0a\xc0\x14\xb9\xe4\x46\x28\xb0\x3b\xd7\x78\x28\xd4\xbb\x63\xdf\x6e\xc8\x34\x57\xa8\x35\xe5\x82\x0f\x91\x8d\x5a\x3b\xa6\x3d\x20\x33\x6e\xf5\x88\x7a\x1c\x7e\xf3\xd0\x5f\xa3\x8e\xee\xad\x1e\x54\x3e\x6e\x3c\x6e\x65\xb0\x19\x9d\x23\x6b\xcf\xf8\x34\x29\x98\xf8\x01\xb9\x9f\xb1\x68\x66\xa5\xc7\x31\x58\xe3\x40\x26\xc1\x70\x0c\x54\x19\xe4\x6f\x7e\x99\x82\x6c\x0e\xfa\xb7\x46\x34\xb0\xe3\x5b\xd3\x46\x42\x23\x88\x49\x8c\x22\x8b\xd5\xb2\x53\x0d\x53\x16\x91\x14\xe4\x14\x48\x66\x48\x7f\x3b\x80\x6f\x46\x89\x6d\x6b\x4c\x8f\xab\x03\x36\xba\x61\xc8\xd3\x7c\x65\x64\xa4\x27\x62\x67\x50\x1e\x0b\xec\x4c\x60\x67\x02\x3b\x13\xd8\x99\xc0\xce\xec\xdd\x02\x3b\xd3\x79\xf8\xc0\xce\x7c\xe2\xec\xcc\xc3\xf0\x2e\x1f\x83\xe4\xa0\x41\x0d\x53\x9a\x0d\xdd\x94\xb5\x48\x59\xb4\x47\x0f\x56\xdf\xd4\x42\xc1\xf5\x17\xab\xa8\x5c\xd6\x68\x21\x73\xe5\x5d\x33\xea\xaa\x2d\xc3\x33\xdc\x38\x42\x70\x8b\xea\x30\x66\xed\xd0\x92\xf2\x29\x90\x57\xc3\x57\x2f\x5f\x36\x51\x7c\x39\xd0\xd9\xeb\x8b\x89\x33\xba\x33\xae\xbf\xf8\xed\xd6\x2f\x36\xa9\xf2\x9f\xc6\x86\xe4\x2e\x6a\x61\x36\xa8\x71\x94\x1b\xcc\x3c\x88\xf5\xb9\xd0\x24\x05\x4d\xe8\x6e\x16\xa6\xaa\x11\x66\x29\x0c\x0a\x7b\x2c\xde\x52\xe7\xbc\xe2\xed\x55\x31\x11\xdc\x59\x05\xcc\xf9\xed\x3e\x9f\x56\x2b\x88\x80\x5a\xa7\x8a\x31\x98\x55\xec\xb6\x52\x69\xa2\x44\x6a\x66\xcd\xb8\xf6\x77\xde\x2c\x01\xfc\xc1\x90\x63\x18\x4d\x47\x24\xce\xb1\x5b\xca\x9d\x37\xce\x89\x5d\xad\x5a\x28\x0d\xe9\x6e\x33\x95\xa1\x1d\x12\xff\x63\xb6\x45\xcb\x85\xe9\x0c\xe6\xc0\x75\x4e\x93\x64\x41\x60\xce\x22\x5d\xec\x1f\x3a\x0f\x31\xad\xf6\xda\xa9\x06\x5c\xe7\xfe\x9c\xe6\x70\xe5\x92\xed\xc2\xe9\x4d\x18\xc5\x95\xbe\xf7\x41\x1b\xb5\x1b\x70\xed\x56\x32\xda\x28\x42\x69\xd3\xaf\xb5\x28\xe2\x3f\x11\xb8\x3f\x5c\xef\x36\x00\x91\xc6\xe8\xba\x01\x8a\x6e\xc7\x89\x38\x5b\x8c\x90\xce\x2e\xb4\xba\xd2\x35\xd6\x18\xbb\xf6\xda\xad\x11\x93\x3d\x07\xd4\x33\xb0\xf6\xb3\xb3\xf7\x17\xfb\xed\x18\x71\x76\xeb\x5b\x91\x89\x44\x4c\x17\xd5\xe3\xb5\xde\xbb\x2c\xcd\xbc\x7d\x91\x12\x95\x8f\x1d\xc7\x6a\x60\xfe\xfd\x12\x3c\x04\xab\x45\xb0\x5a\x04\x31\x1f\x5b\x10\xf3\x83\x98\x1f\xc4\xfc\xfd\x5a\x10\xf3\x3b\x0f\x1f\xc4\xfc\x4f\x5c\xcc\x0f\x56\x8b\x35\x0b\x0a\xec\x4c\x60\x67\xb0\x05\x76\x66\xfd\xba\x02\x3b\x43\x02\x3b\xb3\xa5\x05\x76\x26\xb0\x33\xb5\xf6\x31\x58\x2d\xda\x7d\x9b\x89\xb8\x43\xb8\x4b\x26\xe2\x2d\xd1\x2e\x56\xd5\x1c\x89\x61\x22\x22\xaa\x5d\x0c\xaa\xf9\xc4\xd9\x37\x14\x4d\xad\xf6\x7c\x40\x7e\x12\x1c\xac\xff\xbf\x81\x24\xd4\x61\x0b\x3d\x03\x69\x5e\x3f\x56\x27\x5b\x9d\xae\x43\xb4\x4c\x88\x96\x09\xd1\x32\x1b\xdb\xc1\x44\xcb\xcc\xa8\xb2\x70\x6b\xa9\xc8\xe6\xe0\x99\x0a\x4e\xba\x05\x99\x7e\xa2\xb1\x33\x06\xdc\x1d\x38\x62\x06\x85\x12\xa4\xec\xce\xc4\xce\x94\x0c\xf1\x55\x7d\x3f\x9c\x04\x8a\x8b\xa2\x71\x0c\x31\xc9\x40\x0e\x2d\x88\x0a\x32\x61\x3c\x5e\xb3\x56\xbf\x3f\xbb\xd1\xc3\x23\x06\xaf\xd4\xd7\xb1\xd7\x37\x8f\x13\xc1\x52\x9f\x48\x0b\x5b\x57\xd5\x60\x57\x23\x82\x07\x11\xcf\xd2\x54\x98\x1d\x12\xed\xec\x5c\xdf\xec\x29\xce\x36\x97\x48\x51\x8e\xf4\x56\xb1\x96\x9a\x9a\x46\x52\xc3\x99\x13\x5d\xff\x91\x83\x5c\x60\xa4\x75\x29\xa1\x15\x89\x3a\x9c\xaf\x05\x53\x24\xa2\xca\x92\xd5\x26\x5c\xe5\xe5\xc4\xc6\x99\xf1\x3c\x49\x06\xb6\x9f\xe5\xcb\xea\xd1\x1c\xc2\x01\x17\xe6\x79\x63\xe5\x51\x43\x6d\x46\x3b\x75\x41\x7b\xe3\x20\x59\x3e\xa7\xe5\xae\xac\x1a\xc9\x6b\xd9\xec\xb1\xac\x55\xb3\xad\x31\xf2\x36\x36\xdb\xda\xd6\x96\xd7\x6f\xc5\xe9\x77\x16\x6d\xb7\xec\x49\x07\x15\x1c\xbe\xdc\x78\x32\xfd\xa8\xe1\x48\x7b\x55\x1c\x69\xad\x8e\x23\xad\x54\x72\xa4\xad\x5a\x8e\x74\x50\xcd\x91\x76\xea\x39\xb2\x0c\x6d\xe6\x84\x1c\xe3\xfb\x38\x9a\x3a\xd2\x45\x53\x44\x3a\x68\xec\x48\x0f\x17\xab\x3a\x7e\x25\xed\xd1\xe3\xa9\xf0\xc8\xbe\x6a\x3c\xbc\x56\x35\x4d\xde\x53\x9f\x4b\x3b\x2d\x1e\xe9\xe9\x54\x9c\x7e\x8b\xa1\xda\xe8\xa9\xf4\x7a\xe4\xf9\x75\x7b\x5b\xa7\xe0\x86\xdf\x5b\x19\xd6\x6a\xf4\x0e\x0a\x34\xd2\x49\x89\x46\xda\x2b\xd2\x48\x7b\x60\x47\x5e\xe4\x2d\xba\x20\x75\xe0\x68\x1a\x43\x79\x65\x58\x4b\xc1\x31\x73\xd2\x84\xfc\xd3\x10\x6a\x3c\xfc\x7f\x91\x8c\x32\xa9\x8c\x04\xe1\xd4\xac\xd5\x67\x4e\x45\x56\xe9\xa6\xf1\x04\x30\x75\x94\xa1\xa3\x73\x9a\x18\x46\xc2\xfa\x7b\x3a\x39\xdf\xcc\x65\x99\x4d\x1b\x90\xfb\x99\x50\x96\xea\x17\xd9\xaf\x8e\xee\x60\x71\x34\xd8\x4b\x04\xaf\xb7\xea\xed\x39\xba\xe4\x47\x96\x3d\x59\x81\xfd\x82\x97\x11\x3c\x59\x90\x23\x7c\x76\xd4\x37\x1f\xd8\x82\x07\xa9\xa6\x18\x6d\x4b\xe2\x5b\x81\x6c\x57\xcf\x75\x52\x83\xbe\x6f\x60\xd1\xd6\x2e\xde\x08\xe6\xdf\xd5\x46\xf4\x4c\x2b\x82\x99\x91\x8f\x0b\xde\x04\xb5\x96\x96\x2d\x71\x7a\x20\xab\x12\x62\x49\xd2\x60\xb4\x31\x10\x4d\xef\x00\x0d\x0e\x98\x71\x4e\xb1\x18\x95\x5a\x82\x5b\xd0\xc1\x91\x0c\xc8\xf8\xd4\x68\x89\x10\x77\x79\xe6\x41\xcf\xa7\x33\x6c\x30\x24\xe3\x91\x48\xbd\x3b\xb5\x75\x69\x34\xb7\xc2\xdd\x97\xa1\x4d\xc2\x68\x7f\xc7\x81\x11\xcd\x3a\xf1\xff\xc7\xb7\x55\xe1\xf7\x47\x42\x15\xf9\x11\x19\x37\x4e\x8e\xf1\xc3\x93\x1f\x9b\x58\xb8\x8b\x0d\xb4\x1a\x4e\x91\x23\x66\x29\xd2\xec\x55\x74\x6c\xc5\xde\x6e\xdb\xb1\x06\x43\xfb\xfc\x55\xd5\xcd\xb0\x19\xba\xc8\x31\xe5\x9a\x9d\x94\x69\xba\x08\xc2\x01\x72\xa2\xb1\xe0\x2f\xb4\x9d\x9f\xc7\x6b\xbe\x83\x26\x46\xf0\x62\xdf\x4b\x03\x94\xd5\xc8\xdb\x23\x8f\x61\x42\xf3\x44\xbb\x74\x98\x06\xf5\x21\x35\x6d\x30\xc2\xad\xb7\x49\x38\xa6\x7a\x22\xe4\x98\xc5\x31\x70\xf4\x6e\xf7\xd3\x1f\x0b\x3d\x5b\x06\x77\x34\xc0\x56\xcf\xb8\xc9\xb0\x67\x89\x12\x83\xe5\x1e\xa3\x22\x5d\xa6\xb9\x45\x98\xd4\xad\x36\x00\x61\xca\x6c\xea\x86\xfc\x6d\x9b\x57\xc8\x0a\x9e\x2b\xc9\x66\xb4\xa2\xe4\x75\xc8\x56\x11\xe0\x74\x8c\x5a\xe7\xfa\x8c\x2e\x79\x45\xb3\x41\x26\x40\x75\x2e\x81\x4c\xa9\xde\x43\x8f\xee\xdb\x93\xb8\xc2\x74\x47\xba\x09\x53\xba\x15\xd6\x65\xea\x19\x10\xef\xf2\xa0\x01\xf7\xee\x85\x7b\xb9\xd0\x01\xfd\x7e\xb4\xe8\x77\x05\xe8\xfb\xc0\xc0\x2b\x9d\x06\x24\xec\xda\x47\x84\x84\xb9\xaf\x1b\xf0\xcc\xb6\x06\xab\x7e\xb3\x6e\xa5\x7e\x4a\xaa\xd4\xcc\x61\x94\x53\x3b\xad\x9c\x8f\x01\x43\x18\xc2\x1e\x62\x6f\x72\xcd\xb9\xcb\xc7\xee\x33\x06\xbb\x61\x2d\xc2\x5a\xb6\xec\x37\x18\xd3\x8b\x6e\x82\x83\x42\x45\x3e\x14\x5e\x1c\x95\x61\xb0\xd7\x26\x4b\xc1\x38\xb0\x52\x49\xc9\xe3\xe5\xc8\xb0\xb2\x6f\xb4\x1e\xa4\x40\xb9\x22\x47\xde\x91\xe4\x85\x2a\xdf\x38\x6a\x74\xe1\x7d\x4a\xc2\x62\xec\xe3\x7f\xfe\xeb\xa4\x96\x86\xb0\x1c\x3a\x58\x6b\x82\xb5\xa6\xda\x82\xb5\x66\x75\x12\xc1\x5a\xb3\xa9\x05\x6b\x4d\xab\xf1\x83\xb5\xa6\xde\x82\xb5\x26\x58\x6b\x82\xb5\x66\x73\x0b\xd6\x9a\x60\xad\xf9\x58\xad\x35\xa5\xa8\xf1\x14\xb2\x6a\x55\x2c\x74\x1e\xdf\xb6\x98\x14\xd5\x2c\x2a\x43\x21\xfd\x5b\xf6\x5f\xcf\x25\xb8\x56\x45\xcd\xae\x62\x6b\x55\x08\x5e\xd1\x12\x34\x96\x5a\x37\xca\xa8\x85\x14\xbb\x32\x46\x4f\xe2\xeb\xa1\x2a\x70\x2a\x3e\xa4\x4f\x01\xc7\xb7\x3e\x9a\xc4\x15\x96\x1b\x43\x19\x6a\x12\x93\x63\xaf\x09\x3d\x31\x27\xc5\x85\xae\x3f\xe4\x9a\x0d\xcb\x37\x0a\x1f\x5d\x54\xd8\xfa\x54\x5d\x4d\x76\xcb\x33\xf4\xa5\x66\xd0\x85\xb8\x14\x31\x15\x25\x98\x18\xc4\x0d\xb2\x36\x5b\xa6\x5c\xe1\x3d\x0c\xa4\x92\x39\xe7\x86\x77\x10\xdc\x05\x52\x34\x98\x89\xa5\x09\x56\x09\xeb\xae\x93\x95\x34\x70\x8d\x28\x6e\x94\xc7\x54\xf1\xc1\xa7\xda\x96\xf1\x73\xd9\x78\x04\x77\x2a\x6c\xf3\x8b\xed\xa7\xc1\x24\x8a\x9b\x86\xfb\xc9\x8a\x15\x35\xb9\x64\x6f\xf0\x72\x55\x27\xcb\x14\x9e\x23\x4d\x12\x71\xdf\x84\xb0\x34\x04\xe5\xd6\x99\xdf\xf6\x86\xde\xfb\xc6\x29\xe2\x96\x1c\xd6\xf7\x65\x64\x43\x1e\xb9\xe5\x16\xf2\xc8\x3d\x4e\x1e\xb9\x8a\xa1\xb1\x9a\x50\x6e\xf7\x5e\x61\xc2\xb9\x47\x4d\x28\x47\xc8\x5f\x5c\x61\x3f\x09\xd6\x3a\x98\x27\x9a\x65\x65\x58\xab\xb2\x27\x94\x58\x91\x71\xe2\x62\xea\xea\x17\xd0\xcc\x86\x46\xb3\x9d\x43\x2d\x5d\x54\x1c\x0f\xc3\x64\x15\x22\x44\x1b\x77\x86\xfa\x65\x9b\xc5\xcd\xcb\x92\x36\x78\x8f\x3d\x77\x4c\xd2\x5e\x28\xec\xc2\x95\x88\xad\x1a\x99\x15\x39\x36\x04\x2e\x59\x38\xb3\x6c\x0d\x97\xd5\x28\xe3\x1e\x03\x58\x3d\xcf\x1c\x3c\x73\x38\x65\x73\xe0\x25\x01\x3d\x56\x27\x27\x9e\x1f\x5d\x66\x01\xf6\xe8\xbd\x0b\x93\xb0\x0f\xe2\x6d\x4a\xdc\x97\x48\xf6\x1e\x23\xac\x21\xea\x7f\xa8\x10\xca\x3f\xed\x26\xeb\x7b\x0c\x62\xaf\xb4\x0f\x72\xac\x1c\x74\x49\xce\x77\xf6\xf2\x88\xb1\x64\x4d\x02\x96\x9a\x69\x7d\x5b\x04\x2a\xb5\x4d\x83\xf8\xb8\x01\x4a\x8f\x1a\x9c\xf4\xf1\x64\x2b\x7c\x66\xf3\xd6\x47\x90\xfe\xe7\x40\xcc\x59\x21\xff\xcf\xa6\xf6\x5c\xf9\x7f\x1e\xdd\x5c\xf5\xd1\xa5\x01\x7a\x52\xf3\xd4\xd3\x98\xa6\x3e\xb2\x34\x40\xcf\x62\x8a\x3a\xf0\x84\x40\x8f\x67\x82\xfa\xa4\xb3\xed\xb4\x34\x37\xb5\x87\xe0\x67\x35\x33\x3d\xab\x89\xe9\xf9\xcd\x4b\xad\xf8\x82\xae\x66\xa5\x27\x2f\x5b\xd1\xc6\xff\xbc\x1d\x3c\x3f\x5d\xc0\xcf\x13\x3b\x9c\x1f\x46\xa0\xcf\x33\x79\x99\x3f\x97\x87\xf9\xe3\x7a\x97\x3f\x43\x60\xcf\x13\x05\xf5\x3c\xa3\x2f\x79\x53\xfa\xde\x88\xaa\x77\x43\x9c\x6d\x7c\xc7\x5b\x06\xef\xb4\x44\x9e\x4f\x19\xb4\xf3\x09\xe0\xcf\x56\xc1\x3a\x01\x85\x3e\x13\x0a\xed\x2f\x38\xe7\xe9\x02\x73\x02\x22\x75\xad\x33\x22\x6d\x19\x80\xd3\x9b\x0e\xfd\x71\x02\x6f\x9e\x3a\xe8\xe6\x11\x02\x6e\x9e\x23\xd8\xe6\x11\x02\x6d\x82\xe5\x61\xcf\x16\x2c\x0f\xfb\xb6\x60\x79\xd8\xd4\x82\xe5\x61\xb9\x05\xcb\x43\xb0\x3c\x04\xcb\x43\xb0\x3c\xac\x0e\x18\x2c\x0f\x1b\x07\x0f\x96\x87\x4f\xde\xf2\xd0\x34\x88\xa5\x1d\x2c\x3f\x4f\xf0\xca\xd3\x06\xae\xf4\x1f\xb4\xf2\x8c\x01\x2b\x87\xa4\xdc\x68\x1c\xa0\xd2\x0e\x46\x0f\x25\x30\xe5\x30\x82\x52\x9e\x3d\x20\xa5\x6b\x30\x4a\x3f\x81\x28\x7b\x81\x6a\x26\xe2\x33\xae\x59\xd7\x82\x3c\x55\x18\xda\x54\x95\x87\xce\x05\x8b\x49\x96\x6b\x57\x08\x24\x54\xe6\xd9\x79\x8c\x4f\x53\x99\xa7\x76\x78\xa1\x3c\xcf\xb6\x76\x30\xe5\x79\x36\x9d\x59\xa8\xd1\x53\x6f\xa1\x46\x4f\xa8\xd1\x13\x6a\xf4\xd8\x16\x6a\xf4\x84\x1a\x3d\x21\xeb\x5b\xc8\xfa\x16\xb2\xbe\xed\xff\x55\xc8\xfa\xb6\xb9\x85\xac\x6f\x4d\x5a\xc8\xfa\xb6\xf7\xe8\x21\xeb\x5b\xc8\xfa\xd6\x6c\xe0\x90\xf5\x6d\xef\x09\x84\xac\x6f\xbf\xd8\xac\x6f\xa1\x46\xcf\x47\x51\x27\x22\x14\x89\x68\xe2\x2e\x76\x50\x45\x22\x42\x8d\x9e\x50\x1e\x62\xb9\x85\x1a\x3d\x1f\x11\xee\x0d\x35\x7a\x3e\x66\xf4\x1b\x6a\xf4\x04\x24\xbc\xbe\x85\x1a\x3d\xa1\x46\xcf\xce\x16\x6a\xf4\x04\x6b\x4d\xb0\xd6\xd4\x5b\xb0\xd6\x6c\x6f\xc1\x5a\xb3\xab\x05\x6b\xcd\xd6\x16\xac\x35\xcd\x5b\xb0\xd6\x04\x6b\xcd\x5e\x2d\x58\x6b\x82\xb5\xe6\x63\xb5\xd6\x84\x1a\x3d\xa1\x46\x4f\xa8\xd1\x13\x6a\xf4\x84\x1a\x3d\x95\x16\x6a\xf4\x84\x1a\x3d\x8f\x57\xa3\xa7\x16\x55\xf3\xf1\x16\xea\x69\xbe\x8c\x50\xad\x27\x54\xeb\xd9\xd0\x42\xb5\x9e\x50\xad\x67\x5d\x0b\xd5\x7a\x42\xb5\x9e\x2d\x2d\xe4\xcc\xdb\xb3\x85\x9c\x79\xfb\xb6\x90\x33\x6f\x53\x0b\x39\xf3\x96\x5b\xc8\x99\x17\x72\xe6\x85\x9c\x79\x21\x67\xde\xea\x80\x21\x67\xde\xc6\xc1\x43\xce\xbc\x4f\x3e\x67\x5e\xa8\xd6\x73\x90\xd5\x26\x42\xa9\x89\x1d\xed\x70\x4a\x4d\x84\x6a\x3d\xbf\xcc\x22\x13\xa1\x5a\xcf\x01\xe3\xcf\x50\xad\x67\x77\x3b\x1c\x14\x1a\xaa\xf5\xfc\x92\x11\x69\xa8\xd6\x13\xaa\xf5\x14\x2d\x54\xeb\x09\x96\x87\x8d\x2d\x58\x1e\x48\xb0\x3c\x14\x2d\x58\x1e\xf6\x1a\x37\x58\x1e\x82\xe5\x21\x58\x1e\xb6\x4f\x3a\x58\x1e\xb6\x0c\x17\x2c\x0f\xc1\xf2\xb0\xa6\x85\x6a\x3d\x9b\x5b\xa8\xd6\x13\xaa\xf5\x84\x6a\x3d\xa1\x5a\xcf\x63\x56\xeb\x81\x07\x2d\x69\xa4\xcf\x05\xd7\xc0\x37\x06\xa2\xec\x0b\x91\x6f\x6a\xbd\x19\xea\x36\x61\xd3\x5c\x3a\x19\x77\x7a\x7d\x75\x4e\x22\xaa\x69\x22\xa6\xe4\x4a\xc4\x56\x87\x8b\x5f\x14\x3f\xa7\xa0\x69\x4c\x35\x2d\xd4\xff\x46\x16\x9c\xb3\x18\x91\x5a\x0c\x0f\x84\xa5\x74\x0a\x06\x79\x6c\x9c\x44\xae\x80\x50\x72\x0f\x49\x32\xbc\xe3\xe2\x9e\x93\x39\x48\x55\x41\x97\x3f\x8a\x2c\xfd\x91\x28\x90\x73\x5b\xf1\x06\x1e\x32\x03\x2b\x4c\x5b\xba\xeb\x67\x52\x1d\xae\x74\xfb\x3e\xb7\x4f\x6f\xd0\x4d\x76\x5b\xf1\x98\x62\xed\xb8\x4c\x33\xa7\xcf\x0d\x13\xfb\xb9\xb9\x97\xb9\xf2\x3e\xea\x13\x96\xc0\x70\x4c\x15\xc4\x7e\x5c\x65\xae\x8b\x90\xb1\x9d\x5b\xae\x59\xc2\x7e\x02\x87\xcd\xad\x8e\x77\xd3\xc9\xef\x41\xf0\x77\x0b\xfd\x43\x12\xd1\x68\x06\x17\x6c\xb3\xb8\x3e\xf4\x53\xdd\xfc\xd2\x3e\xf2\xbb\x1f\x67\xef\xe2\x50\xe7\xee\x03\x2f\xa1\xc7\x4c\x22\x7e\x59\x10\xa5\x85\xf4\x3b\x9a\x49\x18\x46\x34\x89\xf2\x04\xb1\xc9\xd9\xd5\xa5\x1d\x69\x77\x79\xa7\x1d\x08\xbd\x5c\x74\x83\x19\xfb\x4f\xb6\xcf\x79\x15\x0a\x90\x31\x44\x9d\x5c\x97\x69\xa7\x90\x0a\xb9\xb8\xa5\x72\x0a\x9d\xaf\xf6\xbb\x4a\x5f\xcb\x17\xfb\xd7\x5f\x7f\x78\xf7\xe6\xdd\xdb\xcb\x77\x97\xb7\x0e\xe5\x7a\x6b\xd4\xf2\x95\x1f\x95\x16\x0f\xa2\xc4\x44\xbb\x29\x92\x84\xa5\x4c\x17\x5f\xd9\xbb\xb9\x59\x6c\xb4\x28\x19\xa3\xcd\x72\xae\x59\x0a\xd6\xf4\x44\xb5\x36\xac\x86\xb9\x37\x29\x80\xc6\x7a\x52\x29\xbd\x03\x83\x37\xc9\x34\xa7\x92\x72\x0d\x1e\xcb\x33\x6d\x3f\x8a\x05\x51\xc2\x09\xb3\x4c\x95\x66\x2a\x05\xda\x06\xe8\x5c\x89\xcd\xa8\x06\x7b\x98\xd1\xb9\x2d\xf8\x33\x11\x06\x35\x9b\x43\x4d\x45\xcc\x26\x2c\xb2\xda\x11\x92\xd2\xb8\x08\x2a\x71\x0c\x3f\xc8\x82\xb2\x95\x0b\xde\x76\x2b\x97\xb7\x19\xf8\x9c\x49\xc1\x51\x90\x99\x53\xc9\xe8\x38\x81\xc2\x00\xa7\x40\xdb\xf1\xca\x05\x71\x32\x5e\x68\xd8\x8c\xae\xec\x08\xee\x34\x5c\xa5\xa8\xcd\xfd\x7d\xf6\xd9\xc6\x8e\x6e\xcb\xf0\xaf\x92\x11\x31\x1d\x30\x17\x17\x10\x83\x62\x0e\x2b\x4a\x88\xf3\xc8\xef\x9d\xd0\x99\x64\x56\x2c\xa3\x05\xc8\x38\x2c\x4d\x15\x49\x73\x43\x85\x0d\x87\xa3\x14\x1b\x27\x30\x30\x7c\x0c\xdb\x1c\xb7\x52\xf6\x31\x06\xb3\xcd\xd8\x13\x72\x17\x73\x30\x00\x67\x00\xd9\xf2\xa0\x00\x86\xc9\x11\x58\xb5\x89\x5a\x56\xc5\x1b\x2d\x0d\xad\x8d\x9c\xc9\xfa\x72\x42\x16\x22\x97\x35\xba\x30\xa3\x06\x90\xf1\xfa\x6e\x9c\x88\x8b\x35\x43\x24\x34\x20\x31\x18\x8e\x9e\x71\x43\xa2\xa6\x42\xc4\x86\xb1\x97\xe2\x81\xa5\x38\x8a\xbb\x01\xc5\xb1\x8d\x17\x24\x16\xb9\xb5\xfe\x21\x9c\x18\x5a\xe0\xc8\x58\x46\xa3\x3b\x33\x07\xec\x78\x5b\x94\xe0\xa9\x4e\xb3\x53\x7c\xcb\xfd\xbf\xfb\x52\x8d\xfe\xae\x04\x2f\xcd\xbe\xc5\xb2\x46\xfb\x1d\x2f\x53\x64\x0c\x4a\x0f\x61\x32\x11\x52\xff\x97\x39\xe0\x9c\xe3\xb5\xe1\xa2\xd8\x41\x0f\x42\x68\xe3\xc7\xed\xc6\x70\x8f\xfa\xbd\x17\x72\x0d\x0a\xa9\x00\xdf\x26\x24\x98\x99\x1b\x2f\xf9\x6b\xf2\xbf\xc7\x7f\xfd\xcd\xcf\xc3\x93\x2f\x8f\x8f\xbf\x7f\x39\xfc\xcf\x1f\x7e\x73\xfc\xd7\x11\xfe\xe3\xf3\x93\x2f\x4f\x7e\xf6\x7f\xfc\xe6\xe4\xe4\xf8\xf8\xfb\x6f\xde\x7d\x7d\x7b\xf5\xe6\x07\x76\xf2\xf3\xf7\x3c\x4f\xef\xec\x5f\x3f\x1f\x7f\x0f\x6f\x7e\xd8\xb3\x93\x93\x93\x2f\x7f\xbd\x61\x42\x94\x2f\x3e\x4c\xb6\x5e\xe3\xbd\x82\x5d\x87\xfb\x50\xa4\x9a\xe4\xcc\xb8\x1e\x0a\x39\xb4\x1f\xbc\x26\x5a\xe6\xeb\xf9\x54\xc3\xd4\xee\x32\x90\xee\x4b\x11\xde\x57\xfa\x5a\xb2\x9b\xb8\xa2\x6b\x4e\x69\x67\x66\x53\xe0\xf6\xcc\xf2\x7d\x13\x73\xec\x9e\xa7\xdf\x4c\xe4\x6e\xd6\xf4\x88\xcc\xba\xfb\xf2\x85\xf2\xce\x07\x4b\xfd\x2f\x05\xbc\x5a\x9c\xbf\x6d\xac\x3d\xb8\xa7\x66\xca\x91\x9d\x47\x98\x49\x26\x24\xd3\x8b\xf3\x84\x2a\xf5\x9e\xa6\xd0\xf5\x40\x2e\x27\xa5\x8c\x35\x30\x17\xda\x50\x20\x47\xa2\x9d\x37\x88\x1b\x72\xf3\x86\x5f\x4e\x50\xc8\xa8\xf4\xe3\x37\xd5\x7f\x5b\x5c\x4c\x7f\xc5\x85\x24\x3f\x81\x14\xae\xfc\x9e\x04\x2b\xa8\x6c\x1c\xc1\x7d\xb6\xfd\x1c\xb6\x6c\x9b\x82\x28\xc7\x6d\x33\x1c\xd2\x83\x91\x35\x26\x6c\xda\x75\xeb\x6e\xd6\x75\x4a\x22\xca\xcd\x42\xb1\xa0\xe4\x84\xfc\x98\xc0\x94\x46\x8b\x1f\xcd\x82\x7f\x94\x60\xa6\x68\x04\xbc\x1f\xad\xd8\x50\x13\x0c\x9c\xe3\x0d\x53\x04\x18\xd6\x18\x65\xfc\xef\x56\x1a\xf4\xa2\xf5\xc6\x99\x48\x0c\xd7\xcf\x44\x3c\x32\x67\x30\x5a\x5a\x2d\xa2\xd0\xe2\x61\xc1\x4c\x7c\xff\xf9\x0f\x2b\x6f\x3a\x3d\xa3\x16\x56\x62\xac\x5e\x0e\x99\x23\xda\xdf\xc6\xd9\xf8\x0d\x21\x67\x71\xca\x50\x39\x4a\x8e\xaf\x6e\xce\x4e\x6a\x2b\x37\x7c\x8e\x25\xc4\xb1\x00\xef\xfa\x62\x06\x52\xa5\x9a\x13\x89\x28\x86\x13\xda\x2b\x8c\xf1\x84\x7e\x2e\x66\x83\x51\xf3\xb9\x25\x84\xd6\x4f\xf6\xe6\x8c\xfc\x68\x78\xe4\x84\x71\xb0\x67\x90\x49\x36\x67\x09\x4c\xcd\x4c\x2a\xe6\x7c\x72\x9e\x4b\x09\x5c\x27\x0b\x5f\x11\x72\xfd\xe9\x32\x65\xe8\x55\x1d\xd0\x1d\x70\x6e\x9c\x4c\xa1\x50\x28\x80\xc1\xf4\xa2\x20\x1e\x91\x1b\xec\x69\x61\x0d\x10\xee\x3d\x3c\x7b\xe4\x2a\x36\x01\x0f\x91\xa0\xcc\x25\x62\xdc\x7e\xc5\x62\xcb\x08\x80\x94\xdb\x14\x6d\x18\x5b\x6e\xc5\x48\x91\x18\x59\xb1\x90\x5a\x0d\x01\x47\xb5\x0a\x6e\x36\x32\x60\xce\x67\xc9\x6d\xe4\x9a\x03\xdc\xbc\x47\xbb\x23\x9c\x1d\x6f\xe8\xd7\xb7\x8d\x77\xb8\x34\x6b\x9c\xe4\xe8\xa7\xe4\x65\x72\x44\x26\x55\x96\x6b\x89\xe7\xac\xce\x76\x50\x6a\x09\x28\x73\x90\xaf\xfc\x14\x25\x8c\x73\x96\xa0\x0a\x93\x15\xdb\xb1\x99\xdf\xc5\x7b\x48\xab\xaa\x01\x91\xa5\xae\xca\x6d\x9e\x65\x42\xea\x52\xf7\x14\xd5\x64\x7e\xab\xcf\x59\xb3\x8f\x66\xba\x99\x84\x8c\xca\x82\xda\x29\x20\xd1\x8c\x72\xc3\x6b\x6d\xd9\x97\x77\x02\xc3\xf5\x6d\x5a\x0b\x33\x1b\x3a\x16\xb9\x46\x88\x77\x18\x68\x22\x72\x1e\x13\x83\x5c\x5f\x93\x99\xd6\x99\x7a\x7d\x7a\x5a\x52\xff\x11\x13\xa7\xb1\x88\xd4\x69\x24\x78\x04\x99\x56\xa7\x1e\x17\x9c\x66\x22\x1e\xfa\x3f\x86\xd4\x5f\xe5\xd3\x17\x6d\x91\x6f\x81\xbe\x5f\x13\x7b\xe0\x1b\xde\x02\x9e\x6f\xa9\x74\x39\xdc\xfe\xb1\x79\xa1\xdc\xdc\xb5\x2f\x69\x91\x38\xf7\xc8\x8d\x14\xb8\x5e\xff\xb4\x7c\xbf\xa8\xcf\x5a\xc8\x18\x15\x94\xfd\x42\x55\xbb\xde\x4e\xa3\xb6\x69\x97\x77\xe8\x93\xf7\xd7\xf0\xde\x7a\xac\x6d\xf8\xee\x72\x15\xc8\x6f\x69\x4d\xb1\x74\xab\x11\xcd\xec\x13\x83\x70\xf9\x82\x98\xab\xa1\x5d\x1d\x61\xab\xd9\xdc\xa6\x45\x98\x19\x0e\x0d\x33\x53\xfc\xa1\x30\xbd\x0d\x60\x32\x81\x48\xff\xa9\xa2\xaa\x2a\x72\x2b\x14\xa6\xad\x3f\xf8\x7f\xfd\x69\x33\xa2\xda\xcb\x0a\xb5\x9f\xbb\x87\x9d\xd2\x76\x15\x7a\x33\xd5\xf9\x1b\xec\x71\x89\x53\xb2\x9b\x67\x07\x43\x55\x02\xda\x82\x9d\x3e\xd6\x5a\x26\x1c\x07\x6a\x30\x57\xe5\xe5\x9d\x0e\x0f\x88\xb4\x2b\x04\xc7\x69\x72\x4b\x8b\x20\x90\xf7\xc2\x25\xa9\x81\x01\xb9\xc2\x72\xba\xe5\x2f\x48\xfb\xdf\x0b\x9b\xae\x66\x87\x93\xe7\x9e\x26\x8a\x9d\xfe\x32\xcd\xf6\xf3\x9b\xd2\x7d\xc6\x6e\x4c\xcd\x7d\xa6\xbc\x58\x55\x5b\xd8\xd6\x8d\xbd\x83\xc5\xce\x5d\x75\x6e\x08\xce\x75\x07\x6d\x4d\x83\x12\x46\xbd\x0c\x62\x3d\x13\xfe\xcb\xe5\x34\x10\xe9\x98\x71\x3b\x15\x3b\xb0\x3f\x67\x1c\xdb\x9f\x07\x8f\xf1\xcf\xdd\x93\xd8\x73\xb7\xf7\xf3\xe1\x69\xb6\xe5\x1f\x1a\xf8\xe7\x14\xd6\xe7\x5d\x5b\xba\xce\x0f\xa7\xe2\x7c\xf3\xe6\x1f\x39\x4d\x46\xe4\xc2\x52\x02\xdc\x3c\xfb\xd3\xae\xeb\x66\xbb\x58\xb1\xc9\xdf\xb3\x24\x8e\xa8\x8c\x91\x6a\x5a\xf4\x43\x94\xb0\x80\x43\x3d\x9f\xb8\xa3\x6f\x8f\x00\x4b\xe0\xb1\x85\xae\x49\x46\xa5\x66\x51\x9e\x50\x64\x0a\x60\x2a\xe4\x0e\xe7\xf3\x3d\x0f\xb3\x84\xe6\x1b\x88\x04\x8f\x77\x58\x0f\x9b\x9d\xea\xed\x72\xe7\xd5\xe3\x45\xe6\x19\x24\x73\x79\x52\x58\x0a\xcb\xd7\xeb\xb8\x26\x7f\xef\x18\x4b\x4c\x3c\xb2\x2b\x70\xcb\xc0\x72\xae\xf7\x4c\x41\x35\x9d\x13\x53\xde\xb5\xff\xa4\x42\x70\x8a\xdb\x3e\x22\xff\xbd\xf0\xec\xc1\x2e\x97\x1f\xa6\xbd\x39\x0b\x15\x46\x6e\xbe\xee\x2a\xba\x93\x2c\xd1\xc8\x44\x48\x98\x83\x24\xc7\xb1\xc0\x6f\x30\x2d\xd3\xc9\x88\xfc\x3f\x23\x76\x6e\x33\x05\xd9\xc6\x61\x6a\x13\xfb\xb8\x8b\x5d\x44\x5c\x60\xd1\x7e\x34\x33\xbe\x24\xc7\x36\xd7\x13\x4b\x53\x88\x19\xd5\x90\x2c\x4e\xac\x07\x35\x38\x0d\xde\x3e\x50\xb3\x4f\x16\xb3\x4a\xf6\xb2\xdf\xff\x6e\xcb\x9b\x38\xd9\x3e\x81\xea\x3b\xaf\xda\x2e\x37\xd6\x8a\x29\x4b\xd0\x53\x18\x43\x77\x3a\x2a\x6c\xf4\x00\x1b\x94\xb8\xa6\xa2\x05\xf6\xb8\xb9\x80\xad\xbf\x1b\x00\xa5\x44\xc2\x14\xef\xa7\xbd\x73\x1d\x6e\x27\x8b\xd6\x27\x71\xdb\xc1\x84\x6c\xb7\x8a\x0d\x89\x91\x3a\x7f\xff\xbb\x98\x6a\xba\xe1\x05\x0b\x32\x8b\x6c\xdd\x55\xdb\xc5\xdb\x94\x9d\x6f\x3a\xeb\x3d\xcc\x3c\x6e\xf8\x56\x3d\xa0\xc4\xb8\xee\xcb\x7d\xa0\xeb\x12\xd5\xe0\xd6\x37\xd1\x83\xc1\x50\xc2\x94\x29\x2d\x17\x15\x63\x87\x33\xa3\x0a\xc2\xb8\xd2\x94\x6b\x86\xa8\x9a\xf8\x37\x87\x4e\xcf\x6f\xa4\xb2\xf5\xe7\xff\x81\x27\x0b\xab\x44\xc6\xb0\x1b\x2b\x8b\xdd\x2e\x32\x20\x7f\xac\xfc\xf1\xb5\xcc\xa2\xf5\xdf\x5f\x4e\x88\x43\xa0\x16\x36\x69\x1c\x4b\x50\xab\x98\x6d\xdd\xd7\x5b\xb7\xcf\xab\xc5\xda\xee\xe0\x95\x57\xab\xb9\xc8\x1f\xa5\xd8\xd4\x08\x29\x3e\x71\xa3\xb7\x1b\xd5\x84\x15\x2b\x6a\xe2\x87\xd6\x3a\x0c\x69\x41\x31\x99\xf6\x52\x63\x24\xb8\xca\x53\x1f\x09\x62\x44\xec\x0c\x78\x0c\x3c\x5a\x60\xa2\xa7\x64\x0e\x1b\x34\x0c\xdf\xaa\x0d\x20\x41\xc8\x9f\xd9\x74\x66\x0e\xca\x4e\xae\xca\x39\x7b\x0b\xf9\xd2\x4c\x99\x32\x1b\x3f\x01\x29\x21\xb6\x91\x32\x86\xe9\xf5\x3d\x54\x2c\x9e\x2e\xf3\x94\x77\xe2\x5c\x9e\x2c\xa6\xff\x5b\x3f\xdd\xdb\x22\xed\xa4\x37\x8d\xf8\x3d\xb5\x18\xc8\x6c\xc7\x54\x58\x8f\x82\x4c\x28\xe6\x93\xbc\x15\x74\xa1\x96\xba\x52\x4c\x6c\x62\xc9\xcd\x63\xd5\x43\xda\xd0\xf1\x79\x69\xd1\xa8\x5d\xc8\xb9\x3d\x4c\xa8\xea\x4e\x3d\x2e\xdc\x90\x1c\xf3\x76\xf5\xa8\x0b\x67\x1c\x8c\x83\xab\x2f\xad\xa4\x65\x92\xf2\x3b\x88\x49\x02\x0f\x2c\x12\x53\x49\xb3\x19\x8b\x30\x85\xa1\x35\x2b\x1b\x89\x51\x5b\x37\xaa\xcd\x10\xbe\x89\x7a\x65\xf9\x38\x61\x6a\xb6\xde\x40\xb9\xf5\x72\x28\x88\x24\xe8\xb5\x98\x6f\x9f\xbb\x71\x63\x3f\x2f\x99\x1f\xef\x60\xee\xfa\x75\xf1\x19\x16\xda\x7d\x14\x29\x8d\x22\x73\xb1\xbd\xb1\x15\x1c\x27\x58\xb9\x44\x1b\x30\x84\xf6\x16\x2d\xd3\xcb\x1d\x40\x66\xe1\x19\x9d\xd5\x54\x8a\x5a\x4c\xc5\x78\x04\x98\x92\xd1\xa5\xd6\x04\xf0\xd6\x06\x2d\x19\x58\x0e\x16\xd0\xc0\xe8\x4f\x11\xb8\x5e\xcf\x71\x6e\x57\x22\x6c\x51\x20\x6c\xdf\xf1\x02\x17\xee\xdc\xf4\x0a\x0e\xf5\x4c\x81\xf9\xb7\xd9\x5e\x7c\xd2\xf4\xb0\x6d\x06\xce\x1b\xeb\x7a\xdd\x1a\x1f\x7e\x5b\xeb\xc5\xb9\x82\x29\x32\x13\xf7\x6e\x80\x65\x8c\xe1\x54\x9e\x1e\x0c\x62\xa6\x22\x83\x66\x36\x28\x8e\xce\x05\x57\x3e\xe3\x26\xe5\x36\x49\xe6\x9c\x26\x2e\x1a\xd6\x0d\x96\x89\x04\x4d\xae\x71\xee\xe5\x55\x1b\xea\x03\xe9\x18\xe2\x18\x62\xef\x5f\xbe\x20\x1b\x88\xfe\x0e\x86\x63\x17\x4f\xe0\xc9\xe2\x95\x48\x92\xed\x34\x7d\xab\x62\x65\x1f\xb5\x8a\xdf\x80\xbd\x7d\x5a\x76\xb0\x99\x97\x7e\x43\x9d\x5e\xdc\xdc\x8e\xd2\xe6\x8d\x40\x66\x04\x96\x62\xdf\xc7\xa0\xef\x01\x38\x89\x66\x10\xdd\xa9\xd2\x55\x4f\x9b\x7b\xb8\x74\xd0\x4e\x59\xbb\x9d\x41\xac\x62\xd0\x82\x31\x35\x07\xea\x22\xda\x81\x30\x23\x16\x72\xb8\x5f\xf6\x0b\x5b\x25\x5c\x74\x4e\x59\x42\xc7\xc9\x0e\x81\xf9\x72\x52\xbe\x39\xa8\xce\x9f\x79\xee\x28\xcb\x93\xc4\xd9\xbf\xd1\x23\x46\x4b\x3a\x99\xb0\x08\x7d\x1d\xd1\x23\xa8\xf4\xec\x5d\xbb\xf4\x56\x5e\x40\x4a\x53\x9d\xaf\x1c\xfd\x16\xb8\xd9\x06\x2f\x46\x0a\x65\x1b\xf5\xad\xfb\x40\xc8\x75\x5d\x82\x35\xb3\x03\x2b\xa2\xd7\x4c\x67\x23\xf2\x5e\x68\xe7\x71\xf7\x0e\x94\x72\xde\x7e\xe4\x1a\xa8\x12\xbc\x42\x0a\x50\xf2\x90\x6c\xca\x38\x5d\x9f\x92\xc0\xae\xbf\xaa\x58\x2f\x04\x4d\xba\xc0\x94\xc4\x6c\x2a\xa9\x2e\x30\x78\xb9\x44\x47\x34\x1d\x5b\x60\x2d\x16\x23\x72\xc6\x17\x08\x36\xce\x0d\x6f\xbd\x4e\x95\x71\x2d\x45\x9c\x47\xe0\x92\x2f\xe7\xaa\xda\x71\xaf\x74\x60\xbf\x6b\x79\xee\x07\x2f\x63\x0d\x62\xd0\x94\x39\x93\xb9\xe0\x40\xa8\xca\x8c\xf8\xef\xaf\x81\xb5\x9e\x95\x07\x84\x54\xf0\xec\xea\x92\x5c\xc3\x76\x68\x1c\x0e\x37\x4d\x02\xbd\x46\x94\x96\x79\x84\x44\xd6\xdc\x7e\x1e\x3b\x72\x69\x2f\x80\xf5\xda\xac\xc4\x38\x39\xa5\xa1\xe5\x8a\x33\xaa\x67\x64\x64\x0f\x74\x54\xd9\x4e\x42\xbe\x32\x04\xf7\x81\xa6\x59\x02\x83\x8d\x26\x96\xff\x83\x84\xed\x2b\x21\x6e\x2c\x48\xd8\x99\xfc\x73\xd3\xdb\xe6\xff\x4e\x4f\x97\x01\x56\x8c\x8d\x90\xe2\x6c\x08\x08\xb7\x13\x21\x5e\xa8\xfa\x7e\x6d\xda\x1a\xdf\xe7\x37\xe8\x90\xba\x66\x25\x38\x43\x2a\xe1\x35\x39\x3a\xf3\xb8\xe4\x68\x40\x8e\xae\xa4\x98\x62\x74\x0a\x9f\xba\x18\x92\xa3\x0b\x98\x4a\x1a\x43\x7c\xb4\x63\xac\xdf\x60\x14\xd3\x3b\x90\x53\xf8\x06\x16\x7f\xdc\x40\xaa\x56\xbf\xf0\xb4\xf7\x8f\x18\x0b\xb5\xeb\x13\xc3\x1e\x19\x1e\xe2\x8f\x29\xcd\xf6\x79\xf7\x1d\xcd\xf6\x99\xcd\x79\x79\x19\xbf\xff\x21\x05\x4d\xe7\xaf\x46\x25\x28\xff\xf8\x77\x25\xf8\xeb\xa3\x72\xff\x06\x22\x65\xe8\xfc\xb7\x38\x22\xb5\x45\xbc\x3e\xc2\x55\xb8\x5f\xfd\x66\xbc\x3e\x32\xe3\x1f\x19\x8c\xa7\xc5\x38\x9f\xbc\x3e\x42\xef\xb8\xc1\xab\x81\x84\x6c\x60\xb8\xe4\x3f\x96\x7d\x1f\xfd\xb8\x19\xb0\xdc\xca\xac\xa1\x17\x61\x75\x93\xa9\xe5\xff\xfc\x6b\x0b\x33\xb7\x85\x8c\xef\x72\xd9\x1d\x92\x84\x2a\x7d\x2b\x29\x57\x38\xdd\x5b\x96\x6e\xda\xd8\x21\x49\x2d\x42\xdd\xf8\x5c\x22\x92\xdd\xf8\xd8\x82\xed\xc6\xc7\x1b\xcf\x74\x37\x23\xb2\xba\x86\x3e\x8c\x67\xab\xbd\x96\xd1\xbd\x86\xcd\xf7\xaa\xd3\xe2\xac\x0d\x61\x76\x6f\x83\xcb\xf7\x6e\x10\xa4\xa3\x24\x18\x3e\x86\x47\xbd\x8d\x1e\x5b\x5c\x57\x28\xbd\xee\x5d\x16\x78\x92\xf3\x18\x64\x82\xfe\x01\xe5\x78\xd6\x3a\x1c\x8f\x9c\x2e\x8d\x16\x6a\x51\xf4\x5c\x47\x66\x82\x57\x6c\x70\xd6\xd7\xd5\xf7\x68\x70\xb2\x4b\xb4\x6f\xbb\x41\x9e\x25\x8a\x20\xd3\xdb\x99\x96\xbd\x54\xdc\x5e\x4f\x69\x78\xee\xa1\xde\x0c\x55\x0e\xa6\xfa\x38\x2f\xd7\x95\x75\x26\x9b\xe5\x29\x35\xf4\x9e\xc6\xe8\xdb\x5a\x3c\xb3\x2a\x07\xab\x22\xb0\x74\xcc\x9a\xcb\xad\x1d\xd3\x1f\xdf\xce\x13\x72\x3c\x00\x2d\x32\x45\xec\x50\x3e\xee\xb5\x67\x29\x7d\x78\x0b\x7c\xaa\x67\xaf\xc9\x17\xbf\xfd\xbf\xbf\xff\x8f\x0d\x2f\x5a\x52\x02\xf1\xd7\xc0\x9d\xd2\xb5\x8f\xdd\x5b\xed\x75\xd9\x6a\x30\xf2\xd1\x15\xa3\x69\xf9\x4e\x61\x9f\x2b\xa1\xf2\x9e\xa2\xff\xb3\x63\x83\xf2\x6c\xfb\x76\x7e\x85\x21\x3e\x4a\x53\x1e\xc1\xc0\x70\xd7\x6b\x87\x61\x05\xa5\x4c\x16\xe4\xd5\x6f\x07\xe8\x9d\x8d\x93\x5a\x21\x86\xdf\x3f\xfc\x30\x5a\xb3\x18\xa6\xc8\x7f\x0e\x96\x66\xca\x14\x31\x67\x2f\x26\x08\xa6\x5b\x26\x89\x5a\x14\x09\x96\xd3\xf1\x3a\xb5\x55\x4e\x07\x8a\x95\xec\x82\x84\x5d\xaa\xfe\xfd\xd4\xfc\x29\xe3\x2c\xcd\xd3\xd7\xe4\xe5\x86\x57\x2c\x46\xee\x03\x3c\x6c\x4f\x25\x17\x48\x0d\x5a\x9e\x4a\x9a\xa6\x18\xc4\xc8\x62\xe0\x9a\x4d\x18\x3a\xab\x15\x57\x0c\xd5\x62\xf6\x43\xef\x60\x59\x6c\x3e\xfa\x5e\x1a\x34\xba\xd7\xa5\xbb\xb2\x6c\xb1\x44\xde\xc9\x19\xc1\xa3\x2a\xe6\x5d\x64\x60\x6f\xa5\x95\xc2\x09\x3c\x64\x56\x30\xaa\x98\x63\x53\xa0\x9c\xf1\xa9\x2a\xfd\xa4\x11\xff\x6d\xb3\x36\x99\xcf\xee\x67\xe0\x3c\xb1\xa0\x6a\x6c\xf7\x69\xb6\x8c\x64\x56\xc6\x07\x60\xcc\xc8\x76\xf4\xb1\x6a\xda\x30\x42\x4c\x0a\xc9\x39\x55\xb0\x87\x19\xa3\xe2\x44\xed\x6b\x8f\x14\xb1\xed\xbd\x21\xa0\x57\x2f\x7f\xbb\x15\xee\x8a\xf7\x36\xbe\x54\xba\x57\x7f\x7f\x36\xfc\x7f\x74\xf8\xd3\x0f\xc7\xee\x1f\x2f\x87\xff\xf9\xb7\xc1\xeb\x1f\x3e\xaf\xfc\xf9\xc3\x66\xaf\xe8\xf5\x82\x68\xd9\x6a\x30\xec\x68\xad\x17\x46\x3c\x7c\x0c\xbc\x17\xe6\xad\xcc\x61\x40\xbe\xa2\x89\x82\x01\xf9\x96\x23\x9d\xec\xb8\x69\xdb\x9d\x95\x0c\x67\x73\x64\x46\xdd\xc4\x6f\xbb\x57\x70\x4a\xdb\xdf\x71\xd3\xdd\xa6\xd1\xe9\xe1\xa2\x7b\x2d\x5e\x05\x4b\xf2\x0a\x78\xda\x80\xcc\x89\x10\x23\x27\x37\x8d\x22\x91\x9e\x16\xcf\xb7\xc1\xed\x66\x01\x8f\x60\x6a\x56\xbe\x20\x25\x1a\xb7\x22\xcd\xf2\x75\x53\x18\x18\x48\x23\x29\x94\x2a\xcb\x4d\x90\x84\xdd\x01\x39\x2b\x95\x28\x86\x38\x8c\x21\xa2\x28\x15\xca\x31\xd3\x92\x5a\x7b\x92\x17\x0a\xac\xb6\x6f\xcb\x6c\x72\x05\x93\x3c\x21\xc7\x0a\x80\x8c\xd0\xf1\x7b\x85\xce\x9c\x38\x53\xd0\x98\x25\x0c\x63\x2d\x49\x0c\x91\xe0\x93\x84\x39\x31\x35\xcd\x84\xd4\x94\x6f\xcd\x30\x62\x43\xf5\xa7\xf0\x40\x58\xe1\x6d\x65\x3e\x3e\x8e\xb9\x7a\xf5\xea\xb7\x5f\xdc\xe4\xe3\x58\xa4\x94\xf1\xaf\x52\x7d\x7a\xf2\xe5\xf1\x3f\x72\x9a\xa0\xff\xcf\x7b\x9a\xc2\x57\xa9\x3e\xe9\x8f\xe3\x78\xf5\xfb\x3d\xae\xf2\xf1\xf7\xf6\xc2\xfe\x70\xfc\xfd\xd0\xfd\xeb\x73\xff\xd3\xc9\x97\xc7\x7f\x1d\x6d\x7d\x7e\xf2\xf9\x29\x06\x48\x14\xf7\xfe\x87\xef\x87\x25\x0e\x18\xfd\xf0\xf9\xc9\x97\x95\x67\x27\xeb\x30\xc2\x6a\xa6\xb7\x94\x66\xc3\xbb\x8d\xa9\x2f\x37\xca\x15\x9b\x52\xc6\xad\x13\x44\x6d\xc0\xda\x3b\x9a\x5d\xc3\x04\x24\xf0\x68\xb7\x7a\xfc\x7c\xe5\x13\x72\x1c\x1b\x7e\x0a\xc3\x94\x4f\xbc\x24\x21\x8b\xa7\x8e\xab\x28\xbe\xf3\xa4\xb6\xa8\xb2\xb6\xec\x6f\xe8\xa3\xe8\x0a\xdd\x94\xe3\xeb\xd7\x28\x22\xcb\x5e\x9b\x6b\x9b\x77\x99\xb7\x8d\xb8\xbb\xe5\x11\x7a\x55\xb7\x50\x62\x1b\xde\xc0\x2a\xf3\xb7\x89\x73\x7b\x00\xf9\x7e\x82\x08\xdf\x12\x40\xb1\x73\x90\x62\x9d\xad\x7b\xf0\xa8\xec\x3b\xab\x53\x6e\xdd\x4f\xce\x36\x4a\xfa\xfb\x52\x80\x6f\x2f\x2f\x2c\xcc\x20\x02\x46\xf6\x7e\x26\x92\x58\x91\x9c\xb3\x7f\xe4\x40\x2e\x2f\x8a\x4c\x66\x8c\x47\x49\x8e\x95\xc6\xbe\xfd\xf6\xf2\x42\x8d\x08\xf9\x6f\x87\x74\xef\x37\xe3\x56\x9b\x33\xf4\xc3\xfb\xb7\xff\x83\x4a\x3b\xfc\xd2\x15\xfa\xf1\x99\x2c\x19\xb5\xda\x76\xcb\x09\x99\x5e\xad\x5b\x3c\xce\x28\xa2\xd9\x66\xfd\x29\x71\x36\x09\x6e\x43\x1d\x66\x90\x64\x0a\x83\x38\x89\xca\xa5\x5b\x8d\x19\xd0\xc6\x92\x61\x9a\x0d\xe7\x14\xe4\xe3\x52\x31\xee\xb7\x55\x74\x49\x24\x38\x87\x08\xbd\xae\x8c\x44\xb0\x0f\x86\xa8\xbe\xbf\x2c\x6d\xad\x15\x2f\x96\xc3\x44\xca\x31\x3d\xfe\xf0\xc6\x9f\xfe\x2f\xba\xb9\x91\x1f\x9c\x5c\x85\x33\x6e\x71\xab\x9d\xdf\x44\x6b\xf8\x36\x73\x70\xfb\xf6\xe8\x28\x61\x65\xbd\xad\x46\xb4\x06\x19\x74\x74\xb9\xde\x61\x97\xab\xbb\x9c\xaf\xa8\x99\x96\x72\x07\xa0\x71\xa8\xf0\x95\x99\x51\x45\xc6\x00\x1c\x6d\x55\xd6\x26\x01\xdc\xc1\x3c\x94\x96\xa4\x3c\x1b\x6a\x31\xdc\x20\xec\xee\xd8\xb9\xdd\xbb\xb6\x45\x97\x53\x5b\xdb\x59\x63\xed\xcc\xfd\x6c\xb1\x6e\x0f\x54\x59\x67\xac\xe0\x1b\x9b\x2e\x6c\xb3\x88\x5c\x9b\xb3\x33\x20\x15\x64\x1b\xff\x5a\x9d\xd2\xbd\x41\x5d\x55\x2d\xa0\x16\xe8\x3a\xb1\x53\xcd\xbf\x63\x8e\xf6\x98\x6f\x40\xce\xd9\x1e\xcc\xc7\x75\xfd\xfd\xbd\x50\xcb\xd7\xd7\x57\xe7\x18\xe6\x6c\x3e\xf0\xb6\x57\x84\xfe\x2a\x57\xd1\x1c\xad\xec\x42\x09\x91\x75\xa3\x3c\x7b\xfc\x0b\x6d\xd8\xf1\xd6\x83\xa0\xae\x3f\x12\x3b\x0c\xea\x5b\x03\x0f\x71\x6b\xb7\x45\x6a\x36\xe9\xa3\x29\xbf\x61\xf1\x58\x2d\xb6\x57\x69\x21\xcd\x75\xad\xfd\x96\x8f\x0b\xb1\xaa\xec\xdd\x89\xe0\xe4\x9f\xff\xfa\xec\x33\x23\xc5\xd1\x8c\x79\x4e\x85\xd0\x8c\xc1\x83\x06\x8e\x19\xd0\x46\x77\xff\x81\xf1\x44\xf3\x57\x9f\xdd\x31\x1e\xbf\x26\xe7\xb9\xd2\x22\xf5\xa6\x3f\x2c\xc2\x89\x37\xe3\x33\xaf\xe4\x33\x83\x60\x5e\xec\x6a\x38\x8e\x61\x7d\xa5\x41\x64\x72\x38\x05\x3e\x32\x8c\x3a\x86\x67\x81\xc4\xce\xfd\xd0\xf3\x97\xa3\x57\xbf\x1b\xbd\xfc\xcc\xb1\x6f\x24\x4a\x72\x85\x55\x4b\x71\x97\xdc\x6b\x6a\x54\x78\xa2\x8f\x22\x21\x41\x98\xff\xa4\x9f\xa9\x0c\x22\x33\x18\x66\x58\x7f\x4d\xd6\xbe\xe3\x38\x3b\x37\x27\xeb\xfe\x5d\x81\xe3\x21\x11\x49\x8a\xff\x76\x6b\xb5\xc3\xbb\x4b\xe7\x36\x08\x9f\x1b\xf1\xe2\x9b\xcd\xef\xbc\x65\xca\xde\x9c\x2c\xc9\x25\x4d\x36\x2d\x04\x5f\x51\x33\x21\xf5\xfb\x72\x5a\x98\x50\x45\xcd\xab\xff\x76\x2f\x32\x8e\x7e\xb1\x1b\x7a\xfb\x8c\x10\x15\x09\x03\x26\x05\x34\xc5\x9f\x11\xef\xd4\xe0\x3a\x1f\xd6\x82\x96\xd1\xeb\xe2\x5c\x24\x79\x5a\x35\xe3\x0f\x57\xe9\x96\xd9\xb5\x82\x63\xb9\xf9\xae\x02\xa4\x7f\x57\x82\x5f\x51\x23\x6e\xda\x10\xd4\x98\xa9\x2c\xa1\x8b\xf7\x75\x19\xc2\x9e\xe6\x85\x7d\xf6\xd9\x8e\xfb\xb1\x66\xfc\x25\xcf\x8c\xed\x53\x98\x57\xce\xa9\x3a\xfc\x77\x2b\xbf\xef\x3b\xbc\x5f\x3e\x35\x23\x57\x5c\x1b\x05\x07\x9f\x6c\x52\x6d\x99\xd0\x9a\x57\xec\x8c\xae\x57\x1f\x6c\x98\x52\xb5\x4b\xab\xb6\xc8\x66\x54\xad\x6e\xf1\xd5\xd2\xaf\x6b\xba\xb3\x2f\xce\x5f\x61\x7e\x79\xaf\xec\x53\xd1\x0c\xd2\x8a\xc7\xb1\xc8\x80\x9f\x5d\x5d\x7e\xf7\xc5\xcd\xd2\x83\x65\x96\x77\x1d\xf4\x3b\x09\x15\x11\x45\xe1\x24\x80\x67\x67\xd8\xfd\x1f\xd7\x7e\x73\x93\x41\xf4\xe3\x68\x65\xe6\x2b\x44\x68\x3d\x4f\x3b\x2c\xf2\x44\x2d\xfd\x6c\xf6\xbf\xf2\xd3\x26\xd2\x55\x41\x7f\x4b\x08\x78\x97\x90\x65\x36\xc9\xad\xda\x7b\x8b\xe9\x12\x60\x21\x76\x3b\x5b\xf8\x4d\x14\x84\xdb\xda\x30\xac\xd7\x99\x5d\xe5\x2a\x13\x71\x83\x5e\xd0\x85\xf5\x30\x12\x7c\x0e\x52\x13\x09\x91\x98\x72\xf6\x53\xd1\xbb\x5a\x72\x16\xc2\x7b\xcd\x69\xe2\x83\x67\xd6\x85\x44\xa4\x74\x41\x24\xfc\x1d\x5d\x2d\x78\xa5\xc7\x4d\xb9\x7a\x8b\xa0\xd4\x32\xe2\x74\xca\xb4\x27\x0f\x91\x48\xd3\x9c\x33\xbd\x38\x45\x4c\xcf\xc6\xb9\x41\xbd\xa7\x31\xcc\x21\x39\x55\x6c\x3a\xa4\x32\x9a\x31\x0d\x91\x91\xf4\x4e\x69\xc6\x86\xb8\x18\x6e\x9d\x1d\xd2\xf8\x57\x05\x8d\x5a\x1a\x78\x23\x05\x45\x0c\xdd\xf0\xb0\x0c\xc6\x76\x99\x29\x2a\xe9\x72\xcb\x33\xf1\x9a\x99\xeb\x37\x37\xb7\x85\x04\xef\xae\x3a\x1e\x51\x85\xef\xda\x7c\x5a\x66\x67\x19\x9f\x80\xb7\x48\xf8\xc4\x65\xc0\x63\x5b\xc8\x1c\xb9\xaf\x84\x21\xc3\x96\x8f\x53\x86\x1e\xad\x98\x61\x67\x7d\x90\xc5\x79\x51\x66\xc2\x79\x3c\xae\xbe\x72\x59\xd1\xe8\x3e\xf9\xd9\xa1\xa9\x66\x68\x0e\x64\xef\xd3\xab\x32\x0b\xab\x1f\xac\x61\x3d\x3d\x75\x6f\x72\xdc\x1b\x11\x0d\x89\x21\x4a\xa8\x8f\xff\xd5\x90\x24\xe4\xc3\xdb\x77\xe8\x53\xea\x43\x12\x92\xa4\x1a\xc2\xb0\xd2\x75\xe1\x68\x9c\x52\x8e\x1e\x69\x59\x66\x8d\x50\xd4\x95\x09\xdf\xe0\x9b\xb8\x85\xb5\xde\x2c\xad\x0f\xc9\x7a\xaa\xea\x9f\xba\x09\x2f\x3d\xd9\xc6\xa6\xaf\xf0\x67\xcd\x36\x96\x60\x49\x85\xa2\x0b\xa7\xe6\xc9\xb9\xf5\xa3\xc2\x1c\x77\x77\xe0\xbd\xed\x53\x9a\x21\x63\xea\x93\x5d\xd0\xea\xcd\xc2\x88\xe4\x8d\xe9\x1e\xd0\xe6\xbc\x20\x86\x1b\x45\x74\xa6\x85\x70\x6e\x9b\xa6\x3f\x57\x15\x45\x4b\x06\xf3\xaa\x55\xa0\xb0\x36\x37\x17\x6d\xf6\xcf\xe8\xb2\x95\xb3\xa7\x19\x73\xbc\x59\x5c\xf0\xc7\xed\x37\xfa\xea\xd2\x41\x70\xc9\x6c\x2b\x07\xc1\xae\x76\x85\x63\x8b\x0a\xae\x1d\x27\xe0\x40\x33\x26\x65\x45\x83\x98\x8c\xd7\x07\xa8\x57\xcb\x16\xd8\xf4\x58\x92\x72\xb3\xf5\x6b\xaf\x50\x8b\x8d\xdd\x25\x33\x8a\x7b\xbe\xd9\xa5\xa9\xdf\xf0\xfa\xea\x7e\x16\x3f\xfb\xac\x92\xa5\x33\xa4\x16\x88\x13\xac\xb6\x02\xf7\xb3\x48\x3c\x39\x67\x94\xd0\xe9\x54\x62\xb8\xc8\x96\x82\x4c\x7b\xc5\xba\xef\x53\x77\x61\x68\x85\x9a\xad\x6f\x18\xf4\xbb\xf5\x85\x8d\x6a\x7d\xff\xc2\x2a\xdf\x5c\x6f\xfb\x45\xe5\x53\x54\x5e\xfa\xad\x15\x72\x47\x1c\xec\xbe\x89\x79\xf7\x4a\xc8\x5b\x3f\xe7\xa5\x89\xb8\xa7\x63\xcc\xd4\x5c\x10\x00\x83\x39\xa2\xd2\xef\xc5\x05\x0d\x64\x20\x27\x42\xa6\x36\x50\x86\x92\xc8\xb2\xb2\x05\xde\xf2\x3e\x21\x3b\xa6\xd3\x20\xe3\xf6\xfe\xd5\x37\x86\xe8\xfc\xba\xe3\xb5\x26\xf5\x32\xaa\x9b\xb6\xf3\xe5\x86\xc9\x8e\x2b\x74\xab\xf7\xbe\xcd\x36\xf4\xde\xe9\x1e\x41\xb6\xb6\xb5\xc9\xc9\x7c\x4d\xef\xdf\x55\x3d\xda\x24\xbd\x27\xc0\x23\x61\x70\xca\xff\xef\xe6\xc3\xfb\xfd\x82\xf1\x6d\xbb\xd4\x84\xa5\x59\xe2\xd2\xc1\xbf\xa3\x52\xcd\x68\x02\xb6\x9e\xd2\xb7\x3c\xad\xfd\xbd\x3b\x5a\xde\xb6\x4a\xd0\x54\x0c\x09\x5d\xd8\x49\xc5\x10\x09\x34\x09\x09\x49\x32\x23\x28\xa4\x59\x8e\xc1\x9a\xf8\x14\xe7\xbf\x67\x1a\xe3\x86\x79\xb2\xbd\x0e\x70\xbc\xd8\xea\xc9\x65\xdb\xc3\x30\xde\x17\xe5\x54\x27\xb3\x6f\x46\xf0\x06\xf9\xc0\xf7\x5c\x65\x11\x0b\x7b\xb5\x45\x89\x59\xed\xb1\x61\x2c\xf9\x17\xbf\xdd\xf2\x66\x0c\x59\x22\x16\x06\x76\x76\x5f\xcd\x3d\xd7\xb3\x37\x1a\xd9\xb7\xbf\x7d\x51\xc7\x9e\xfd\x59\xb5\x60\x1f\x3d\xad\x93\x3c\x5b\x75\xb4\xcd\x44\xdd\xa8\xa3\x35\x0a\xde\xcd\xbd\x3d\x0a\xad\xbd\xba\xf4\x7a\x9e\xd2\x3b\xc2\xe2\xb8\xaa\x3b\x04\x25\xdf\x14\x1e\x1a\x15\x29\xa0\x30\x4b\x17\xfe\x13\x12\xa4\x4f\x75\xbd\x33\xdf\xcb\x23\x51\xd9\x1d\xfc\x94\x7f\x6d\x07\x57\xe5\x5f\xdb\xc5\x5b\xd9\xd6\x84\x6c\xef\x86\x42\xdb\x6a\xe7\x84\x0a\x10\x27\x2d\x14\x27\x13\xd7\x8f\xa2\x77\x4c\xbe\x1b\xcc\xd7\xcc\xf4\x0a\x15\xe7\x35\xc5\xf3\xa6\x09\x93\xe3\x4d\x36\x89\x91\x11\xf6\x47\xa8\x0e\xff\xfe\x87\x91\xed\xf2\xc4\x67\x18\x72\x2a\x20\xb6\xa3\x73\x9f\x65\x7f\x99\x09\xec\x7d\x9b\xe6\xdb\x3d\x45\x36\xee\xd4\xd9\xd5\xa5\x57\x6d\x3f\xe1\xd1\xaa\x0c\xa2\x03\x60\xf2\x6f\x6a\xd3\xa8\xb1\xf8\x2e\x93\x83\xe1\xdf\xcd\x64\xc9\x38\x11\xd1\x9d\xd3\xe2\x5f\x5f\x14\xe9\x11\x8c\x90\x67\xb8\x7e\x97\x1c\x81\xb0\x5d\x48\x24\x70\xf5\x81\xab\xaf\xb6\xc0\xd5\x07\xae\xbe\x68\xd6\x38\x77\x08\x88\x71\x69\x22\x1b\x51\xa3\x75\xaf\x0f\xc8\x71\x4b\x0b\xc8\x11\x5b\x40\x8e\x01\x39\x6e\xeb\x78\xe7\x2a\xf7\xe2\x70\xf7\xf0\xac\xde\x8e\x37\x82\xb5\x20\x58\x0b\x82\xb5\xc0\xb5\x40\x3a\x5d\x0b\xa4\x33\x90\xce\xb2\x7d\x74\xa4\x33\x58\x0b\x82\xb5\x20\x58\x0b\x82\xb5\xa0\xda\x82\xb5\x20\x58\x0b\x82\xb5\x20\x58\x0b\x36\xb4\xc0\xd5\xb7\xec\x34\x70\xf5\x81\xab\x5f\xd7\x82\xb5\x20\x58\x0b\x02\x72\x0c\xc8\x31\x20\xc7\x35\xed\x10\xad\x05\x51\x02\x94\xaf\x17\xe3\x97\x82\x18\xf1\xbd\xa2\x14\x9b\x8b\xa9\x77\xbf\x8e\x61\x46\xe7\x4c\xe4\xb2\x4c\xc8\x73\x7e\xf3\x1d\x99\x82\x56\x06\x0a\x60\x7d\x49\xc2\x8e\xa9\x39\x80\xd3\x71\xb2\xb6\xe3\x5d\x98\xcb\x7d\xb9\xdd\x3a\x32\x16\xc2\xac\x6e\x75\xc7\x50\x6a\xf1\x52\x40\x0f\xc1\x2b\x9b\x64\xad\xf5\x01\x2c\xe7\xd7\x17\x8f\x1a\xb6\xb2\x3e\x6d\xef\x65\x31\xb8\x2b\x4e\x82\xe9\xc4\x5d\xb2\xef\x0f\xf7\x1c\x62\x0c\xf7\x1e\xb8\x22\x55\x06\xab\xb0\x88\xe9\x64\x51\xcc\xef\xe3\x0e\x88\x39\xbf\xbe\xd8\xdf\xb6\xe5\x8f\x69\x63\xd7\x3d\x9a\xb1\x82\x91\x2a\x18\xa9\x8a\x16\x38\xb6\x96\x9d\x06\x8e\x2d\x70\x6c\xeb\x5a\xff\x1c\xdb\xa1\x1b\x75\x82\x29\x86\x04\x53\x8c\x7f\x2d\x98\x62\x76\xbe\x1e\x4c\x31\xc1\x14\x13\x4c\x31\xdb\x5b\xe0\x5d\x5d\x0b\xbc\x6b\xe0\x5d\xcb\xf6\xd1\xf1\xae\xc1\x14\x13\x90\x63\x40\x8e\x65\x0b\xc8\x31\x20\xc7\xa2\x7d\x8c\x81\x1b\x41\xab\x1d\xb4\xda\x41\xab\x1d\x88\x5f\x20\x7e\x81\xf8\x6d\xeb\x38\x68\xb5\x7d\x0b\x5a\xed\xa0\xd5\xae\xb5\xa0\xd5\x0e\x5a\xed\xa0\xd5\x0e\x5a\xed\x0d\x2d\xf0\xae\x2d\x3b\x0d\xbc\x6b\xe0\x5d\xd7\xb5\xa0\xd5\x0e\x5a\xed\x80\x1c\x03\x72\x0c\xc8\x71\x4d\x3b\x44\xad\xf6\x8e\x8b\xbb\x0f\x84\x56\x75\xd4\x8e\x5d\xf6\x2e\xed\x23\x72\x4e\xb9\x2b\xc9\x6a\x4b\xf6\x4d\x80\x62\xa5\xd4\x01\x49\x58\xca\x7c\xf5\x0d\x21\x0d\xd0\x0c\x23\xaa\xc0\xd7\x49\x5f\x3b\x54\xd1\xef\x9a\xa7\xdb\x97\xb9\x1d\x87\x6c\xad\x16\x56\xf8\xe7\x33\xee\xfb\x71\x60\xd5\x78\x1a\x2c\xda\x63\x9b\xcd\xf8\xe6\x45\x2c\xc6\x62\x2b\xf7\xec\x5c\xf6\x26\x10\xdc\x02\x72\x3b\x09\xcb\x2e\x72\x32\x24\x63\xaa\xe0\xf7\xbf\x5b\xa9\x59\x55\x7d\x25\x85\x98\x51\xbd\xbe\xda\xf5\x3e\x24\xa6\x1c\x62\x33\x90\xef\x71\x59\x8a\x69\xb4\xec\xc5\xd5\xa7\x69\x7b\x45\x0c\xdc\xc5\x97\xb6\x8f\x1b\x2d\xa9\x86\xe9\x62\xb9\x00\x66\xc9\x30\xf0\x0d\x35\xc9\xbc\xe4\xb9\x76\x88\xfb\x19\xf8\xc2\xaa\xae\xf8\x8f\xf2\x03\x31\x55\xc4\x05\xb5\x89\xf3\xd8\x15\xe8\xe3\xc7\x59\xf3\x78\xd7\xf9\xae\x2b\x89\xe4\xdb\xbe\xc4\xd1\xef\xe7\x85\xb5\x8a\x5d\x14\x99\x5e\x96\x37\x38\xa3\xd2\x10\x26\x6f\x3d\x43\xd6\xac\x7c\x7b\x63\xff\x4b\xc7\xb6\xbd\x0c\xf3\x56\x3e\x6d\x37\x7f\x36\xac\x24\xaa\xd9\x64\xc9\xdb\x87\x2d\x73\xd5\x15\xaf\x40\xa6\x4c\xa9\x4d\xd1\x4f\xf5\xa9\xef\xa2\x62\x7b\x50\xaf\x25\x7e\xd9\x9f\x8b\x5f\x51\x65\x3a\x05\xf3\x6c\xb5\x2b\x63\x1a\x11\x99\x27\x60\x6b\x60\xfb\x82\xaf\x34\x8a\x44\xce\x35\xe1\x00\x31\x46\x50\xad\x05\xef\x3d\x68\xdf\x1e\xdc\xf3\xbe\xbc\xf3\xd0\xce\x73\xe7\x5b\x6e\x0d\x67\x76\x09\x6b\xab\x5e\x55\xdb\xfe\xbc\x36\x0e\xbf\x9b\x89\x68\xc2\x99\xec\xcd\x97\xb4\xe1\x57\xaf\x44\xc2\xa2\xc5\x75\x9e\x80\x2b\xd9\xce\xb8\x25\x9e\x85\x1d\xb4\x2a\x47\x65\xf8\x36\x2e\x72\x40\xc6\xb9\x26\xb1\x00\xab\x2e\x74\xe9\xa3\xaa\x9f\xef\x35\xbe\xaf\xd5\xec\x2a\x91\x9b\x79\xd0\x2c\x4b\x30\x44\x52\x18\xc6\xe3\x7e\xc6\xa2\x59\x59\x2e\x7f\xdd\x6b\xfb\xf3\xa5\x7b\xc9\x69\xa4\x91\xac\x46\xbc\xba\x7b\xbc\x0b\xea\x48\x43\xa1\x8d\xd8\x3a\x5f\x5f\x4b\x91\x67\x7b\xbe\xde\x0e\x06\x88\xad\x01\x66\x07\xf2\xe5\xaa\xab\x2c\x96\x7f\xe8\x0c\xe3\xf6\xa8\x7d\x55\x6b\x67\x89\x19\x61\x98\x63\x9a\x27\x9a\x65\x09\x7e\x62\x53\x5c\x29\x42\x25\x94\x04\x6e\x40\x28\x5f\x78\x3b\xbb\xab\x49\x08\x31\xa1\x53\xd3\xa3\xc6\x7a\xa7\x62\xb2\xf7\xac\x6d\xd1\xc3\x3c\x35\xfc\x57\x45\xf7\x8b\x35\xbe\xcd\x38\xc5\x2c\xc8\x3d\x4b\x12\x23\xfc\xd0\x24\x11\xf7\x10\x8f\xc8\xd1\xd1\x4a\x89\x6b\x21\x2b\xf3\x46\x54\x77\xf4\x79\xed\x2d\x83\xd7\xca\x85\xed\x27\xc4\x35\x95\x42\x48\x33\x49\x84\x34\x97\xb9\x08\xe1\x82\x7b\xdb\xc1\xb7\xd7\x6f\x1f\x1d\xb6\xde\xd7\x87\x73\xf5\x31\x41\x1b\xf0\xca\xa8\xd4\x8c\x26\x24\x97\x89\xb2\xe0\x45\x8d\xac\x21\x7d\x45\xd2\x19\x45\xb7\x8c\x08\x14\xde\x74\x42\x3e\xb7\x00\xe5\xce\xd1\x62\x21\xc1\x93\x05\xa1\xf6\x14\x27\x79\x92\x0c\xc8\x84\x71\x6a\x68\x10\x64\x3e\xcc\x76\x0f\x8d\x4a\xd9\x6e\x18\x8f\xc0\x6c\xd3\xb0\x30\x27\xe0\xcc\xcd\xc8\x06\xdb\x15\xe8\x28\x1e\xb8\x12\x9c\x56\xc1\xa4\xdc\x54\x0c\x6a\x8a\xb0\x4c\xbd\x11\x12\x1c\xbb\x78\x2d\x12\xb4\x02\x16\xa6\x0a\xac\xdb\x49\xab\x8f\xff\x9b\xf1\x7d\x05\x6d\xdb\xae\x91\x2a\x47\x94\x13\x60\x7a\x06\x12\x87\x5e\x18\xd4\x69\xe0\xb4\xbc\x0f\xc7\x2a\x8f\x66\x66\x8b\x8e\x32\x11\xab\x23\x83\x58\x8f\x14\x44\x12\xb4\x3a\x3a\x31\x7f\x2d\xaf\x15\xf7\xab\xfa\xdd\x29\xcd\xd8\xd1\xc9\x80\xe0\x86\x63\xb1\x50\xa1\x67\x1f\xef\x15\xf0\x6b\xad\x95\xc5\xde\xd5\x96\x0a\xe6\x57\x7a\x70\x05\x2a\x45\x66\x6b\x3b\x1a\xaa\xa5\x01\x83\xba\x0d\x90\x23\xb8\x54\x2c\xbe\x4b\xe4\x8b\x90\x33\x4e\xc0\xda\xe8\x40\x93\x14\x28\x77\x6f\xc3\x1c\xe4\x42\xcf\xd0\x6c\xa7\x0a\xdc\xf5\xd1\x6f\x7a\xb7\x0d\x77\x08\xc4\x6f\x6e\x09\xe4\xb6\xfc\xf1\xf2\xe6\xbe\xf8\xfc\xc5\x32\x0e\x2f\x89\xd6\x47\xbb\x95\xc8\x70\xb4\xda\xc6\xef\xcc\x97\xf5\x2d\xb4\x3f\x59\xec\x5b\xe0\x8f\xb7\x6f\x6d\xa5\x62\xb7\x57\xdf\x30\x1e\xab\x22\x4b\x68\x6c\xd1\xaa\xdb\xef\xb5\x9b\x8c\x33\xfc\x18\x37\x78\x55\x36\xd8\x97\x9f\xdf\xd1\x7d\x45\x78\x3c\x04\x79\x0f\xeb\x14\xd7\x98\x39\x83\xa7\x06\xd6\x78\x6c\xb8\x9f\x84\x8e\x21\x51\x4e\xcf\x05\x95\xe9\x93\xb3\xb7\xef\x8a\x92\xe1\x12\xe8\x0e\xdd\xed\x23\x48\x79\x7b\x78\xa1\xac\x94\x66\x5f\x6d\xfb\x73\xe3\xb8\x15\xcd\xec\x2c\xe4\x06\xb4\xbd\x66\x29\xcd\xcc\x2d\xb3\x7d\x58\xfd\xff\x92\x6e\xff\x2d\xee\xf4\xee\xcb\xd2\x48\x8a\xd9\xbf\xd4\xf0\xba\x41\xf6\xba\x2a\xfb\x79\xba\x34\xb9\x7b\x5b\x34\x4e\x65\xab\x6d\xf3\x12\x40\x3b\xf1\xc5\x09\x1c\x11\xad\xea\xbd\x63\x50\x36\xd9\x8b\x4d\xb8\x23\xfd\xef\x65\x17\x3d\x1f\x41\x13\x31\x72\x48\x14\x24\x10\xad\xab\x05\xbe\xee\x65\x0d\x69\x96\xec\xba\x79\xa4\xb1\xc8\x99\x32\x7e\x0d\x34\x5e\xdc\x40\x24\x78\xbc\x27\x82\x6d\x27\x18\xbc\x63\x9c\xa5\x79\x4a\x78\x9e\x8e\x01\xcf\x42\xd9\x41\x11\xe3\x58\xb9\x9f\x12\x0e\xf7\xc9\xc2\x61\x99\x98\x64\x22\xf6\x88\x67\x6c\x84\x4f\x1a\xef\x4b\x2f\xee\x99\x9e\x61\xe9\x04\xbe\x30\x43\x31\x5d\x12\x33\x49\x22\x49\x95\xe1\xb2\x06\x38\x34\xd3\x86\x00\x8e\x01\xad\xc0\x2c\x06\x03\x32\x74\x4e\x59\x62\x38\xfa\x7d\x29\xda\x05\x4c\x68\x9e\x60\xbd\x7d\xf2\x92\x1c\x9b\x89\x7b\x19\x74\x5d\xb7\x86\xc7\x56\x42\x70\xf3\x5f\x9b\x05\x08\x17\x77\xd2\xc0\x1c\xb5\x4f\x42\x6e\xdf\xf6\x4d\xcc\xed\x5b\x46\x73\xb5\xaf\x36\xa4\x06\x0d\x97\x3c\x36\x97\xb0\xca\xfe\x56\xe8\x08\x53\xae\xe7\xfd\x76\x75\x7b\x6a\xa9\x35\xb3\x96\x62\x2a\x41\xa9\x0b\xa0\x71\xc2\x38\x3c\x01\x50\xdf\xce\x80\xa4\xf4\x01\x01\x5b\xb3\x14\x0c\x9f\x54\x05\x6b\x5a\x5d\xbe\x16\x24\xa5\x77\x50\xcc\x93\x8c\x61\x22\xe4\x1e\x5e\x07\xbe\x31\x55\x05\x26\x0b\xb4\x13\xca\x12\x88\x47\x38\x93\xca\x58\x06\xd8\xa5\x48\x12\x90\x16\x0e\xcd\xdf\x8c\xe7\x40\xb4\xd8\x73\xb0\x4c\x0a\x14\xc3\xed\x00\x55\x6e\x06\xb9\x05\x6a\xba\xb4\x14\xc7\x97\xe1\xbf\x5a\xda\xff\x37\x0f\x11\xea\x8a\xf7\x1c\x50\x02\x55\xd8\x99\xbd\x36\x2a\x97\x13\x23\x72\x7b\x89\xbe\xb2\x38\xeb\xd4\x31\x22\xef\x85\x76\x9e\xb5\xc5\x96\x9a\xaf\xf7\x1c\x0f\xa5\x5a\x20\xa0\x34\x4b\x11\xdb\xc4\x39\x7a\x4c\x9a\xc1\xf0\x2c\xe9\x7a\xd8\xad\xdd\xf5\xdf\xbf\x7c\xb9\x27\xd7\xfb\xf8\xb7\x56\x02\xea\x21\x1e\x15\xe0\xdf\x17\xd8\xdb\x53\xd7\x4c\xc4\xca\x80\x1f\x73\x52\x46\x26\xcc\x1a\x25\xba\x1c\x30\xa5\x19\x9f\xe6\x4c\xcd\xc8\x18\xf4\x3d\x00\x27\xf0\x60\xb3\x9d\xed\x39\xde\x4f\x20\x05\xc2\x9b\x39\xad\xd2\x6e\x56\x3b\x83\x57\x87\x73\x00\x73\xa6\x98\xe0\x7f\x66\x4a\x0b\xb9\x78\xcb\x52\xb6\xa3\xb6\x82\x6f\xed\xb1\x4f\x49\x4e\x45\x12\x93\x6b\x0b\x02\x37\x60\x77\x46\x02\x6a\xe9\xb5\xb0\xca\x04\x62\x30\xc2\x98\x46\x77\xfb\x52\xb5\xc6\xa7\xba\xe9\xbc\x5a\x50\xd1\x57\x2f\x0f\xe5\x58\x3d\xa3\xf6\x98\x47\x89\x22\x41\x31\x12\xd2\x0e\x7b\xb1\xde\x3c\xd8\xed\xae\x1d\xed\xfd\x4c\x28\xc0\x17\x08\x95\xbb\x79\xc2\xea\x32\xbc\xe9\x8e\xa9\x02\xd3\xa2\x5b\x05\x07\x45\xe8\x64\x52\x7f\x23\x6e\xc0\x29\xdb\x76\xa9\x49\x9a\x2b\x4d\x52\xaa\xa3\x99\xd5\xc4\x8a\xb8\xe0\x5e\x5f\x28\x27\x65\x36\x39\xda\xbd\xad\x38\xcd\xed\x2d\xc4\xce\xf3\xcd\x43\x66\x88\xc7\x2e\xcb\x6c\xbd\xd5\xce\x79\xb9\x9b\xba\xc2\x25\xa9\x1f\xae\x13\x13\x90\x96\x5a\xc2\x5d\xfd\x05\xb5\xce\x67\xef\x2f\xf6\xbf\x35\x6d\xf4\x29\x8d\x35\x2a\xed\xed\x01\xa6\x9d\x6d\xd9\x03\x6f\x20\x70\x4f\xea\x46\x27\x94\x9f\xd5\x80\x50\x72\x07\x8b\x81\xe5\x3c\x2a\x49\x3a\xcd\xcb\x8d\x26\x22\x21\x71\xec\x29\x98\x1e\xb1\x43\x3b\xc6\xfe\xbb\xdd\x02\x30\xfd\xe0\x4d\xcc\x8c\xbe\x0d\xcd\x44\x1b\x7e\xe1\x37\xa8\xc1\x67\xcd\xef\x8e\x6d\x77\xb0\x68\xf6\xc1\x12\x24\x99\x53\x70\x52\xbc\x85\x11\xf3\x43\x21\x3d\x14\x60\xd1\xcc\xfe\x5b\x6d\x8d\x95\xad\xbe\xf9\x4d\xec\xb4\xbc\x86\x17\xa5\x3a\x6e\x4d\xc5\x6a\xb6\xe5\x85\xb2\xf0\x6b\x30\xcc\x8c\x65\x36\xe4\xcc\x59\xd6\x9a\x03\xb1\x6d\xdf\xd1\x84\xc5\xc5\x90\x16\xfb\x5c\xf2\x81\xe1\xad\xcd\x7f\x90\xfc\x58\x8e\xff\x42\x80\x7a\x2f\x34\xfe\xf2\x64\x67\x60\x97\xf5\xd4\x27\x60\x47\x75\x56\x1e\x44\xab\xa8\xaf\xb0\x11\x55\x6e\xa7\x7d\x9a\xdf\xd2\x21\x51\x91\x4b\x4e\x84\x74\x5b\xd7\x78\x50\xd3\x99\x1b\xd8\x0e\x89\x84\x74\x6c\x0d\x93\x68\x2f\x5a\x3b\xa6\x3b\x21\x21\x6b\x07\xd4\xe3\xf0\x6e\x68\xe4\x05\xed\x13\x54\x57\x64\x09\x4a\x67\x4e\x68\xa2\xde\x03\x88\x6d\xd7\xc1\xae\x6b\x29\xc8\x29\x5a\x6c\xa3\xbd\x2d\x8c\xc5\xa4\x5b\x10\x3e\xdb\x1a\x93\xbf\xea\x80\x8d\x00\x19\x79\x03\xab\xf2\x6d\xc9\x5d\x34\x82\xe0\xca\x70\x35\x7d\xf4\x3f\x0d\x01\xc5\x03\xfe\x17\xc9\x28\x93\x6a\x44\xce\x88\x62\x7c\x9a\x40\xed\x99\x13\xb7\x2b\xdd\x34\x1a\x3c\x33\x83\x1a\x3a\x37\xa7\x89\x53\x7a\x50\x4e\xc0\xaa\xbe\xcd\x3c\x96\x59\xa5\x81\xe3\x66\x0d\xda\x2f\xec\xea\x47\x77\xb0\x38\x1a\x6c\xf4\x3c\x5e\xdf\xaa\xb7\xe2\xe8\x92\x1f\x59\x76\x61\x05\xae\x0b\xde\x02\x8d\xf7\x47\xf8\xec\xa8\x4f\x3e\xac\x21\x5f\xd0\x56\x71\x5f\x1f\xb4\x01\x48\x3e\x0c\xef\x8a\x30\xe5\x61\x4a\xb3\xa1\xbb\x45\x5a\xa4\x7b\xdd\x5e\xef\xeb\xd7\x42\x1e\xba\x5d\x56\xe4\x38\xa7\x58\x2d\x48\xae\xc0\x8a\xac\x88\x58\x08\x78\xb9\x07\xa5\x1c\xd4\x30\x71\xb8\x47\x39\xe5\x60\x84\x07\x23\x4e\x33\x3e\xfd\x36\x8b\xa9\xde\x2b\xc4\xc4\xb6\xf6\x77\xfb\xda\x0e\x48\x72\x1c\xd1\x40\xf2\x84\x4d\x49\x46\x25\x4d\xd5\x88\x5c\xb9\x4c\xf3\x08\xd7\x6c\x52\x35\x95\xb8\x7d\xbe\x5d\x64\x40\xfe\xd8\x7c\x40\xbb\xc2\x26\xc8\x79\x38\x6c\xb2\xae\xdb\x0f\x17\x1f\x5e\x13\x3b\x8a\x95\x3c\xb5\x20\x13\x81\x3a\x0b\x91\x4b\xb3\xd0\x39\x70\xd4\x35\x1a\xc9\x58\x70\xf8\x30\x31\x78\x83\x6a\x98\x83\x24\xf7\x06\xa8\x22\x16\x37\x50\xa5\x9a\x86\x0a\xd4\x47\xbe\xdc\xed\xb8\xea\x94\x3e\xdc\xe4\x72\xda\x00\xa6\x48\x67\xae\xa7\xaa\xca\x2e\x95\x4a\x78\xfb\xaa\x09\x72\x54\x34\x83\x38\x4f\x20\x26\x74\x2c\xe6\x50\x33\xb4\x15\x9f\x35\x1c\x1a\x35\x1d\x0d\xbf\xf9\xce\xa0\x6d\x3f\x29\xc3\xa5\x8d\x95\x48\x72\x5d\x28\xc4\x8e\xe1\xe1\x35\xf9\x77\x74\x76\xa2\x24\x03\x19\x01\xd7\x74\x0a\xcb\x9a\x4b\xfb\xde\xab\x97\xff\x76\xd2\x74\x02\xc8\x0f\x99\xf1\x9d\x1e\xf9\xa5\xb9\x72\xef\xe8\xc3\xb7\xbc\xb4\xf2\x30\x45\xf6\xd4\x62\x95\xed\x6c\x69\x21\x38\x4a\x12\xe5\x09\xea\xa8\xd1\x89\xac\xb2\x9c\xf1\x82\x48\x91\xa3\x1b\x19\xc9\xb3\xa6\x63\x55\xf5\x6d\xbf\xfd\xf7\x7f\x6b\xfa\xf9\x9b\x07\x9a\x66\x09\xbc\xf6\x85\x4c\xac\xb2\xd0\x08\x24\x5a\x90\x2f\x5e\xfe\xdb\xc0\xba\x19\xc0\x7d\x45\x79\x55\xc2\x11\x35\x40\x94\x67\x84\xa5\x36\x1e\x04\x92\x05\x76\xd4\x94\x05\x34\x74\xbb\x8e\x17\x95\xa6\x52\xab\x01\x41\x6f\xb6\x42\x94\xd4\x42\xd3\x64\x49\x5f\x8a\x9a\x4a\xb8\xb7\xa0\x10\x0b\x3c\x4b\x40\xb3\x45\xc3\x59\xbc\xfa\xe2\xe5\xbf\xad\x6a\xc5\x3f\xf0\x08\x70\x1c\xec\x1f\x9d\x1b\xc7\x00\x9c\xdc\xb1\x24\x81\xb8\x29\x8f\xbe\x6b\x23\x27\xb9\xd4\x33\x90\x03\x02\x5c\x79\x53\x86\x59\xfb\xd2\xba\x71\x2e\x32\xe7\xbc\xa9\x2c\x46\x08\xb5\x06\x55\xb4\x8e\x54\xac\x25\x6e\xdb\x0d\xb7\xa9\x49\x2a\x94\x5e\xbf\x1d\x8d\x06\xa3\x7c\xf1\x61\xd2\x94\x3f\x1f\xb6\xd0\x06\xaf\x7e\xdd\x42\x4c\xad\xb1\x54\x8c\xeb\xa1\x90\x43\xdb\xcd\x6b\xa2\x65\xde\x84\x8b\x4d\x6b\x28\xe4\x00\x29\x40\x5e\x41\x70\x2b\x40\xf0\xd1\xa1\xf1\xf6\xe8\x36\x16\xf7\xbc\x2f\xa2\x81\xd4\xbe\x15\xb9\x78\x12\x14\x5e\x37\x2d\x2d\x61\x1e\xb3\x0f\xe6\xed\xff\xbb\x7a\xe5\x9b\xca\xe4\x4b\x94\x60\x33\x6e\x77\xa8\xb5\x40\xdd\x46\x56\x43\x0f\x8a\xc1\xd2\x5c\x1b\xce\x60\xcd\xca\x0a\xac\x6a\xf9\x51\x6b\x1d\x31\x2f\xd8\x49\xad\x21\x71\x25\x02\x6e\x4c\xca\x36\x90\x2a\xbb\xc6\xd2\x79\x44\xa3\xcb\xa5\x41\xc3\x6a\x13\x1e\x6e\x38\x74\x02\x54\xe9\x75\x47\x18\xb0\xf6\xce\xb6\x3d\x92\x75\xb9\xd5\xe5\x61\x23\x90\xe1\x8e\x17\x86\x36\x0c\xd2\x1e\x03\x39\xba\x06\xeb\x06\x65\xdd\xf7\x6b\x92\xd8\x51\x61\x00\x37\x87\xdd\x52\x48\x6b\xb8\x6d\xde\x86\xf7\xa8\x06\x6d\x37\x46\x25\x0a\xcd\x99\x10\x1d\x09\x2a\x7c\xaa\xac\x83\xd8\xfe\x76\x6c\x70\xa1\x1a\xee\x0a\xfb\xc5\x8c\x54\x06\xd1\x48\x02\x62\x15\x1b\x1c\x67\x95\x45\xa8\x43\x3a\x4b\xee\xe9\x42\x1d\x1d\x8c\xbe\x21\x05\x4d\xb7\x07\x5f\x2f\xb7\xf6\x0c\xc1\x8d\xa6\x3c\xa6\x32\x76\x2b\x7a\xa1\x8a\xd1\x9b\x60\x84\x77\xe8\xdf\xc4\x27\xe2\x35\x99\x69\x9d\xa9\xd7\xa7\xa7\x53\xa6\x47\x77\xff\xa1\x46\x4c\x9c\x46\x22\x4d\x73\xce\xf4\xe2\x14\xdd\x95\xd8\x38\xd7\x42\xaa\xd3\x18\xe6\x90\x9c\x2a\x36\x1d\x52\x19\xcd\x98\x86\x48\xe7\x12\x4e\x69\xc6\x86\xa5\x22\x40\x8d\xd2\xf8\x57\x7e\x4a\x8f\x2b\xc3\xd7\xd0\x04\x5a\x64\xe4\x1c\x86\x39\xbf\xe3\xe2\x9e\x0f\x51\x67\xa9\x1a\x21\x8c\xfd\xdc\x5e\x7d\xeb\x70\x86\x4d\xbc\x62\x33\xd1\x40\xd1\xf9\xe8\x27\x6b\xb6\x68\x48\x79\x3c\xb4\xbe\x5e\x8f\x7b\xc0\x6d\xec\xb2\xc3\xd2\x9f\x74\xff\xd9\xb5\xd3\x06\xd1\x48\xb3\x39\xb4\xf2\x6a\xf4\xad\x9b\x60\xf0\xc1\xc7\x39\xc5\xb9\xb4\xb0\x54\x71\x73\xf4\x3e\x1e\x29\x5d\x20\x0f\x8f\x93\x25\xc2\x32\x6f\x5c\xc4\xe0\x6c\x96\xf3\x06\xbe\x87\xbe\xdd\x18\xb4\x7c\x6b\xa4\x4d\xe7\x2a\x89\x26\xe1\x85\xd2\x90\x5a\x52\x60\x47\x4b\x16\x44\xcb\x85\xf5\xaf\x94\x77\x84\x69\xef\xb4\x68\xc4\xfb\x3b\x7c\x4f\x29\x11\x31\x64\xe9\xcb\x63\x6b\x27\xab\x78\xb3\x18\x25\x99\x50\x0c\xd7\xe5\x18\x97\x66\xfd\xb5\xe7\x79\x2a\xfe\x4b\xbf\xff\x5d\x13\x38\x9a\x60\xe2\xc8\x86\xe6\xfa\xba\x7f\xef\xa4\x1a\xdb\xeb\x8e\xfe\x85\xf2\x5a\x41\xc3\x88\x46\x82\x2b\x2d\x29\xdb\x9c\x33\x61\x7d\x6b\xe9\x53\xd1\xde\x71\x81\x20\x74\x9e\xb5\xda\x14\xb2\x1a\x96\xe0\x19\x16\x04\x79\xbf\xd5\xd5\x8d\xb1\x29\x15\x7c\x78\x4d\x43\x74\x6b\x5b\xeb\x3d\x22\x9d\xf6\xc9\x7e\x6d\x13\xd7\xc6\x17\x28\x6f\xdc\x14\xeb\xba\x9c\x72\x51\xfc\xfc\xe6\x01\xa2\x7c\xdf\xbc\x63\xab\xad\xab\xdd\xde\x36\xc3\xed\x79\x35\xb5\x73\x7f\xb6\xb3\x37\x18\xc2\x3f\x70\x4c\xa5\xc0\xf3\x72\xdc\xa5\xa2\x9a\xa9\x49\x53\x4b\xb2\x6f\xe6\x54\x8b\x73\x87\x8a\x2f\x58\x71\x63\x0a\xbf\x3a\xe4\x19\x6c\x30\x33\xd3\x88\x39\xa3\x99\x10\xaa\x89\x9a\xa8\xda\xa8\x05\x3a\x5c\xc3\x9c\x09\xeb\xe1\x84\xb1\xf5\x92\xa4\x06\x6d\x3a\x12\x5f\x99\x94\xb5\x77\x96\x9f\xb1\xa6\xb2\xba\x6f\xa8\xee\x2b\x80\xc3\x7b\xf2\x98\xc1\xd1\x66\x67\xfe\x98\x22\xb3\xae\x34\x51\x79\x6a\xa6\x72\x0f\x6c\x3a\xd3\x6a\x40\xd8\xa8\xb1\xbe\xc8\x37\x73\x8d\x80\x46\xb3\xca\x12\x52\x00\x5d\xab\xfe\x5c\xbd\x7b\x55\xc3\xee\xf1\xd6\xd4\x3d\xbb\x9b\xcb\x63\x30\x28\xf8\x86\xe5\x2b\xb1\x16\x0c\x06\x04\x74\x34\x3a\x69\xee\x98\x61\x5b\x99\xa4\xcd\xec\xe2\x78\x41\x98\x06\x43\x8c\x51\xf4\x97\x22\x9f\xda\xbd\x06\x1f\x63\x86\x7b\x50\x84\xaa\xa3\xdf\x5c\x1c\x37\x57\x49\xf8\x76\x64\x0f\xed\xc8\xdc\x18\xdc\xdb\x3c\xf5\xa9\x85\xf1\x04\xd0\xaa\x0f\x45\x66\x05\x09\x2a\x13\x56\x4d\xb6\x6c\xef\xff\xaf\x86\x56\xfd\x6a\x33\x43\x1d\xab\x93\x12\xb4\x66\x6c\x3a\xf3\x90\x45\x1d\x7f\x50\x87\xc8\x76\x00\xd6\xde\xaf\xc4\xb6\x96\xde\x25\xb6\xf5\x83\x05\x2b\x61\xe6\xe5\xf5\xac\x5c\x09\x0d\x32\x2d\x8e\x0d\x6f\x0d\x92\x15\x67\x6b\xf7\x45\xc9\xdd\x65\x25\x2f\x5b\xcf\xe2\xd8\xdc\x72\xc2\x8c\x04\x69\xf0\xd4\x50\x64\x27\x23\x72\x46\x78\x5e\xa0\xe5\x6d\x13\xe3\xa2\x98\x97\xeb\xc8\x4c\x56\x89\xb2\xaf\xb6\xd8\xba\x0b\x29\xb5\xad\x9d\x3b\x67\xb5\x0d\xdd\x0e\xc0\xee\x92\x22\xdb\x3a\xb1\x67\xd4\xb2\x83\x6e\x6c\x81\xef\xc3\xaf\xa2\x7d\x1f\xcb\x69\xbf\x2d\x5e\x29\xdd\x82\x41\xa6\x83\x2a\x1f\x5f\xe0\x80\x3a\xba\xb1\x7b\xd1\x16\x2a\x48\x3f\x90\x41\x7a\xda\x57\xd2\xc9\x43\x7d\x7d\x5b\xda\xe5\x22\x69\x45\x6d\xb7\x6b\xf4\x72\xbc\xc0\xa7\x0d\x9d\xf7\x37\xb7\xae\xc8\xb5\x6c\x9d\xd0\x6c\xd9\xfa\x42\xb8\x65\x5b\x86\xde\x7e\xdc\xdd\x7b\x98\x18\x0e\xd7\x8f\x13\xfc\x86\x01\xfa\xb9\x3d\xb6\x75\xc7\xb0\x65\x6b\xee\x46\xbf\xa9\x9f\xde\x8e\xa3\x2f\x14\x61\x5b\x0b\x47\xfc\xf5\x6d\xc5\x63\xef\x71\xfc\xf2\xd7\xb7\xd6\xc6\x9c\xf5\xad\xad\x0f\xff\xfa\xd6\x3f\xa2\x30\xed\xfa\x09\xdc\xfc\xd7\xb7\xbd\x9c\xff\x07\x75\xcf\x7f\xf2\xb5\xb6\x88\xe9\x6d\x27\x2a\x5b\xb6\x9e\x4f\xbc\x5d\xc4\xc0\xfa\xf6\x38\xe7\x7d\xf6\x74\x31\x05\xeb\xdb\x33\x47\x1a\x34\x9c\xd4\xe6\x09\x7d\xad\xcd\x64\xde\xea\x41\xe5\xe3\x9e\x66\x53\x99\x82\xcd\x49\xe7\x5d\xe5\x9d\x80\x3d\x70\x19\x2b\xbc\x41\x12\xa3\x63\x33\x09\x98\xdd\x10\xc3\x46\x5a\x29\x85\x37\xb7\xbd\xc3\x2f\xba\x84\x53\xac\x6f\xfd\xf1\x6b\xb6\xf5\xc4\xb5\xd9\xd6\x1b\xf6\x40\x3e\xfb\x2b\x6b\xcc\x7b\x46\x16\xdb\x9a\x13\x03\x8b\xbd\xb3\x05\x16\x3b\xb0\xd8\xbb\x5b\x60\xb1\x57\x5b\x60\xb1\x03\x8b\xdd\xa9\x05\x16\x7b\x67\x0b\x2c\xf6\xce\x16\x58\xec\xb2\xfd\x12\x58\xec\xae\x61\xa7\xeb\x9b\xd5\xf7\xf7\x66\x76\xf8\x8b\x35\x77\x2d\xdb\x19\x50\x38\xf0\x6e\xd6\x75\x83\x83\xe1\x42\x6f\x1c\xa9\xbe\x45\x23\x85\x8b\xa0\x96\x94\x4f\x81\xbc\x1a\xbe\x7a\xd9\xd8\xa9\xbf\xda\xba\xf8\x46\x57\x5b\xd3\xac\x47\xcb\x6d\x93\xb1\xfb\xf0\xfc\x3f\x1c\x1a\x2b\x8c\xf0\x35\x49\x6b\x83\x33\x46\x91\xeb\x3d\x05\xdd\xdc\x7b\xde\xb7\xaa\x15\x93\xa5\x50\x78\x48\x59\x1c\xe6\x62\x3e\xca\x08\x4a\xc1\x9d\x35\xdd\xc0\x50\x5b\x18\x69\xb5\xda\x08\xa8\x0d\xb7\x1e\x83\x59\x71\x5b\xbf\x13\x4d\x94\x48\xc1\x26\x07\xf3\x78\xd2\x2c\x17\x3c\x18\x90\x63\x18\x4d\x47\x24\xce\xc1\x25\x02\xb0\x21\x0a\x27\x83\x8a\x27\x5f\x5b\xc7\x13\x43\xdd\x25\xfe\xc7\x6c\xac\x73\x00\x84\x39\x70\x9d\xd3\x24\x59\x10\x98\xb3\x48\x17\x27\x80\x91\x3c\x4c\xab\x0e\x7b\xdd\x59\xee\xea\x2a\x6b\x0d\x57\x90\x4d\x3b\x5a\xdc\x5d\x28\x5a\x99\x47\x7b\x04\xbc\x94\xf4\xdd\xee\xd0\x68\xa3\xda\x44\x9b\xd1\xac\xf7\x12\xfe\x13\x2f\xee\x87\xeb\xb6\x8e\x1e\xa4\x27\xe2\xdb\x99\xe0\xf6\xc9\x07\x3b\xef\x0a\x21\x9d\xff\xc7\xea\x0e\xae\xf1\xaf\x58\x93\x01\xa3\x71\x20\x77\xbd\xe9\x19\xa4\x6d\xb2\x68\xac\x6b\x66\x6e\xb7\x22\x13\x89\x98\x2e\xaa\x80\xe7\x8a\x98\x97\xb9\xb5\x29\x51\xf9\xd8\x49\x72\xe6\xee\xbf\x5f\x82\xd4\xe0\x19\xb0\xb1\x05\xcf\x80\x95\x16\xd4\x96\x41\x6d\xd9\xa0\x9f\xa0\xb6\x0c\x6a\xcb\xa0\xb6\x0c\x6a\xcb\xb6\x2d\xa8\x2d\x1b\x4d\x2a\xa8\x2d\x49\x50\x5b\x6e\x6c\xc1\x33\x60\x5d\x0b\x2c\x76\x60\xb1\xf7\x6b\x81\xc5\x6e\xd0\x02\x8b\xbd\xa6\x05\x16\x7b\x5b\x0b\x2c\xf6\xf6\x16\x58\xec\xc0\x62\x07\x16\xfb\x97\xc0\x62\xf7\xef\x19\xd0\x67\x8f\x99\x88\x7b\x4f\x12\x91\x89\x78\x4b\x8e\x08\x6b\x34\x8d\xc4\x30\x11\x51\x91\x11\xd9\x7c\xe2\x3c\x0b\x14\x4d\xad\xcd\x78\x40\x7e\x12\x1c\x6c\x64\xb9\x2d\x29\x98\x02\x11\x58\x19\x3c\x13\xf1\xb1\x3a\x69\x11\x1e\x1b\x72\x4c\xec\xd3\x42\x8e\x89\x90\x63\x22\xe4\x98\x78\xda\x1c\x13\x33\xaa\x5c\x35\x00\xa4\xfe\x9b\x53\x4e\x54\x30\xf6\x2d\xc8\x34\x64\x9c\xd8\xd5\x56\x84\x4e\x77\x7d\xcc\x09\x57\x80\xdd\xee\x78\xec\x9c\xe4\x20\xbe\xaa\xef\xb3\xd3\x50\xe1\xb6\xd0\x38\x86\x98\x64\x20\x87\xf6\xf2\x08\x32\x61\xae\x18\xc7\xd2\x6d\x76\x3b\xdc\x16\x21\x1e\x48\x1a\x87\xfa\x4e\x74\xe8\xe9\xf9\x73\x39\xd4\x97\xd2\x9b\x4f\x4b\xd5\xb5\xa7\xc6\xfe\x7c\x74\x99\x1d\xfa\x51\x8c\x0d\x89\x76\xfe\x2c\xdf\x74\x52\x8d\xf5\xa5\xc7\x42\x3d\xd3\x4d\xa3\x52\x97\x9b\x5b\xdf\xb2\xbb\xaf\x1f\xf8\x8f\x1c\xe4\x82\x88\x39\xc8\x52\x2b\xe3\x29\xad\x72\x9e\xb7\x98\x61\xdb\x95\xc7\xec\x2e\x83\x5d\x4e\x6c\xee\x1a\x9e\x27\xc9\xc0\xf6\xbe\x8c\xf6\x3c\x21\xb2\x45\x6a\x84\x79\xde\x93\x9a\xbe\x17\x4d\x6e\x9f\x8a\xce\xbe\x5d\x8e\xc8\x81\x15\xd2\xdc\xdc\xfa\x95\xc3\x7b\x94\xc2\x1f\x49\x4d\x76\x28\x05\x3b\x37\xb7\xc7\x34\xa4\x90\xbe\x8d\x29\xa4\x67\x83\x0a\xe9\xd1\xa8\x42\xfa\x35\xac\x90\xde\x8d\x2b\xa4\x4f\x03\x0b\x79\xf2\x02\xa4\x9b\x5b\xcf\xda\x77\xd2\xbb\xcd\x85\x3c\x1a\x82\x21\x4f\x5d\xe8\x74\x73\x7b\x9a\x12\xa8\x9b\xdb\x23\x40\x41\x9f\x76\x18\xf2\xa8\x30\xf0\x2c\xa5\x56\x37\xb7\x83\xb4\xce\x6c\x9d\xd8\xa3\x97\x67\xdd\xdc\x7a\x37\x76\x90\x47\x30\x78\x90\xbe\x8d\x1e\xa4\xef\x2b\xdb\xaa\x40\xec\xe6\xf6\x18\x77\xf5\x59\x8b\xca\x6e\x9b\xd6\x33\x96\x9b\xdd\xdc\x9e\xbf\x10\xed\xe6\xd6\x33\x57\xdb\xb5\x78\xed\xae\x89\xf6\x72\xc5\x1e\x27\xf2\x98\xd4\xee\xc5\x37\xb0\xe8\xd7\x3b\xb0\x87\x9b\xfb\xae\x36\x3b\x2f\xb6\x69\x57\x51\xaa\xe4\x76\xd1\x46\x65\x19\x5d\xa7\x5b\x77\x45\x77\x93\xa4\xf3\x1c\xc6\x40\x34\xbd\x03\x34\xc9\x0b\x2c\x0e\xc0\x62\xb0\x55\x24\x2c\xa8\xe3\xf8\x06\xc4\x73\x05\xb1\x99\x48\x22\xc4\x5d\x9e\xf9\xab\x82\x71\x9b\x7d\x5c\x4c\xc6\x23\x91\xfa\x00\x55\x1b\xae\x64\x6e\xbc\xc3\x05\x43\x5b\xf5\xc7\xfe\x8e\xd3\x41\xe2\xe6\x94\x91\x3f\xbe\xad\x2a\xc7\x7e\x24\x54\x91\x1f\x51\x6c\xe0\xe4\x18\x3f\x3c\xf9\xb1\xbb\xef\x5e\x71\x04\xd6\x9e\x25\x72\xc4\xb0\x4b\x75\x90\xeb\xa7\xb3\x6d\x77\x3b\x4f\xc8\x57\x2a\xa8\x6e\xdc\x0b\x6b\x87\x3e\xa6\x5c\xb3\x93\x42\x85\x3b\x22\x08\x5f\x28\x33\xc5\x82\xbf\xd0\x76\xd6\x1e\xeb\xfb\x0e\xba\xbb\xec\x15\x27\x57\xba\x7e\x58\xcb\xf0\xc8\x55\x96\xb6\x35\xb1\x8a\x0a\x4e\x96\x37\xea\x3c\xee\xad\xb7\xb9\x3b\x51\x71\x22\xe4\x98\xc5\x31\x60\xd9\xbb\x62\xa9\x63\xa1\x67\xcb\x57\x0e\x5d\xb5\xaa\xb0\xd3\x7d\x32\x67\x89\x12\x83\xe5\x71\x22\xca\x7d\x74\x39\x68\x5b\x3b\xaf\x36\x2c\x61\xca\x1c\x8b\x82\x1e\xc4\x96\x5b\x57\x24\xd0\xf0\xeb\x49\x36\xa3\x15\xf3\x9f\x23\x5b\x8a\x00\xa7\x63\xb4\x52\xd6\xe7\x79\xc9\x2b\xba\x53\x32\x01\xaa\x73\x09\x64\xda\xa2\x6e\xe4\x72\x3b\x38\xb7\xe6\xc7\x22\x5f\x09\x53\xba\x47\xfa\xc5\xd4\x81\x93\xb0\xe5\x09\x06\x2a\xd6\x3b\x15\xe3\x42\x07\x42\x16\x08\xd9\x12\x21\x5b\xb9\x78\x8f\x47\xcb\x56\x86\x0a\xe4\x2c\x90\xb3\x36\x8d\xd3\x14\x54\x46\x23\xf8\x88\xec\xd8\xd6\xc8\x60\xc3\xc0\xfc\xf4\x55\xa5\x14\x30\xc8\xb4\x57\xdb\x83\xcf\x9c\x82\x30\x8f\xfd\xc6\xde\xe1\x2a\xe7\x95\x3a\x91\x95\xc9\x58\x74\xbe\xec\x5b\xd8\x79\x26\x5e\x29\x22\x38\x28\x34\xf1\x42\xe1\xe1\x5a\x19\x1c\xc7\xea\xbe\x6c\xcc\x88\x52\x1a\x73\x78\xbc\x9c\x23\xa5\x1c\x11\xad\xcd\x29\x50\xae\xc8\x91\x77\xbd\x7d\xa1\xca\x37\xf6\x2c\x08\xbb\xad\x15\xa5\x79\x8a\x19\x1d\xff\xf3\x5f\x27\xb5\x72\x3c\xe5\x84\x82\x2f\xc1\xde\x2d\xf8\x12\x74\x6a\xc1\x97\x20\xf8\x12\xf4\xd1\x57\xf0\x25\x08\xbe\x04\x6b\x5b\xf0\x25\x08\xbe\x04\xc1\x97\x20\xf8\x12\xac\xb6\xe0\x4b\x10\x7c\x09\x82\x2f\xc1\x6a\x0b\xbe\x04\x3d\xb4\x8f\xc2\x97\xa0\x14\xf8\x0f\x4d\x6b\x55\x55\x05\xb9\x38\x53\x94\xda\x34\xd5\x2c\x2a\x93\x18\xf9\xb7\xec\xbf\x0e\x4b\x85\x55\x55\x2f\x3d\x8e\x02\xab\xaa\x24\x5b\xd1\x43\xf6\xa4\xbf\xda\xa8\xad\x2a\xf4\x59\x2b\x23\x3f\xaa\x22\xeb\xd3\x55\x53\x57\x62\xb3\x0e\xed\x36\xde\xfa\x6c\x00\x6a\x26\xf2\x24\x36\x7c\x5b\x91\x2a\x20\x26\xc7\xde\x96\x75\x62\xa0\x85\x0b\x5d\x7f\xc8\x35\x1b\x96\x6f\x14\x91\x76\x68\x88\xf3\x45\x0e\xba\x9f\x82\x17\x7f\x4b\x7b\x8d\x4b\x5c\x50\x44\xa9\x97\x00\x6c\x88\x28\xc8\xda\x1a\x98\x22\x31\x4c\x18\xb7\xe9\x3c\x64\xce\xb9\xe1\x3b\x05\x77\x41\xe8\x9d\xe7\x67\xa9\xb6\x35\xae\x39\x54\x61\xa5\x75\xdc\x0f\x14\xd9\xcb\xe3\xaf\xc4\x19\x53\xc4\x73\x94\xbb\x8c\xda\x82\x3b\x33\xa6\xf9\xc5\xf6\xd3\x79\x6a\x05\x16\xc1\x13\x61\xc5\xea\xbb\x23\x90\x37\x88\x38\xaa\x0b\x63\x0a\xe1\x83\x26\x89\xb8\xef\xce\x10\xf4\x72\xf5\x7a\xae\xe6\xd1\xf1\xb6\xdd\x37\x2e\x06\xb2\x14\x3c\xdb\x4d\x68\x0b\x75\x44\x42\x1d\x91\x50\x47\x64\x5d\x1d\x91\x8a\xe3\x4f\xb5\xa0\x48\xdb\xdd\xc6\x32\x24\xcf\x50\x50\x84\x90\xbf\xcc\x00\x2f\xb9\x04\xeb\xad\x93\x27\x9a\x65\x65\xa2\x2b\x65\x4f\x3e\xb1\x0a\xa1\x89\xcb\x23\x53\x47\x39\x66\x8e\x34\x9a\xb5\x9c\xc0\x12\xc2\xc2\x59\x60\x3a\x2d\x85\x64\xc8\xe6\x4f\x41\x7b\xa4\xad\xb6\xe1\x35\x45\x36\x8d\x0d\xfb\xf8\xb3\x5d\x74\x20\x11\x17\xc8\xa3\xd4\xdd\xd1\x14\x39\x36\xac\x4d\xb2\x70\x4e\x59\x35\x5a\x51\xe3\x89\x5a\x0f\x6b\xb5\xd9\x73\xf0\x22\xcf\x94\xcd\x81\x97\x0c\xd5\xb1\x3a\x39\xf1\xb2\xd7\x32\xa3\xd8\x7a\xcc\x2e\x0c\x66\x7b\x22\xd8\x94\x31\x5c\x62\xec\x5a\x8f\xbb\x86\x21\xfc\x43\x85\x71\xfa\xd3\x6e\x96\xb0\xf5\xd0\x16\xb5\xf9\xe4\x42\x15\xb0\x2a\x59\xc1\x96\x7d\x1f\x48\xa6\x94\xee\x49\x2f\xfa\xb0\x07\xf6\x96\xec\xa2\xdf\xb2\x3d\xcf\x91\xe4\xe2\x19\x12\x5c\xfc\x92\xea\xe8\x1c\xa4\x13\xca\xc1\xe9\x6d\x1e\x23\x09\xf8\x41\x3b\x9d\x84\x2c\xe0\x9d\xfa\xf9\x45\x65\x01\x7f\x26\xa7\x92\x5f\x60\x32\xf0\x03\x70\x22\x79\x4e\x07\x92\x5f\x5c\x32\xf0\x03\x72\x18\x39\x48\x67\x91\x43\x73\x14\x09\xd9\xb5\x5b\xb5\x1e\x9d\x42\xfa\xbe\x87\x07\xe8\x0c\x72\x80\x8e\x20\x87\xea\x04\xd2\x23\xa7\xf9\x38\xce\x1f\x07\x9b\xa0\x9e\xf4\x9a\x3c\xa2\xcf\x5b\xf9\xdc\x49\x23\x0e\x22\xd4\xf6\x90\x93\x45\x1c\x54\x7c\xed\x61\xc5\xd6\x3e\x47\x5c\xed\xc1\x24\x87\x78\xd6\xc4\x10\x07\x17\x45\xdb\x0f\x67\xd7\x03\x3f\xf7\x18\x24\xa8\xbf\xa8\xd9\x5e\x13\x40\xf4\x4a\x86\x9e\x3f\xf1\xc3\x27\x4b\x89\x7a\x4c\xf8\x10\x88\xd1\xc6\x76\xe8\xc4\xe8\xb1\x13\x3c\x3c\x77\x72\x87\x40\x92\xb6\x4f\xe4\x50\x49\x52\xaf\x49\x1c\x1e\xd9\x3e\xfb\x94\xc9\x1b\x0e\x23\x71\xc3\x93\x25\x6d\x38\x9c\x84\x0d\x4f\x96\xac\x21\xd8\xc5\x83\x5d\xbc\xde\x82\x5d\x3c\xd8\xc5\x9b\xf4\x13\xec\xe2\xc1\x2e\x1e\xec\xe2\xc1\x2e\xde\xb1\x05\xbb\x78\xcb\x49\x05\xbb\xf8\xfa\x16\xec\xe2\xed\xa7\x16\xec\xe2\x1b\x5b\xb0\x8b\x77\x9a\xe0\x81\xda\xc5\xfb\x49\x84\xd0\xe7\x8d\x3c\xa4\x04\x08\x87\x90\xfc\xe0\xa9\x12\x1f\x1c\x5c\xd2\x83\x4f\x4b\x85\xdb\x53\x92\x83\x3e\x6f\xda\x61\x27\x37\x38\xe4\xc4\x06\x07\x9a\xd4\xe0\x71\x12\x1a\x3c\x66\x32\x83\x0e\x57\x2b\x13\xf1\x19\xd7\xcc\x5b\x8e\x9a\x5f\xaa\xda\x55\xba\xc0\x3f\xc6\x60\x2f\x44\x0d\xba\xab\x11\xe2\x32\x4f\x40\xb9\x00\x69\x3a\x17\x2c\x26\x59\xae\x5d\xd1\x7e\x77\x99\x3c\x94\xd2\xd4\xc6\x88\x0f\xc8\x4f\x82\xc3\x80\x80\x8e\x46\x06\x12\x31\xfa\x5a\xe8\x19\x48\xf3\xfa\xb1\x3a\x39\x69\xbe\x81\x9d\x78\x9e\x6e\xea\xa6\xa2\x98\xfc\xe1\xe7\x14\x40\x03\xad\x0b\xdc\x97\xd6\x2e\x6c\x67\x8f\x96\x74\xf7\xc0\xde\x15\x2d\x5c\xbc\x37\xde\x51\x1b\x70\xdd\x96\xea\x60\x64\x7f\x0d\x80\xa0\xa2\x7a\xdf\x10\xdd\x3f\x20\xe3\x5c\x13\xa6\x31\x24\x3e\x9a\x09\xa1\xda\xa2\x02\x17\x9e\x8b\x0b\x99\x33\x61\x55\xbc\x82\x03\xc6\xdb\x0b\x59\x20\xac\xca\xa4\x2c\x7b\x5e\x7e\xc6\xda\x0a\x30\xa9\x50\xba\x84\x10\xaf\x30\x34\x83\x17\x04\x62\x2a\xc1\xcc\x48\x13\x95\xa7\x66\x2a\x36\xef\x87\xb2\xc1\xef\x2d\x87\x9d\x18\xb6\x85\x46\xb3\xca\x12\x52\x00\x6d\xcd\x45\x3e\xbe\xb7\x72\x89\xab\x72\xc8\xb1\x8f\xf6\x6c\x39\xb6\xe9\x0c\x94\x1e\x6c\xcc\xb5\xb1\x19\x16\x2c\x4e\x38\x69\xab\x28\x89\x44\x9a\xe5\x1a\x0c\x6f\x9c\xa7\x06\x9a\x98\x46\xc7\x0e\x44\x46\x52\xe4\x53\xbb\xe1\x3e\xbd\x81\xdd\x88\x32\x77\x06\x8f\x51\xde\x69\x4d\xa5\x8f\xec\xc9\x1d\x79\x86\xd8\x4c\x82\x4d\x8a\xd4\x18\x64\x46\x55\xd5\x23\xa5\x24\x82\x3b\xf2\xb8\xfc\x57\x07\x32\x68\x06\x3e\x56\x15\x76\x64\xc6\xa6\x33\x0f\x6c\x46\xe2\x44\x39\xbd\x06\xa4\x1f\x7b\x4e\x05\x73\x73\xdd\x1d\x42\xde\xa2\x84\x78\xbb\xe3\x31\xf9\x0b\x3e\x85\x78\x39\xd2\x18\xe1\xc0\x0a\xe2\x34\x8e\x0d\xd7\x00\x72\x68\x6f\x90\x20\x13\xe6\xc4\x8e\xa5\x2b\xed\x76\xb8\x2d\x6a\x3c\x8c\xb8\xf8\x25\x88\xeb\xd0\x93\xdd\xf9\x96\x1d\xf4\x61\xf7\x59\x5a\x4a\x6f\xa2\xc5\xb5\xdb\xe6\x11\x39\xb3\x1c\x91\xc7\x5f\x46\x1c\x1e\xac\xa4\x69\x5a\xbd\xd5\x76\x67\x0e\xc0\x42\xdf\x8f\xf1\xb0\x8f\x64\x0a\xa4\x47\x5b\x5f\x6f\x49\x15\xc8\xd3\x54\x5e\x79\x82\xe4\x0a\xe4\x79\x12\x2c\x90\x50\xf5\xe3\xb0\x1c\x4b\x48\xa8\xfa\x71\x60\x8e\x26\x24\x54\xfd\x08\x55\x3f\xda\xb7\x43\x70\x44\x21\xa1\xea\xc7\x01\x38\xa6\x90\x50\xf5\x63\x9f\x16\xaa\x7e\x84\xaa\x1f\xab\x2d\x54\xfd\x08\x55\x3f\x42\xd5\x8f\xd5\x76\xa8\x8e\x2d\x24\x54\xfd\xe8\xb9\xea\xc7\x81\x97\x5f\x0f\xb5\xd7\xcb\x76\xc8\x49\x21\xc8\xa1\xc5\xe2\x92\x83\x8b\xc7\x25\x1f\x49\xe1\xf5\xa7\xaa\xba\x1e\x4a\xae\xd7\xda\xc1\xc5\x7e\x7d\x1c\x25\xd7\x7b\x4d\x20\x41\x1e\x83\x84\x3d\x7f\x22\x09\xf2\xa9\x53\xb1\x1e\x13\x4a\x90\x40\xc8\xf6\x69\x1f\x03\x21\x7b\xec\x04\x13\xe4\x00\x92\x4c\x90\x40\xce\x1a\x4d\xe8\xd0\xc9\x59\xaf\xc9\x27\xc8\xd3\xd8\xb1\x9f\x32\x09\x05\x39\x98\x44\x14\xe4\x29\x93\x51\x90\x83\x4a\x48\x41\x9e\x32\x29\x05\x09\xbe\x04\xc1\x97\x60\xef\x16\x7c\x09\x82\x2f\x41\x1f\x7d\x05\x5f\x82\xe0\x4b\xb0\xb6\x05\x5f\x82\xe0\x4b\x10\x7c\x09\x82\x2f\xc1\x6a\x0b\xbe\x04\xc1\x97\x20\xf8\x12\xac\xb6\xe0\x4b\xd0\x43\xfb\x28\x7c\x09\xfa\x49\x9c\x41\x1e\xe1\xd6\x1e\x52\x02\x0d\x72\x20\x49\x34\xc8\x13\x26\xd2\x20\x87\x98\x4c\x83\x7c\xd2\x6a\xea\x9e\x92\x6b\x90\x47\xb8\x8d\x87\x9d\x64\x83\x1c\x78\xa2\x0d\x72\xb8\xc9\x36\xc8\xa3\x25\xdc\x20\x8f\x9c\x74\x83\xf4\x75\xf5\x6c\x8c\xe7\xa1\xa4\xb3\xb1\xb3\x59\x09\x4d\xad\x55\x85\xdf\x1a\x79\xde\x4d\x68\x73\x97\x46\x52\x3e\x05\xf2\x6a\xf8\xea\xe5\xcb\xee\xc1\xaf\x8c\x6b\x98\x42\x17\xc5\xdc\x44\xc8\x94\x6a\xec\xe9\x8b\xdf\xb6\xe8\x67\x53\x56\x83\xc3\xcb\xf6\xe1\x64\xf3\x7a\xb6\x85\x1a\x37\xbd\x21\xf5\x06\x72\xd9\xe6\x6a\xa5\xa0\x49\x6b\x1d\x75\x25\xbf\x84\x66\x29\x0c\x3c\xa2\xb6\x2e\x03\xde\x3e\xee\x92\x8e\xc4\x44\x70\xc7\x02\x19\xdc\xd4\x16\x50\xda\x2f\x39\x02\xaa\x30\xce\x7f\x0c\x66\xd9\x2d\xc7\xa7\xda\x66\xb3\xc9\x04\xe3\xda\x2b\x1c\xcc\x9a\xc1\x03\x84\x4b\x95\x13\xe7\x60\x35\x79\xa5\x0b\x50\x9e\xc5\x54\xc3\x49\x17\xd1\x4b\x2d\x94\x86\x14\x33\xa6\x18\xce\x89\xa2\x6f\x0c\xd1\x72\x81\xfe\x11\x73\xe0\x3a\xa7\x49\xb2\x20\x30\x67\xce\xbd\xc5\x0c\x8f\xce\x3d\x4c\xab\x4e\x3b\xff\x97\x19\xe0\x75\x97\x60\xfd\x76\xf2\x44\xb3\x2c\x29\x93\x6d\xd8\xe3\x4f\xac\x6a\x68\xe2\x72\xcb\xd4\x91\x8f\x99\x23\x8d\x66\x2d\x27\xb0\x84\xba\x70\x16\x06\x5b\x48\x85\x04\xc9\xa6\x53\x41\xcb\xa4\x61\xbd\x55\xa1\x33\xb2\xa9\x6d\xd8\xc7\x9f\xf7\xa2\x03\xb1\xb8\x40\x6e\xa5\xee\x98\xa6\xc8\xb1\x61\x72\x92\x85\x73\xcf\xaa\x51\x8d\x1a\x77\xd4\x7a\x58\xab\xd7\x9e\x83\x17\x7e\xa6\x6c\x0e\xbc\x64\xad\x8e\xd5\xc9\x89\x97\xc2\x96\x59\xc6\xd6\x63\x76\x61\x35\xdb\x93\xc3\xa6\x2c\xe2\x12\x8b\xd7\x7a\xdc\x35\xac\xe1\x1f\x2a\x2c\xd4\x9f\x76\x33\x87\xad\x87\xb6\xa8\xcd\xe7\x1a\xaa\x80\x55\xc9\x14\xb6\xec\xfb\x40\x72\xa6\x74\x4f\x7f\xd1\x87\x65\xb0\xb7\xb4\x17\x8f\x5c\xab\xe6\x09\xd2\x5d\x3c\x43\xaa\x8b\x50\x33\x25\xd4\x4c\xa9\xb7\x50\x33\x25\xd4\x4c\x69\xd2\x4f\xa8\x99\x12\x6a\xa6\x84\x9a\x29\xa1\x66\x4a\xc7\x76\x40\xae\x23\x07\xe9\x36\x72\x68\x2e\x23\xa1\x66\x4a\xab\x16\x6a\xa6\x34\x9b\xd2\xc1\xb9\x84\x1c\xaa\x3b\x48\xa8\x99\xd2\xa9\x8e\xfb\x61\x16\x71\x0f\x15\xdc\x0f\x3b\x6d\xc4\x41\x45\xda\x1e\x56\x94\xed\xa1\x97\x6f\x7f\x8a\xda\xed\xa1\x70\x3b\xb6\x4f\xab\xea\xcf\xa3\xc5\xcf\xf6\x9a\x0a\xa2\x57\x32\xf4\xfc\x29\x20\x3e\x59\x4a\xd4\x63\xea\x87\x40\x8c\x36\xb6\x43\x27\x46\x8f\x9d\xea\xe1\xb9\xd3\x3c\x04\x92\xb4\x7d\x22\x87\x4a\x92\x7a\x4d\xe7\xf0\xc8\xf6\xd9\xa7\x4c\xe3\x70\x18\x29\x1c\x9e\x2c\x7d\xc3\xe1\xa4\x6e\x78\xb2\xb4\x0d\xc1\x2e\x1e\xec\xe2\xf5\x16\xec\xe2\xc1\x2e\xde\xa4\x9f\x60\x17\x0f\x76\xf1\x60\x17\x0f\x76\xf1\x8e\x2d\xd8\xc5\x5b\x4e\x2a\xd8\xc5\xd7\xb7\x60\x17\x6f\x3f\xb5\x60\x17\xdf\xd8\x82\x5d\xbc\xd3\x04\x0f\xd4\x2e\xde\x4f\x4a\x84\x3e\x6f\xe4\x21\xa5\x42\x38\x84\x34\x08\x4f\x95\x02\xe1\xe0\xd2\x1f\x7c\x5a\x2a\xdc\x9e\xd2\x1d\xf4\x79\xd3\x0e\x3b\xcd\xc1\x21\xa7\x38\x38\xd0\xf4\x06\x8f\x93\xda\xe0\x31\xd3\x1a\xb4\xbc\x5a\x34\xd7\x22\x15\x39\xd7\x37\x20\xe7\x2c\x82\xb3\x28\x32\x7f\xdd\x8a\x3b\x68\x18\xcf\x5e\xbb\x4f\x67\x5b\xba\x25\x8c\xc7\x2c\x42\x7d\xd9\xfd\x0c\xf4\xcc\x05\x8c\xe1\x7b\x84\xda\x17\x89\xc6\x37\xcb\xeb\x84\xf3\x34\x74\x0b\x63\x9a\xb1\xeb\xa6\xfb\x65\x77\x68\x2c\x44\x02\xb4\x89\xc5\xd6\xf1\x61\x20\x1b\x22\xbf\x6e\x08\xe6\xad\x23\xcf\xe5\xe8\x64\x0c\x89\xe0\x53\x17\x3d\xed\x50\x44\x53\x90\x39\x2f\xbb\x73\x16\xcd\x28\x97\x12\xb8\x4e\x16\xb8\xcd\x58\x0a\x1f\x55\x26\xa9\x98\x37\x87\xc8\x5b\xc4\x1d\x5e\xae\xa4\x9a\x24\x40\xcd\x3a\x38\x94\x0b\x31\xd8\x87\x92\xab\x16\x73\x2f\x4c\xb0\x36\x7c\xbe\xd5\xf9\x37\xa7\x82\xad\xe8\x5e\xfd\x36\x78\x59\x07\x39\x9f\x08\x15\x4f\x95\xfd\x40\x6c\xb6\x10\x39\xb9\xa7\x56\x3c\x91\x39\x47\xfc\x87\x1b\xd5\xe2\x90\x3b\x30\xf2\xed\x15\xc4\x43\x24\x22\x0d\x3f\xeb\xa2\xb0\xa5\x72\xda\x8a\x1d\xe9\x83\xf0\x9f\xc9\x69\x6e\xa5\x2f\x77\x15\x81\x6b\xb9\xc0\x4c\x10\xed\x90\xf8\xed\xac\x76\x43\x52\x3a\x85\x17\x8a\x9c\xbf\xbb\x30\x24\x02\x1d\x75\xd8\xc4\xf2\xc1\x8e\x64\x64\x52\xcc\x59\xdc\x96\x66\x7c\x47\x25\xa3\xe3\xc4\x48\x92\x13\x90\xc0\x0d\x77\xfa\xeb\xe3\xef\xce\xae\xff\xf6\xfe\xec\xdd\x9b\x13\x94\x29\xe1\x21\xa3\xdc\xa0\x83\x5c\x95\x09\x64\xdc\x0c\x5f\x28\x02\x7c\xce\xa4\xe0\x66\x17\x50\x97\x45\xc9\xdc\x75\xda\x6a\x46\xa5\x7f\x85\x04\x25\x92\x39\xc4\x36\x8b\x44\x31\xc1\xd2\xcb\x25\xcb\xb5\xd7\xea\x79\x17\x95\x9c\x47\x33\xca\xa7\x10\x8f\xc8\x85\xc8\xcd\xc2\x7e\xfd\x6b\x5c\x84\x84\x38\x8f\xa0\x9d\xdc\x60\xd5\xc2\xf6\xe6\xfe\x7a\xe0\x19\x0c\x43\xaa\xd1\x45\x85\x80\x8a\x68\xe6\xb7\xa6\xba\x7b\x6a\xc1\x35\x7d\x78\x6d\xb3\x50\x1c\xfd\xba\xf2\xe8\xa8\xbd\x7f\x57\x26\x85\x59\x8a\x65\xdc\xec\xea\x13\xa6\x41\xd2\x84\x1c\x55\x47\x18\x91\x37\x66\x5e\x10\x57\xcf\xd6\xa6\x61\x81\x39\x48\xd4\xf7\xb9\x93\x1d\x10\x09\x53\x2a\xe3\x04\x54\x3b\x45\x8b\x98\x14\x24\xdc\xaa\x2f\x1c\x54\x41\xa1\xc7\xe4\x42\x8f\xba\x22\x6e\xdf\xde\x09\x4c\xf3\x31\x11\xaf\xc9\x4c\xeb\x4c\xbd\x3e\x3d\x2d\x05\xf9\x11\x13\xa7\xb1\x88\xd4\xa9\xa6\xea\x4e\x9d\x32\x6e\x90\xdf\x30\xa6\x9a\x0e\x2b\x58\xf7\xd4\x32\xb2\xc3\x48\xa4\x29\xe5\xf1\x90\xba\x7b\x3c\x2c\x20\xfb\xf4\x57\x8e\xd5\x1b\xd2\xe2\x2d\xc6\x87\x74\xa8\x66\xd0\xea\xe4\xba\x09\x5f\x1d\x84\xae\x4e\xc2\x96\x5b\xfa\x73\xe1\xd7\x37\x05\x3a\xb5\x3b\x37\x22\xef\x85\x76\x89\x75\x9c\x9f\x20\x12\x47\x3c\x94\x3e\x31\xee\x9b\xf7\xb7\xd7\xff\x73\xf5\xe1\xf2\xfd\x6d\x40\xbc\x01\xf1\x62\x0b\x88\x37\x20\xde\x16\x03\xb7\x44\xbc\xc0\xe7\xcf\x85\x74\xbd\xc8\x59\x41\x30\x05\x64\x39\x6f\xf5\xc2\xd7\xb8\x38\xb6\x76\x10\xd5\x0b\x60\x3e\xdb\x01\xd7\x36\xfb\x0d\x9f\x7f\x47\xeb\x3e\x06\x7c\xed\x16\x12\xf7\x82\x95\x7f\xcf\xbb\x6d\x60\x67\x5b\x4d\x57\x4f\xa0\x56\xe2\x9e\x6d\xdd\xbd\x74\xcc\xd0\xed\x75\xbf\xb5\xe3\x7b\x4f\xd3\x42\xf3\xb8\xee\xd4\x46\xe4\x9d\xd7\x66\x90\xf3\xbf\x5d\x5e\xbc\x79\x7f\x7b\xf9\xd5\xe5\x9b\xeb\xf6\xba\xba\x1e\x94\xe0\xa8\x2f\xed\x69\x03\x3a\xa9\xbe\x9b\xb0\x33\x1d\x86\x29\x19\xa1\x4c\xc2\x9c\x89\x5c\x25\x8b\x42\x27\xbd\x1e\x5d\x2d\xe3\x29\x42\x79\x97\x19\x50\xbe\x28\x74\x94\x6b\x07\x5c\x62\xc5\xd6\xb1\x55\x5d\xb4\xbb\xcf\xcb\x90\xb9\x49\xf4\xc1\x96\x75\x18\x7f\x0d\x43\xb7\x3f\x73\xd6\x61\xdc\x56\x6c\xdd\x26\x16\xad\xc3\x3c\xea\xcc\x5d\x87\x8e\x2e\x6c\x0c\x0f\xd2\xf4\xa3\x0e\x5b\xd3\x17\x26\xfb\x4a\x8a\xb4\x27\x6c\x76\x83\xf9\xe6\x8a\x98\xaa\x75\x57\xf5\x85\xf3\x0a\xae\xb1\xc7\x4e\xd0\x2b\xa2\x9a\xcc\xef\x1d\x23\x9b\x7a\x71\xa7\xe8\xc7\xa3\x35\x12\x7c\xc2\xa6\xef\x68\xf6\x0d\x2c\xae\x61\xd2\xcd\x88\x5b\xdf\x6f\x34\x94\x39\xbf\x4a\x34\xc9\x19\xce\xc6\x0e\xd6\xcd\x58\xd6\x9b\x37\x4a\x5f\x3e\xcf\xdd\xfd\x9d\xfb\x73\x4f\xee\xc5\x35\xb9\x76\x90\x2e\x32\xb4\x0c\x8d\xec\xcb\x73\xbd\x17\x07\xd4\x6e\x0c\x9f\x6f\xfd\xbb\x9d\x56\xb9\x47\x47\x1e\x7a\xf1\xde\xdd\x4f\xe2\x8e\x04\x8f\x20\xd3\xea\x54\xcc\x0d\x6b\x02\xf7\xa7\xf7\x42\xde\x19\x11\xfa\x9e\xe9\xd9\xd0\xde\x1d\x75\x8a\xc6\xfd\xd3\x5f\xe1\x7f\x7a\x98\xdb\xed\x87\x8b\x0f\xaf\xc9\x59\x1c\x13\x81\xd4\x2d\x57\x30\xc9\x13\xeb\x9f\xa3\x46\x84\x66\xec\x3b\x90\x8a\x09\x3e\x20\x77\x8c\xc7\x03\x92\xb3\xf8\xcb\x43\x02\x26\x91\x59\xd7\xb4\x9e\x01\xea\x06\xbd\x29\x16\x35\xaa\x5f\xe0\x42\x43\xb5\x99\x56\x78\xc5\xbc\x79\xd4\x31\xb0\x3d\x6d\x4d\x73\xc3\xf6\x6a\x7b\xac\x82\x41\x08\x1b\xfd\x12\x9e\xce\xd7\xb7\xa4\x5c\xd6\xc7\xd3\xdd\xe2\x4c\xc4\xaf\x89\xca\xb3\x4c\x48\xad\x48\x0a\x9a\xc6\x54\xd3\x91\xb9\x3c\x83\xfa\x9f\xe8\x2f\x33\x20\x3f\x16\x3f\xda\xb0\xe9\xef\x5f\xfc\xe1\x9b\x37\xff\xf3\xa7\x17\x3f\xfc\x58\x7d\x86\x9c\x86\x8d\x38\xa8\xbc\xd0\x71\x09\x2a\x83\x68\xc4\x45\x0c\xef\x71\x76\xf8\xa7\xaa\x39\x5c\xb8\x07\x9a\xea\x5c\x8d\x66\x42\xe9\xcb\xab\xe2\xcf\x4c\xc4\xcb\x7f\x75\x8c\x7b\x38\x40\x92\x8d\x67\x7b\x45\x75\xfb\xdc\xd6\xa4\x57\xc2\x5d\x62\xc7\x9e\xb1\x8f\xeb\xb5\x48\xc2\x1d\xcd\x20\xa5\xf8\xcf\xaf\xfc\x16\x18\xbe\xf6\x5e\x32\xad\xd1\x07\xc7\xa5\xc6\x17\x93\x81\x8f\xe9\xb7\xf2\xc0\xfc\x55\x0f\x35\xc3\x7b\xc4\xd6\xc5\x09\xf6\xbc\x61\xb8\x23\x6e\xb7\x2c\x06\x28\xb3\x42\xac\xf8\xc7\x9d\x5d\x5d\x92\xb9\xdd\xe1\x03\xda\x9c\xc7\x42\xd7\x3e\x6d\xf7\x57\x07\x8d\xb6\xfd\x2c\xfd\x21\x16\xaa\x9e\xd7\xd6\x63\xbe\x48\x3e\x4e\x12\x96\x32\x17\x66\x65\x30\x0b\x28\xdd\x95\x0f\x3a\xb6\x5d\x8e\xa2\x2c\x1f\xb8\xee\x47\x29\xa4\x42\x2e\x8a\x3f\x21\x9b\x41\x0a\x92\x26\x43\xa5\x85\xa4\x53\x18\x14\x83\xdb\xcf\x8a\xbf\xec\x87\xb5\xe9\xad\x7e\x6d\x75\x69\xa5\xb3\x96\x23\x51\x5d\xbd\xfe\x0f\x10\x65\xfb\x73\x3b\x10\x8c\x5d\x80\xd5\xfb\xfe\x65\x90\x17\x85\x15\xc0\x4a\x38\xc5\x2e\xa2\x02\x63\x2e\x92\x3c\x05\x35\x28\x18\x56\xab\x65\xe3\x73\x32\xa7\x52\xbd\x38\x1c\x3c\x44\x48\xcc\xe6\x4c\xf5\x11\x0d\xba\x86\xa3\x66\x2e\xb0\x5a\xe4\x3a\xcb\xb5\xab\xe9\x54\xa8\xec\x1f\x32\xa1\x50\x37\x57\x54\x1a\xa8\x51\xb3\x57\x47\x9d\xa7\x94\x51\xad\x41\xf2\xd7\xe4\x7f\x8f\xff\xfa\x9b\x9f\x87\x27\x5f\x1e\x1f\x7f\xff\x72\xf8\x9f\x3f\xfc\xe6\xf8\xaf\x23\xfc\xc7\xe7\x27\x5f\x9e\xfc\xec\xff\xf8\xcd\xc9\xc9\xf1\xf1\xf7\xdf\xbc\xfb\xfa\xf6\xea\xcd\x0f\xec\xe4\xe7\xef\x79\x9e\xde\xd9\xbf\x7e\x3e\xfe\x1e\xde\xfc\xb0\x67\x27\x27\x27\x5f\xfe\xba\xf3\xd4\x29\x5f\x7c\xe8\x88\xbd\x6d\x1b\xf6\x56\x92\x6b\xb9\xc7\x9e\xe2\x53\x6b\xa4\x90\x71\x3d\x14\x72\x68\xbb\x7e\x4d\xb4\xcc\xbb\x06\x6d\x79\xf0\xea\xfb\xfe\x5f\x7b\xac\x59\x52\xb3\x82\x0b\x39\xa0\x0b\xfe\x58\x8c\x86\x82\x48\x82\x7e\x0a\xa5\xa4\x1d\xc9\x33\x76\x4b\xc1\x35\x9f\x1a\x05\xfd\x25\xe8\x29\x8b\x62\x43\x78\xae\x25\xeb\x3e\x91\x22\x1d\x91\x8a\xd1\x76\x8e\x21\xf8\xee\xbd\x3b\xe8\x98\xaa\x8c\x04\xbd\x66\x97\x16\xf4\x9a\xcb\xed\xe3\xd4\x6b\xde\xd8\xeb\xf4\x0b\x54\x6a\x02\x9f\xb7\x35\x57\xf6\xe9\xa3\xe5\x45\x5b\x2d\x48\x26\xb2\x3c\xa1\x7a\x83\x5f\x42\x4f\x0e\x5b\x45\xe2\x50\xef\x75\x51\xba\xe0\x5a\xb6\x25\x5d\xef\x25\x43\xce\x92\x84\x30\x6e\x91\xb0\xe9\xa0\xd5\xe8\xde\xb9\x41\x82\x95\x79\x09\xb5\x5e\x56\x73\xb3\xd4\x7b\x57\x8d\xb2\xea\xcd\xab\x88\xd2\x54\x6a\xc6\xa7\x23\x5b\xad\xd2\xb2\x02\xce\x82\xce\x78\x51\xb3\xb2\xd5\x74\x0a\x51\xa3\x88\xd9\x5f\xa9\xbb\x6b\x03\x19\x95\xf6\xdb\x83\x2b\xd0\xf4\x0e\x3d\x58\x22\x88\x81\x47\x2d\x7d\x21\xbe\xb3\x39\x02\xfc\x39\x8c\x17\x66\x27\xde\xf0\xb9\x1d\x97\x92\x38\xb7\x4e\x97\x96\x4c\xf6\x37\xee\xa7\xe5\xb2\x67\xee\xb0\xf3\x15\xa8\x78\xee\x21\x47\x51\x28\x95\x8a\x9c\x40\x85\x15\xa7\x1d\xf4\x76\xe6\x10\xbb\xf3\x63\x85\x03\x40\x27\x46\x7b\x85\x11\x2b\xcd\x5b\x75\x06\xec\x53\xf0\x99\xe8\xce\x9a\xf5\xcb\x96\x3d\x06\x4b\x76\xa8\xec\xd8\xd3\xb3\x62\x3d\xb1\x61\xfd\xb0\x60\x0d\xcc\xca\x7d\xb2\x5d\xfd\xb0\x5c\x8f\xa1\x2b\xc8\x24\x4c\xd8\x43\x4f\x88\xeb\x8c\x97\x0a\x55\x16\x03\xd7\x6c\xc2\xcc\xbe\x0a\x33\x4c\x06\x3c\xf6\xc5\xa9\x89\xab\x7f\x51\xdb\xf1\x83\xf4\x07\xb6\xd2\x6d\xbf\xb8\xfd\x66\x9d\x64\x1d\x10\x3b\x09\x88\xbd\x43\x0b\x88\x7d\x2f\xb9\xfa\x53\xc7\xea\x18\x6d\xf9\x5c\x22\xf4\x79\x3d\xe8\x13\xf1\xc1\x63\xc6\xc5\x15\xb7\xac\x4c\xe5\x71\x8a\x23\xb7\xbb\x4c\xb7\x45\x32\x2c\x23\xe6\x16\x94\x4c\x0b\xeb\x8a\x4f\x66\x6c\x6a\xa0\x29\x81\x39\x24\x8e\xef\x27\x29\xe5\x74\x6a\xf3\xdd\x69\x51\x94\x70\x10\x12\xd3\xc1\x4b\xd6\x32\x87\xcf\x52\xf4\x2c\xca\xd5\x06\x81\x24\x82\xc6\xf8\x50\x8a\x24\x01\xa9\x48\xc2\xee\x80\x5c\x40\x96\x88\x85\x4b\x59\xc7\x63\x72\xa3\xa9\x36\x97\xff\x06\x74\x2b\xb7\xa3\x4e\x17\x1b\x27\x7c\x95\x27\xc9\x95\x48\x58\xd4\x4a\x47\xdd\x07\x28\x5e\x22\x00\x66\x79\x92\x90\x0c\x27\xd2\x0e\x0e\x3f\x70\x24\x20\x67\xc9\x3d\x5d\xa8\x01\x79\x0f\x73\x90\x03\x72\x39\x79\x2f\xf4\x95\x15\x6d\xdb\xf5\x5b\x8d\x13\xb0\x9d\x13\x36\x21\xaf\x31\xd7\xb5\x26\x9a\x4e\x51\xd1\xe2\x9d\x64\x06\x06\xa0\xaa\x83\x5a\x1c\x7f\xcf\xd4\x73\x6a\x1c\xba\xdf\xd2\x5f\xe1\xe8\x86\x2a\xb6\xbe\xb5\x9d\x60\x35\x61\x13\x88\x16\x51\xf2\x6c\x08\xf3\x2c\x42\xbf\xc5\x32\x33\x60\x05\x9d\xa8\x85\xd2\x90\xfa\x44\x4d\xa8\x68\x62\x9c\x48\x50\x99\xe0\x0a\x8d\x99\x25\x96\x28\x16\x62\x15\x77\x2d\x9d\x0d\x7b\xd4\x43\xb5\x66\x47\xbb\x32\xa2\x99\x50\xfa\x46\x53\xa9\xdb\xb2\x13\x7d\x71\xa0\x57\x7e\x22\xe6\x26\x47\x34\x49\x20\x26\x2c\x4d\x21\x66\x54\x43\xb2\x20\x74\xa2\x31\x3d\x57\x4d\xb5\x1a\x49\xc0\x7d\xf7\x19\x8c\x67\x94\xc7\x09\x48\x32\xa1\x2c\x51\xed\x7d\x5a\x57\x54\xb8\x1a\x64\xca\x38\xea\x54\xad\x6f\x14\xea\x74\xcd\x5f\x51\x24\x64\xec\x12\x61\x31\xad\xfc\xa3\x4e\x48\xd4\xb4\x0f\xc8\x88\x55\xc0\x7b\xd9\xb5\x8c\x8c\x13\x11\xdd\x29\x92\x73\xcd\x12\xbb\x78\x21\xee\x48\x24\xd2\x2c\x41\x74\xd2\x7a\xe8\xf6\x58\xaa\xf8\xe7\xb0\xb8\x60\x43\x33\x2b\x75\xfa\xab\xf2\x11\xfe\xd0\x72\x72\x3d\xc8\x6e\x7d\x48\x6e\xf0\x00\x51\x6f\x09\x1f\xdf\x3c\x40\x54\xc9\x8a\x6a\x4e\x92\x22\x9a\xc3\x84\x4e\xf4\xae\x87\x92\x49\x07\x53\x11\xa5\x43\x2e\x97\x6a\xeb\xdb\xca\x7c\x6e\xa7\xe5\x8b\x21\xb8\x59\x92\x84\x71\xb0\x75\xbf\x30\xd9\x0b\x61\x58\x67\xad\x7e\x0d\xad\xe5\xc5\x09\xab\x24\x66\x12\xd3\x5a\x2e\x7c\xd8\x5f\xe7\xa9\xf9\xb9\x60\xe6\x47\x21\x34\x39\x7e\x71\xfa\xe2\x64\xc5\x94\xf6\xc2\x30\xe2\x09\x58\x1a\x38\x72\x19\x65\x8a\x45\x29\x96\x66\xc9\x02\xd7\xf1\x22\x1e\x10\x66\x70\x6c\xe7\x99\x19\xd2\x27\x73\xee\x77\xc5\x65\xc0\x19\x10\x25\x88\x96\xd4\x27\x5d\xb6\xbf\x9a\x97\xb4\xcc\x1d\xf5\x3e\x7e\xf1\xf3\x8b\x01\x01\x1d\x9d\x90\x7b\xac\x1d\x67\xb6\x6f\x44\x6e\x85\x11\xc2\xbb\x7b\x9a\xf9\x89\x2c\x44\x4e\x38\xd8\xec\xbe\xf0\x90\x25\x2c\x62\x3a\x59\x20\x6d\x21\x22\xd7\x36\x5f\x1a\xd5\x5d\x32\xf7\x54\xdb\x9b\x07\xa6\x5d\x08\x83\x41\xd6\x2f\x11\x9a\x2c\x7d\x22\xd4\x48\x1e\x73\x38\x9d\x01\x4d\xf4\xcc\x3a\xd8\x72\xc1\x87\x3f\x81\x14\x98\xdd\x87\xbb\x27\x9f\x5c\x01\x9e\x5e\x94\x1e\x86\x0c\x7d\x0d\xad\x59\x14\xb2\x8c\x32\xfe\x7c\x7b\x7b\xf5\x35\xe8\x25\xac\x6b\x46\xf1\x6e\xcf\xa8\x83\x05\x39\x11\x32\x3d\x00\xf4\xdb\x8f\x3f\xd6\x90\x64\x42\x1e\x02\x15\x98\x09\xd5\xe9\x2c\xc9\x23\x90\x80\x3f\x0b\xa5\x51\xff\xe2\x04\x05\x8e\x25\x39\x45\xdd\x87\xd7\x39\xec\x91\xcb\xab\x11\xf9\x1f\x91\x9b\x0d\x19\xd3\x71\xb2\x28\xd2\x65\x2a\xe8\x5e\x18\xe9\xc8\x4c\xe5\xc8\x60\x78\x03\x90\x7f\x06\x1a\x83\x54\x88\x40\x81\xf6\x94\x58\xbf\x07\x1f\x9f\xca\xdc\x7a\x3d\xca\xf3\x5c\x69\x91\x92\x99\x5b\x76\x3d\xd5\x8f\xbb\x9c\x23\xbc\xc0\x3e\xdf\x83\x84\xcc\x22\x59\xf7\xcd\x27\x87\x42\x57\x50\x97\xdd\x77\xf7\xfb\x18\x33\xe9\x47\xd5\x6d\x33\xbb\x56\x64\x12\xe0\x76\xb3\x0c\xa8\xf6\xe0\x9b\x76\xc0\x25\xc0\x5a\x27\x01\x5a\xee\x08\xdd\x68\x3a\xf7\xd4\x6f\x01\xb0\x7e\xbc\x33\xc9\xa3\x15\x3c\x32\x0c\xa7\x03\x3e\xab\x10\x6e\xaf\xca\x5e\xd7\x39\x2b\x4b\x00\x47\x94\x0b\xce\x22\x9a\xb0\x9f\x20\x26\x79\x26\xb8\x0b\xc7\x40\xce\x33\xa2\x0a\x86\xe8\x71\xc6\xb5\xab\x22\x51\xa6\xa3\x31\xd8\x41\x0b\x81\xec\x98\xf6\x85\x7e\xed\xac\x0f\xb7\xce\xd5\x23\x9c\xfa\xca\x61\xf5\x03\xf1\xa4\xcf\x1d\xc8\x7a\x08\xb3\x5c\x0d\xb2\xd4\x82\xd0\x28\xc2\x9c\x38\x96\xa2\x20\x6e\x54\x20\xe7\xdd\x41\xa0\xbf\xa5\x8b\xf6\xda\x38\xdf\xfa\xbe\xe5\xd6\x32\x2c\x09\xcf\xd3\x31\xc8\x32\x42\x5d\xea\xd5\x3d\xed\xe8\xdf\x59\x1b\xd6\x0e\xe7\x8d\x90\x9e\x0d\xa0\x7c\x0a\xe4\x95\x19\xf9\xf7\xff\xfe\xef\x5f\xfc\x7b\x0f\xe3\x98\xe5\x15\x7e\xa3\x9c\x5c\x9e\xbd\x3f\xfb\xdb\xcd\x77\xe7\x98\xb2\xa9\x6b\xf7\x3d\x85\x3e\xf5\x1d\xf8\xd4\x6b\xd8\xd3\xa3\x06\x3d\x61\x04\x79\x67\x44\xd8\xf7\x95\xb8\xc1\x59\x19\x20\xcc\x95\x4d\xf3\xe4\xc4\x86\x4a\x59\x04\x23\xe9\x74\x87\xce\xaa\xf1\xcb\x20\xac\x83\xc0\x54\x2a\x01\xc8\x7a\x93\xc8\x6f\x4c\x6f\xcb\xfe\xaf\x71\x2e\x6d\x81\x82\xc2\xdc\x53\x6a\xbf\x9d\x99\x07\x67\x41\xc6\x30\x11\x12\xc8\x18\x70\xeb\x0b\x5d\xfd\x27\x24\xb9\x2b\x88\x04\x8f\xbb\xf0\xef\x7d\xf1\xa3\x6e\x26\xbd\xde\xc6\x1b\xdb\xa7\xd7\xbf\x96\x44\xc6\x0d\x86\x62\xa0\x39\xe9\x7e\x20\xbf\x1f\x0c\x6a\xa3\x7f\xb1\xb7\xdf\xff\xae\xbd\xa9\x29\xca\x6e\x44\x74\xd7\xa3\x72\xab\x23\x6a\xbb\x30\x77\x30\xb2\x56\xb5\xdb\xf3\x2b\x3b\x39\x73\x32\xef\x3f\xdc\x96\xa1\xfe\x18\xf6\x40\xde\x7a\x2b\xcf\x9f\x9d\xdd\x8d\xf2\x98\xdc\x41\xd6\x4d\x34\xf4\x19\xf3\xc6\x34\xba\xbb\xa7\x32\x46\x9b\x16\xd5\x6c\xcc\x12\x66\x8b\x83\x82\x04\xcc\x41\xc0\x85\x8d\xa9\xb3\x58\x42\x4c\x2a\xe5\xd9\x3a\x26\xd9\xac\xd8\xba\xd1\xae\xe6\xc4\x88\x09\x65\x09\x5a\x95\x73\xae\x59\x0a\x2e\xe0\x23\xca\x0a\xc3\x63\xd5\x0b\xe1\x13\x42\x3f\x9f\xaa\xe2\xf0\xc5\x07\xef\x4c\xd7\x58\x01\xd8\x35\x26\xfa\xd3\x16\x17\x1c\x06\xb7\xc9\x24\x82\xb8\xd0\xa4\x05\x71\xa1\xa5\xb8\x90\x49\xb8\xd1\xa2\x35\x4f\xda\x9b\x23\x8b\x9d\xc6\x06\x37\x16\xc7\xaa\xd2\x8d\xfe\x25\x71\x0e\xb6\x2e\x70\xeb\x09\x9c\x5d\x5d\x16\x66\x2c\x51\xf3\x21\xb1\x51\x8a\x2a\x8f\x66\xde\x22\xc9\x41\xa9\x53\xf4\x58\xc9\x33\xab\x23\x46\x1a\x97\x4b\x68\xef\x3d\x93\x49\x80\x14\xf7\x71\x50\xe6\x92\x30\xcb\x05\x6e\x7f\x04\x1d\x59\x13\x75\x85\x6a\x62\xfd\x37\xb7\x5d\xdd\x8a\x26\x96\x1b\x1b\x49\xaa\x66\x80\x69\x8a\xe1\x81\x69\x65\x07\xbd\xc2\x8c\x0b\x7e\xc7\x0d\xe3\x30\x95\x34\x02\x92\x81\x64\xc2\x30\x1b\x39\xd7\xb1\xb8\xe7\x64\x0c\x53\xc6\x95\x3f\xb1\x2e\x53\xf2\x20\x81\x1e\x3a\x4c\x15\xd5\x63\x46\xe4\xba\x96\xa5\xd9\xe5\x96\x89\x44\x89\x33\xdd\x16\x75\x2b\xf7\x5c\x6e\x09\x72\x31\x08\x06\x39\x96\x2f\x2c\x00\xcf\x47\xd1\xea\xcd\x3b\xd4\x1e\x20\xec\xce\x1e\xe7\x1c\x17\x1a\x43\x42\x17\x36\x5e\x74\xc2\x38\x2a\x72\xa5\x3a\x19\x75\x77\x79\x6a\x3d\x41\x21\x2b\x7d\x6e\x84\x0c\xac\x44\x4f\xa3\x59\x17\xce\x2e\xf8\x56\xed\x6a\xc1\xb7\xaa\x65\x0b\xbe\x55\x4d\x5b\xf0\xad\x6a\xda\x82\x6f\xd5\x21\x39\x06\x04\xdf\xaa\xa0\x22\x59\x6e\xc1\xb7\x6a\x5b\x0b\xbe\x55\xc1\xb7\xaa\xd6\x82\x6f\xd5\x1e\x2d\xf8\x56\xed\xd9\x82\x6f\x55\xf0\xad\x0a\xbe\x55\xc1\xb7\xaa\x59\x0b\xbe\x55\xed\x5b\x30\x96\x04\xdf\xaa\x4e\x2d\xf8\x56\x05\xdf\xaa\xe0\x5b\x15\x7c\xab\x36\xb6\xe0\x5b\x15\x7c\xab\xd6\xb6\xa0\x38\x5c\x69\xc1\xb7\x6a\x4d\x0b\xbe\x55\xcd\xc6\x09\xe2\x42\xb7\xce\x7a\x17\x17\xbc\x9f\xd0\x95\x14\xe3\x67\xcb\xfc\x74\x85\x3e\x18\x2c\x72\x4e\x4a\x62\x52\xcb\xe6\x64\x27\xd8\x32\x8b\x53\xdd\x39\xc6\x96\xc9\x77\xe9\x7d\x98\xbb\x5c\x85\x63\xd4\x73\x66\x8a\x6a\xec\x3d\xe2\x33\xe0\xa9\xd3\x4c\xd8\xff\x2b\x7d\x47\x2a\x4e\x23\xad\xd5\xd7\xcf\x9c\xba\xaa\x8b\xa7\xc8\xd3\x78\x89\x1c\x88\x4b\x4d\x0f\x9e\x21\x7d\x12\xb1\x03\xf5\x08\x39\x4c\x6f\x90\x43\xf4\x04\x79\x0e\x2f\x90\x67\xf7\x00\xe9\xc7\x74\xd9\x83\xd9\xb2\x33\xab\xe0\x1c\x7c\x6f\x67\x12\xd4\x4c\x24\xad\xf1\x42\x5f\x38\xe1\x1d\xe3\x2c\xcd\x53\x73\xc5\x94\xb9\xfa\x6c\x5e\x38\x21\xab\x42\x60\xb5\x24\xd8\x1a\x5f\xcd\x8b\x2c\x06\x2c\x4e\x49\x59\x62\x20\x00\x93\x03\xce\xe8\xdc\xa0\x05\x95\x47\x11\x40\xdc\x45\x48\xac\x6a\x05\xbf\x18\x15\x33\xb4\x05\x56\x98\x22\xaf\xba\x51\x84\x6e\x7c\x63\x45\x39\xf2\xc5\x6f\x5b\xf5\x31\x95\x59\x3f\x94\xf3\xeb\xeb\xab\xf3\x0a\xe5\xa4\xdc\x13\x4e\xc6\xe7\x22\xc1\xd3\xa0\xf6\x25\x23\x9f\x3c\x23\x19\xed\x2e\xac\x77\x12\xd4\xfb\xa0\xe2\x5d\x65\xd1\xba\xc5\xce\x88\x8b\x75\x83\xd3\x14\xcf\xd2\xd6\x6c\x1f\x3d\x81\xb8\xd7\x97\x08\xd5\xfd\x3a\x10\x54\xbd\xe2\xc2\x0f\x85\x47\xba\xb1\xd3\x29\xb4\xb6\x15\x49\xdf\xcd\x14\xbd\xe8\x12\x1a\x15\x67\x83\xe7\xf7\x67\x24\x74\xe7\x33\x88\xee\xae\xad\x43\x4f\xa7\x69\x1c\x2b\x80\x42\xd4\x98\x32\x3d\xcb\xc7\xa3\x48\xa4\xa7\x06\x81\xd8\xff\x1b\x27\x62\x7c\x9a\x52\xa5\x41\x1a\xe9\xc3\xd1\xe0\x61\x64\x66\xc0\xf8\x74\x94\xc6\x27\xa3\xcf\x3e\xeb\x34\x89\x4b\xa7\x7b\x74\x51\x22\x95\x2c\xcf\x68\xc8\x70\x29\xc4\xc7\x60\xd0\xbf\x40\x35\x61\xa5\x22\x95\xd9\x95\xee\x50\xda\x81\xda\x76\xf4\xaf\x7c\x7a\xdf\xca\x80\x6d\x49\x0f\xea\xd0\x3e\x91\xc1\x61\xf8\x4f\x3e\x9a\xef\x64\x6f\x6e\xcc\x3d\xf8\x4c\x1e\x90\xbf\xe4\xc1\x08\x1c\x87\xe2\x23\x79\x80\xe5\x8d\x7b\xf0\x8b\xec\xc3\x27\xb2\x3f\x7f\xc8\x43\xad\x02\xfc\x68\x3e\x90\x1f\x85\xff\x63\x8f\xd6\x81\x9e\xfc\x1e\x9f\xc2\xe7\xb1\x97\x55\x77\xf5\x75\x7c\x3a\x3f\xc7\x7e\x96\xdb\xa7\x90\xd8\xf1\xe6\x3e\x83\x5f\xe3\x53\x18\x29\x1f\xcd\x40\xd9\x83\x71\xb2\x4f\xc3\x64\x6f\x46\xc9\x47\xf3\x5f\xec\xee\xbb\xd8\xab\xc8\xfe\x24\x3e\x8b\x7d\xfa\x2b\x76\x3e\x5f\xc6\x99\x66\x34\xb9\x80\x84\x2e\x6e\xba\xf9\xae\xf5\x75\x12\xef\x57\xfc\xdb\xac\x6e\xb8\xee\xe1\x38\xa3\xae\x2c\x37\xc4\xde\xc1\xd1\x1b\x91\x1d\xa7\x8a\x3e\x50\x76\x7d\x9d\xbc\x1d\x0f\xcc\x64\x4b\x0e\x46\x07\x6d\x93\x2a\x1c\x08\xd4\xfc\x59\xdc\x13\x31\xd1\xc0\xc9\x31\xe3\x1e\x72\x4e\x2a\xca\x94\xd2\x06\xd1\xd9\xa8\x60\x7a\x7d\xf5\xd2\x0f\xf2\xe9\x19\x17\xd0\xfc\xa2\xd4\x41\x9b\x97\xdc\x1c\x77\xdb\x97\xdc\x8b\x93\x3c\xa9\xdb\x98\xac\xdd\xa9\x1f\x03\xd3\xab\xb2\x90\xef\x2b\x9c\x4f\x81\x8a\x28\x8f\x89\x4b\xce\xf3\xe9\xc1\x49\x67\xef\xdc\xba\x0c\x52\xb8\xd3\xee\x32\x47\xdd\x9e\x5f\x05\x6b\xd4\x61\xe9\x47\x9f\xc9\x55\xf4\xd3\x93\xb8\x9e\xde\x35\x34\x48\x5c\xbf\x14\x89\xab\x92\x17\xeb\x6b\x49\x23\xb8\x3a\x24\x06\xce\x23\x90\x32\xae\xa9\xe4\xe3\x0a\x74\xc1\x01\x6c\xbc\x4b\x99\xf5\x0c\x13\x7c\x4d\xf2\x24\x59\x58\x75\x5f\x2d\x05\x5e\x7b\xd0\xba\x9d\xc1\x4a\xee\xb0\x5a\xd4\x55\x65\x76\xa5\x7c\x92\x49\xe1\xb8\x12\x99\x73\x6e\xa8\x95\xbb\x4e\x66\xf2\x46\x1e\x51\xc0\xdb\x6b\xbe\x69\x2d\xb3\x99\x62\x53\xb3\x5d\x86\xc3\xc0\xa4\x67\x65\xc4\x45\x6d\x22\x66\xd4\x89\x90\x11\x1b\x27\x0b\x32\xa3\x89\x11\x98\xee\x99\x9e\x11\x4a\xee\x58\x92\xb8\x6e\xda\x6f\xd4\x0d\x68\x6b\xdc\xb5\x5c\x4d\x22\xf8\x14\x37\x83\xda\x89\xc0\x43\x06\x91\x19\x33\x4a\x80\xf2\x3c\xb3\xf3\x34\x3c\xd2\x42\xe4\xd2\xcf\xb3\xfd\xf0\xde\xb4\x5c\xf0\x54\x9c\x25\x03\xbf\xe5\xf5\x1c\x78\xab\x30\x5f\x6a\x7f\x15\xc4\x2e\x7d\xdd\x3d\x53\x30\xc0\x3e\x5b\xcf\xc9\xce\xc5\x97\xc3\xb6\x70\x63\x7f\xcb\xa4\x98\xb3\xd8\xda\xb5\x3d\x58\x18\x6e\xa7\xfd\xfa\xbf\xc3\x7e\x3d\x6a\xe5\x82\x0f\x39\x4c\x29\xb2\xc8\x0e\xa1\x59\x0f\x47\x3b\xbe\xf5\xa7\xe3\x31\x8b\xa8\x06\x23\x40\x8b\xac\x96\xdb\x72\xce\x68\xeb\x99\x98\xf5\x54\x20\x8a\x1c\x73\x41\x04\x06\x44\xe5\x9c\xe9\x05\x1a\xdf\x66\xb9\x26\xb1\xb8\xe7\x27\x5d\x2e\xa6\x75\x24\xa0\x64\x0c\x9a\x96\xe1\x4c\x9e\x25\x53\x04\x38\x1d\x27\xe6\xee\xa1\xbb\xfb\xed\x5a\x00\x20\x13\xa0\x3a\x97\x40\xa6\x54\x77\xc0\x12\x6b\x38\x7a\x7b\x9e\xdb\xc1\x8e\x29\x67\x5a\x9b\x90\x9c\x2b\xe8\xc8\xc8\xf6\x26\x06\xb4\x0c\xd4\x33\x37\x5a\xe4\xfa\x40\xe8\xc8\x26\xf5\xd1\xfd\x8c\x45\xb3\xaa\xa0\xc8\x52\x50\x44\xe4\x1d\xb4\x79\x35\x11\xd0\x0d\xd7\xa7\x94\x17\x74\x4f\x6b\x5b\x5b\x0b\x67\x1f\x10\xf6\xbe\xc2\x95\x57\xc2\xad\xbd\x43\x93\x0d\xfc\xbc\x78\x7f\xf3\xb7\xb7\x67\xff\xfd\xe6\x6d\xbb\x83\x7f\x43\xa3\x59\x35\xb9\x30\x27\x14\x09\x05\x22\xf9\x19\x9d\x03\xa1\x24\xe7\xec\x1f\xb9\xf3\x2a\x3b\x2e\xc6\x6b\x89\x56\x7b\xac\x82\xde\x92\xf1\x35\x54\xa2\x15\xe6\xe8\xe3\x4c\xdf\x32\x85\x99\x6a\x71\x12\xce\x11\x5e\x28\x20\x13\x29\xd2\x25\x41\x8b\xbc\x2f\xdc\xd7\x16\x56\x17\x81\xa2\xd9\x0c\x64\x3b\x8e\xfc\xe2\xc3\x9b\x1b\x0c\x1d\xce\xa4\xcd\xec\x8c\xce\xf6\xd8\x27\x8e\x6e\x63\xf6\xed\x7c\xe2\x11\x39\xe3\x0b\xfb\xd0\x22\xb3\x96\x2c\x4a\xc2\x94\x06\x64\x4e\x9d\x20\xe9\x1d\xf0\x8e\x5e\x8e\xf0\x7f\x47\x84\xc6\xb1\x34\x92\x66\x11\xb3\x10\x2d\x87\x58\xb5\x1a\xd9\xca\xaf\x6c\x9c\x54\x36\x97\x83\xc6\xb0\x86\x56\x1d\xbe\x13\xb1\x3b\x09\x64\x02\xd1\xd5\xc6\x72\xb7\x4a\x4b\xaa\x61\xca\x22\x92\x82\x9c\x02\xc9\xa8\x8e\x66\x24\xa5\x0b\x12\x09\x29\xf3\xcc\x66\x4c\x88\xa9\xa6\xed\x46\xfe\x4a\x48\x92\x7a\xec\x6c\xb0\x99\x61\xc9\x6f\xd6\xfb\x5a\x96\x28\xbb\xfa\x4f\xa6\x54\x0e\xea\xf4\xd5\xcb\xff\xf8\xed\xbf\xb7\x14\xaf\x7b\xbc\xb8\x6d\xbd\x94\x3a\x78\x27\xd5\x3d\xb5\x3c\x80\xa1\x5f\x73\x25\xd5\x05\xf5\x10\x62\x21\x1f\xb1\xa1\x62\x7c\x9a\x74\x56\x80\x74\x56\x03\x76\x55\x02\x0e\xcb\x15\x5c\xb5\xd5\x05\x76\xd7\x04\xd6\xe6\xd0\x5e\x95\xd2\x9f\x16\xac\xe4\xe0\xbc\xde\xcb\x21\x64\xc1\x2b\x82\xdd\xe5\x95\xc7\x52\x5d\xf4\x47\x28\x4d\x14\x8a\x29\x9b\x2f\xc1\x0e\x6b\x7d\x1e\x06\xe4\x25\xf9\x03\x79\x20\x7f\x40\x2d\xd8\xef\xdb\x0f\xd5\x8f\x8e\xa9\x0f\x4f\xf9\x99\x50\xfa\xf2\xaa\xa7\x83\xfe\x8b\xa1\x57\xa6\x47\x73\x1e\x5a\x90\x31\x73\xea\x08\x78\xd0\x20\x8d\x18\xe8\xce\xb0\xeb\xce\x75\xd2\xa8\x99\x09\x7e\x2c\xd0\xdd\xd5\xc1\xe0\x72\x52\xf7\xaf\x7f\x22\xf8\xc6\x81\xff\x2c\x94\x7e\xef\xb0\x75\x35\xd7\x47\x75\x1e\x29\x12\xe2\x1a\xba\xef\x32\xea\x3b\x03\x7b\x65\x92\x7d\x12\x0b\x0c\x31\xb0\x31\x8d\x33\xd6\x01\x39\x1c\xce\x8d\xed\xe6\xd2\xd9\x1f\xe8\x6e\x03\xad\x25\x9d\x3e\x6a\x64\x9c\x90\x52\xa9\x4b\x91\x89\x78\x84\xf2\x4d\x87\x59\x98\xdd\x88\x2b\xcc\xc0\x16\xd1\x68\x64\xe5\xb5\xc2\x42\x8c\x17\xce\x60\xac\x88\xf2\xb6\x3c\xac\x6d\x12\x26\x20\xa5\x8d\x9b\x1d\x2f\x7c\x44\x4f\x67\x68\xeb\x84\xe5\x32\x29\xb4\x88\x44\x72\x08\xa0\x72\xe5\xe6\x82\x7b\x8f\xb6\xda\xc2\x42\xfe\xed\xc5\xd5\x80\xdc\x9e\x5f\x0d\x88\x90\xe4\xe6\xbc\x9b\x03\x54\x55\x05\x73\x74\x7b\x7e\x75\xf4\xac\x27\x40\xbc\x28\x85\xd6\xec\x16\x9d\xd4\xcc\x3e\x46\x4e\x1b\xa6\x34\x1b\xde\xc1\xa2\x25\x77\xd7\x07\x87\x39\x2c\x00\xab\x97\x05\xd9\x6d\x4e\x69\xd6\xb8\x37\x09\x34\x66\x07\x9d\xc6\xc4\x07\xf6\x15\x33\xed\x2f\x9f\x49\x2a\xe6\x10\x5b\xa9\xd9\x8f\x02\x3c\xce\x04\x33\x32\x52\x48\x72\xb2\xad\x85\x24\x27\x3b\x5a\x48\x72\xb2\xae\x85\x24\x27\x0d\x5a\x48\x72\x62\x5b\x48\x72\x52\x9f\x48\x48\x72\x12\x92\x9c\x84\x24\x27\x7b\xb7\x4f\xc0\xad\x34\x24\x39\x59\xdf\x42\x92\x93\x90\xe4\x24\x24\x39\x09\x49\x4e\xca\x76\x70\x4e\xfc\x21\xc9\xc9\xb6\x16\x92\x9c\xac\x6d\x07\x23\x70\x84\x24\x27\x1b\x5a\x48\x72\xb2\xa1\x85\x24\x27\x21\xc9\x49\x48\x72\xd2\xb0\x7d\x7a\x21\x77\x21\xc9\x49\xa3\x16\x42\xee\x1a\xb6\x90\xe4\x24\x24\x39\x59\x6e\x21\xc9\xc9\xce\x76\x18\x3a\xe8\x90\xe4\x24\x24\x39\xd9\xda\x42\x92\x93\x90\xe4\x64\x6b\x0b\x49\x4e\x3e\x15\xfd\x68\x48\x72\x12\x92\x9c\x6c\x1b\x23\x48\x5c\xcd\x5a\x48\x72\x12\x92\x9c\xac\xb4\x90\xe4\x64\xb5\x85\x24\x27\x21\xc9\x49\x48\x72\x12\x92\x9c\x14\x2d\x24\x39\xf9\xd4\x75\x4f\x12\x14\xfb\x09\xae\x44\xc2\xa2\x45\xe7\x50\x97\x6b\x50\x22\x97\x91\xa1\xd8\xd8\x2d\xc9\xb0\xdf\x42\xab\xd0\x89\xc9\x3e\xb0\xfc\x01\xd7\x95\x8d\xab\xe6\x11\x90\x6e\x0f\x1e\x63\x0b\x0e\x22\x97\x80\x5f\xe0\xfb\xf6\xc6\xfe\xa1\x2f\x9c\x6c\xb7\xaf\x9d\xc2\xb4\xb3\xd4\x5e\x5d\xc8\x21\xc4\x32\x56\x73\xfe\x14\x50\xa4\x45\x81\x6c\xd9\x46\xe0\xa2\x59\x96\xb0\x2e\x51\xa1\x84\xdc\xe4\xc8\x5d\x80\xb3\x56\xab\xd7\x24\xca\xf2\x01\x49\x21\x15\xb2\x43\xa0\x40\x0f\x12\x5c\x0d\x54\x0e\xe1\x9c\xae\xed\x84\xfc\xe6\x6b\x81\xfb\xbf\xb0\xf2\x42\x99\xa2\xa9\x38\x2b\xe6\xd1\x61\x27\xb7\xb0\xcb\xc9\xb2\xbb\x27\xd3\x35\x2d\xd0\x7b\xa1\xaf\xdd\xe5\x7e\xb6\xf3\xda\x14\x86\x49\xb5\x48\x59\xd4\x86\x38\x59\x7a\xf2\x5c\x41\x98\xe7\x22\xcd\x72\x0d\x35\xc2\x66\xb7\xd8\x0a\x1d\x4c\x75\x45\xe8\xcf\x13\x0a\x19\x09\x3e\x61\x53\x27\x7d\x9f\xa6\x94\xd3\x29\x0c\x8b\xdd\x1e\x96\x79\x0e\x4e\x5b\x13\xea\x67\x8b\x83\x8c\x12\xca\xda\xfb\xf8\xf5\x85\x26\xce\x71\x16\x98\x03\xab\xf4\x59\xc7\x58\xad\x62\x9b\x07\x85\x63\x36\xb3\x78\x63\xe4\x1f\xd9\x8f\x07\x1d\xa4\x47\xaa\x51\x57\x81\x82\xd1\x1a\x48\x6d\xef\x81\x5e\x48\x8c\x9c\xd0\x24\x9b\x6d\x97\x19\xbb\xc4\x20\x5e\x2c\x38\x4d\x59\xe4\x6f\xde\x59\x92\x88\xc8\xea\x6a\xea\xd2\x66\xc7\xa5\xd8\xe9\x9b\x35\xa5\x69\xae\xe9\x38\x81\x11\xb9\xb4\x89\x1b\x04\x4f\x16\xe6\x62\x2a\xd0\xde\x7f\xc1\xdd\x8a\x6e\x22\x66\x17\x1f\xd6\x8e\xfe\xab\x6b\xb9\x75\x84\x36\x9b\x69\x02\xb8\xc1\x71\x82\x03\x01\xae\xe5\xc2\x00\xe6\x95\x88\x6f\x0c\x6c\xd6\xde\xee\x9c\x80\xa2\xa3\xdb\x6a\x1f\x2e\xab\x1d\xdd\x55\xfb\x71\x32\xed\xee\x60\xda\xaf\x73\x69\x69\x5b\xb0\xf9\x73\xaa\xd1\x36\x35\xb0\xc8\x44\x3c\x5a\x83\xb3\x88\x98\x74\x9c\x81\x19\xf1\x4a\xc4\x86\x9b\x92\x60\x11\x57\x71\x47\xad\x66\xf1\xd2\x4c\xee\x0e\x55\x81\x54\x97\x6c\x16\x9d\x53\x96\x98\x0b\xdc\x71\x02\xab\xb9\x08\xbb\x99\x6b\x7a\x60\x81\xfb\x4e\xd7\x41\xba\x82\x7f\x9f\xe9\x36\x08\xa6\x8a\x4c\x59\xbb\xc4\x9c\xa4\xc7\x2b\xf0\x16\x67\x51\x71\xe4\x37\xb0\x98\xd2\x07\xd4\x40\xd1\x54\xe4\x5c\xdb\x3c\x1c\x96\x29\x2c\x08\xb9\x0d\x77\x78\x42\xb7\xa8\x47\x65\xdf\x48\x3f\x48\x9a\xc6\x3e\x1a\xff\xaa\x8f\x68\x4f\xaa\x35\x48\xfe\x9a\xfc\xef\xf1\x5f\x7f\xf3\xf3\xf0\xe4\xcb\xe3\xe3\xef\x5f\x0e\xff\xf3\x87\xdf\x1c\xff\x75\x84\xff\xf8\xfc\xe4\xcb\x93\x9f\xfd\x1f\xbf\x39\x39\x39\x3e\xfe\xfe\x9b\x77\x5f\xdf\x5e\xbd\xf9\x81\x9d\xfc\xfc\x3d\xcf\xd3\x3b\xfb\xd7\xcf\xc7\xdf\xc3\x9b\x1f\xf6\xec\xe4\xe4\xe4\xcb\x5f\xb7\x37\x30\x75\xb5\xa6\xf6\x67\x4b\xed\xc9\x92\xfa\x28\x76\x54\x17\x38\xf4\xec\x97\xdf\xc5\x87\xae\x5c\x7f\xa7\x80\xde\x76\xfd\x65\x67\xb1\xfb\x72\x52\x8e\xcf\x14\x11\x29\xd3\x1a\x62\xe4\x3a\x69\x35\xdd\xc7\x92\xc8\xef\x10\x16\xa6\xe5\xa1\xda\x7c\x59\x49\x3b\x51\x6a\x0a\x5a\x4f\x4b\x78\x1b\x1e\x2a\x39\x38\x61\x69\x96\x40\x0a\x5c\x23\xe2\x19\x7a\xf1\x05\x35\x46\xa3\x72\x05\x91\x95\x69\xe1\x21\x02\x88\xdd\x24\x03\x6e\xac\xb4\x80\x1b\x03\x6e\xdc\xd5\x3a\xab\x3d\xfb\x40\x8c\xd7\xd5\x49\x38\x75\x85\xf2\x0a\x6a\x54\x82\x16\x71\xe6\x62\x82\xb6\xf0\x39\x8b\x73\x9a\x54\x33\x65\xfa\xe4\x89\xed\x30\x40\x45\x48\x4f\xe9\x62\x45\x26\x67\x9c\x55\xd3\x72\x0e\x0a\x0f\x0e\x7c\xd1\xf1\x65\xa5\xf5\xf0\xe8\x2c\xb9\xa7\x0b\xd5\x32\x7b\xdf\x57\x42\xa2\x53\xc0\xd2\xa0\x44\x48\xef\x2b\x52\x15\x56\xea\xda\xda\x76\xd6\x9e\x75\x1b\x5d\x0f\xe8\x77\xe2\xd2\x0b\x55\xbc\xe8\x6d\x02\x6e\x23\x4a\x2f\x7f\x03\xe7\xed\x16\x7e\x03\x5a\x3b\x7d\xce\x12\x48\xd0\x72\x4f\x0b\x13\x57\x7d\x7b\xac\x5b\x08\xe6\xcc\x34\x0f\x27\xc2\x9c\x09\x66\x9b\x9f\x4c\x20\x6a\xe9\x2b\x68\x13\x20\xac\x19\xc7\xba\x2b\x6b\xc6\x73\x9a\x24\x0b\xbf\x27\x10\x13\xc1\x5b\x0d\x04\x0f\x4c\x93\x9c\x6b\x96\x18\x60\x22\x12\xa6\x79\x42\xab\xaa\x20\xb7\x32\xef\x41\x15\x8f\xc8\x07\x6e\x84\xd1\xf2\xe5\x76\x4a\xcc\xa5\x01\x0c\xd3\x91\x80\x86\x78\x80\x5d\x2f\x43\x20\xfa\x20\xd5\x30\x46\x71\x2c\xad\x86\xf7\x7b\x59\xf8\x98\x8c\xec\x45\x2c\x0c\xe0\x24\x66\x93\x89\x19\x19\x33\x05\x72\x21\x53\xba\x3a\x2b\xca\xe3\x56\xa3\x1b\x0e\x08\xa3\x0f\xaa\xd9\x4f\xb1\xe2\xc5\x91\x11\xcd\x23\x2a\x8f\xaa\xb5\x12\xce\x12\x3d\x13\xf9\x74\x56\x42\x45\xb7\x2d\x27\x4a\xa3\xe7\x8d\xd9\x4c\xe5\x7d\xce\x96\x80\x4d\x19\x5e\x87\x47\x60\x59\x32\x01\xf6\xba\xdf\xd3\x96\x63\xaf\x58\x87\xad\xbb\xaf\x3d\x73\x1f\x92\x83\xee\x5d\x10\x57\xe2\xa7\x38\x3c\xe8\x1e\x16\x3c\x22\x97\x36\x6d\xc1\xa0\xde\x6b\x6d\x4b\xec\x66\x54\xdc\x9b\xbc\xa3\x5e\x4b\xdf\xae\xa5\x01\x58\x11\x81\x84\xf9\x5a\x6d\xe7\x94\x2f\xbc\xc3\x3f\xba\x1f\xd9\x40\xa5\x22\x06\x21\x69\xa7\x45\x2d\xee\xd2\x93\x97\x1f\x51\x10\xe5\x92\xe9\xc5\xb9\xe0\x1a\x1e\x5a\xe1\xbe\x3e\xa8\xfa\x4d\x7d\x1a\x35\xba\xee\xa7\x48\x44\x66\xf3\xe6\x2d\x55\xa0\x99\x89\x3c\x89\x31\x55\x68\xce\x11\xed\xb4\xa3\x28\x97\x13\x43\xc2\x2d\xbc\x21\xc5\x44\xd3\xc8\xf2\xc4\xbc\xd7\x9f\x75\x7e\xfc\x47\xce\xe6\x34\x01\xae\x2b\x5f\x5c\xa1\x1f\x58\xf5\xa3\xc7\xb4\x9f\x69\xaa\xee\x4a\x09\x03\x86\x99\x88\x4b\x81\xe2\xd4\x6f\x1d\xfe\x04\x0f\xfa\x23\xb4\x9d\x21\xc3\x74\x25\xd9\x9c\x25\x30\x85\x37\x2a\xa2\x09\xca\x51\xcf\x2d\x9c\x9f\x6d\x98\x17\x42\xa6\x14\x89\x32\x0c\x98\x11\x56\x0d\xab\x69\xbd\x60\xd1\x84\x33\xa5\x8c\x63\xf9\x94\x0e\x6a\x7e\x37\xa8\xb2\x6e\xb8\x46\xde\xce\xa8\x34\x50\xe8\xdd\x6d\x2d\x69\x1c\x0b\x91\xb8\x14\x9c\xc9\xa2\x9c\x17\x6b\xaf\x0f\x47\x5c\x2c\xfe\xc6\xe1\xfe\x6f\x66\x16\x8a\x4c\x12\x3a\x2d\x49\x33\xe8\x95\xd8\x85\xee\x1e\xc0\x1b\x37\x1a\xf3\x4b\xe6\x86\xb1\x31\x5c\x45\xe9\x1b\x5d\xc5\xe0\xed\x05\xba\x57\x27\x88\x4f\xa8\x22\xc5\xd8\xed\x58\x07\xd3\x7e\x7b\x82\x74\xe2\xfc\xec\xea\x6f\x37\xff\x73\xf3\xb7\xb3\x8b\x77\x97\xef\xdb\x7b\x40\x0a\x0d\x56\xbb\x52\xe1\xee\xa3\xc2\x68\x6f\x4e\xa1\xf0\xfb\x18\x09\x35\x42\x63\x09\xe6\xd0\xe0\xb1\xb8\xef\x68\x29\x34\x30\x05\xb4\x1d\xe7\x1a\xd1\x8c\x8e\x59\xc2\xba\xe8\x16\xfa\xba\xbe\x98\x15\xb6\x32\x1f\xe4\xe7\xe2\xf8\x34\x96\x22\xb3\xdb\xe7\x3d\xfc\xbb\xdb\x58\xeb\x9e\xa4\xd5\x94\x68\x78\x63\x26\xf5\x89\x4c\x25\xe5\xba\x94\xa4\x4a\x68\x96\x86\xe9\xef\x92\x53\xe5\x59\x01\xe7\xd9\x73\x2c\xd3\xb8\xbf\xfc\xca\x67\x71\x0c\x71\xed\xd8\x3a\xf4\x7c\x98\x69\xa4\xce\xfd\xe2\x2a\xae\xa4\xe4\xea\xc3\xcd\xe5\xff\x7f\xe9\xde\x2c\xb2\x6e\xe6\xcd\x7e\x8a\x0f\x48\x91\xf5\x76\xba\xd7\x2e\xe5\x7c\x38\xdf\x83\x38\xdf\x82\xdf\x79\xf6\x40\xf5\xeb\x9c\xd7\xab\x53\x96\x53\x23\xa9\x88\x3b\xa0\xe6\xab\x22\x9e\xab\xde\x6b\x55\x75\x21\x81\x98\x57\xb8\x66\xa8\x48\xaa\x08\x1f\x5a\xd8\x7c\xe8\xbd\xd4\x51\xaa\xd2\xaa\x09\x4d\xd4\xc7\x4a\x70\xba\x70\x2a\x86\x69\x7d\x27\x72\xde\x4f\xe4\x7b\x07\x88\x2b\x26\x42\x62\xe0\x42\x3b\x89\xd8\x2c\x10\xcb\x68\x49\x11\x11\x6b\x05\xac\x24\xb5\xa9\x71\x0d\x1d\x98\x96\xdb\x0a\xa3\xc2\x94\x87\x8b\xab\x62\x46\xd6\x09\x3c\x57\xb0\x2c\x91\x3b\x46\xa5\xb4\x0b\x4e\x44\x7b\x73\x88\x04\x1a\xa3\xe6\x3c\xa3\x7a\x66\x13\x2e\xa4\x54\xdd\x41\x6c\x7f\xe8\x18\x68\x56\x38\x08\xa2\xd2\xda\x2f\xed\xd6\xec\xaf\xf7\xe9\x43\x11\xc7\xa6\x9d\x40\x2f\xc2\x2e\x46\xd5\x67\xbd\x10\x1d\x50\xb0\x39\x84\x0f\x3c\x59\x5c\x0b\xa1\xbf\x2a\x6a\x2b\x3c\xf7\xe5\xf8\x8b\x13\xb0\xeb\xae\xa4\x28\x69\x51\x9c\xf2\x10\x01\x07\x51\x63\xa5\x22\x44\x57\xcc\x68\x0e\xe4\x97\x8a\x18\x65\xce\xcf\xd4\xd7\x52\xe4\xad\xb9\xad\x3e\x05\xb8\xaf\x2f\x2f\x90\xf6\xe5\x2e\x16\x99\x6b\xb9\xc0\xba\x40\xab\x75\xaa\x3b\xab\x21\xbe\x75\x51\xdf\x55\xcc\xd6\x39\xc0\x93\x90\x77\x74\x41\x68\xa2\x84\x3f\x76\xe7\xde\xba\xa4\x40\xf4\xda\x49\xf3\x78\x2c\xf4\x6c\x45\x2d\xd9\xd6\xae\x61\xda\xea\x78\x83\x4a\x48\x73\x19\x3d\xc2\xf8\xca\xb0\x1a\x9d\x1e\x33\x09\x11\xc4\xc0\xa3\x8f\xf5\x46\x3c\x77\x84\x2d\xde\xaa\xf7\x82\x1b\xf4\xfa\xdc\xf7\xea\xb2\x88\x1e\x77\xa7\x51\xbd\x45\xe8\x86\xeb\xd4\x62\x14\x0d\xcf\x88\x5c\x73\xd5\xc5\x23\xf5\x72\x82\x7a\x3c\x0b\x74\xdf\xe4\x63\x48\xcc\x61\xb3\x24\xb1\x35\x3b\xa9\xb6\xca\x76\x96\xd2\x29\x10\xaa\x8b\x4b\xa8\x05\x01\xae\x72\xe9\xe0\xa6\xa5\xc9\xc9\xb4\xc2\x5a\xe6\x96\xf6\xed\xe5\x05\x79\x49\x8e\xcd\xda\x4e\x90\xe3\x98\x50\x96\x60\x80\x3b\x9a\xb3\x97\x94\x8c\x13\x6f\x70\xeb\xb4\x05\x88\x47\x88\x90\x96\xb4\x0c\x08\x17\x44\xe5\xd1\xcc\xef\x01\x13\xbc\xd0\xb3\xba\x8c\x67\x9d\xbc\x3b\x03\xda\xe9\x8f\x1e\x7e\xab\x40\x3e\xf7\xb5\x35\xe4\xf0\xdb\x27\x24\x87\x55\x29\xd1\x5c\xff\xfa\x81\xd9\xbb\x9a\x82\xa6\x31\xd5\xd4\x91\x49\xff\x42\x80\xda\x40\x2c\x3b\x10\x4b\x05\x6f\x19\xcf\x1f\x6c\x3e\xa1\x83\xb0\x23\xdc\xbc\xc1\x19\x91\xc8\x1f\x34\x02\xa8\x8d\x80\x8e\xbd\xca\xbf\x87\xd0\x8d\xcb\xff\x8f\xbd\xb7\xef\x6d\x23\x47\xf2\xc7\xff\xbf\x57\x41\x64\x07\x67\xfb\x56\xb2\x93\x7d\xc2\xee\xe0\xf0\x1b\xf8\x1c\x4f\x62\x6c\xe2\x08\xb1\x27\xfb\x1d\xcc\xce\xcd\x51\xdd\x94\xc4\x73\x37\xd9\xd7\x64\xcb\xd6\x62\x5e\xfc\x0f\xac\x22\xd9\x6c\x49\x4e\xe2\x26\x63\x29\x9e\xe6\x02\xb3\xb1\x25\x93\xc5\xa7\x62\x3d\x7e\xaa\x73\x8d\x46\xf7\x68\xdd\xf0\x4a\x50\xcc\x4d\x63\x46\x11\xa2\x22\x97\xe5\x06\x91\x33\x59\x13\x16\x53\x8e\x38\x88\xd5\x18\x2e\xa6\x6d\xbf\x6d\x0f\x4b\xc1\x96\x2c\xa2\x04\xf3\xda\xa5\x7c\x63\x7a\x33\x8b\xe3\x4e\x2e\x74\x4f\x0a\x3a\x65\x85\x4d\x27\x45\x8c\x81\x84\x37\x2c\x91\x37\xa2\x96\x45\x3a\xd0\xeb\xf7\xb2\x60\x08\x88\xe4\x16\xc2\x74\xff\x55\xac\x03\x74\x92\x6a\x1d\xc0\x28\xd7\x59\x07\x30\x83\x7e\x0d\xeb\xd0\x44\x08\x88\x64\x7d\x1d\x8c\xb4\xd9\x5d\x07\x90\xbf\xf6\x7d\x1d\x14\xcb\x32\x59\x56\x93\x5a\xce\x78\xff\xdb\x91\xf2\xd9\xb6\x14\xb5\x61\x65\x68\x42\xdf\xcc\x4d\xc7\x67\xab\xfb\x65\x1a\x15\xc0\x63\x51\xe2\xa8\xc6\x77\xd0\x41\xc5\xfd\x7b\xf0\x9c\x03\xb7\x5b\x7f\xe3\xed\xe8\xbd\x47\xee\x44\xaf\x99\x11\x6d\x87\xbf\xc5\x17\x2f\x05\xc4\x6f\x84\x73\x34\xc9\x83\x2b\x33\x5a\x2c\xa4\xd2\x91\xb7\x8a\x24\x4e\xda\x5e\xa7\x2b\x80\x24\x84\x60\x38\xf8\x5d\x80\x34\x41\xc1\x3c\xef\xdc\x97\x42\xe6\x2c\x88\xea\x84\x0c\xeb\x28\x72\xae\x11\x14\x0e\xc6\x70\x48\x8a\x46\xda\x73\x41\x93\x79\x67\x64\x2d\xb1\x0e\x73\xd4\x90\x0e\x2e\x9c\xc2\xba\x32\x01\x21\xd2\x15\xd5\x8b\x11\xa9\x59\x81\xf8\x8d\x96\x3d\xdf\xa0\xc5\xeb\x00\x38\x8e\x23\xc8\xb1\x1b\x47\xb6\x43\x9a\x48\x43\x15\xc8\xe0\x33\x7c\x3f\xb9\x22\xcf\xde\xb8\xfd\x7a\x66\x81\xce\x2f\xdf\x5d\x87\x29\x2d\x54\xac\x30\xf1\x2e\x22\x61\x03\xdb\xfe\x89\x15\x91\x47\x1d\xd7\xd0\x1f\x6f\xf4\x89\xde\x70\x91\x5b\x84\xc2\xce\x2e\x3a\x03\x9e\x55\x0d\xe3\x36\xf3\x03\x2d\x78\x1e\xbe\x47\xdf\x46\x56\xf1\xf4\xa7\x80\x8c\x77\x72\x4d\xdf\xa3\x02\xeb\xbc\x6c\xe3\x8f\x7b\x95\x3d\x81\x29\x49\xf8\x41\xc0\x1d\x34\xf3\x1d\x13\x21\xb7\x8c\x91\x60\xeb\xa2\xef\x80\x7d\x3b\xf7\xc8\x02\xf2\x0f\xa4\xc8\xa9\xd9\x99\xe1\x1c\x9a\x8b\xb9\x0a\xad\x20\xb4\x28\x92\xc4\x25\x6c\x33\x83\xb8\x6b\x00\xb9\x3f\x36\x01\x6d\x5d\xcd\xef\x80\x01\xc7\x8c\xfe\x09\x13\xc6\xd7\x6d\x8a\x28\x8c\x4a\xf1\x95\x1b\x22\xe6\xa5\xa2\x67\xb5\x59\x41\xcd\x69\x71\x55\xb1\xde\xb5\xd4\x49\xe2\xe7\xe2\xd5\xdb\xab\xd3\x2e\x65\x20\x0c\x5b\x60\x19\x06\x9f\x13\x9a\x97\x5c\x29\xf0\xf8\xb0\xe9\x42\xca\x9b\xa8\x21\x0f\xb7\x54\x87\x0e\x12\x83\x15\x9f\xab\x13\xcb\x51\xc6\x66\xe1\x8e\x08\x17\x85\x4f\xbe\x01\x73\xa1\xd0\xca\xba\x10\xa2\x27\x4f\x32\x3f\x7b\x38\x7a\x00\xf9\xe2\x83\x9d\x37\x97\x07\xd0\x7f\xe0\xf0\xee\x5c\xec\xd8\x3c\x55\x71\x30\x9d\xeb\x95\xfa\xb7\xcf\x7d\x4b\x7d\xf1\xad\xeb\x88\xda\xeb\xce\x17\xc9\x4a\xfd\x19\x53\xe9\xaa\xfc\x26\x28\xce\x6c\x49\x22\x39\xc3\xbc\x58\x06\x10\x15\xf4\xde\x34\x32\xf0\x6f\x1f\x40\xa9\x13\xfb\xa7\x07\xa9\xc0\x97\x4e\x8b\xc2\x6c\x24\xb5\x39\xd2\x41\x84\x27\xe8\x26\x3e\x2d\x19\xea\x93\x62\x46\xb2\xd1\x16\xc2\x59\xc4\x57\xef\x3c\xe4\xda\x25\x84\xbb\x8c\x74\x2d\x71\x6c\x4a\x4a\x7e\x67\x28\x0c\x47\xec\xa6\xd0\x82\xe7\x7f\xfb\xc7\x11\xc8\xef\x04\xa2\x0f\x3c\x12\xc5\xc8\xec\x50\x38\x88\xcb\xf7\xd1\xe6\xd9\x32\x1f\x5c\x32\x6d\x34\x35\x5c\xb7\xd0\xfd\x60\x34\xab\xba\x49\x70\x19\x62\x5c\xc3\x24\x74\x0f\x27\xe5\x14\x91\xf7\x01\x5c\xc5\x96\x26\x23\x83\x38\xe1\xed\xb1\x5c\xc7\x64\x4b\x42\xcc\xa3\xb9\x90\xc9\xe7\xbb\x91\xbf\xa0\xb3\x8a\xec\x8b\xc3\x2a\x36\x7b\x38\xc8\x84\xde\x59\xea\x70\x98\x8d\xcd\x37\xa3\x97\x26\x32\xdf\x48\xd2\x76\x75\x31\xfb\x23\x20\x9b\xc3\xd1\xaa\x20\x42\x5a\xfb\x48\x50\x9a\x92\xdd\xb1\xac\xd1\x2c\xb7\x58\x0d\xd6\xa6\x8c\x79\xde\x5d\x6a\x7a\x53\x00\x7d\xb6\x05\x71\xd4\xa8\x85\x2a\xb4\xba\x8e\x47\x9b\x18\x91\xff\x05\x2e\x69\xa1\x99\xda\x6a\x9a\x13\xff\xe7\x7d\x97\x02\x02\xa9\x33\x2a\x7c\x45\x79\x2d\x9d\x89\xdb\x62\x32\xd8\xd4\xd4\x29\x23\x15\xad\x69\x69\xde\x60\x45\xec\xf6\x4c\xd9\x9c\x63\xa2\x5d\xf0\x28\x7a\x50\x87\x7e\x20\x25\xa0\xd8\x70\x4d\x4a\x3e\x5f\xe0\x6d\x21\x14\x2a\xd7\x10\x17\x38\x56\x48\x9a\x13\x60\x2c\xb2\x26\xb7\xb4\x2e\x8d\x2c\x40\xb3\x05\x44\xa1\x51\x41\xf2\xc6\xdc\x07\x02\x10\x04\xab\xb1\xd2\x54\x1b\x1d\x93\xd5\x11\x46\x38\xb7\x4c\x3b\xc0\x56\xfe\xd2\x75\x23\x76\x9c\x22\x6e\x6e\x5a\x12\x2b\xc8\xf9\x1d\xcb\x82\xea\x84\xe6\x78\xda\xf2\x84\xe6\x99\xa2\x37\x91\x81\x66\x3b\xd7\x8b\x33\x59\x96\x54\xa4\x4b\x83\x8c\x14\x44\xce\x90\x1c\xa7\xe2\x58\xea\x88\x51\x3e\x21\xb8\x13\x19\xa8\x43\x3f\xed\x48\x21\xc8\xe9\xcc\xb9\x36\xd7\x14\x73\xdc\x65\xed\x6b\x5a\x44\x91\xe5\xe8\x00\x94\x7c\x29\x35\x39\x3c\x38\x39\x38\x72\xa8\x2b\x9e\x84\x03\x15\x26\x15\x60\x42\x71\x3b\x21\xc5\xcb\xaa\x58\xc1\x1c\x0e\x10\x18\x3f\xa2\xe0\x94\x69\x2e\x3c\xd5\x63\xc1\xaa\x05\x2b\x8a\x11\x51\x46\xd6\xa5\x0e\xbc\x0d\x7f\x6b\xbe\xa4\xeb\x26\x43\x9b\xd8\xe1\xc1\xaf\x07\x23\xc2\x74\x76\x44\x6e\xa5\x38\xd0\xe8\xde\x20\xd7\xa0\x30\x46\xd1\xe4\x89\x58\xc9\x06\x6a\xb7\xe1\xb6\x79\xbc\xbf\x8c\x1a\x5d\xa7\x41\x81\xdc\xbc\xc7\xf0\xf5\x38\xe1\xed\xfc\x8e\x6b\x23\x77\xe8\x06\x6c\x12\xcf\x51\x2d\x60\x86\x97\x9a\xd7\xcd\x3c\x6b\x27\x0b\x46\x0b\xbd\x58\x79\x55\x05\xcb\x62\x29\xd2\x08\xfb\x49\xbc\xc0\xb4\x07\xe9\x9c\xd1\xfa\xba\x2d\xa2\xb7\xd7\x75\x80\x2d\x8d\x9f\x2c\x03\x8c\x02\x4c\xb7\x04\x30\xc8\x58\x2c\x4f\x55\x05\xf8\x8f\x4f\xaf\xc2\xef\xbc\xae\xd2\xbc\x9c\xaf\xde\x4f\xce\x3e\x59\xd7\x17\xbe\x34\x14\xf6\x8d\x06\xd7\x4c\x59\xcf\x76\x22\x6b\x4d\x84\xaf\xa9\x66\x6e\xd8\x1c\xf6\x92\xd5\x4b\x9e\xb1\xe3\x47\x28\x1f\x9b\x0a\x36\x33\xfe\x3a\x10\x88\x53\x82\x89\xef\x8b\x8c\x74\x85\xe4\x6c\x33\x03\x5b\x4a\x41\xdd\x2a\x68\xe6\xf7\x06\xf6\xef\x35\x3c\x74\x67\x0b\x96\xdd\x58\x10\xdc\x38\x7b\xa1\x62\x8c\x6c\x71\x24\x18\x06\x82\xff\x99\x16\x72\x7a\x52\x52\xa5\x59\x6d\xb4\x0f\xfb\x06\x8f\x33\x43\x01\x17\xf3\xe3\x32\x3f\x8a\xa9\x8c\x41\x02\x8d\x77\x03\xc9\xb2\x83\xa9\x72\x0f\x2a\xa5\x59\x95\x9d\x5a\xc7\xcd\xea\xbd\x4a\x54\x4b\xfd\xf5\xf5\xf5\xe4\x55\xa7\x92\x3a\xe4\xfd\x6b\x5d\x39\xf0\x6a\x38\x15\x98\x27\x34\x70\xdb\xbd\x29\xa3\x9e\xc0\x93\xf1\x90\xd2\xeb\xe4\x47\xd9\x80\xc0\x44\xa7\xc5\x8a\xdc\x52\xc4\x09\x50\x2c\x8e\x17\x3c\x33\x64\x3c\x33\xdc\xc6\x1c\xb8\xd7\x8c\xe6\x88\xa9\x0b\xc6\x92\xdd\x3b\xa0\x5a\x9a\x92\x6d\xdb\x59\xa3\xb4\x2c\xc9\xc2\x4e\x15\xd7\xd0\x3f\x85\x78\xe1\x8e\xe1\x52\xa2\x37\x45\x91\x9a\x55\xa8\x92\xd8\xbf\x79\x12\x0a\xc7\x06\x0b\xc2\x75\x0e\xe0\xe9\x29\xc9\xc2\xa5\xb2\x62\x3a\xd6\xc2\x15\xb8\x40\x51\xc5\x49\xb1\x25\xa9\xd7\x43\x12\xd5\xec\x21\xf1\x75\x7b\x5c\x27\xf1\x6e\xbd\x34\x15\x80\x48\x92\x2a\x40\x24\x79\x25\x20\x62\x9d\x57\xf6\x70\x61\x48\x8b\x21\x34\xce\xa2\xe0\x3a\xe6\x6d\xbd\xf0\x8c\x0a\x29\x78\x86\x0e\x02\xac\x3b\x2f\x1b\x5d\x35\x1a\xec\x2d\x19\x55\x6c\xbc\xa4\x35\x37\x0c\x15\x8b\xa8\xf9\xd8\x22\x61\x6e\xbb\x96\x12\x8c\x11\xde\x8d\x8b\x14\xc7\x93\x99\x84\x43\x62\x83\xc3\x96\x78\x87\x37\x36\x27\xfe\x44\x93\x54\xb3\xae\xa8\x5e\xa4\xd3\x9a\xa8\x5e\x40\x48\x1b\x38\x71\x5c\x44\x24\xf0\x37\x23\x95\xef\x41\xca\x49\x52\x25\x31\xf2\xe6\x62\x15\xd9\x7a\x4d\xcd\x34\x14\x6e\xae\x61\xa2\x20\x8b\x2f\xaf\xb5\x86\x85\xc9\xa6\x8c\x50\x41\x2e\x4e\x2f\x4f\x7f\xb9\xfa\x70\xf6\xcb\xe5\xe9\xdb\xf3\x98\xae\xa3\x4b\x51\xa4\x2c\x46\x91\xac\x1c\xc5\x17\x2a\xd6\x63\x9a\xca\x16\x6c\x7f\xe2\x2b\xae\x80\x9a\x10\x91\xcb\x8a\xea\x01\x4c\x7a\x1c\x44\x1b\x59\xb3\x4c\x1a\xc6\xb3\x53\x8e\x63\xdd\xe9\x2f\x59\x41\x57\x57\x58\x96\x7f\xd7\xc6\xe4\x4b\xcf\x6c\xb0\x70\xbf\xf2\xe8\xf0\x6c\x0d\x2b\xca\xd5\x63\xb0\x98\xf6\xce\x31\x1e\xfa\xf2\x71\x7e\xbd\xdd\xb5\x64\xff\x5c\xb6\x64\x6f\x6c\xd0\x15\xab\x39\x84\xc2\xec\xc3\xa9\x79\x2d\x6f\x6d\xa1\x87\x43\x2e\xdc\xc9\x39\x0a\x8c\x29\xad\x0f\x22\x1e\x47\x4c\x4b\xf2\xe2\xb9\x1b\xe4\xe9\x39\x17\x6c\x88\xcb\x5e\xbb\x97\x2c\x8d\x9f\xf6\x2f\xb5\xf1\x3a\x5d\x1f\x53\x4c\xe0\x0c\x59\x63\xe3\x2f\x8e\x7d\x86\xd6\x0b\xa0\xc7\xb3\x22\x2a\x72\x17\x6b\xf5\xf4\xce\x89\xce\xaa\x2b\x99\xdd\x24\x32\x8d\x5e\x9f\x4d\xb0\xb7\x4f\xba\xa3\xae\xcf\x26\x83\x37\x6a\xbf\xec\xa3\x07\x98\xd3\x44\x8b\x6f\x1f\x6c\xeb\x3c\x18\x34\xae\xb6\x39\xe1\xa7\xee\x38\x8c\x06\x8d\xeb\xbe\x36\x68\x5c\x0f\x68\xae\xb2\x18\x97\xe2\x55\x4d\x33\x36\xd9\x27\x01\xce\x31\x10\x92\xdb\x7a\x9b\xa4\x95\xe3\x3c\xbb\x10\x8c\xe5\xc8\x3f\x5c\x91\x34\x32\x37\x33\xc1\xd8\x60\x30\xf7\xb5\x51\xb5\x4d\x1d\x21\xea\x5d\x2f\x6c\xd7\x56\xcc\x75\x7e\xdc\x6d\xd4\xb5\xfa\x49\xe5\xd1\xc0\x5d\x11\x0a\x7b\x9d\x0c\xf1\x46\x1f\x51\x4c\xf4\xb7\x7c\xd3\x70\x07\x89\xe2\x73\xb3\x5c\xae\x36\x1f\x42\x48\xb9\x52\x2a\x2d\x21\x66\xd4\x99\xac\x33\x3e\x2d\x56\x64\x41\x0b\xa3\x30\x41\x89\x37\x4a\x6e\xa0\x34\x19\x74\xd3\x7f\xa1\xae\x98\x4d\x54\x44\xa9\xa6\x90\x62\x0e\x8b\x41\x6d\x42\xc2\x5d\xc5\x32\x33\x66\x56\x30\x2a\x9a\x0a\xe9\x34\x32\xd2\x4a\x36\x09\x72\x12\x9c\x6b\xd9\xcb\x54\x82\x5b\xf0\x8d\x0a\x02\x92\x3f\x7a\xe6\xbb\x99\xa5\xe4\x9d\x2b\x51\x3b\xea\x5f\x8a\x8c\x38\x0b\xad\x87\xec\x50\x41\x72\x80\x07\x10\xb1\x69\x73\xe6\x58\x40\x1e\x67\xef\xb1\x3e\x40\xbf\x8e\xb5\x0a\x29\xc6\x82\xcd\x11\xa6\xc0\x32\x34\x8c\x70\xc4\xf1\x31\x9e\xce\x87\xda\x2b\x2d\xab\x4e\x1d\xb6\x25\xa7\xbd\x29\x01\x48\x84\xf6\x44\x91\x43\x21\x89\xac\xcc\xd3\xd5\x08\xae\x57\xe0\x7c\x73\x25\x00\x23\x92\x8d\xae\x6d\x20\x01\x25\x53\xa6\xa9\x35\x57\x9b\x4b\xe0\x11\xc1\x01\xec\xdb\xdc\x3d\x88\x90\xbf\xde\x7a\x00\x3c\x48\xf8\x9c\xea\x08\x2e\xb1\x45\xa2\xc7\xfd\xfc\xf8\xb1\xe3\xca\xba\xd6\x22\x51\x88\xf7\x03\xd7\xcf\xdc\x68\xd9\xe8\x3d\x79\x47\xee\x33\x1f\x21\xc0\x43\xa0\x28\xf2\x92\x29\x22\x9b\x44\x05\x17\x5e\xd8\xe1\x52\x6a\x79\x83\xed\x69\x6b\x53\x3a\xe7\xbd\xaa\xc8\xa5\x38\x62\xf7\x40\xd7\xdb\x24\xd4\x00\xbd\x71\xda\xcc\x66\xac\x86\x97\x0e\x08\xde\x08\x43\xf7\x65\xa1\xdc\x1b\xd6\xcf\x80\x6b\x43\xaa\x98\x1e\x01\x72\xbe\x45\x52\xb8\x67\x48\x0b\x31\x09\x65\xd7\x6a\xa6\x00\x09\x5d\x90\xf3\x77\xdf\xf7\x3b\xa2\x29\x70\xf5\xe3\xf2\x35\x61\x9e\xef\x44\xbf\xb0\xbf\xb4\xe7\x61\x1b\xe4\x89\x3d\x16\x59\x21\x95\xcd\x0d\x86\x7d\xc9\x16\x54\x08\xe6\x0c\x52\x5c\x83\x35\x7b\xca\x98\x20\xb2\x62\x18\xf6\xd6\x8b\x18\x4a\x14\x17\xf3\x82\x11\xaa\x35\xcd\x16\xc7\x86\x3a\xe1\xce\x42\x9b\x84\x6b\x7f\xa3\x74\xcd\x68\x89\x67\xa2\x66\x25\xe5\x38\x3c\xa1\x59\x2d\x95\x22\x65\x53\x68\x5e\xf9\xce\xfa\x59\x12\x19\xc0\x21\x28\xcc\xc9\x74\x7b\x05\x69\x16\x6d\xb6\xef\xa8\xa5\xd0\x4e\x5f\x8a\xf5\x72\xb1\x23\xf3\x29\x2b\x2b\xbd\xf2\x59\x79\xfd\x74\xa0\x19\xaf\x95\x26\x59\xc1\x99\xd0\x76\x66\x08\xb8\x07\x34\xf8\x9a\xdf\xc2\xae\x88\xb2\x4b\x22\x72\x50\xbe\x2b\xad\x30\xf9\xcc\x13\xe1\xba\xca\xb9\xb2\xb6\x0e\xd5\x2f\xf5\x8d\xba\xba\x2c\x78\x70\xdc\x8a\xc0\xd1\x71\x02\x0e\x52\x64\x7f\x15\x90\x10\x56\xbe\xf5\x89\x83\x71\x7c\x05\x8a\xa7\xb8\x7b\x3d\xea\x24\xdc\xb7\xba\x05\xa4\x86\x6c\x70\x1d\x38\x50\x82\x2d\xcd\x3d\x60\x19\x33\xa2\x28\x4d\xc8\x64\x1e\x9d\xc7\x04\xb2\xdc\x5b\xa6\x14\x9d\xb3\x49\xcf\x90\x84\x14\x0c\xa7\x35\xb4\x41\x2c\x43\x7b\x6c\xa0\xfa\x6d\x81\x30\x68\xfe\x37\x61\xd2\x53\xa8\x3c\x96\x38\x91\x5e\x14\x38\xa5\xe9\xb6\xe6\x5a\x33\x38\xa5\x50\xca\x08\x62\xc5\xd6\xa1\x2b\xbb\xc9\x56\xbd\xc6\xb3\x8b\x1e\x8e\x67\xc4\x0f\x91\x63\xda\xd2\x94\x91\x69\xcd\xd9\x8c\xcc\x38\xe4\x51\x41\x86\xd1\x08\x31\xf8\x29\x9a\x90\x95\x62\x35\x4c\xdb\x9a\x05\xdc\xf4\xfb\xd1\xf3\x0f\x3b\x7f\x5d\x37\x22\xa3\x41\xc5\x47\x00\xd6\xe2\x33\x32\x87\xac\x26\xab\x04\xff\xe9\xf9\xdf\xfe\x42\xa6\x2b\x23\xaf\x81\x22\xa6\xa5\xa6\x85\x23\x80\x14\x4c\xcc\xcd\x2e\x02\xcb\xed\xc7\x37\x3a\xe0\x4c\x7e\x73\x0a\x5e\x72\x8d\x0b\xf4\xe2\x0f\x37\xd3\xa8\xab\x07\xfc\xf1\x24\x67\xcb\x93\xe0\x08\x8d\x0b\x39\xef\xd7\xeb\x59\x8a\x54\xda\x28\x3b\xdb\x96\x1b\x0d\x85\xee\x77\x75\xa7\x5d\xe9\x0e\xb2\x90\xb7\x68\xcc\xd9\xbc\xaa\x01\xce\x49\x25\xab\xa6\x80\x85\x23\xdf\x7b\x74\xba\x46\xb1\x75\xdc\x9f\x58\x23\x61\xc0\xed\xc0\x91\x6a\x87\x5d\x2f\xe3\x8d\x29\x7d\x8e\x4c\x69\x51\x17\xac\xdf\xcd\x57\xe1\xe8\x6d\x8d\xfb\x9e\x16\xc5\x94\x66\x37\xd7\xf2\x8d\x9c\xab\x77\xe2\xbc\xae\x65\xdd\x9d\x73\x41\xcd\x9b\xbe\x68\xc4\x0d\x14\x65\x6d\xa1\x58\xe5\xdc\x86\xff\xb9\xe4\xf9\x60\x76\xbd\x88\x71\xb3\x44\x70\x4c\x27\x92\x38\x1b\x5c\x3b\x32\xbb\xe3\xad\xa1\x4d\x10\x66\x68\xee\x9b\x7d\xce\x3a\xf3\x50\xe1\xd5\xfe\xc3\xf3\x3f\xfd\x15\x99\x0b\x91\x35\xf9\xeb\x73\x48\xc1\x55\x23\x7c\x00\xe0\x05\x36\xa2\x56\x49\x8b\xa2\xaf\x97\x20\x64\x01\xe6\xb0\x7d\xb5\x57\x5e\xef\xec\x76\x7f\xb6\xca\x78\x7d\xfd\x23\xe8\x8b\x5c\x2b\x56\xcc\x46\x08\x75\xe2\xcd\x5a\x07\x20\x5d\x1d\xd8\x27\xaf\x3f\x4c\xce\xee\x95\xb6\xa5\x2c\x9a\x92\xbd\x64\x4b\x9e\xf5\x73\x60\x76\x76\xa5\xd3\x9b\x33\xd3\x17\x5c\x01\x02\xce\xb4\x90\xd9\x0d\xc9\xed\x87\x41\x54\xfb\x7a\x91\xe6\xfe\xab\xd0\x37\xbe\x3f\x22\xae\xff\xde\xf9\x77\x22\xfa\x4b\x5a\x55\x1e\x9e\xa3\xa6\xb7\x9d\xc5\x00\xd6\x04\xd0\xa0\x91\x6e\xc4\x68\x67\x7a\xac\x2b\x7d\x6c\x67\x64\x9e\xa9\xde\x5d\xf4\x4e\x03\x88\xf7\xc4\xb7\xd4\xf7\xf7\x63\x76\x0e\x44\xdb\xa1\xbb\x0d\x15\xfc\x1b\xf1\x07\x36\x60\xa1\x3c\xde\x8e\x3f\x18\x28\x41\x9a\xe3\x03\xaf\x4c\x7f\xf3\x65\x02\x67\x68\x5c\x3a\x43\x67\x5d\x84\x77\x42\x97\x54\x5b\xfd\xc8\x79\xd9\x29\xa9\x58\xad\xb8\x32\xa2\xd3\x07\xb8\x50\x67\x05\xe5\x65\xe0\xbe\xdb\xcd\x22\xe0\xe5\x86\xda\xa6\xf1\x9c\xb2\xe7\xfb\x35\x91\xb9\xa5\x03\x38\x28\x96\xad\xfd\x22\x9a\x5e\x42\x31\x61\xd7\x5c\xf9\x43\xbb\x71\x5d\xa6\x6c\x7e\xe3\xb9\x32\x7e\xeb\x29\xf1\x62\x98\xdf\xd7\xca\x8a\x3d\xf1\x89\x38\x4e\x54\x30\x10\x30\x70\x7b\x32\xba\x1c\xbb\x63\xf3\xc1\x9b\x19\x68\x87\xd6\x16\x73\x8c\xa8\xf1\x11\x04\x98\xab\x68\x07\x25\x07\xdf\x1e\xec\xf4\x19\xc0\x9d\xa9\x65\x45\xe7\xa0\xbc\xed\xc3\x06\xad\xd3\x14\x62\x94\x1a\x45\x1e\x3e\xc7\x00\x8c\xca\x7e\x8b\xe5\x2d\xd0\xf5\x42\x46\xed\x0e\x06\xd7\xb9\x13\x61\x15\x50\xc4\xb2\xbb\xa5\x2b\x42\x6b\xd9\x88\xa8\xa4\x5e\xf0\x1d\x78\xdf\xd2\xdb\xb5\xc9\x5e\x4a\xc1\x9c\x1f\x3b\x66\x94\xeb\x16\xe3\x9a\x2b\x74\xe9\x73\x41\x5e\x1c\xbf\x78\xfe\x54\xc4\x0e\x98\xe1\x9a\xd8\x71\xe9\xc5\x0e\x7c\x01\x76\x3a\x57\x57\x23\x7c\x1f\xee\xd4\x5b\x6b\x48\x6e\x8b\x80\x73\x57\x64\x16\x7e\x75\x5b\x73\x6d\x8f\xf9\x2d\x57\x8c\x1c\x82\x0a\x4b\x64\x1d\x82\x8c\x46\x41\xd9\x86\x06\x8f\xc8\x62\xe1\x29\xa0\x68\x55\x33\xdd\xd7\x07\xc9\xbe\x3c\xc0\xd0\xb6\x7b\x1c\xee\x7d\x9b\x12\xed\xcf\xb3\x67\xe4\x10\xc7\x38\x40\xc4\xb7\x88\x9d\x4f\x70\x91\xec\x5e\x9d\xdf\x55\x11\x45\xc3\xd2\xed\xd7\xf9\x5d\x45\xc1\x49\x52\xed\xc5\xc6\xfd\x17\x5b\xd0\x25\x03\x80\x3d\x5e\xd0\xba\x80\x88\xb0\x2b\x5c\x32\x32\x6d\x34\x61\x62\xc9\x6b\x29\x4a\x26\x34\x81\x24\xed\x69\xc1\x48\xcd\x00\x86\x34\x63\x8a\x7c\x73\xf8\xe1\xf4\x3d\x44\x0c\x1f\x59\x9c\x56\x3b\xbf\x46\x41\x82\xde\xda\x1c\x82\xee\xf6\xf1\xbc\x11\x37\x77\x73\x5c\xe0\x01\x77\x6b\x61\xe6\x56\x36\xba\xa1\x05\xe0\x10\x66\x45\xa3\xf8\x72\x57\x4f\x84\x45\x6a\x7c\xc9\x7b\x1d\xe9\x14\x87\xf9\x2c\xd8\xd3\x0d\xdc\xc8\xde\x08\xbc\x5b\x70\x88\x36\xc2\x37\x0e\x94\xc7\x26\x0a\x03\x45\xad\x79\xbd\x9f\xff\x00\x80\x6d\x31\x43\xc9\x95\x8c\xda\x90\xef\x01\x41\x7b\xe7\x1a\xf4\x83\x0f\x4c\x2e\xd4\x19\xcc\xea\x61\x27\x25\xee\x8c\x5c\x75\x80\x94\x5e\x5e\x5e\x85\x48\xc5\x68\xd8\x91\x0f\x5e\x84\x49\xdb\x45\x0b\xe7\x0d\xa5\x3e\xbc\x71\x8c\xd5\xf3\xb6\x44\xf0\x9c\x09\x56\x83\x74\xff\xf2\xf2\xea\x81\x63\xb9\x83\x80\x2a\xc4\x94\x2a\x8c\x7f\x79\x79\x79\x85\x3e\xc9\x87\xd1\xde\xdb\x02\xd0\x5f\x79\x06\x1c\x0d\xc0\x4e\xe8\xa1\x77\xc7\x33\x88\x53\x6f\xeb\x37\x9b\x0f\xf6\x3c\xa4\x86\x5c\x4c\x08\xcd\xf3\x1a\x42\x55\xfa\x5c\x83\x0e\xb0\x08\xad\x2a\x1f\x71\x00\xe8\xd7\x54\xb1\x70\xea\xc1\x19\x80\x77\xb5\xe7\xfe\x61\x7b\xd9\x54\x05\xc7\xd0\x82\x70\x88\x16\x1b\xbc\x94\xcb\x3e\x57\x3b\xc6\x34\xd6\xdb\x30\x16\xf1\xfc\xc8\xbe\x85\xb2\x52\x1f\xab\x9a\x29\x59\x2c\xdb\x3a\x9e\xd1\xc7\xc9\xf2\x0f\xf0\x0f\xfb\xe3\xe4\x6a\x61\x7d\xa1\xa3\xc4\x84\xae\x39\xdb\x3c\x46\xe4\xbd\x99\x5d\x03\xfc\xc7\x93\xc0\x97\x0c\xe2\x47\xdf\xf5\x2e\x5c\x0a\xc3\x04\x75\x4b\x31\x04\x12\xab\xdc\x32\x5a\xbb\x67\x0f\x66\x1e\x31\xc5\x9d\x9c\xe9\x35\x24\xce\xfc\xe5\xe5\x15\x3e\x7d\xb8\x5c\x16\xbe\x50\x6d\x3d\x3b\xbd\x5f\x25\xb2\x7b\xc0\xf6\x18\xb3\x48\xb7\x36\xb6\x35\x34\xc7\x65\x3e\x44\x68\x6b\x51\x28\x4a\x11\xa3\x2b\x46\xeb\x6c\xd1\x67\xfd\x53\xf3\x34\xa4\x84\xe4\x12\xa3\x4a\x67\xb2\x06\x93\xe4\x18\x9e\xd0\x42\xca\x9b\xa6\xfa\x32\xaf\xa6\x1d\xd8\x68\xa5\x5f\x8c\xd7\x75\xc6\xf8\x4d\xbd\x9b\xb9\x50\x7d\x82\xd9\x22\xa5\x70\xa6\x51\xf6\x86\x91\x5b\x48\x86\x87\x33\xb9\x8e\xba\x7d\x56\x34\x4a\xb3\xfa\x7b\x5e\x2b\xfd\xec\xa1\x3d\x61\x99\x55\xb8\xe7\x68\x84\x3f\x08\xbb\xfb\x07\xd7\x0b\x5b\x8a\xea\x60\xd4\xfd\xc8\xfc\x6c\xc9\x38\x20\xb2\x26\x07\x97\x52\xb0\x07\xbb\x3f\xd6\x54\x11\xff\xa0\xfa\xa7\xe2\x5e\x59\xc0\x2e\xa2\x62\x05\x66\x4e\xc2\x07\xbd\x2f\xc6\xb5\xad\x0e\x66\xe8\x71\x2f\x90\x62\x9a\x50\x28\xab\x02\x7d\x2f\xda\x92\x5c\x58\x11\x00\x4b\x99\x49\xab\xfc\xac\x82\xad\x7d\xe0\xe0\x41\x49\x01\x2d\xef\xdf\x80\x3e\x3a\xce\x83\x2f\x06\xa4\x05\x32\x0b\xcb\xfc\x86\x8b\x9b\x07\xde\xca\xb8\x1b\x72\xbe\x31\x7a\xa7\xf8\x30\x46\x88\x71\x81\x99\x51\x46\x84\xa0\x53\xd9\x68\x07\x15\xad\x02\x53\x1c\x17\xff\x8b\xe7\x02\x5c\xf0\x90\xe5\xfa\xd0\x5d\xd9\x62\x68\x53\x23\x74\x4f\x38\x4b\x9a\x5a\x09\x4d\xa1\x9a\xdc\x4b\x99\xdd\xb0\x9a\x14\x86\xe6\x87\x1e\xbe\x36\x58\xbd\x53\x37\xec\xc1\xb1\x6b\x7d\x2d\xe9\xac\x5a\xb0\x92\xd5\xb4\xf0\x46\xa4\x47\xdd\xf4\x37\xf6\xb9\xf5\x64\x84\x91\xda\x58\x13\xc4\x96\x82\x92\xf9\x31\x39\xdf\xf6\xad\x92\xae\x5c\x69\x43\x2e\x20\x94\xf4\x8e\x2b\xfd\x70\xb9\xa3\x92\x79\x08\x86\xd4\x28\x56\x8f\x3d\x38\x96\x05\x59\x51\x3e\x68\x3e\x67\xd3\x66\x3e\xe7\x62\x7e\x8c\xef\x39\xc8\x0d\x41\x0d\x5a\x6f\x14\xb9\x5d\xb0\x87\x7a\x36\xb2\x9a\x51\x8d\x40\x2e\x95\xcc\x31\xe3\x86\x87\xbd\x97\x32\xc7\xce\xa7\x2b\xb4\x62\xb9\x33\xe9\xb3\xa5\xc9\x85\x20\xb2\xb6\x38\xb5\x34\xcf\xc9\x83\xdd\x2b\x5b\x76\x04\xfa\x6a\xd7\x17\x89\x73\x11\xc6\x98\x4c\xee\xff\x2a\xd8\x20\xd5\x4c\x8d\x84\xdf\xd4\x0f\xad\xe6\xd6\x57\xa8\xe8\x25\x50\xc4\x0a\x8f\xa7\xa2\x3d\x9e\x67\x61\xba\x11\x25\x9a\x95\x95\xac\x69\xbd\x5a\x8f\x29\x33\x2f\x89\x39\xbe\x66\x83\xd6\xd6\x76\x22\x73\x23\x24\x3c\x98\x8c\x2d\xc7\x76\xc9\x8d\x3a\xb3\xed\xe4\x6e\xbd\x4f\xf0\xb4\x09\x49\xdc\x9e\x91\x1e\x54\xa8\x6c\xc1\xf2\x06\x52\xcc\xe7\x0d\xad\xa9\xd0\xcc\xf0\x4f\xeb\x84\x5f\xd9\x04\x28\x3c\xcc\x3e\x1d\xcb\x63\x33\xac\x20\x38\x1c\xca\x97\x99\xdf\x40\xe5\xb4\x3e\x35\x86\xac\x34\x6b\x3a\x0a\x72\xbe\xae\x17\x8c\xdc\x34\x53\x56\x30\x0d\x8b\xcf\x96\x3c\xd3\x6e\x90\x19\x6c\xc2\x96\xa3\x9f\xd1\x06\xf3\xb9\x1e\x1e\x79\x33\x91\xb6\x78\x50\xc6\xcc\x9b\xa4\x55\xbb\xb4\x36\xb4\x19\x0a\xaf\x3d\xbc\x80\xc0\xb5\xbb\xda\xdb\x28\x6e\x6f\xe6\x27\xee\x24\x68\xdb\xbd\xb9\x26\x4c\xef\x23\x9c\xd9\x6f\xf2\x96\xad\x78\xe0\x50\x11\x9a\x7d\xff\xa8\xad\x5e\xd1\x56\x31\x46\x04\x5a\xcf\x77\x16\xc7\x78\x5a\xcf\x9b\x12\x52\x63\xac\x36\xda\x16\x4b\xed\x9f\x9a\x01\xbe\x9a\x03\x45\xce\xde\xbe\x0c\x61\x1d\xc2\x72\x17\x0e\xf4\xa3\xdf\x20\x1f\xd2\x7a\x42\xc9\xc5\x8c\x50\x2f\xf5\xf5\xa2\xa8\x7d\xa9\xad\x69\xcb\xfa\xcf\x3c\x81\xce\xb4\xc7\x45\x65\x44\x58\x10\xd4\x03\xa0\xed\x6c\x41\xc5\xdc\xf0\xaa\x97\xb2\x31\x13\xfb\xe6\x1b\x98\x44\xcd\xf2\x26\x63\xfd\xe2\x6c\xcd\xf3\xe2\x72\x9f\xbf\xb1\xfe\x39\x87\xe8\x6f\x94\x51\xa6\x32\x5a\xb9\xa5\x09\x57\x0f\xc5\xdc\x6f\x09\x3f\x66\xc7\xe4\xd9\x37\xc1\x47\xcf\x80\xe2\xbe\x81\x88\x66\x2a\x36\xd5\x1a\x66\x5f\x70\x0d\xfc\xe3\x59\x38\xc2\x31\x39\x37\x74\x41\xb8\x8b\xdf\xdb\x20\x7b\x76\xda\xee\xec\x88\xd4\x6c\x4e\xeb\xbc\x60\x3d\xd3\x04\xe5\xcc\x6b\x19\x08\x47\x63\x4f\x15\x30\x46\xc8\x1e\x12\x52\x1f\xa7\xf1\x1f\x7e\x2e\x6e\x85\xa6\xea\x46\x9d\xa0\x3e\x33\xce\xa9\xa6\x63\x5a\xa1\x05\x87\x4b\x71\x82\x36\xd4\xb1\x2d\xcd\x37\xa6\xf6\xf6\x8e\xfd\xc9\x3e\xf9\x9d\x05\x59\x1a\x53\xff\x2d\x2e\xc6\x74\x0c\xc5\xea\x7a\x5b\x5c\x76\x10\x39\x1c\x65\xcd\x8c\xa8\x0d\x99\x82\xab\x9e\xb7\x15\xa7\x61\xe5\x8e\xc9\xa5\xd4\x6d\x0d\x5d\x1f\xda\x1c\x51\x41\x30\xe4\xb3\xe7\x97\xd7\xef\x7f\x9c\xbc\xbb\xb8\xbc\x1e\xd8\xed\xc0\x6e\xa1\x0d\xec\x76\x60\xb7\x3d\x06\xee\xc9\x6e\x99\x58\xee\x8a\xd5\x7a\x73\xd2\x36\xfb\xdd\x5a\x71\xa3\xc8\x4c\x92\x27\x94\x89\x73\x2e\x96\x1f\xa8\x51\xcc\xaa\x9a\x29\x10\xff\x8d\x3e\xb8\x2d\xd6\xd0\x7e\x01\x0c\x6d\x6d\xd8\xd9\x57\x9b\x8a\xb3\xc3\x44\x9a\x84\xe1\xf3\x97\x01\x0e\xee\xb6\x5d\x6b\xa1\xb7\x29\x39\xfb\xe5\xe2\xe5\xf9\xe5\xf5\xc5\xf7\x17\xe7\xef\x77\x1a\x09\x1c\x59\xa3\x27\x5d\x0c\xf0\x43\xc4\x99\x88\x61\x5a\x41\xa8\xaa\xd9\x92\xcb\x46\x15\x2b\x5f\xc3\x71\x3b\xbb\xda\xcc\x6a\x12\x31\x14\x50\xb1\xf2\x75\x35\xb7\x0e\xb8\x26\x8a\x6d\x13\xab\x22\x86\xdf\xb1\x40\x66\x89\x48\x21\x96\x45\x8c\xbf\x45\xa0\xfb\x7c\xe1\x2c\x62\xdc\x5e\x62\xdd\x7d\x22\x5a\x04\x1d\x5d\xe1\x2e\xa2\xa3\x6e\xcc\xf9\xee\x39\xd9\xf7\xb5\x2c\x13\x71\xb3\x2b\xb4\xca\xba\x08\x81\x6d\x57\xf5\xc0\xa2\xf9\x76\xc4\x63\xab\xe8\xb5\x30\xbf\x46\xc9\x2c\x2b\x1d\x51\x11\x3e\x49\x35\xc2\x34\x85\xfb\x30\x08\xf8\x2d\xad\xfe\xce\x56\xef\x59\x24\xa0\x79\x77\xbd\x21\x8a\x40\x11\x4a\x6e\xd8\x0a\x43\xcf\xce\xdc\x60\x71\x98\xee\x7b\x58\xcc\xf1\x86\xc5\x14\xda\x4c\x59\x85\xf1\x86\x45\xa4\xd3\xb9\xb6\x51\xa2\xcf\x6c\x21\x88\xf9\x66\x4f\xf7\xaa\x28\xe1\xbe\x56\x9d\x0c\xa5\x47\xfb\x3c\x24\x58\xb8\x07\x03\xf3\xca\xa5\x11\x4d\xd8\xed\x89\x4d\x60\x19\xdf\x72\xbd\x18\xe3\xdd\x51\x27\x10\xe3\x7d\xf2\x3b\xf8\xbf\x04\xb4\x5d\xbf\x7b\xf9\xee\x5b\x72\x9a\xe7\x36\x1d\xb8\x51\x6c\xd6\x14\x98\x64\xab\x8e\x09\xad\xf8\x07\x56\x2b\x2e\xc5\x88\xdc\x70\x91\x8f\x48\xc3\xf3\xef\xf6\xe9\x30\x49\x17\x35\x92\xf6\x40\x5d\xd9\x68\xa6\xf0\xd5\xf7\xbc\x90\x20\xee\x12\x5c\x31\x87\xa6\x6e\x05\xd8\x44\x4b\x13\x97\x07\x8a\xad\x53\x16\xa2\xa4\xd5\xd8\xaa\xd8\x5a\x96\x3c\x8b\xe8\x19\xce\x46\xda\x87\x27\xfa\xfa\xb6\x2f\x17\xa6\x87\xfb\x5a\x28\xf9\xb7\x44\x35\x00\x2c\xaf\x48\xc9\x34\xcd\xa9\xa6\xc7\xe6\xf2\x8c\xba\x3f\xaa\x8a\x66\x6c\x44\xfe\xc7\xff\xb2\xa0\x53\x56\xa8\x9f\x0e\xfe\xf3\xef\xe7\x3f\xfe\x7f\x07\x3f\xff\x4f\xf8\x19\x48\x1a\x60\x09\x0b\xbf\x10\x39\x05\x08\x56\x11\x32\x67\x97\x40\x1d\xfc\x68\x95\x94\xd3\x2c\x93\x8d\xd0\xf6\x03\x80\xd0\x3b\x5e\x48\xa5\x2f\x26\xfe\xc7\x4a\xe6\xeb\x3f\x45\x95\xa3\xde\xcb\x27\x1b\xf6\x36\x02\x2f\x04\x5b\xba\x87\xbb\xe5\x8e\x89\xb9\x8f\xed\xd5\x1d\x63\xa8\x7c\x49\xe1\x9f\xdf\xbb\x25\x30\x72\xad\x07\x39\x15\x80\x55\x68\xd4\x94\x6e\xe5\xa4\x67\xcb\x17\x51\xca\x12\xb6\x84\xdc\xda\xef\x60\xe2\x05\x83\x15\xb1\xab\x85\x1c\xc0\x8b\x3e\x4e\xc1\x6e\xe3\xd0\x4e\x27\x17\x64\x89\x2b\xbc\x47\x8b\xf3\xa5\xd8\xb5\x0b\x6e\xf9\x7e\xaf\xd9\x76\x18\x82\xd3\x31\xf5\x7c\x4b\x00\xd9\xc1\x7d\x6e\x11\x2d\x95\xaf\xe2\xc1\x94\x8e\x95\x83\x0e\xb1\xcb\xe3\xac\x6a\x46\xb6\xfb\xe3\x92\x95\xb2\x5e\xf9\x1f\x7d\xe0\xd0\x58\x69\x59\xd3\x39\x40\x4c\xe0\xe0\xf8\x67\xfe\x27\xfc\xc3\x0e\x79\x9b\x7f\x8d\xb6\xb4\xac\xa9\x8d\x88\x59\xac\xdc\x13\x15\x97\x33\xbf\x97\x2c\xdb\xed\xdb\x9e\x70\x6c\x7f\xac\x2e\xd3\xeb\x20\x07\x6d\xac\x23\x68\x38\x7e\x15\xc1\x80\x61\x41\xd1\x46\x5e\x60\x45\x2b\x9b\x58\x92\x25\xad\x55\x4c\x5d\x3b\x6c\x09\x99\x74\xce\x97\x5c\xc9\x08\x58\x0a\xdf\xd1\xa6\x44\xed\x92\xaf\x2d\x42\x2d\x86\xb0\x7b\x93\xfd\x5d\x05\x68\xf5\xfe\xb2\xaf\xbd\x66\x2f\x9e\x45\x93\x54\x51\xad\x59\x2d\xbe\x25\xff\x7d\xf8\xcf\xdf\xff\x3a\x3e\xfa\xee\xf0\xf0\xa7\xe7\xe3\xbf\xfd\xfc\xfb\xc3\x7f\x1e\xc3\x3f\xfe\xe3\xe8\xbb\xa3\x5f\xdd\x0f\xbf\x3f\x3a\x3a\x3c\xfc\xe9\xef\x6f\x5f\x5d\x4f\xce\x7f\xe6\x47\xbf\xfe\x24\x9a\xf2\x06\x7f\xfa\xf5\xf0\x27\x76\xfe\xf3\x67\x76\x72\x74\xf4\xdd\x37\xd1\xa4\x27\x28\x5f\x87\x2d\x65\x11\xbb\x6e\x8f\x49\x8e\xdf\x17\x2c\x21\x8e\xcd\x1d\xaf\xd4\xf7\xdf\xe5\x29\x7e\xdb\xbe\x66\x5e\x0a\xd9\xa3\x0b\xfe\xa5\x04\x0d\xc5\xb2\x9a\xe9\xc7\x30\x4a\xe2\x48\x01\xde\xe6\x81\x22\x5e\x89\x7b\x6a\x2f\xe8\x6f\xc1\x4e\xe9\xf4\x1c\xdc\xd7\x56\x74\x9f\xd5\xb2\xb4\xd8\x84\xe8\xb4\x5d\x42\x9e\x9e\xfd\xde\x0d\x8b\x30\xe8\xbb\x36\xd8\x35\x7b\xb7\xc1\xae\xb9\xde\xbe\x4e\xbb\xe6\x15\x5e\xa7\xdf\xa0\x51\x93\x89\x65\x5f\x77\x65\xca\x18\x2d\xa7\xda\x86\x75\x33\x3e\x2f\x10\xa2\x7f\x8c\xec\x0d\x5b\x29\x1f\x75\xd1\x06\xde\xa2\xd8\x52\x6e\x8f\x92\x21\xa7\x45\x41\xb8\x40\x26\x6c\x3a\xe8\x35\x7a\x9b\x61\x8f\x3a\xaf\x2d\xbc\xc3\x96\x66\xaa\xbe\x28\x6d\xa7\x4e\x15\xa4\xc9\x40\x9e\xd6\x3f\x30\x0d\xea\x06\x33\xa3\x94\x86\x25\x71\xd5\xc7\x7a\x91\xe3\x55\x8d\xb6\xf2\x2a\x55\x4a\x66\x98\x35\xe6\x13\xad\xa1\x6c\x88\x5d\x1e\x98\x81\xa6\x37\x10\xc1\x92\xb1\x9c\x89\x87\xe6\xf3\xb9\xf6\x01\x33\xce\xdd\x3e\x4c\x57\x50\xfd\x4a\x2c\x5d\xd5\xdd\xdc\xa1\x14\xc0\x8c\xd3\x8d\xfb\xb4\x42\xf6\xcc\x1d\xb6\xb1\x02\x41\xe4\x1e\x48\x14\x6d\x5e\x17\x04\x3c\xca\x59\xeb\xc5\xe9\x77\x7a\xa3\x25\xc4\x78\x79\xcc\x07\x00\x44\x09\xda\x1b\x82\x58\xeb\xde\xea\x0a\x60\x4f\x21\x66\x22\x5e\x34\x4b\x2b\x96\x7d\x09\x91\x6c\x5f\xc5\xb1\xc7\x17\xc5\x12\x89\x61\x69\x44\xb0\x07\xb8\x95\x53\x8a\x5d\x69\x44\xae\x2f\x61\x2b\xa8\x6a\x36\xe3\x77\x89\x18\xd7\xa9\x68\x0d\xaa\x3c\x67\x42\xf3\x19\xc7\xf4\xfc\xaa\x66\x15\x13\x98\x6f\x4c\xb3\x05\x3c\xa0\x56\x7c\x6a\x83\x9a\xf6\x31\x1e\x18\xb5\xdb\xb4\xbc\xfd\x6a\x9b\x66\x3d\x30\x76\x32\x30\xf6\x88\x36\x30\xf6\xcf\xd2\xab\x9f\x3a\x57\x87\x6c\xcb\x9d\x03\x3e\x23\x19\xc0\x0f\xbe\x64\x5e\x9c\xbf\x65\x2d\xb8\xc3\x09\x8c\xdc\xe7\x32\x45\x1d\x67\x18\x75\xd2\x14\xc5\x8e\xcb\x91\xc2\xb2\x57\x4d\x51\x58\xd4\xaf\x7e\xab\xff\x4e\x00\xdb\x3c\x85\x72\xf3\x23\x72\xc9\x96\xac\x1e\x91\x8b\xd9\xa5\xd4\x13\x54\xe8\xe2\x4b\x52\x62\xe7\x84\xcf\xc8\xb7\x05\xd5\x4c\x69\xa2\xb1\x6e\x75\x80\xed\x2d\xeb\xce\xa0\x6d\xf5\x88\x1d\xea\xd9\xf1\x67\xf3\x77\x0e\x1a\x69\xbc\x9b\xb3\x5a\xf0\x19\xcb\x56\x59\x11\xcf\x26\xde\xb8\x9e\x5c\x5c\x3f\xa4\xac\x58\x1f\xfb\x36\xe8\xac\xaf\x10\x38\xb5\x92\x4a\x5f\x69\x5a\xeb\x24\xe8\xa9\x11\x22\xcd\xc4\x11\x02\xc5\xe5\x69\x51\xb0\x9c\xf0\xb2\x64\x39\xa7\x9a\x15\x2b\x42\x67\x9a\xd5\x9d\x72\xef\xe6\x7b\x50\xd0\xda\x55\x94\x67\x64\x41\x45\x5e\xb0\x1a\xea\xfa\xf6\x2c\x77\x4f\x6c\xd2\x54\x67\x1c\x57\x9d\xd7\x17\xbc\x77\xd8\x49\x34\xcb\x64\x9d\x43\xea\x92\x74\x18\x43\x30\x89\x18\xfe\x64\xda\x3b\x78\xd9\x4b\x2a\xe8\x9c\x81\x5d\x76\xa3\x3c\x22\x14\xcd\x54\x41\xb5\xfd\x85\x94\x37\x24\x93\x65\x55\xc0\x4d\xed\x3d\x74\x7f\x06\xe0\xff\x39\xf6\x97\x70\x6c\xa8\x52\x27\xbf\x6b\x3f\x82\x5f\xf4\x24\x2e\x81\x32\x90\x42\x15\x60\x77\x2c\x8b\x91\xe7\xba\x36\xc5\x3b\x96\xf9\x57\x01\x2d\x89\x88\x7a\x07\x68\x40\xf4\x26\x2a\xf3\x2d\x91\x8f\x39\x95\x5f\x37\x02\x12\x24\x6c\xa9\xdd\x96\x67\x48\x96\xab\x4a\x6a\xa9\x84\x9a\xd5\x08\x21\x06\x98\x21\xae\x50\x69\xe7\x1a\xa2\x29\x7f\xa3\xfc\x87\xcb\x23\x8b\x26\xcd\xd1\x62\x68\xab\xa5\xd4\xe4\xf0\xe0\xe4\xe0\x68\xc3\x37\xd3\xad\x71\x09\x6a\x78\xd6\x4e\x4a\xf1\xb2\x82\x92\x2d\x2c\x3b\xc8\x47\x84\xeb\x3e\xb0\x6e\xeb\xcd\x3c\x88\x88\xfe\x08\xab\x62\x81\x54\x46\x44\x49\xa2\x6b\x9a\x73\x6b\x28\x81\xdf\x9a\x2f\xe9\xba\xb1\x60\x8e\x87\x07\xbf\x1e\x8c\x08\xd3\xd9\x11\xb9\x95\xe2\x40\xc3\xf2\x1d\x93\x6b\x69\xb4\xba\xf8\xd0\x25\x47\xc8\x4a\x36\x44\x30\x66\x51\xe0\x3c\xde\xab\x79\x5b\x88\x6c\x34\x82\x6d\x51\x1d\x03\x00\x13\xb6\xf3\x3b\xae\x5d\xcd\x79\x39\x23\xcf\xe1\x34\xe1\xfb\x44\xa8\x22\x05\x5f\xb2\x93\x05\xa3\x85\x5e\x60\xc4\xa6\x90\x62\xfc\x2f\x56\x4b\x80\x8b\x11\xf6\x93\x58\x32\xe2\xdc\x24\x61\x8b\x70\x99\x6c\x12\x14\xa9\x45\x9b\x67\xe8\x15\xeb\x2d\xa2\x90\x75\x96\xf1\xfa\xfa\x7a\xf2\x8a\xe9\x35\xae\x6b\x46\x71\x71\xb4\x01\x24\xe9\x1e\xb0\xdf\x34\x01\x3e\x63\x52\xc9\x7a\x1f\x5e\x81\x85\x54\x51\x7b\x49\xbe\xc0\x13\xf0\x5a\x2a\x8d\x45\x5a\xb0\x7e\xa5\x60\x99\x39\x04\xdd\xa0\x50\x87\xf5\x7a\x31\x39\x26\x3f\xca\xc6\x2c\xc8\x94\x4e\x8b\x15\xb9\xa5\xc2\x1a\x3c\xe3\x22\xb9\x4c\x7b\x66\x48\x79\x66\x38\xbc\x39\x90\xaf\x19\xcd\x59\xad\x80\x81\x32\x1a\x19\xb3\x9d\x30\x68\x24\xa0\x2d\xe9\x56\x9e\x35\x4a\xcb\x92\x2c\xec\xb4\xbb\xd8\x31\xf6\x72\x1e\xc3\x05\x76\x00\x02\x35\xab\x90\xc9\xda\xbf\x79\x72\x2c\x74\x83\x75\xe1\xba\x77\xaa\x37\x67\xe1\xb2\x99\x55\xf3\xa9\xe9\x02\x17\xcb\x1c\xd5\x04\xc1\x4e\xc9\x62\x16\x49\xc2\xb8\x45\x12\x87\x2a\xb3\xde\x11\xc4\x65\x44\xf7\x94\x2e\x14\x92\x24\x0b\xf7\x23\x5f\x24\xe4\x8f\xd8\x28\x1f\x7b\xf8\x30\x25\xaa\xbf\x6d\x74\x5b\xe7\x41\xe5\x8e\x8c\x0a\x29\x78\x46\x0b\xfe\x2f\x96\x93\xa6\x92\xc2\xc6\xf7\x83\xe4\x99\x51\xc5\xc6\x10\xc2\x24\x90\x9d\xab\x00\xdf\xc4\x70\x07\x2d\x25\x88\x63\x10\xb0\x61\xd8\x3d\x52\x9d\x86\xd4\xa4\x81\xe9\xd1\x60\x3d\x61\xdb\x70\xd2\x75\x36\x2b\xcd\x89\x27\x29\x57\xa0\x4a\x90\xb7\xb7\x99\xb5\xa7\x25\xa1\x59\x06\x20\x2b\xf8\xa2\x00\x6f\xc4\x32\x66\x7b\xf3\xb4\x1a\x29\x6d\xdf\xc4\x23\x74\x35\xd6\x44\x34\xe5\x94\xd5\x6d\xca\x73\xad\x37\xd7\x34\x32\x60\xb0\x33\x2c\x0e\xe7\xbc\x5a\x4e\x0c\xa0\x62\xce\xc8\x0b\x33\xf2\x5f\xfe\xfc\xe7\x3f\xfe\x39\xc1\x38\x66\x7a\x3e\x10\x51\x90\x8b\xd3\xcb\xd3\x5f\xae\x3e\x9c\x01\x06\x50\x6c\xf7\x89\x72\x69\x52\x67\xd2\x24\xcd\xa3\xf9\xa2\x59\x34\x90\x92\x1c\xcd\x08\x53\x5f\x89\x2b\xa0\xca\x1c\xc2\x46\x21\x6e\x90\x55\x1b\xac\x35\xd8\x95\xd2\x8f\x3f\x9d\xa1\x5f\xc9\x30\xac\xbd\xe0\x54\xaa\x60\xac\x4a\xa6\x91\x5f\x99\xde\xd6\x03\x2a\x73\x57\x7c\x14\xcc\x34\x5d\xeb\xb7\x2d\x3b\x03\x54\x90\x29\x9b\xc9\x9a\x91\x29\x83\xa5\xf7\xb6\xfa\x27\xa4\xb9\x2b\x96\x49\x91\xc7\xc8\xef\xa9\xe4\x51\x4b\x49\xd2\xdb\x78\x85\x7d\x3a\xfb\x6b\xfb\xc8\xd8\xc1\x40\x0d\x34\x3b\x9d\xe6\xe4\xa7\xe1\xa0\x98\x4e\x0a\xbd\xfd\xe5\x4f\xfd\x5d\x4d\x59\x75\x25\xb3\x9b\x84\xc6\xad\x48\xd6\xf6\xd2\xdc\xc1\x0c\xbd\x6a\xd7\x67\x13\x24\xce\xec\xcc\xe5\xbb\xeb\x36\x77\x1c\xe2\xe8\x5b\x07\xe9\x6b\xeb\x77\xa3\x22\x27\x37\xac\x8a\x53\x0d\x1d\x04\xdb\x94\x66\x37\xb7\xb4\xce\xc1\xa7\x45\x35\x9f\xf2\x82\xeb\x15\x18\xb7\x6b\x06\x49\xed\x42\x62\x92\x16\x72\x09\x69\xe1\xb6\x51\xa6\x8d\x43\x6d\x0c\xdc\xc8\xe0\x57\xb3\x6a\xc4\x8c\xf2\xc2\x48\x21\xb6\x0e\xb7\xcd\x20\xc8\x2a\xef\x78\x0c\x1d\xfc\x4f\x88\xfd\x3c\x55\xc3\xe1\x41\x5b\x07\xec\xa1\x06\xc0\xd8\x24\xdb\xa7\xad\x2e\x58\x0e\x8e\xe8\x04\x83\xba\xf0\x90\x36\xa8\x0b\x3d\xd5\x85\xaa\x66\x57\x5a\xf6\x96\x49\x93\x05\xb2\x20\x19\xf7\x84\xb1\x58\x51\x95\xde\x1b\x5f\x92\x37\x0c\x8b\x92\xf5\x26\xe0\x74\x72\xe1\xdd\x58\xb2\x13\x43\x82\x69\x6f\xae\x22\x59\xc1\x97\x4c\x30\xa5\x4e\x20\x62\xa5\xa9\xd0\x46\x0c\x6f\x5c\x53\xb3\xfe\xd1\x33\x55\xcd\x58\x09\xeb\x38\x6a\xc1\x09\xcc\x74\x99\xc0\x5f\x32\x9d\xa1\x8b\x3a\x78\x35\x85\xd4\x7e\xb9\x66\x51\x9e\xf3\xa0\x78\x58\x4d\xd5\x82\x01\xee\x2d\xbb\xe3\x5a\xe1\xa0\x13\x48\xe1\x77\x2b\x6e\x04\x87\x79\x4d\x33\x46\x2a\x56\x73\x69\x84\x8d\x46\xe8\x5c\xde\x0a\x32\x65\x73\x2e\x94\xdb\xb1\x18\x92\xdc\x91\x80\x08\x1d\xae\x7c\x11\x92\x63\xf2\xbe\x03\xfb\x6b\xc1\x4a\x32\xd9\xf2\x4c\xbb\x44\xa3\x44\x4b\x02\x52\x0c\x1c\x83\x86\x16\xc5\xaa\x3d\x78\x2e\x2d\x53\xdf\xbf\x42\xfd\x0f\x04\xae\xec\x61\x23\x60\xa2\x39\x2b\xe8\x0a\x13\x10\x67\x5c\x80\x21\xb7\x56\x47\xc7\xf1\x21\x4f\xbd\x09\x94\x75\xd0\xe7\xbd\x27\x83\x2b\x52\x33\x9a\x2d\x62\x24\xbb\x21\xb6\xea\x53\x6d\x88\xad\xea\xd9\x86\xd8\xaa\x87\xb6\x21\xb6\xea\xa1\x6d\x88\xad\xda\xa7\xc0\x80\x21\xb6\x6a\x30\x91\xac\xb7\x21\xb6\xea\x63\x6d\x88\xad\x1a\x62\xab\x3a\x6d\x88\xad\xfa\x8c\x36\xc4\x56\x7d\x66\x1b\x62\xab\x86\xd8\xaa\x21\xb6\x6a\x88\xad\x7a\x58\x1b\x62\xab\xfa\xb7\xc1\x59\x32\xc4\x56\x45\xb5\x21\xb6\x6a\x88\xad\x1a\x62\xab\x86\xd8\xaa\x7b\xdb\x10\x5b\x35\xc4\x56\x6d\x6d\x83\xe1\x70\xa3\x0d\xb1\x55\x5b\xda\x10\x5b\xf5\xb0\x71\x06\x75\x21\xae\xb3\xe4\xea\x82\x8b\x13\x9a\xd4\x72\x1a\x0f\xaa\x04\xbd\x28\xfb\xc4\x3c\x49\x48\xa5\x98\x08\x86\xc7\x89\x5e\xd8\x93\x50\x8f\x04\x11\x0b\x29\x99\xeb\x9e\x46\x2a\xec\x67\x94\xc2\x3e\x46\x28\xec\x22\x3a\x61\xe7\x91\x09\x69\x5c\x6a\x09\xdc\x69\xd1\x4f\x98\x0d\x3c\xbd\x5e\xd4\x4c\x2d\x64\xd1\x9b\x2f\xa4\xe2\x09\x6f\xb9\xe0\x65\x53\x9a\x2b\xa6\xcc\xd5\xe7\x4b\x1f\x1c\xab\xbc\x22\x85\x31\xb3\xe8\x14\x34\x5f\xe4\x39\x83\x2a\x7c\x94\x17\xe6\x04\x00\x68\xdd\x82\x2e\x0d\x5b\x50\x4d\x96\x31\x96\xc7\x28\x2f\xa1\xb5\xea\x8f\xc7\x9e\x42\xac\x24\xc1\x15\x79\x11\xf7\x22\xc4\xc9\x33\x81\xd2\xfe\xc7\x3f\xf4\xea\x63\x5e\x57\x69\x5e\xce\x57\xef\x27\x67\xc1\xcb\x49\x85\x7b\x38\xb9\x58\xca\x02\x76\x83\xe2\x97\x8c\xdc\xbc\xc3\x67\x34\x5e\x89\x8c\x52\x20\x53\xbc\xe2\xb1\x3a\x52\x57\x3a\x34\x6a\x4c\xd7\x11\x32\x87\xbd\xc4\xe2\xd4\xc7\x8f\xa0\x86\xa4\x12\xed\xe3\xaf\x03\x01\x93\x20\x4c\x7c\x5f\x64\xa4\x2b\x24\xc7\x5b\x13\x03\x0d\xd4\x52\x0a\xd1\x5d\x05\xcd\xfc\xde\xc0\xfe\xbd\x86\x87\xee\x6c\xc1\xb2\x9b\xf7\x18\x68\x12\x45\xc6\xa1\x62\xcc\x07\x50\xcf\xb9\x5e\x34\xd3\xe3\x4c\x96\x27\x86\x81\xe0\x7f\xa6\x85\x9c\x9e\x94\x54\x69\x56\x9f\xe4\x32\xb3\x6f\xf0\x38\x33\x14\x70\x31\x3f\x2e\xf3\xa3\xe3\x7f\xfb\xb7\x28\x22\x2e\xac\x4d\xcc\x66\x2f\x04\xc0\xbe\x60\x60\x47\x56\x4d\xa6\xcc\xb0\x7f\x09\xe6\xab\xa0\xf4\x8e\x59\x95\xf8\x53\x1a\xf1\xda\x46\xc6\xfd\x3d\x7e\xcc\xdf\xc0\x6d\x49\x02\x33\x5d\x4a\x66\xb0\x1f\x71\x7d\x5f\x2c\xa6\x2f\x59\x78\x6d\x82\x58\xbe\x3d\x8a\xe3\xdb\x1b\x85\x63\x5f\x62\xf7\xf6\xb0\x8e\x6b\x82\x78\xbd\x14\xb1\x7a\xe9\xe2\xf4\xf6\xb5\xdc\xe9\x17\x8b\xcd\xfb\x2a\xe2\xf2\x12\x5a\xad\x13\xc5\xe3\x3d\x46\x2c\x5e\x92\x59\xc7\xc6\xe0\x3d\x5e\xfc\x5d\x9a\xe9\xa6\x54\x12\x23\x6f\xee\x0e\xe2\xed\x1e\xc3\x79\xf6\xc5\x1c\x67\x09\x9c\x66\x29\x1d\x66\xc9\x9c\x65\x5f\x2c\xae\x2e\x3e\xa6\x2e\xa9\xca\xfe\x28\xb1\x74\x29\xe3\xe8\xa2\xf7\x97\x0b\xae\x39\x2d\x5e\xb2\x82\xae\xae\xe2\x62\xaa\x52\xed\xc4\xe5\x46\xdc\x15\xda\x86\xbb\x91\x77\x0b\x6a\xeb\x0f\xb3\xdc\x05\xde\x39\xef\xab\x95\x54\xc1\x71\x8a\xf3\x8b\x8a\xc2\x7b\x60\x22\xfa\xad\xac\x6f\x0a\x49\x73\x75\x52\x49\xfc\x4f\x9b\x86\x1e\xe4\x9f\x47\x49\xd3\xfb\x61\x83\xc6\x64\xff\x3d\x39\x35\xaf\xe5\x2d\x91\x33\xcd\x04\x39\xe4\xc2\x9d\x9c\xa3\xc0\x98\xd2\xfa\x20\xa2\x9d\x0a\xa6\xd7\x17\xcf\xdd\x20\x4f\xcf\xb9\x00\xee\x17\xa5\xf6\xda\xbd\x64\x69\xfc\xb4\x7f\xc9\x7e\x71\xd6\x14\x5d\x1f\x13\xfa\x9d\xd2\x38\x98\x5e\xb4\x15\x4b\x5f\x00\x3d\x9e\x15\x51\x91\x13\x0b\x1a\xf3\xf4\xce\x49\x74\xd4\x68\x57\x07\xf1\x61\x9e\x9f\x72\x47\x5d\x9f\x4d\x06\x6f\xd4\x7e\xd9\x47\x77\x14\xc2\xf8\xf4\x34\xae\xc7\x0f\x59\x1c\x34\xae\xdf\x8a\xc6\x15\xe0\x35\xbd\xaa\x69\xc6\x26\xfb\x24\xc0\x39\x06\xd2\xe6\xdb\xb4\x72\x9c\x67\x17\x82\x31\xcc\xc3\x68\xd1\xb8\x00\x78\x6a\xd6\x14\xc5\x0a\xcd\x7d\x1d\x68\xb6\xfe\x47\xeb\x7a\xc1\x36\x30\xad\x3a\xd9\x40\x01\x75\xad\x7e\x52\xd5\xd2\x4a\x25\x75\x23\x84\x79\xad\xec\x75\x32\xc4\x1b\x7d\x44\x31\xd1\xdf\xf2\x4d\x3b\x88\x5b\x8a\xcf\xcd\x72\x19\x09\x03\xc0\xb8\xda\x4c\x80\x0e\x21\x66\xd4\x99\xac\x33\x3e\x2d\x56\x64\x41\x0b\xa3\x30\xdd\x72\xbd\x20\x94\xdc\xf0\xa2\xb0\xdd\xf4\x5f\xa8\x2b\xa6\xd1\xb9\x8b\x52\x4d\x21\xc5\x1c\x16\x83\x22\x21\xec\xae\x62\x99\x19\x33\x2b\x18\x15\x4d\x85\x74\x1a\x19\x69\x25\x9b\xda\xd1\xd9\x7f\x78\xe7\x5a\xf6\x32\x95\xe0\xc5\xc8\x2d\x79\x17\x9b\x6d\xf3\xcc\xb7\xd6\x5f\xc5\x72\x0b\xab\x76\xcb\x15\x1b\x41\x9f\xbd\x69\x42\x5a\xe4\x92\xd5\x35\xcf\xad\x8b\x17\x7f\x57\xd5\x72\xc9\x73\xf4\x6b\xbb\x63\x61\xa4\x9d\xfe\xf3\xff\x00\xfd\x3a\xd6\x2a\xa4\x18\x0b\x36\xa7\x20\x22\x5b\x86\x86\x11\x8e\x38\x3e\xc6\xd3\x89\x9c\x67\x54\x33\xa3\x40\xcb\xaa\x83\xb9\xb8\xe4\xb4\x37\x25\x66\x3e\xc1\x89\x22\x87\x42\x12\x09\x89\x3a\x8d\xe0\x7a\x05\xce\xb7\x45\xa3\x49\x2e\x6f\xc5\x51\xcc\xc5\xc4\x40\x02\x4a\xa6\x4c\xd3\x36\xcd\xc6\x89\x64\x8a\x30\x41\xa7\x85\xb9\x7b\x10\x40\x7d\xbd\xf5\x00\x90\x19\xa3\xba\xa9\x19\x99\x53\x1d\xc1\x25\xb6\x48\xf4\xb8\x9f\x1f\x3f\x76\x5c\x59\xd7\xda\x8c\x34\x42\xb1\x48\x41\x36\x99\x1a\xd0\x33\x81\xcc\xdc\x68\xd9\xe8\x3d\x79\x47\xee\x33\x1f\xdd\x2e\x78\xb6\x08\x15\x45\x5e\x32\x45\x64\x13\x61\xcd\xeb\xa8\x80\x76\xb8\x94\x5a\xde\x60\x7b\xda\xda\xfa\x7a\x38\x53\x9c\xb0\xcb\x40\x2a\xdf\x92\x84\xd1\x86\x36\x61\x6a\xe2\xcb\xcb\xab\x5f\xde\x9c\xfe\xd7\xf9\x9b\x7e\x47\x00\x78\x9d\x08\x65\xe7\x46\xf0\xff\x6b\x18\xa1\xa5\x34\x9a\x70\x11\xe6\x7f\x8c\xc0\xd8\x19\xfc\x02\xb8\x62\xda\x4c\x91\x9e\x72\xad\x79\x04\x7a\x31\x86\x8d\x88\xc7\xc7\x48\x87\xe9\x1b\xb0\x11\x11\xa8\xd1\x0d\x5a\x71\x73\x80\x10\xcf\x20\x1b\x9d\x12\xc1\xb4\xb9\xe3\xa8\x10\x72\x41\x28\x51\x5c\xcc\x8b\x68\x5d\x30\xda\x22\x12\x6b\x0f\x19\xb7\x33\x98\xf4\x35\x8b\xc4\x1b\x45\x3a\x34\xf4\xd7\x2a\xd3\x19\x04\xda\xc7\xcc\x99\x00\xd8\x5d\x25\x15\x73\x26\x00\x94\x71\x2f\x26\x84\xe6\x79\x1d\x25\x47\x5b\x66\xe3\x75\x74\x4c\x69\xc6\x61\xd1\xfd\x3b\x22\xcf\xc9\x7f\x92\x3b\xf2\x9f\x60\x10\xf8\x4b\xff\xa1\xd2\xa8\xdb\x29\x82\x86\x17\x52\xe9\x8b\x49\xa2\x8d\xfe\xc7\x82\x6a\xe8\xd1\xec\x87\x96\x64\xca\xad\x66\xc6\xee\x34\xab\x8d\x44\x6c\xf7\x30\x76\xe5\xa2\x8c\x0b\x86\xc0\xaf\xe5\x74\xc7\xfa\x5a\x2f\x66\xdd\x50\xe3\x47\x3a\xdf\x30\xf0\x6b\xa9\xf4\xa5\xe5\xd6\x61\x3a\x7e\x48\x47\x49\x75\xb6\xe8\xb2\xfb\x98\x51\xdf\x9a\xb3\x17\x3c\xff\xb9\x84\x87\x12\xd3\xbb\x16\x3c\x82\x39\xec\xcf\x8d\x8d\x8b\x6e\x4b\x77\x74\x3f\x76\xb4\xd6\xcc\x9b\x20\x86\x59\xb9\x2d\x80\x8e\xaf\x64\x7e\x4c\xce\x69\xb6\x88\xa0\xc2\xac\x46\x1e\x08\x03\x95\xcc\x91\x8c\x05\x5d\x9a\x33\x6e\x47\x85\x48\x3b\x14\x5d\xbd\xb3\x0c\x2e\x9c\xe1\x58\x19\x15\x64\x1a\x13\xea\x55\xb3\x19\xab\x6b\x4c\x21\x9c\xae\x5c\x72\x43\xf4\x69\x8b\xe2\x72\x55\x2d\xb5\xcc\x64\xb1\x0f\x47\x65\x62\x69\x81\xb5\x07\xb7\x95\x77\x16\xfe\xf0\x72\x32\x22\xd7\x67\x93\x11\x91\x35\xb9\x3a\x8b\x8b\x05\x09\xb5\xd1\x67\xd7\x67\x93\x67\x3b\xdd\x01\xe2\xdc\x3d\xe0\xd8\xeb\xd1\x49\xc7\x02\x5e\x70\xa5\xc7\x25\xad\xc6\x37\x6c\xd5\x53\xba\x4b\x21\x61\x8e\xfd\xc1\x4a\x32\x21\x5c\xe6\x92\x56\x0f\xee\xad\x66\x34\xe7\x03\xd2\xc0\xe7\xb7\x01\x69\xe0\x33\xdb\x80\x34\xf0\x39\x6d\x40\x1a\xf8\xdc\x36\x20\x0d\xf4\x6e\x03\xd2\xc0\x66\x1b\x90\x06\x1e\xd6\x06\xa4\x81\x87\xb7\x27\x10\xdb\x35\x20\x0d\x6c\x6f\x03\xd2\xc0\x80\x34\x30\x20\x0d\x0c\x48\x03\x6d\xdb\xbb\x48\xda\x01\x69\xe0\x63\x6d\x40\x1a\xd8\xda\xf6\x46\xe1\x18\x90\x06\xee\x69\x03\xd2\xc0\x3d\x6d\x40\x1a\x18\x90\x06\x06\xa4\x81\x07\xb6\xa7\x97\xf7\x32\x20\x0d\x3c\xa8\x0d\x79\x2f\x0f\x6c\x03\xd2\xc0\x80\x34\xb0\xde\x06\xa4\x81\x4f\xb6\xfd\xb0\x41\x0f\x48\x03\x03\xd2\xc0\x47\xdb\x80\x34\x30\x20\x0d\x7c\xb4\x0d\x48\x03\x4f\xc5\x3e\x3a\x20\x0d\x0c\x48\x03\x1f\x1b\x63\xd0\xb8\x1e\xd6\x06\xa4\x81\x01\x69\x60\xa3\x0d\x48\x03\x9b\x6d\x40\x1a\x18\x90\x06\x06\xa4\x81\x01\x69\xc0\xb7\x01\x69\xe0\xa9\xdb\x9e\x6a\xa6\xf8\xbf\xd8\x44\x16\x3c\x5b\x45\x27\x59\xbc\x67\x4a\x36\x75\x66\x5e\x6c\xe8\x96\x54\xd0\xaf\xb7\x2a\x44\x09\xd9\x7b\x96\xb9\xfe\x3e\x58\xb8\x30\x83\xbd\xb6\x6b\xf0\x25\x96\x60\x2f\xb2\xd8\xdd\x04\x2f\xfb\x3b\xfb\xa1\x13\x4d\x6b\x8d\xcb\xd7\xcf\x60\x1a\xad\xb5\x87\x13\xd9\x87\x2c\xba\x10\x78\xc3\x9f\x22\x2d\x3d\xb3\xe5\xf7\x1e\x2e\x5a\x55\x05\x8f\xc9\x47\x24\xe4\xca\x17\x1c\x07\x56\xab\xbe\x25\x59\xd5\x8c\x48\xc9\x4a\x59\x47\x24\x0a\x24\xd0\xe0\x3a\x47\x65\x1f\xf6\xe9\x3d\x12\xe4\x16\x5f\x4b\x58\xff\x15\xea\x0b\x2d\x3a\x8a\xdf\x2b\xee\xd8\x61\x54\x58\xd8\xc5\x6c\x3d\xdc\x93\xeb\x8e\x15\xe8\x52\xea\xf7\xf6\x72\xef\x6c\xbf\xee\x4b\x00\xa4\x5a\x96\x3c\xeb\xf3\x38\xe1\x7b\xb2\x2b\x2c\x9c\xf6\x41\xfb\xec\xc4\x41\x72\xbe\xe5\xb7\xe0\x03\x55\x95\xe9\xc4\xcf\xa9\x17\x41\xb4\xa8\x19\xcd\x57\x40\x46\x06\xa1\x75\xad\xfd\xef\x2b\xcc\x59\xcc\x0a\xca\xfb\xc7\xe3\xa5\xba\xd2\x67\x40\x05\x31\xe7\xb5\x8d\x2f\x87\xbc\x2a\xbf\x59\x23\x1f\x44\xcd\xf1\x8e\x1f\xbb\x8f\xf0\x8f\x47\x11\x9a\x1e\xd5\x70\xba\x40\x89\x01\x55\x96\xab\x50\x4c\xe8\x1f\x2d\xee\xb5\x3b\x41\x68\x51\x2d\x3e\xae\xdf\xc5\xe4\x0b\xbe\x5c\x09\x5a\xf2\xcc\xdd\x96\x53\x3c\x9c\x5c\x8a\x35\xcd\x30\x72\x2a\x48\xbe\x99\x53\x59\x36\x9a\x4e\x0b\x76\x4c\x2e\x30\xbd\x5f\x8a\x62\x65\x74\x76\xc5\xb4\x8b\x35\x88\xc8\xe4\x25\x49\xe2\x4d\x23\x63\x4d\xb7\x4a\xd6\x70\xda\x10\x8f\x80\x09\xc3\x97\xa4\x60\x84\x09\x5d\xaf\xcc\xc1\x9c\xc8\xfc\xca\x9c\xcd\xce\xb7\xa3\x61\x0a\x22\x43\x4c\x53\x84\x97\x46\x86\x96\xa6\x09\x08\x8d\x0f\x06\x4d\x1b\x08\xda\xfa\x01\x10\x65\x25\xcc\x8c\xe9\x1c\x0b\xf3\x36\x6c\xe1\x59\x44\xce\x22\x29\x30\x23\x4e\x64\x6e\x24\x9f\x9a\x21\xe3\xf2\x77\x14\xad\x80\x17\x86\xb8\x1b\x30\xdb\x51\xdd\x8a\x44\x74\x49\x79\x61\x2e\x70\x24\x01\x3e\x0d\x38\x91\xfb\x26\x81\xb8\x9a\x1a\xd4\x81\xc4\x1e\xff\x94\xa0\x0c\xa6\x15\xbc\xe4\xfd\xa0\xee\x48\xc2\x2b\xf0\x06\xa8\x08\x82\xee\xcd\x59\x2c\xe9\x1d\x58\x8b\x68\x29\x1b\xa1\xcd\x3d\xc8\x64\x59\x35\x3a\x90\xba\x9c\x00\xf7\x68\x66\xa4\x4c\x8a\x19\x9f\x5b\x47\xc7\x49\x49\x05\x9d\xb3\xb1\x27\x67\xdc\x3e\x54\x27\xbb\x73\xc0\xd3\xdc\x65\xce\x4f\x52\x64\x66\x52\xad\x59\x2d\xbe\x25\xff\x7d\xf8\xcf\xdf\xff\x3a\x3e\xfa\xee\xf0\xf0\xa7\xe7\xe3\xbf\xfd\xfc\xfb\xc3\x7f\x1e\xc3\x3f\xfe\xe3\xe8\xbb\xa3\x5f\xdd\x0f\xbf\x3f\x3a\x3a\x3c\xfc\xe9\xef\x6f\x5f\x5d\x4f\xce\x7f\xe6\x47\xbf\xfe\x24\x9a\xf2\x06\x7f\xfa\xf5\xf0\x27\x76\xfe\xf3\x67\x76\x72\x74\xf4\xdd\x37\xfd\x9d\x41\xb1\x9e\xcf\x74\x7e\xcf\x44\x5e\xcf\x2f\xe2\xf3\xb4\x49\x3e\x3b\xbf\xfc\x36\x97\x73\xe3\xfa\x5b\x63\xf1\xc7\xae\x7f\x1d\xad\x22\x5f\xcc\xda\xf1\xb9\x22\xb2\xe4\x5a\x5b\x85\x90\x86\xd0\x1c\x6b\xea\xb9\x65\x58\x7c\x86\x4f\x21\x57\x21\x44\x44\xab\xd5\xf7\x26\x4b\x3a\x7f\x1b\x18\x24\x04\xe1\x65\x55\xb0\x92\x09\x0d\x8c\x67\xec\xd4\x17\xb0\xee\x1c\xb7\x33\xc8\xa8\x30\x6a\x2d\xbb\xcb\x18\xcb\x2d\x91\x03\x6f\x0c\xda\xc0\x1b\x07\xde\xf8\xa9\x16\x6d\xa2\x4c\x64\xab\x0a\xcd\x92\x1b\x0e\x07\xc3\x17\xf0\x8a\x39\x0b\x33\x7c\xdd\x27\x8a\xcb\x19\x61\x7d\xb1\xfa\xda\x41\x2c\xfc\x1f\xed\x6b\x90\x72\x20\xad\x74\xb5\xa1\xd3\xaf\x61\x3f\x63\x5e\xaf\xe5\x5f\xca\x05\x4e\xa0\xfe\x21\x45\xaf\xa1\xf7\x02\x49\x5a\xb1\xac\xa9\xb9\x5e\x9d\x49\xa1\xd9\x5d\xaf\x60\xba\x14\xc7\xa9\x8d\x41\xbc\xea\x12\x64\x2d\x61\x36\xaf\xcf\x7e\x46\x64\x85\x30\x4b\xf7\xa2\x86\x2f\x64\x53\xe4\x66\x3b\xeb\x46\xc0\x29\xe9\x77\x3a\x2e\x66\x66\xaf\x31\x28\x05\xf6\x1a\xec\x74\xeb\x24\xba\x70\x11\x24\xe7\xff\x1a\xbe\xa4\x05\x13\x3a\xf8\x8b\x09\x04\x10\x84\x7f\xf4\x15\x9a\x4f\x41\x97\x99\xd4\x7c\xc9\x0b\x36\x67\xe7\x2a\xa3\x05\x3c\xa5\xbb\x96\xcf\x4e\xef\xa1\x0b\xce\x43\x2d\x0b\x45\x6e\x17\xcc\xc8\x2b\x86\x4f\x60\xd0\x12\x58\xf1\xe6\x94\x0b\x52\xca\x3a\xc6\xd2\x63\x07\x55\x18\x35\x65\x44\xae\x8a\xd6\x66\xef\x5d\x74\x14\x32\x98\xa9\x94\x85\x45\x4c\x2b\x56\x2d\x5d\xbc\xbf\x49\x04\xcc\x2f\xf2\x17\xc1\x6e\x7f\x31\x54\x28\x32\x2b\xe8\xdc\x07\x45\x19\x06\xb5\x1e\x6a\x1a\x1f\xb0\x75\xef\x42\x03\x1c\x58\xc3\x08\x2d\x6e\xe9\x4a\xb5\xa1\x6c\xed\xd8\x3c\x42\x8a\x79\x71\x04\xb7\x98\x2a\xe2\xc7\xce\x7b\x77\xf6\x87\x23\xc8\x3f\x3a\x3b\x9d\xfc\x72\xf5\xe3\xd5\x2f\xa7\x2f\xdf\x5e\x5c\xf6\x0f\x58\x91\x9a\xa1\x80\x1d\xbc\x06\xf6\x8d\xb0\xbb\xe0\xdd\x74\xc7\x52\x1d\x83\xbd\x0c\x52\x9e\x45\x2e\x6f\x23\x8d\xc5\xe6\x4c\x31\xda\xef\xe9\xc9\x68\x45\xa7\xbc\xe0\x31\xe2\x65\xaa\xeb\x0b\x20\x7e\x01\x3d\xa0\x51\xe4\xf9\x49\x5e\xcb\x0a\x97\xcf\x05\x64\xc6\x9b\xd9\xbb\x81\x3f\x21\x82\x0d\xdc\x98\x59\x97\x90\x79\x4d\x85\x6e\x23\xfe\xda\xd3\x5c\x37\x42\xf3\x98\x14\xf8\x9d\x1e\x9c\x9d\x43\x62\xd2\x3c\x1d\x1c\xe6\x69\x9e\xb3\xbc\xb3\x6d\x11\x3d\xef\x27\xea\xc7\x99\x9b\x5c\x10\xf9\x43\x26\xef\xae\x2e\xfe\xdf\xda\xbd\x59\x55\x71\x16\xee\x34\x28\xc5\xb5\xac\x92\xed\xee\x7b\x56\xca\xe5\xb0\xbf\xfb\xb2\xbf\x5e\xde\xd9\x79\x5e\xe1\xfb\x46\x84\xd2\x85\x08\x48\x23\xa5\xcc\x23\x58\xf3\xc4\x87\xdf\x77\x7b\x0d\xcb\x00\xd5\x8c\x98\xaf\x08\xcd\x69\x51\xac\x42\x91\x5f\x4b\x84\xaf\x4d\x52\x70\x21\x7c\xab\x66\xb4\x50\x5f\xeb\x83\x13\x23\xa9\x18\xa1\xf5\xad\x6c\x44\x9a\x44\xc5\x88\x13\xe7\x09\x21\x39\x13\x52\x5b\x8d\xd4\x4c\x10\xea\x6d\xd4\x32\x23\x68\x08\x0e\x30\x08\x3a\x52\x43\x84\xd0\x72\x1d\x08\x2a\x5c\xb9\x73\x31\xf1\x14\x61\xcc\x5e\xa3\x98\xda\x2e\xa8\xb4\xa6\xe1\x99\xec\x6f\x11\xab\x19\xcd\xc1\x4a\x52\x51\xbd\xc0\xfc\xd8\x92\xaa\x1b\x96\xe3\x2f\x22\xf3\x02\x7c\x8c\x08\xb8\x79\xdd\xd4\xae\xcd\xfa\xba\xb0\x0e\x50\x71\x30\x4b\x18\x02\x49\x62\xec\xea\x3b\xbd\x10\x11\x2c\xd8\x6c\xc2\x3b\x51\xac\xde\x4b\xa9\xbf\xf7\x50\xd8\xbb\xbe\x1c\xff\xb0\x0a\x76\x37\x9a\x08\x34\x2d\x0a\x24\x8f\xe1\xe0\x00\x6b\x0c\x00\xbc\x63\x39\xa3\xd9\x90\xdf\x2a\x63\xac\x1b\x71\xaa\x5e\xd5\xb2\xe9\x2d\x6d\xa5\x54\xe0\x5e\x5d\xbc\x84\xb7\xaf\xb1\xa9\x63\x42\xd7\xab\x4a\x72\xf4\x8b\x25\x36\x43\xfc\x60\x93\xf4\x42\xce\x16\x9d\x8f\x43\xc8\x5b\xba\x22\xb4\x50\xd2\x6d\xbb\x8d\x70\x5a\x33\xdb\x39\x9b\xa0\xf9\x78\x2a\xf5\x62\xc3\x18\x48\x45\x7f\xe3\xc4\xe6\x78\xa3\x20\x03\xad\x0d\xf6\xe5\x62\x63\x58\x0d\x71\x2f\x55\xcd\x32\x96\x33\x91\x7d\xad\x37\x62\xd7\x09\x51\x70\xab\x2e\xa5\x30\xec\x75\xd7\xf7\xea\xc2\x27\xfb\xd9\xdd\x08\x6f\x11\x44\x62\x59\xb3\x18\x85\xe4\x41\x60\xae\x8d\x8a\x09\x4a\xba\x98\x81\x1d\x0f\x0f\xdd\xdf\x9b\x29\x2b\xcc\x66\xf3\xa2\xc0\xe2\x5e\x54\xa3\x89\x9b\x97\x74\xce\x08\xd5\xfe\x12\x6a\x49\x98\x50\x4d\x6d\xcf\x0d\xef\x1f\xbe\x97\x4b\xa6\x7c\xd9\x05\xaa\xc8\x0f\x17\x2f\xc9\x73\x72\x68\xe6\x76\x04\x12\xc7\x8c\xf2\x02\xf2\x11\xc1\x9d\xb4\x66\x64\x9c\x81\x1b\x5c\xc6\xe4\x26\x5c\x58\x3e\x42\x64\x8d\x4f\xcb\x88\x08\x49\x54\x93\x2d\xdc\x1a\x70\x29\xbc\x9d\xd5\x02\xd4\x44\x05\xf8\x0c\x6c\x27\xdd\x7b\xf8\x83\x62\xf5\xae\xaf\xad\x79\x0e\x7f\x78\xc4\xe7\x30\xd4\x12\xcd\xf5\xef\x6e\x18\xde\xd5\x92\x69\x9a\x53\x4d\xed\x33\xe9\xbe\x30\x9c\xda\xe1\xb1\x8c\x78\x2c\x15\x7b\xc3\x45\x73\x87\xbe\xdb\xbd\xf0\x23\x5c\x9d\x03\x45\x70\xbd\x60\xa3\xe1\x80\x62\xc2\x9a\x4f\x5e\x49\x10\xbd\x7b\xd1\xb9\x46\xa3\x7b\xb4\x6e\x78\x25\x5c\xee\x8c\x51\x84\xa8\xc8\x65\xb9\x41\x24\x24\xf7\xc4\xd4\x2d\x6c\x27\x34\x5c\x4c\xd7\x7e\xdb\x1e\x96\x82\x2d\x59\x44\xad\xc6\xb5\x4b\xf9\xc6\xf4\x66\x16\xc7\x9d\x5c\xe8\x9e\x14\x74\xca\x0a\x9b\x51\x84\x29\xa1\x09\x6f\x58\x22\x6f\x44\x2d\x8b\x74\x18\xa5\xef\x65\xc1\x10\xbf\xc2\x2d\x84\xe9\xfe\xab\x58\x07\xe8\x24\xd5\x3a\x80\x51\xae\xb3\x0e\x60\x06\xfd\x1a\xd6\xa1\x89\x10\x10\xc9\xfa\x3a\x18\x69\xb3\xbb\x0e\x20\x7f\xed\xfb\x3a\x28\x96\x65\xb2\xac\x26\xb5\x9c\xf1\xfe\xb7\x23\xe5\xb3\x6d\x29\x6a\xc3\xba\xd0\x84\xbe\x99\x9e\x88\xcf\x56\xf7\xcb\x34\x2a\x80\xc7\x82\xfa\x50\x8d\xef\xa0\x43\xf6\xf9\xf7\xe0\x39\x07\x6e\xb7\xfe\xc6\xdb\xd1\xfb\x07\x50\x87\x31\x63\x66\x44\xdb\xe1\x6f\xf1\xc5\x4b\x81\xc8\x18\xe1\x1c\x4d\xf2\xe0\xca\x8c\x16\x50\x0a\x3e\xee\x56\x91\xc4\x79\x7b\xeb\x74\x05\x08\x52\x10\x0c\x07\xbf\x0b\x92\x8d\x29\x98\xe7\x9d\xfb\x52\xc8\x9c\x05\xb1\x94\x90\x64\x17\x45\xce\x35\x62\xf8\xc0\x18\x0e\xf8\xca\x48\x7b\x36\x32\x9f\xe5\x9d\x91\xb5\xc4\xb2\x99\x51\x43\xbe\xf5\x05\xea\xcd\xba\x32\x91\x73\x31\x07\x87\xd5\x88\xd4\xac\x40\xb8\x2d\xcb\x9e\x6f\xd0\xe2\x75\x00\x1c\xc7\x11\xe4\xd8\x8d\x23\xdb\x25\x1b\xa7\xa1\x0a\x64\xf0\x19\xbe\x9f\x5c\x91\x67\x6f\xdc\x7e\x3d\xb3\xb8\xb4\x97\xef\xae\xc3\xa8\x64\x2a\x56\x98\x7b\x01\x7f\xb2\xf3\xe7\x34\xa9\x58\x11\x79\xd4\x71\x0d\xfd\xf1\x46\x9f\xe8\x0d\x17\xb9\x05\x94\xea\xec\xa2\x33\xe0\x59\xd5\x30\x6e\x33\x3f\xd0\x82\xe7\xe1\x7b\xf4\x6d\x64\xd1\x35\x7f\x0a\xc8\x78\x27\xd7\xf4\x3d\x2a\xb0\xce\xcb\x36\xfe\xb8\x57\xd9\x13\x98\x92\x84\x1f\x04\xdc\x41\x33\xdf\x31\x11\x72\xcb\x18\x09\xb6\x2e\xfa\x0e\xd8\xb7\x73\x8f\x2c\x20\xff\x40\x8a\x9c\x9a\x9d\x19\xce\xa1\xb9\x98\xab\xd0\x0a\x42\x8b\xd8\x9c\x03\x6c\xdb\xcc\x20\xee\x1a\xcc\x6a\x59\xba\x94\xed\x75\x35\xbf\x83\xdd\x18\x33\xfa\x27\x4c\x18\x5f\xb7\x29\xa2\x30\x2a\xc5\x57\x6e\x88\x98\x97\x8a\x9e\xd5\x66\x05\x35\xa7\xc5\x55\xd5\xbf\x68\x3c\x49\xfc\x5c\xbc\x7a\x7b\x75\xda\xa5\x0c\x84\x61\x8b\x2d\xc0\xe0\x73\x42\xf3\x92\x2b\x05\x1e\x1f\x36\x5d\x48\x79\x13\x35\xe4\xe1\x96\x62\x9e\x41\x6e\x98\xe2\x73\x75\x62\x39\xca\xd8\x2c\xdc\x11\xe1\xa2\xf0\xc9\x2f\x60\x2e\x14\x5a\x59\x17\x42\xf4\xe4\x49\xe6\x67\x0f\x47\x0f\xb2\xfe\x7d\xb0\xf3\xe6\xf2\x00\x00\x04\x1c\xde\x9d\x8b\x1d\x9b\xa7\x2a\x0e\x55\x6d\xbd\xb0\xf2\xf6\xb9\x6f\x29\x07\xbb\x75\x1d\x51\x7b\xdd\xf9\x22\x59\xa9\x3f\x63\x2a\x5d\x51\xc6\x04\xb5\x34\x2d\x49\x24\x67\x08\xb4\xca\x20\x4b\x99\xde\x9b\xbc\x05\xfe\xed\x03\x40\xa6\xb7\x7f\x7a\x90\x0a\x7f\xe3\xb4\x28\xcc\x46\x52\xf3\x4c\x1c\xa8\x30\xc2\x13\x74\x93\x05\x5d\xb2\xb6\x9c\x1c\x9b\xcd\x58\x06\xda\x42\x38\x8b\xf8\x62\x6b\x87\x5c\xbb\xe2\xba\x0e\xed\x4b\x4b\x1c\x9b\x92\x92\xdf\x19\x0a\xc3\x11\xc3\x38\x54\x5b\x6a\x7f\xfb\xc7\x11\x40\xbd\x04\xa2\x0f\x7c\x32\xf2\xc8\xec\x50\x38\x88\xcb\xf7\xd1\xe6\xd9\x32\x1f\x5c\x32\x6d\x34\x35\x5c\xb7\xd0\xfd\x60\x34\xab\xba\x49\x70\x19\x62\x5c\xc3\x24\x74\x0f\x27\xe5\x14\x91\xf7\x01\x5c\xc5\x96\x26\x23\x83\x38\xe1\xed\xb1\x5c\xc7\x64\x4b\x42\xcc\xa3\xb9\x90\xc9\xe7\xbb\x91\xbf\xa0\xb3\x8a\xec\x8b\xc3\x2a\x36\x8f\x17\x2b\xd5\x00\x6e\x76\x74\x12\xef\xa4\xad\xc2\xf5\x59\x28\x84\x3d\xc6\xdb\x71\x2e\x2b\xbb\xeb\x2f\x89\x76\x96\xea\xfc\x8e\x65\x6b\x25\xc1\x6d\xd9\x1b\x73\x9f\xe8\x4d\x64\x44\xcc\xce\x05\xf8\x4c\x96\x25\x15\xe9\xf2\xb5\x22\x39\xe6\x19\x92\xe3\x64\x31\x4b\x9d\x51\x95\x30\x0a\xed\x8e\x65\x8d\x66\x0e\xa9\xab\xc3\x2e\xf1\x4e\x9b\x67\x8a\x8b\xb9\x4d\xc6\x95\xb5\x87\x2e\x88\x22\xcb\xd1\x01\xe8\xab\x52\x6a\x72\x78\x70\x72\x70\xe4\x2a\x48\x78\x12\x0e\x54\x18\xfd\x8c\x99\x8f\xed\x84\x14\x2f\xab\x62\x05\x73\x38\x40\xc0\xd5\x88\x42\x06\xa6\xb9\x38\x3a\x8f\x5b\xa6\x16\xac\x28\xa0\x9c\xae\xae\xa9\x03\x1a\xc1\xdf\x42\x2d\xf1\xba\xc9\x50\x79\x3f\x3c\xf8\xf5\x60\x44\x98\xce\x8e\xc8\xad\x14\x07\x1a\xed\xb0\xe4\x1a\x24\xdb\x28\x9a\x3c\x11\x2b\xd9\x40\x4d\x10\xdc\x36\x8f\x4d\x93\x51\x23\x94\x35\x28\x39\x18\x9d\x19\xbe\x1e\xf7\xca\x9c\xdf\x71\x6d\x18\xa4\x6e\x40\x79\x7a\x8e\xf2\x0b\xd6\x0a\xa7\x0a\x2a\x7e\x9d\x2c\x18\x2d\xf4\x62\xe5\x65\x2a\x2c\xb7\xa0\x48\x23\xec\x27\x4f\xa2\x9a\x78\xb4\x62\x61\x8b\xb3\xec\x75\x7d\x39\x4b\xe3\x27\xcb\xcb\x61\x19\xb9\x6e\x69\x39\x28\x39\xc7\xf2\x54\xd5\xe5\xfe\xf8\xf4\x2a\xc7\xcd\xeb\x2a\xcd\xcb\xf9\xea\xfd\xe4\xec\x93\xf5\xe2\xe0\x4b\x43\xc1\xb8\x68\x20\xa8\x94\x75\xd2\x26\xb2\xd6\x6b\x75\xa5\xe7\xb0\x97\xac\x5e\xf2\x8c\x1d\x3f\x42\x59\xb2\x54\x10\x4f\xf1\xd7\x81\x40\x40\x05\x4c\x7c\x5f\x64\xa4\x2b\x24\x67\x9b\xbd\xca\x52\x0a\xb5\x55\x0b\x9a\xf9\xbd\x81\xfd\x7b\x0d\x0f\xdd\xd9\x82\x65\x37\x16\xb0\x2d\xce\xb0\xa1\x18\x23\x5b\x2c\x9e\x86\x81\xe0\x7f\xa6\x85\x9c\x9e\x94\x54\x69\x56\x9f\xe4\x32\xb3\x6f\xf0\x38\x33\x14\x70\x31\x3f\x2e\xf3\xa3\x18\x14\x67\x12\xd4\x98\xb2\x16\x96\x35\x5f\x85\x73\x60\x79\x54\x2a\xae\xbc\x97\x6d\xba\x82\x55\xd9\xa9\x19\xcf\xac\xde\xab\x44\x35\x3a\x5f\x5f\x5f\x4f\x5e\x75\x2a\x74\x42\x82\xb2\xd6\x95\x03\x5a\x0c\x2a\xee\x0e\xdc\x76\x6f\xca\x73\x26\x30\xb9\x3e\xa4\xa4\x27\xc0\x9c\x19\x81\x89\x4e\x8b\x15\xb9\xa5\x98\xd0\xac\x58\x1c\x2f\x78\x66\xc8\x78\x66\xb8\x8d\x39\x70\xaf\x19\xcd\x59\xad\x40\xe5\x60\x74\xf7\xee\x84\x80\xa6\x64\xdb\x76\xd6\x28\x2d\x4b\xb2\xb0\x53\xc5\x35\xf4\x4f\x21\x5e\xb8\x63\xb8\x94\x68\x5e\x51\xa4\x66\x15\xaa\x24\xf6\x6f\x9e\x84\xc2\xb1\xc1\x82\x70\x9d\x03\x28\x55\x4a\xb2\x70\xa9\xac\x98\x8e\x35\xd6\x04\x2e\x50\x54\xd1\x2b\x6c\x49\xb0\xe5\x49\x22\x7c\x79\x12\x8f\x31\xef\x3a\x89\xf7\x3f\xa4\x41\xab\x27\x49\x10\xeb\x49\x72\xd4\x7a\x62\xad\xec\xf6\x70\xa1\xef\xdd\x10\x1a\x67\x51\x70\x1d\xf3\xb6\x0e\x65\x46\x85\x14\x3c\xa3\x05\xff\x17\xcb\xb1\x9e\xa9\x6c\x74\xd5\x68\xb0\xb7\x64\x54\xb1\xf1\x92\xd6\xdc\x30\x54\x2c\xf8\xe1\x83\x20\x84\xb9\xed\x5a\x4a\x30\x46\x78\x7f\x13\x52\x1c\x4f\x66\xa2\xaa\xb6\xc4\x15\xc7\x4c\xbc\xc3\x1b\x9b\x13\x7f\xa2\x49\xb2\xea\xd2\x54\x2f\xd2\x69\x4d\x54\x2f\x36\x0b\x41\x03\x7f\x33\x52\xf9\x1e\xc4\xc6\xef\x55\x31\x6d\x50\x5a\xea\x35\x35\x73\x28\xa6\x7d\x5f\x1b\x8a\x69\x3f\xb0\xa9\x6c\xc1\xf6\xc7\x11\x7c\x05\xd4\x84\xd0\x41\x56\x54\x87\x5a\x49\x32\x01\x96\x14\x59\xb3\x4c\x1a\xc6\xb3\x53\x8e\xc3\x05\xd7\x9c\x16\x2f\x59\x41\x57\x7b\x5e\x7f\xb6\xeb\x75\x5f\x50\x85\xde\x56\x96\x93\x29\x9b\xc9\x9a\x81\x07\x41\x18\x8e\x54\xb5\x8e\x53\x9c\x9f\x7e\xc4\xda\x1f\xbf\x8d\x12\xb2\xa6\x55\xfb\x54\xfd\xfe\xb5\xbc\x25\x72\xa6\x99\x20\x87\x6d\x61\xf9\xa3\xc0\x98\xd2\xfa\x20\xe2\x01\x8f\xb4\x24\x2f\x9e\xbb\x41\x9e\x9e\x73\x01\xdc\x2f\x4a\xed\xb5\x7b\xc9\xd2\xf8\x69\xff\x92\xfd\xe2\xac\x29\xba\x3e\x26\xf4\x3b\x25\xaa\x5d\x7d\xec\x53\x49\x5e\x00\x3d\x9e\x15\x51\x91\xbb\xa0\x90\xa7\x77\x4e\x74\x56\x5d\xc9\xec\x26\x91\x69\xf4\xfa\x6c\x82\xbd\x7d\xd2\x1d\x75\x7d\x36\x19\xbc\x51\xfb\x65\x1f\x3d\x68\x4b\x07\x3c\xd4\xd6\x79\x30\x68\x5c\x6d\x73\xc2\x4f\xdd\x71\x18\x0d\x1a\xd7\x7d\x6d\xd0\xb8\x1e\xd0\x30\xd4\x1b\xf2\x26\x5f\xd5\x34\x63\x93\x7d\x12\xe0\x1c\x03\x21\xb9\xad\x0d\x45\x5a\x39\xce\xb3\x0b\xc1\x58\x8e\xfc\xc3\x4e\x85\x91\xb9\x99\xc9\xac\x29\x8a\x15\x9a\xfb\x50\x0c\xb0\xd1\x27\x71\x60\xaf\xd0\xb5\x15\x73\x9d\x1f\x77\x1b\x75\xad\x7e\x52\x79\xd8\x62\x87\x96\x6f\xaf\x93\x21\xde\xe8\x23\x8a\x89\xfe\x96\x6f\x1a\xee\x20\x51\x7c\x6e\x96\xcb\x48\x18\x80\x81\x0b\x58\x37\xae\xe6\x43\x4b\x88\x19\x75\x26\xeb\x8c\x4f\x8b\x15\x59\xd0\xc2\x28\x4c\xb7\x5c\x2f\x08\x25\x37\xbc\x28\x6c\x37\xfd\x17\xea\xca\x55\xe1\x41\xa9\xa6\x90\x62\x0e\x8b\x41\x6d\xe4\xf4\x5d\xc5\x32\x33\x66\x56\x30\x2a\x9a\x0a\xe9\x34\x32\xd2\x4a\x36\x09\x82\xa7\x9d\x6b\xd9\xcb\x54\x82\x5b\x94\x80\x0a\xd2\x09\x3e\x7a\xe6\xbb\x29\x70\xe4\x9d\x2b\xa7\x36\x82\x3e\x7b\xd3\x84\xb4\x38\x6c\x01\x15\x44\x31\x7b\xa4\x03\x9b\xdf\x63\x8e\x05\x24\x9c\xf5\x1e\xeb\x03\xf4\xeb\x58\xab\x90\x62\x2c\xd8\x1c\xf3\xa9\x2d\x43\xc3\x08\x47\x1c\x1f\xe3\xe9\x7c\x76\xae\xd2\xb2\x22\xbc\x2c\x59\x6e\x74\xe4\x62\x45\x96\x9c\xf6\xa6\x04\x72\xb7\xdb\x13\x45\x0e\x85\x24\xb2\x32\x4f\x57\x23\xb8\x86\x9a\xf9\x6a\xd1\x68\x92\xcb\x5b\x11\x91\x15\xe1\x0b\x5c\x93\x29\xd3\x1f\x2f\x6f\x0d\x01\xd4\xd7\x5b\x0f\xc0\x5a\x91\xea\xbe\xc4\x6c\x91\xe8\x71\x3f\x3f\x7e\xec\x6c\xa9\xdc\x68\xb8\xd4\xfd\x00\x20\x33\x37\x5a\x36\x7a\x4f\xde\x91\xfb\xcc\x47\x98\x89\x1e\x28\x8a\x1c\xea\xbd\x37\x89\x90\xe1\x5f\xd8\xe1\x52\x6a\x79\x83\xed\x69\x6b\x53\x3a\xe7\xbd\xca\x5d\xa5\x38\x62\xf7\x60\x6c\xdb\x6c\xb9\x00\x66\x6e\xda\xcc\x66\xac\x86\x97\x0e\x08\xde\x08\x43\xf7\xf5\x6b\xdc\x1b\xd6\xcf\x80\x6b\x43\xaa\x98\x1e\x01\xc4\xb7\x4d\xf9\xbe\x67\x48\x8b\x85\x07\xf5\xa1\x6a\xa6\x00\xb2\x59\x90\xf3\x77\xdf\xf7\x3b\xa2\x29\x00\xc0\xe3\x12\xcb\x60\x9e\xef\x44\xbf\xb0\xbf\xb4\xe7\x61\x1b\x36\x83\x3d\x16\x59\x21\x95\x4d\x62\x84\x7d\xc9\x16\x54\x08\xe6\x0c\x52\x5c\x83\x35\x7b\xca\x98\x20\xb2\x62\x18\xf6\xd6\x8b\x18\x4a\x14\x17\xf3\x82\x11\xaa\x35\xcd\x16\xc7\x86\x3a\xe1\xce\x42\x9b\x2d\x68\x7f\xa3\x74\xcd\x68\x89\x67\xa2\x66\x25\xe5\x38\x3c\xa1\x59\x2d\x95\x22\x65\x53\x68\x5e\xf9\xce\xfa\x59\x12\x19\xe4\x6d\x2b\x4c\x1e\x73\x7b\x05\x69\x16\x6d\x5a\xe2\xa8\xa5\xd0\x4e\x5f\x86\x65\x45\xc0\x7c\x36\x82\xe2\xb9\x65\xa5\x57\xc4\x2c\x6d\xd1\x3b\x57\x64\xc6\x6b\xa5\x49\x56\x70\x26\xb4\x9d\x19\x22\x83\x01\x0d\x23\x27\x4e\x0b\xbb\x22\xca\x2e\x89\xc8\x41\xf9\xae\xb4\x22\x90\x7e\xe7\x89\x70\x5d\xe5\x5c\x59\x5b\x87\xea\x57\xcf\x97\xba\x02\x12\x78\x70\xdc\x8a\xc0\xd1\x71\x02\x0e\x52\x64\x7f\x15\x90\x10\x14\x78\x73\x35\x3e\xa1\x10\x7f\x04\x5f\x81\x2a\x0f\xee\x5e\x8f\x3a\x99\xc1\xad\x6e\x61\x0b\xfc\xaf\x71\x1d\x38\x50\x82\x2d\xcd\x3d\x60\x19\x33\xa2\x28\x4d\xc8\x64\x1e\x9d\xc7\x68\x5a\xcf\x99\x3e\x73\xf3\xef\x9b\xba\x9a\x82\xdb\x84\x95\x30\x43\x03\x51\xbb\x39\xb0\x0f\x13\x99\x03\x94\x42\x0b\x77\xb1\xad\x3c\x27\xce\xab\xa7\xee\x75\x7d\x4f\xcd\x4f\xa7\x51\x61\xc6\x93\x27\x54\x55\x34\x63\x8a\x1c\x5e\x4c\xce\x46\x64\x72\xf1\xd2\xa6\x35\xc9\xd9\x3a\xb6\x5c\xdf\x65\x69\x0b\xc2\x5a\x0d\x78\x1b\x71\xbe\x36\x4b\x40\x52\x00\x32\x65\xe9\x9d\x78\xa5\xac\x5f\xd4\xf3\xf5\xd6\xa7\x00\x54\x34\x5f\xa0\x9b\xa8\x06\x54\x23\xeb\xbd\x30\x67\x1b\x15\x12\x7b\x6b\x59\x0b\xef\x63\xb1\xd8\x7b\x7a\x72\x70\x14\x3f\x5f\xbb\xe9\xe0\xd0\x76\x2b\x65\x05\x01\x90\x98\xb5\xfd\xc8\x23\xa4\x40\xf2\x95\x8d\xc6\x7e\xf4\xb2\xb8\x81\x16\xf5\x96\x29\x45\xe7\x6c\xd2\x33\x18\x28\x6d\x75\x5c\x88\x22\x6a\x19\x36\x94\xa5\x2d\x10\x29\xcd\xff\x26\x4c\x37\x0c\xcd\x36\x25\x4e\xa4\x17\x05\xee\x72\xdd\xd6\x5c\x6b\x06\xef\x03\x54\x3b\x82\xb3\xbb\x8e\x6e\xd9\x4d\x73\xec\x35\x9e\x5d\xf4\x70\x3c\x23\xf8\x8b\x1c\x13\x06\xa7\x8c\x4c\x6b\xce\x66\x64\xc6\x21\x83\x11\x72\xfb\x46\x08\xd3\x4f\xd1\x79\xa3\x14\xab\x61\xda\xd6\x20\xe7\xa6\xdf\x8f\x9e\x7f\xd8\xf9\xeb\xba\x11\x19\x0d\x8a\x42\x02\xf6\x16\x9f\x91\x39\xe4\x13\x5a\xf3\xd3\x9f\x9e\xff\xed\x2f\x64\xba\x32\x9a\x12\xdc\x49\x2d\x35\x2d\x1c\x01\xa4\x60\x62\x6e\x76\x11\x84\x9d\x7e\x2f\x76\x07\xbf\xc9\x6f\x4e\xc1\x4b\xae\x71\x81\x5e\xfc\xe1\x66\x1a\xf5\xe8\x81\x64\x72\x92\xb3\xe5\x49\x70\x84\xc6\x85\x9c\xf7\xeb\xf5\xcc\xc3\x1d\x35\x55\xde\x37\x2a\x22\xf5\x8d\xde\x69\x01\x75\x57\xdd\x83\x2c\xe4\x2d\x9a\x51\x37\xaf\x6a\x00\x85\x52\xc9\xaa\x29\x60\xe1\xc8\xf7\x1e\xc0\xae\x51\x6c\x1d\x1a\x28\xd6\x3c\x1f\x70\x3b\x08\x61\xb0\xc3\xae\xbd\xf5\x36\x99\xd6\x91\x29\x2d\x30\x83\xf5\x78\xfb\x42\x1d\xbd\xed\xe0\xdf\xd3\xa2\x98\xd2\xec\xe6\x5a\xbe\x91\x73\xf5\x4e\x9c\xd7\xb5\xac\xbb\x73\x2e\xa8\x91\xa6\x17\x8d\xb8\x81\xba\xad\x2d\x5a\xab\x9c\xdb\xc0\x5b\x00\x56\xec\x2e\x6c\x2f\x62\xdc\x2c\x11\x3f\xd3\x29\x03\xce\xfa\xdd\x8e\xcc\xee\x78\x6b\xe2\x16\x84\x19\x9a\xfb\x8b\x38\xe1\x3c\x54\x78\xb5\xff\xf0\xfc\x4f\x7f\x45\xe6\x42\x64\x4d\xfe\xfa\x1c\x92\xdf\xd5\x08\x1f\x00\x90\x7d\x8d\x92\x53\xd2\xa2\xe8\x2b\xd4\x84\x2c\xc0\x1c\xb6\xaf\xf6\xca\xeb\x9d\xdd\xee\xcf\x36\xd6\x5c\x5f\xff\x08\x92\x18\xd7\x8a\x15\xb3\x11\xa2\xa1\x78\x83\xf2\x01\xe8\x35\x07\xf6\xc9\xeb\x8f\xa4\xb3\x7b\x73\xc9\x52\x16\x4d\xc9\x5e\xb2\x25\xcf\xfa\x85\x0e\x74\x76\xa5\xd3\x9b\x73\x90\x15\x5c\x81\x2c\x39\x2d\x64\x76\x43\x72\xfb\x61\x90\x4f\xb2\x5e\xc7\xb9\xff\x2a\xf4\xcd\xac\x89\xc8\xa8\xb9\x77\xfe\x9d\x5c\x9a\x92\x56\x95\x91\xa3\x01\xd6\xaa\xa6\xb7\x9d\xc5\x00\xd6\x04\xe8\xa1\x91\x5a\x4f\x74\x18\x4b\x6c\x10\xcb\xd8\xce\xc8\x3c\x53\xbd\xbb\xe8\x9d\x80\x13\x1f\x03\xd3\x52\xdf\x3f\x82\xa0\x73\x20\xda\x0e\xdd\x6d\xa8\xe0\xdf\x88\xfc\xb1\xa1\xab\xfb\x82\x62\xfe\x60\xa0\x04\x69\x8e\x0f\xbc\x32\xfd\x1d\x07\x09\xc2\x10\xe2\x12\x89\x3a\xeb\x22\x7c\xf8\x47\x49\xb5\xd5\x8f\x9c\xf9\x82\x92\x8a\xd5\x8a\x2b\x23\x3a\x7d\x80\x0b\x75\x56\x50\x5e\x06\x8e\xf3\xdd\x2c\x02\x5e\x6e\x28\x7f\x1a\xcf\x29\x7b\xbe\x5f\x13\x99\x5b\x3a\x80\x83\x62\x65\xdb\x4f\x69\x7a\xe4\xaa\x99\xc2\xb1\x83\xaf\x7f\x59\xfc\xa8\xa4\xf2\xc5\xae\xd9\xf9\x87\x76\xc7\xbb\xdc\xdc\xfc\xc6\xb3\x73\xfc\xd6\x53\x62\xe2\x30\xbf\xaf\x95\x87\x7b\xe2\x13\xb1\xaa\xa8\xf8\x3d\xe0\xfc\xf6\x64\x74\x59\x7d\xc7\x58\x84\x57\x3a\x50\x2b\xad\x11\xe7\x18\x11\xe9\x23\x08\x30\x57\xd1\x0e\x4a\x0e\xbe\x3d\xd8\xe9\xfb\x81\x3b\x53\xcb\x8a\xce\x41\xeb\xdb\x87\x0d\x5a\xa7\x29\xc4\x3f\x5d\xc8\xdb\x90\x65\x56\xf6\x5b\x86\x63\x3a\x10\xed\x85\x8c\xda\x1d\x8c\x87\x75\x27\xc2\x6a\xae\x58\x47\xe0\x96\xae\x08\xad\x65\x23\xa2\xf2\xf0\xc1\xdd\xe7\xdd\xc1\x6f\xd7\x26\x7b\x29\x05\x73\xa1\x27\x31\xa3\x5c\x77\xac\xc3\x10\x85\xc3\x05\x79\x71\xfc\xe2\xf9\x53\x91\x57\x60\x86\x6b\xf2\xca\xa5\x97\x57\xf0\x05\xd8\xe9\x5c\x5d\xfd\xf1\x7d\xb8\x53\x6f\xad\x05\xba\x2d\x30\xce\x5d\x01\x5b\xf8\xd5\x6d\xcd\xb5\x3d\xe6\xb7\x5c\x31\x72\x08\xba\x2f\x91\x75\x08\x60\x1a\x05\x93\x1b\x5a\x4a\x22\x0b\x91\xa7\x80\xb9\x55\xcd\x74\x5f\x1f\x24\xfb\xf2\x00\x43\xdb\xee\xaa\xb8\xf7\x6d\x4a\xb4\x3f\xcf\x9e\x91\x43\x1c\xe3\x00\x41\x1a\x23\x76\x3e\xc1\x45\xb2\x7b\x75\x7e\x57\x45\x14\x24\x4b\xb7\x5f\xe7\x77\x15\x05\xef\x4a\xb5\x17\x1b\xf7\x5f\x6c\x41\x97\x0c\x30\x31\x79\x41\xeb\x02\x82\x38\xaf\x70\xc9\xc8\xb4\xd1\x84\x89\x25\xaf\xa5\x00\x8f\x26\xe0\x2a\x4c\x0b\x46\x6a\x36\x63\x35\x13\x19\x53\xe4\x9b\xc3\x0f\xa7\xef\x21\xc8\xff\x08\x1e\x55\xe6\xe6\xd7\x28\xeb\x82\xec\xcc\x21\xe8\x6e\x1f\xcf\x1b\x71\x73\x37\xc7\x05\x1e\x70\xb7\x16\x66\x6e\x65\xa3\x1b\x5a\x00\x74\x68\x56\x34\x8a\x2f\x77\xf5\x44\x58\x70\xd5\x97\xbc\xd7\x91\x4e\x71\x98\xcf\x82\x3d\xdd\x80\x7a\x8d\x73\xf1\x7f\xa2\xda\xeb\x81\xf2\x70\x62\x61\x6c\xb7\xb5\xcb\xf7\x73\x3c\xf0\xf9\x42\xdb\xa4\xc2\xb5\x48\x81\x20\xf0\xa6\xec\xed\xd4\xdc\xa5\x85\xde\x08\xb4\xa7\x05\xa7\xea\xa1\x0a\x58\xdc\x29\x79\xdd\x0e\x0b\xa1\xdc\xc2\xd6\xab\xa1\x85\x37\x1f\x1b\xca\xd0\x85\x75\x31\xb1\x81\x46\x6e\x43\xb9\xf8\x5f\x4c\x29\xf0\x96\x10\x0c\xf5\x87\x3f\x79\x20\x25\xe8\x4d\x9a\xb5\xe7\xea\xd8\x07\x98\x83\x28\x03\xd5\xe6\xc1\x64\x22\xa4\x18\x2f\x02\x90\xfd\x4a\xe6\x0f\x34\x99\xf4\xb5\x72\xf4\xb2\x6f\xc4\x5e\x63\xbf\x45\x64\x21\x0b\x9b\x81\xe3\xcc\xda\x53\xa6\x6f\x19\x13\xe4\x62\x02\x1b\x64\x56\x05\xc1\x74\xb6\x6f\x13\x86\x02\x00\x84\xbe\xbd\x38\x0f\xa6\x26\xd8\x60\xd8\xb2\x87\x5e\x91\x08\x2b\x4b\x8c\x89\xc2\xaf\x4c\x34\x23\x7e\xed\xd7\xd8\xa5\x3b\xd3\xa9\x5c\x32\xd8\x82\x3c\xaf\x7b\xa6\xd0\xec\xcc\xee\x16\xf5\xbe\xf1\x2a\x7a\x39\xdb\x65\x73\x56\x79\xa8\xf3\x06\xdc\x00\x0e\xea\x23\xf3\xe0\x8b\xc9\xd9\x63\xf2\xdf\x1f\xac\xf7\xde\x0c\x7d\xa0\x08\xaf\xb2\x36\x42\xec\xa1\x33\x6f\xa3\xa2\x02\x74\x84\x1e\x5a\x58\x5f\xcd\x2b\xe0\xc9\x8f\xfd\x84\x11\x81\xe3\x1a\x9e\x68\xc1\x04\xad\x7d\x1d\x1c\xce\x95\xcc\x8f\xd7\x97\xda\xfe\x45\xff\xe5\x76\xf9\x6e\xf8\x60\xda\x48\xea\x91\xcf\x12\x5e\xe3\xc1\xe0\x70\x75\xc9\x61\xbd\xab\x85\xec\x6e\x63\x27\x17\x2f\x77\x78\x2f\x2a\x9e\x7f\xdd\xf7\xe2\x07\xf5\x60\x30\xcd\xa4\x0b\x08\x55\x6c\xd2\xae\x60\x9f\xe8\x0b\x5b\xb8\xc6\xfe\x35\x24\xd7\x4b\x4d\xaa\x9a\x29\x26\xfc\xdd\xc9\xb7\x85\x2e\xc3\xab\xd0\x9d\xc5\xc8\xfc\x3c\x6b\x8a\x87\x0a\x9a\xb2\x0e\xb2\x73\x7d\x2a\x33\xf5\x89\x88\x20\x6e\xd2\x25\xe5\x05\x28\xd1\x01\xdc\xd4\x06\x01\x36\xc0\xf2\x81\x14\x14\x92\xe6\x88\x9f\x71\xc3\x6a\xc1\x0a\x52\xca\xbc\x29\xd0\x93\x45\xce\x4e\x27\xbf\x5c\xfd\x78\xf5\xcb\xdb\x77\x2f\x7f\x78\xf3\xe0\x8c\x7c\x4c\x33\x61\xed\x11\x1f\x11\x4a\x04\xbb\x05\xca\x05\x48\xd3\x99\xad\xf4\xe0\xd1\x5a\x0c\x73\xbc\xb2\xf1\xc6\x68\x11\x44\xd3\xf4\xac\x29\xcc\x97\x1e\x48\x41\xc9\x35\x9f\x53\xe8\xac\x55\xca\xa6\x35\xa3\x37\xb2\xd1\x64\xd9\x14\x82\xd5\x74\xca\x0b\x6e\x04\x39\xc2\x96\x4c\xa0\x3f\xd4\xfc\x81\x21\x32\xac\xf6\xc4\x1f\x3a\x78\x58\x0c\xcc\x56\x1e\x31\x8b\x6a\x46\xa6\x99\x35\x0a\x58\xd4\x19\xf8\xb0\xaa\xf9\x92\x17\x6c\xce\x3c\x94\x43\x1f\x54\xb1\xae\x19\x9e\x16\xd5\x82\x8e\xa1\x48\x3a\xb1\x95\x4c\xe0\x44\x2d\xa4\x90\x35\x46\xdd\x20\xc0\xa1\x7d\x21\x20\x49\x16\x2f\xab\xab\x7d\x85\x01\xf1\x57\x2e\x30\xdd\xc6\xa3\x3f\x1a\xb3\x7a\xb8\xfd\x3e\x8e\x57\x5d\x75\x21\xb8\x2d\x05\x4e\x1e\x9c\x3c\x38\xee\x60\xbb\x85\xa2\xd5\x5c\xa0\x77\xc7\x63\xec\x65\xa1\x04\x9d\xf6\x63\x87\x77\x0e\x49\xa3\x7d\xd6\xfc\xc1\x62\x27\x58\x2c\x26\x4d\x51\x5c\xb1\xac\x66\x0f\x8d\x71\x88\x5b\xfa\x8b\xb5\xb1\xef\x33\x02\x04\x96\x44\x80\x6e\xb6\x5f\x16\x2d\x3e\x6b\x90\xd8\xd0\xa2\xf6\x55\x4d\x01\xf9\xdf\x50\xa6\x1b\xb7\x13\x66\xab\x82\x00\x34\xae\x5c\x96\x4c\x9f\xd7\xa4\xb3\xc7\x8a\x79\xd2\xdc\xf6\x56\x54\x29\x8c\x13\xe5\x22\xe7\x4b\x9e\x37\xb4\x00\xb2\xc0\x54\x64\x73\x40\xa8\x2d\xd1\x8b\x1c\xb1\xec\x59\xb1\xf2\x81\x29\xc2\x2d\xaf\x3a\xc1\x35\xf9\x1d\x4e\x66\xc5\xc5\x7c\x0c\xbf\x31\x64\xda\xf9\x8c\xa5\x18\xd3\xf1\x43\x43\x70\xbe\x2a\x3b\x07\x14\xf9\x7e\x07\x86\x81\xf7\xee\xb4\x39\x86\xae\x08\x13\xb2\x99\x2f\x60\x79\xeb\x92\xba\x82\x62\x05\xd3\x50\x38\xc9\x86\x8f\xf6\x31\x68\xf8\x93\x9d\x5b\xab\x44\x58\x2c\xab\x7b\xb2\xbf\x12\x5b\x47\x5f\xf7\x6b\x0a\x7b\xf3\x65\xc0\xb8\xed\xca\xf6\x74\x20\x3c\xf0\x36\xc9\x25\xab\x97\x9c\xdd\x9e\x58\x35\x70\x6c\xde\xfd\x31\xae\xbd\x3a\x81\x2d\x3c\xf9\x1d\xfc\x5f\x2f\x6a\xae\xdf\xbd\x7c\xf7\x2d\x39\xcd\x73\x1b\x25\xe0\xc4\x23\xf3\xe8\xab\x63\x42\x2b\xfe\x81\xd5\x0a\x6a\x83\xde\x70\x91\x8f\x48\xc3\xf3\xef\x1e\xcf\x72\x41\xd6\x81\x8a\x4a\x5a\x8d\xed\xed\xd7\xb2\xe4\xd9\x43\x9e\x23\xc1\xdb\x14\xcb\x47\x7d\x8c\xde\xd8\xc7\xc6\x42\xa1\xf2\x7f\xe1\x3d\x0f\x84\xba\x29\x2b\xa4\x98\x07\x20\xb0\x46\x78\x7d\xe8\xab\x21\xb8\xee\x08\x8a\xe0\x0d\x83\x3a\x79\xe0\x4e\x90\x75\x0e\xa9\xb5\x5c\xd6\x9d\x38\x11\x33\x3a\x94\xc4\x0a\x92\x7a\xa9\x78\xa8\xb9\x8e\x77\x46\x87\xac\x10\xd5\x2a\x3e\x18\x1c\xef\x00\x13\x5d\xdd\x5b\x57\x98\x0b\x85\xc9\x05\x15\x39\xfc\x98\x65\xb2\xce\x1f\x7e\x4e\xcc\x53\xa8\x7d\x76\x32\x26\xfd\x60\x5a\x16\xc8\x45\xe6\x11\xa4\x62\x9d\x4e\xd0\xd4\xea\xb2\x93\xc3\x69\xad\x19\x0f\x1c\xbe\x11\xfc\xff\x1a\x46\x68\x29\x8d\x5c\x10\x55\x78\x7f\x7d\x27\x4b\xba\x02\xc1\x0f\x16\xed\x8d\x83\xdb\xb0\xb8\x85\x6a\x44\xde\x33\xa3\x77\xb5\xb8\xb4\x23\xf2\xa6\x0b\x54\x3b\x32\xf3\xbc\x42\x90\x48\xfb\xab\x87\xeb\x02\x90\xc6\x29\x9b\x3a\x63\xef\x31\x20\xb0\x74\x55\xca\x37\x97\xd5\x9c\x3d\x4d\x6f\x98\x40\x0f\x8a\xd9\x52\x88\x79\x6c\x6a\x38\x69\xd9\x82\xe5\x4d\xf1\xf0\x2d\x9e\xae\xc8\xcc\x88\x3b\xd6\xb1\xbb\xe0\xf3\x05\x53\xda\x59\xc6\x4e\x20\x79\x06\xa3\x4f\x69\xb6\xf0\xe4\x02\xf3\x09\xf2\xee\x5b\xcf\x70\x49\xef\x1e\x9e\x4a\x05\xaf\x00\xd5\x0e\x83\x09\x95\x4d\xd5\x94\xee\x79\x58\x3f\x4f\xea\x98\xbc\x31\x84\xe1\x8d\xa4\x55\x55\x70\x27\xb8\x75\xb6\xf9\xc1\x17\x0e\xc0\x18\xc0\x6d\x4e\x66\x54\x2d\xb8\x14\xb1\x07\x2d\x43\x47\x61\xd6\xd4\xe6\x7d\x2b\x56\x80\xa5\x97\xe7\x46\x84\xa8\x49\xcd\x4a\xb9\x7c\xb8\x69\x2f\xda\xf9\x18\x87\x50\x63\x16\x79\x1c\x88\xa4\x5f\x89\x9c\x79\xea\x71\x36\xcc\x79\xc9\xd6\x1e\x0c\x3c\x80\x46\x40\x74\x85\x7b\xea\x46\xb4\x01\xc3\x3d\x1e\x8f\x08\x91\xae\x7f\x78\x70\xaf\xb0\xde\x18\x09\x92\xd6\xf3\x9d\x45\xda\x9f\xd6\xf3\x06\x39\xa6\x7d\xe2\xdb\x8a\xdf\xfd\x93\x07\xd7\xc2\x03\x0e\x14\x39\x7b\xfb\x32\x04\xff\x0a\x8b\xa2\x39\x68\xb8\x7e\xc3\x7d\x48\x1b\x7c\x03\x52\x86\x8f\xe8\xe9\x45\x51\xe6\x39\x8b\xe1\xf4\xc5\xd2\x19\x44\x3c\x81\x4e\x8f\xe7\xa2\x6a\xb4\x15\x3e\x83\x72\x2c\xd9\x82\x8a\xb9\x11\x78\x5e\xca\xc6\x4c\xec\x9b\x6f\x60\x12\x35\xcb\x9b\x8c\xf5\xcb\x09\x41\x83\x0b\xde\xdc\x6f\x6c\x48\x88\xab\xfb\x04\xef\x92\xca\x68\xe5\x96\x26\x5c\x3d\xb5\x12\x9a\xde\x7d\x4b\xf8\x31\x3b\x26\xcf\xbe\x09\x3e\x7a\x06\x14\xf7\xa2\xa6\xaa\xa5\x99\x8a\x05\xe4\x81\xd9\x17\x5c\x43\x52\xc6\xb3\x70\x84\x63\x72\x6e\xe8\x82\x08\x4b\xbf\xb7\x01\xc6\xca\xb4\xdd\xd9\x11\xa9\xd9\x9c\xd6\x79\xc1\x7a\xa6\xb4\xcb\x19\xb9\x0d\x00\x8d\x7c\x48\x17\xbb\xe3\x4a\x2b\x6b\x39\x3f\x4e\x13\xb2\xf2\xb9\x6f\x87\xa6\xea\xc6\xbc\x14\x86\xf9\x8d\x73\xaa\xe9\x38\xe0\xba\x27\x68\x38\x1b\xdb\x02\xce\x63\x6a\xef\x71\xfb\xa8\x9c\xfc\xce\x42\x71\x8e\xa9\xff\x16\x17\x63\x3a\x86\x92\xc6\xbf\x19\xa7\x79\x44\x05\xf1\x14\xfc\xf5\xdc\xb3\x53\x5c\xb9\x63\x72\x29\x75\xab\x00\xf9\xc7\x31\xa2\xce\xf4\x76\x8e\x7b\x7e\x79\xfd\xfe\xc7\xc9\xbb\x8b\xcb\xeb\x81\xf1\x0e\x8c\x17\xda\xc0\x78\x07\xc6\xdb\x63\xe0\x9e\x8c\x97\x89\xe5\xae\x98\xae\xb3\x6c\x6d\x8b\xd2\x5e\x2f\x86\x19\x99\xc6\xf8\x84\xd2\x40\xcf\xc5\xf2\x03\x35\x0a\xb5\x0d\x10\xb0\xd1\x8b\x5b\x02\xdd\xed\x17\x50\xd9\x3f\xfb\xea\xf3\x40\x77\x98\xc5\x99\x30\x77\x2b\xf4\x05\x6c\xdb\xb5\xb6\x54\x0b\x25\x67\xbf\x5c\xbc\x3c\xbf\xbc\xbe\xf8\xfe\xe2\xfc\xfd\x4e\xd3\x50\x22\x6b\x3a\xa6\x4b\x40\x79\x88\x38\x13\x31\x4c\x2b\x08\x55\x35\x5b\x72\xd9\xa8\x62\xe5\x6b\x7e\x6f\x67\x57\x9b\x29\xb5\x22\x86\x02\x2a\x56\xbe\x0e\xfb\xd6\x01\xd7\x44\xb1\x6d\x62\x55\xc4\xf0\x3b\x16\xc8\x2c\x11\x29\xc4\xb2\x88\xf1\xb7\x08\x74\x9f\x2f\x9c\x45\x8c\xdb\x4b\xac\xbb\x4f\x44\x8b\xa0\xa3\x2b\xdc\x45\x74\xd4\x4d\x78\xda\x3d\x27\xfb\xbe\x96\x65\x22\x6e\x76\x85\x4e\x02\x17\x36\xb6\xed\xaa\x1e\xd8\xea\x0f\x1d\xf1\xd8\x2a\x7a\x6d\x59\x08\xa3\x6e\x96\x95\xee\x99\x7e\x44\x52\x55\xaf\x4e\x53\xe8\x19\x53\x91\xde\xd2\xea\xef\x6c\xf5\x9e\x45\x16\xc0\xe9\xae\x37\x2b\x58\x66\x64\x1e\x72\xc3\x56\x98\xef\x7c\xe6\x06\x8b\xab\x01\xb4\x87\xc5\xbf\x6f\x58\x4c\x61\xf6\x94\x55\xbb\x6f\x58\x44\x2e\xb7\x6b\x1b\x25\x9d\xcd\x16\x82\x98\x6f\xf6\x74\xaf\x8a\x58\xef\x6b\x95\xf2\x74\x91\x24\xdd\xb6\x5f\x71\x25\xdd\xf6\x58\x51\x26\xdd\x96\xf0\x30\xb9\xb8\xc1\xc4\x07\x0a\x03\x44\x57\x9d\x57\xdf\xf3\x42\x82\x68\x81\x70\xc5\x5c\x82\x85\x15\x60\x13\x2d\x4d\x1c\x08\x01\xb6\x54\xd1\x39\xeb\x0d\xce\x46\xda\x87\x27\xfa\xfa\xb6\x2f\x17\x06\x45\xfb\xda\x79\xf9\xb7\x0e\x07\x5b\x91\x92\x69\x9a\x53\x4d\x8f\xcd\xe5\x19\x75\x7f\xb4\xd1\xf5\xff\xe3\x7f\x59\xd0\x29\x2b\xd4\x4f\x07\xff\xf9\xf7\xf3\x1f\xff\xbf\x83\x9f\xff\x27\xfc\x0c\x24\x0d\x8c\xe0\x0c\xbe\x10\x39\x05\x40\x1d\x17\x32\x67\x97\x40\x1d\xfc\x68\x95\x94\x53\x0c\xd2\xb0\x1f\x00\xf0\xeb\x31\x66\x8e\xf9\x1f\x2b\x99\xaf\xff\x14\x51\x58\x8b\xec\xe7\x93\x0d\x7b\x1b\x01\x56\x85\x2d\xdd\xc3\xdd\x72\xc7\xc4\xdc\xc7\xf6\xea\x8e\x31\x54\x4a\xa7\xf0\xcf\xef\xdd\x12\x18\xb9\xd6\x43\x73\x0b\x40\xd8\x35\x6a\x4a\xb7\xd2\xe6\xb3\xe5\x8b\x28\x65\x09\x5b\x42\x6e\xed\x77\x30\xf1\x82\xc1\x8a\xd8\xd5\x42\x0e\xe0\x45\x1f\x1f\x32\xee\xe2\xb6\xc9\xe9\xe4\x82\x2c\x71\x85\xf7\x68\x71\xbe\x14\xbb\x76\xb1\x56\xdf\xef\x35\xdb\xf6\x11\x61\xeb\x40\x99\xdf\x62\x2a\x8b\xfb\xdc\xe2\x30\x2b\x5f\xf5\x8d\x3d\x3c\xef\x7f\xbd\x1d\x62\x97\xc7\x59\xd5\x8c\x6c\xf7\xc7\x25\x2b\x65\xbd\xf2\x3f\x7a\xcc\xc4\xb1\xd2\xb2\xa6\x73\xc0\x37\xc2\xc1\xf1\xcf\xfc\x4f\xf8\x87\x1d\xf2\x36\xff\x1a\x6d\x69\x6d\x30\x97\x7d\xa2\xe2\x00\x5b\xf6\x92\x65\xbb\x7d\xdb\x13\x8e\x9d\xc5\x16\x72\xe9\xb6\x6e\x19\x64\xef\x05\x40\x0d\xc7\xaf\x22\x18\x30\x2c\x94\xe7\xa8\x4d\x74\x01\x2b\x9b\x58\x92\x25\xad\x55\x4c\x1d\x64\x6c\x09\x99\x74\xce\x97\x5c\xc9\x08\x4c\x24\xdf\xd1\xa6\x44\xed\x52\xae\x2c\xae\x3a\xa6\x56\x78\x93\xfd\x5d\x05\xd5\x8d\xfc\x65\x5f\x7b\xcd\x5e\x3c\x8b\x26\xa9\xa2\x5a\xb3\x5a\x7c\x4b\xfe\xfb\xf0\x9f\xbf\xff\x75\x7c\xf4\xdd\xe1\xe1\x4f\xcf\xc7\x7f\xfb\xf9\xf7\x87\xff\x3c\x86\x7f\xfc\xc7\xd1\x77\x47\xbf\xba\x1f\x7e\x7f\x74\x74\x78\xf8\xd3\xdf\xdf\xbe\xba\x9e\x9c\xff\xcc\x8f\x7e\xfd\x49\x34\xe5\x0d\xfe\xf4\xeb\xe1\x4f\xec\xfc\xe7\xcf\xec\xe4\xe8\xe8\xbb\x6f\xa2\x49\x4f\x50\xee\x18\x5b\xca\xa2\xc7\xdd\x1e\x93\x1c\xbf\x2f\x54\x00\xb9\x6d\xee\x78\xa5\xbe\xff\xef\x1d\xd7\x0c\xe2\x9b\x9d\x14\xb2\x47\x17\xfc\x4b\x09\x1a\x98\x37\xf6\x18\x46\x49\x1c\x29\x40\x89\x3e\x50\x6d\xca\xd4\x53\x7b\x41\x7f\x0b\x76\x4a\xa7\xe7\xe0\xbe\xb6\xa2\xfb\xac\x96\xa5\x05\xc6\x45\xa7\x2d\x42\x32\xd9\xef\xdd\xb0\x08\x83\xbe\x6b\x83\x5d\xb3\x77\x1b\xec\x9a\xeb\xed\xeb\xb4\x6b\x62\x22\xf6\x6f\xd1\xa8\xc9\xc4\xb2\xaf\xbb\x32\x65\x8c\x96\x53\x6d\xc3\x6a\x4f\x9f\x17\x08\xd1\x3f\x5a\xf6\x86\xad\x94\x8f\xba\x68\x43\x70\x51\x6c\x29\xb7\x47\xc9\x90\xd3\xa2\x20\x5c\x20\x13\x36\x1d\xf4\x1a\xdd\x43\xad\x30\xd4\x79\x1d\x46\xdc\xd2\x4c\xd5\xc3\xa4\x74\xea\x9a\x42\xde\x20\x17\x73\x5b\xd4\x16\x45\x01\xeb\x41\xe7\xc2\x57\xab\xed\x45\x8e\x57\x35\xda\x4a\xfd\x54\x29\x99\x71\xea\x4b\x49\xf9\x62\x57\x76\x79\x60\x06\x9a\xde\x40\x04\x4b\xc6\x72\x26\x1e\x9e\xa9\x8d\x0d\x2a\xf8\xb7\xfb\x30\x5d\x41\xb5\x54\xb1\xb4\x25\xac\x48\xde\x60\xd0\x25\x3e\x93\xe9\xc6\x7d\x5a\x21\x7b\xe6\x0e\xdb\x58\x81\x20\x72\x0f\x24\x0a\x6f\x54\xa2\x10\xf0\x28\x67\xad\x17\xa7\xdf\xe9\x8d\x96\x10\xe3\xe5\x31\x1f\x00\x10\x25\x68\x6f\x08\x62\xad\x7b\xab\x2b\x80\x3d\x85\x98\x89\x78\xd1\x2c\xad\x58\xf6\x25\x44\xb2\x7d\x15\xc7\x1e\x5f\x14\x4b\x24\x86\xa5\x11\xc1\x1e\xe0\x56\x4e\x29\x76\xa5\x11\xb9\xbe\x84\xad\xa0\xaa\xd9\x8c\xdf\x25\x62\x5c\xa7\x01\x72\x10\xcf\x99\xd0\x7c\xc6\x19\xa0\x28\x54\x35\xab\x98\x00\x47\x10\xe4\x9c\x9b\x07\xd4\x8a\x4f\x6d\x50\xd3\x3e\xc6\x03\xa3\x76\x9b\x96\xb7\x5f\x6d\xd3\xac\x07\xc6\x4e\x06\xc6\x1e\xd1\x06\xc6\xfe\x59\x7a\xf5\x53\xe7\xea\x90\x6d\xb9\xf3\x6a\x03\x48\x06\xf0\x83\x47\x41\x7f\xda\xc0\x52\xeb\xa9\x89\x87\x38\x8e\xfe\x25\xd3\x12\x43\xf1\x11\x47\xa5\x26\x08\xed\x88\x72\x3f\x29\xa9\xa0\x73\x80\x78\x31\xdf\x73\x15\x0f\x64\x4d\xcc\xc5\xaf\x79\xde\x33\x73\xb4\xbb\x90\xa0\x57\x3b\xc0\x0e\xf8\xb0\x96\x45\xc1\x6a\x45\x0a\x7e\xc3\xc8\x4b\x56\x15\x72\x55\xda\x0c\xa9\x9c\x5c\x69\xaa\xcd\xe5\xbf\x62\x3a\x02\x8c\xbc\x2f\x26\xb8\x43\x14\xdc\x71\x39\x71\x38\x80\x55\x53\x14\xa4\x42\x88\xa3\x5e\xdd\xbc\x13\xf0\x80\x9c\x16\xb7\x74\xa5\x46\xe4\x92\x2d\x59\x3d\x22\x17\xb3\x4b\xa9\x27\xa8\xda\xc6\x97\x94\xc6\xce\x09\x9f\x91\x6f\x0b\xaa\x99\xd2\x44\xd3\x39\x18\x5a\x5a\x70\x43\x59\x77\x06\x6d\x8b\x38\xed\xd0\xe2\x90\x00\xf1\x10\x46\xf7\x78\x87\x7d\x6e\x6d\xd4\x59\x2d\x1c\x46\xd4\xce\xc0\x4e\x10\x9a\xaa\xad\x3f\x1b\xb0\x13\xc4\x23\x75\x65\x84\xc0\xd0\xc4\x05\xa9\x99\xaa\xa4\x50\xac\x5b\xc2\xce\x4f\x04\x0d\x77\xbb\xaf\x20\xda\x5b\x1c\x8d\x15\x44\x2b\xa9\x34\x20\x78\xf5\x2f\x45\x9c\x46\x02\x9d\x38\x42\x00\xd4\x8d\x16\x05\xcb\x09\x2f\x4b\x96\x73\xaa\x59\xb1\x22\x74\xa6\x59\x1d\x56\x2d\x0d\xb0\x99\x8f\x11\x5c\x9e\x59\xac\x37\x07\x13\xd7\x5f\x45\x58\x37\xe1\x62\xa9\x45\xb0\xa9\x62\x6c\x94\x05\xb5\x6b\x41\xe5\xd6\x60\xe2\xa2\x98\xa8\x69\xef\x40\x10\x0b\x8e\xf7\x46\x0d\x66\xa8\xcc\xad\x48\x23\x34\x2f\x2c\x10\xb0\xbc\x21\x99\x2c\xab\x02\xd8\x49\xef\xa1\xfb\x73\x29\xff\xcf\xb1\xbf\x60\x63\x43\x95\x3a\xf9\x5d\xfb\x11\xfc\xa2\x27\x71\x09\x74\xb7\x14\x9a\x1b\xbb\x63\x59\x8c\xf8\xdd\x35\x01\xdf\xb1\xcc\x3f\x5d\x68\xf8\x45\x04\x3e\x00\x74\xa2\x37\x51\x89\x8a\x89\x42\x02\x52\xb9\xe1\x23\xb0\x5c\xc2\x96\xda\xcb\x7c\x86\x64\xb9\xd2\xe7\x96\x4a\x52\x70\x01\xef\x86\x05\x7b\x09\x81\x6e\xfd\x71\x46\xcf\xcb\x46\xa9\x30\x97\xf6\x17\x4d\x9a\xa3\xc5\xd0\x06\x10\xec\x87\x07\x27\x07\x47\x1b\xae\xb4\xb5\x42\xda\xd7\xc1\x2c\x38\x54\xc1\xab\xa0\xbc\x1b\xcb\x0e\xf2\x11\xe1\x86\xc7\x46\x53\x66\x9e\x3e\x2c\x38\x00\xab\x62\x11\x70\x46\x44\x49\xa2\x6b\x9a\x73\xab\x0d\xc0\x6f\xcd\x97\x74\xdd\xd8\xd7\xfb\xf0\xe0\xd7\x83\x11\x61\x3a\x3b\x22\xb7\x52\x1c\x68\x58\xbe\x63\x72\x0d\x28\xd2\xf1\x91\x66\x8e\x90\x95\x6c\xa0\x56\x01\x6e\x61\x55\xf0\x8c\xeb\x62\x05\x6f\x0b\x91\x0d\x56\x55\x30\x72\x44\x04\x72\x4f\xd8\xce\xef\xb8\xb6\x29\x0c\x86\x59\x3f\x87\xd3\x64\x6b\x07\x50\xa3\x79\x2c\xd9\xc9\x82\xd1\x42\x2f\x30\xc0\x56\x48\x31\xfe\x17\xab\x25\xa0\xfb\x08\xfb\x49\x2c\x19\x71\x5e\xad\xb0\x45\x78\xb8\x36\x09\x8a\x34\x7a\x98\x67\xe8\x15\xeb\x2d\xa2\x90\x8d\x9a\x54\xd7\xd7\x93\x57\x4c\xaf\x71\x5d\x33\x8a\x0b\x7b\x06\x1b\x2c\xab\x67\xb2\x2e\xf7\x80\xfd\xa6\x89\xc7\x1a\x43\x9d\x9d\x3d\x78\x05\x16\x52\x45\xed\x25\xf9\x02\x4f\x00\x56\x45\xa2\xa5\x53\x14\x04\xcb\xcc\x21\xe8\xc6\xf0\x3a\xd8\xe1\x8b\xc9\x31\xf9\x51\x36\x00\x79\x4b\xa7\xc5\xca\xc3\x65\x2a\x16\x17\x78\x67\xda\x33\x43\xca\x33\xc3\xe1\xcd\x81\x7c\xcd\x68\xce\x6a\x05\x0c\x94\xd1\xc8\x10\xfb\x84\x31\x3e\x01\x6d\x49\xb7\xf2\xac\x51\x5a\x96\x64\x61\xa7\xdd\x85\xfa\xb1\x97\xf3\x18\x2e\xb0\xc3\x7b\xa8\x59\x85\x4c\xd6\xfe\xcd\x93\x63\xa1\x1b\xac\x0b\xd7\xdd\xfe\x7e\xca\x94\xd1\x8a\xc2\x65\x33\xab\xe6\x91\x04\x04\x2e\x16\xa2\x33\x27\x62\xe7\x09\x42\x4c\x49\xc2\x30\x53\x12\x07\x02\xb4\xde\x11\x84\xd1\x44\xf7\x94\x2e\x72\x95\x24\x8b\xce\x24\x5f\x24\x42\x93\xd8\xa0\x2c\x7b\xf8\xd0\x20\xdc\xdf\x94\xbd\xad\x73\xde\x16\x28\xc9\xa8\x90\x82\x67\xb4\xe0\xff\x62\x39\x69\x2a\x29\x6c\x3a\x06\x48\x9e\x19\x55\x6c\x0c\x11\x67\x02\xd9\xb9\x0a\xe0\x68\x0c\x77\xd0\x52\x82\x38\xe6\xab\x55\x20\xd5\x69\x48\x4d\x9a\x47\x10\x8d\xad\x14\xb6\x0d\x9f\x6a\x67\xb3\xd2\x9c\x78\x92\x72\x05\xaa\x04\x69\x96\x9b\x49\x96\x88\x19\x0f\x98\x38\xf8\xa2\x00\x6f\xc4\xf2\x52\x7b\xf3\xb4\x1a\x29\x6d\xdf\xc4\x23\xf4\x0c\xd7\x44\x34\xe5\x94\xd5\x6d\x86\x7a\xad\x37\xd7\x34\x32\xbe\xb3\x33\x2c\x0e\xe7\x9c\x90\x4e\x0c\xa0\x62\xce\xc8\x0b\x33\xf2\x5f\xfe\xfc\xe7\x3f\xfe\x39\xc1\x38\x66\x7a\x3e\x6e\x54\x90\x8b\xd3\xcb\xd3\x5f\xae\x3e\x9c\x01\x64\x53\x6c\xf7\x89\x52\x9f\x52\x27\x3e\x25\x4d\x7b\xfa\xa2\x49\x4f\x90\x41\x1e\xcd\x08\x53\x5f\x89\x2b\xa0\x2a\xac\xde\x65\xd5\x86\xa0\xdc\x4a\x9f\xea\x78\x9b\x2d\x74\x7e\x19\x86\xb5\x17\x9c\x4a\x15\x8c\xf5\x2a\x67\xec\x5a\x37\x02\xc1\xf4\xb6\x1e\xff\x9a\x37\xb5\xad\x5c\xe5\xdc\x3d\xad\xf5\xdb\xba\x79\x80\x0a\x32\x65\x33\x59\x33\x5b\x6f\xa6\xb5\xd5\x3f\x21\xcd\x5d\xb1\x4c\x8a\x3c\x46\x7e\x4f\x25\x8f\x5a\x4a\x92\xde\xc6\x2b\xec\xd3\xd9\x5f\xdb\x47\xc6\x0e\x06\x6a\xa0\xd9\xe9\x34\x27\x3f\x0d\x07\xc5\xec\x5f\xe8\xed\x2f\x7f\xea\xef\x6a\xca\xaa\x2b\x99\xdd\x24\x34\x6e\x45\xb2\xb6\x97\xe6\x0e\x66\xe8\x55\xbb\x3e\x9b\x20\x71\x66\x67\x2e\xdf\x5d\xb7\xa9\xfe\x90\xf6\xd0\xd6\x0c\x7a\x6d\xfd\x6e\x54\xe4\xe4\x86\x55\x71\xaa\xa1\x43\xcc\x9b\xd2\xec\xe6\x96\xd6\x39\xf8\xb4\xa8\xe6\x50\x04\x15\x4b\x2f\xd5\x0c\x30\x08\x84\xc4\x9c\x3a\xe4\x12\xd2\xa2\xa3\xa3\x4c\x1b\x07\xb2\x19\xf8\xba\xc1\xaf\x66\xd5\x88\x19\xe5\x05\x78\x95\x1b\xa1\x79\xc9\x6c\xc2\x47\x56\x79\xc7\x63\x18\x85\xf0\x84\xd8\xcf\x53\x35\x1c\x1e\xb4\x95\x9a\x1f\x6a\x00\x8c\xcd\x89\x7e\xda\xea\x82\xe5\xe0\x08\x26\x31\xa8\x0b\x0f\x69\x83\xba\xd0\x53\x5d\xa8\x6a\x76\xa5\x65\x6f\x99\x34\x59\x20\x0b\x92\x71\x4f\x18\x8b\x15\x55\xe9\xbd\xf1\x25\x79\x03\x1c\x28\x22\x40\xf6\x74\x72\xe1\xdd\x58\xb2\x13\x43\x82\x59\x8a\xb6\x08\x3b\x78\x24\x05\x53\xea\x44\x85\x15\xfc\xe0\x8d\x6b\x6a\xd6\x3f\x7a\xa6\xaa\x19\x2b\x61\x1d\x47\x2d\x96\x84\x99\x2e\x13\xf8\x4b\xa6\x33\x74\x51\x07\xaf\x26\xd4\x87\xb3\xcb\x35\x8b\xf2\x9c\xb7\x0b\x9b\xd5\x54\x2d\x18\xc0\x14\xb3\x3b\xae\x15\x0e\x3a\x01\xc4\x05\xb7\xe2\x46\x70\x98\xd7\x34\x63\xa4\x62\x35\x97\x46\xd8\x68\x84\xce\xe5\xad\x20\x53\x36\xe7\x42\xb9\x1d\x8b\x21\xc9\x1d\x09\x88\xd0\xe1\xca\x57\x8f\x39\x26\xef\x3b\x28\xcd\x16\x5b\x26\x93\x2d\xcf\xb4\x4b\x34\x4a\xb4\x24\x20\xc5\xc0\x31\xc0\xe2\xee\xfe\xe0\xb9\x2c\x5a\x7d\xff\x0a\xf5\x3f\x10\xb8\xb2\x87\x8d\x80\x89\xe6\xac\xa0\x2b\xcc\x17\x9d\x71\x01\x86\xdc\x5a\x1d\x1d\xc7\x87\x3c\xf5\x26\x50\xd6\x41\x9f\xf7\x9e\x0c\xae\x48\xcd\x68\xb6\x88\x91\xec\x86\xd8\xaa\x4f\xb5\x21\xb6\xaa\x67\x1b\x62\xab\x1e\xda\x86\xd8\xaa\x87\xb6\x21\xb6\x6a\x9f\x02\x03\x86\xd8\xaa\xc1\x44\xb2\xde\x86\xd8\xaa\x8f\xb5\x21\xb6\x6a\x88\xad\xea\xb4\x21\xb6\xea\x33\xda\x10\x5b\xf5\x99\x6d\x88\xad\x1a\x62\xab\x86\xd8\xaa\x21\xb6\xea\x61\x6d\x88\xad\xea\xdf\x06\x67\xc9\x10\x5b\x15\xd5\x86\xd8\xaa\x21\xb6\x6a\x88\xad\x1a\x62\xab\xee\x6d\x43\x6c\xd5\x10\x5b\xb5\xb5\x0d\x86\xc3\x8d\x36\xc4\x56\x6d\x69\x43\x6c\xd5\xc3\xc6\x19\xd4\x85\xb8\xce\x92\xab\x0b\x2e\x4e\x68\x52\xcb\xe9\xce\x90\x9f\x26\x10\x83\xc1\x33\x1b\xa4\x24\x67\x1d\x34\x27\x24\xb0\x27\x8a\x53\x37\x38\x06\xcb\xe4\x5b\x78\x1f\x6e\x2f\x97\x0f\x8c\xda\x25\x52\xd4\x83\xa3\x47\x1c\x02\x9e\x3a\xa9\x24\xfe\xa7\x8d\x1d\x09\x82\x46\x7a\x9b\xaf\x77\x0c\x5d\x15\x13\x29\xf2\x38\x51\x22\x7b\x12\x52\x93\x20\x32\x24\xe5\x23\xb6\xa7\x11\x21\xfb\x19\x0d\xb2\x8f\x91\x20\xbb\x88\x02\xd9\x79\x04\x48\x1a\xd7\x65\x02\xb7\x65\xb4\xa8\x60\x03\x7c\xaf\x17\x35\x53\x0b\x59\xf4\xe6\x0b\xa9\x78\xc2\x5b\x2e\x78\xd9\x94\xe6\x8a\x29\x73\xf5\xf9\xd2\x07\x21\x2b\xaf\xb0\xe2\x13\x8c\xce\x57\xf3\x45\x9e\x33\x28\x4e\x49\x79\x61\x4e\x00\x80\x03\x2e\xe8\xd2\xb0\x05\xd5\x64\x19\x63\x79\x8c\x92\x18\x5a\x05\xff\x78\xec\x29\xc4\x02\x2b\x5c\x91\x17\x71\x2f\x42\x9c\xdc\x18\x18\x47\xfe\xf8\x87\x5e\x7d\xcc\xeb\x2a\xcd\xcb\xf9\xea\xfd\xe4\x2c\x78\x39\xa9\x70\x0f\x27\x17\x4b\x59\xc0\x6e\x50\xfc\x92\xd1\x4f\x76\xf8\x8c\xc6\x2b\xeb\x51\x8a\x7a\x8a\x57\x3c\x56\x17\xed\x7a\xec\x8c\xba\xd8\x75\x38\xcd\x61\x2f\xb1\x66\xfb\xf1\x23\xa8\x7b\xa9\x54\xa8\xf8\xeb\x40\xc0\xf4\x0a\x13\xdf\x17\x19\xe9\x0a\xc9\xf1\x56\xdb\x40\xd3\xb7\x94\x42\x14\x5d\x41\x33\xbf\x37\xb0\x7f\xaf\xe1\xa1\x3b\x5b\xb0\xec\xe6\x3d\x06\xf4\x44\x91\x71\xa8\x18\xf3\xaa\xc6\x9c\xeb\x45\x33\x3d\xce\x64\x79\x62\x18\x08\xfe\x67\x5a\xc8\xe9\x49\x49\x95\x66\xb5\xd1\x3e\xec\x1b\x3c\xce\x0c\x05\x5c\xcc\x8f\xcb\xfc\xe8\xf8\xdf\xfe\x2d\x8a\x88\x0b\x6b\x7b\xb4\x59\x22\x01\xca\x33\x38\x32\x2c\x84\xf8\x94\x19\xf6\x2f\xc1\x4c\x18\x54\xa4\x32\xab\x12\x7f\x4a\x23\x5e\xdb\xc8\xf8\xca\xc7\x8f\xad\x1c\xb8\x2d\x49\x60\x0e\x4d\xc9\x0c\xf6\x23\x7e\xf2\x8b\xc5\x4e\x26\x0b\x63\x4e\x10\x33\xb9\x47\xf1\x92\x7b\xa3\x70\xec\x4b\x8c\xe4\x1e\x96\x37\x4e\x10\x17\x99\x22\x26\x32\x5d\x3c\xe4\xbe\x56\x01\xfe\x62\x31\x90\x5f\x45\xfc\x63\x42\xef\x40\xa2\xb8\xc7\xc7\x88\x79\x4c\x32\xeb\xd8\x58\xc7\xc7\x8b\x73\x4c\x33\xdd\x94\x4a\x62\xe4\xcd\xdd\x41\x5c\xe3\x63\x38\x29\xbf\x98\x83\x32\x81\x73\x32\xa5\x63\x32\x99\x53\xf2\x8b\xc5\x2f\xc6\xc7\x2e\x26\x55\xd9\x1f\x25\x66\x31\x65\xbc\x62\xf4\xfe\x72\xc1\x35\xa7\xc5\x4b\x56\xd0\xd5\x55\x5c\xec\x5a\xaa\x9d\xb8\xdc\x88\x6f\x43\xdb\x70\x37\xc2\x71\x41\x6d\x59\x6e\x96\xbb\x00\x47\xe7\x44\xb6\x92\x2a\xc4\x40\xe1\xfc\xa2\xa2\x1d\xf7\xcc\x65\x4b\xf6\xc6\x06\x8d\xa0\x0a\x7b\x72\x6a\x5e\xcb\x5b\x22\x67\x9a\x09\x72\xc8\x85\x3b\x39\x47\x81\x31\xa5\xf5\x41\x44\x3b\x15\x4c\xaf\x2f\x9e\xbb\x41\x9e\x9e\x73\x01\xdc\x2f\x4a\xed\xb5\x7b\xc9\xd2\xf8\x69\xff\x92\xfd\xe2\xac\x29\xba\x3e\x26\xf4\x3b\xa5\x71\x30\xbd\x68\x0b\xf9\xbe\x00\x7a\x3c\x2b\xa2\x22\x27\x16\x9c\xe7\xe9\x9d\x93\xe8\xe8\xdc\xae\x0e\xe2\xc3\x69\x3f\xe5\x8e\xba\x3e\x9b\x0c\xde\xa8\xfd\xb2\x8f\xee\x28\x54\xf4\xe9\x69\x5c\x8f\x1f\x1a\x3a\x68\x5c\xbf\x15\x8d\x2b\xc0\xc5\x7a\x55\xd3\x8c\x4d\xf6\x49\x80\x73\x0c\xa4\xcd\x6b\x6a\xe5\x38\xcf\x2e\x04\x63\x98\xef\xd2\xa2\x9e\x01\xc0\xd7\xac\x29\x8a\x15\x9a\xfb\x3a\x10\x78\xfd\x8f\xd6\xf5\x82\x6d\x60\x87\x75\xb2\xae\x02\xea\x5a\xfd\xa4\xaa\xa5\x95\x4a\xea\x46\x08\xf3\x5a\xd9\xeb\x64\x88\x37\xfa\x88\x62\xa2\xbf\xe5\x9b\x76\x90\xcd\x14\x9f\x9b\xe5\x32\x12\x06\x80\x9e\xb5\x19\x17\x1d\x42\xcc\xa8\x33\x59\x67\x7c\x5a\xac\xc8\x82\x16\x46\x61\xba\xe5\x7a\x41\x28\xb9\xe1\x45\x61\xbb\xe9\xbf\x50\x57\x4c\xa3\x73\x17\xa5\x9a\x42\x8a\x39\x2c\x06\x45\x42\xd8\x5d\xc5\x32\x33\x66\x56\x30\x2a\x9a\x0a\xe9\x34\x32\xd2\x4a\x36\xb5\xa3\xb3\xff\xf0\xce\xb5\xec\x65\x2a\xc1\x8b\x91\x5b\xf2\x2e\x06\xde\xe6\x99\x6f\xad\xbf\x8a\xe5\x16\xbe\xee\x96\x2b\x36\x82\x3e\x7b\xd3\x84\xb4\xb8\x72\xd8\x78\x6e\xf0\x77\x55\x2d\x97\x3c\x47\xbf\xb6\x3b\x16\x46\xda\xe9\x3f\xff\x0f\xd0\xaf\x63\xad\x42\x8a\xb1\x60\x73\x0a\x22\xb2\x65\x68\x18\xe1\x88\xe3\x63\x3c\x9d\xc8\x79\x46\x35\x33\x0a\xb4\xac\x3a\xd8\x96\x4b\x4e\x7b\x53\x62\xe6\x13\x9c\x28\x72\x28\x24\x91\x90\x10\xd5\x08\xae\x57\xe0\x7c\x5b\x34\x9a\xe4\xf2\x56\x1c\xc5\x5c\x4c\x0c\x24\xa0\x64\xca\x34\x6d\xd3\x99\x9c\x48\xa6\x08\x13\x74\x5a\x98\xbb\x07\xe1\xee\xd7\x5b\x0f\x00\x99\x31\xaa\x9b\x9a\x91\x39\xd5\x11\x5c\x62\x8b\x44\x8f\xfb\xf9\xf1\x63\xc7\x95\x75\xad\xcd\x48\x23\x14\x8b\x14\x64\x93\xa9\x01\x3d\x13\xf5\xcc\x8d\x96\x8d\xde\x93\x77\xe4\x3e\xf3\xd1\xed\x82\x67\x8b\x50\x51\xe4\x25\x53\x44\x36\x11\xd6\xbc\x8e\x0a\x68\x87\x4b\xa9\xe5\x0d\xb6\xa7\xad\xad\xaf\x87\x33\xc5\x09\xbb\x0c\xa4\xf2\x20\xdd\xda\x05\x34\x61\xe2\xe7\xcb\xcb\xab\x5f\xde\x9c\xfe\xd7\xf9\x9b\x7e\x1b\x7f\x4e\xb3\x45\x08\x2e\x2c\x08\x85\x87\x02\x98\xfc\x82\x2e\x19\xa1\xa4\x11\xfc\xff\x1a\x1b\x55\x76\xe8\xc7\xeb\xc9\x56\x13\x56\x41\xef\x29\xf8\x9a\x57\xa2\x17\xe7\x48\xb1\xa7\x6f\xb8\x02\xa4\x5a\x20\xc2\x06\xc2\x4b\xc5\xc8\xac\x96\xe5\x9a\xa2\x45\x2e\x7d\xf8\xda\x0a\x6d\x11\xa0\x9a\x2d\x58\xdd\x4f\x22\x7f\xf9\xee\xfc\x0a\x52\x87\xab\x1a\x91\x9d\x21\xd8\x1e\xfa\x84\xd1\x31\x67\x1f\xe9\xc9\x8f\xc9\xa9\x58\xe1\x87\xc8\xcc\x7a\x8a\x28\x05\x57\x9a\x81\x70\x6a\x15\x49\x17\x80\xf7\xec\xf9\x31\xfc\xef\x19\xa1\x79\x5e\x1b\x4d\xd3\xe7\x2c\x64\xeb\x29\x56\xbd\x46\x46\xfd\x95\x4f\x8b\x60\x71\x05\xd3\x90\xd6\xd0\xab\xc3\xb7\x32\xb7\x3b\x01\x42\x20\x84\xda\xa0\x74\xab\x74\x4d\x35\x9b\xf3\x8c\x94\xac\x9e\x33\x52\x51\x9d\x2d\x48\x49\x57\x24\x93\x75\xdd\x54\x88\x98\x90\x53\x4d\xfb\x8d\xfc\xbd\xac\x49\xe9\xb8\xb3\xe1\x66\x46\x24\xbf\xda\x1e\x6b\xd9\xb2\xec\xf0\x9f\x5c\xa9\x86\xa9\x93\x17\xcf\xff\xfa\x87\x3f\xf7\x54\xaf\x13\x5e\xdc\xbe\x51\x4a\x11\xd1\x49\xdd\x48\x2d\x77\xc0\x20\xae\x39\x80\xba\xa0\xee\x84\xe0\xc9\x07\x6e\xa8\xb8\x98\x17\xd1\x06\x90\x68\x33\x60\xac\x11\x70\xdc\xce\x60\xd2\xd7\x16\x18\x6f\x09\xec\xd0\xd0\xdf\x94\x92\xce\x0a\xd6\x4a\x70\xce\xee\x65\x19\xb2\x14\x81\x62\x77\x31\x71\x5c\x2a\xc6\x7e\x04\xda\x84\x37\x4c\x21\x5e\x02\x0e\x8b\x31\x0f\x23\xf2\x9c\xfc\x27\xb9\x23\xff\x09\x56\xb0\xbf\xf4\x1f\x2a\x8d\x8d\x29\x45\xa4\xfc\x42\x2a\x7d\x31\x49\xb4\xd1\xff\x30\xef\x95\xe9\xd1\xec\x87\x96\x64\xca\xad\x39\x82\xdd\x69\x56\x1b\x35\xd0\xee\x61\xec\xca\x45\x59\xd4\x0c\x81\x5f\xcb\xe9\x8e\x0d\x30\xb8\x98\x75\xe3\xeb\x1f\xe9\x7c\xc3\xc0\xaf\xa5\xd2\x97\x96\x5b\x87\x58\x1f\x21\x1d\x25\x3c\xc4\x1d\x76\x1f\x33\xea\x5b\x73\xf6\x5a\x90\x7d\x92\x4b\x48\x31\xc0\x9c\xc6\x05\x8f\x60\x0e\xfb\x73\x63\xe3\x42\x3a\xd3\x1d\xdd\x8f\x1d\xad\x35\x9b\x3e\x58\x64\xac\x92\x12\xd4\xa5\xa8\x64\x7e\x0c\xfa\x4d\x04\x15\x66\x35\xf2\x40\x18\xf8\x88\x6a\x74\x8c\xfa\x9a\xf7\x10\xc3\x85\x33\x1c\x2b\xa3\xa2\xaf\x0c\x8b\xad\x66\x33\x56\xd7\x98\x37\x3b\x5d\xb9\x8c\x9e\xe8\xd3\x16\xc5\xe5\xaa\x5a\x6a\x99\xc9\x62\x1f\x8e\xca\xc4\xd2\x02\x6b\x0f\xbe\x5a\xef\x21\xff\xe1\xe5\x64\x44\xae\xcf\x26\x23\x22\x6b\x72\x75\x16\x17\x00\x15\x9a\x60\x9e\x5d\x9f\x4d\x9e\xed\x74\x07\x88\x53\xa5\xc0\x9b\xdd\xa3\x93\x8e\xdb\xc7\xe8\x69\xe3\x92\x56\xe3\x1b\xb6\xea\x29\xdd\xa5\x90\x30\xc7\xfe\x60\x25\x99\x10\x2e\x73\x49\xab\x07\xf7\x56\x33\x9a\xf3\xbd\x86\x31\x71\x89\x7d\x9e\xd2\x74\x78\x26\xa5\x5c\xb2\x1c\xb5\x66\x37\x0a\x13\x79\x25\xb9\xd1\x91\x06\x90\x93\x8f\xb5\x01\xe4\xe4\x13\x6d\x00\x39\xd9\xd6\x06\x90\x93\x07\xb4\x01\xe4\x04\xdb\x00\x72\xd2\x25\x64\x00\x39\x19\x40\x4e\x06\x90\x93\xcf\x6e\x4f\x20\xac\x74\x00\x39\xd9\xde\x06\x90\x93\x01\xe4\x64\x00\x39\x19\x40\x4e\xda\xb6\x77\x41\xfc\x03\xc8\xc9\xc7\xda\x00\x72\xb2\xb5\xed\x8d\xc2\x31\x80\x9c\xdc\xd3\x06\x90\x93\x7b\xda\x00\x72\x32\x80\x9c\x0c\x20\x27\x0f\x6c\x4f\x2f\xe5\x6e\x00\x39\x79\x50\x1b\x52\xee\x1e\xd8\x06\x90\x93\x01\xe4\x64\xbd\x0d\x20\x27\x9f\x6c\xfb\x61\x83\x1e\x40\x4e\x06\x90\x93\x8f\xb6\x01\xe4\x64\x00\x39\xf9\x68\x1b\x40\x4e\x9e\x8a\x7d\x74\x00\x39\x19\x40\x4e\x3e\x36\xc6\xa0\x71\x3d\xac\x0d\x20\x27\x03\xc8\xc9\x46\x1b\x40\x4e\x36\xdb\x00\x72\x32\x80\x9c\x0c\x20\x27\x03\xc8\x89\x6f\x03\xc8\xc9\x53\xb7\x3d\xd5\x4c\xf1\x7f\xb1\x89\x2c\x78\xb6\x8a\x4e\x75\x79\xcf\x94\x6c\xea\xcc\xbc\xd8\xd0\x2d\xa9\xa0\x5f\x6f\x55\x88\x12\xb2\xf7\x0c\x3f\xe0\x7d\xb0\x70\x21\x8e\x40\x6d\xd7\xe0\x4b\x2c\xc1\x5e\x60\x09\xb8\x09\x5e\xf6\x77\xf6\x8f\x5d\xe1\x64\x5c\xbe\x7e\x06\xd3\x68\xad\x3d\x9c\xc8\x3e\xe4\x32\x86\x98\x3f\xfe\x14\x69\xe9\x99\x2d\xbf\xf7\x70\xd1\xaa\x2a\x78\x4c\x56\x28\x21\x57\x0d\x48\x17\xcc\x7a\xab\xd5\xb7\x24\xab\x9a\x11\x29\x59\x29\xeb\x88\x44\x81\x04\x1a\x5c\xe7\xa8\xec\xc3\x3e\xbd\x47\x82\xdc\xe2\x6b\x09\xeb\xbf\x42\x7d\xa1\x85\x68\xf2\x7b\xc5\x1d\x3b\x8c\x0a\x0b\xbb\x98\xad\x87\x7b\x72\xdd\xb1\x02\x5d\x4a\xfd\xde\x5e\xee\x9d\xed\xd7\x7d\x69\x98\x54\xcb\x92\x67\x7d\x1e\x27\x7c\x4f\x76\x95\x84\x79\x26\xcb\xaa\xd1\xac\xf3\xb0\xe1\x12\xa3\xd2\xc1\x55\x2c\x43\xdf\x4d\x2a\x64\x26\xc5\x8c\xcf\xad\xf6\x7d\x52\x52\x41\xe7\x6c\xec\x57\x7b\xdc\xe2\x1c\x9c\xf4\x7e\xa8\x77\x96\x07\x99\x15\x94\xf7\x8f\xf1\x4b\xc5\x26\xce\x80\x0a\xc0\xc0\x6a\x63\xd6\x21\x57\xcb\x2f\xf3\xc8\x07\x66\x73\xe4\x1b\xc7\xee\x23\xfc\xe3\x51\x84\xf6\x48\x35\xd8\x2a\x40\x31\xda\x72\x52\xfb\x47\xa0\x7b\x8d\x51\x10\x5a\x54\x8b\x8f\xeb\x8c\x31\x39\x88\x2f\x57\x82\x96\x3c\x73\x37\xef\xb4\x28\x64\x86\xb6\x9a\xae\xb6\x19\x39\x15\x24\xdf\xcc\xa9\x2c\x1b\x4d\xa7\x05\x3b\x26\x17\x08\xdc\x20\x45\xb1\x32\x17\x53\x31\xed\xe2\x17\xec\xad\x88\x53\x31\x63\x62\x58\x23\xe3\x57\xb7\x4a\xeb\x70\xda\x10\x69\x82\x09\xc3\xe3\xa4\x60\x84\x09\x5d\xaf\xcc\xc1\x9c\xc8\xfc\xca\x9c\xcd\xce\xb7\xa3\x01\x28\x22\xc3\x56\x53\x84\xac\x46\x86\xab\xa6\x09\x32\x8d\x0f\x30\x4d\x1b\x5c\xda\xfa\x16\x10\x3f\x27\xcc\xb6\xe9\x1c\x8b\x4a\xe6\xc7\x5b\x78\x16\x91\xb3\x48\x0a\xcc\x88\x13\x99\x1b\x69\xaa\x66\xc8\xb8\xfc\x1d\x45\xcb\xe2\x85\x21\xee\x06\x4c\x81\x54\xb7\x62\x16\x5d\x52\x5e\x98\x0b\x1c\x49\xc0\x26\x16\x61\x9c\xbb\x26\x81\x08\x9c\x1a\xae\x83\xc4\x1e\xff\x94\x70\x1b\x04\xa0\x22\x4b\xde\x0f\x98\x93\x24\xbc\x02\x6f\x80\x8a\x20\x90\xdf\x9c\xc5\x92\xde\x81\x05\x8a\x96\xb2\x11\x1a\x71\x38\x50\x28\xf4\x0f\x39\xa6\x3b\x3c\x62\x58\xd4\x17\x15\xdf\x48\x1a\x26\x4d\x73\x97\x8d\x3f\x49\x91\xed\x49\xb5\x66\xb5\xf8\x96\xfc\xf7\xe1\x3f\x7f\xff\xeb\xf8\xe8\xbb\xc3\xc3\x9f\x9e\x8f\xff\xf6\xf3\xef\x0f\xff\x79\x0c\xff\xf8\x8f\xa3\xef\x8e\x7e\x75\x3f\xfc\xfe\xe8\xe8\xf0\xf0\xa7\xbf\xbf\x7d\x75\x3d\x39\xff\x99\x1f\xfd\xfa\x93\x68\xca\x1b\xfc\xe9\xd7\xc3\x9f\xd8\xf9\xcf\x9f\xd9\xc9\xd1\xd1\x77\xdf\xf4\x77\x30\xc5\x7a\x53\xd3\xf9\x52\x13\x79\x52\xbf\x88\x1f\xd5\x26\x0e\xed\xfc\xf2\xdb\xfc\xd0\x8d\xeb\x6f\x0d\xd0\x1f\xbb\xfe\x75\xb4\xda\x7d\x31\x6b\xc7\xe7\x8a\xc8\x92\x6b\xcd\x72\x90\x3a\x69\x08\xf7\xb1\xa6\xf2\x5b\x86\x05\xb0\x3c\x54\x9b\xbf\x0c\x60\x27\x5a\x4b\x41\x6f\xb2\xa4\xf3\xe1\x81\x91\x43\x10\x5e\x56\x05\x2b\x99\xd0\xc0\x78\xc6\x4e\x7d\x01\x8b\xd1\x71\x3b\x83\x0c\x75\x5a\x76\x97\x31\x96\x5b\x22\x07\xde\x18\xb4\x81\x37\x0e\xbc\xf1\x53\x2d\xda\xec\x99\x82\x31\xbe\x0f\x89\xb0\xe6\x0a\xe5\x0c\xd4\x60\x04\xf5\x79\xe6\x72\x06\xbe\xf0\x25\xcf\x1b\x5a\x84\x48\x99\x0e\x3c\xb1\x1f\x07\x08\x94\xf4\x92\xae\x36\x74\x72\x2e\x78\x08\xcb\x39\xf2\x11\x1c\xf0\x45\x2b\x97\xb5\xde\xc3\x67\xa7\xc5\x2d\x5d\xa9\x9e\xe8\x7d\xdf\xcb\x1a\x82\x02\xd6\x06\x25\xb2\x76\xb1\x22\xa1\xb2\xd2\xb5\xd6\xf6\xf3\xf6\x6c\x5b\xe8\x6e\x42\xbf\x55\x97\x0e\x94\xff\xa2\xf3\x09\xd8\x85\x68\xa3\xfc\xcd\x39\xef\x37\xf1\x2b\xa6\xb5\xb5\xe7\xac\x1d\x09\xda\xae\xa9\x77\x71\x75\x97\x07\xc3\x42\x00\x33\xd3\x7c\x38\x93\x66\x4f\x00\x6d\x7e\x36\x63\x59\xcf\x58\x41\x04\x40\xd8\x32\x0e\x86\x2b\x6b\x2e\x1a\x5a\x14\x2b\xb7\x26\x2c\x27\x52\xf4\x1a\x88\xdd\x71\x4d\x1a\xa1\x79\x61\x0e\x13\xa9\xd9\xbc\x29\x68\x68\x0a\xb2\x33\x73\x11\x54\xf9\x31\x79\x27\x8c\x32\xda\x7e\xb9\x9f\x11\x73\x6d\x00\x23\x74\x14\x4c\xb3\x7c\x04\x5d\xaf\x9f\x40\x88\x41\xea\x70\x0c\xbf\x2d\xbd\x86\x77\x6b\xe9\x63\x4c\x8e\xf1\x22\x7a\x07\x38\xc9\xf9\x6c\x66\x46\x06\xa4\x40\x21\xeb\x92\x6e\x52\x45\x45\xde\x6b\x74\x23\x01\x41\xf6\x41\x88\x7e\x0a\x15\x2f\x9e\x19\xd5\x3c\xa3\xf5\xb3\xb0\x56\xc2\x69\xa1\x17\xb2\x99\x2f\xda\x53\x11\xb7\xe4\x44\x69\x88\xbc\x31\x8b\xa9\x5c\xcc\xd9\xda\x61\x53\x46\xd6\x11\x19\x43\x91\x4c\x32\xbc\xee\xb7\xb4\xe7\xd8\x1b\xde\x61\x0c\xf7\xc5\x3d\x77\x29\x39\x10\xde\xc5\xf2\x20\x7f\x4a\xb0\x3b\x9d\x60\xc2\xc7\xe4\x02\x61\x0b\x46\xdd\x5e\x3b\x4b\x82\x8b\x11\x84\x37\xb9\x40\xbd\x9e\xb1\x5d\x6b\x03\x70\x9f\x81\x04\x78\xad\xd8\x39\x15\x2b\x17\xf0\x0f\xe1\x47\x98\xa8\xe4\x73\x10\x8a\x7e\x56\x54\x7f\x97\x1e\xbd\xfc\x88\x62\x59\x53\x73\xbd\x3a\x93\x42\xb3\xbb\x5e\xbc\x2f\xc5\xab\x7e\xd5\x25\xa3\xf3\xae\x3b\x12\x89\xac\x10\x37\x6f\xad\x02\xcd\x42\x36\x45\x0e\x50\xa1\x8d\x00\xb6\xd3\xef\x45\xb9\x98\x99\x27\x1c\xcf\x1b\xbc\x98\xe0\x1a\x59\x27\xcc\x45\xfd\x61\xf0\xe3\xff\x35\x7c\x49\x0b\x26\x74\xf0\x17\x13\x88\x03\x0b\xff\xe8\x4b\xfa\xcf\x34\x55\x37\xad\x86\xc1\xc6\x95\xcc\x5b\x85\xe2\xc4\x2d\x1d\xfc\x8a\xdd\xe9\xaf\xd0\x77\x06\x02\xd3\xa4\xe6\x4b\x5e\xb0\x39\x3b\x57\x19\x2d\x40\x8f\xda\xb5\x72\x7e\x7a\x0f\x5d\x70\x32\x6b\x59\x28\x23\x80\x19\x65\xd5\x88\x9a\x18\x05\x0b\x2e\x9c\x39\xe5\x02\xca\xa7\x44\x98\xf9\xed\xa0\x0a\xc3\x70\x8d\xbe\x5d\xd1\xda\x9c\x42\x17\x6e\x8b\x4f\xe3\x54\xca\xc2\x42\x70\x16\xab\x96\x2e\xde\xdf\x1e\x0e\xbc\x58\xfe\x22\xd8\xed\x2f\x86\x0a\x45\x66\x05\x9d\xb7\x4f\x33\xd3\x1b\xb9\x0b\xf1\x11\xc0\xf7\x2e\x34\xe0\x4b\x36\x46\xb0\x31\x52\x45\x1b\x1b\x1d\x72\xf0\xfe\x0a\xdd\x8b\x23\xe0\x27\x54\x11\x3f\x76\x3f\xd1\xc1\xb4\x3f\x1c\xc1\x3b\x71\x76\x3a\xf9\xe5\xea\xc7\xab\x5f\x4e\x5f\xbe\xbd\xb8\xec\x1f\x01\x29\x35\x43\xeb\x4a\x20\xdd\x67\xde\x69\x6f\x76\xc1\xc7\x7d\x1c\x4b\x75\x0c\xce\x12\xc0\xd0\x10\xb9\xbc\x8d\xf4\x14\x9a\x33\xc5\x68\x3f\xc9\x35\xa3\x15\x9d\xf2\x82\xc7\xd8\x16\x52\x5d\x5f\x40\x85\x0d\xe8\x01\x79\x2e\xcf\x4f\xf2\x5a\x56\xb8\x7c\x2e\xc2\x3f\xde\xc7\xda\x8d\x24\x0d\x21\xd1\xe0\xc6\xcc\xba\x84\xcc\x6b\x2a\x74\xab\x49\xb5\xa7\xb9\x36\x42\x7f\x0c\xa6\xca\x4e\x0f\xce\xce\x31\x96\x69\x9e\x0e\x5f\xf9\x34\xcf\x59\xde\xd9\xb6\x88\x9e\xf7\x13\x46\xea\xcc\x4d\x2e\x08\x25\x25\x93\x77\x57\x17\xff\x6f\xed\xde\xac\xaa\x38\xf7\x66\x9a\xe2\x03\xb5\xac\x92\xed\xee\x7b\x0b\x39\x3f\xec\xef\x5e\xec\xaf\x97\x77\x76\x9e\xa8\xfe\xbe\x11\xdd\xea\x94\x2d\x69\xa4\x94\x79\x04\x6b\x9e\xf8\x7c\xae\x6e\xaf\xa1\xe9\xa2\x66\xc4\x7c\x45\x68\x0e\x86\xa4\x40\xf9\xd0\x12\xf1\xd0\x93\xd4\x51\x0a\xdf\xaa\x19\x2d\xd4\xd7\xfa\xe0\xc4\x48\x2a\x46\x68\x7d\x2b\x1b\x91\x26\xf3\x3d\xe2\xc4\x79\x42\x48\xce\x84\xd4\x56\x23\x36\x13\x84\x32\x5a\xb5\xcc\x08\x7a\x01\x03\x50\x9b\x8e\xd4\x10\x21\xb4\x5c\x07\x82\x0a\x57\xee\x5c\x4c\x3c\x45\x18\x04\xde\x28\xb6\xae\x91\x5b\x41\xa5\xf5\x0b\xce\x64\x7f\x77\x48\xcd\x68\x0e\x96\xf3\x8a\xea\x05\x02\x2e\x94\x54\xdd\xb0\x1c\x7f\x11\x99\x68\xe6\x03\x04\xc1\x68\xed\xa6\x76\x6d\xd6\xd7\xc5\xf4\x81\x8a\x83\xb0\x13\x10\x45\x18\xe3\x54\xdd\xe9\x85\x88\x60\xc1\x66\x13\xde\x89\x62\xf5\x5e\x4a\xfd\xbd\xaf\xad\xb0\xeb\xcb\xf1\x0f\xab\x60\x77\x43\x49\x41\xd3\xa2\x40\xf2\x18\x0e\x0e\xb0\xc6\xa0\x22\x44\x2c\x67\x34\x1b\xf2\x5b\x65\x8c\x75\x23\x4e\xd5\xab\x5a\x36\xbd\xa5\xad\x94\x0a\xdc\xab\x8b\x97\xf0\xf6\x35\x36\x17\x59\xe8\x7a\x05\x75\x81\x36\xeb\x54\x47\x9b\x21\x7e\xb0\x59\xdf\x21\x67\x8b\x4e\xf0\x24\xe4\x2d\x5d\x11\x5a\x28\xe9\xb6\xdd\x86\xb7\xae\x19\x10\x9d\x75\xd2\x7c\x3c\x95\x7a\xb1\x61\x96\xec\xeb\xd7\x30\x6d\x73\xbc\x51\x90\xd2\xdc\x66\x8f\x70\xb1\x31\xac\x86\xa0\xc7\xaa\x66\x19\xcb\x99\xc8\xbe\xd6\x1b\xb1\xeb\x0c\x5b\xb8\x55\x97\x52\x18\xf6\xba\xeb\x7b\x75\xe1\xb3\xc7\xed\x6e\x84\xb7\x08\xc2\x70\xad\x59\x8c\x82\xe3\x19\x98\x6b\xa3\x62\x22\x52\x2f\x66\x60\xc7\xc3\x43\xf7\xf7\x66\xca\x0a\xb3\xd9\xbc\x28\xb0\x66\x27\xd5\x68\x6c\xe7\x25\x9d\x33\x42\xb5\xbf\x84\x5a\x12\x26\x54\x53\xdb\x73\xd3\xd3\xe5\x64\x9a\xf7\x96\xd9\xa9\xfd\x70\xf1\x92\x3c\x27\x87\x66\x6e\x47\x20\x71\xcc\x28\x2f\x20\xc1\x1d\xdc\xd9\x6b\x46\xc6\x99\x73\xb8\x45\x2d\x01\xf0\x11\x22\x6b\x7c\x5a\x46\x44\x48\xa2\x9a\x6c\xe1\xd6\x80\x4b\xe1\xed\xac\x16\xf1\x2c\x2a\xba\x73\x60\x3b\xe9\xde\xc3\x1f\x14\xab\x77\x7d\x6d\xcd\x73\xf8\xc3\x23\x3e\x87\xa1\x96\x68\xae\x7f\x77\xc3\xf0\xae\x96\x4c\xd3\x9c\x6a\x6a\x9f\x49\xf7\x85\xe1\xd4\x0e\x8f\x65\xc4\x63\xa9\xd8\x1b\x2e\x9a\x3b\xc4\x13\xda\x0b\x3f\xc2\xd5\x39\x50\x44\x32\xb7\xd1\x70\x40\x31\x03\x3a\x77\x26\xff\x04\xa9\x1b\x17\x9d\x6b\x34\xba\x47\xeb\x86\x57\x82\x62\x6e\x1a\x33\x8a\x10\x15\xb9\x2c\x37\x88\x9c\xc9\x9a\xb0\x98\x72\xc4\x41\xac\xc6\x70\x31\x6d\xfb\x6d\x7b\x58\x0a\xb6\x64\x11\x25\x98\xd7\x2e\xe5\x1b\xd3\x9b\x59\x1c\x77\x72\xa1\x7b\x52\xd0\x29\x2b\x6c\x3a\x29\x62\x0c\x24\xbc\x61\x89\xbc\x11\xb5\x2c\xd2\x81\x5e\xbf\x97\x05\x43\x40\x24\xb7\x10\xa6\xfb\xaf\x62\x1d\xa0\x93\x54\xeb\x00\x46\xb9\xce\x3a\x80\x19\xf4\x6b\x58\x87\x26\x42\x40\x24\xeb\xeb\x60\xa4\xcd\xee\x3a\x80\xfc\xb5\xef\xeb\xa0\x58\x96\xc9\xb2\x9a\xd4\x72\xc6\xfb\xdf\x8e\x94\xcf\xb6\xa5\xa8\x0d\x2b\x43\x13\xfa\x66\x6e\x3a\x3e\x5b\xdd\x2f\xd3\xa8\x00\x1e\x8b\x12\x47\x35\xbe\x83\x0e\x2a\xee\xdf\x83\xe7\x1c\xb8\xdd\xfa\x1b\x6f\x47\xef\x3d\x72\x27\x7a\xcd\x8c\x68\x3b\xfc\x2d\xbe\x78\x29\x20\x7e\x23\x9c\xa3\x49\x1e\x5c\x99\xd1\x62\x21\x95\x8e\xbc\x55\x24\x71\xd2\xf6\x3a\x5d\x01\x24\x21\x04\xc3\xc1\xef\x02\xa4\x09\x0a\xe6\x79\xe7\xbe\x14\x32\x67\x41\x54\x27\x64\x58\x47\x91\x73\x8d\xa0\x70\x30\x86\x43\x52\x34\xd2\x9e\x0b\x9a\xcc\x3b\x23\x6b\x89\x75\x98\xa3\x86\x74\x70\xe1\x14\xd6\x95\x09\x08\x91\xae\xa8\x5e\x8c\x48\xcd\x0a\xc4\x6f\xb4\xec\xf9\x06\x2d\x5e\x07\xc0\x71\x1c\x41\x8e\xdd\x38\xb2\x1d\xd2\x44\x1a\xaa\x40\x06\x9f\xe1\xfb\xc9\x15\x79\xf6\xc6\xed\xd7\x33\x0b\x74\x7e\xf9\xee\x3a\x4c\x69\xa1\x62\x85\x89\x77\x11\x09\x1b\xd8\xf6\x4f\xac\x88\x3c\xea\xb8\x86\xfe\x78\xa3\x4f\xf4\x86\x8b\xdc\x22\x14\x76\x76\xd1\x19\xf0\xac\x6a\x18\xb7\x99\x1f\x68\xc1\xf3\xf0\x3d\xfa\x36\xb2\x8a\xa7\x3f\x05\x64\xbc\x93\x6b\xfa\x1e\x15\x58\xe7\x65\x1b\x7f\xdc\xab\xec\x09\x4c\x49\xc2\x0f\x02\xee\xa0\x99\xef\x98\x08\xb9\x65\x8c\x04\x5b\x17\x7d\x07\xec\xdb\xb9\x47\x16\x90\x7f\x20\x45\x4e\xcd\xce\x0c\xe7\xd0\x5c\xcc\x55\x68\x05\xa1\x45\x91\x24\x2e\x61\x9b\x19\xc4\x5d\x03\xc8\xfd\xb1\x09\x68\xeb\x6a\x7e\x07\x0c\x38\x66\xf4\x4f\x98\x30\xbe\x6e\x53\x44\x61\x54\x8a\xaf\xdc\x10\x31\x2f\x15\x3d\xab\xcd\x0a\x6a\x4e\x8b\xab\x8a\xf5\xae\xa5\x4e\x12\x3f\x17\xaf\xde\x5e\x9d\x76\x29\x03\x61\xd8\x02\xcb\x30\xf8\x9c\xd0\xbc\xe4\x4a\x81\xc7\x87\x4d\x17\x52\xde\x44\x0d\x79\xb8\xa5\x3a\x74\x90\x18\xac\xf8\x5c\x9d\x58\x8e\x32\x36\x0b\x77\x44\xb8\x28\x7c\xf2\x0d\x98\x0b\x85\x56\xd6\x85\x10\x3d\x79\x92\xf9\xd9\xc3\xd1\x03\xc8\x17\x1f\xec\xbc\xb9\x3c\x80\xfe\x03\x87\x77\xe7\x62\xc7\xe6\xa9\x8a\x83\xe9\x5c\xaf\xd4\xbf\x7d\xee\x5b\xea\x8b\x6f\x5d\x47\xd4\x5e\x77\xbe\x48\x56\xea\xcf\x98\x4a\x57\xe5\x37\x41\x71\x66\x4b\x12\xc9\x19\xe6\xc5\x32\x80\xa8\xa0\xf7\xa6\x91\x81\x7f\xfb\x00\x4a\x9d\xd8\x3f\x3d\x48\x05\xbe\x74\x5a\x14\x66\x23\xa9\xcd\x91\x0e\x22\x3c\x41\x37\xf1\x69\xc9\x50\x9f\x14\x33\x92\x8d\xb6\x10\xce\x22\xbe\x7a\xe7\x21\xd7\x2e\x21\xdc\x65\xa4\x6b\x89\x63\x53\x52\xf2\x3b\x43\x61\x38\x62\x37\x85\x16\x3c\xff\xdb\x3f\x8e\x40\x7e\x27\x10\x7d\xe0\x91\x28\x46\x66\x87\xc2\x41\x5c\xbe\x8f\x36\xcf\x96\xf9\xe0\x92\x69\xa3\xa9\xe1\xba\x85\xee\x07\xa3\x59\xd5\x4d\x82\xcb\x10\xe3\x1a\x26\xa1\x7b\x38\x29\xa7\x88\xbc\x0f\xe0\x2a\xb6\x34\x19\x19\xc4\x09\x6f\x8f\xe5\x3a\x26\x5b\x12\x62\x1e\xcd\x85\x4c\x3e\xdf\x8d\xfc\x05\x9d\x55\x64\x5f\x1c\x56\xb1\xd9\xc3\x41\x26\xf4\xce\x52\x87\xc3\x6c\x6c\xbe\x19\xbd\x34\x91\xf9\x46\x92\xb6\xab\x8b\xd9\x1f\x01\xd9\x1c\x8e\x56\x05\x11\xd2\xda\x47\x82\xd2\x94\xec\x8e\x65\x8d\x66\xb9\xc5\x6a\xb0\x36\x65\xcc\xf3\xee\x52\xd3\x9b\x02\xe8\xb3\x2d\x88\xa3\x46\x2d\x54\xa1\xd5\x75\x3c\xda\xc4\x88\xfc\x2f\x70\x49\x0b\xcd\xd4\x56\xd3\x9c\xf8\x3f\xef\xbb\x14\x10\x48\x9d\x51\xe1\x2b\xca\x6b\xe9\x4c\xdc\x16\x93\xc1\xa6\xa6\x4e\x19\xa9\x68\x4d\x4b\xf3\x06\x2b\x62\xb7\x67\xca\xe6\x1c\x13\xed\x82\x47\xd1\x83\x3a\xf4\x03\x29\x01\xc5\x86\x6b\x52\xf2\xf9\x02\x6f\x0b\xa1\x50\xb9\x86\xb8\xc0\xb1\x42\xd2\x9c\x00\x63\x91\x35\xb9\xa5\x75\x69\x64\x01\x9a\x2d\x20\x0a\x8d\x0a\x92\x37\xe6\x3e\x10\x80\x20\x58\x8d\x95\xa6\xda\xe8\x98\xac\x8e\x30\xc2\xb9\x65\xda\x01\xb6\xf2\x97\xae\x1b\xb1\xe3\x14\x71\x73\xd3\x92\x58\x41\xce\xef\x58\x16\x54\x27\x34\xc7\xd3\x96\x27\x34\xcf\x14\xbd\x89\x0c\x34\xdb\xb9\x5e\x9c\xc9\xb2\xa4\x22\x5d\x1a\x64\xa4\x20\x72\x86\xe4\x38\x15\xc7\x52\x47\x8c\xf2\x09\xc1\x9d\xc8\x40\x1d\xfa\x69\x47\x0a\x41\x4e\x67\xce\xb5\xb9\xa6\x98\xe3\x2e\x6b\x5f\xd3\x22\x8a\x2c\x47\x07\xa0\xe4\x4b\xa9\xc9\xe1\xc1\xc9\xc1\x91\x43\x5d\xf1\x24\x1c\xa8\x30\xa9\x00\x13\x8a\xdb\x09\x29\x5e\x56\xc5\x0a\xe6\x70\x80\xc0\xf8\x11\x05\xa7\x4c\x73\xe1\xa9\x1e\x0b\x56\x2d\x58\x51\x8c\x88\x32\xb2\x2e\x75\xe0\x6d\xf8\x5b\xf3\x25\x5d\x37\x19\xda\xc4\x0e\x0f\x7e\x3d\x18\x11\xa6\xb3\x23\x72\x2b\xc5\x81\x46\xf7\x06\xb9\x06\x85\x31\x8a\x26\x4f\xc4\x4a\x36\x50\xbb\x0d\xb7\xcd\xe3\xfd\x65\xd4\xe8\x3a\x0d\x0a\xe4\xe6\x3d\x86\xaf\xc7\x09\x6f\xe7\x77\x5c\x1b\xb9\x43\x37\x60\x93\x78\x8e\x6a\x01\x33\xbc\xd4\xbc\x6e\xe6\x59\x3b\x59\x30\x5a\xe8\xc5\xca\xab\x2a\x58\x16\x4b\x91\x46\xd8\x4f\xe2\x05\xa6\x3d\x48\xe7\x8c\xd6\xd7\x6d\x11\xbd\xbd\xae\x03\x6c\x69\xfc\x64\x19\x60\x14\x60\xba\x25\x80\x41\xc6\x62\x79\xaa\x2a\xc0\x7f\x7c\x7a\x15\x7e\xe7\x75\x95\xe6\xe5\x7c\xf5\x7e\x72\xf6\xc9\xba\xbe\xf0\xa5\xa1\xb0\x6f\x34\xb8\x66\xca\x7a\xb6\x13\x59\x6b\x22\x7c\x4d\x35\x73\xc3\xe6\xb0\x97\xac\x5e\xf2\x8c\x1d\x3f\x42\xf9\xd8\x54\xb0\x99\xf1\xd7\x81\x40\x9c\x12\x4c\x7c\x5f\x64\xa4\x2b\x24\x67\x9b\x19\xd8\x52\x0a\xea\x56\x41\x33\xbf\x37\xb0\x7f\xaf\xe1\xa1\x3b\x5b\xb0\xec\xc6\x82\xe0\xc6\xd9\x0b\x15\x63\x64\x8b\x23\xc1\x30\x10\xfc\xcf\xb4\x90\xd3\x93\x92\x2a\xcd\x6a\xa3\x7d\xd8\x37\x78\x9c\x19\x0a\xb8\x98\x1f\x97\xf9\x51\x4c\x65\x0c\x12\x68\xbc\x1b\x48\x96\x1d\x4c\x95\x7b\x50\x29\xcd\xaa\xec\xd4\x3a\x6e\x56\xef\x55\xa2\x5a\xea\xaf\xaf\xaf\x27\xaf\x3a\x95\xd4\x21\xef\x5f\xeb\xca\x81\x57\xc3\xa9\xc0\x3c\xa1\x81\xdb\xee\x4d\x19\xf5\x04\x9e\x8c\x87\x94\x5e\x27\x3f\xca\x06\x04\x26\x3a\x2d\x56\xe4\x96\x22\x4e\x80\x62\x71\xbc\xe0\x99\x21\xe3\x99\xe1\x36\xe6\xc0\xbd\x66\x34\x47\x4c\x5d\x30\x96\xec\xde\x01\xd5\xd2\x94\x6c\xdb\xce\x1a\xa5\x65\x49\x16\x76\xaa\xb8\x86\xfe\x29\xc4\x0b\x77\x0c\x97\x12\xbd\x29\x8a\xd4\xac\x42\x95\xc4\xfe\xcd\x93\x50\x38\x36\x58\x10\xae\x73\x00\x4f\x4f\x49\x16\x2e\x95\x15\xd3\xb1\x16\xae\xc0\x05\x8a\x2a\x4e\x8a\x2d\x49\xbd\x1e\x92\xa8\x66\x0f\x89\xaf\xdb\xe3\x3a\x89\x77\xeb\xa5\xa9\x00\x44\x92\x54\x01\x22\xc9\x2b\x01\x11\xeb\xbc\xb2\x87\x0b\x43\x5a\x0c\xa1\x71\x16\x05\xd7\x31\x6f\xeb\x85\x67\x54\x48\xc1\x33\x74\x10\x60\xdd\x79\xd9\xe8\xaa\xd1\x60\x6f\xc9\xa8\x62\xe3\x25\xad\xb9\x61\xa8\x58\x44\xcd\xc7\x16\x09\x73\xdb\xb5\x94\x60\x8c\xf0\x6e\x5c\xa4\x38\x9e\xcc\x24\x1c\x12\x1b\x1c\xb6\xc4\x3b\xbc\xb1\x39\xf1\x27\x9a\xa4\x9a\x75\x45\xf5\x22\x9d\xd6\x44\xf5\x02\x42\xda\xc0\x89\xe3\x22\x22\x81\xbf\x19\xa9\x7c\x0f\x52\x4e\x92\x2a\x89\x91\x37\x17\xab\xc8\xd6\x6b\x6a\xa6\xa1\x70\x73\x0d\x13\x05\x59\x7c\x79\xad\x35\x2c\x4c\x36\x65\x84\x0a\x72\x71\x7a\x79\xfa\xcb\xd5\x87\xb3\x5f\x2e\x4f\xdf\x9e\xc7\x74\x1d\x5d\x8a\x22\x65\x31\x8a\x64\xe5\x28\xbe\x50\xb1\x1e\xd3\x54\xb6\x60\xfb\x13\x5f\x71\x05\xd4\x84\x88\x5c\x56\x54\x0f\x60\xd2\xe3\x20\xda\xc8\x9a\x65\xd2\x30\x9e\x9d\x72\x1c\xeb\x4e\x7f\xc9\x0a\xba\xba\xc2\xb2\xfc\xbb\x36\x26\x5f\x7a\x66\x83\x85\xfb\x95\x47\x87\x67\x6b\x58\x51\xae\x1e\x83\xc5\xb4\x77\x8e\xf1\xd0\x97\x8f\xf3\xeb\xed\xae\x25\xfb\xe7\xb2\x25\x7b\x63\x83\xae\x58\xcd\x21\x14\x66\x1f\x4e\xcd\x6b\x79\x6b\x0b\x3d\x1c\x72\xe1\x4e\xce\x51\x60\x4c\x69\x7d\x10\xf1\x38\x62\x5a\x92\x17\xcf\xdd\x20\x4f\xcf\xb9\x60\x43\x5c\xf6\xda\xbd\x64\x69\xfc\xb4\x7f\xa9\x8d\xd7\xe9\xfa\x98\x62\x02\x67\xc8\x1a\x1b\x7f\x71\xec\x33\xb4\x5e\x00\x3d\x9e\x15\x51\x91\xbb\x58\xab\xa7\x77\x4e\x74\x56\x5d\xc9\xec\x26\x91\x69\xf4\xfa\x6c\x82\xbd\x7d\xd2\x1d\x75\x7d\x36\x19\xbc\x51\xfb\x65\x1f\x3d\xc0\x9c\x26\x5a\x7c\xfb\x60\x5b\xe7\xc1\xa0\x71\xb5\xcd\x09\x3f\x75\xc7\x61\x34\x68\x5c\xf7\xb5\x41\xe3\x7a\x40\x73\x95\xc5\xb8\x14\xaf\x6a\x9a\xb1\xc9\x3e\x09\x70\x8e\x81\x90\xdc\xd6\xdb\x24\xad\x1c\xe7\xd9\x85\x60\x2c\x47\xfe\xe1\x8a\xa4\x91\xb9\x99\x09\xc6\x06\x83\xb9\xaf\x8d\xaa\x6d\xea\x08\x51\xef\x7a\x61\xbb\xb6\x62\xae\xf3\xe3\x6e\xa3\xae\xd5\x4f\x2a\x8f\x06\xee\x8a\x50\xd8\xeb\x64\x88\x37\xfa\x88\x62\xa2\xbf\xe5\x9b\x86\x3b\x48\x14\x9f\x9b\xe5\x72\xb5\xf9\x10\x42\xca\x95\x52\x69\x09\x31\xa3\xce\x64\x9d\xf1\x69\xb1\x22\x0b\x5a\x18\x85\x09\x4a\xbc\x51\x72\x03\xa5\xc9\xa0\x9b\xfe\x0b\x75\xc5\x6c\xa2\x22\x4a\x35\x85\x14\x73\x58\x0c\x6a\x13\x12\xee\x2a\x96\x99\x31\xb3\x82\x51\xd1\x54\x48\xa7\x91\x91\x56\xb2\x49\x90\x93\xe0\x5c\xcb\x5e\xa6\x12\xdc\x82\x6f\x54\x10\x90\xfc\xd1\x33\xdf\xcd\x2c\x25\xef\x5c\x89\xda\x51\xff\x52\x64\xc4\x59\x68\x3d\x64\x87\x0a\x92\x03\x3c\x80\x88\x4d\x9b\x33\xc7\x02\xf2\x38\x7b\x8f\xf5\x01\xfa\x75\xac\x55\x48\x31\x16\x6c\x8e\x30\x05\x96\xa1\x61\x84\x23\x8e\x8f\xf1\x74\x3e\xd4\x5e\x69\x59\x75\xea\xb0\x2d\x39\xed\x4d\x09\x40\x22\xb4\x27\x8a\x1c\x0a\x49\x64\x65\x9e\xae\x46\x70\xbd\x02\xe7\x9b\x2b\x01\x18\x91\x6c\x74\x6d\x03\x09\x28\x99\x32\x4d\xad\xb9\xda\x5c\x02\x8f\x08\x0e\x60\xdf\xe6\xee\x41\x84\xfc\xf5\xd6\x03\xe0\x41\xc2\xe7\x54\x47\x70\x89\x2d\x12\x3d\xee\xe7\xc7\x8f\x1d\x57\xd6\xb5\x16\x89\x42\xbc\x1f\xb8\x7e\xe6\x46\xcb\x46\xef\xc9\x3b\x72\x9f\xf9\x08\x01\x1e\x02\x45\x91\x97\x4c\x11\xd9\x24\x2a\xb8\xf0\xc2\x0e\x97\x52\xcb\x1b\x6c\x4f\x5b\x9b\xd2\x39\xef\x55\x45\x2e\xc5\x11\xbb\x07\xba\xde\x26\xa1\x06\xe8\x8d\xd3\x66\x36\x63\x35\xbc\x74\x40\xf0\x46\x18\xba\x2f\x0b\xe5\xde\xb0\x7e\x06\x5c\x1b\x52\xc5\xf4\x08\x90\xf3\x2d\x92\xc2\x3d\x43\x5a\x88\x49\x28\xbb\x56\x33\x05\x48\xe8\x82\x9c\xbf\xfb\xbe\xdf\x11\x4d\x81\xab\x1f\x97\xaf\x09\xf3\x7c\x27\xfa\x85\xfd\xa5\x3d\x0f\xdb\x20\x4f\xec\xb1\xc8\x0a\xa9\x6c\x6e\x30\xec\x4b\xb6\xa0\x42\x30\x67\x90\xe2\x1a\xac\xd9\x53\xc6\x04\x91\x15\xc3\xb0\xb7\x5e\xc4\x50\xa2\xb8\x98\x17\x8c\x50\xad\x69\xb6\x38\x36\xd4\x09\x77\x16\xda\x24\x5c\xfb\x1b\xa5\x6b\x46\x4b\x3c\x13\x35\x2b\x29\xc7\xe1\x09\xcd\x6a\xa9\x14\x29\x9b\x42\xf3\xca\x77\xd6\xcf\x92\xc8\x00\x0e\x41\x61\x4e\xa6\xdb\x2b\x48\xb3\x68\xb3\x7d\x47\x2d\x85\x76\xfa\x52\xac\x97\x8b\x1d\x99\x4f\x59\x59\xe9\x95\xcf\xca\xeb\xa7\x03\xcd\x78\xad\x34\xc9\x0a\xce\x84\xb6\x33\x43\xc0\x3d\xa0\xc1\xd7\xfc\x16\x76\x45\x94\x5d\x12\x91\x83\xf2\x5d\x69\x85\xc9\x67\x9e\x08\xd7\x55\xce\x95\xb5\x75\xa8\x7e\xa9\x6f\xd4\xd5\x65\xc1\x83\xe3\x56\x04\x8e\x8e\x13\x70\x90\x22\xfb\xab\x80\x84\xb0\xf2\xad\x4f\x1c\x8c\xe3\x2b\x50\x3c\xc5\xdd\xeb\x51\x27\xe1\xbe\xd5\x2d\x20\x35\x64\x83\xeb\xc0\x81\x12\x6c\x69\xee\x01\xcb\x98\x11\x45\x69\x42\x26\xf3\xe8\x3c\x26\x90\xe5\xde\x32\xa5\xe8\x9c\x4d\x7a\x86\x24\xa4\x60\x38\xad\xa1\x0d\x62\x19\xda\x63\x03\xd5\x6f\x0b\x84\x41\xf3\xbf\x09\x93\x9e\x42\xe5\xb1\xc4\x89\xf4\xa2\xc0\x29\x4d\xb7\x35\xd7\x9a\xc1\x29\x85\x52\x46\x10\x2b\xb6\x0e\x5d\xd9\x4d\xb6\xea\x35\x9e\x5d\xf4\x70\x3c\x23\x7e\x88\x1c\xd3\x96\xa6\x8c\x4c\x6b\xce\x66\x64\xc6\x21\x8f\x0a\x32\x8c\x46\x88\xc1\x4f\xd1\x84\xac\x14\xab\x61\xda\xd6\x2c\xe0\xa6\xdf\x8f\x9e\x7f\xd8\xf9\xeb\xba\x11\x19\x0d\x2a\x3e\x02\xb0\x16\x9f\x91\x39\x64\x35\x59\x25\xf8\x4f\xcf\xff\xf6\x17\x32\x5d\x19\x79\x0d\x14\x31\x2d\x35\x2d\x1c\x01\xa4\x60\x62\x6e\x76\x11\x58\x6e\x3f\xbe\xd1\x01\x67\xf2\x9b\x53\xf0\x92\x6b\x5c\xa0\x17\x7f\xb8\x99\x46\x5d\x3d\xe0\x8f\x27\x39\x5b\x9e\x04\x47\x68\x5c\xc8\x79\xbf\x5e\xcf\x52\xa4\xd2\x46\xd9\xd9\xb6\xdc\x68\x28\x74\xbf\xab\x3b\xed\x4a\x77\x90\x85\xbc\x45\x63\xce\xe6\x55\x0d\x70\x4e\x2a\x59\x35\x05\x2c\x1c\xf9\xde\xa3\xd3\x35\x8a\xad\xe3\xfe\xc4\x1a\x09\x03\x6e\x07\x8e\x54\x3b\xec\x7a\x19\x6f\x4c\xe9\x73\x64\x4a\x8b\xba\x60\xfd\x6e\xbe\x0a\x47\x6f\x6b\xdc\xf7\xb4\x28\xa6\x34\xbb\xb9\x96\x6f\xe4\x5c\xbd\x13\xe7\x75\x2d\xeb\xee\x9c\x0b\x6a\xde\xf4\x45\x23\x6e\xa0\x28\x6b\x0b\xc5\x2a\xe7\x36\xfc\xcf\x25\xcf\x07\xb3\xeb\x45\x8c\x9b\x25\x82\x63\x3a\x91\xc4\xd9\xe0\xda\x91\xd9\x1d\x6f\x0d\x6d\x82\x30\x43\x73\xdf\xec\x73\xd6\x99\x87\x0a\xaf\xf6\x1f\x9e\xff\xe9\xaf\xc8\x5c\x88\xac\xc9\x5f\x9f\x43\x0a\xae\x1a\xe1\x03\x00\x2f\xb0\x11\xb5\x4a\x5a\x14\x7d\xbd\x04\x21\x0b\x30\x87\xed\xab\xbd\xf2\x7a\x67\xb7\xfb\xb3\x55\xc6\xeb\xeb\x1f\x41\x5f\xe4\x5a\xb1\x62\x36\x42\xa8\x13\x6f\xd6\x3a\x00\xe9\xea\xc0\x3e\x79\xfd\x61\x72\x76\xaf\xb4\x2d\x65\xd1\x94\xec\x25\x5b\xf2\xac\x9f\x03\xb3\xb3\x2b\x9d\xde\x9c\x99\xbe\xe0\x0a\x10\x70\xa6\x85\xcc\x6e\x48\x6e\x3f\x0c\xa2\xda\xd7\x8b\x34\xf7\x5f\x85\xbe\xf1\xfd\x11\x71\xfd\xf7\xce\xbf\x13\xd1\x5f\xd2\xaa\xf2\xf0\x1c\x35\xbd\xed\x2c\x06\xb0\x26\x80\x06\x8d\x74\x23\x46\x3b\xd3\x63\x5d\xe9\x63\x3b\x23\xf3\x4c\xf5\xee\xa2\x77\x1a\x40\xbc\x27\xbe\xa5\xbe\xbf\x1f\xb3\x73\x20\xda\x0e\xdd\x6d\xa8\xe0\xdf\x88\x3f\xb0\x01\x0b\xe5\xf1\x76\xfc\xc1\x40\x09\xd2\x1c\x1f\x78\x65\xfa\x9b\x2f\x13\x38\x43\xe3\xd2\x19\x3a\xeb\x22\xbc\x13\xba\xa4\xda\xea\x47\xce\xcb\x4e\x49\xc5\x6a\xc5\x95\x11\x9d\x3e\xc0\x85\x3a\x2b\x28\x2f\x03\xf7\xdd\x6e\x16\x01\x2f\x37\xd4\x36\x8d\xe7\x94\x3d\xdf\xaf\x89\xcc\x2d\x1d\xc0\x41\xb1\x6c\xed\x17\xd1\xf4\x12\x8a\x09\xbb\xe6\xca\x1f\xda\x8d\xfb\xff\xd9\xfb\xf7\xe6\xc6\x6d\x2c\x6f\x1c\xff\xff\x79\x15\x28\xcf\x56\xd9\xce\x48\x72\x77\x32\xb7\xed\x67\x7e\x33\xe5\xb4\xdd\x19\x3f\xe9\x76\x7b\x6d\x27\xa9\xfd\x25\xb3\x3b\x10\x09\x49\x18\x93\x00\x03\x80\x72\x6b\x36\xfb\xde\xbf\x85\x73\x00\x10\x94\xe5\x8b\x40\xda\x92\x3b\xe6\x54\x4d\xc7\x12\x45\x1c\x02\x07\x07\xe7\xfa\x39\x6d\xa1\x6c\x3f\x09\x52\x19\xef\xfa\x9c\x64\x31\xbc\xdf\x73\x15\xc5\x81\xf8\x9e\x24\x4e\xa7\x64\x20\x10\xe0\x8e\x33\xda\x12\xbb\xe5\xf3\xc1\x9d\x19\x59\x87\xce\x17\x33\x42\xd4\xf8\x0e\x04\xd8\xad\xe8\x06\x25\xbb\x6f\x76\x37\x7a\x0c\xe0\xca\x28\x59\xd1\x29\x18\x6f\xdb\xb0\x40\xcb\x34\xc5\x18\xa5\xd6\x90\x87\xef\x31\x01\xa3\x72\x77\xb1\xbc\x01\xba\x9e\xc9\x4e\xab\x83\xc9\x75\x9e\x23\x9c\x01\x8a\x58\x76\xd7\x74\x41\xa8\x92\xb5\xe8\x54\xd4\x0b\xb1\x83\x10\x5b\xfa\xb0\xf4\xb2\xa7\x52\x30\x1f\xc7\xee\x32\xca\x65\x83\x71\xcd\x35\x86\xf4\xb9\x20\xaf\x47\xaf\x5f\x7d\x2e\x6a\x07\xbc\xe1\x92\xda\x71\x1a\xd4\x0e\x3c\x01\x36\xfa\xae\xbe\x47\xf8\x36\xec\xa9\x0f\xce\x91\xdc\x34\x01\xe7\xbe\xc9\x2c\x7c\x74\xad\xb8\x71\x6c\x7e\xcd\x35\x23\x7b\x60\xc2\x12\xa9\x62\x90\xd1\x4e\x50\xb6\xb1\xc3\xa3\x63\xb3\xf0\x3e\xa0\x68\x75\x3d\xde\xd6\x03\xc9\x9d\x3c\x20\xd0\x56\x47\x1c\x6e\x3d\x9b\x7a\x5a\x9f\x9d\x1d\xb2\x87\x63\xec\x22\xe2\x5b\x87\x95\xef\x61\x23\xb9\xb5\x3a\xfe\x54\x75\x68\x1a\xd6\xdf\x7a\x1d\x7f\xaa\x28\x04\x49\xaa\xad\x58\xb8\xaf\xd9\x8c\xce\x19\x00\xec\xf1\x82\xaa\x02\x32\xc2\x2e\x70\xca\xc8\xb8\x36\x84\x89\x39\x57\x52\x94\x4c\x18\x02\x45\xda\xe3\x82\x11\xc5\x00\x86\x34\x63\x9a\xfc\xdb\xde\xf7\x87\xe7\x90\x31\xbc\xef\x70\x5a\xdd\xfb\xd5\x1a\x0a\xf4\x96\xde\x21\x7a\xdc\x36\xf2\x1b\xf1\xef\x6e\xd9\x05\x0e\x70\x3f\x17\xf6\xdd\xca\xda\xd4\xb4\x00\x1c\xc2\xac\xa8\x35\x9f\x6f\xea\x88\x70\x48\x8d\x47\x3c\x89\xa5\xfb\x60\xe6\xb7\xd1\x9a\xde\xc0\x8d\x4c\x46\xe0\x5d\x81\x43\x74\x23\x7d\x63\x57\x07\x6c\xa2\x38\x51\xd4\xb9\xd7\xd3\xe2\x07\x00\x6c\x8b\x15\x4a\xbe\x65\xd4\x0d\xfd\x1e\x10\xb4\x37\x6e\x41\xaf\xcd\x30\x42\xe6\x6c\x7d\xb8\xf4\x6e\x2c\x72\xea\xc6\xc4\x8c\xd0\x08\x42\x49\x67\x33\x96\xd7\x05\x73\x50\xcb\x32\x27\x52\x18\x49\x68\xd3\xe9\xc6\x92\x0b\x39\x12\x1e\x51\x5f\x0c\x21\x9a\xb3\x6e\xfa\x06\x24\xd4\xb8\xd1\x94\x87\x0f\xf5\x1f\xe8\xa5\xf1\xc1\xd9\x66\x47\x1e\x10\xaa\x75\x5d\xa2\xe0\x82\x26\xf8\x64\xc2\x0d\xa4\x6f\xc8\x5a\x65\xeb\x5a\xc0\xce\x70\xb7\xc2\x6e\xcd\x64\xea\x0e\x8b\x7d\xc1\x0a\xd8\x85\x4f\xbd\xe0\x7e\x5c\x5c\x74\xed\xff\xc2\xa3\xcc\xa7\x42\x43\xb2\x53\xa8\x0d\x94\x10\x2e\x9b\x70\x43\xa4\x20\x14\xd7\x7e\xcd\x91\x2f\x56\x8c\x83\x1a\x3d\x3e\x6f\x57\x63\x2b\x4f\xbd\x3c\xea\xb8\xe1\x0f\xd7\xb0\xce\xf1\xc0\xba\x14\xac\x99\x0d\xea\x45\x0c\xd8\x6b\x07\x54\x6b\x3e\x15\xc3\x4a\xe6\x43\x3b\xf6\x41\x02\x93\x24\x38\x96\x7c\x4f\x08\x5a\x9c\x25\x7b\x67\x92\xcf\xaf\x56\x11\x4d\x49\xab\xa1\x73\x0d\x1a\x59\xf2\x6c\x8d\x27\xc9\x35\x49\xee\xc6\xe1\x17\x2d\x68\xb8\x8f\x17\x37\x3c\xf6\x3a\xf2\x4a\xaf\xcd\xc4\xb2\x74\xc5\x28\x22\x8f\x4e\x1c\x30\xc0\xd1\x55\xa1\x98\x9d\x69\x28\xd9\xe0\x0d\x6c\x1f\x24\xa9\xaf\x0b\x02\x78\x32\xf1\xaf\x10\x0c\x7c\x97\xf6\x07\xbd\xaa\xf0\xd4\x9d\xc8\xa2\x90\xd7\x50\x91\x8b\x44\xf8\x0d\x0c\x99\xf1\xeb\xf2\xca\x50\x2f\x35\x83\x68\xb7\x5c\xeb\xf1\x15\xdc\x83\x07\x7d\xbf\x00\xd6\x0f\x40\x37\x9e\x93\xa3\xf4\x1f\x9f\x9c\xbd\x4d\xff\xf1\x77\x9a\xa9\x75\xb3\x91\xdc\xcf\x97\xe7\xbf\xdd\xf4\xbf\xaf\x67\xc6\x1d\x89\xfb\x79\xe6\x44\x7f\xa3\x64\x5d\xf5\xfa\xb0\xb7\x33\x2a\x7c\x6a\x51\x4f\x6f\xbe\xd0\x99\x29\x52\xa7\x71\x46\x15\x73\x3d\x79\xac\xce\xa4\x2b\xba\xb6\x9e\x71\x0b\x5d\xa1\x5d\x4e\x8f\x8f\xeb\x71\x3d\x74\x5d\x55\x05\x28\x47\xb4\x80\xc7\x26\xce\x60\x23\x82\x7f\xfc\xe2\xef\x8f\xc2\xea\xf7\x8d\xd0\x9d\xf1\xef\x1e\x21\xa3\x15\x1d\xf3\x82\xdb\x73\xfa\x31\x9e\xef\x7d\x8d\xe7\x52\x9a\x77\x21\x5a\xf8\x18\x23\x55\x8a\xcf\x79\xc1\xa6\x6c\xdd\xc8\xed\x83\x9e\x0e\x68\x91\x67\x7e\x88\x63\x9d\xd1\x22\x25\xa9\xec\x81\x6f\x22\x33\xf0\x8b\x3e\xca\x82\x74\xdb\xb9\x0f\x78\xf8\xfa\xfb\x38\x59\xdb\x4c\x0d\x5f\x26\x04\x1d\xd3\x83\x8d\x69\xa1\x85\xee\x9e\x94\xdb\x9a\x12\xba\xee\x38\x62\x4a\x5a\x1d\x31\x6a\xa5\x98\x30\xd6\x94\xad\xa1\x88\x93\x39\x50\x40\xd4\x12\x41\x81\x03\x25\xb2\x43\x3f\xf8\xc3\x60\x1c\xb8\x62\xb9\x92\x2e\xac\xe2\x14\x75\x2e\x9e\xd4\x50\xa5\x09\xda\x2a\x36\x2a\x92\xc2\x52\x9e\xe2\x8c\x5a\x81\x82\x2d\x2b\x26\x1a\x16\x3e\x70\x7e\x9f\xa1\x65\xed\x16\x2e\x36\x9a\x52\xa3\x32\xff\x4d\x55\x50\x33\x91\xaa\x1c\x7a\x3f\xc2\xb0\x65\x66\x25\x90\xf5\x16\x0a\x48\xb4\x77\xb6\x62\xc1\x34\x36\xf5\x13\x79\xc1\x22\x13\x2a\x2c\x80\xc8\xb1\x73\x06\xa9\x85\x62\x99\x9c\x0a\x40\xbb\x74\xdf\x82\x71\x10\x82\x6a\x54\x5b\xf3\x85\x88\xba\x28\xd6\xcf\x99\x4c\x33\xbc\xe4\x9c\xa9\x19\xa3\x6b\xee\xc2\x6e\x0c\xfe\xd1\x8d\x49\x14\xab\x14\xd3\x30\xa1\x88\xf1\x8b\xee\x94\x40\x14\xa1\x5a\xcb\x0c\x20\xc1\x30\x3b\xd7\x17\xea\x53\x30\x8b\xa0\x69\x3a\x99\xf2\x39\x13\xbe\xad\xf5\xdb\x82\xae\x5f\xa0\x1e\x85\x35\x43\xef\xf0\xda\xc8\x90\xb9\x4d\xa8\x89\xba\xc5\x42\xc9\x8f\xcb\x48\x8c\x47\x8d\x6e\xb1\x5c\xaa\x24\xe4\xf1\x92\x93\x75\x33\xbb\x1f\xf4\x5c\x48\x67\x16\x74\x5c\xb0\x7c\xd0\x4c\x17\x18\x33\x51\xeb\x61\x6c\xb9\x47\x32\x28\x71\xf0\x0e\xb7\x84\xe9\x79\x08\x41\xae\x32\xcd\x1e\x03\xab\x06\x75\x8e\x98\xd0\x77\xb3\x59\xe2\xc2\xaa\x19\xeb\xaa\xdc\xd6\xc4\xb5\xf6\x5e\x8b\x2e\xde\x6a\xee\x0f\x68\x4e\xe0\x06\x6a\xdc\xb6\x67\x32\xb7\x16\xfb\xa0\x61\x41\xbf\xe0\xbe\xc4\xcd\x57\xdf\xaf\x49\x4f\x24\x05\xd1\xfc\x57\x8a\xe9\x4a\x8a\xdc\x72\x6b\x4c\xe4\x20\x8a\x87\x72\xd3\xaa\xe7\x03\x13\xb4\x91\x17\xd8\x69\xe7\x5f\x4c\xad\x9d\xd3\xb7\xc2\xf5\x34\xe5\x66\x74\xf5\x27\xf0\x3b\x31\x31\xa3\x22\x43\xef\xe3\xc1\x15\xab\xf4\x81\xe6\x53\x74\x33\xfd\xe1\x4f\x7f\x02\x9f\x93\x5f\x9c\x83\xf3\xe3\xc3\xa3\x0f\xc7\xa3\x72\x3d\xb5\x6c\xa3\x0e\xa8\x8a\x1a\xc3\x94\x78\x43\xfe\x6b\xef\xa7\xdf\xfe\x32\xdc\xff\xeb\xde\xde\x8f\xaf\x86\xff\xfe\xf7\xdf\xee\xfd\x34\x82\xff\xf8\x62\xff\xaf\xfb\xbf\xf8\x3f\x7e\xbb\xbf\xbf\xb7\xf7\xe3\xb7\x1f\xbe\xb9\x3c\x3b\xfe\x3b\xdf\xff\xe5\x47\x51\x97\x57\xf8\xd7\x2f\x7b\x3f\xb2\xe3\xbf\x3f\xf0\x21\xfb\xfb\x7f\xfd\xb7\x35\x09\x4d\x44\xc3\xe9\x8a\x80\xd3\x09\xf5\xa6\x47\xa4\x9b\x4a\x31\x56\xc2\x09\x92\x52\xce\xd3\xed\x00\x3a\x5b\x1a\xdb\x6b\x5a\xee\x2f\x7b\xae\x78\xf2\xc4\xd4\x1e\x35\x1a\x8f\x9f\x42\x5e\x43\x49\x25\x97\x56\x71\x5e\x77\x5b\x7e\x04\x65\x88\x9c\xb2\x39\x53\x03\x4f\xc3\x7b\xfb\xc8\xb3\xc4\x27\xc6\xe1\xce\x55\xcf\x4b\xc4\xac\x48\x64\x10\x3f\x2f\x4f\xb9\x92\x97\x00\x11\xe1\xde\x16\x04\xf7\x88\x7c\x4f\x15\x97\xb5\x76\x1a\x32\x74\x03\x95\x02\x94\x0c\x2c\x41\x0a\x87\x3d\x04\x19\x30\x19\x6b\x5d\x21\xe3\x87\x0c\x98\x5f\xb9\xab\xdf\x0e\x53\x7f\x18\x0e\xc9\xb7\xab\x4f\x6d\xbe\xae\x89\x58\x29\x36\xf7\xaf\xa1\x7c\x11\x2f\x33\x08\x78\x1b\xde\x0a\x2d\x82\x95\x47\xb4\x57\x68\xd6\x75\x16\x44\x53\x06\x83\xfa\x77\x84\x03\xed\x34\x01\x19\x1e\x10\xcc\xf9\xd4\x97\xe2\xc3\xba\xa1\x83\x39\xfa\x34\x6d\x9b\xa5\x0b\xc7\x54\x9c\x8b\x6a\x79\x36\x9e\x92\xff\xdb\x0d\x72\xe3\xbe\xbc\x1e\x53\x29\x4c\x23\xd9\xc1\x0d\x01\x47\xfd\x30\x53\xdc\xf0\x8c\x16\x3b\x09\x1d\x96\xfd\x83\xb2\xa2\xb6\x06\x57\xfc\x2c\xc5\x88\xb9\x96\x48\x13\x2d\xc8\x15\x5b\x5c\x4b\x95\x7b\xed\xcf\xd3\x97\xb0\xe3\x80\x31\xb4\xf1\xaf\xc3\x99\x13\xc9\x18\x95\x50\x25\x53\x64\xcc\x7c\x66\xc9\xd2\xcd\x8b\x11\x39\x14\x0b\x54\xbc\x12\xec\xff\x10\x23\x88\xfa\x1c\x81\x76\x8b\x96\x48\x6b\x37\x38\xad\xc7\xd3\x46\x4d\x52\xe7\x84\xd5\x29\x0f\xd6\xe4\x09\x82\xc7\xeb\xad\x3e\xe7\x41\x2a\x87\x17\x05\x02\x49\x21\xba\x96\x5c\x5f\x8b\xb5\x0f\x7b\x92\xd3\xc2\x6a\xfd\x5c\x30\xad\xbf\xb1\x0c\xbb\xb9\x3d\x43\x41\x01\x77\xb4\x00\xc2\x54\x53\x97\xcd\xac\x64\xc2\x44\x60\xab\x12\xc8\xbc\xb9\x73\xdd\x25\x3d\x84\x9f\x03\xe4\x03\xcd\x17\x88\xfd\x66\x87\xe6\xa6\xdd\xf6\x1f\x82\x7a\xf6\x8e\xc3\xd3\x75\x03\x4a\xae\xb8\x1c\x55\x68\xdd\xee\x6d\x8e\xe6\x75\xfb\x2d\xc1\x16\x73\x05\xc1\xec\xe7\x9a\x16\x90\x35\x75\xa9\x6a\xb6\xf3\x14\x06\x07\x33\xd7\x52\x5d\x1d\xfc\xfe\x4f\xaf\xc0\xe6\x08\xd4\x0d\xa7\x6b\x1f\x51\xa9\x55\x24\x49\xf5\x23\x4b\x8d\xfd\xf2\xf3\x98\x91\xfd\x5a\x7a\x87\x86\xcb\x87\x03\x3c\x50\xe0\x80\xb0\x40\x49\x71\xf5\xa4\x6a\x91\xf4\x3a\x91\x61\x43\xee\xe5\xa2\x5a\x5f\x49\x4a\x2f\xf1\x68\x8d\xdb\x39\x99\xed\x6d\xfc\x34\x5c\x15\x8d\x4b\x12\xc6\x89\xc2\xf4\xbb\x3a\xfa\x18\x6a\x53\x41\x9a\x43\xfa\x08\x9c\x30\x8b\xaa\x43\x1d\x6e\x82\xa0\x44\xaf\x18\xd4\xb8\x3d\xa9\xa0\x3c\x6f\x8d\xec\x8e\x3f\x7f\x96\x2f\x7d\x19\xf0\x62\x5d\x85\xf4\xba\x3a\x05\x62\xe6\x40\x5b\x97\xd0\x23\xc0\xb7\xd9\xe7\x1a\x1b\x7e\x61\x19\x3d\x20\xe6\xa0\x96\xeb\xa7\x66\x5d\x85\xb6\xa9\x9a\xcc\x19\xa1\x73\xca\x0b\x48\x5f\x05\xff\x8f\xd4\xad\xec\x0d\x7c\xd9\x4c\x0a\x5d\x97\x40\xd1\xba\xf1\xaf\xf1\xc2\xa9\x00\xeb\x66\x33\x04\xec\x44\x7b\x50\x54\xb3\xbb\xd1\x13\xd7\x57\xa8\x8e\x16\x82\x96\x3c\xf3\xcb\x78\x88\xeb\x06\xb8\x2b\x2d\xb4\xc5\x24\xb2\x43\xfe\x05\x2f\xcb\xda\xd8\xc9\x4d\xd1\x29\x36\x21\xd0\x13\xa2\x35\x70\x06\x44\x9b\x21\x4e\x83\x66\x9f\x68\x66\x8a\x05\x04\x42\xda\x37\x99\x99\x92\xf5\x74\x46\x28\x81\xbf\x2f\xe0\xab\xf5\xc5\xca\x89\x21\x34\xcf\x35\xa1\x01\xc5\x9b\x1b\x54\x3c\x6b\xc1\x7f\xae\x59\xb1\x20\x3c\x67\xc2\x34\x49\x4a\x6d\x32\xa2\xb6\xef\x67\xeb\x67\x28\x45\x09\xbf\x0e\x60\x0a\xfa\x93\x3b\xe8\x6b\xe7\x4f\xbd\x65\x72\xd0\xfd\x09\x6a\xb2\xd5\x55\x13\xd4\xe4\x0d\x9d\x89\x09\x35\x8f\x5d\x8e\xc2\xd4\xea\xa6\x3e\xd2\xb9\x21\x0c\xb9\x9a\x91\x78\x93\xfe\x4a\xb2\x65\x56\x4a\x48\x76\xc3\xab\xa9\xbf\xb2\x67\x09\x39\x3a\xbd\xf8\xef\xf7\x87\x5f\x1f\xbf\x7f\x72\x08\x12\x7c\xb3\xce\xf3\x8e\xdb\x3a\x2a\x2a\xbe\x06\xe3\x2c\xf2\x3c\xb5\xb7\x47\xfa\x7b\x26\x17\x12\x77\xad\xc4\x6d\xe9\x27\xeb\xfb\x3f\x9a\xab\xaf\x62\x9a\xf3\x65\x82\x96\x03\xe9\x74\x49\x24\x39\x9b\xdd\x69\x80\xba\x4b\x93\x49\xe1\x53\xb5\xb0\x31\x21\x66\x93\x77\x43\x0c\xee\x50\xe5\xd4\x5a\x9a\x4b\x56\x56\x05\x35\x09\x59\xff\xcd\xf5\x28\x4b\x14\x13\x76\xcf\x52\xf9\x5b\x93\x07\xbe\xb9\xd4\xb7\x2d\x59\x7a\x13\x6d\x00\x8e\x73\x84\xb6\x6a\x51\xa0\x0c\x18\xc3\xa2\x94\x08\x76\xdd\x7e\x37\x57\xa9\x02\xbf\x48\x1e\x7b\xcc\xc8\x58\xd6\x22\xc7\xb3\xd7\xbd\x0b\x7a\xa6\x43\x6d\x03\x74\xec\x2e\x98\xf1\x7e\xa5\x16\x15\xc9\x23\x3b\xb4\x5a\x2d\xd1\x2b\x05\xcf\x47\x2d\x1d\x7a\x01\xd8\x99\x76\x3a\x3e\x8a\x44\xfb\xc9\x80\xd0\x42\x8a\xa9\x43\xde\x4a\x1e\x7a\xca\x04\x53\xe0\xa6\x09\xbe\xfe\xc1\x8d\x89\x87\xb6\x52\xd4\x1d\x66\x48\x8f\x4b\xfd\xef\x87\x8b\xe3\xe5\xb3\xe3\x2a\x96\x49\x95\xa3\xf7\xc5\x2e\x02\x3a\x5a\x46\xad\x2d\x79\x01\x9f\x31\xdd\x8d\xdb\x56\xea\xdb\x30\xd9\x42\x02\x7a\xed\x34\x72\x69\x81\xc9\x83\x8a\x59\xf2\x90\x4b\xd1\xed\x96\x2c\x8d\xa0\x9a\x94\x2c\x48\x55\x50\xc1\x1c\x74\x6e\xf0\x99\xf6\x36\xe7\x4f\x2e\x58\x5b\xf1\xcf\x82\x6b\x03\x95\x0a\x57\x6c\xb1\xf6\xd9\x99\xa0\x46\xde\x1c\x1c\xdf\xa3\xa4\xeb\x64\xec\x39\xc8\xd9\xa7\x0f\xba\x9e\xe3\xc0\xa4\x6a\x82\xac\x37\xe0\x30\x43\xd5\x6b\xc2\xa9\xe9\xc2\xab\x87\x00\x98\x3d\x20\x1f\xc5\x3b\x04\x32\x1c\x60\xc4\x75\x44\x4e\x04\xd1\xb2\x74\xa0\x8b\x9f\x8c\x1e\x10\xa8\x59\xa7\x44\xd7\x63\xcd\x0c\xc6\xf2\xac\xf9\xef\x72\xb3\x5c\x82\x5b\xc5\x54\xc9\x4d\x42\x75\x5e\xd4\x80\x0e\x89\x7a\xe4\x12\xa2\xbb\x00\xe5\x0f\x7e\xe3\xd6\x7d\x58\xad\x9f\xe1\x9e\xea\xb8\x8a\xd2\x5e\x9e\x3a\x2e\x76\xbe\x34\x76\xcb\xe9\xd7\x4a\x1a\x6a\x6b\x04\x50\xe9\x85\x7e\x6b\x32\x55\xb2\xae\xbc\x58\x6f\xaa\xab\xed\x81\xb2\xae\xa1\x2a\xed\x64\x44\x07\x32\x46\x78\xda\x84\x84\x93\x11\x1c\x8d\xac\xd1\x83\x72\x6b\x5f\x69\xdd\x04\x81\x10\xb3\x19\xd3\xbc\x54\x2d\x12\xa2\x4b\x98\x6a\x24\x15\x42\x62\xe2\x93\x77\x0a\x36\xa5\xd9\x62\xa7\x4d\xd5\x8a\x5a\x5a\xe7\x94\xe2\x65\x55\xf0\x8c\x1b\xa4\xce\xa3\x67\xae\x49\x0b\x42\x72\x82\x67\x11\xfd\xad\xe8\xba\xd0\xee\xf5\x7d\x74\xcb\x43\xb4\x63\x96\xe5\xda\x80\x4b\xc9\x09\x51\xbf\xff\xd3\xef\x87\x3e\xcf\x14\x5e\xf3\x29\xf6\x4d\xa8\x4f\xdd\x6c\x30\xb9\xc5\x6d\x56\xa7\xe3\xba\x02\xce\x84\x00\x68\x13\x5d\x0a\xe4\xf6\x17\xe5\x5c\x3d\xa4\x67\x86\xc4\x01\xbb\xad\x06\x17\xd3\x27\x0f\x54\x5e\xb4\x87\x76\xfb\x4e\x56\xd4\x6a\xb0\x1e\x34\xd3\x1d\x56\x58\x97\x1c\x2d\xa0\x9b\x44\x40\x91\x6c\xde\x21\xf5\x70\xb5\xac\x71\x93\x1a\xbb\x7c\x91\x04\x09\x4b\xa7\x0d\x5d\x78\x89\xda\x7e\x09\x68\xb0\x69\x98\xc7\x40\x5a\x37\xeb\x33\x54\x6e\x07\x11\x48\x8d\x35\xb5\x96\xab\xc8\x59\x9a\x0d\xb7\x3c\xe1\x99\x9d\x6e\xab\x23\xb8\x04\x51\x6a\x30\x86\x07\x8a\xac\x4b\x05\xc6\x2e\x04\xa0\xf0\x97\x72\x0e\x45\xc3\x56\xa9\xb0\x1a\xef\x35\x55\x79\x82\x6e\xbf\xdc\x34\xc9\xb9\xe3\x5d\xe2\x90\xd7\xb0\xcf\x64\xde\x90\x1b\x62\x90\x1d\x5a\x25\x6d\x34\x88\xda\x9e\x79\x78\xfb\x26\xf5\x1b\x0e\xed\x33\xac\xcf\x9e\xd6\x54\xe5\x10\x35\x6f\xf8\xf1\xc5\x6f\xbc\xea\xda\xb8\xdf\xd8\xe5\xc6\x45\xc2\x27\xbd\x7f\xd7\x31\xb5\x3a\x58\xfb\x49\xe8\x27\x86\x2c\x86\x25\xbb\x1e\xf2\xe0\x9e\xd2\x63\xfc\x19\xd8\x85\x4b\xe5\x60\x4f\x7a\xce\xb5\x87\x26\x33\x59\xe4\xa0\x28\x0f\x0b\x36\x67\x45\x20\xcd\x0a\x7b\xc5\xc7\xb5\x71\x65\x35\x99\x2c\xcb\x76\xf7\x19\xcc\x86\x5c\xdb\xd0\x6a\xda\x74\xc4\x19\xb5\x70\xb2\x8d\x2c\x79\x0c\x38\x23\x7e\x4b\x30\x5f\xbd\x42\xe2\x8e\x60\x39\x21\xcc\xb2\x69\x02\xfb\x25\x4b\xa4\x74\x01\xe1\xca\x9e\x37\x51\xdc\x76\x18\xf2\x03\xe3\x5a\x5f\xb4\xb7\x50\x91\xa1\x55\x55\x70\x44\xb0\x5d\xf2\x11\x00\xf2\x6a\xa2\x4f\x1d\xf0\x14\x1c\x5a\x96\x9d\x71\x97\x56\x00\x52\xea\xdb\x7a\xcc\x0a\xac\x01\x41\x97\x19\x56\xa9\x5c\xdb\x41\x67\xbc\x42\x61\x46\x8d\xfb\x79\x8a\x6c\x01\xc7\xa8\x7d\x60\xdc\x50\xf2\x4d\x92\xe7\xef\x35\x3a\x56\xe5\x35\x14\x43\x7d\x73\x72\x14\x34\x66\xfb\xd8\x77\x17\x29\xd5\xd8\xf6\xfa\x12\x9f\xab\x99\x99\xf2\x9c\x8c\x11\x6b\xc7\x2a\x3e\x7b\x82\x5d\x23\x60\xb0\x73\x60\x87\xa4\xb2\xb9\x07\xc5\xc5\xf1\xc3\xfb\x39\x22\xf6\x13\xa8\xf8\xca\xb9\x8d\x99\xf2\x39\xcc\x63\xee\xa0\x39\x3f\x9e\xef\xfa\x4a\xb0\xeb\xa1\xba\x1e\x0e\x87\xc3\xa4\x09\xf4\x26\xf0\xa0\xb5\xf6\x41\xa9\x2c\x65\xce\x27\x8b\x25\x0e\xb0\x12\xa7\xa1\x09\xb6\x3b\x15\x0b\x37\x01\x29\xec\x78\x2a\x21\x13\x96\x9a\x38\xc1\x3a\x0b\x98\x50\x76\xde\x21\x4d\x10\x6a\x77\xa5\x1e\x09\x17\x1f\x49\x2e\xe2\xec\x56\x38\xd2\xa5\xf7\xe4\x0a\x8c\x85\x4d\x08\x9e\x15\x64\x84\xac\xa6\x31\x9b\xd1\x39\x97\xd0\x8c\x12\x24\x00\xe0\x3e\xdf\xb2\xfa\x5e\xb7\x49\x96\x06\x2e\xc3\x09\x53\x96\xd9\xa7\x0a\x9a\x84\xb9\x00\xfa\x99\x84\xc0\x49\xbb\x26\x11\xad\x8a\xaa\x02\x24\xbe\x84\x01\x5b\x62\xcf\xb9\xb4\xb0\x56\xd8\xcf\x0a\x19\x53\x4b\x44\x78\xe5\xbd\x25\x86\x4f\x82\xcf\x3b\x71\xbb\x0a\xb4\x34\x21\x09\x9b\x4c\x58\x06\xb8\x4e\xac\x9a\xb1\x92\x29\x5a\xb4\x49\x73\x9d\xa0\xde\xd8\x43\x5f\xd9\x0d\x8a\x15\x7d\x25\x5d\x1b\x06\x82\xb8\xac\x32\x38\xc6\x73\x9e\x84\xd2\xfd\x3d\x2d\x78\xab\x94\x7a\xe7\xa3\x38\x97\xd2\x7c\xe0\x1a\xbc\x74\x90\x3d\x4f\x76\xd0\xbd\xbb\x33\x5a\xe1\xd2\xf0\xdf\x75\x81\xdf\xdd\x90\xa0\x48\x0a\x3c\x37\x28\x02\x9b\xd8\xe0\xf6\xdc\xb0\xc7\x61\x70\xb8\x5a\xb3\xd9\xa8\x45\x25\xb9\x30\x37\xbb\x29\x74\x68\x68\xfd\x9d\xeb\x1b\x0e\x6e\x49\xaf\x08\x76\x69\x11\xfc\x81\x2e\x42\xf8\xd4\xd5\xee\x2e\xe9\xc5\xe8\x36\x76\xdf\x41\xdb\xa6\x65\xc5\x79\xfd\x52\x0e\x82\xf9\x6b\x4b\x0f\x1a\x44\x5d\xb0\x5b\x69\xe4\xcb\x03\x1a\x7a\xc5\x34\xa9\x14\xcb\x58\xce\xc4\xda\x00\x35\x04\x8f\x15\xe4\xed\x4e\x70\xfa\xbf\xa2\xb3\x14\x76\xd8\xa9\x04\x39\xb4\x89\x3d\x76\x12\x15\x19\xb9\x66\x24\xcd\x8e\x02\x93\xdc\x6e\x3d\x0a\x29\x89\x52\x0c\x95\x94\xe0\xd0\x4f\x5a\xd6\x13\x8f\x27\x7d\x43\x4d\x9b\x5b\xc9\xec\xfb\x9b\x01\x06\x27\xa1\x4d\x9c\xc0\x5a\x6f\x42\xd7\x8a\x79\xbc\xc6\x14\x3f\x88\x64\xe8\xe1\x74\xaf\xf3\xdd\xc9\x11\x79\x45\xf6\x00\x49\x36\x34\x4a\x0b\x09\xc9\xcb\xa8\xa0\x80\x54\x69\x1f\x91\xf8\xda\x21\x42\xe3\x7a\x7a\x0a\x89\x47\xa3\x7b\x6f\xab\x83\x78\x9d\xbb\x62\x0a\x2a\xa0\x92\xce\x96\xcf\x42\xec\xa4\x6e\xdf\x34\xb4\xef\x80\xc2\xb3\xa9\x13\xee\xbb\x27\x39\xe1\x62\x57\x88\xdd\xbf\xed\x25\xc1\x2d\x57\x32\x43\xa1\xc5\x2e\x9e\x7c\xfe\x86\x5f\x2d\x23\xbe\x9c\x7f\x0f\xbb\xba\x9c\x7f\x6d\xe4\xb6\x4d\xed\xc1\x8b\x63\xa0\xc2\x27\x93\x38\xf7\x0e\xfa\xad\xf2\x9b\x7e\xab\xf4\x53\xe0\x1e\xd8\x6b\x9f\x77\x17\xfa\x12\x2a\x2a\x72\x59\xde\xa0\xcf\xb2\x19\x4b\xeb\x0c\xde\x30\xe6\xba\xbb\x34\xc5\x30\xbe\x65\x5f\x77\xd8\xa5\x29\xce\xba\xa5\x7d\xfd\xbc\x77\x69\x62\x6a\x78\xb7\xc4\x70\x70\xdd\xf7\xd0\x9b\xeb\x3d\x84\x00\xb8\x0e\x1c\x8d\x31\x01\x40\x6f\xbe\xe1\x2c\xee\xdc\x25\xb2\x73\xd2\xb5\x92\x45\x62\x76\x75\xeb\xad\xcf\x65\xe1\x60\xd2\xfd\x6b\xdb\x07\x6f\xed\x5b\x9b\xc4\x2a\xcd\xe5\xee\x3b\x8b\x6a\xe9\xad\x21\xee\xb2\xad\x6f\x5d\x27\xe9\x80\x64\xf9\xad\xad\x2a\xd9\x7e\x6b\x50\xb7\xb6\xf1\xad\xdb\x98\xa6\x9b\x3a\x7b\x1d\x15\x44\xa2\x0a\xe0\x14\xd4\x1b\x5d\x62\x1b\x74\xbd\xc4\x78\xd1\xf3\x12\xd7\x5d\xda\x01\x22\x28\xd4\x53\x9f\x10\x32\xa3\x05\x60\x67\xa7\xb2\x13\xe9\xad\x24\x65\x99\x96\x08\x4a\x85\xda\xd7\x84\xcf\x22\x90\x37\x8a\x4d\xc5\x65\x93\x35\xba\x94\x21\x9a\x9a\x9a\x8e\x80\x46\x38\x9e\xaf\x83\xb3\x7a\x48\x83\x6b\x17\x8f\x69\x24\x74\x59\x49\x1d\xec\x43\x28\xb4\xb3\xb3\xc8\x30\x9f\xbf\xa2\x66\x36\x20\x8a\x15\xd4\xf0\xb9\xaf\x15\x20\x57\xe8\x7c\xd9\x6d\x41\xec\xf9\x8d\xe8\x09\xf6\x25\xc4\x5d\xe9\x01\xed\x71\x82\xc2\x9f\x6b\xb2\xf3\xde\xaf\xce\xce\x08\xef\x39\xfd\x78\xe9\xef\x83\x3c\x72\x8f\xee\x92\x5c\x9b\xbf\x2d\x27\x60\x32\x03\xe3\x5c\x05\xa6\xc5\x08\xcf\x15\x17\x39\x91\x93\x1b\xeb\x14\x50\x2e\xd1\x5c\x49\x5d\x2e\x8c\x8e\x78\x29\x4c\x15\x4b\x8b\x66\xdb\x2b\xac\x30\x19\x3e\xf1\x86\x73\xd9\xce\x3e\x59\x7f\x78\x8b\x99\xe5\x5d\xfc\x9e\xb4\x7e\x06\xff\x4e\xc0\x6e\xb2\xef\x38\x24\x42\xae\x78\x7a\xa7\x25\xea\x72\xd2\xdf\x40\x61\xdf\x4c\xa6\x88\x4f\x73\x85\xe4\x10\x1d\x1b\xd8\x80\xfc\xc4\x15\xc0\x3c\x81\x93\x0b\x1c\x62\x5c\x60\x12\x4e\x58\xc1\x01\x70\x4f\x9e\x04\xba\x42\x30\x6f\x63\xb9\x59\x59\xa5\x78\x49\xd5\x82\x7c\x73\x72\xe4\xda\x62\xb8\x08\xea\x5e\x9c\x80\xbb\x8f\x99\xa1\x98\xd5\x52\xb2\x72\x8c\x61\xd5\x94\x30\xe6\x0d\x74\xd1\x56\xf3\xa9\xd0\xc2\xa6\xe6\xf9\xed\x1e\xc0\x65\x77\x42\x02\x19\x42\xc6\xf8\xc6\x7e\x45\x14\xa0\x1e\x3b\xa7\x87\x58\xc4\xee\x82\x46\x81\xda\x92\x59\x00\x6a\xb5\xb1\xe2\x0f\x23\xd1\x7c\xce\x52\x66\x82\xcd\x99\x70\x50\x5b\x0b\x78\xa6\x55\x09\xb9\xc8\x8a\x3a\xf7\x04\x72\x0d\xbc\xfb\x8c\xf4\xce\xb4\x2e\xdc\xc9\x3d\xb8\xbb\x79\x10\x3b\xfa\x10\xb1\x35\xc7\x26\x44\xda\x05\x0e\x0d\x49\x8e\x84\x06\xf9\x16\xaa\x90\x73\x4f\x1c\x56\xae\x46\xed\xa9\x46\xe4\x2c\x20\x91\xd6\x22\x20\xbd\x27\xd0\xe0\x47\xd8\x5b\x36\x99\xfc\x71\xb7\xef\x7a\xdf\xf9\x10\x57\x41\x6b\x91\xcd\x5e\x78\xf9\xb6\xab\x8d\xf9\x00\xb3\x1b\x12\x8b\x28\xb9\x62\x4a\xb0\x82\x54\x54\xd1\x92\x19\xab\xa5\x7a\xff\x69\xf2\xb6\x49\x46\x7b\xe8\xd6\x34\xbe\x43\xc3\xf7\x61\x12\xae\x36\xe9\x01\xa0\xa2\x4b\x7b\xe8\xd6\xc2\x36\x8d\xa0\x1d\x49\xd0\x15\x35\x6d\x19\x49\x1f\xf8\x0e\x30\xa3\xbd\xbc\xda\xf7\xe0\x45\xdf\x8e\x77\x6b\x77\x01\xdb\x94\x93\xe9\x07\xa4\xa2\x69\x41\xe9\x93\xcb\x1f\x3f\xc8\xe3\x2d\x2a\x57\x0f\x4d\x5b\xca\xe7\x72\x6c\x24\x2e\xd0\x4c\x24\xe0\x9e\x90\xea\x66\x23\xf5\xe9\x47\x08\xb4\x3d\x79\x56\x31\x93\x69\xa9\xe9\x5b\xc5\x00\x66\x89\x16\x17\x15\xcb\x36\xe9\x52\xf8\xe6\xc3\xc5\x61\x9b\x1a\x38\x98\x11\xc0\x68\xc6\xe0\xfb\x08\x68\xfa\x9a\x8d\x67\x52\x5e\x25\x0e\xb6\xb7\xa2\xe1\x4b\x54\xd6\xa2\xf9\x54\x1f\x38\xc1\x30\xb4\xd3\xb4\x4f\xb8\x28\xe0\x7c\xf5\x0a\x0c\x40\x63\xa3\xe2\xdf\xe1\x85\x49\x16\xde\x18\x18\xca\x55\x60\x3b\x45\xe9\xe6\x94\x9c\x76\x2a\x38\xea\x7c\x06\xdc\xe4\x98\x74\x78\x9f\x16\xd7\xdc\xf2\xa6\x2b\x5a\x12\xad\x9c\x35\x74\xc9\x6f\x64\x4a\x9c\x17\xd7\x9a\x7b\x9b\xdc\x3d\x7f\x6b\xc8\x20\xb9\xd5\xfa\x4a\xe0\x56\x3e\x89\xe5\x79\xe4\xe8\x09\x49\x73\xbb\xf6\x97\xc4\xfd\x74\xb7\x6b\xb0\x87\x90\xc3\xa2\xc0\x83\xfd\xcc\x43\x9b\xfa\xf0\x48\x53\x3f\x17\xc0\x90\x82\x55\xdc\xa2\x3f\x55\x73\xb3\xd7\x9e\xef\xd8\x6c\x62\x10\x4f\x57\xb5\x57\xf2\x4f\x96\xb6\x78\xac\x18\x0c\x19\x20\x6c\xc4\x70\xf5\xd7\xc9\xed\xdc\x4f\x1a\x7f\xd0\xc0\xae\x47\xfc\x78\xcb\xdf\xaa\x86\x09\x11\xf0\xc5\x29\xc2\x14\xe3\x5c\xc5\x99\x0f\x46\xc2\x9d\x5d\x58\x3c\x2d\xfd\x8c\xc4\x29\x68\x3d\xed\xf6\x64\x2e\x87\x74\x34\x47\x87\x3d\xff\xbd\xd6\xf4\xf8\xe9\x69\x64\x29\x45\x0d\x5c\x3f\x8f\x9f\xa6\x46\x56\xa7\xaa\xdd\x54\x91\x46\x8f\x93\xac\x46\x36\x9d\x39\x49\x3a\x40\x29\x30\x35\xe7\x19\x3b\xcc\x32\x59\x8b\x27\xad\x30\x3d\x62\xf6\x95\xa9\x61\xf9\x45\x8b\x06\x0c\xbb\xe7\xf0\x2d\xd6\x9a\xd3\x82\x53\x6c\x0a\xde\xbe\x33\xa5\xcd\x45\x33\x2a\x04\xf9\x97\xde\xdf\x6d\x19\x6d\x18\x4d\xaa\x16\xed\x38\xfd\x4f\x0d\x2e\x72\x73\x3a\x57\x29\x13\x4b\xcb\xe3\x22\xfb\xcb\xf8\x39\x6b\x0e\xfd\x30\x1c\x25\x43\xf5\x55\xd3\x87\x9d\x01\x28\x7d\x90\x54\xd1\xe7\x6e\x1a\x87\x14\x69\x4c\xe9\xcd\x9e\xb0\x74\xc6\x1e\x46\x76\xa6\x0e\xf5\xbb\xff\x38\x3a\x7d\x62\x58\x18\x7f\x26\x3a\x78\xf4\x99\xa3\x25\x18\x9f\x71\xdb\xb5\xb8\xf9\x88\x25\x75\x40\x14\xc5\xd8\xec\x8c\xe2\x89\x50\x30\x8a\x0e\x4f\xb2\x17\x81\xfc\xac\x7d\x9e\x9f\x08\xd2\xe4\x38\xa2\x4e\x30\x40\x1e\x29\x19\x15\x3a\xea\x8d\xc3\x80\x10\x1f\x38\x08\xd4\xa3\x25\xe9\x38\xcf\x39\xe9\xf6\x7c\x78\xb1\x7d\x87\x36\xaa\xce\x0c\xa9\x8d\xb6\x9f\xa7\x90\xea\x4f\xc6\x07\x10\xab\xd8\x94\x6b\xa3\x5c\x43\x23\x3b\x7c\x43\xb2\x73\x07\x87\x5b\xae\xd8\x82\xfc\xed\xdb\xe3\xff\xfc\xef\xf7\x1f\xdf\x1e\xbe\xff\xef\x0f\x87\x6f\xff\x76\x72\x7a\xfc\xd3\x4f\x17\xff\x79\x71\x79\xfc\xe1\xa7\x9f\xde\x62\x6b\x50\xd7\x83\xe8\x82\x99\x9f\x7e\x72\x7b\x4c\xff\xf4\xd3\x65\x56\xf1\xea\xa7\x9f\xce\xbc\x63\x12\x0e\x52\x3b\x55\x09\xf0\x30\xd8\xde\x20\x14\x4d\x80\x82\x87\xcb\x0f\x6f\x39\xa3\xba\xa9\xff\xeb\x80\xa4\x06\xe5\x10\x29\xe2\x72\x7d\x65\x6b\x65\x0b\xee\x27\x15\x99\x33\x08\xae\x11\xcd\xc5\xb4\x60\x21\x86\xd5\x00\x96\x8e\x99\xb9\x66\xae\x91\xc8\xb2\x6e\x95\x5e\x2a\xdf\xa0\x85\xba\xea\xef\x16\x44\x9f\xcb\x1c\x70\x78\xf9\x73\xce\xae\xb1\xd3\x22\x9f\x0a\x5a\x78\x1a\x99\x6b\x4f\x85\x49\x19\xcd\xef\xd7\xa4\x24\x86\x69\xad\x64\x3e\xf0\xb0\x41\x4b\x71\xdf\x1b\x31\xdf\x16\x42\x1a\xd5\x96\x36\x96\x93\xb3\x93\x23\xf2\x7a\xdd\xc9\xf8\x1b\xf6\xf6\x87\x91\x2f\x56\x31\x44\xf0\x44\x59\x1d\x0f\x15\xc2\xce\xf0\x13\x4f\xcd\xe8\xf5\x38\x97\x25\xe5\x62\xb3\x60\x63\x93\xba\x28\x16\xe4\xe7\x9a\x16\xa8\xbe\x9e\xc9\xfc\xe6\x49\xb3\xf3\x67\xff\xd1\x5f\x46\x7f\x0e\x84\xff\x65\xf4\x67\x8f\x32\x0b\x8b\xf2\x97\x91\x9e\x67\xa3\x3f\xbb\x06\x55\xc4\xdd\xb4\xd3\x33\x42\x59\x90\x73\xd4\x8d\x80\x28\xb7\x60\xe8\x3e\x89\x46\x87\x5e\x05\x48\xb9\xfa\x46\xd1\x8c\x9d\x31\xc5\xc1\x36\x90\x22\x7f\x52\xa4\x32\xcf\xc1\x24\x77\xad\x95\xed\x9e\xd4\x48\x47\x98\x33\xc1\x58\x8e\xa6\x9a\x23\x9b\x91\xa9\xa5\x1a\xd6\x7d\x04\x56\x15\x40\x07\x67\x8a\x51\x2c\x87\x77\x38\xc2\xbe\x89\xec\xba\xcb\x87\x41\x0d\x9f\x45\x27\xa4\x18\x0a\x36\xc5\xac\x36\x17\x76\x46\xa4\x09\x3c\x66\xb1\x7d\x56\xc8\xa0\xd2\x46\x56\x84\x97\x25\xcb\xad\x61\x50\x2c\xc8\x9c\xaf\x8b\x50\x0c\x6a\x05\xe0\xa1\xa1\x70\xdc\x13\x92\x48\x88\xda\xd6\x82\xbb\x00\xcb\xac\x36\x24\x97\xd7\x62\x7d\x95\x62\x82\x32\x1a\x89\xe7\x9a\x08\x5e\x0c\x5a\xa0\x89\x30\xb9\xa4\x02\x9e\x68\xc3\x21\x27\x59\x1d\x68\xec\xb7\x1e\xea\x14\xf8\x55\x8b\x8e\x90\xbf\xd8\xc7\xcf\x1f\x09\xbe\x7b\x73\x83\xf1\x8a\xf9\x18\x6c\xed\x6e\xf9\x34\x66\x7d\x3f\xbd\xfe\x70\xc0\xb2\x18\x3c\xc4\xe2\xe1\xed\x58\x13\xa9\x32\x3e\x2e\x16\x64\x46\x8b\xd0\x55\x9a\xc6\xab\xb4\xee\xa4\x5c\x30\x13\x2f\x44\x21\xc5\x34\xd6\x75\xb1\x43\x38\x60\x78\x32\x2a\xea\x0a\xa9\xb3\x6a\xdc\x42\xd6\xc9\x0e\x90\xd8\xf1\xf1\xd5\x2b\x3f\xe9\x1b\xe8\x94\xb8\x56\xe6\x85\x91\x05\x43\x4e\xe9\x22\x9c\x56\xa2\x54\xee\xea\xf8\xe9\xcf\x05\xf8\x2e\xc1\xed\xe6\x01\xd5\x81\xe5\x2e\xc3\x2b\x83\x23\xc3\x18\x0a\x58\x99\x56\xc4\xe2\x37\x00\x94\xb5\x20\x56\x2b\x72\x5d\x61\x1c\xb8\xec\xfa\x51\x31\xbb\xb1\x14\xaf\x0a\x46\xfe\x7c\xc5\x16\x03\xec\xd9\x89\xea\xfc\x5f\x48\xad\xbd\xed\x12\xba\x64\xc9\xca\x12\x20\x15\xf9\xb3\xff\xaf\xbf\x3c\x21\x4e\x5f\x97\x38\x1c\xbe\xd4\xa6\xa0\xf3\x8e\x11\x21\xa5\xdd\xca\x13\x17\xd0\x81\xa7\x18\x89\xb3\x3c\x22\xc7\x80\x9e\x8b\x06\x24\x7c\x04\x96\x40\x7c\x73\xa2\x6b\xf5\x07\x1f\x4f\x6d\x9a\x24\x82\xe7\x3e\x42\x42\x39\x95\x0e\xb3\x91\x41\x2f\xe3\x09\x53\xcd\x27\x20\x8a\x4f\xe5\xf1\x27\x96\xd5\x69\x88\x7f\x9d\x62\x40\x57\x2c\x01\x5d\xa8\x9f\xd5\xfb\x96\x85\x66\xd2\xb8\x0c\xd6\x3e\x0f\x38\x09\x8d\x88\x8a\x4a\x7a\xee\x5e\xc6\x2b\xb6\x3e\x6e\x38\x5e\x27\xde\xaf\x01\x14\x39\x98\xd6\xb0\x2b\xbd\x56\x74\xfc\x89\x6b\xa3\xff\x2f\xca\x93\x4c\x96\x63\x7f\xa8\x22\x39\x9e\xd7\x80\x22\xbf\xfa\x22\x87\x3f\x53\x49\xeb\xb4\xb6\xfe\x05\x36\xb5\xc0\x1f\xfd\x04\x2a\x56\x29\xa6\x21\xe8\x4c\xed\x54\xec\x6a\x57\x33\x21\x05\x00\x46\xb9\x90\x04\xf6\xa4\x4e\x1a\xca\xa7\xd7\xe3\x80\xb8\xeb\x70\xb9\x60\x09\x8e\xad\xa5\x34\x6a\xa9\x02\xf8\x51\x9a\xd8\xc1\x07\x73\x68\x05\xca\xe7\xb4\x60\xe8\x7e\xbd\xe6\x45\x9e\x51\x85\x89\x88\xae\x51\xb3\x96\xae\x2c\x0d\xd1\x70\x93\x22\x58\x41\x1b\x60\x0d\xb3\x6b\x97\x80\x44\x95\xe1\x59\x5d\x50\x45\xac\x04\x9c\x4a\xb5\x76\x63\x74\xd2\x95\xcd\x9a\x9d\x9a\x64\x4d\xe1\xd5\x07\xbf\x5d\x2e\x13\x12\x33\x9e\x99\x05\x55\x5c\x4e\x50\xb3\x5c\x12\x33\x7b\x58\x08\xe2\x76\x7b\x12\x05\x72\xe2\x0f\x9e\x20\xd1\x07\xe8\xd8\xb9\xe6\xed\x7e\xea\x5c\x13\x3e\x15\x52\xb1\x7c\x3f\x52\x40\x82\x2c\x1c\x91\xaf\x03\x88\x77\x4a\xd2\xb5\xd5\xb8\x7c\x28\x19\xb0\xfb\xdc\xbb\x39\x41\xe5\xb8\xa9\x11\xbd\x13\xa9\xd8\x9c\x29\xb2\x97\x4b\x44\xaa\x9e\xf3\xcc\xec\x8f\xc8\xff\xdf\x1a\x7a\xa9\xd1\xb7\x60\x41\x3a\x61\x18\x80\x17\x1d\x2c\x22\xd5\xe4\x15\xd9\x83\xa1\x62\xeb\x71\xdf\x67\x90\x60\xeb\xec\x74\x7e\xde\x4c\xbe\x74\x87\x54\xc3\x3e\x36\xc1\xf7\xde\xc6\x6d\x16\x17\xad\xad\x25\x6e\x0f\x9d\x13\x64\xa7\x23\x33\x1c\x92\x5c\x3b\xb9\xd8\x8a\xaf\x86\x94\x0d\x7f\xa6\x86\xbd\xf0\x4f\x48\x12\x20\x8a\x4d\x41\x7a\xa1\xec\x79\x42\xd9\x65\x64\x25\x0b\x39\x5d\x5c\x54\x8a\xd1\xfc\xad\x14\xda\x28\x10\xac\x4f\xe9\x0b\xba\xbc\x8d\x88\xa8\x0b\xde\x4c\x5e\x13\xea\x8a\x42\xe4\xc4\x1e\x23\x9a\xc8\x7a\x3a\x43\x1c\x77\xf8\x21\xa1\x99\x92\xd0\x44\x12\x1f\xb7\xae\x9d\x05\x0e\x39\x3d\xf2\x98\xee\xde\x29\x1c\x40\xe2\x61\x4c\x70\x91\x5f\xd3\x85\x13\x25\x74\xcc\x73\xa6\xa3\x42\x62\x4f\xfa\xda\xdd\xbe\xed\x91\x76\xeb\x3c\xd8\x83\xfc\xf0\xf4\x68\xdd\x04\x84\xcd\xd9\xa9\xb7\x2d\x69\x30\x11\x70\x45\x9b\xb5\x0b\x56\x20\xcc\x32\x2d\xa5\xb3\x0e\xa7\x7c\xce\x44\x98\x99\x67\x82\xdb\x5e\xd2\x4f\x17\x57\xec\x3a\xe1\x97\xfe\x45\xbf\x65\xeb\xd7\x22\x0c\xc1\x85\xf5\x9d\xd0\xd4\x70\x3d\xe1\x74\x5c\x3c\x25\x78\x3c\x80\x0f\x5c\xb0\x82\x65\x1b\xd4\xb5\xdf\xc7\x44\x78\x00\xcd\xd0\x3b\xb3\xc5\x63\x69\xf2\x1e\xea\x69\x1a\xb7\x88\xab\xda\x02\xdc\x05\xed\x87\xb5\x9b\x15\x02\xfd\x38\x74\x48\xe5\xc3\xd4\x85\xba\x1c\x33\xe5\x45\x58\x9a\x4e\x03\x7e\x42\xae\x96\xba\xaa\x79\xd6\x71\x82\xec\x19\xf6\x05\x85\x29\x3d\xfe\x64\x95\x55\x9d\x96\xc8\x8f\x57\x8b\x93\x96\x1f\x8a\x09\x3c\xbe\x88\x6a\x69\xe9\xdc\xa6\x87\xc6\x3e\xbe\x61\x78\xf3\x49\xaa\x18\x6e\xae\x2e\xa5\x46\x78\x25\x17\x1c\xe1\xd5\x57\x3b\x4e\x28\xb4\xbd\x75\xee\x70\x8e\xc3\x37\x31\x0c\x92\xf3\x7a\xeb\x01\xda\xc0\x18\xa0\x85\x1e\x35\x4e\x83\xb2\x37\x77\x20\x0b\x2c\x6a\x67\x43\x5c\xb1\x05\x3c\x1e\x47\x4c\x5d\xb3\xce\xdb\xc2\x13\xd6\xa5\x8c\x0a\xaf\xa1\x7d\xa5\x4e\xbf\xf7\xd3\x9c\xfc\x90\xae\x7b\x1c\xaf\x44\x7f\x5b\x73\xb5\xf8\xf8\xaa\x71\xa1\x21\x4f\xb6\x5c\x68\x8d\x5c\x6e\x1c\x68\x9d\xc6\xee\x5c\x84\x85\x57\x17\xbf\x54\x73\xf5\xb7\xa1\x63\x9a\x1e\xe2\xab\xa2\xc4\xb5\x40\xec\xba\xbd\xf0\x5a\xe5\xbb\x3a\x11\x03\x72\x2a\x8d\xfd\x27\x72\x63\x1d\x49\xa6\x4f\xa5\x81\x4f\xb6\x62\x25\x71\x02\xb6\x69\x1d\x9d\xab\x01\xdb\x7f\xc1\x71\xe3\x52\xd2\xac\xa2\xe0\xd6\x6b\x95\xed\x7a\x22\x88\x54\x6e\xca\x3b\x92\x10\xcc\x5f\xed\x08\x88\xa3\xea\xae\x51\xca\xad\xd6\xb3\xa5\x22\x5e\xe6\x47\x23\xc6\x11\x02\xd8\xf9\xf8\x0d\x74\xa9\xaf\x0a\xa8\xab\xce\x6b\x98\x30\x6a\x67\x8e\x1a\x36\xe5\x59\x47\x3a\x4a\xa6\xa6\x8c\x40\x87\xba\x3e\x38\xb7\x8b\x22\x81\x57\x47\x75\x22\x26\xa6\xc3\x36\x02\x1d\x0d\x74\xf7\x7e\x74\xbe\x0e\xfb\x27\x22\x05\xb5\x98\x92\x82\xc3\xe1\x7f\x42\x08\xf3\x7f\x49\x45\xb9\xd2\x23\x72\xe8\xd3\xec\xe2\xef\x5c\xa6\x42\xf4\x98\x0e\xa4\x54\x37\xbd\xeb\x54\x10\x86\x28\x2b\x96\xaa\x65\xe5\x76\x40\xae\xa1\x1f\xad\x3d\x00\x83\x87\x75\xe7\x8a\x2d\x76\x06\x9d\x7a\x28\xc7\x3b\x74\xe7\x44\xec\x34\x79\x75\xad\x5d\x15\x74\x3c\xe8\x3d\xb1\x03\xdf\xed\x3c\x9e\x1e\xdd\x49\x23\x6b\x70\x49\xce\x7a\x50\x69\x3a\x6e\x81\x56\x43\xae\x92\x56\xae\x1f\x17\x35\xb2\x4c\x90\x39\x0d\xf3\x7d\x9b\xd0\x4f\x8c\xf4\xb4\x9b\x3e\xb4\xa8\xf0\x26\x81\x71\xa6\x6f\xa3\xa9\x69\x2c\x1b\x2f\x20\x50\x3d\x73\x6e\x36\x39\x67\x0a\x5d\x6c\x49\x63\xa3\x53\x89\x43\xa3\x78\x97\x6f\x4e\x8b\xac\xb6\xa6\x81\x6b\x31\x0f\x03\x5b\x3e\xf4\x1e\x82\x42\xca\xab\xba\xf2\xfc\x0c\xb9\xa8\xa9\x3b\x86\x8b\x4c\x96\xce\xcf\x80\xef\x09\xee\x60\xb7\x31\x87\x2e\xed\x07\x65\x4c\xd8\x0a\x98\x58\xd4\xf2\xa2\x24\x06\xc9\xe2\xc9\x0c\x0e\x53\x66\x8f\xd1\xe0\x5f\x6b\xa6\xf7\xce\xa9\x4a\x22\xc0\x27\x9c\xc7\xb3\xe0\xba\x44\xd1\x32\x44\x97\x27\x52\x8d\x79\x9e\x83\x6f\x0f\x89\x0b\x65\x4f\x4b\x8c\x63\x25\x4d\xcb\xaf\x93\x26\x34\x96\x9e\xba\xa2\x1a\x7c\xd9\x79\x24\x76\x4d\x4a\x6e\x2e\x5e\x30\x08\xd8\x20\xb9\xb4\x0f\x0a\xaf\xb8\x3c\x35\x9e\x11\xec\xec\x27\x8d\x34\x66\x3e\x86\x66\x8f\x24\x51\x17\x45\x68\xd3\x8c\x6e\x0e\x0c\x77\x81\x48\x76\x91\xf9\xa9\x15\xd2\xa6\xcd\x6c\xeb\x77\x1d\xc5\x6b\xb9\xf7\x28\x9c\x3a\x76\xcd\x9c\xc4\x47\xbb\xac\x3d\xfb\x27\xe2\x4c\xe6\x6d\x17\x71\xab\x0d\xa9\x83\x3b\xf1\xfd\x4b\xf7\xa2\x46\xa6\xa9\xa5\x1f\xa4\xb3\xd2\xd4\x41\x55\xea\xf3\x74\x88\xda\x35\x26\x1f\x0f\xe0\x9d\xde\xdc\xb9\x00\xc3\x47\xb1\x1d\x4c\x41\x9d\x2a\x86\xf0\x94\x20\x96\x40\x4c\xb9\x7e\xfa\xb5\x60\x73\x66\xd9\x37\xe7\xda\xb5\x73\x4c\xd4\x1c\x20\x4b\xe9\x1f\x37\xdc\xe4\xff\xbf\x23\x79\x2a\x8d\x8f\xfb\xfc\x63\xe0\xc2\xc6\xa8\xc8\x7d\xe2\x65\x5d\x36\x3d\xfd\x49\xce\x27\x13\xa6\x12\xb1\xfb\x49\xa8\xc0\x68\x3b\x83\xdb\xe1\x0f\x27\x26\x0c\x55\x53\xa8\x1b\x76\x8e\x5d\xaf\x73\x4d\x0b\x39\xa6\x05\x29\xb9\xb0\xa4\xa5\xcd\xc4\xe5\x8d\xe7\x84\x37\x76\x7f\xde\x41\x1c\x28\xa1\x7c\xca\xc7\x05\x73\xde\xe6\xb4\x3c\x01\xe5\x52\xa8\x27\x4b\xb3\xb1\xf4\x70\x90\x2f\x05\xd3\x1a\x93\x64\x3f\x70\x71\xe4\x62\x75\x49\xc3\xbe\xb3\xe2\xf1\x13\x2d\xab\x82\x21\xd4\x1f\xf9\x6a\xf8\x2f\x29\x18\x71\xc9\xff\x83\xc0\xa2\xae\x9a\xc5\x48\xf2\x1a\x35\xde\x2a\xc0\x69\xf9\x2a\x93\x24\x0a\x5a\x82\x37\x44\x2f\x35\xf9\xf2\xe0\xcb\x83\xd7\x69\x22\xe6\xc4\x15\xe0\x64\x54\xbb\xe6\x37\x37\x57\x77\xed\x52\x16\xbc\x7e\x21\x76\x76\x5e\xbb\x7f\xbf\x74\xff\x7e\x45\x7e\x49\x7c\x1a\x39\x23\x67\xad\x7f\xed\x3f\x89\x4f\x1b\x5a\xe6\x89\x96\xeb\xf5\xa0\x7d\xb8\xb6\xfa\x71\xbb\xfd\x0d\xea\x1e\xbe\x02\x9c\x33\x99\x2c\x19\x4c\xfd\x97\xff\x37\x4d\xd9\x6c\x9a\x0c\x73\x43\xa4\x70\x4f\x7f\xbd\x07\xd3\xb5\x4f\xae\x21\xfa\x5f\xd2\x2b\x8c\x00\x1d\x66\xa6\xa6\x85\x25\x78\xef\xab\xe1\xeb\x7d\x22\x45\xeb\xf6\x24\x12\xe6\x5c\x5a\x85\xcd\xcf\xc4\xde\xeb\x44\xa8\x83\xe5\xe9\xfc\x72\xc5\x74\xb6\x66\x12\xde\x96\x8a\x05\xbc\x42\xbf\x32\xd9\x8b\xe3\x43\xb1\xb8\xa6\x8b\x20\x94\xbd\xbe\x3e\xe5\x73\x46\x66\x7c\x3a\x03\x50\x80\x0e\xed\x54\x10\xb0\x13\x65\x2c\xf7\x3d\xaa\x90\x90\x05\xe1\x89\xea\xdf\x89\xd9\xd5\x90\xd7\x81\x4e\x7f\x87\xf7\x12\xaa\xb5\x42\x09\xc6\x6b\x10\x2b\xaf\x96\xf0\x2e\x36\x9c\xec\xf3\xd5\x97\xeb\xeb\x14\x41\x26\x6f\x4c\xad\x08\x14\xb4\x90\xb8\x6f\x9e\x66\xcb\x87\x4b\x07\xae\xbd\xe7\xd4\x82\x83\x22\x1c\x9e\xe1\x18\xbf\x72\xe6\x70\x73\xa2\x35\xb3\x97\xe6\xe8\x3c\x93\x79\xc8\xb8\x20\x4e\x9f\x86\xf4\x32\x4d\x76\xda\xc7\xc0\x0e\xa4\x9b\x05\xf7\x8d\xc3\x45\x75\x06\x9f\x6b\x53\xea\x37\x7f\xa7\x2e\x61\x84\x1c\x8a\xbc\xa9\xa9\x49\x9c\x25\xf6\x73\x4d\x0b\xf0\x06\x4f\x21\x5b\x4e\xf5\x33\x5f\x51\xf5\x4d\xab\xca\xd8\xca\xe2\x46\x9a\x27\xbe\x36\xee\x7b\x5d\x17\x90\x6f\x78\xff\xfb\xf7\xca\x09\xba\xc9\x5d\x02\xb3\x33\x24\x2f\x95\x12\x5b\xdb\x09\xaf\xfe\xbb\x54\x06\xe9\x1c\x13\x9d\x36\xc3\xc9\x64\x45\x51\x59\x93\x0c\x85\x9d\x72\xed\x76\x04\x34\xa3\x78\xa7\xba\x25\x06\x15\xab\x4b\xce\x73\x54\x66\xe0\x44\xa0\x6e\xb3\xcc\xab\x0e\xdb\xbc\x79\x37\x69\xf0\xfd\x7e\x58\x3e\xad\x42\x40\xa1\x65\x49\xa4\xda\xd4\x29\x1a\xea\x97\x83\xa5\x89\x75\x9f\xff\xfe\xa9\x14\xd7\x2f\xd3\x14\xd7\x47\xd7\x2e\xf1\xdf\x64\x23\xa9\xd9\xb9\x2b\x37\xec\xef\xf7\x9a\x59\xdf\x87\x44\xf7\x1b\x12\x17\x10\xa2\x9a\x5c\xdf\xc4\x2d\xe6\xf4\x7b\xcd\x4d\x4d\x11\x88\x4a\xb0\x6b\x57\x59\x1c\x2d\xeb\xd2\x12\x45\x6e\x2e\xaf\xb3\xa5\x09\x96\x31\xcb\x68\xad\xed\xae\x2e\x2b\x6b\x7f\x13\x6d\xd9\xcf\xbb\x0c\xbf\xda\xfb\x8a\x0c\xc9\xab\x7d\xbb\xbd\x05\xca\x16\x60\xc1\x58\xe3\x86\x96\x0b\x68\xe9\x99\x99\xb5\xf5\xed\x3a\x27\x8a\x39\xee\x7b\x7a\xb6\xf5\xde\x47\xf6\x61\x85\x85\xde\xa8\xff\x6a\x53\x2a\x9e\x90\x39\x3b\x9c\x4c\xb8\xe0\x66\x91\xda\x90\xbd\x1f\x55\xef\xf4\x06\x25\x91\xca\x37\x93\xd7\xe4\xda\x55\xff\xc3\xb6\x73\x28\x76\x31\xf9\x07\xf6\x8f\x4e\x5e\x76\x38\xd8\x83\xde\xe4\xac\xa3\xa0\xbb\x38\xc1\x68\xb7\xc8\xc8\x55\xba\xbb\x6e\x17\x29\x63\x0d\xc9\xdf\xa4\x90\xea\x0d\x1a\xb2\x96\x74\xdd\xe8\x4b\xb7\xbe\x96\x3b\x0b\x63\x80\xf9\x96\xa6\x97\x78\xd4\x0f\xc9\x09\x38\x9b\xdf\xdc\x37\x72\x70\x49\x03\xec\x41\x1e\x0e\xe7\xbb\x08\x4a\xdb\xbd\xb7\xd7\xb5\x87\x0e\xfd\x37\xc2\xa8\xf6\x5b\x98\x55\x52\x01\x03\xa5\x3a\xd1\x62\xb9\x31\xc4\x3e\x73\x5e\x10\xf8\xa2\xfa\x68\xf3\xdb\x51\x2d\xf3\x9e\xd8\x59\xd0\x5c\x0a\xe4\xde\xbb\xc4\xc9\xa4\xa0\x4f\x59\x0f\x80\x97\x5d\xaf\x4b\xc8\x3c\xdf\xfc\x46\x8f\xe9\xb8\x73\x9b\x63\x7b\x23\xcc\x97\x5f\xde\x9e\x49\xa3\x3f\xc5\x96\xc6\x9d\x61\x4f\x70\x59\x1b\x47\xfd\x80\xd0\x42\x42\x3c\xce\x9e\xeb\xf6\x23\x96\xbb\x1b\x27\xd2\x87\xed\x96\xc3\x48\x49\x64\xcc\x00\x3e\xb4\x29\x87\x19\xb4\xf6\x68\x1f\x02\xc2\x2f\xc8\x03\x44\xc2\x53\x6f\x7f\x24\xf3\x65\xff\xaf\xfa\x71\x53\x85\xb0\xb9\x2a\xc6\x40\x82\x0f\x4c\x5c\x31\x50\x20\x81\xad\x30\x68\x3a\x82\xd9\x74\x2e\x3b\x87\xab\x83\x79\x05\x4e\x27\xe6\x3a\x39\x63\xd6\xaa\x7f\x1c\x10\x8a\x33\x5a\xc4\xf6\xa5\xb5\x6b\x79\xce\x14\x6a\xb5\x63\xd6\xc2\x9c\x4a\x2d\x54\xc1\xeb\x87\xe6\xe9\x88\x4f\x05\xc0\x09\x38\xf8\x5f\x10\xeb\x77\x67\x5c\x67\x57\xcc\xf8\x0c\x1c\x05\x98\x30\x55\x6d\xc8\x98\x16\x54\x64\x56\x52\x80\xc1\x92\x16\x90\x99\xf8\x10\x8f\x91\x48\x00\x8e\x96\xfc\x36\xd8\xd1\x22\xa0\x1d\xe1\x2b\x44\xd5\xba\x5c\x68\x63\xa9\xc6\x32\xde\x6e\x93\x77\x58\x68\x39\xb0\x67\x82\x1f\xf4\x46\x90\x0a\x87\x77\xff\x8d\x89\x52\x4e\x9b\x62\xcc\x38\x90\xbc\x28\x4b\x49\x4e\x92\xe8\xb8\xa9\x27\x3b\x58\xe2\xf6\x59\x96\xf6\x92\x6c\x34\x85\xb4\xc9\xa5\xed\xb1\xd3\x46\xa7\xf4\x80\x57\x3b\x03\x5c\x45\xbb\x4b\x1c\x70\x29\xbe\x3c\xd8\x61\xd4\x74\x9d\x71\x91\x03\x1c\xf2\x32\x31\xe1\xa9\x6d\xaa\xac\xbd\xe7\x29\x02\x6f\x46\xff\x14\xad\x76\xbb\x3f\xb5\xf8\xbc\x11\xcb\xd8\x94\x10\xbd\xe9\xa6\x6a\x2b\x50\x50\x9d\x44\x0b\x8f\x69\x64\x15\x1e\x3e\xb1\xc6\x75\x2e\x19\xa6\xbf\x60\x18\x24\xd1\xc9\xca\xbc\xd6\xd4\xb8\x02\x53\x75\x8a\x96\x5b\x8d\xec\x79\x2b\x9a\x18\x56\x14\x78\x3a\x34\x9e\x4f\x21\xb1\x28\xd4\xdf\x9d\x1a\xc3\x19\x92\x76\x08\x6a\xe5\x60\xf1\x40\x1e\xa2\x0a\x22\xe4\x8b\xd0\xdb\x32\x35\x79\x79\x5c\x1b\x32\xe5\x73\xab\xe0\xdd\x88\x73\xad\x8a\x59\x61\x9c\x71\xc6\x8a\x8a\x28\x96\xd7\x19\xeb\x90\xf2\x09\x7a\x6e\x9a\x50\x88\x1d\xbf\x80\x10\x12\x8e\xcb\x9d\x16\x2f\xee\xb8\x46\x9c\xdd\xd5\x58\x3e\x01\x09\x0b\xe6\x31\x9f\x10\x36\x67\x6a\x41\x2a\xa9\x35\xc8\x7e\xd0\x17\x10\xd2\x11\xd2\x66\x43\x63\x76\xf0\x9d\xc1\x9c\x39\x37\x52\xd2\xe0\x3b\xce\xf7\xb4\x03\xc1\x03\xd9\x59\x07\xd8\xde\xec\x84\xaf\x0e\x5e\xa7\x66\x27\xf4\xed\xe4\x3d\x83\xff\x85\xd4\x81\x4e\x29\x04\x27\x93\x55\x72\x32\xcc\x6d\x4b\xf2\x3c\x24\xbb\x20\x35\x04\x0d\x33\x03\x49\x00\x5f\xed\x47\x89\x09\x5f\x1d\x7c\x79\xf0\x7a\xcf\xce\xfd\x97\xfb\x76\x15\xa2\xf4\x81\x2f\xa3\xf4\x81\xf0\x4b\xf7\x16\x09\x80\x5d\xa4\x49\xce\xda\x7b\xbd\x3f\x82\x62\x10\x40\x63\xbd\x96\x2a\x77\x80\x06\x1e\x1f\xd3\xbe\x39\x76\x45\xb4\x0a\x70\xe9\x95\xcf\x01\x08\xad\x20\x1d\xd3\x5c\x6b\x10\xb8\x82\x74\x09\x6e\xc8\x17\xa5\x54\xec\x8b\x68\x88\xe7\xaa\x18\xdc\x4c\xe2\x2b\x69\x35\xbc\x4a\x48\xd0\xee\x52\x25\xde\xb5\x46\xfc\xb6\x54\xc4\x92\x56\x6b\x3c\x67\x2e\x8b\xba\x5c\x37\xdd\xbe\x9b\x42\xf4\xde\x15\xfc\xba\xa1\x5d\x4d\x2a\xa6\xb3\x94\xae\x58\x7b\xbc\x88\x81\x8b\xc7\xac\x90\x62\x8a\x31\xe9\xd0\x50\x71\xcd\x51\x1f\x86\x23\x9f\x49\x91\xb1\xca\xe8\x03\x6d\xa4\xa2\x53\x76\xe0\x88\x5c\x6b\xb0\xcd\x61\x3d\x7c\x0f\xd4\xb6\x4b\x06\xb1\x07\x12\xbe\x47\x80\x95\xf6\x85\xf3\x20\x2f\x69\x06\x20\x9b\x30\xeb\xad\x26\xb0\x11\xd8\xe7\x33\x81\x7b\x48\xe8\x70\xd8\xa5\x8c\x96\x5e\xeb\xe3\x82\x6a\xc3\xb3\xaf\x0b\x99\x5d\x5d\x18\x99\xe6\x86\xec\xc3\xc2\x58\x45\x4b\x8b\x13\x04\x39\xfc\xe1\x82\x1c\x71\x7d\x45\x14\xd3\xb2\x56\x99\xeb\xcc\xb6\x04\x3f\xb9\x2e\x52\x2e\x5e\x4d\x8f\x79\xe8\x04\x5e\xd2\x6c\x86\xa6\xbf\xcb\x6e\x61\x9f\x2a\xa9\x9b\xe6\xcf\x09\x2c\x85\x57\xb7\x7d\xfc\x1b\x7a\xad\x19\xce\xd2\xd8\xce\x92\xfd\x3a\x45\x35\xdb\x70\x23\x4f\x7c\x9b\x93\xa3\x84\x9f\x77\xad\x1a\x9f\xe8\xcb\xe4\x6e\xf9\xfd\xd5\x06\x22\x15\xde\x1d\x39\xe1\x05\x43\x6c\x2e\x6c\xa5\xef\x62\xdb\x4e\xe6\x01\x8f\x2f\x64\x4d\xae\x29\xba\x9c\xe1\x90\x49\x2f\xfa\xbc\xe4\xd5\x1b\x72\x2c\x74\xad\x58\x53\xda\xbe\x4c\x82\xd5\x5a\x7d\x93\x5f\xef\x6f\x86\x8d\x81\xf5\x7b\xf6\x2c\x4b\x47\x13\xc3\xeb\x18\x4d\x13\xfd\x86\xec\xb0\x4f\xe6\x77\x3b\x03\xb2\xf3\x69\xa2\xed\x3f\xc2\x4c\xf4\xce\x88\x9c\x94\x55\xc1\x33\x6e\xac\x2d\x26\x26\x4c\x35\x7e\x52\xfc\x41\x4f\x1d\x95\xb6\x65\x4f\xe2\x75\xf9\xf1\xe8\xe3\x1b\x70\xa9\xe4\x92\x5c\x33\x6b\xa8\xcf\xad\xad\xc9\x94\x92\x2a\xe4\xf3\x47\xcb\x05\xf5\x65\x99\x2c\x2b\x25\x4b\x1e\x41\xe1\x82\xfc\x4a\x24\xa3\x73\x19\x2e\x38\x66\x61\x97\x6c\x78\xa3\x05\x42\xfc\x5e\x8b\x3e\x10\x8f\xb9\xcb\x4e\x26\x44\x62\x99\x47\x1b\x18\x9d\xeb\xf0\x70\xbb\xaf\xdc\xe8\x22\xa1\xc3\x53\x73\x35\x3b\xc9\x9a\xfc\xee\x91\x07\x39\x9b\x1f\xe8\x9c\xbe\x1e\xc0\x6b\xe1\x36\x59\x2c\xcd\x01\xd5\x64\xe7\xf5\xda\xad\x09\x9a\xeb\x82\x97\xbc\xa0\xaa\x58\x0c\xe2\xb9\x6c\x9e\x3f\x91\x2a\x10\x02\x0e\xdd\x57\x3b\x64\x0f\xf1\xc7\x41\x65\x2e\x98\xef\x00\x18\x3a\xff\x42\xb9\x59\x72\x7f\xbd\xae\x89\x2d\xa4\x73\x72\x0b\x81\xf3\x91\xe6\x1f\x45\x91\x8c\x4c\xd2\x17\xf7\x7b\x3a\x3c\x62\xa1\xaa\x5d\x9c\x7b\x22\x51\x7b\x62\xcd\x2d\xbe\x09\x10\x17\x4e\x0d\xff\x60\x79\xb4\x03\x18\xc7\xf6\x48\xd5\xae\x1d\x0f\x49\x50\x58\x36\xbd\xa0\x9e\x0e\x28\x5f\x10\xfc\xe7\x9a\x91\x93\x23\xaf\x2f\x54\x4c\x69\xae\x8d\x3d\x2d\xf2\x96\x96\xcc\x51\x75\xde\x3b\x2c\xe9\xbf\xa4\x20\xc7\x5f\x5f\xb8\x07\x25\x6f\xb3\xed\x5b\xdd\xc4\xc3\x8a\xfe\xab\x56\xcc\xda\x14\x9d\xcd\x9e\xf0\xa4\x65\xa3\xc5\x7e\x4e\x8e\xa8\xa1\x68\xbb\xa0\xe8\x97\x4d\x3b\x30\xb0\x31\xc6\x80\x2a\xe7\xfb\xce\x75\xb0\x30\x36\xac\xd9\x5b\xc6\x3b\x4d\x6f\xd3\x6f\x7f\xfe\xdd\xf9\xc9\x06\xec\x82\x0c\x14\xa6\xe9\x07\x99\xf7\x63\x1c\xec\x46\x0f\xf4\xba\x07\x34\xd7\x7d\x8b\x9f\x93\xd2\x8e\x44\x4e\xa5\x60\x03\x72\xce\x68\x4e\xac\x14\x76\xff\xf9\x83\xe2\x86\x8d\x76\x37\xa5\xbd\xf9\x45\xec\x65\x22\xfc\xc3\xfc\x24\x9c\x46\x1d\x17\xa1\x2f\x2a\xc8\x2a\xa7\x8c\x8d\x0b\x39\x26\x4e\x56\x6c\xf2\xed\xbf\x3b\x3f\xe9\xed\xe5\xbf\x3b\x3f\xf1\xef\x6e\xff\x53\x4e\xb6\xf3\xb5\xb7\xcd\x30\x7e\xb7\x64\x91\x76\x57\xc9\x3f\xb8\xc2\x0a\x7a\xc3\xda\x7d\x7c\x53\x77\xb4\x61\x23\xb7\x33\x7b\x5c\x71\x91\x0c\x38\xd8\x16\x8c\xf6\x49\x4d\x6b\xa2\x28\x1d\x0a\x5a\xdc\xe5\x6f\x48\x59\x17\x06\x9a\xbd\xc0\xb6\xb0\xfb\x04\x2a\xc8\xfc\x06\x21\xae\xf9\x29\x21\x47\x0c\x53\x10\xf2\x37\x1e\x3f\x29\xfc\x62\xf5\x0f\x3e\x50\x41\xa7\xf6\x76\x38\xac\x49\x89\x7f\x46\xfb\x71\x0f\x23\xbf\x22\x7c\x45\xe7\x94\x17\x74\xcc\x0b\x6e\x40\x45\xde\x1f\x79\x4b\x0e\xc1\x66\x80\xe4\x8d\x09\xea\xad\xb3\x33\xe2\x86\x10\xd0\x44\x90\xec\xd9\xef\x0e\xae\xed\x81\xb6\x3f\x82\xd3\x0d\x6e\x9c\x31\x15\x9b\x22\xc9\x23\xdb\xcd\x7a\xfe\x48\x26\x4c\x37\xb3\x01\x58\xcc\x0a\xb1\x7e\x34\x4b\xfb\xa4\x95\x9a\x25\x7c\xe1\xda\xaa\x7e\xe6\xca\xa5\x66\x99\x62\xa6\x83\x7a\x09\xdb\x35\xf1\xf7\x5d\x15\xcc\xad\xdb\xab\xf9\xcb\x5e\x8d\xaf\x86\xb9\x7a\x59\xa1\xe6\x71\x5e\xf9\x0b\xbd\xc6\xf1\xab\x25\x2c\x63\xdc\xcc\x17\xee\xc4\xf2\x3d\xc8\xe1\xf7\x76\x0b\xa7\xa0\xb8\xe3\xd5\xf9\x90\x09\x9b\xa6\x9f\x79\xf1\x4f\xf3\xd3\x82\x47\x31\x7c\x4c\x92\xb7\x76\xc7\xd7\xcc\x58\x35\x9b\x74\xc7\x1b\xb0\x8f\x79\x77\xd1\x0e\x5f\xbf\x65\xd5\x8c\xbc\xbb\x58\x21\x99\x11\x1d\xc2\xbe\xb7\xc6\xa0\xf6\xae\x26\x05\x9f\x30\xc3\x93\x26\x61\xc3\xb2\xb9\x94\x82\x1b\xb9\x76\x97\x65\xd2\x07\xd8\xbb\x1b\x7a\xd3\x92\xd5\xd3\x61\x39\xfb\xdc\x4f\x27\xf9\x10\x7d\x4a\x49\x26\x8b\x82\x65\x1e\x1f\x01\x98\xa3\xc3\xcc\xe1\xb5\xc2\x15\xe7\xd2\xfe\xf4\xe8\xea\x4f\xe0\x8c\x73\x6e\xb7\x03\x64\xf4\x83\xf3\xe3\xc3\xa3\x0f\xc7\xa3\x32\xff\xcd\x4c\x5e\x0f\x8d\x1c\xd6\x9a\x0d\x79\x2a\xfe\xe5\xc6\xa1\xe8\x7b\x08\x57\x99\x59\x3f\xc6\x8d\x7d\x92\x5d\xe9\xa6\xad\xf6\x77\x1a\xab\xb5\x21\x2a\xe7\xd2\x83\x94\x94\x66\x40\x14\x85\x9c\xb8\xd0\xae\x75\x52\x17\x05\xb2\x84\x51\x8c\x0d\xe2\x90\xd1\xc1\x8b\x89\xe1\x15\x87\xd6\xe4\x7e\x56\xf6\xc6\xb6\xec\xe4\xee\x5a\x54\xaa\xd9\x43\x7a\x64\x98\x86\x92\x36\xcb\x5c\xb4\x3e\xc7\x70\xa8\x99\x59\x06\xba\x62\x0b\x02\x28\xdd\x13\xa9\xec\xb6\x55\xed\x2d\xc8\x4c\x06\xb3\x7e\x50\x6b\xa6\x46\xf8\xf8\x67\xbe\xd2\x5d\xb4\x42\x78\xff\x73\x36\xd9\x8e\x75\x3e\x67\x93\x55\xcb\xec\x3e\x86\x16\xb1\xa1\xd8\xc1\x2a\x9d\xb5\x99\x61\x41\x1e\x36\xf1\x46\x8d\x7c\xe5\xba\x23\xae\xfb\x33\x5f\xe8\x4e\xf8\xd6\x7d\x34\xea\x10\x1d\xec\x07\xd2\x73\x53\x83\x38\x02\xe1\x38\xa3\x63\xf7\x87\x35\x83\xa1\x72\xce\xd4\x9c\xb3\xeb\x83\x6b\xa9\xae\xb8\x98\x0e\xaf\xb9\x99\x0d\x71\x8d\xf4\x81\x9d\x2a\x7d\xf0\x1b\xf8\xa7\x13\x55\x98\x4a\x74\x98\xe7\x2e\xf9\xbe\xd6\x6c\x52\x17\x98\xb0\xae\x47\x84\x56\xfc\x7b\xa6\x34\x14\x6b\x5f\x71\x91\x0f\x48\xcd\xf3\xbf\x76\x18\xb1\x87\x1e\x18\xfd\xa2\x97\xdb\xcb\x0a\xeb\x4d\x8b\x28\x4b\x83\x15\x25\x32\x56\x0a\x95\x3f\x7e\x14\xcd\xa5\xc6\x7b\xec\x9a\xb7\x84\x0f\xcd\xcb\x44\x44\x54\xb2\x35\xb2\x27\xd5\x26\xe7\x22\x4f\x5b\xba\x3e\x96\x0d\x47\x6f\x9b\xf2\xee\x33\x97\xe4\x14\x52\x8e\xa9\x77\xae\x02\x88\xa5\x4f\x24\x6e\xe7\x11\xf7\x96\x2b\xbc\xbc\x7e\xe5\x42\xff\x5c\x0c\x91\xb2\x61\x95\x37\x0b\xf8\xfc\x3c\x08\x2f\x49\xc1\x77\x26\x05\x3f\xef\xf8\xe7\x16\xa7\xfa\x3e\xe6\x96\x22\x9f\xa5\x09\xfe\x59\x45\x0e\x36\xc8\x13\xdd\x0d\xed\x6d\xb3\xbf\x1a\x0d\xa7\x92\x80\xd6\xe3\xba\xbb\x81\x79\x85\x27\x8b\x0f\x79\x40\xe5\x2b\x55\xb4\x64\x86\xa9\x06\x8c\x39\x93\x42\x74\x69\x8e\x68\x24\xf9\x58\x31\x71\x61\x68\x76\xb5\xc1\x9e\x40\x2f\x36\xd3\x7d\xd7\x8b\xcd\x44\xb6\xd5\x66\xda\xba\x6c\x67\x2f\x1c\x10\x45\xc9\x55\x31\x34\x25\xa1\x28\x97\x9f\xe1\x01\x90\x6a\x1a\x49\x31\xe1\xd3\x0f\xb4\xea\x1e\xb1\xf4\x4f\x5a\xb2\x74\xc2\xc7\x2e\x48\x09\xd8\x16\x95\xac\xa0\x99\x93\x03\x49\x83\xe9\x7f\x7a\x33\xa3\xab\x64\x75\xca\x4b\x6f\x89\xbe\x1d\xf8\x3b\x22\xa5\x7d\x78\x96\xf6\x93\x31\x37\xcd\xb1\xa8\x99\xc1\xc6\x31\xae\xf5\xb4\x14\x24\x73\x48\xc0\xa0\xcc\x47\x80\xb0\x3d\x18\x08\x82\xc8\xcc\x78\xac\xb2\xd0\x67\xe6\xd5\xab\x57\xaf\xb0\xc9\xc0\x1f\xff\xf8\x47\x22\x15\xa1\x24\x67\x19\x2f\x6f\xde\x08\x77\xfd\xfe\x75\x22\x0e\xb7\xbd\xfe\xf3\xf0\xc3\x7b\x28\xec\xae\x8c\xc6\x5e\x5e\x48\x91\x7d\x70\x6b\x50\x3d\x20\xff\xef\xe2\xe3\x69\x83\xaf\xdb\xfe\x16\x7c\xba\x61\x3a\xd3\xe9\x89\x03\x4d\xaf\xfe\xf0\xbb\xdf\x75\x78\x12\x57\x00\x87\xc2\x1d\x5a\xa3\xaf\x51\xa7\x66\x06\x59\x90\xd0\xbc\x01\x30\xe4\xbd\x39\x86\x08\x22\x26\x19\x47\x9e\x78\x7c\xc1\x92\x4f\x67\xc6\xe1\xcc\xd9\x2d\x5e\xf0\xcc\x20\xca\x0b\x1e\x76\xd2\x81\x51\xc2\xa6\x47\x1a\x82\x29\xda\x21\x2a\x9e\xb3\x01\x29\xf8\x15\x23\x13\xfd\x8d\x92\x75\xd5\xb4\x7c\x44\x70\x7b\x0f\x9e\x80\x44\x34\xbc\x9f\xdc\x31\x6d\x5b\xca\xc0\x3a\x85\xb5\xfb\x12\x32\x40\xc4\x92\xfd\xec\xa0\xd3\x9a\x16\x82\x15\xe5\x01\x2d\x01\x4a\x55\x10\xb8\xba\xad\xf0\x65\x89\x88\x34\xf6\x7a\x1b\x4e\x14\x0f\xf4\x5d\x29\xf9\x4f\x64\x72\xc0\x08\x8c\x4e\x74\xc0\xd6\xb3\x3c\xe7\x91\xf5\x9a\x6c\xa1\xe4\xf1\x7d\x03\x77\x6b\x7c\xb8\xb6\xf2\xa1\xe7\x28\xc0\xe0\x45\x73\x03\xdd\xbf\xb9\xb6\xa4\x41\xeb\x08\x47\x71\xf2\xd8\x2b\xde\x34\x8c\x06\xfb\x5e\xe3\x8e\xa8\xc5\x8d\x51\x11\x71\xbd\xc3\xc8\x70\xa4\xc3\x0b\x52\xdf\x2f\xb1\x19\x1b\xf1\x5f\x5d\x37\x02\x77\xaf\xe7\x82\xb0\x60\xe9\x0d\x93\xa3\x25\xd5\xcc\xd4\x6e\xe9\xa1\x90\xd9\xbe\x2b\xd3\xda\x35\xe2\x29\xa9\xba\x62\x79\x38\xff\x46\xe4\xcc\x4e\x8a\x6f\x84\xd0\xc1\x5f\x51\x50\xc3\xe7\x98\x40\x57\xd2\x05\xbc\xa6\xb3\x3e\x81\xb8\xdd\xd1\x68\x17\x05\xaf\x54\x44\x1b\xaa\x9c\x34\xb4\x9f\x77\x93\x3c\x1b\x4c\x86\x69\xc9\x8d\x0f\xb4\xd2\xd8\x74\xda\x9a\xdb\xd0\xcc\x5e\x02\x6e\xa6\x99\xf9\xc3\x87\xba\x35\x4a\x3f\x5b\x7a\x30\x97\xbb\x7a\x8f\xf1\x1a\x26\x43\xb4\xfa\xdf\xdb\x89\xe9\xb2\xcf\x3b\xdb\xfc\x20\xa9\x7a\xec\xff\x7e\xd5\x06\xbd\x35\xd2\x4b\xa3\xad\x68\x77\x5f\x76\x50\xc2\xf1\xea\xb7\xd9\x7d\xe9\x34\xf1\x8f\xeb\x69\xe2\xa0\xa2\xd9\x03\xab\xdb\xa4\x6e\x95\x02\x8e\xd7\xb6\xa9\xe1\x78\x9d\x4c\x40\x94\x2f\x1d\xd9\xee\xa8\x89\x8d\x2a\xaf\x6b\xd8\xb5\xeb\x3a\xe8\xe6\x34\x68\xbc\x36\xa2\x47\xe3\xd5\x87\x36\x8d\x57\x77\x9d\x1a\xaf\x2e\x09\x9b\x78\xf5\x2b\x38\x7c\xda\x27\x2e\x86\x53\x3b\x50\xb3\x98\x04\x06\x80\x10\x1e\xf8\x54\xbc\x30\xee\x2c\x2f\x9c\x52\x83\x22\x83\x8e\xb5\x2c\x6a\x83\x03\xf7\xf5\xe8\x58\x5f\x82\x17\x62\x05\x80\x5a\x77\x52\x92\x96\x07\x89\x74\x2f\xd0\x8e\x51\x5d\xe9\x3e\x42\xe7\x63\xaa\x8b\x0b\xbe\x2f\x0e\xeb\xd7\xf5\xbe\x7d\x6e\xf7\xa7\x74\xb9\x77\x66\x88\xe0\xa3\xeb\x83\x29\xfc\xc3\x02\x38\xcf\xf5\x8c\xb9\x94\xf0\xc8\x00\xb3\x07\xbd\x15\xe3\x60\x15\xfa\xe6\x70\x88\x4c\xbf\xa9\xf0\x63\xbf\x21\x87\x4c\xf3\xee\x8e\x6c\xcd\xc9\xde\xdb\x00\xfc\xe8\xeb\xa8\x4e\x84\x61\x6a\x42\x33\xb6\x1f\x3b\xb8\x59\x35\x63\x25\x53\x76\xe2\xdd\x7d\x1e\x47\x70\x46\x45\xee\x3a\x6c\x64\x4c\x81\xe0\x63\x9f\x0c\x53\x76\x91\xde\x5e\x9c\x90\x5c\xf1\x39\x53\x9a\xec\x7d\x0d\xdd\xbd\xb0\xb3\x46\x87\x0e\x5c\x9b\xc3\xe9\x80\x17\xd9\x84\xfb\x1d\x06\xde\xb4\x4c\x45\x2a\xfc\x89\x2d\x22\x09\xdb\xac\xb2\xef\x05\x62\x39\x42\xc7\x31\x8f\x74\xe1\xfb\x56\x0a\x50\xd4\xe0\xa4\x5b\xc8\x5a\x61\x82\x9f\x03\x12\x67\x24\x93\x4a\x59\x95\x11\x08\xa2\x9a\x28\x36\xe5\xda\x00\xe2\xb9\xef\x72\x85\xa8\xc9\x1b\x83\x01\xd8\xaa\x4c\xa9\x90\x12\x75\x07\xc0\x42\xf2\x18\xce\xc8\xa8\x94\x9c\xf3\xdc\xdb\x18\x90\x0c\xde\xf4\x07\xaa\xa8\x8e\x30\x41\xa9\xd6\x32\xe3\x10\x93\x69\xb8\x28\x79\x7c\x74\xce\x81\x05\x93\x33\x63\x0d\x4e\xc1\x5a\x48\x72\x71\x12\x97\x24\xb4\xaa\x8a\xe4\x34\xf5\xee\x7a\x92\xcc\xd9\x59\x3d\x2e\xb8\x9e\x5d\x6c\x4b\x62\xca\x2a\x9a\xb0\x08\xef\x46\x39\xc0\x6d\x09\x2a\x1d\x92\x62\x84\xe6\x60\x04\x58\x55\xcb\xda\x3c\x5c\x0a\xf0\xbe\x50\xad\xfd\xa8\xb1\xa8\x91\x00\xe1\x58\x30\xc3\xfc\x57\xe9\xfa\x62\xf3\xde\x0e\x4f\xd9\x9a\x89\xf6\xd3\xef\x44\xd5\xfa\x3c\xa3\x45\xd1\xc1\x18\xbf\x44\xb7\x07\x2b\xf2\x38\x7a\x89\x56\xa9\xc7\x66\xc6\x0d\xc3\xed\x5e\xf2\xb3\x0c\xf5\x18\x78\x7a\x8d\xb0\xe5\x56\xba\x69\xbc\x72\xe1\x74\xd4\xa2\x58\x0a\xbf\xba\x03\x42\x8b\xc2\xff\x20\x70\x00\x22\x8f\xe0\x3e\x7e\x49\x17\x7a\x49\x17\x5a\xf3\x7a\x49\x17\xda\xc6\xfc\x54\xef\x18\x44\x59\x4f\xf3\x21\xa0\xfa\x60\x52\x4b\x8d\xfd\x09\x83\xca\xd5\x55\xa5\xbb\xa7\x02\x75\x63\xf9\xa1\xf8\x5e\x87\xc6\x28\x3e\xae\x4d\xba\x5c\xe9\x37\x97\xab\xa1\x07\x4c\x2f\xa6\xdd\x01\x38\x74\x4b\x96\x45\x92\xd0\x39\x51\x83\x78\x8e\x8e\xcd\x8e\x7a\xff\x28\x28\xe2\xa0\x83\xe3\x87\xbb\x9a\xe4\x32\xab\x4b\x26\x4c\xc3\x21\x4d\x62\x3c\xfa\xb1\x37\x78\x44\xd0\x3c\xe7\x78\xc2\x9e\xf5\x70\x58\x74\x12\x24\xb9\xbc\x16\xd7\x54\xe5\x87\x67\x49\x28\x79\x6d\x84\xbc\xe6\x59\xb1\x89\xee\x3f\x26\xf6\x73\x3a\x86\x96\xa6\xae\x27\xd6\x4b\x4a\xda\xca\x47\xf4\xb3\x4d\x57\x45\xbe\x8c\xb4\xe7\xda\x9d\x29\x67\x4d\xe4\xaa\xd7\x91\x5f\xb2\xdf\xb6\x23\xec\xf6\x92\xfd\x96\x3a\xf2\x4b\xf6\x5b\xda\xf0\x2d\x79\x76\x82\x29\x6c\x56\x9d\x2b\x5c\xf3\xa5\xd6\xf9\xe0\x22\xbf\x1d\x16\x6a\xbb\xb2\x76\x8e\x9a\x33\x11\x2d\xf5\x65\xf0\xbf\x25\xa7\x02\xca\xc2\x26\xce\x18\x55\xd8\xf8\x43\x13\x2c\x92\xcf\x21\xc3\x67\x0b\x32\x74\x60\x2e\x3b\x38\xb8\xf0\x6a\xe3\x06\x35\x78\x51\xd8\x2e\x11\x53\x20\xa3\x1c\xcc\x4a\xe6\x6f\xb0\x43\x20\x15\x42\xa2\x8a\xaa\x07\xae\x7b\xf5\xc0\x79\x8c\x45\x0e\xff\xa1\x2b\x9a\x31\x10\xa7\x41\x7f\x4d\x06\x93\xc6\xab\x17\x06\x20\x3d\x31\x01\x01\x46\x80\xd9\x39\xeb\xc2\x0d\xa4\x37\x8e\xb0\x57\x63\xeb\x77\x7d\xd2\x72\x53\x34\x7c\xaa\x67\x04\x9d\xcd\x58\x49\xe1\x3f\xdf\xf9\x29\xb0\xb2\xd1\x1a\x9c\x86\x61\x5b\x13\xa6\x4a\x4d\xe4\x64\xd0\xaa\xd4\xdc\x99\x77\xe9\xf4\xe1\xaf\x9e\x32\xbf\x88\xdf\x47\x67\x9d\x33\x39\xc8\xf2\x84\x9d\xb5\xf2\x2e\xec\x1e\x02\x15\xd2\x6e\xab\xd0\x61\x3d\xe4\xc0\xc2\xf9\x81\x33\xbc\x45\x93\xd3\xbf\x93\x06\xaf\x6d\x4b\xb8\x4b\x4d\xb4\x1b\x84\x40\x78\x5b\x5b\xef\x48\xce\x4b\xa2\x5d\xfb\x7a\x49\xb4\x7b\x49\xb4\xeb\x35\xd1\x2e\xd2\x73\xfc\xb9\xb5\x22\x67\x2e\x8e\xc7\xfb\xc4\xb9\x31\xf3\x26\xbf\x73\x36\xf8\xbc\x37\x9f\xf4\x26\x55\x3b\xb7\x7f\x77\x34\xda\xc5\xec\xfe\xc6\x3b\x51\x9b\xc9\xf0\x4f\x84\x89\x4c\xe6\xf6\x39\x97\xf0\x7c\xa5\x0d\x68\xef\x4d\xbc\x22\xa6\xa5\xf4\x63\xc5\xf5\x01\xf0\xec\x3e\x34\xaa\xce\x47\x85\xef\xf1\xf3\xae\x7f\x9d\xb4\xb3\x70\x6f\x34\xd9\xd0\x89\xc8\x4d\x71\xe8\xd0\xea\x54\x5a\xff\xbd\x26\x05\x2f\x39\xa0\x9b\xe7\x20\xe1\x98\x36\xdd\x02\x34\x84\xec\xe1\x23\x47\x59\x55\x0f\xdc\xe3\x47\x25\x2b\xa5\x5a\x0c\xc2\x10\xf6\xcb\xd6\x98\xee\x8e\x7d\x50\xa2\xb3\x5a\x29\x26\x4c\xb1\x88\xd4\xe9\xcf\x4d\x9b\xf6\x2b\xb0\x25\xca\x74\x60\x90\x2e\xb8\xd3\xcd\xd5\x96\x41\x4d\x9a\x18\x84\x4c\xa3\x56\xde\xa1\x7b\x9e\x1e\x34\xc9\x79\xf6\x53\x26\xe6\x64\x4e\x95\xee\xb6\xe7\x49\xbf\xfa\x73\xce\xe7\x5c\xcb\xe4\x5c\xaa\xe8\x41\xf1\xf4\x5c\x84\xe0\x99\xdd\xa9\xb2\x36\x55\x6d\xdc\x71\xe2\xb7\xaf\xef\x85\x1b\xb6\xed\x92\xa1\xf1\x7a\xa7\x33\x49\x15\x35\x86\x29\xf1\x86\xfc\xd7\xde\x4f\xbf\xfd\x65\xb8\xff\xd7\xbd\xbd\x1f\x5f\x0d\xff\xfd\xef\xbf\xdd\xfb\x69\x04\xff\xf1\xc5\xfe\x5f\xf7\x7f\xf1\x7f\xfc\x76\x7f\x7f\x6f\xef\xc7\x6f\x3f\x7c\x73\x79\x76\xfc\x77\xbe\xff\xcb\x8f\xa2\x2e\xaf\xf0\xaf\x5f\xf6\x7e\x64\xc7\x7f\x7f\xe0\x43\xf6\xf7\xff\xfa\x6f\x9d\x49\xa7\x62\xf1\xb1\xa3\x1c\xc6\x6b\xd8\xa3\x3e\xd0\x7e\x62\x2f\xec\xb7\x64\xa5\x70\x61\x86\x52\x0d\xf1\xd1\x6f\xa0\xd7\x60\xc7\x01\x3c\x7b\xf5\xbd\xff\x1b\x1d\xa4\xe9\x23\xed\x0d\xc4\x2d\xda\xe0\xfd\xda\x80\x90\x88\x73\xc4\x37\x06\xa8\xe7\xc7\x6f\x03\x4d\x18\x56\x56\x52\x51\xb5\x20\xb9\x0b\x0c\x2c\xee\xc4\xc5\xdf\x48\xcf\x6d\x20\x3d\xe7\x29\x1b\x70\xc3\x81\xc5\x92\xe5\xbc\x2e\x37\x1d\x53\x44\x2a\xe2\x85\xbf\x86\xb6\xd3\xae\xd5\xb5\xcf\xc1\x76\xb7\xb9\xc8\xee\x98\x66\x57\x68\xef\x07\xce\xe8\x12\xff\x69\x35\xe0\xdd\xd9\x71\xd9\x95\x25\xa3\x22\xc4\x37\x21\x13\x58\xe6\x6c\x57\x87\x7b\x91\xa4\x5e\x42\x8a\x98\x08\xe7\x2a\x5b\xf6\xdc\x00\xfb\xd6\x6a\xf9\x00\xaa\xe6\xc6\x3a\x71\x76\xe0\x6e\xd2\x0b\x90\x34\xff\x17\x7b\x6f\xd5\xf2\x4d\xb3\x69\x20\xc4\xa7\x85\x1b\x09\x1e\x18\xd7\xb9\x63\x42\x0a\x99\x45\x25\x03\x2d\xad\x11\x18\xf5\xd8\x8b\xb8\xae\x39\x45\x96\x5d\x2d\x35\x68\xae\x40\xe0\xab\xd0\x98\xe2\xcb\x33\x3a\x2e\x18\x7a\x79\x80\x6f\x3a\xf3\xe8\x25\x74\x0b\xff\xc4\xcb\xba\x24\xb5\xb6\x6f\x26\x45\xfb\xd9\xcd\x8b\x5d\xe3\xd6\xc4\xbd\x52\x72\x01\x3f\x6a\x79\xc4\xd2\x43\x4c\x33\x46\x2e\xc2\x0a\x34\xfe\x59\x80\x10\xf4\xee\x17\x5d\x83\x95\xee\xa8\x73\xb6\xa2\x9c\x40\x66\x67\x30\x19\xa0\x49\x3a\x4d\x6d\x71\xd5\x4c\x4a\x24\x30\x04\x2f\xda\x12\xc3\xb7\xcd\x0f\x0b\x54\x0b\x57\x91\xf3\x5c\xf7\xf1\xb3\x53\xb8\x3b\xaa\xd9\x7d\x29\xd7\xbd\xa8\xd4\xbd\x2b\xd2\xa1\xc2\x69\x63\xea\x5e\x28\xb1\x6a\xe9\x7b\x71\xb3\xfd\x76\xb9\x15\xf5\xa5\x2d\x41\xc0\xba\x5c\xbd\xa4\xe1\x2f\x83\x9b\xda\x29\x8f\xd9\x22\x73\x0d\x1f\x78\x93\x49\x18\xb2\xc9\x70\xef\x02\x1c\xc9\xd0\xfe\x9f\x77\x67\xfb\x24\xa3\x31\x9b\x60\x46\x39\xfe\x06\x5c\x81\x3a\x0d\x18\x05\x1d\xfa\x05\x33\x80\xbf\xc2\x44\x78\x28\xa4\xc5\x97\x72\x6e\x45\xc8\xff\x49\x7a\xf4\x77\xda\xe5\xc1\xf1\xc4\x7d\x41\xf7\x5b\xc0\x7a\x1a\x9d\x73\x82\xb1\x1c\xc1\x62\x8a\x66\x0a\x54\x2d\x12\x27\x60\xbc\xef\xeb\xe6\x40\x74\x0b\xa9\x20\x7a\x81\x52\x0c\xdd\xee\x8a\x59\x1e\x80\x4e\x1c\x4a\x96\x44\x0b\x5a\xe9\x99\x34\xe0\xe2\xa5\x15\xcd\xb8\x49\x46\xf9\x30\x8a\x66\x57\xf6\xc9\x90\x6c\x04\x6f\x96\xf6\x1a\xd9\xbe\x2b\x55\x8e\x99\xb5\x0d\xaf\x63\x66\x4a\xd6\xd3\x19\xe0\xaf\xe0\x5d\x59\x41\x35\x82\xfd\xa4\xe5\x09\xae\x1c\xd3\x39\x25\x35\xc9\x17\x82\x96\x3c\xf3\xeb\x07\x95\x4b\x9a\x4b\x97\x07\x02\xb4\xa4\x4e\x1b\x25\x67\xa1\xb9\x3c\xa6\xa4\xbc\x2d\x28\x2f\xc9\x9e\x66\x8c\x1c\xfb\xbd\x8e\xdf\x5c\xa0\x49\x8d\x81\xa8\xe4\xae\xee\xad\x1c\x17\xd7\x36\xcd\x61\xc3\xda\x4f\x7c\x00\x2e\xca\xfb\x04\x41\x9c\xfc\x82\x22\x5f\xfd\x8a\xfb\x5d\x76\xe3\xea\x49\x93\x0a\xca\x52\x9c\x33\x6d\xce\x44\x2e\x9b\x04\xe8\xa4\xb1\x0e\xcf\x4e\x74\xec\xbd\x44\xa9\x56\xe1\xe8\xf0\x45\x21\xc5\x34\xee\x35\x15\x64\x62\xd2\x78\x56\xe5\x12\x84\x8b\x9c\xcf\x79\x5e\xd3\x02\x95\xad\xf4\x79\x7a\x7b\x71\x82\x54\xf2\xe9\xcc\x0c\xaf\x19\x04\xff\x50\xdd\x6e\x0e\x12\xff\x6e\xfc\x46\xa1\x26\xd7\xa0\x97\x19\x62\x64\x9a\x48\x62\x2e\xe8\x6c\x67\xed\x9a\x2e\xa0\xd5\xa8\x2b\xb6\x6b\xa5\x84\xfb\xb6\xe5\x38\xec\x44\xa6\xa9\x0d\xa5\x57\xf4\x1c\x7b\xa7\xce\xdc\x21\x48\xe2\x8c\x0a\x30\x5f\x21\x68\x6c\xb7\x00\x88\xd5\x9b\xd3\x96\x2a\x74\xaa\xc0\xc3\xcd\xa3\x50\xf9\xd5\xd4\x6e\xba\x44\xaf\xcc\x86\x3d\x23\xf3\x66\x3f\x5e\xb2\xb2\x2a\xa8\xd9\x78\xea\xf5\x0f\x51\x0c\x3d\xca\xea\xb3\xa7\x07\x15\xf9\x90\x16\x56\x68\x9c\x7d\xff\xd6\x81\x38\xa1\x6c\xef\xa5\x86\xe5\xd2\xab\x20\xc2\x59\x39\x68\xce\xae\x14\xeb\xd0\x11\x69\xcc\x72\x50\x09\x1c\xc5\x5d\x2a\xf8\xe4\xb5\x60\xca\x6f\xac\xb3\xef\xdf\x0e\x08\x1f\xb1\x91\xff\x2b\x0c\xe1\x55\x26\x23\xa7\x08\x91\xe0\xc1\x42\xd2\x73\x01\x65\x3e\xc2\x57\x8f\xc3\xcd\xf1\x98\xff\xf8\xb3\x9d\x14\xfb\xed\x5f\x86\x7f\x76\x67\x0c\xfc\xf5\x0f\xab\xb9\xa5\x9f\x6c\xe4\x1f\x4b\x4f\x8b\xcb\xd0\x41\xe3\xb1\x7f\xfd\xe3\x4c\xe6\x17\x15\xcb\x46\x38\xfd\xfa\x1f\x9d\xd2\x53\x09\x61\xc2\xa8\xc5\x88\x9c\x49\xa8\x65\xe1\x39\x4a\x34\x78\x57\xc5\xfe\xe9\xf3\x27\x80\x0d\x42\x90\x36\xa3\x86\x09\xd0\x80\x45\x7a\x67\x56\xe2\x11\x06\x61\x58\x90\xf3\x14\xe6\x79\x0f\x22\x6b\x08\xb4\x3c\x20\x46\x4a\x38\xa5\x92\x0f\x5c\x7b\x1d\x0a\xc2\x3e\x71\x0d\xfd\x01\x70\x29\x81\x4b\xa8\x2b\xa9\xf7\x76\x87\xa5\xc6\x32\x5e\xe8\x77\x51\xc9\xf4\xe4\x58\x98\xc2\x2f\x84\x34\x5f\x84\xdd\xeb\x8b\xcb\xc0\xc0\x90\x84\xce\x25\xcf\x49\xad\x41\xef\x14\xa4\x16\x90\x62\xd0\x01\x4d\xd3\xb1\xcf\x78\x41\x4a\xae\x0d\xbd\x62\x23\x72\x61\x6d\x92\x38\xe3\x17\x99\x4a\x90\x71\x21\xb3\x2b\x96\x93\x5a\x18\x5e\x74\x72\xcf\x04\xba\x61\x6a\x23\x7b\x05\xf0\x33\xeb\xcc\x6a\xba\x95\x62\x43\x6f\x35\xe1\x5d\x1d\xdc\xc6\x78\xa4\x87\x59\x6d\xd6\x6a\x10\xf6\xea\x8c\xa2\xff\xb6\xca\x61\x48\x58\xef\xc4\x8a\x39\x12\xa4\xd1\x8d\xfa\x70\x3b\x9f\x12\xfe\x76\x7f\x00\x93\xe9\x11\x39\x05\xeb\xa5\x48\xdf\x95\x58\xdf\x80\x2e\x6f\x97\xd1\x22\x58\xc6\xb4\xa6\x6a\x31\x20\xe3\xda\x58\x73\xd4\xd5\x52\xbb\xe2\x52\x6b\x35\xa6\x4f\x2a\x15\xb5\x25\x98\x28\x96\x49\xa1\x8d\xaa\x33\xe0\x1a\x4a\xc6\x4a\x5e\x31\xd1\x00\x4c\xa4\x6f\xc2\x76\x5d\x78\x53\x80\x09\xe9\xc9\x92\x64\x33\x2a\xa6\x2c\xc0\xaa\x92\x92\xe6\xc0\xca\xdf\x06\x17\x48\xfa\x6c\xca\xc0\x18\x74\x62\xac\x66\x68\x80\x43\xc6\xd6\x54\xf0\xe9\x43\x1d\xde\xcc\x47\x0e\x07\x4d\x5a\x90\x5d\x30\x5e\x6c\xb0\x2e\xb0\x7b\x0e\xc8\x10\x6c\xd6\x54\xbf\x61\x0f\x39\x1f\x25\x33\x34\xa7\x86\x6e\x4b\xf5\xfa\x07\xba\x08\xb9\x64\x98\x60\x0f\xbc\x1b\x25\xde\x3b\x53\xc1\xbb\x89\x64\xc5\x63\x74\xdf\xb3\xef\xdf\x76\x1a\x1f\xfc\x42\xc0\xae\xd0\xe7\xc6\x58\x39\xe3\x92\x0d\xb1\xb2\x1c\xbc\x17\xb4\x28\xe4\xb5\xeb\x3f\xe6\x29\xc1\x93\x9c\xe5\x24\xaf\x3b\xc7\x9f\x1b\x2d\xa1\x4b\xb6\x53\x2f\xb9\x4e\x96\x3f\xb7\x85\x39\x2e\x9b\xf4\xf1\xac\x5d\x4a\xbe\xd2\xda\xc7\x2c\x43\x26\x0c\x57\x2c\x42\x9f\xee\x44\x82\xe3\xb7\x5a\xa0\x28\x6d\x73\x1e\xb2\xe6\x94\x19\xdd\xd4\x48\xa2\x4e\xd9\x71\x54\xe3\xec\x24\x7c\x23\x30\xfe\x3c\x37\xba\x90\xcb\xca\x09\xe8\x34\x26\xf2\xb9\x96\x4e\x77\xb4\x5a\xf7\xc6\x99\xb1\xbf\x3c\x37\x9a\xd9\x93\xfe\x83\xcc\xbb\x27\xcc\xf5\x9b\xb9\xd9\x22\xad\x81\x55\x41\xf4\x21\x0d\x51\x4f\xbc\x01\x92\x9f\x75\x0b\xe9\x1b\x75\x99\x19\x9d\x77\x46\xc3\x4d\x0e\x89\x35\x2e\x8b\xa1\x8f\x8e\x21\xb9\x43\x20\x77\xf8\xba\x23\x61\xdd\xab\x05\xfd\xd5\xb1\x6a\xb0\x4d\x50\x0f\x39\x47\xf6\x14\xbe\xe8\x25\xe9\xaa\x6f\x86\x6c\x28\x73\xaa\xa5\xcb\xc1\x0f\xd5\x22\x0e\x42\x91\x71\x7b\x4e\x76\x9f\xd2\x2f\x5a\xb6\xa4\x73\x81\x84\x40\x04\xe2\x0d\xed\xf9\xc8\xc4\xc8\x71\x9e\xef\x16\xd4\xbe\x7d\xbf\x67\x62\xc0\x76\x5e\xed\xac\xee\x3c\xd2\x89\xab\x36\xf4\xfe\x25\xa6\xa0\xfc\x25\x82\x41\xb4\xd2\x40\xc9\xa2\x60\x0a\x96\xc0\x45\x1f\x96\xaa\xaa\xec\x6a\x11\xcc\xad\x4b\xef\x1f\xe0\x2f\x1f\x90\x0b\x0e\x31\xc1\xae\x83\x09\x4c\x35\xb6\x5d\xf5\x69\xe5\x10\x68\xf4\xa5\x72\xab\xe8\xe9\x2e\x95\x7e\xf0\x61\xbb\x43\xb1\xc0\xc9\x3f\x8a\x98\x13\x63\x5b\x64\x6a\x49\xe5\x9a\x30\x41\xc7\x85\xb5\x18\x22\x06\x0e\x74\x2e\x29\x90\x46\x46\x77\x9d\xb3\x49\xf7\xa9\x83\x68\x63\xfc\xc8\x87\x8d\x8d\x1a\x68\xeb\x87\xa3\xa6\xb0\xd4\x39\x50\x7a\xe8\xc6\xe9\x2f\xc7\x75\xad\x21\xda\x45\x47\x4b\xd4\xc4\xdd\x31\x56\xbe\x41\x57\x9a\x7a\x4b\xd1\xef\x2f\x49\x1f\xfa\x1b\xf0\x44\x2f\x7e\xfb\x31\x9d\xbc\x79\x78\xf5\x97\xeb\x0f\xa5\xb3\x50\x67\xd5\x47\xd2\x74\xdf\xe7\x0e\xc1\xf0\x1a\xd0\xe7\x1d\xb5\x53\xf8\xc3\xab\xfd\x21\x89\x78\xcc\xac\x74\x6e\x9a\xe5\x74\xdf\x17\x04\xf7\x46\x3c\xfe\x8a\x7a\xbc\x46\xcc\x7d\xcb\x45\x1e\x2a\x23\x3d\x62\xa8\xd5\xa1\x0e\xcf\x4e\x90\xea\x7e\x68\x7a\x07\x67\xc2\xc2\xd9\xa4\x66\xc6\x55\x3e\xac\xa8\x32\x0b\x0c\x40\x0d\x5a\x14\x07\xb0\xbf\x1e\x86\xee\x35\x7d\xdd\x6e\xa6\xde\x59\x0e\x96\xc0\x27\x10\xba\x0c\xd7\x5b\x39\x64\xdb\x66\xa4\x2b\x84\xa0\xbf\x5a\x33\x72\xda\xb4\x6f\x0a\xa1\x96\x67\x32\x23\x8f\x55\x86\x4d\xda\xa7\xd9\xf6\xea\xda\xf6\xa8\xd5\xed\x82\x20\x54\x7d\xc1\xa5\xe0\x82\x85\x32\x86\xe1\x0a\x86\x20\xb8\xe2\xed\x93\x06\x84\x4f\xac\xd2\x26\xc5\x10\x72\x14\x3b\x93\xd7\xe4\x27\x39\x63\x74\xe4\x6a\x86\xd1\x4d\x0e\x82\x29\xa2\x32\x1a\xba\x91\x83\x64\x4f\xc8\x74\x2f\xba\xbf\x40\xb6\xe2\x58\xfb\x58\x26\x7e\x4b\xc6\xc7\xb8\x7b\xcb\x1d\xd2\x68\x9e\xb1\x7b\x3d\x3a\x0b\xbc\x4a\xcc\x45\x6e\x37\x15\xa8\x48\xe0\x78\xd7\x75\x96\x31\x16\x02\x7b\x4e\x2c\x75\xb7\x3a\x5b\x67\x8f\x9b\xf2\x92\x9a\x6c\xc6\x34\xd1\x12\x7a\xb3\x6a\x43\x8b\x82\xe5\x21\x27\x09\x19\x45\x82\x55\xe1\xf2\x95\x3a\xd3\x11\x19\x2b\xdd\xa7\x38\x0a\x5e\xb8\xd8\x68\x55\x50\x17\xf9\x99\xd4\x22\xc3\xa2\x40\x6e\x16\x21\x19\x64\xd9\x30\x05\x57\xb1\x86\x80\x58\x77\xd3\x67\x82\x79\x1d\x91\xdb\x37\x30\x33\x1c\xfe\x0b\x3c\xee\x67\x74\xce\x9a\x9c\x0c\xd7\xd5\xce\x9e\xd2\x63\x9a\x5d\x5d\x53\x95\x77\xad\xa2\x25\x80\x4f\x4c\x0d\x1f\x73\xfb\xf2\x03\xb4\x10\x62\x85\x5d\xec\xc6\x69\xdb\x5c\xf4\x6d\xca\xc4\xf3\xb0\x17\x4d\xfa\x0d\x13\x67\x3f\x98\x36\x9a\x99\x80\xf0\xdc\x5d\xe3\x25\x2e\xd3\x9d\xd6\x46\x96\xd4\xf0\x0c\xe2\x68\x7c\x12\x25\x73\x95\x98\x1e\x61\x25\x8d\x4f\x59\x47\x15\x09\x14\x37\xb7\x6e\x3d\x89\x81\xd5\xc6\xd2\x23\x4c\x7c\x34\xd7\x6e\x95\xdb\xd3\xea\xa7\x25\x52\x3d\x7b\x7a\xcf\x4b\x4c\xfe\x87\xcc\x5b\xc5\x18\xe1\x65\x25\x95\xa1\xc2\x90\x9c\x4f\x02\x80\xb3\x4f\x05\xbc\x8b\x27\xfa\xf0\x07\xfd\x00\x09\xb0\xd1\x28\x18\xd4\x2c\x0a\x79\xad\x89\xb9\x96\x21\x2a\xd0\x64\x61\x39\xbc\xe1\x41\x9b\x98\x1e\x74\x1c\x37\xaa\x3d\xea\x2c\x5f\x45\xe7\xd0\xc0\xca\x9e\x6b\x56\x14\xf6\xdf\xbb\x4e\xa3\xce\xe0\x20\x2b\xe7\x84\x4f\x05\xc2\xba\x72\xed\xe3\x53\x0e\x98\x64\x2f\x57\xb2\xaa\x5c\x86\x42\xb9\xdf\xff\x9c\x40\x9a\xb9\x9a\x33\x0d\xe5\x20\x1e\x2c\xc5\xb2\xc2\x94\x09\xa6\xa8\x81\x24\x38\xd7\x7f\x12\x54\x92\x65\x22\xbb\xc6\x65\xf0\xea\xd1\x2f\x72\x0f\xd3\x61\x86\xe4\x6a\x26\xf3\xf7\xb8\x6f\x7b\x78\x2f\x2e\x90\xdf\xbc\xdc\xe9\x81\x81\xa0\x8d\xca\x3e\xf9\x4e\x23\x5b\x84\x93\x37\x80\xdb\x3c\xc8\xcb\x86\x29\x22\xce\xd1\xd6\x03\x51\x87\x45\x35\x8b\xa8\x8a\xfd\x52\x01\x92\xad\x3d\xd7\x2d\x7a\xdf\x2a\xa9\xf5\xa9\xff\xc9\x13\x92\xfe\xe2\xb3\xba\xe7\x7a\xf1\x59\xbd\xf8\xac\x5e\x7c\x56\x70\xbd\xf8\xac\x96\xaf\xcf\xc5\x67\x45\x9a\xe3\x6a\x5b\x65\xd3\x69\x6c\xba\xb4\x0f\xd8\x47\x9e\x67\x42\x4e\xa5\x71\x79\xc0\x60\xc1\xd2\x5b\x83\x4e\x14\x4e\xe8\x6b\xba\x18\x09\x66\x5c\x17\x11\x1f\xdf\x3d\xf7\x34\x7d\xa3\xac\x35\xe2\x5c\x1f\x91\xdc\xf0\x82\xcc\xf7\x3e\x89\x46\x31\x12\x55\xb3\x26\x2d\x19\x3e\xdf\xd5\x2e\xf9\xd4\x7e\x0f\x38\x80\xa4\xd5\x7a\x7f\x44\x2e\x5c\x49\xca\xd2\xe0\x37\x9b\x16\xe4\xcc\x50\xde\xa5\xb1\x4f\x7c\x79\x6d\xe8\xf2\x16\xed\x6c\x63\xda\x0e\xe9\x73\xdb\x04\x24\xa3\x6d\x73\xc5\x36\xc8\x68\x51\x1d\x6d\x5c\x7d\xdf\xdc\xf0\x58\x49\x38\x27\x13\x72\xce\x32\x39\x67\x0a\x57\xf7\xf8\x53\x45\x85\xe6\x52\xbc\xa3\xbc\xb0\x6b\xeb\xd7\xb8\x89\x76\x93\x5a\x33\xd5\xce\x52\x8c\x52\x34\xc2\x06\x77\x8c\x64\xb9\xb7\xbb\x81\x12\xba\x85\xd8\xf1\x5c\xa5\x5b\xa5\xd8\x9c\xcb\x5a\x7b\x8c\x82\xda\xa0\xa6\xa1\x8d\xf3\x10\xcd\xf8\x74\xe6\x6f\xf6\xa5\xa5\x90\x1a\xad\xf2\xb0\x89\x3b\x53\xa6\x0d\x35\xb5\x6e\xc3\x39\x67\x90\x1b\xb8\x45\x09\x52\x81\x8f\xb6\xc7\x08\xe9\x53\x5d\x47\xac\x88\x6d\x3d\x10\xdf\x23\x92\x05\x3e\x7a\xec\xf6\xb2\x07\xe5\x68\x00\x48\x32\x59\x56\xb5\x61\xd1\x9e\x77\xbb\xab\x1f\x51\xbf\x26\x33\xb5\xfa\x29\x1d\x94\x54\xd0\x29\x1b\x06\xd2\x86\x0d\x1e\xc7\x41\x6f\x92\xbe\x17\xb6\x22\xbd\x37\xd3\x89\xaf\x67\x87\xa3\xd1\xbe\x7a\x03\xaf\x23\x8f\x02\x60\x47\xfa\x07\xb1\x23\x8f\x0f\x64\x47\x02\xae\xe8\xb6\x0a\xa0\x73\x47\xdf\xb2\x08\x72\x4a\xc6\x5d\x22\xa8\x4f\x53\xd9\x29\x1b\x8e\x16\xae\x89\x2c\xb9\x31\xcc\x17\x0d\x06\x91\x32\x20\xdc\xb4\x20\x27\x9d\x00\x85\x00\x27\x96\xf8\xb1\x4f\x55\xc1\x33\x6e\xa2\x76\x70\x89\x48\x0f\xcb\x17\x38\x10\xae\xb9\x46\x55\x5e\x10\x5e\x56\xd8\x12\x1f\x04\xe1\xd0\xe1\x00\xf9\x20\x5c\x78\x9b\x0c\xca\x47\x08\xfb\x04\xa1\x58\x24\xf8\x45\x6e\xaf\x79\xbd\xc8\xed\x5b\xae\x17\xb9\xdd\xbb\xdc\x46\x40\xd0\xee\xf8\xba\x2d\x79\xed\x1f\xea\xba\x19\xd1\x31\x2b\xc8\xcf\x35\x53\x0b\x62\x0d\xac\x06\xbf\x43\x5a\x61\xa7\x79\x8e\x30\x13\x3e\xa7\x63\x8b\x22\x04\x7d\x2a\xe7\x90\x33\x72\xfc\xc9\xda\xb7\xd0\xea\xa1\xf7\x53\x72\x79\x80\x76\x2f\x29\x5c\x85\xb0\x32\xb1\x55\x8a\xb5\x4e\xf1\x27\x60\x62\x1e\x9e\x1e\xf5\xe9\xc0\xe8\xa3\x92\x84\xf4\x57\x4d\x42\x1e\x49\xc9\x20\xe4\xf0\x8e\xb9\xc6\x35\x09\xdf\xc0\x39\x1e\x2a\x8f\x42\x34\x97\x5c\xb1\xc5\xc0\x55\x63\x12\xcb\x81\xd4\xdf\xdc\x13\x89\x58\xe2\x8e\xea\xcf\x15\xc3\x3c\x8e\x6e\xbd\x3f\xdb\x57\xcf\x07\x62\x9f\xa1\x3a\xbc\x86\xf6\xb5\x7b\x7b\x96\x5f\xa2\x7e\xce\xe8\x9e\xcf\x7c\x62\x5f\xb5\xaf\x47\x2d\xed\x19\xcb\x3b\xce\xbb\x8d\x3c\x6f\x3f\x08\xb8\x91\x81\xcd\x01\xd3\x13\x04\x7e\x3f\xec\x45\xfa\x0e\x26\xe0\xe5\x97\xf1\x91\x26\xab\x37\x01\x43\x22\x5a\xdb\xc8\x83\x57\x6c\xb1\xab\x5d\x6f\x0f\x29\xf4\x8c\x57\xa0\xbe\x43\x32\x93\x9c\xf4\xba\xc5\xf1\xfa\x1e\x2a\x56\x3d\x31\x78\x6e\x9c\x88\x01\x39\x95\xc6\xfe\x73\x0c\x08\x12\x20\x5e\x8e\x24\xd3\xa7\xd2\xc0\x27\x5b\xcd\x05\x38\x49\xcf\x81\x07\x5c\xce\x11\x87\x8c\x1f\x38\x5e\x11\x69\x1a\x40\x05\xdd\x5a\xfb\xaa\xa3\xc0\x2f\x5c\x93\x13\x41\xa4\x72\x4b\xd4\x23\x39\xe0\x9a\x47\x92\x90\x18\x1f\xef\x6e\x92\x02\x57\x51\xe3\x78\x44\xaa\x16\x8b\x3c\x09\x61\x8e\x28\x88\xfa\xe0\x37\x10\xdd\x82\x5c\x58\x8f\x2e\x00\xd0\x54\x8a\x1a\x36\xed\x21\x89\xb7\xb9\x4a\xa6\xa6\xd0\x7c\x27\x9b\xf5\xbd\x1b\xfa\x52\xb4\xf0\xea\x51\xdd\xc2\xab\xd7\x2d\x0b\x3a\xef\x7b\x40\xaf\xd8\x56\xaf\x53\x44\x22\x6a\x7f\x25\xad\xec\x3e\xfd\x1f\xab\xe4\x01\x5b\xfe\x2f\xa9\x28\x57\x7a\x44\x0e\x89\xe6\x62\x5a\xb0\xd6\x77\x2e\xc8\x1a\x3d\xa6\x27\xb2\x20\x07\xc4\xea\x55\x73\x5a\x30\x04\x21\xa2\x82\x30\x74\xf3\x00\x02\xf5\x92\x41\x31\x20\xd7\x33\xa9\x51\x63\x0c\xa9\xf9\x3b\x57\x6c\xb1\x33\xe8\x25\x84\x44\xe2\x73\xcd\x3e\xfa\x44\xec\x34\x5d\xc9\x5a\x3b\x38\xe8\xcc\x90\x29\xb8\x03\xdf\xed\x3c\x8d\x1d\xf3\x0c\xdc\x3c\xcf\xa2\x38\xc8\x85\xe9\xde\x16\x14\x43\xeb\xdb\x16\x94\x5e\xa6\x6f\x39\x53\x06\xb0\xdc\xa3\x7b\x9a\xb4\x08\x07\xe1\xb5\x75\xd1\x4f\x00\xe6\xed\x09\x17\xa2\x07\xe6\x42\xb2\x0e\x8d\x51\x7c\x5c\x1b\xa6\xb7\x96\x13\x6e\x25\x34\xc2\x2c\x0b\xcd\x3c\xed\xca\x7f\xbf\xea\x07\x11\xbc\x1b\xd7\x7d\x31\xc7\xc9\x64\x39\xe7\x30\x42\x8c\x8d\xf1\x04\xa4\x72\xf0\x71\x37\xaa\xd7\xec\xdf\x34\x90\xea\x50\xc2\xbb\xa7\x21\x35\x49\x8e\x8a\xe9\x4a\x62\xb5\xd6\xca\x89\x71\x0a\xd8\x8c\x6a\xc8\x56\x9f\xb8\x64\xa2\xaa\x56\x95\x04\xb0\x6f\x2a\x6e\x6c\xc6\x5e\xf0\x16\x1c\xb8\x86\xc7\x17\x42\x30\xb5\xb0\x73\xed\x7e\x0f\xcd\x18\x0f\x97\x7a\x9b\x60\xaa\x45\xd4\x27\x41\xc8\xd5\x2f\xd7\x99\x4e\x5f\xe6\x83\x36\x74\x40\x75\x47\x12\x11\x3a\x6f\x17\x93\x4f\xa3\x24\x14\x6b\x11\x9a\x38\xd7\xdc\xc8\x36\xfd\x80\xf3\x87\x4d\x1d\x3a\xf7\xf3\x24\xc8\x87\xb5\x68\xd2\x5d\xfd\x99\xbd\xba\x34\x03\x3a\x49\x8c\x65\x2d\x1c\xcb\xfa\x1e\x14\x8f\x3b\x81\x76\x46\x3c\xb8\x62\x20\xcb\x6d\x84\x08\xee\x83\x4f\xec\xbc\x38\xe8\xc3\x3e\xe6\xa5\x95\x89\x0c\x99\x6e\x0a\x17\x69\xbc\x58\x2d\x59\x48\x2e\x19\xae\x28\x50\x31\xc0\x75\x5c\x3d\x95\xee\xe5\xba\x1f\x76\x58\xed\x44\xc9\x19\xc3\x9d\xaa\x0d\x35\x0c\xca\x6c\x14\x9b\x14\x08\xb7\xe6\x66\xaf\x94\x39\x9f\xb8\x6a\x85\x8b\x28\xeb\x67\x80\xe8\x9b\x0e\x24\x33\xee\x88\xd9\x99\xbc\xbe\x96\xa3\xbf\xb3\x14\xff\x6d\xe4\x66\xd6\x0b\xaf\x2e\x57\x65\xac\xce\x46\x5c\x7d\xbc\x3c\x76\xc9\x45\x6f\x27\xfe\x87\xce\xed\xb9\x1f\xeb\x88\x87\x2e\xcf\xbe\x4d\x46\xab\x7d\x57\x53\x8d\xfd\x48\x5a\xde\xf7\x70\xa0\xc8\x09\x79\xc7\x0b\xa6\x17\xda\x60\x99\x25\x2f\x51\xea\x63\x21\xaa\x34\x84\x8b\xac\xa8\x5d\xda\x1e\x9e\x01\x56\xea\x6e\xd9\x0a\xf7\xae\xc4\x35\x8f\xf5\x5a\xb8\xaf\xff\xbe\x81\x62\xbb\x2c\x27\xa1\x38\x38\xec\xa6\x5e\x56\xab\xd3\x6c\x4d\x92\x30\x1e\x5b\xb3\x31\xc9\xda\x5e\xdf\x77\x7c\xac\x18\x79\x3b\xa3\x42\xb0\x22\x6a\xf7\xe8\x92\x44\xa8\x31\x34\x9b\xe1\x99\x43\x89\x95\x77\x05\xb3\x3a\xc3\x4c\x6a\x43\x4a\x9a\xcd\xb8\x08\xcd\xa7\x44\x68\x7b\xda\x80\x02\x3f\x43\xe0\xfb\x89\xbe\xb4\x04\x24\xae\x73\x5f\xc2\x05\xa9\xf0\x1c\x3b\x69\x36\x36\x48\x15\x23\x09\x24\x1c\xf5\xd0\x78\xef\xc6\xb3\x43\x0b\x67\x2f\xa5\x60\xad\xd1\xb7\x02\xa7\x3b\xdc\x9b\x3e\xf2\xf1\xa7\x11\xd9\x61\x9f\xcc\xef\x76\x06\x64\xe7\xd3\x44\xdb\x7f\x84\x99\xe8\x9d\x11\x39\x29\x43\x4a\x12\x17\x91\xb2\xc3\xdc\x0f\xac\x82\x15\xa9\x8a\x1d\xf0\xfc\x3f\x1e\x7d\x7c\x43\x66\xf2\x9a\xe4\x92\x5c\x33\x48\x83\xb6\x76\x03\x94\xbe\x6a\x6f\x7f\x44\x33\x03\x38\x19\x99\x2c\x2b\x25\x4b\x1e\xca\x1e\xdd\x06\x48\x24\xa3\xb3\xe0\x2c\x6a\xd1\x0b\x9b\xee\x16\xb5\xb0\x9c\xf6\xd1\x35\x74\x7e\x43\xde\xbd\x25\x86\xaa\x29\x33\x76\x0c\x22\xea\x72\xcc\x54\x6a\xe3\xd7\x3e\x32\x65\xba\x37\xeb\x57\x8c\xe6\x1f\x45\x91\x1c\xcc\xec\x6b\x5f\x7b\x3a\xda\xf3\x7d\x14\x65\xea\x4d\x68\xa1\x19\xd9\xb3\x37\x1e\x5c\x2b\x6e\xd8\xfe\x88\x9c\xfb\x5f\x41\xbd\x3f\x28\xee\x13\xd9\x45\x39\xc6\x32\x19\xf7\x50\xcd\x0c\xe2\x28\x0b\xa7\x1e\x7e\xb0\xb2\x25\x59\x65\xc6\x05\x1f\x4b\x59\xb0\x44\xa0\x79\xe4\xbd\x1f\x7e\x38\x4d\xf6\x69\xb6\xf9\xbb\x79\xde\x6d\x6c\x7e\x2d\x55\x91\x5f\xf3\xdc\x55\x5a\x91\x3d\x7b\xf3\x7e\x37\x96\xef\x12\x4b\xe9\x18\x39\xe9\x2c\x5a\xae\xaf\x79\xde\xcf\xe4\x77\xd8\x2b\x40\x44\x7b\xb9\xbc\xf3\xc9\x2e\x17\x81\xf5\xe2\x39\x13\xc6\x1e\x07\x4a\x93\x3d\xf8\x45\x3a\xc6\xe7\x31\xc7\xce\x29\x30\xae\x54\x56\xe0\x8f\xb9\x68\x3a\x1b\x35\x6c\x64\x55\x1e\x2b\x1a\x7d\x34\x50\x33\x83\xcd\x08\x00\x71\x51\x9a\x19\xd1\xbc\xac\x0b\x43\x05\x93\xb5\x2e\x92\xa1\x3e\x9e\x37\x27\x4d\x0a\xf6\x09\x25\xca\xa6\xba\x2c\x36\x14\xb4\xd5\x5e\x00\xbc\x68\x3a\xc1\x2d\xeb\xbd\x49\x63\x35\x28\x4b\xf9\x41\xd0\x9b\x43\x4f\x13\xf6\x89\x65\x0e\x8c\xb5\x2a\xea\x29\x4f\xc2\x8c\xef\xa8\x1a\x77\xcb\x84\x1a\x3a\xdf\xf0\x06\x74\x72\x1c\xb8\x17\x79\xd4\x74\x44\x5b\x0e\xc8\xb8\x6f\x5c\xb3\xeb\xd0\xb4\xb8\x5b\xef\xa8\xce\x92\xf8\xc5\x1c\xd9\x98\x39\x12\xf7\x38\x8e\xc8\xca\x59\xc5\x84\x3d\x20\x04\x79\xd7\x88\x17\x9c\xe7\x8d\xb1\x89\x84\x35\xee\x49\x5f\x72\x0f\x6b\x2b\x4b\x91\x47\x71\x26\x8b\x5c\x13\xf6\xc9\x28\x6a\xcf\xc8\xd2\x9e\x86\xe1\x37\x13\x42\xc5\x62\xd4\x4d\x75\xea\x14\x27\xef\x37\x36\xde\x79\x65\xb6\xdb\xf2\xc8\x5f\x2c\x8f\xf8\xd2\x2c\x53\xcc\x74\xc0\x43\xeb\xad\xd7\xbe\x27\xa4\xbd\x5c\xad\x8f\x6f\xf8\x2f\xf1\x5b\x8f\xb6\xe0\xf2\x5c\xba\xb8\x65\x35\x13\x9a\x1b\x3e\x6f\x75\xe3\x04\x3c\x53\xaa\x75\x70\xf3\x81\x3a\xe3\x04\xa0\x6e\x41\x8d\x26\x0f\x8c\x01\x47\x3e\x21\x42\x2e\xbd\x55\x8c\x41\x11\x72\x02\x5b\xb7\x24\x0f\x1a\x12\x83\x4a\xec\x65\x4d\x05\x20\x17\xe2\xc3\x07\x00\x9a\x86\xff\x8d\xb9\x41\x76\x0e\x22\x67\x27\xcc\x42\xfa\x4c\xbb\xd9\xdb\x9c\xd8\xec\x23\x77\xbc\x2b\xd4\x4c\x9f\xa1\x99\xd3\x48\xb5\xf3\x28\x23\xdd\xbc\xf7\x6b\x46\x00\xe5\x9c\xa9\x39\x67\xd7\x07\x0e\x1b\x65\x78\xcd\xcd\x6c\xe8\xe0\xe6\x0e\xc0\xcf\x70\xf0\x1b\xf8\xa7\x13\x55\xe8\xcb\x3c\xcc\x73\x07\xdc\xe4\x9a\xe0\x21\x10\xe8\x88\xd0\x8a\x7f\xcf\x94\x35\x4b\x06\x80\x8d\x34\x20\x35\xcf\xff\xda\x61\xc4\xbe\xbb\xf9\x77\x4e\x0c\x9b\x40\xff\xc6\x24\xeb\xa0\x1d\x1a\xc1\xe7\x2c\xc5\x47\xdc\x87\xce\x50\x7c\x48\x3c\xc4\x49\xc0\x48\x4d\xb4\x2c\xe8\x1f\xe4\xd2\x05\x88\xb6\xcc\xd1\x60\xf8\xd4\x22\x51\x50\x6f\x38\x5a\x92\x53\x43\x35\x33\x5d\xa2\x76\x7d\x6d\xfa\x88\x14\x7b\x4a\xc4\xfb\xdf\x7d\x05\xa9\x40\x0c\xc0\x87\x7d\x47\x3d\x32\xfc\x8b\x33\x02\x45\xeb\x4e\x6b\xfe\xb9\x25\x4b\x97\xe9\x08\x32\x03\x0d\x38\xb0\x54\x11\xc7\xce\x2d\x83\x65\x1d\xfa\x9b\x76\xde\x82\xee\x2d\xbf\xfb\xee\xe4\xa8\x1f\xa3\xba\x79\x9e\xb7\x11\xe1\xbf\xdb\xd3\xef\x36\x06\xa4\xf0\xf0\x9f\xeb\xd8\x77\x07\x0d\xd3\xc3\x1e\x71\xf7\x6f\x62\x76\xa6\x19\x6b\xa2\xc0\x47\x5c\x5f\x6d\xca\x73\x75\x83\x90\xb6\x5c\xfa\xe6\xed\x31\x71\x9f\xde\x15\xb2\x4d\x1a\xfa\x69\xc2\xbc\xc9\x19\x35\x3e\x8d\x66\x9a\xb1\x26\xb9\x26\xe7\xfa\xea\xf9\x39\xd4\xaa\xfc\x34\x0d\xb4\xf3\x73\x0b\x72\x2f\x7b\x7d\x9c\xe0\x70\xa7\x2e\xb0\xf6\x42\xd6\xe4\xda\x35\x3c\xee\xe8\x6d\xba\xe4\xd5\x1b\x72\x2c\x74\xad\x58\x53\x71\xb8\x4c\x82\x35\x34\x1e\xdd\xf7\x04\xad\xbd\xf5\x9b\x8d\x07\xc4\xb7\x60\x2b\xe2\xf5\x79\x44\xe6\x2b\xaa\x0c\xf8\xa0\x36\xbd\xc3\x02\x21\xfe\x58\x8e\x3e\x10\x8f\xb9\xc5\x4e\x26\x1e\x9a\xa6\x9d\xa7\xcb\x75\x78\x78\x93\xc4\x0a\x1a\x58\x1f\xdb\xe8\x9d\x0c\x9a\xfa\x41\xce\xe6\x07\x3a\xa7\xaf\x07\xf0\x5a\x1e\x5a\xaf\x3d\x07\x54\x93\x9d\xd7\x3b\xe9\x23\x5f\xf0\x92\x17\x54\x15\xd8\x6a\x22\xf4\xf0\x08\xcf\xb7\x5a\xa4\x27\x04\xaa\x92\x5e\xed\x90\x3d\xa9\x80\xa2\x8c\x0a\x52\x30\xdf\x96\xc2\x09\xf4\x05\x7a\x3e\xf6\x9f\xfd\x4e\xde\x8e\xac\x0f\x3c\x5f\x37\xbe\x09\x73\x6f\x93\x38\xbd\x37\x8e\x3a\x9d\x1d\x35\x2a\x1c\x17\x56\xaf\x1b\x91\xef\x9c\x76\xe5\xf4\x63\xe4\x5a\xbb\x18\xfe\x8e\xcf\x83\x3b\x3e\x27\xa7\xfa\x92\x7b\xfc\x51\xdd\xdc\xe4\x66\xbe\xd0\x67\xc2\x11\xa9\xae\xfb\x29\x37\xe7\xac\x92\x1b\xb3\xd5\x70\xf8\xa5\x14\x03\x6e\xec\x07\x52\x73\x23\xd5\x82\x50\x43\x28\x9e\x0c\x59\x5d\x50\x45\x14\xc3\x64\x81\xb4\x95\x3b\x3a\x3e\x3b\x3f\x7e\x7b\x78\x79\x7c\xf4\x86\x7c\xe3\x46\xe7\xb1\x67\x61\x44\x2e\x65\x93\x91\x10\x43\xc3\x61\xe5\x56\x43\xdf\xc0\x9d\xc6\x89\x11\x93\x63\x7b\x5e\x1d\x71\x85\x2d\xd6\xa9\x20\x27\x82\x9b\xb7\x61\x30\x44\xa9\x29\xa4\x70\xf5\x07\x76\x44\x97\x14\x31\xe5\xc6\x75\x2e\x45\x02\xec\xd7\xfe\x69\x49\xa4\x34\x4d\xde\x65\xbe\xab\x9b\x37\x7e\x86\x99\x16\x0d\xe3\x6c\xc2\xa7\xc7\x15\x60\xaf\x6c\x5c\xba\x06\x42\x02\xf6\x3e\x66\xeb\x35\x9f\x77\x53\x1c\x21\xeb\x40\xc8\x10\x2a\x23\x52\x11\x6d\xa8\x32\xb8\x47\x76\x47\xa3\xdd\x11\xa8\xb2\xbb\xa3\x5d\x6f\x0f\x16\xa1\x5a\xd2\x69\x7b\x0d\x31\xbe\x5a\xac\x4b\x3d\x7b\x5b\x6a\x8c\x08\xf9\xe8\xc1\x14\xa1\x4b\xe0\x52\xc1\x66\xa8\xc5\x2c\x8a\xf0\x0e\xd0\xcb\xa2\x2d\x7b\x3a\xc4\xa5\x20\xba\x56\x8f\xe3\x97\x74\x75\x9f\x53\x3e\x77\x4d\xb6\x36\x96\xf4\xd0\xbc\x62\x2f\x9c\x1a\xcf\x98\x73\x62\x9e\xbf\xdf\xdc\xbb\xa1\xe8\xee\xe9\xcd\xdc\x39\xe0\xde\x2b\x93\x65\xc9\x0d\x99\x51\x3d\x0b\x1d\x4f\x9a\x0a\xcc\x6e\x47\x53\x57\x07\x6c\x51\x6b\xc3\xd4\x24\x49\x76\xf5\x72\x98\x7b\x02\x96\x1c\xae\xe1\x63\x07\xf5\x2a\x1a\x8f\x10\x1c\x72\x7a\x46\x15\xb3\x77\x56\x70\xfa\x14\x7c\xc2\x0c\x4f\xdd\x1c\x2b\xb4\x32\xe6\xac\x5c\xdf\x62\xc1\x69\x60\x07\x81\xde\x83\xf3\xe3\xc3\xa3\x0f\xc7\xa3\x32\x25\xac\xb0\xe1\xf3\x8e\x89\xbc\x92\x3c\x15\xe5\x7e\x48\x2a\x6a\x52\x7a\x49\x76\x3d\x29\x03\xd9\x9b\x3e\x29\x03\x21\x7e\x87\xfb\x0f\xd0\xd6\x04\x06\x75\x5d\x2f\x22\x4e\x36\xb2\x92\x85\x9c\x76\x68\x44\xd8\x8d\x4f\x7f\x83\x35\xf2\x43\x3a\xac\xe4\xc6\x62\x61\x96\x75\x36\xbd\x7c\x96\x06\xbf\x72\xcd\xf2\x04\x77\x92\xe9\x80\xf3\xf4\x19\xac\xd0\xb3\x30\xf6\x6f\x2c\x1b\xfa\xe9\xe1\xb0\x60\x39\xaa\x4d\xf6\x01\x43\x40\x1d\xaa\x98\x2a\x39\x22\x23\x6d\xab\x17\x60\x23\x5c\x92\xea\x00\xb0\xc7\xf0\x59\xe2\x46\xee\x83\x3d\xfc\xf8\x6d\x9d\xa1\x52\x6c\x08\xf0\x03\xd6\xdc\x9d\xf0\x02\xa0\x54\x1a\x55\x3a\x52\x21\x92\x06\xf5\x81\x59\x1f\xf9\xc5\x27\x17\x8b\xe5\x00\x6d\x63\x08\x87\x00\x3c\x36\xfc\x2c\x8a\xb4\xaa\x12\x40\xa3\xb1\x7a\xa3\x8b\xc1\xd0\x29\xbc\xb0\x54\x2e\x05\xa9\x52\x7c\xce\x0b\x36\xb5\x24\xcc\xb8\x98\xea\xa6\xf7\x8c\x03\x1a\x49\x1a\x16\x50\x72\x58\xa3\x76\x85\x7c\x9b\x0f\xf6\xaf\x06\x96\x1d\xb7\xe6\xe9\xc7\x4b\x22\x18\x92\x90\xb8\xc9\x3a\xfa\xc6\x2c\x91\x89\x8a\x09\x21\xc3\x61\x1a\x27\x5e\x7e\x3c\xfa\xb8\xf7\x4f\x29\x98\xce\x8b\x7d\xf2\x03\x73\x73\x00\xb8\x2e\x46\xf1\xcc\x90\xeb\x99\x84\xe0\x43\xad\xdd\x3c\x36\x1c\x09\xd2\x0a\xab\x9b\xdc\x5d\x07\xf6\x4e\x21\x13\x19\x14\x34\xe5\xd6\x18\xdc\xaa\xc8\x9a\x34\x39\xc6\xcf\xd0\x39\xb3\x21\x65\x73\x6b\x14\x15\x9f\xd5\xb3\x4a\x90\x75\x8a\x18\x62\x70\x0e\x55\x21\x4a\xf4\xa2\x2c\xb8\xb8\x82\x56\x16\xee\xb0\x75\x6d\xe1\x18\xb1\x5f\x78\xf1\xa6\x18\x2d\xfa\x57\x92\x9e\x6c\xa3\xf7\xa0\x20\x99\x2d\xc8\xe5\x80\x9c\x09\x7b\x26\xfc\xcd\x1f\x85\x18\xea\xe8\x45\xbb\xd9\xd9\xf9\x35\x2e\x2d\xd7\x99\xe6\x9b\xd2\x68\x60\xf0\x96\x3a\x23\xc8\xc9\xc5\xdb\x8b\x93\xcf\x31\xed\xec\x36\x5d\x17\x26\xe1\x39\xfb\x55\xf8\xcf\x69\xae\xdf\x21\x29\xea\xd4\x5f\xa2\x93\xfe\x4c\x2a\x43\x8b\x0d\x1c\x93\xd9\x8c\x56\x87\xb5\x99\x1d\x71\x0d\x3d\x19\xfb\x31\x1b\x6f\x3c\x35\xc2\x7a\x62\xa0\xf4\xba\x64\x31\xc2\xfd\x26\x71\xf7\xbd\xfd\xdb\xe1\x19\xa1\xb5\x65\x61\xc3\x33\xa8\xa0\xd9\x88\x89\x44\xa2\xb9\xb9\x40\x54\xde\x5e\x67\xc6\x3d\xf3\x9e\x79\xf1\x77\x6d\xd3\xac\x6c\x5b\x32\xe4\xaa\x6c\xc4\x97\x84\xc8\x67\x95\x10\x09\x07\xc7\xaf\x3c\x09\x92\x0b\x6e\x38\x35\x52\x6d\x43\x0e\x56\x8b\x98\x10\x06\xab\xb5\x91\xa5\x93\x4c\x27\xfe\x0e\xa8\x1c\xe9\x64\xc7\xdc\x18\xac\x89\xad\x81\x1f\x10\xb8\xe3\x44\x18\xa6\x26\x34\x63\x4b\x50\x21\x03\x22\xd8\xb5\xa3\x89\xfb\x7b\x92\xa9\xf9\xb3\x0b\x99\x57\x70\x1c\xff\xe5\xcd\x9f\xa3\x8c\xcb\xbf\x84\x88\xb5\xc3\xaa\x0d\xb1\xc0\x4c\x0a\xc1\x32\xb3\xa9\x18\xa0\xbd\xf8\xcf\xfd\x1c\x4f\xfc\x67\xb1\x94\x3d\x80\x53\xfb\x1f\x35\x2d\x70\x49\xba\x2c\x77\xf7\xd7\x6c\xb1\xc2\xc6\x77\x49\x9b\x31\xdd\xbc\x05\x2e\xc4\x9a\x2a\x38\x20\x6a\xcd\xc0\x24\xc0\xc9\x34\x8a\x0a\x6d\x59\xac\x1f\x67\xf6\xae\xcb\x16\xde\x25\x7b\x26\xab\x92\x93\x61\xb7\x06\x60\xad\xa8\x45\x6c\x49\xe1\x9c\x5d\x22\x37\xbe\x0f\x00\x6b\xdd\x5e\x73\xe3\xa9\xb6\x20\x60\x36\x1e\x08\x75\x64\x04\xd6\x8d\xa7\x1a\x4d\x12\xf2\x9e\x6b\x83\xe0\x1e\x78\x33\xb4\xb2\x40\xe4\x27\x6b\xe3\x9e\x11\xa9\x08\xaf\xfe\x9b\xe6\xb9\x7a\x83\x9a\xab\xf3\x4c\x49\x95\x5e\x5b\xce\xb5\xf3\x8d\x43\x59\xb9\xcf\x86\xdf\x33\x8b\x8a\x67\xb4\x28\x16\xe4\xf2\xed\x19\x8c\xa0\xc9\x9f\xfe\xf0\x0a\x8c\xde\xaf\xbe\xfc\xc3\xab\x8e\xbc\xff\x5c\x81\xa3\xc8\x73\x89\xfa\x3d\x83\x14\xdf\x6d\x03\xc5\x68\x41\x58\x40\xd7\x01\x6b\x0a\x5e\x20\x82\x83\x55\x40\xdc\x91\x82\x7b\xd6\x6e\x84\xa0\x4e\xf5\x69\x30\xbe\x60\x25\x44\xd7\x0b\x56\xc2\xaf\x04\x2b\x81\x04\x74\x4d\x3c\x0c\x37\x2d\x5c\x63\x5a\x00\xb3\xfc\xe6\x79\x8d\x47\xf5\xd9\xe7\x7e\x54\x27\x32\x49\xaa\x14\xe9\x63\x01\xe3\x32\xa6\x2e\x28\x79\x0d\xf8\xdb\xd1\xe9\xc5\x7f\xbf\x3f\xfc\xfa\xf8\x3d\xcc\xaa\xab\x96\xb2\xa2\xc0\xb9\x3c\x9e\xaa\xd4\xfc\x51\xc5\x51\xb7\xf5\xde\x5c\x62\xac\x58\x4a\x89\x15\xe4\xf4\xdd\xc5\x9a\xd9\xb0\x9b\x48\xc3\x10\x93\xf4\x55\x7a\x6e\x39\x06\xf6\xa7\x9a\xa9\xcd\xa0\x74\x6e\x4d\x82\x82\x8f\x49\xb2\x4f\x6d\x6f\xb5\xe5\x57\x9c\x9d\x8d\x39\x86\xd3\x98\x91\xfc\x6a\x0c\x2a\xbb\x44\xb8\x6c\xcf\x3e\x81\xf2\x29\xd9\xa2\x9b\x79\xa7\xfa\x02\xd7\xed\x04\x78\xa8\x22\x5c\x5e\x7b\x90\xa0\x7a\xa1\xac\x9a\x67\x15\x3c\xa6\xb5\x57\x36\x7e\xbd\xfb\xb8\x5a\xd5\xc9\x6b\x53\x0a\xc1\x4a\x62\x5c\x6f\x2f\xdf\xb2\x2c\xca\x86\x6d\xc1\x55\xa6\xa5\x88\xdc\xd2\x13\x0e\x95\x0f\x4d\x5d\x5c\x43\x57\x34\xeb\xaf\xee\x26\xb1\xc9\xd7\x72\x9f\x38\xe8\x1e\xf4\x0c\x15\x11\xa0\x7b\x43\x28\x45\x61\xec\x4d\x0b\xa7\x40\xc8\x32\x6e\x38\x5d\x87\x25\x09\xd5\xde\x8a\x71\x25\xd0\x3d\x00\x8c\x6f\x25\xcf\x92\xcf\x52\x5f\xf9\xe1\x89\x7d\xbf\x9b\xf4\xfb\x56\x33\x69\xa4\xe8\x19\x0a\x6f\xd5\x43\xdb\x67\xc4\x19\xdc\xf1\xb6\x69\xa9\xd9\xb0\x24\x02\xa0\x84\x34\x43\x2a\xf2\xa0\x1b\x4a\xe1\x93\x07\xdb\xb9\x83\xcf\x4f\xda\x56\xf9\xc9\xd1\x06\x04\xed\x73\xc8\x80\xfa\x4c\x9b\x0c\x3c\x51\x46\x53\xf7\x32\xc9\xbc\x27\xac\x50\xfb\x20\xbf\xc6\x27\x47\xce\x56\xf7\x40\xa0\xda\x49\x00\x72\xbb\x08\xd8\x88\xda\x2d\x95\xb9\x96\xaa\xaf\x66\x36\xed\xc7\x2d\xd5\x8c\xb9\xef\x6e\x20\x0e\x7f\x9e\x02\x0f\xdf\xf2\xd7\x2c\xf4\x2e\x40\xe8\x45\x3c\x70\x97\xf0\xfb\x1c\x64\xdf\xf3\x91\x79\x5b\xa7\x81\xbe\x74\xeb\x68\x5d\x5e\x78\xf4\xb2\x3e\xfe\x61\x2e\xec\x64\x79\xb3\x39\x95\x28\x04\x20\x23\xb9\xbc\x91\x53\x48\xc9\x7f\x42\x37\xf5\xee\x07\x90\x7f\x12\x66\xf9\x40\xda\x05\x2d\x0a\xbb\xb2\x52\x34\xed\xd0\xb4\xef\x77\x31\x20\x99\x14\x13\x3e\x2d\x69\xa5\x07\x70\x12\xe5\xf2\x5a\x5c\x53\x95\x93\xc3\xb3\x93\xa7\x3f\x75\x3a\x23\x5c\xe1\x3e\xea\xd2\x4d\xbc\x37\x8c\xab\x86\x14\x28\x90\x76\x5d\xf2\x19\x19\x73\xa3\xb1\xd2\x1a\xea\x9e\x4d\xec\xf2\xb6\x0a\x40\xc8\xd9\xb5\xf2\xdc\xca\x6e\xf7\xa4\x1e\xf4\x63\x41\x64\x66\x68\x41\xe6\xd0\x58\x7c\xcc\xcc\x35\x63\x82\xbc\x7a\xf5\x0a\xa3\xdd\xaf\xfe\xf8\xc7\x3f\x12\xcb\x31\x24\x67\x19\x2f\x6f\xde\x08\x77\xfd\xfe\xf5\xeb\x74\x52\xfe\xf3\xf0\xc3\x7b\x42\x33\xf0\x58\x60\x3f\x45\xa4\x08\x58\x2f\x1e\x54\x0f\xc8\xff\xbb\xf8\x78\xda\x34\xb9\x6f\x7f\x0b\x9c\x1d\xa6\xb3\x83\x45\x1e\x95\x2f\xc7\xf1\x68\x6a\x66\xb0\x6a\x42\x1a\x42\x27\x13\xdc\x53\x70\x8e\x72\xed\xe5\x65\x87\xb2\x0c\xe8\xa4\xc3\xa7\x33\x58\x16\x2e\x60\x17\x16\x50\xc3\xcd\xed\x94\x40\x96\x82\x6f\xbc\x85\x25\xf6\x40\x43\x50\x21\x92\x47\xb6\x53\x36\x20\x05\xbf\x62\x64\xa2\xbf\x51\xb2\xae\x06\xbe\x10\xcf\x4a\x87\xba\x30\x50\x42\x3e\x66\x8e\x88\x86\x63\x35\xeb\xd8\x04\x6d\xd3\x89\xac\x4e\xf4\xf5\x93\xeb\xe6\xc4\xa8\x33\x77\x0a\x6e\x35\xab\x49\x00\x76\x41\x29\x6c\x57\xef\xb9\x66\x79\xb6\xde\xf6\x2c\xbc\x0f\x32\x23\xf6\x80\x8a\x0e\x1b\x5a\x48\x31\x8d\x79\xb7\xd1\x3d\x7d\x61\xd3\xa2\xea\x90\xe2\xd5\x43\x66\x5f\x3f\xb9\x7d\x84\x64\x88\x92\x72\xa9\x6a\x6d\xbe\xae\x45\x5e\x74\xca\xf5\xeb\x37\xdb\x8f\x90\xb7\x37\xa8\x43\x60\x0e\x97\xb0\x01\x01\x9a\x2c\x63\x1a\xd9\xf6\x1f\x23\xab\x8a\x8f\x4c\x73\xf7\x3f\x30\x65\xae\x23\x15\x72\xb2\x8a\x10\x97\x65\x63\xc5\x1d\x15\x84\xd6\x46\x0e\xeb\x2a\xa7\x01\x43\x65\xf4\x7f\xfe\x4f\xc7\x71\x0f\x8b\x6a\x46\x07\x64\x4a\x23\xa3\xe7\x26\x21\x11\x37\x4f\x18\x35\xb5\x62\xf0\x8b\xee\xc3\xdf\xf1\xce\x56\xa6\xba\xfc\x36\x68\x2a\x5c\x84\x03\x45\xd0\x92\x0d\xec\xa1\x8b\xf4\x76\x24\x61\xa9\xb1\xb1\xe6\x53\xc1\x14\x06\x35\xac\x94\xa7\xa4\xa0\x63\x56\x38\x02\xa4\xea\xfe\xce\xdf\xa2\xb7\xc2\xea\x30\x56\x42\x6b\x42\xa7\x53\xc5\xb4\xe6\x73\x7b\x76\xaa\x92\x16\xfc\x5f\x4d\x9f\xe5\x19\x23\x67\xc7\x1f\x00\xd1\x05\x2c\x62\x6b\xde\x18\x96\x0e\x62\x89\x57\x80\x87\xb5\x1c\xde\x58\xc1\x23\x42\x8e\xb5\x34\xd0\x0e\xd8\x8e\xea\x16\x5b\x13\x5d\x67\x33\x42\x35\x96\xbf\x0c\xc7\x85\xcc\xd2\xdb\x1a\xe0\x95\xc9\xb2\x64\x1e\x60\x05\x1e\x48\x66\x8c\xe6\x4c\x61\x43\x39\x6b\x16\x54\x15\xcb\x47\x84\xbc\xb5\x12\x68\xc2\x33\x6a\x18\x7e\x97\xb3\xbc\xb6\x46\x33\x60\xfb\x76\x24\xe3\x72\xc6\x88\x54\x39\xb3\x46\x88\x9d\xef\x2c\x1e\x2c\xd2\x6e\x00\xb1\x88\xdb\xf1\xc7\xdc\x28\xaa\x16\xa8\x03\xb8\xb5\xec\x48\x84\x3d\x1c\xb2\x19\x15\x53\x54\x79\x81\x1e\x22\xa1\x01\x6f\x32\x6a\xa2\xbf\x7a\x39\x07\x48\x67\xef\x56\x73\x75\xc8\xe7\xf2\x57\x3f\xc7\x92\xbd\x60\x6f\x5f\xb8\xad\xdd\xf5\x61\x7d\x9f\x4c\xf6\x42\xda\xc0\x20\xbd\x29\x2b\xb5\xd7\x2d\x4c\x36\x43\x35\x7b\x49\x56\x11\x82\x1e\x10\xda\x2d\x55\x1c\x2f\x86\xfa\x34\xf7\x32\x32\x14\x74\x32\x33\xb2\x06\x93\xa9\x69\x51\x2c\x86\xec\x93\x3d\xef\xad\x30\x03\xe5\x06\x40\x71\xa1\x12\xb4\x16\x9a\x99\x41\x0f\x84\x80\x10\xaa\x14\x33\xd8\x42\x6c\x07\xdf\x5f\x48\xc0\xd7\xda\xc1\xc1\xac\x91\x38\xae\x0d\xb6\x90\x18\xac\xfe\x49\x1f\x73\x32\x67\x6a\xe1\xc6\xed\xfc\xb8\xde\xb6\x2a\xe9\x75\x8f\x10\x90\x50\x26\x9b\x1d\x7f\xaa\x14\x42\x16\xf4\xf2\xcc\xa5\xed\xb2\x3c\x04\x02\x1f\x79\x33\xa1\xcd\xd8\x5e\x18\xc1\x09\x82\x49\xf1\xf1\x27\x70\x4a\x1c\x9e\x1e\x75\x3f\x1e\xf0\xea\x6e\x5a\xb4\xaf\x8e\x86\x46\xfb\xea\x5f\xe6\xe0\x75\x78\xc7\x9c\x3b\x50\x2a\xff\x0d\x02\xdb\xfb\x8e\xb1\xde\x17\x41\xc9\x15\x73\xc7\x24\x15\xce\x89\xee\x6e\xee\x8d\x48\xc5\x0a\x38\xa9\xed\xb1\x79\xc5\x16\x30\x18\x8e\xdf\xcf\xca\xf7\xbc\x29\xf1\xea\xeb\x24\x6d\xae\xa1\x7d\xf9\x1e\x9f\xe6\x17\xab\xa7\x47\xf6\x2b\x8b\xf0\xba\x62\xc9\xa1\x88\x55\x57\x6b\x17\x59\x4e\xf2\x6e\x0a\xd8\x03\xf6\x83\x80\x05\x12\xd8\x9e\x02\x02\xbe\x26\x46\xf6\xc5\x6c\xa4\x9f\x3a\xa9\x9b\x97\x5f\xd0\x47\x9b\xb2\x1e\x05\x0f\x89\xe8\x6d\xc7\x83\xaf\xd8\x62\x57\xe3\x9e\xb7\x27\xc4\x8c\x57\xd8\x7b\xd6\x1e\xf6\x72\xd2\xf3\xc6\xc7\xeb\x7b\x5a\xf0\x3c\x90\x83\x27\xcb\x89\x18\x90\x53\x69\xec\x3f\xc7\x9f\xb8\x76\x36\xcc\x91\x64\xfa\x54\x1a\xf8\x64\xeb\xf9\x01\xa7\xea\xb9\x70\x83\xf3\x5f\x73\x28\xb4\x81\x63\x18\x2c\x75\x98\x12\xbf\xea\x1e\x33\x31\x70\x0e\xd7\xe4\x04\xba\x58\xe0\x52\xf5\x4a\x10\x54\x79\x21\x51\x48\x4e\xe9\xc2\x05\x42\x8a\x21\xa8\x9c\x2b\xe9\x71\xdc\x22\x55\x8b\x59\x9e\x88\x34\x47\x16\xf8\xd1\xf1\x1b\x68\x9b\x5f\x15\x34\x63\x39\xc9\x6b\x98\x4c\x6a\x67\x95\x1a\x36\x4d\xac\xa7\xbc\xed\x2a\x99\x9a\x42\x88\x20\xeb\x80\x4c\x79\xf3\xea\x5b\x31\xc3\xab\x57\xf5\x0c\xaf\x9e\x37\x31\xe8\xca\xef\xed\xd1\xf4\x18\x9a\x78\x6f\xbb\x37\x22\x13\x35\xc6\x92\x56\x76\xe7\xfe\x8f\x55\x0c\x81\x49\xff\x97\x54\x94\x2b\x3d\x22\x87\x44\x73\x31\x2d\x58\xeb\x3b\xe7\x7b\x89\x1e\xd3\x1b\x61\x15\xd4\x44\xfd\x5c\xf3\x39\x2d\x18\xe2\x86\x51\x41\x58\x81\xea\xad\x9c\xdc\x30\x47\x06\xe4\x7a\x26\x35\x6a\x99\xe0\xf0\x85\x1e\x86\x57\x6c\xb1\x33\xe8\xc1\x09\xe9\xaf\x58\x5a\xec\x9c\x88\x9d\x26\xd2\xd4\xda\xd3\x41\xd7\x86\xfa\x9f\x1d\xf8\x6e\xe7\xa9\xec\xa0\x1e\x75\x61\x9a\xe7\xd0\x1c\x92\x16\x67\xbd\xab\x88\xbd\x6e\xb9\xfe\x2b\xcf\x9b\xab\x2b\xf8\x01\x5e\x8f\xe7\x7a\xf2\x3b\x73\x85\xaf\x7e\xbc\x70\xdc\xe0\xdd\x3c\x37\xbd\x40\x3d\x10\x02\x7e\xa4\xc8\xe7\x64\xb7\x44\xcb\x71\xd7\x97\xeb\xa5\x17\x66\xc1\x18\x74\x3a\x9c\x40\x73\xf5\xbf\xa4\x56\x27\x51\x35\x1b\x90\x5c\x8a\x5d\xe3\xdc\xee\x95\xcc\xb1\xd3\x57\x5d\x79\xcc\x80\x50\x9e\x94\xaf\x58\xf5\x3d\xbd\xdf\x03\x29\x54\x31\x4b\x02\x9d\x53\x5e\xd0\x71\xe1\x7d\x84\x50\x0a\x82\x01\x1e\x00\xba\xf5\x05\x26\xab\x08\x21\xbc\x8f\xf3\xc0\xa1\xf0\x43\xda\x82\x91\x04\x7a\x14\xc4\xc4\x34\x8c\x17\x91\xd4\x0e\x1a\xf5\x40\xc5\x5d\xec\x0d\x67\xa7\xa3\xd2\x48\xe7\xee\xfd\x17\x53\xb2\x87\x71\x57\x38\x95\xfb\xda\x4d\x5d\xb2\xd9\x9a\xab\x4b\x21\x75\x73\xb5\xb6\xd2\x39\x18\x90\x73\x97\xb2\x02\x78\x91\x11\x9e\xa8\x92\xc8\x08\x90\x47\x08\x5f\x8c\x61\x5e\xb6\x4a\xc8\x34\xec\xb2\x8d\x62\x66\xcd\xa0\x45\x14\x72\xed\x43\x4f\xb9\x27\x12\x71\xe9\xba\x80\x60\x9b\x8e\x09\x50\xe9\xa3\xcb\x8f\xb3\xa1\x02\xb4\x64\x2d\x10\x65\x11\x33\xb7\xfa\x0b\x62\xf6\xc6\x5a\x98\xd9\xf8\x81\x56\x3d\x26\x68\x84\x67\x42\x5d\x9e\x2a\x51\x68\xd2\xb1\xac\x8d\xc7\xd7\x74\xdf\xe7\xd4\x50\xbb\xf3\x5c\x92\xcc\x76\x84\x3d\xfb\xf3\x5d\xf6\x64\x56\xf6\xbf\x5d\x31\xef\xb5\x9d\x67\x3e\x20\x8c\x66\x33\x6b\xed\x0c\x31\xa1\xd1\xda\x69\xde\x20\x3b\xb2\x0b\x85\x46\x90\x5c\x56\x18\xfa\xd8\x42\x81\x23\xfc\xc6\x89\x72\x74\x7d\xe2\x82\x2f\x09\xd1\x2e\x8d\xdf\x99\x67\xa2\x29\x4c\xed\x81\x12\x1f\x52\x70\xf2\xc2\x3b\x85\x61\x46\xc0\xc3\xb3\xd4\x83\xb4\xe0\xda\x12\x79\xc5\x16\x61\xd3\xf7\x40\xc5\x8a\xb7\x6f\x40\x74\xed\x19\xe6\xf2\x90\x6b\x71\x63\x7c\xab\xd4\xf4\x44\x03\x78\x61\xe1\xa5\xa9\x77\x90\x47\x50\xbe\x33\x9e\x41\xab\x12\x3b\xa0\xbb\xd7\x73\x4b\x58\xce\x3e\x1c\x5d\xd1\xd2\x6b\x66\x35\x56\x78\x4d\x00\x83\xb6\xef\xcf\xb4\x26\x1c\xd6\xa9\xa4\xea\x8a\xe5\x41\x1b\x1f\x91\x33\x3b\x51\xde\x1b\xd6\x03\x25\xca\x6b\x11\x50\x8c\x44\x17\xad\xe6\xb9\x96\xcc\xdd\xd1\x68\xd7\x35\x89\xb9\xd9\x4a\xb7\x27\x89\xdf\x8f\xeb\xab\x37\x87\x57\x4b\x36\x7d\xa0\x95\x46\x87\xa2\x55\xa3\x21\x84\x22\xa1\xef\xb7\x99\xf9\xcc\x1a\xda\xb9\xe0\xbb\xb9\x7a\x76\x4e\xf4\x1b\xa4\xeb\x2f\x40\xd7\x43\xfa\x0c\x5e\x7d\x07\xe5\x7a\x0c\xc8\xdd\x16\x8c\x73\x3c\xe4\xe4\x61\xbf\x11\xde\x1e\x03\x2c\x65\x87\x52\x8a\xe5\xeb\xb1\xc2\x2a\x90\xa4\xce\x35\xf9\xe8\xbd\x15\x0f\x2b\xb4\x00\x7d\x1d\x33\x4f\xfb\xa2\x64\x8b\x2a\x2d\x96\xaf\x6d\xab\xbc\x58\xbe\x4e\x26\x70\xe8\xac\x6e\x84\x1e\x17\xd3\x04\x03\x44\xf7\xe5\x0a\x26\x1b\x2d\xc9\x58\xbe\x36\x52\xa2\xb1\x7c\xf5\x51\xb2\xb1\x7c\x75\x2f\xe1\x58\xbe\xfa\xf1\xa7\xe0\xf5\x58\xc2\x29\x6e\x01\xac\x5a\xce\x1a\x67\x6e\x80\xc2\x0f\xae\xb0\x2a\x3a\x18\x7a\x94\x49\x4e\x9d\x43\xb1\x44\xc7\x5a\x16\xb5\xe9\xda\x7d\xf8\xb6\x41\x62\x9d\x11\x5e\xd2\x47\xa1\xfa\x51\x14\x97\x87\x8b\x34\x51\xb0\x24\x50\x3d\xeb\x73\xac\x1e\x0f\xd4\x6d\x8d\x8d\xf4\x0f\x12\x8d\xd7\x36\x61\xb3\x2e\x5f\x4f\x0d\x18\x8d\xd7\xf6\x47\x66\xfc\x63\xdd\x39\xbc\x08\xdd\xbe\x5a\xc6\x2f\xc0\x33\x1b\x8d\xb6\xb9\xcf\xc9\xc0\xfe\x60\xdd\x7d\x26\xfd\x39\xdc\x1f\x2b\xd0\xe9\x6b\xa4\x0f\xcf\x4e\x7a\xf4\x2d\x46\x4f\xbd\xc5\xbb\x18\xdf\xf1\xe2\x5f\x7c\xc8\xd5\x9a\xe0\x13\x74\x0d\xc6\x99\xd8\x47\xcd\x8c\x3a\xcc\x96\x5e\x54\xb9\xed\xf7\x67\xdc\x78\xf1\x77\x56\x0b\x89\x7b\xd9\x44\x1c\x68\xa4\x2b\x4a\x6f\xf4\x15\x77\xce\xfb\x8e\x64\x58\x79\xd5\xbd\x72\x90\x6c\xbf\xef\x63\x4b\x3d\x16\x30\xfb\x1d\x5a\x79\x2c\x5f\x2d\x6e\xd9\x3d\xf7\x93\xe8\xc2\x61\xe8\xa8\x8e\x7c\xe6\x95\xcc\xdf\x60\x02\x0f\x15\x42\x1a\xcc\x69\x1d\x60\xe8\x57\x0f\x9a\x0a\xc4\x08\x33\x51\x45\x10\x35\xa3\xdd\x5f\x57\x86\x3b\xcc\xdd\x59\x3f\x9c\x44\x1e\x29\x29\xbd\xd1\x81\x1e\x2d\xb5\xd6\x3d\xdf\x33\x91\xce\x66\xac\xa4\xf0\x9f\xef\xfc\x04\x59\x79\xed\xca\x44\xc1\x07\xcf\x54\xa9\x89\x9c\x0c\x5a\x90\x39\x3b\xf3\xd7\x3d\x94\x2c\x35\xd7\xa3\xa4\x29\x87\x35\x7f\xb4\xe9\x3c\x6b\x59\x95\x76\x77\x82\xe3\x0b\xe2\xd7\x1e\xb8\x34\x44\x39\xac\x12\x31\xc7\xf9\xdf\xf2\xa9\x7b\xcc\x7c\x35\xbc\x9e\x83\x93\x33\xd5\xb9\x39\x08\x0a\x7a\xdb\x29\xd9\x1b\x61\x2f\xce\xcd\xfb\xaf\x17\xe7\xa6\xbb\x5e\x9c\x9b\x0f\xbe\x1e\xcd\xb9\x19\x69\x73\xfe\x84\x5d\xe1\x9d\x8c\x9b\x00\x79\x17\x65\xd3\x51\x76\x84\xa1\x0e\xef\x57\xf4\x4e\x45\xa9\xda\x51\xe3\xdd\xd1\x68\x17\xe3\xc6\xa3\x10\x1b\xa9\xcd\x64\xf8\x27\xc2\x44\x26\x73\xfb\x9c\x4b\x78\xbe\xd2\x06\x2c\x9d\xc6\x0f\x15\xd3\x52\xfa\xb1\xe2\xc8\x33\x3c\xbb\x5f\xbd\xb1\xc7\x63\xcb\x43\xad\xbd\x7b\x4c\xbd\xbc\xc7\xe3\xa5\xd1\xeb\x3d\xe5\x7e\x29\xdc\x82\x32\xe5\x14\xfc\x06\x44\xae\xe0\x25\x77\x05\x63\x56\x9e\x32\x6d\xfa\xaa\x69\x20\x64\x0f\x1f\x3e\xca\xaa\x7a\xe0\x06\x1a\x95\xac\x94\x6a\x31\x08\x83\xd9\x2f\x5b\xa3\xbb\x3b\xf6\xc1\xb8\xc8\x6a\xa5\x98\x30\xc5\x22\x32\x33\x7e\x5d\x56\x86\x5f\xa9\x2d\x36\x32\x02\x73\xf5\x93\xfe\xd9\x5c\x6d\x89\xf7\xd6\x0f\x83\x4e\xf8\x30\xdb\x70\xde\x3b\x94\xfc\x41\xe3\xfc\xb4\x9f\x32\x31\x27\x73\xaa\x74\x5f\x12\x86\x3c\x96\x5d\x91\xf3\x39\xd7\x8f\x58\x0d\x7b\xe1\x94\x16\x0c\x61\xc9\xda\x54\xb5\x71\xc7\x9d\x17\x11\xec\x53\x25\xad\x2a\x1a\x44\xc3\x92\x79\xf6\x7a\xa7\x47\xe2\x2a\x6a\x0c\x53\xe2\x0d\xf9\xaf\xbd\x9f\x7e\xfb\xcb\x70\xff\xaf\x7b\x7b\x3f\xbe\x1a\xfe\xfb\xdf\x7f\xbb\xf7\xd3\x08\xfe\xe3\x8b\xfd\xbf\xee\xff\xe2\xff\xf8\xed\xfe\xfe\xde\xde\x8f\xdf\x7e\xf8\xe6\xf2\xec\xf8\xef\x7c\xff\x97\x1f\x45\x5d\x5e\xe1\x5f\xbf\xec\xfd\xc8\x8e\xff\xfe\xc0\x87\xec\xef\xff\xf5\xdf\x7a\x7c\x09\x2a\x16\x1f\x7b\x3b\x13\xf0\x1a\x3e\x8a\x5e\xd3\x7e\x76\xcf\xac\xbb\x64\xdb\x71\x61\x86\x52\x0d\x71\x90\x37\x50\xdd\xd1\xdb\x50\x9e\x35\x1f\x4f\xc6\x34\x5a\x55\x38\x41\x83\xf9\xbd\xe5\x42\xe4\xb1\x2c\x6c\x44\x99\xed\x31\x46\x82\x0f\xbc\x25\x3c\xe2\xbe\x7c\x89\x8c\x3c\xe4\xfa\xfc\x33\xaf\x5d\xe7\xe9\x97\xb4\x6b\xf2\xfc\xd3\xae\x71\x2d\x5f\x72\xae\x5f\x72\xae\x5f\x72\xae\x3b\x3f\x69\x4b\x23\x98\x2f\x39\xd7\xfe\x7a\x0e\xe1\x88\x97\x9c\xeb\x07\x5c\x2f\x61\x89\x3b\xaf\x97\xb0\x44\xeb\xfa\x95\x87\x25\x5e\x72\xae\x13\x07\x79\xc9\xb9\xbe\xfd\x7a\xc9\xb9\x7e\xc9\xb9\x7e\x36\x39\xd7\xe8\x0b\x59\x95\x79\xed\x7c\x19\x4d\xda\xf5\xaf\x30\xeb\x5a\x5b\x56\xcd\xd8\x61\x96\xc9\x5a\x98\x4b\x79\xc5\x3a\x26\xa6\x2d\x79\x16\x6f\x3c\xdd\x9e\x20\xb7\x79\x1a\x6f\xde\xbc\x95\x6e\xc7\xcf\x12\xe7\x9e\xd6\x39\x67\xa2\x0f\x57\x7e\xff\x72\xdd\xd3\xe6\xb5\x0f\xab\xcd\x89\x9c\xe5\xcd\x17\x4e\xe8\x1b\xcb\x34\x23\x72\x48\x14\xcb\x78\xc5\x1d\x50\x1f\xc5\xcf\x7b\x20\x04\xe4\x83\x6b\x74\xb7\xb0\x52\x83\x15\x13\x3c\xb4\xa9\x68\x1a\xe0\xa9\xc8\xff\xe6\x34\x88\x25\x42\xfb\x70\xac\xd8\x57\x42\x7d\x1a\x04\xff\x35\xd7\x8c\xe8\x99\xac\x8b\x9c\x28\xf6\x4f\xaf\xd0\xbb\x19\xb9\x8c\x69\x88\xa3\x88\xfd\x10\x13\xbd\xba\x5b\x09\x5a\x71\xbb\x9f\xd9\x76\x21\xaf\xb1\x4f\x15\x57\x20\x77\x2e\x58\x26\x45\xbe\x95\x2e\xff\x1b\x44\x36\x4a\x37\x24\x64\x20\x16\x6b\xe8\xff\x32\xa7\x05\xcf\xb9\x59\x84\x7c\x5f\x14\xa3\x7d\x6c\x3b\x94\xc4\x61\x57\xe9\x86\xa3\x08\xad\x2a\x25\x69\x36\x63\x3a\xa2\x17\x2d\x5d\xd7\x6b\xb7\x5b\xeb\xc7\xf8\xaa\x8a\x7a\xca\x05\x9a\xcb\x30\xaa\xb5\x3c\x8a\x05\x51\xd2\xf8\xf2\x09\xf7\xd2\xcb\x24\x5f\x46\xe4\xd8\x9f\xf7\x40\x0c\x2a\xea\x46\x2d\xa0\x4a\x43\xc6\x44\xe0\xcc\xf0\x49\xfc\x87\x26\xb2\xc8\x41\xdf\xa0\x82\xfc\xe9\x15\xa9\x98\xca\x50\x2c\xf5\x12\x1c\xd2\xd0\xff\xc5\xd2\x51\x58\x6b\xcc\xaa\x32\xb7\x0f\xff\xe5\xef\xc8\x4c\xd6\x4a\x8f\x8e\x22\x01\xf0\x1a\x3e\xeb\x83\x5b\x44\xde\x24\xc5\x1a\x52\x30\xaa\x0d\x79\xfd\x8a\x94\x5c\xd4\xa6\x3f\xcc\xb8\xbe\x2c\xf9\xc8\x86\xff\xc3\xef\x3a\x3e\xed\x11\x10\xe8\x7a\x91\x24\xb1\xc5\x0e\xff\x1d\xcc\x76\x17\xad\x82\x2e\xc9\xa4\x92\x5c\x98\x65\x23\xde\x69\x5c\x7d\x9e\x56\x10\x25\xdb\xf0\x79\xf0\x73\x2d\xc7\x0b\xd3\xbd\x29\xb9\x7b\x4e\x1b\x7d\xfe\x3f\xdc\x87\x38\xad\x52\x34\x0d\xa2\xc1\xcf\xa6\x67\x54\x31\xd7\x34\x6e\x57\x93\x82\x4f\x98\xdd\xbd\x09\xa4\x6c\xb8\x0d\xb9\x62\x53\xae\x8d\x4a\x0b\x9d\x0c\xd3\x0f\x86\xae\xda\xee\x54\xc9\x3a\x19\xb8\xae\xaf\xed\x09\x44\x78\x37\x99\x0f\x96\xbb\xf6\x81\xe9\x78\x9d\x4e\xa4\x63\xa4\x17\xc7\x48\x7c\xd6\xe7\xd7\x07\x7c\xa9\xbd\x37\xec\x4a\xbf\x55\x7d\x27\x4d\x48\xc3\x86\x7d\xcb\x72\xd4\xe8\xed\xcf\x87\x90\x9b\x1b\x45\x5b\x3a\xf4\xc4\x5d\x6e\x46\xbe\xb9\x46\xe0\x7e\xfb\x6e\x7e\x81\x90\x8e\xb6\x10\x75\x58\xd2\x52\x91\xb2\x2e\x0c\xaf\x8a\x66\xb1\xce\xfd\x0f\x9c\xba\x97\xee\x3f\x6b\x0c\x34\x1a\x45\xc3\xa9\x06\x69\xfd\xa6\x92\xca\x60\x52\xcd\x5e\xa0\x81\x09\x03\xfd\x8c\xa1\xc2\x92\x55\x54\xd1\xc0\x29\x99\x2c\x4b\xda\x01\xf2\x18\x73\x34\x28\x24\x8a\xe3\x61\x6d\x55\x44\x45\x8b\x66\x86\xa2\x8c\xda\x4d\x6d\x6b\xc3\x04\x15\xc9\x69\x67\x7d\xf1\x0c\x52\x41\xe4\x75\xa8\x92\x9e\xf2\x39\x13\xcb\xfb\xd9\x99\xdd\x5f\xd3\xec\x8a\x89\x74\x3f\xde\x77\xda\xaf\x71\xbe\x10\xb4\xe4\x19\x2d\xac\x3c\x50\x72\xce\xad\x38\x60\xf9\xd2\xb8\x7a\xe0\xc2\x9f\xd8\xf4\xce\xb7\x4b\x45\x03\x66\x53\x0b\x57\x6b\x96\x9c\xc7\xdc\xd7\xb2\x59\x1a\x1e\xeb\xcc\xd3\x18\x15\x57\x7c\x9e\x31\x6f\xff\xd9\xf1\x36\x35\xdf\xf8\x7e\xbd\xcc\xb8\xe7\xe6\x48\x46\x81\x26\x19\x52\xfa\xb0\xdf\x4d\x61\xcf\xaa\x45\xe8\x71\xbf\xb4\x17\x5c\x3f\xdc\x6e\xe7\x4d\xe2\x7c\xa8\x71\x92\x92\xd9\x07\xdb\xa9\x71\xde\x3e\x58\xce\x69\x2e\x35\xf9\x1a\x10\xed\x8f\x18\xb8\x0b\xd6\x53\xd4\xd3\x66\x70\x45\xf0\x88\x7d\xa2\x65\x55\x30\x3d\xba\xfa\x13\x84\x8f\x9c\xf0\x38\x50\xe3\xfc\xe0\xfc\xf8\xf0\xe8\xc3\xf1\xa8\x4c\x11\x5a\x1b\x36\x0b\x78\x49\xa7\x69\xc6\xe2\x90\x94\x52\x70\x23\x55\xca\xe9\xd6\xd5\x2a\x98\xe8\x4b\x3b\x6f\x1b\x96\x90\x48\x85\xb7\xd6\x9b\x86\xcb\xb0\xa8\xde\x38\xf7\xda\xaa\x65\xd2\x85\xac\xc9\x35\xc5\xc6\x34\xc0\xc7\xe9\xba\xe9\x25\xaf\xde\x90\x63\xa1\x6b\xc5\x9a\x26\x76\xcb\x24\xd8\x23\x2d\x34\xa0\x77\x07\x1b\x6c\x19\xec\x48\x03\x8d\x10\xb0\x45\x74\x32\x1d\xc7\x6e\x5f\xbc\x21\x3b\xec\x93\xf9\xdd\xce\x80\xec\x7c\x9a\x68\xfb\x8f\x30\x13\xbd\x33\x22\x27\x65\x55\xf0\x8c\x9b\x62\x61\x77\x14\x53\x0a\x53\xa2\xc6\xcc\xfd\x60\x29\x51\x3a\x9d\x92\x35\x23\xbe\xda\x48\x45\xa7\xcc\x6f\xe4\xdf\xa8\x71\xba\xce\x81\x01\xdd\x99\xbc\x26\xb9\x24\xd7\x8c\x54\x8a\xcd\x99\x30\x98\x4d\xab\x49\xd4\x6d\xda\xad\x0e\xb4\x27\xc8\x64\x59\x29\x59\x72\xed\xd5\xa2\x92\x66\x33\x2e\x52\x7d\x37\x9d\x0f\x41\x90\x05\x9b\xde\x53\x40\x44\xf0\x9e\x83\xf8\xc7\x8f\xba\x35\x12\x48\x95\xe8\xbf\x99\xc9\xeb\xa1\x91\xc3\x5a\xb3\x21\x4f\x0d\x41\x76\x5e\x99\x2b\xb6\x80\x4a\xa0\x0d\xaf\x8d\x23\xa3\xe5\x9e\x34\x12\xa2\xf0\xf0\xb9\xb5\x78\xce\xbf\x3e\xfa\x4e\x77\x09\x21\x45\x5e\x91\x03\x66\xb2\x83\x8c\x55\xb3\x03\x37\xf2\xaf\x75\xfd\xfd\x49\xbb\x69\x06\xf0\x74\xa0\x76\x9b\xc9\xa2\x60\x99\x8f\x69\xbd\x65\xd5\x2c\xdc\xf0\xac\x17\xaa\x4b\x29\x40\xc7\x02\x80\xce\x9c\x52\x49\x99\x9c\x95\xd3\x17\x97\x58\x1a\xda\x12\x1c\x3e\xe9\x26\xc0\x23\xb1\xa0\xc6\xfd\x6a\x09\xcf\x48\x10\x3c\x0b\x3f\xed\xb9\xff\x52\x33\x03\x3a\x26\x17\x04\xb1\xf5\x3e\x58\x9d\x77\x1b\x1c\xb2\x5b\xc1\x07\x5d\xfc\xc1\x58\xe2\xd9\x01\x4e\xa3\x2f\x4e\x08\x84\x40\x18\x23\x4a\xe6\xa4\xb5\x99\x31\x61\x78\x86\x59\x0f\xae\x26\x35\x56\x11\xc8\xc9\x04\xfd\x72\x79\x87\xb4\x3d\x39\x67\x4a\xf1\x9c\x69\xd2\x59\x47\x88\xe3\x31\xbc\x78\xd6\xac\xd5\x29\x63\xae\x8f\x04\xb5\xae\xe9\xc6\x7d\x06\xd6\xfb\x4f\x31\xde\xce\xe4\xe2\xa7\x4e\x2b\xee\x21\xc9\xab\xff\x14\xd9\xad\xf1\x9c\xb7\x14\x20\xf8\xa4\x37\x05\x88\xe6\x25\xef\x80\x55\xb8\x05\xf2\x29\x91\x69\x74\x46\x0b\x76\xf2\xb1\xb3\x7b\xda\x3d\xa7\xed\x6b\xbe\x70\x1f\x56\x76\x93\x68\x28\x51\xf7\x61\x0f\x63\x68\x36\x73\x2d\xfe\x7c\xc0\x59\x0a\xf2\x6d\xe0\x5d\x22\x64\x9e\x96\x2f\xb5\x61\xff\xef\x94\x1a\x76\x9d\x68\xed\x0c\x9b\xc3\x3f\xf5\xf7\xe0\x0d\x7b\xf1\x1f\xaf\x74\xde\x76\xf7\x11\x87\x82\xd0\x1b\xcf\x7e\x7c\xaf\xf0\xe8\x16\x7f\x70\x1f\xf2\x0f\x9e\xb8\x91\xd8\x98\xbd\xdc\x96\xe9\x85\x79\xdc\xb3\x3c\x0b\xc0\x2a\xd0\x3c\x57\x4c\x6b\xaf\xb1\x78\xb1\x74\x78\x76\x42\xbe\xc1\xdb\x37\xf6\xea\x95\x92\x06\x3d\x3e\x47\xb2\xa4\x3c\xb9\xec\xa4\x35\x07\xcb\x0f\xf5\x93\x11\x1b\x13\x7e\x12\xce\xc2\xbd\xc4\xdd\x6c\x0d\x8a\xa6\xe1\x68\xad\x58\x4e\x9c\x67\x7f\x63\xb3\xb4\x75\x46\xfa\x0d\xb3\x99\xec\xd9\xef\x0e\xa0\x19\xf2\xfe\xa8\x31\xd8\x97\xac\xf9\x74\x37\xd6\x23\x7a\x01\x3e\x4b\xdb\x39\x4a\x0e\xf0\xa0\x34\x8d\xbd\xec\x99\x1f\x94\xc8\x50\x3c\xd2\x61\x54\xa1\x39\x64\x14\x47\x35\x5d\x60\x8c\x03\x26\x41\xc0\x9d\x41\xc3\x7c\x40\xde\xcb\x29\x17\xfe\x6c\x90\x2e\xa7\x7f\x42\xd3\x2d\xe4\x17\x13\xf5\xc6\xf5\x62\xa2\xfe\x8a\x4c\x54\xad\x8b\x63\x41\xc7\x45\x7a\x35\x62\xdb\x98\x09\x8f\x23\xef\x0a\x3a\x25\x0c\xfe\x38\xc8\xb9\xb6\xff\x92\x8b\x8b\xf7\x90\xed\x58\x0b\xef\x8a\x83\xe4\x38\xa7\x4a\x04\x7c\x4a\x3c\x18\x36\x27\x93\xf1\xcc\xfe\xd0\x01\xf0\xa5\x37\xa9\xdc\x90\x42\xb8\xc8\xa1\x99\xbb\x6e\x15\x21\xbb\x3b\x40\x38\xd3\x00\xa2\x85\x75\x7c\x63\x46\x2e\x67\x3c\xbb\x3a\x8b\x12\x0e\xa5\xb2\x9f\x89\xe8\xa3\x5e\xd4\xe0\x9e\x9e\xd9\x79\x8f\xb8\xe9\x38\xeb\x2b\xf4\x14\x3d\xcf\xeb\x82\xfe\x08\xbc\x70\x33\x0f\xdf\x51\xad\x65\xc6\x9b\x9c\x5e\x88\x49\x37\x0a\x62\x0e\x0a\xe2\xe6\x66\x05\x4c\xa8\x7e\x26\x04\x2d\xb7\x15\x7a\xb1\xe7\x44\x77\x07\xd5\xb1\x1e\xcc\x85\x9f\xb7\x8d\x4d\x02\xee\x8d\x2e\x90\xc6\x7d\xed\xea\x86\x92\xe5\x79\x0c\x3b\x78\x39\x27\xd3\x43\xee\x39\xde\x4b\x76\x56\xe0\x05\x49\x5a\x5c\xaf\xe0\x5a\xae\x83\x0c\x01\xb4\xd4\x8d\xac\x56\x3a\x42\x69\x1f\x2b\xe4\xb4\xdd\x76\x51\x01\x7e\xe6\xb2\x3b\x41\xb8\x56\xb2\xaa\x0b\x2c\xdd\x0c\x93\xd6\x5b\x86\xe7\x3a\xc9\x62\x48\xdb\xd3\xbb\xfb\xba\xea\xbd\x11\x94\xd5\xa6\x37\x64\x8c\xaa\xb5\x3e\x7c\x9a\xdf\xa3\xe0\xd8\x22\xe3\x85\x7f\x5c\x0f\xce\xb2\xcd\xa3\xa7\xf5\x85\x96\x96\xee\x98\x6c\xa1\xac\xb5\xfc\x07\xaf\xfe\xf0\xbb\xdf\x75\xd0\x5e\xb8\x62\x99\x91\x50\x95\xe3\x90\x2b\x43\x26\x19\x55\x0c\x2c\x4f\x84\x36\xf3\xae\x49\xac\xca\x30\x9d\x02\xbb\x9b\x83\x57\xdb\x08\x9c\x5a\x1f\x45\xd7\xdd\xe1\xd2\x3a\x65\x42\xf5\x96\x4d\x0a\x50\xcc\x27\x1b\x86\x62\xde\x28\x00\xf3\x26\x61\x97\x37\x07\xb6\xbc\x41\x88\xe5\x4d\x03\x2b\x6f\x04\x4e\x79\xe3\x99\x93\x4f\x0f\x98\xdc\x0b\x36\x55\x1f\xb8\x54\x5d\x21\x91\x3b\x62\x5a\xf5\x83\x67\xd5\x19\xf4\xf8\x29\xa0\x8e\x7b\x82\x35\xea\x0e\x6b\xdc\x2f\xee\xc8\xa6\x21\x8c\xb7\x48\xf5\xc6\x6b\x3b\xe1\x8a\x37\x02\x52\xbc\x69\x68\xe2\x0d\x02\x12\xf7\x07\x5e\xd4\x17\xf8\x70\x77\xd0\xa2\x7e\x05\xc7\x86\xe0\x85\x1f\x11\x54\xf8\x49\xa0\x84\x1f\x1b\x40\xb8\xf3\x31\xd5\x15\xdf\xb5\x33\xaa\xab\xee\x09\xd6\xb5\xaf\x64\x81\x6d\xf0\x60\x37\x94\xac\x8c\x04\xf8\x86\x50\xbe\x0b\xfd\xae\x8e\x7a\xcc\x1b\x69\x0f\x83\x8d\xd5\xd6\x26\xbb\x4b\x49\x67\xb7\x36\x52\x22\x93\x74\xd3\x55\x51\xa9\x8f\x17\x4b\x59\xa3\xe1\xe3\xed\x4f\x16\x7d\xc9\x9a\x7c\xc8\xb5\x8d\x59\x93\x4f\x55\x45\xff\xf9\xe5\xbe\xe5\x2f\xb9\x6f\xf1\xb5\x85\xb9\x6f\xba\xd5\x56\xd5\x47\xfd\xe0\xc0\x02\xfb\x49\x8e\xad\x26\xe6\x31\x12\x1a\x79\x7b\x78\x76\x92\x3c\x7a\xa6\x18\xc0\x1f\xd3\x42\x8f\x56\x19\x56\x3e\x29\xc6\x99\x71\xde\xa0\xa2\xc6\xb0\xb2\xea\xd0\x3f\xf9\x25\xf5\xed\xc6\xf5\x92\xfa\xf6\x2b\x4a\x7d\xdb\xe6\x7c\x90\x59\x5d\x52\x31\xb4\x87\x03\xe4\xcd\xb5\xd2\xcf\x97\x94\xbc\x11\x71\xe2\xbc\xd3\x0e\x44\x60\x42\x80\xab\xac\x05\xff\xb9\x66\x8d\x6f\x3a\x68\xee\x5b\x90\xb9\x03\x74\x6c\xcf\x72\xa1\x41\xb3\x74\x68\x64\xf2\x06\xe0\x92\x9b\xcb\xb0\x74\x5e\xce\x77\x5b\x32\x18\xbc\x15\x4a\x32\x33\x86\x36\xd7\xd9\x92\xcd\xd5\xf2\xc2\x39\x47\x1a\x2d\x0a\x79\xdd\x2d\x9e\x17\xdb\x11\x96\x45\xed\xbb\x3b\x5c\xf3\x31\x23\x25\x57\x4a\x2a\x97\x5b\x14\xbf\x3e\x16\x4a\xf0\xe9\xcc\x30\x85\x3e\x2d\x4c\xe7\x4e\x17\xb5\x17\xcc\xb8\x5d\x00\xbb\xc8\x48\x42\x05\xc2\xd6\xd9\xff\xf6\x75\xd9\x30\x35\xfe\x38\x1d\xb3\x19\x9d\x73\x59\x77\x80\x87\xb9\x40\xe5\x60\xc7\x3d\x12\x14\xdf\x85\xac\x43\xf6\x40\x0d\x68\x4a\x61\x15\xf4\x4d\x3e\x48\x1e\xfa\xb4\x79\x28\x38\x3a\x73\xe9\xc3\x87\x43\xf6\x89\x6b\x73\x73\xce\x3d\x0b\xb8\x6c\x95\x8d\x6c\xe6\xb9\xae\xac\x6a\xfb\x7d\x32\xc2\x61\x1b\xdd\x30\x7e\x5a\xdb\x12\x9e\x5f\xc0\x57\xf7\xd9\xc1\x0e\xdb\x1f\x61\x5b\x3b\x40\x5e\x6d\xb8\x70\x12\xdf\xf2\x2c\x2d\x70\xf6\xb9\x19\xe2\x2f\x46\xf8\x56\x19\xe1\x21\x81\xba\xe0\xd9\xe2\xe4\xa8\xdf\xa4\x6c\x7c\xa6\x57\x9a\x74\x48\xc8\xb6\x9f\x93\xaf\xa9\x66\x39\xf9\x40\x05\x9d\xa2\xbb\x7c\xef\xe2\xec\xeb\x0f\xfb\x96\xe1\x21\x14\x70\x72\xb4\x32\x6b\xfb\x22\x7e\xf8\xe9\xa6\x80\x4f\xc9\xf2\xd4\xf5\xa6\xa7\xde\x78\x6a\xe2\xf4\x6d\x0c\x13\x96\x04\x15\xec\xac\x43\x08\x6a\x05\x4e\xee\xd9\x72\xbb\x0b\x4c\x93\xf6\xbd\x89\xf4\xf2\xa9\x32\x2f\xf3\xab\xc7\x9c\x80\x28\xc4\x7d\xd7\x5b\x3e\x2c\xdd\xe5\x01\x29\x2d\xad\x29\xb9\x30\x8a\x1a\x36\x5d\x1c\xb1\xaa\x90\x0b\xcb\x00\x67\x51\xc4\x1d\x6f\x1d\xa3\x46\xa5\xc6\x34\x23\xaa\x2e\x00\x4d\x38\xbf\xd1\x4b\x47\x30\x96\x37\x12\x92\x0b\x6d\x68\x51\xd8\x77\x87\xe7\xdf\x49\xd1\x83\xcf\xd5\x87\x9e\xa0\x43\xa4\xf3\xde\xbb\xda\xbd\xe4\xec\x2e\xb9\xf3\x27\x0f\x3f\x43\x61\xf8\xfb\x79\x76\x9d\x14\xa6\x07\x27\x2b\xa5\x9c\xb5\x28\x0c\xce\xeb\xc2\x9e\x6d\x45\xde\xee\xbd\x87\x9a\xa7\x63\x05\xc4\x3b\x06\xd1\x61\x5f\x72\x40\xc6\xb5\x55\x4b\x99\x6e\xc5\x30\xa3\x9f\x3f\x68\x7c\x6c\xef\x77\x3d\xc3\x84\x3d\xfb\x60\x42\xab\xaa\xe0\x58\x9c\x2a\x95\xcb\x9e\x8b\xa2\x4b\x37\x6f\x7b\x88\x94\x5a\x53\x83\x5b\x4f\x63\x1b\x92\x39\x53\xe3\x87\xb8\x6c\xd6\x55\xc6\x68\xc5\x21\x0f\xe1\xc1\xba\x5b\xaa\xbe\x75\x78\x76\x82\x03\xad\x8a\xf7\xf9\x2f\x91\x21\xdc\x52\xfb\x48\x3c\xd6\x91\x38\xd7\x66\x68\x87\x70\x78\x76\x82\x5d\x46\x5c\x47\x84\xc6\xdd\x69\x0d\x37\x8a\x55\x53\x4d\xc3\x32\x3a\xb5\x4f\x34\x44\x0a\xb6\x4e\xeb\x2b\x4b\x01\x13\x75\xc9\xb0\xdb\x42\x20\x86\x70\x01\xe3\x04\x2a\x1a\xaf\xaa\x35\x8a\xad\x8d\xbc\xb3\x13\x5b\x14\x58\xd5\xaf\x22\xba\x41\xd4\xed\x7c\xd1\xba\xcb\xca\xb5\xe6\xc5\x1e\x7a\x38\xae\x9f\xae\xb8\x66\x7a\xe2\xda\xa7\xad\x90\xe2\xdc\x4d\xd5\x77\xe7\xef\x1f\x9d\xb7\x4e\xdb\xc3\x39\xb8\x7a\x06\x2d\xa5\x2a\xaa\x0c\xa7\x05\xa9\x55\xe1\x53\x7a\xb0\xf6\xdc\x55\xe1\xcc\xe8\x3c\x6a\x05\x30\x22\xe4\x0b\x64\x28\xb7\x8e\x28\x85\xc0\xad\xe5\x5a\x63\x4c\xea\xa2\x18\x90\x09\x17\xd4\x9e\x41\xac\x22\x51\x62\xc5\x83\x29\xbe\xe0\x22\xb3\x26\xbe\x18\x7a\x96\x22\x40\xb9\x37\xfc\x83\x38\x82\xbc\x28\x30\x4a\x58\x91\x43\x3b\x35\x20\xc5\x8a\xa6\x0c\x3c\x7b\x13\xa9\xc8\xdb\xa2\xd6\x86\xa9\x73\x69\x4f\xd0\x26\xc5\x1b\x81\x99\x69\xfc\xf5\xd7\x5c\xe4\x6b\x55\x1f\x9c\xc3\xa9\x9c\x51\x41\x18\x07\x4f\xaf\x1d\x1a\x72\x10\x2d\x9f\x36\xfb\x61\x4f\xd7\xd9\xcc\x4e\xd1\x4e\x25\x73\xbd\x63\x05\xeb\x0e\x46\x3f\xf4\xce\xbe\xfd\x6b\xf9\x5d\x31\x63\x3a\xfa\xdd\x01\xad\xf8\xce\xfe\x80\xc0\x84\x43\x42\x8c\x7c\x78\x06\xcc\xf6\x6d\x01\xff\xae\xe0\x67\x49\xda\x00\xe7\xf1\x13\x80\xa7\x45\x93\x7e\x72\x3d\xe3\x06\xd3\xdb\x2d\x93\xa3\x03\x36\x20\xa7\x2f\x1f\x5f\x84\x1c\x0a\xc2\xca\xca\x40\x0c\x8f\x94\x8c\xfa\xf4\x36\x36\x67\x6a\x61\x66\x0e\x07\xd9\xcb\xae\x67\x3f\xe9\xdd\x26\xdc\x09\x10\x3f\xb9\x0d\x93\xc3\x4e\xbc\x31\xb9\xbb\x5f\xec\x2e\xcb\xf0\xe6\xd0\x7a\xb6\x53\x09\x0a\x47\xd2\x34\x7e\x6f\x7f\xd9\x9e\x42\xfc\x08\xa5\x6f\x90\x1f\xef\xdf\xbb\xf0\x32\xce\xd5\xb7\x5c\xe4\xda\x9f\xfd\xbe\x60\xd5\xcd\xf7\xca\x49\x06\x0a\x9f\xe3\x04\xdf\xb4\x0d\x1e\xaa\xcf\xdf\xf1\x78\x6f\x0e\xdd\xf6\xa8\x3b\x1f\xe0\x6c\xaa\x0f\x32\x5f\xbd\x75\x5a\xeb\x7b\x12\xdd\x1c\x12\xe0\x1a\x47\x96\x7b\x96\x53\xf0\x17\xd5\x4a\x63\xe9\xee\xe5\xb8\x63\xea\x6f\xa3\xa4\xf1\xc4\x80\x9c\x8c\xbe\x01\xb7\x1e\xb6\x48\x26\x93\x82\x4e\x1b\x36\x02\xa9\x87\x0a\xe8\xdb\x8b\xef\xfd\x2b\x68\x72\x0b\x1c\xe0\xbd\x1a\xfe\x7d\x3a\xfd\xb0\x99\xa5\x5b\xef\xb0\x83\xac\xfc\xf2\x7e\xc5\x3e\x3c\xfc\x76\x6e\x7a\x48\xca\x85\xb9\xd3\x19\x7b\xdb\xfc\x7b\xe7\x29\x8d\x38\xc1\x37\x0e\xf1\x16\x3b\x64\x33\x83\xbe\x72\xf1\x7d\x8b\x4d\xee\xa1\xf7\x16\xa6\xbd\x62\x8b\x6b\xa9\x56\xb7\x50\x6e\x91\x79\x18\xe4\x90\xff\x89\xb7\x39\x7d\x1e\x06\x3a\x5c\xe5\xca\x48\x4e\x32\xab\xde\x49\x7c\x41\xc7\xac\xb8\x9f\xf4\x5b\x94\xe0\x0f\xb4\xb2\xaf\xd3\x94\x04\xa1\xe3\xc4\x25\x78\xa0\x11\x85\x79\xe4\xbe\xe2\x41\xaa\x29\x15\xfc\x5f\x58\x47\x95\x59\x49\x21\x15\xff\xd7\x6a\x56\xdb\xc3\x08\x24\xba\x62\x0a\x96\x99\x7d\xc7\xf5\x2b\xa5\xed\x3d\xdb\x82\xe6\x39\x47\x9d\xe5\xec\x1e\x0e\xbe\x7b\xbe\xb8\xb8\x5a\x67\xa5\xe1\x7e\x4c\xe3\xc6\x09\x78\xe4\x65\xbe\x43\x2c\xdc\xbf\x73\xef\xce\x60\x79\xc0\xc9\x52\xab\x3b\xb2\x9b\xef\xfc\x7d\x49\x39\x1e\xb8\xab\xfb\x31\xdc\x32\xbb\x8e\x9b\xa8\x53\x46\xad\x2c\xb5\xef\x17\x9e\xf6\x04\xfb\xaa\xd3\x84\xb3\x92\xf2\xd4\x19\xc3\xab\xc3\x92\x95\xd4\xd4\x8a\x9b\x95\x27\xf5\xdd\x3f\xe4\xe2\xdb\x7a\xcc\x5c\x66\xcd\xda\x3f\x17\x50\xd1\x70\x78\x76\xb2\x72\x5a\xfa\x39\x91\x6f\x35\xda\xc1\xbd\xe3\x28\xb7\x9a\x1e\xa9\x05\x2d\xc7\x7c\x5a\xcb\x5a\x17\x8b\xd8\x47\x4e\x21\x63\x68\x44\xc8\x09\x7a\xff\xc4\xae\x21\x54\x48\xb1\x28\xdd\xad\x22\x2b\xea\x9c\xb5\x9e\x78\xdb\x51\x26\x09\x9d\x4b\x9e\x13\x5a\x1b\x59\x52\xc3\x33\x92\x49\xa6\x32\x80\x88\x8b\x9f\x5f\x6b\x46\x68\xeb\x89\xcd\x6f\xb3\x5a\x1b\x59\x92\x92\x2a\x3d\xa3\x45\x71\x1b\x4b\xf4\xa0\x1d\xdc\xd5\x34\x77\x08\xb3\x72\xeb\x97\xf3\x3b\xe6\xe1\xfe\xed\x70\x4f\x5b\xe2\x07\x6c\x07\x4b\x5c\xa7\x07\xcc\x6f\x67\xea\x07\x3c\xc3\xe1\xfb\xad\xc4\xca\x6e\xf1\xe7\xe5\x8c\x91\xaa\x1e\x17\x5c\x83\xcd\x0b\x82\x6b\x41\xc6\x6c\xc6\x5d\x15\xd6\xfd\x12\xeb\xd6\x25\xbe\x6f\x9e\xef\x12\x19\xf7\xce\xd0\x1d\x12\xfe\xce\xdf\xba\x13\xf0\xa4\xa4\xd3\x07\xa8\xf6\xb7\x6c\xdf\xf7\x56\xec\x53\xb1\x08\xe7\x29\x34\xb1\xd2\x03\x22\x95\xcb\xff\xf3\x66\x9b\x72\x5f\x85\x0e\x71\x8a\x7c\x74\x33\xea\xea\xee\xdc\x36\x80\x2a\x56\xa6\x26\x52\x95\x76\xde\xb9\x22\x93\x5a\x80\xd3\xf6\x16\x93\x0e\x32\x8e\xe0\xfc\x71\x8e\x3b\x5a\x68\x19\x84\x01\x2c\x9b\xf0\x84\x11\xaa\xc9\x35\x2b\x8a\x11\x39\x2c\x0a\xd7\x71\x2b\x02\xa5\x6c\xc0\xcd\x9a\xc4\xa7\xf1\x6a\xb3\x30\xe7\x53\xa6\x0d\xd9\xbb\xf8\xdb\xe1\x3e\x28\x44\xe0\x98\x5a\x10\x43\xa7\x23\x24\xa9\xed\x98\x03\x75\x2b\xaf\x41\x2d\xcb\xa8\xa1\x85\x9c\x62\xbe\x8c\x15\x29\xf6\xf7\x55\x41\x17\xd0\x21\xbb\xa2\x0a\x0a\x5c\x32\x74\xce\x11\x55\x8b\xdb\x5a\x3c\x3e\xde\x49\x79\xbf\x4c\xba\xab\xa5\xe2\x10\x58\x3a\x51\xe6\xdc\xd3\x9f\xed\x71\x8f\x60\xc5\xaa\x82\xde\xe2\x26\xba\x21\x2f\x1a\x68\x2d\x6b\xb7\x80\x4f\x42\x0a\x16\x9e\x31\x22\x17\xc8\x4f\x25\x35\x19\x66\x00\xfc\xa3\x64\x86\xe6\xd4\xd0\x91\x35\xee\xff\xd1\x86\xe0\x90\x45\x6e\x1f\x74\xfb\x42\xdf\x42\x33\xaa\xe2\xf2\x7e\x19\xf7\xde\x9a\x16\xe1\x76\x30\xb8\xfc\xbe\xbd\xd3\x2f\xd5\x51\xbc\xc1\xeb\x1f\x7f\xb2\xb6\xf5\x9d\x11\xe7\x16\xad\xcb\x3f\x6a\xbb\x8d\x8a\xf6\x9b\x38\x6e\x2d\x99\x30\x7a\x04\x4b\x13\x7f\x02\xbe\xf3\xc3\xd3\xa3\xdb\xfd\x97\xf7\xfb\x80\xee\xf1\xf9\x3c\x3c\x3e\x71\x78\x07\xed\x3e\x3c\xe1\xbe\x69\x87\xbc\x7c\x21\x36\xc0\x7c\x60\x71\x30\x15\xe1\x54\x82\x9b\xef\x18\x16\xd7\xb9\x81\x0a\x68\x8c\xc2\xdb\xfd\x64\x0f\x0a\x5c\x3e\x24\x5c\x79\x1f\x72\xc3\x30\xbc\xc6\xad\x37\x3d\x2c\x7a\x79\x2f\xba\xc2\x6d\xe8\x09\xb8\x26\x50\xb6\xeb\x5d\xe5\x61\x19\x1e\x1a\xed\x7d\xa0\x9f\xcf\xbf\xea\x1a\x84\xde\x1b\xf0\x0a\x5c\xd0\xca\x54\xbc\x62\x8b\x5d\x67\xe9\xda\x1d\x34\xe3\x15\xe2\x83\xb8\xf8\xd7\x7d\xcb\x8f\xd7\xf7\xb4\xe0\x79\x18\x00\xf7\xd2\x89\x18\x90\x53\x69\xec\x3f\xc7\x9f\xb8\x36\xe8\x63\x38\x92\x4c\x9f\x4a\x03\x9f\xf4\x32\x53\x48\x60\x9f\xf3\xe4\xdc\x20\x18\x31\x81\xed\x1e\x39\x4b\xdc\x7c\x20\x42\x74\xa3\xef\xd9\xbb\x4f\x84\x55\x68\xf0\x95\xef\x19\x22\x80\x0e\x69\x37\x80\xaf\xf0\x15\x52\x0c\x21\xd2\xb2\x72\x04\x37\x8f\x52\xb5\xa6\x31\x79\x30\x37\x10\x26\x63\xc3\x37\x5c\xfb\x73\x29\xa8\x21\xd4\xbb\x86\xef\xad\x72\x28\x99\x9a\x42\x1c\x33\xbb\x27\xee\xf6\x50\x67\xfa\x83\x5c\xe8\xf7\xb2\x09\x9c\x11\xef\x6f\xf5\x97\x91\x35\xf8\x23\x7a\x14\x4a\xe1\x12\x1d\x69\xff\x63\x85\x2d\x4c\xf1\xff\x02\x80\x96\x1e\x91\x43\xa2\xb9\x98\x16\xac\xf5\x9d\x0b\xf5\x46\x8f\xb9\x63\xa8\xca\x0e\x61\xe5\xe6\x9c\x16\x0c\xdb\x24\x53\x11\x4a\xef\xe5\xe4\xc6\xe1\x37\x70\x40\x59\x56\x40\x05\xb5\x72\xe7\x8a\x2d\x76\x06\x77\x26\xd9\xc7\x1c\xb6\x73\x22\x76\x1a\x4c\x89\x16\xd7\x84\x33\x06\x34\xd5\x1d\xf8\x6e\x27\xfd\x1c\xbd\xf3\xc4\x78\xb8\xd7\x8f\xdc\xcf\x02\xeb\x55\xee\xe8\x2b\xbe\x3a\x9b\xe5\x21\x4c\xe2\xf5\xbd\x3d\xbd\x0f\x7e\x2e\xc1\x08\x80\x9e\x28\x08\x11\xd8\x4f\x63\x04\x4f\x6b\x41\x5c\xf1\xaa\x6a\xe0\x55\xeb\x6a\xaa\x68\xce\xc8\x54\xd1\xea\x96\x4d\xb4\x9e\xb6\x88\x2a\xe7\xaa\x21\xef\x30\x93\xb6\xdf\x26\xb9\x65\xad\xef\xf0\x02\xdc\xf9\xbb\x6b\x36\x9e\x49\x79\x05\xf0\x0a\xc0\x77\x8f\xe8\xe2\xfa\x01\xc7\x3a\x6a\x3e\xf3\xee\x07\x4d\x72\x66\x28\x2f\x20\xb3\xec\xe3\xfb\x0f\x2e\xf7\xcc\xeb\x4e\x9e\xca\xd5\x32\xa3\x07\x5b\x8d\xe6\x2e\xbd\xf2\x9c\xcd\x39\xbb\x76\x9e\xac\xdb\x44\xd4\x90\x4c\x99\x80\xbc\xa6\x3b\xb2\x13\x87\x44\xf3\x9c\x1d\x03\x08\xce\xed\x0f\xea\x10\xb4\xba\x85\xe6\xfb\x64\xc5\xdd\x67\xcf\xbd\xe7\xce\x03\x54\x93\xe0\xd1\x38\x93\xea\x0e\x24\xe1\x87\xc1\xea\x3c\x0c\x32\xc7\x55\x01\xbd\x21\xbf\xfb\xdd\x57\x77\x9c\x2b\x9f\x78\x59\x97\x6f\xc8\x1f\x7e\xff\xfb\xaf\x7e\x7f\xfb\x6d\x5c\xe0\x6d\xaf\x6f\x7f\x3f\xb7\xdb\xde\x9e\x1f\x6d\xc1\x7c\xe7\x21\x4d\xf8\xee\x80\xf8\x03\x1e\x35\xa1\xbc\xa8\x95\x4b\x50\x7f\xa0\x35\xf7\x2e\xfe\x0d\x04\x33\x9b\xa2\x3c\xea\x9f\xe8\xd3\x53\x5d\xda\xea\x84\x0b\xa6\xa1\x51\x7e\x2d\x14\xcb\xe4\x54\xf0\x7f\xb1\xdc\xf7\xc9\x87\xe4\x2b\xe8\x1d\xea\x59\x9c\x30\x91\x57\x92\x0b\x03\x47\xec\x8c\x8a\xbc\xb8\x2b\xd9\xe6\x01\x6f\x1a\xef\xe0\x4e\x53\x06\xa7\xd1\x5a\x13\xf6\xa1\xf9\xc5\xd2\x74\xd9\x77\xf6\xa1\x5f\x3c\xe5\x70\xda\x3a\xbd\x29\x0a\xc6\x8b\x3b\x7c\x20\x2b\x68\x5c\xcf\x44\x47\xd7\x03\x7c\xf6\x73\xcd\xd4\x02\xaa\xfe\x1a\x43\x2a\x4a\x44\xbd\x6c\xe0\xba\xfc\x3b\x3a\xa5\x92\xde\xea\xa3\x27\x2b\x5c\x24\x91\xaa\xd5\x64\x68\x2d\x51\x05\xbf\x61\x98\xf1\xe2\xa3\xb0\xe4\x90\x88\xba\x28\xee\x18\xe9\x96\x87\x08\x79\x57\x24\x17\xaf\x07\xf9\x03\x1e\x66\xa8\x3f\xd4\x25\x84\xd7\xe6\x1c\x43\xf1\x8b\xf7\x64\xd5\xac\x9b\xca\xba\x21\x87\x11\x5e\x29\x6e\x23\xbc\xd6\xc8\x7a\x7f\x78\xc6\xfb\xc3\x20\x40\x1f\xe0\x4e\xc2\x6b\x9d\x94\xf8\x07\x02\x77\x3e\xa6\x83\x09\xaf\xb5\xf2\xf5\x1e\xe6\x6c\x5a\x41\xfa\x03\x73\xac\x1f\xd1\xf1\x84\xd7\x63\xb8\x9f\xf0\x5a\x6b\x1e\x1f\xe2\x8a\xc2\x2b\x65\x16\x9f\xc0\x2d\xe5\xde\xf9\x29\x9d\x53\xf7\x0c\xd9\xb3\x8b\x0a\xaf\x07\x3b\xaa\x1c\x71\x6b\xe5\x7e\xae\x91\xf7\xf9\x40\xe6\x7a\x80\x03\x0b\xaf\xf5\xb8\xea\x09\x9d\x59\x7e\xc0\x27\x73\x69\xe1\xf5\xd4\x8e\x2d\xbc\x1e\x7c\xa6\xad\xe7\xe4\x8a\x1f\x7e\x0f\xcb\xa4\x40\xd5\x28\xc6\xc5\x5c\x62\x53\xb4\xb5\x14\xf9\xf3\x1b\x3f\x5c\xd2\xe7\xaf\xe1\x28\x73\x0a\x7d\xb0\x80\x62\xbb\x66\x26\xe5\x15\xa9\xf5\xfd\x51\xa6\x3b\xdf\xfb\x9e\xca\xc6\x5e\x0c\xd1\x75\x76\xd8\x79\x5d\xb0\x1f\xb8\x99\x7d\xf4\xcd\x22\xdd\x36\x33\x75\x55\xc0\x5c\x44\x5f\x58\xbe\x3c\x6f\x0c\x84\x13\x83\x62\x2e\x93\x65\xc9\x44\x8e\x19\x88\x25\xbd\xba\x9b\xe1\xb5\x35\x31\x31\x49\xbe\x28\xd0\x8c\x82\xa1\xd8\xa7\x8a\x8a\xc6\x60\x98\xdb\xc3\xf2\x2e\x16\x7e\x20\x03\x3f\x54\x2f\x7a\x70\x89\xe0\xda\x3a\xef\x72\x49\x60\x54\xd3\xd7\x2a\xfd\x23\x63\x56\x48\x40\x85\xc1\x42\x00\x2c\x55\x79\x70\x95\xdc\xc9\xc4\xff\xca\x69\x2f\xae\x37\x04\x13\xd3\x06\xdc\x57\x17\x3c\x63\xe1\xd8\x92\xe2\x01\xa5\xe9\xe7\x4e\xa3\x7d\x98\x92\xfc\x90\xf3\xe7\x81\x67\xcf\x1a\x4a\x4d\x4b\x94\x58\xf3\xe9\xe1\xb0\x57\x0d\x88\xd7\x63\xac\xbc\x7f\x74\xbc\xf6\x73\xff\xd9\x43\x56\xdf\xdf\xfc\xb2\xfe\x77\x5d\x1d\xd6\x3f\x34\xc9\xed\x7d\xf9\xdb\x12\xb5\xd1\x43\xc3\xda\x2f\x1d\x2d\x19\x55\xf6\xb0\x07\x6f\xfa\x90\xbc\x3d\x3f\x3e\xbc\x3c\x1e\x90\xef\xce\x8e\xe0\xdf\xa3\xff\x8f\xbd\x37\xef\x8e\xdc\xb6\x16\xc4\xff\xfe\xf9\x53\xe0\x28\x39\x47\x92\x53\x55\xea\xf6\xcb\x24\x79\x3d\x79\xf1\x51\x7a\xf1\xe8\xb9\x17\x4d\x4b\xb6\xcf\x8c\x9f\xe7\x19\x22\x51\x2a\x44\x2c\x80\x21\x40\xa9\x2b\xcb\x77\xff\x1d\xdc\x0b\x80\x60\x55\xb1\x08\xb2\x16\xa9\x1d\xe2\x0f\x5b\x5d\x24\xb1\x5c\x00\x77\x5f\x5e\xbf\x7d\x6d\xfe\xff\xf2\xc3\xfb\xf7\xaf\x5f\x5e\x1b\x06\xf6\xcb\xd6\x29\x40\xb5\xcb\x2c\xc3\xdd\x37\x1c\x8a\xac\x23\x73\x2a\x16\x64\x5a\x6a\x83\x91\xab\xc9\xd4\x66\x49\x51\x8d\x47\xd3\x34\x26\x62\xee\x17\x77\x06\x6b\x7b\xee\x37\x74\x59\x73\x1a\x96\x5a\xc6\x02\xa3\x36\x24\xbb\x7d\x65\x87\x39\xe4\xd1\x11\x83\x5d\xcf\x78\xbf\x60\xc2\x2f\xbe\x68\xed\xf8\x8d\x2c\x08\xfb\x44\xe7\x79\x16\x11\x36\x76\x9c\xcb\x54\x1d\xdb\x88\x4f\xf3\x77\x3b\xdc\xe1\x93\xb3\x4c\xde\x1e\xfb\x40\x51\x46\x32\x79\x4b\x54\x79\xe3\x03\x78\x81\x13\x8c\xea\xed\x4b\xd7\x4d\x2d\x2e\x72\xe4\xa3\x7c\x83\x5e\xa3\x27\x57\xeb\x33\xec\xa0\xcb\xbc\xce\x54\x42\x33\x56\xeb\xc9\xfc\xd0\x75\x42\x5f\x9e\xad\x5f\xa1\x13\x55\x78\xb1\xd4\x63\xfb\x0e\x5f\x4c\xc9\x03\xcf\xd2\x84\x16\xe9\x0a\xc2\x00\xe6\x0f\xef\x13\x9c\x1d\x2c\xc7\x24\x80\x75\xac\xc6\xc6\x64\x6e\xed\x7a\xa3\x7b\x56\x64\x34\xc7\xe8\x38\xa8\x23\x06\xde\xbc\x31\x73\x7c\xc5\x72\x06\xa1\xe4\x58\x3b\x85\x11\x26\x92\x4c\x42\xba\x3a\x64\x3c\x47\xf5\x8d\x41\xe7\x5f\x57\xe7\x20\x36\xce\xf8\x17\x4e\x61\x21\xce\x6a\xd7\x88\x07\x83\xb7\x1a\x53\x4a\xba\x88\xda\xd6\x7e\x50\x27\xe7\x05\x6d\x46\x8e\x6c\x1e\x81\xa3\x11\x39\xf2\xd9\x03\x53\x2b\x94\x1f\x7d\x79\xd4\xda\xa3\xef\x20\x8c\x40\x07\x99\xdd\x3a\x1c\x8c\x61\x9e\x61\x9a\x0d\x38\xde\xce\x55\x22\x7a\xea\x55\x66\x4d\xc3\x55\x5a\x8b\x07\xac\xa1\x3e\x50\x7b\x4f\xe1\x42\x57\x66\x5d\x25\x69\xd8\x7a\xc6\x47\x5f\xd6\xba\xd7\x90\x25\x0a\x93\x41\xd8\xcd\x2b\x98\x39\x8d\x9b\x3c\xe4\xc3\x76\x55\xbb\x7b\xde\xd5\x24\x4c\x2d\xca\x0b\x92\xd3\x82\x09\xed\x27\xdf\xde\x6d\x50\xaf\xfb\xe8\xcb\xa3\xb8\x5b\xb9\xf1\x12\x05\xde\x05\x91\xea\x8a\x2b\xff\xc5\xcb\x8c\x2a\xb5\xc6\xee\x08\x54\xc0\x74\x4c\x18\xf6\x4c\xa8\x73\xbd\x80\x0a\x72\x33\x7a\xbf\x61\xa9\x11\x93\xd6\xb4\xb8\x65\x7a\xb3\x5f\x00\x15\x8b\x0f\x1b\xd3\x92\x8f\xa3\x2b\xf2\x8c\x7b\x28\x8d\xb8\xd0\x63\x59\x8c\xf1\x93\x17\x44\x17\x65\x93\xea\x41\xf3\x39\x93\xa5\xbe\x62\x89\x14\xeb\x63\x69\xed\x7b\x3b\x73\x74\xe8\x10\x60\x6c\x7d\x6d\xce\x1d\x07\x1e\xd6\x4a\x70\x1a\xa9\x8a\x3d\x77\xfe\x35\xf5\xac\x8a\x1f\xde\xbe\xdb\x66\xb3\x09\xe4\xff\xd9\xbc\x93\xdf\x5b\xa2\x2c\x6e\xfd\x4c\xed\xcc\x37\x7e\xf6\xae\xd4\xdd\x3f\x7a\xe9\xfd\x36\x36\xbf\x6d\x81\xb1\x39\xc3\x5d\xe3\xfa\x95\xa6\xba\x5c\x39\x0d\x6d\xa4\xc8\xe2\xf7\x2b\xcc\x6f\x60\x25\xfc\x2b\xe8\x2a\x34\x1d\x85\x19\xc0\x50\xa8\xc3\xec\x81\xf0\x9e\x0b\xb4\x98\x10\xfb\xa1\xb9\xb2\xba\xa0\x1c\x35\x62\x34\xd1\x25\x5d\xb5\x7c\x9b\x8f\x6d\x90\xc6\xfa\x94\x99\x1b\x74\x62\x9b\xf4\x60\x09\x2b\xb4\x7a\x4b\x95\xfe\x2e\x4f\x69\x43\x68\xfd\x52\xf0\x85\xd2\x70\xa7\x50\xac\x7d\x10\x2c\x35\x44\xc8\x82\x04\xfb\x23\x0f\x06\xbb\x97\xd8\xe3\x9a\x0e\x5b\x4e\xa5\xbb\x63\xe6\xf3\xb1\x19\x6a\xfd\xac\x3f\x4a\x03\x93\xf3\xb5\x38\xaa\x1e\xe3\xd2\x36\x5b\x43\xd1\x0a\xe8\x8d\x08\xf6\x69\x1d\x5b\xb9\xfd\x8c\x33\x46\xc5\xfa\x18\xc4\xda\x5c\x5f\xe2\x7b\xdd\xcf\x94\x1d\x80\x3c\xcc\xb8\x91\xb8\x30\x05\x81\x22\x8e\x89\x4d\x59\xc6\x1a\x32\x11\x6c\x19\x16\x63\x47\x78\x65\x07\xd8\xd6\x83\xf9\xb2\xde\x9d\x37\x3c\x5b\xf1\xd2\x06\xab\x56\x72\x9a\xe5\x7d\xbc\xba\x62\x79\xc1\xc0\xbc\xdd\x64\x32\xb9\xc3\x84\xc6\x90\xd7\x8a\xff\x8d\x15\x1b\x98\x0c\x30\xe6\x71\x91\xf2\xc4\x7b\x0d\xe4\x85\xbc\x2d\x98\xaa\x81\x1a\x93\x5f\x2a\xec\xdd\x8c\x69\x60\xee\xc7\x95\x45\x65\xde\x29\x85\xcd\x06\x71\x98\xc8\x1d\x27\x9a\x43\x58\x63\xcd\xa4\xbd\x2a\xa5\x63\x76\x40\x48\x6d\x6f\x75\x34\x74\x6e\x63\x8f\xcf\xbe\x6d\x8e\xc8\xdd\x69\x58\xcd\xa6\xb8\x60\x7c\x03\xc0\x27\x92\x8d\x79\x29\x37\x46\x10\xc7\x5a\x03\x5a\x22\x85\x49\xbc\xe8\xe4\xa7\x1c\xd3\xdb\x4e\x43\x0d\x76\xee\xad\xd2\x18\x05\x59\xb5\x2e\x3e\x28\xb1\xf5\x4c\x3a\xb9\x36\x88\x2e\xb5\x0f\x6a\xb7\xa5\x12\xa6\x6c\x4a\x11\x74\x53\x9b\xca\xa2\x51\x6c\xdb\xdd\xe4\x37\xc7\x95\xb7\x76\x64\x78\xda\x66\x7f\xf0\x3a\xe1\x76\x18\xd4\x7f\x32\x22\x94\xcc\xb8\xd2\xb2\xb0\x8e\x1a\x86\x00\xea\x82\x0a\x85\xcf\x1b\x69\xc5\xb6\x1e\xe6\x2f\xfd\x14\x08\xcd\x73\x46\x7d\x3d\x77\x4b\xce\xa0\xb0\x7a\xc1\x12\x59\xa4\x6b\x27\xe6\x54\x32\x6b\xd9\xb1\xb5\xc3\xef\x20\xa5\x46\x46\x95\xbe\xf6\x73\x30\x3c\x45\x24\x36\xae\x73\x4c\x76\x89\xd5\x6a\x5c\x1a\x43\x29\xaa\x87\x92\x50\x61\x35\x55\x4d\x43\x44\x9d\xaf\x76\xbe\xa4\x5a\x1b\x32\x80\xbd\xd6\xf5\xe0\x99\xbd\x60\x89\x87\x99\xf9\x9c\x29\xb5\x31\xce\x7a\x29\xc1\x0b\x94\x8d\x21\xbe\x6c\x8c\xfd\xdc\x11\x7b\x64\x1c\x30\xc4\xc1\xe5\xd5\x5d\x34\x1f\x35\x02\x6c\x02\xaa\x41\xfc\xb5\xda\x6a\xcb\xf2\x19\x55\xb1\x8b\xf1\xb7\xc8\x87\xd2\x44\x5f\x87\xc8\xd9\x14\x8c\xaa\x4d\x29\x2b\xba\xf8\x22\xdf\x14\x9c\x4d\xc9\x4b\x3a\x67\xd9\x4b\xaa\x76\x09\x79\x40\x0f\x9b\x54\x35\x6c\x72\x3b\x21\xc7\x1f\x03\x4f\x99\xf7\x52\xbf\x63\xfa\xb8\x1f\x6c\xe2\x10\xc1\x5e\x51\xc0\xd6\xe2\x48\xfb\x85\xdf\xf2\xaa\x6f\x3d\xc3\x0d\x17\xfb\x49\x5c\xe9\xcd\xe9\x5a\x9a\xae\x71\xfd\x02\x97\x05\xa8\x27\x93\xbe\x17\xb9\x25\x05\x44\xd3\xe5\x8d\xb9\xb6\x8f\x74\x61\xbb\x5c\xd5\x96\xd5\xfb\x2e\xae\xd6\xaa\x7a\x56\x00\x71\x5d\x13\xa7\xc1\x58\x14\xba\xa8\x43\x41\x26\x33\xfb\x97\x57\xdf\xef\x92\x31\x7a\xdc\xb4\x4a\x76\x53\x1b\x9f\x6f\xe0\xfc\xc7\x9b\xe9\xfc\xb6\x29\x9b\x52\xb0\xbf\x99\x13\x70\x48\x8f\xb9\x57\x6e\x54\xab\x80\xf1\x85\x3f\xe0\x5f\x68\xe0\xf7\x33\xab\x9d\x8f\x13\x2d\x49\x5e\xb0\x7b\x08\x67\x10\x10\xa6\xc9\x88\x60\xca\x5c\x94\xd3\x0d\xc3\x47\x8a\x6c\x71\xe2\x5a\xbb\x28\xdd\x2a\x26\x93\xf6\xad\x75\x2f\x6d\xda\x60\x6c\xb1\x52\x61\x84\xd4\xdd\x41\x1c\x6c\x97\xa9\x3a\x74\xd6\xca\x60\x76\xec\x6f\xbd\xe2\x79\xb9\x2d\x15\x1a\x31\x9f\x7c\x04\x7c\x8e\xce\x16\x89\xc1\xca\x09\x94\x9f\x41\x34\x6f\xd1\x53\x5d\xc9\xfc\x71\x19\x07\x82\xeb\x7b\xfd\x84\xef\x6a\x59\x65\xc9\x77\x07\xf3\xd6\x5c\x69\xd1\xfd\x3d\x81\xc4\x6f\xad\x07\x68\xbf\x99\xa0\xb0\xb5\x9d\xba\xc7\x3f\x6f\x31\x49\x40\x37\x9e\xb1\x3d\xe5\xe0\x53\xac\xb8\x67\x69\xcd\xc2\x68\xcb\x40\xd5\x7f\x0b\xec\xd1\x55\xff\x16\xec\xe4\xef\xff\xfc\xe2\x8b\xf1\x78\xfc\x45\xe5\x71\xfa\x82\xd0\x9c\xb3\x4f\x9a\xa1\xdf\xf3\xe4\xee\x0f\x50\xeb\xf6\xfe\xf9\x17\x70\xe0\xc8\x4b\xd0\x73\x3b\x45\xee\x2b\x1f\xf7\xff\x85\xcb\xa5\x60\x06\xa1\x42\x48\x1d\x7a\x30\x26\x52\xe8\x42\x66\x19\x2b\xc6\xb7\x4c\x4c\xee\xca\x1b\x76\x53\xf2\x2c\x65\x05\x74\xee\x86\xbe\x7f\x36\x79\xfe\xdb\xc9\xb3\x2f\xec\xc1\x72\xa9\x8a\xf3\x8c\x0a\x35\xf1\x41\x4a\x93\x44\x16\x4c\x9a\xff\xcd\xbf\x50\x39\x4b\xcc\x10\x78\x9f\xc8\xda\x77\xac\x0e\xce\xce\xc4\x66\xe0\xad\xa0\x31\x26\x32\x9b\xc3\xdf\xb8\x42\x9b\x5b\xf9\x32\xb3\x89\x9a\x33\xae\xf4\xb7\xcb\x4f\xde\x72\x85\x54\x31\xcf\xca\x82\x66\xf5\xa9\xc2\x03\x35\x93\x85\xae\xd5\x20\x18\x13\x8e\x14\x50\x71\x71\x5b\x66\xb4\xa8\x7d\xf5\x85\xf3\x4a\xa9\xf4\x7e\x86\x18\xde\xd7\x1c\x81\xc7\xb5\xd0\x07\x2e\x34\x2b\x5e\xca\xac\x9c\x87\x6a\xb6\xf1\x2a\xfb\x38\xe5\x85\xd2\x36\xf9\x73\xdd\x6a\xb1\x8e\x25\x7e\xbf\x54\xa4\xf8\x2f\x4a\x0a\xb0\x66\x92\x89\x01\xf7\xa4\xf9\xa3\x1f\x9f\xfd\x14\x7c\x87\x7b\x58\x67\x4b\xd7\x5e\x86\x35\x33\xa6\x79\x5e\xc8\x7b\x8a\xa9\xab\x37\xcc\xc5\xbd\xb7\x32\xec\xf9\xea\x83\x86\xb1\xd7\x77\x59\xb3\x0f\x86\x5d\xd6\x1e\x60\x97\xf5\xb4\xde\xf8\xf2\xfd\x73\x9a\xe5\x33\xea\x92\x00\xa8\x64\xc6\xe6\xb4\xda\x24\x99\x33\x71\x7e\x79\xf1\xfd\xbf\x5d\x2d\x3d\x58\x9f\xe8\xdb\x1c\x39\x1f\xf7\x1e\xd4\xe2\xa2\x4e\x3a\xf3\xc1\x7f\xd5\x0d\x58\x99\xe6\x0a\x2f\xb7\x9e\x77\x33\xcc\x37\x5e\xe5\xa5\x9f\x0d\x74\x82\x9f\x9a\x78\xa8\x00\x97\x2c\xe1\xb3\x36\xf9\xae\x72\x4e\xaf\xad\xd5\x5e\x01\x96\x5a\x28\x56\xee\x54\xce\x82\x54\x81\x41\xd8\x55\xae\x4a\x71\xe6\xb8\xb2\xc2\xe7\xa0\xc4\x2c\x0c\x9a\x04\xe9\x03\xb0\x77\xe5\x72\x56\x43\x64\xae\x06\xc7\x8b\x42\xd0\x0c\x1d\xb2\x46\x6b\x03\xcd\xe7\x74\x41\x0a\x66\xc6\xad\x27\x24\x68\x8a\xc4\x5c\x53\x5a\xfc\x96\x6b\x87\x6b\x13\x39\x9f\x97\x82\xeb\xc5\x19\xa0\x4d\x7e\x53\x9a\xfd\x3c\x4b\xd9\x3d\xcb\xce\x14\xbf\x1d\xd3\x22\x99\x71\xcd\x12\x5d\x16\xec\x8c\xe6\x7c\x0c\x8b\x11\xe8\xa1\x34\x4f\x7f\xd5\x64\x0e\x68\xa4\x44\xeb\x78\x89\xb6\xcd\x82\x5c\xc2\x18\x1f\x1d\x04\x52\xd6\x73\xfc\x43\x95\x89\xd7\x57\xd7\x95\x59\x14\x93\x38\xc2\x16\x05\x06\xc0\xe6\xdd\x32\x90\x85\x22\x99\xb6\x18\x8f\x4b\xed\xe0\x13\x3a\x40\x79\xa7\x8c\x1b\xe9\x46\x95\x37\x73\xae\x95\x73\x74\x5e\x1f\xf0\xfb\x12\x68\x13\x24\x68\x47\x75\xd1\xea\x2b\x17\xa2\xd2\x2e\x1c\x7c\xef\xc0\x8f\x6a\x6c\x36\x24\x7a\xf7\x42\xca\xbb\xfa\xc1\x1a\x09\xce\x11\xcd\xc6\xed\x0e\xb0\xce\x55\xce\x12\x7f\x1b\x3d\x96\x39\xc7\x32\x48\xb6\xd4\x97\x77\xac\x86\x22\xa6\x16\x35\xad\x38\x58\x6c\x10\x28\x9b\x85\xc8\x31\x59\x83\xe1\xeb\x8f\xd6\x78\x72\x8c\xe3\x08\x1b\x69\x91\x04\xdd\xd0\xbd\x75\x55\x8e\x88\x59\x69\x1d\xaa\x5f\x79\xca\x66\x03\xfa\x40\x76\x17\x21\xc8\xd7\x6b\xa0\x2e\x74\x18\x9f\x60\x36\xe1\xe8\xdc\x25\xd7\xc6\xaa\x4f\xef\xa8\x28\x69\xb6\xd6\x39\x70\x23\x0f\xea\xc0\xd8\x9c\xb9\xa9\xa9\x6e\x45\x33\x94\x77\x9a\x05\x6a\xe3\xec\x6d\x26\x96\x8d\xc9\xab\x9a\x9c\xe7\xf0\xe0\x76\x4e\x7a\x15\x54\x87\x6a\x32\xec\xee\xd8\xbf\x2b\xbc\x90\x2b\x1e\x38\xc8\x0f\x6c\xf4\xc2\x59\x5d\x82\x66\xb9\xaa\x12\x64\x69\x49\x12\x39\xcf\x33\xa6\xeb\xac\xc5\x3a\x87\xf4\x0d\xde\x61\x5b\x79\x83\x6d\x42\x02\x36\x7b\xda\x55\x83\x95\x7b\x8c\x8a\xed\x2e\x57\x5b\x6b\x26\x4a\x83\xff\xaf\x6a\x35\x81\x3e\xb2\xb5\xbe\xa3\x51\xb7\xbd\xb9\xcb\x30\x07\x36\xa6\xa6\xa8\xd7\x59\x75\x0e\x3b\xa5\x6a\x28\x50\xa3\x25\x49\xad\x3f\x72\x1a\x04\x67\x37\xfb\xee\x6c\xe9\x3b\xd5\xcc\xc3\xad\x85\x48\x10\x42\xe8\x4c\x05\x76\xc5\x8d\xe1\x46\xad\x52\x31\x04\xad\x6f\x72\xa2\x8c\x35\xf2\x5d\x58\xf0\x03\x93\x02\x79\x32\x72\xce\x30\x92\xc6\xb3\x8b\x00\x4a\x46\x53\xfb\xa3\xa1\xc7\x05\xf3\xf1\x14\xd6\x38\xb0\x51\x3d\x54\xb1\x95\x50\x2c\x95\x62\xbc\x08\xf9\xcf\xab\x0f\xef\xcf\xbe\x91\x36\x04\xdf\x56\x3b\x84\x5b\x32\x87\xc8\x12\x57\x84\x2f\x65\xca\x9c\xfd\x2b\xb0\x40\xcc\xa9\xe0\x53\xa6\xf4\xc4\xa7\x42\x53\x3f\x7e\xf5\x53\xb3\x25\x31\x08\x4c\x1a\xb9\xba\x4a\x9e\xc7\xb2\x07\x0f\x68\x90\x59\x7c\x95\x30\xfe\x81\xeb\x19\x4c\x35\x97\xae\xd8\xe1\x03\x2c\x42\xd3\x3b\x43\x64\x70\x11\xa5\x91\x16\xef\x36\x68\x79\x8e\x50\x28\xf4\x53\xfd\xbb\x11\x80\xfe\x79\x44\x4e\x1e\xc0\x97\xfe\xc8\xfc\xf3\x08\x27\xe2\x79\xeb\xb0\x04\x69\x35\x21\xf4\xc0\x2f\xf8\xed\x2d\x2b\x1a\x2b\x35\xd9\xd2\xa0\x86\x67\x82\xf2\x86\x7c\x4a\x84\x0c\x3a\x11\xb6\x2e\x76\x95\x61\x7e\x79\x82\x3f\x7e\xf5\xd3\x11\x39\xa9\xc3\xa1\x71\x30\x2e\x52\xf6\x89\x7c\xe5\x6d\x44\xb9\x4c\x4f\x6d\x56\x0d\xb5\x10\x9a\x7e\x32\x63\x25\x33\xa9\x98\xc0\xd8\x04\x2d\xb1\xb2\xa5\x92\x60\x95\xcc\xb2\x31\x72\x4f\x29\x79\x80\xbc\x23\x8d\x23\xb9\xad\xc2\xbc\x1c\x90\x11\x72\xb3\x44\xe3\xda\xf5\x87\x57\x1f\x5e\xe0\xec\xcc\x31\xba\x05\xdd\x98\x61\x72\xb1\x54\x26\x86\x43\x85\xc9\x29\x55\x89\x87\xc3\x60\xfd\x19\x15\x60\x3b\xb3\x15\x36\x0d\x5b\xda\xfb\xca\x6e\x52\x49\xc6\xde\x56\x10\x2b\x22\x71\xc8\x23\x32\xe3\xd1\x30\xd9\xa4\x21\x8d\x85\xc9\xfb\xe0\xb6\xf4\x82\x49\x15\x9f\x60\xc0\x92\xca\x44\x19\x88\x24\x2c\xd7\xea\x4c\xde\x1b\x62\xc4\x1e\xce\x1e\x64\x71\xc7\xc5\xed\xd8\x5c\x87\xb1\x75\x5f\x3d\x03\xcd\xd9\xd9\xaf\xc4\x1a\xce\xb9\x13\x08\x36\x7a\xc0\x75\x81\x03\x3a\xc4\x3d\x22\x30\xcc\xf8\xea\xac\x2f\x2c\x9c\xb0\xd4\x85\xba\x6e\x80\xc8\x15\x22\xb9\x64\xb9\x5f\x73\xb5\xd1\x81\xd6\x2a\x4a\x02\x2a\x30\xa7\x29\x92\x09\x2a\x36\x64\x06\xdc\xf3\xcd\x32\x10\x07\x2f\x83\x64\x31\xb6\xca\xe1\x31\x15\xa9\xf9\x5b\x71\xa5\xcd\xef\x7d\x41\xbc\x41\x19\x1f\x0b\xd6\xef\x2e\x5e\x3d\xee\x7d\x2b\x79\x5f\x8c\xd3\x2d\x83\xcd\x4d\x29\xd2\x8c\xbd\x95\xf2\xae\x21\xcb\x48\x0d\x62\x7f\x0e\xdf\xf6\x26\x68\xd4\x08\x70\x31\xf6\xae\xe8\x81\x02\x86\xe4\x65\x86\x24\xa8\x14\x39\x4d\xee\xe8\x2d\xb3\x83\x02\xc9\xb6\xa9\x8c\x50\x89\x03\xb2\xe4\x4e\x53\x1e\x37\xce\x1e\x15\x57\x76\x9e\x0d\xd3\x74\xbc\x89\x4d\xb0\x44\xdd\xbc\xdb\xe7\xbb\x13\xe7\x89\x9a\xc8\xf3\x91\x35\xf1\x0d\xe3\xaa\x82\x57\x53\x70\xd8\x78\x53\x85\xec\xb1\x2f\xa7\xb2\xf6\x85\x76\x43\xf9\xf2\x3c\x63\x9d\x04\x97\x3e\x73\x3b\xe2\x10\x95\x85\x72\xed\x35\xf8\xc5\xee\x82\x59\x12\x79\xa0\x0a\x30\x5f\x76\x6f\x3d\xd5\x0e\x92\x5c\xb3\x5d\x38\x5a\xb3\xde\x1e\x22\x52\x38\xf1\x56\xe3\x74\xab\xb8\xb4\x66\x4e\xad\x31\xcd\x87\x11\x9d\xb0\x3d\xa6\x00\x85\xed\x71\xc5\x28\x6c\x07\x17\xa6\xb0\x1d\x54\xa4\xc2\x76\x38\xc1\x0a\x5b\x6f\xf1\x0a\xdb\xa1\x84\x2c\xbb\x1f\xbb\x0a\xd2\xe8\x76\xdf\xbb\x09\x5f\xd8\x1e\x5d\x04\xeb\x04\xb1\xf6\x10\x9f\x6e\x10\xeb\x26\x9a\x35\x42\x6c\xaf\x02\x5a\x67\x00\x45\x84\x2b\x75\x87\x52\x47\xc1\x6d\x5f\xa0\xda\x28\xbe\x75\x82\x54\xa4\x28\xd7\x07\x5e\xfb\x13\xeb\x1a\xc1\xfa\x34\x84\xbb\x4e\x1b\xd0\xea\xd9\xd7\x0d\xe8\x9d\x84\xbe\x46\x38\xee\x53\xf4\xeb\x00\x9d\x3e\x89\x4c\x37\xc7\xec\x61\x6b\x0a\x97\x5b\x32\x47\x99\x95\x42\x62\xa7\xca\x1e\x14\x8a\x5f\x6d\x6c\xfa\x4e\x8a\x5e\xec\xcc\x75\x39\xca\xe7\x58\x37\x55\x62\xc1\x16\xeb\x70\xdc\x25\x98\x0f\xdb\x86\x78\x9e\x2a\x7e\x63\xeb\xa8\x3e\x6c\x1d\x02\x5f\x63\xe3\xe4\xaa\x65\xc7\xc4\xf9\x75\x58\xb2\x91\x0d\xf3\x42\xde\xc4\xe6\xb0\xda\xc3\xaa\x22\x5d\xb4\xb7\x0c\x1b\x82\x94\x2c\x7e\x7f\x77\xb6\xd8\xb6\x18\xbb\x35\x73\xc7\xbc\xcf\x35\x37\x5c\xbf\x1f\xc7\x0a\x36\x79\x1f\x33\xed\xed\xb9\x1e\x08\x4d\x38\xc9\x91\x73\xad\xb8\x2e\x4a\x36\x22\x6f\x68\xa6\xd8\x88\x7c\x27\xee\x84\x7c\xd8\xdd\x7c\x37\xa7\xe1\x59\x33\xdb\x6b\x9b\x70\x27\x22\x94\x33\x7a\x2a\x95\xd6\x28\x12\xd9\x5f\xf8\x0f\x9c\xe6\xcf\x6a\x7e\xc6\xa5\xe0\x7f\x2d\xeb\x62\xa8\x37\x51\x9f\x2c\x0b\xa8\x2f\xaf\xbe\x87\xc3\x81\x6a\x1c\x55\xab\xa9\x61\x1e\xaa\xe6\x98\x94\x98\x30\xd5\x8d\x0a\x90\x78\x7e\xe0\x92\xea\xd9\x92\x94\x9d\xd9\x4c\xdd\xcb\xba\xc0\xbc\x6c\xce\x9e\x41\xc0\x6f\xe7\x58\x99\xa9\xf3\x84\x66\xd9\xc2\x08\x9c\x4b\x65\xb1\xb7\x8b\xcb\x8d\xa0\x2b\x2b\x77\x14\xb3\x73\xf1\x7b\x16\x7c\xee\xf6\x07\xf5\x9f\x2c\xb5\x2b\xdc\x2e\xaf\xf8\x86\x62\xcf\x6b\xa6\xf6\xd1\xbe\xee\xce\x57\x78\x6c\x2a\x78\xdb\x4e\x31\x75\x22\x9c\x35\xc1\xc8\x54\x96\x22\x25\x54\xc3\xc6\xf5\x9c\x73\xdd\xc7\xe4\x70\x0e\x4c\x9b\xd9\xae\xdd\xe8\xbe\x1b\x0f\x7b\xe0\x58\x54\x85\x6d\x6f\x60\xe6\x2a\xa4\xc9\x3e\xb1\xa4\xb4\x17\xa2\xa1\xf3\x18\xb7\xb6\x03\x27\x40\x78\x94\xec\x04\x87\x4d\x2c\xb0\xeb\xf8\x79\x7f\x2e\xe2\x03\x6f\xe2\x18\x92\x1d\x84\x07\xc5\xe4\x0c\x8c\x4f\x7a\xb7\xee\x32\x00\xed\xc5\xb7\x6e\x98\x0a\x56\x88\xca\xc3\xd0\x3f\x9f\x6a\x03\x18\x56\x00\x29\xb3\xe5\xe6\x20\x05\xe2\x4c\xf6\x46\xa4\xb1\xd1\xe6\x0d\x17\xfc\x9d\x63\x1e\xcd\x3c\x80\xb1\x1c\xaf\x30\x96\x96\xf8\x56\x8c\x65\x83\xb6\x38\x74\x31\x04\xaa\x3d\xa7\x0b\xf0\xf7\x9d\xe7\xb2\xd0\x14\x2d\x79\xa5\x48\x59\xa1\x34\xc5\x5c\x57\x36\xf2\x7a\xfd\xbd\x36\x20\x9b\x51\x45\xb8\x56\x24\xb1\x11\xe7\xb8\xdf\x7b\x0a\x6b\x0f\xf6\xea\xd2\x7c\xe0\xf9\x98\xda\xe0\x48\xdf\x6b\xfb\xba\x71\x13\x37\x4f\x2c\xa3\x1b\xdc\x52\xb7\xc5\xea\x57\x9a\xe5\xcb\xc8\x3a\x58\x84\x00\x99\xe1\x9e\xa7\xe8\x99\xc9\x72\xc2\xc5\x6e\x70\x72\xbb\xf5\x12\xad\x72\xcd\xb7\x72\xec\x55\x5b\x8d\x2f\x6c\x10\xbb\xdb\x69\x82\xcc\x31\x48\xaa\x0d\x75\x34\x79\x36\x63\xf3\xab\xd8\x12\xdb\x36\xfb\x19\x63\x8b\x67\x4c\xcd\x96\xbb\xe0\xbb\x0d\x5b\x1f\x04\x5c\x80\x4f\xbe\x2e\x2c\x53\x67\x18\xd0\x4d\xcc\x6a\xdb\xd1\x20\x87\x4e\xb0\xd6\x12\x13\xde\x9a\x03\x6c\x1c\x78\x6b\x47\xbe\x06\x3a\xe2\x8d\xef\xb6\x05\x98\x1f\x3a\xa5\xdb\x96\xc9\xba\xaa\xe6\x0c\xa7\x3b\xe9\xac\xdd\xd6\x12\xd9\x51\xb5\x35\x3b\xee\x2e\xc2\xd0\x11\xd9\x67\x54\x64\xf8\xae\xe3\xa1\x5b\x31\x45\x3d\x59\xc4\x3a\x3a\x97\xd3\x42\xf3\xa4\xcc\x68\x51\xa1\x0c\x20\x1c\x71\x48\xa2\x1f\x5a\x54\x9a\x16\x3a\x2a\xbf\x4f\xc3\x0a\xaf\x5c\x07\x3e\x25\x31\xa4\x00\x9a\x31\xe1\x8d\xe0\x18\x6d\x4c\x6e\xd8\xad\xa1\xe0\x79\x9e\x2d\x9a\x80\x5e\x2f\x79\x93\x71\xa5\xab\xaa\xf2\xc0\xa4\xc4\x3a\x28\x75\x4e\x2a\xf4\xaf\x10\xc2\x2d\xb3\x79\x22\xc5\x94\xdf\x1e\x2e\x80\xfb\xc3\xdb\x77\x2f\x61\x48\xf8\xad\x0a\xdf\xf6\xbf\xaf\x04\x6f\x57\x93\x84\x9f\xab\xf8\x6c\xff\xa0\x8a\xce\xb6\x59\x84\xd6\x84\x66\xbb\xc0\x5f\xb7\x6d\x3d\x43\x7e\xfd\x34\x9d\x4b\x94\xa7\xf6\x2a\x97\x42\x71\xc3\xbb\x43\x0e\x48\x78\x09\xeb\x38\x7e\x78\xfb\x6e\xb7\xf1\xbe\x43\x70\xaf\x6f\x43\x70\xef\x10\xdc\xfb\x4b\x0a\xee\xf5\xf8\x05\x42\x7b\x9d\x17\xaf\xf9\xdb\x86\xa2\x56\x08\xa8\xa9\x3e\x45\xcf\x9c\xee\x53\x46\x0d\x64\xda\x1d\x8d\xdf\xd8\x17\xab\x02\xa3\xb5\xa4\x15\x16\xf1\x81\x16\xe3\xc3\xdb\x77\xbe\xdf\x3d\x04\xc2\xa5\x5c\x99\x61\x5e\xca\x9c\xb3\xf4\xe5\xd5\xf7\x1b\xd2\x82\xc5\x31\x66\xaf\x96\x3b\x74\x71\x7f\x10\xe3\x87\x0f\xcd\xa2\x8e\x15\x39\xc2\x97\xc8\xcb\xab\xef\x8f\xdc\x1a\x37\xa9\x0f\x83\x32\xce\x3e\x06\x9b\x50\x1d\x32\x2f\x48\xc4\x46\x04\xbd\x09\xa9\xfb\xb9\xb1\xd7\x95\x88\x43\x05\xea\x76\x50\xff\xcc\xa8\x22\x37\x8c\x89\x60\x30\xd0\x2f\x34\x76\xf6\xc1\xf6\x02\x39\xbc\xad\x7f\x22\x14\xf4\xc0\x02\x4e\x95\x7b\x4e\xb3\xe8\xf9\x83\x61\xf1\x0a\xc6\x84\x01\x53\x3a\x82\xdd\xc7\x2c\xf9\x2c\x29\x18\x28\x1e\x67\x2c\x04\x9c\x3a\x02\xc8\x30\x9a\x34\xfb\x23\xd6\x60\x53\x2d\x76\x73\x18\xd4\x26\xc5\x81\xf5\x20\x47\x34\x77\xb5\x10\xc9\x85\x21\x33\x0d\x81\xe4\xa4\x4b\x0e\xfa\xa6\x8e\x6b\x87\x08\xa8\x2b\xde\xea\x85\x48\x90\xc6\x99\x77\xa6\x1b\x0a\xb6\xdb\x29\x17\xc0\x92\x16\x58\xca\xcb\x0d\x17\xfc\x46\x72\x56\x70\x99\x5a\x5b\x56\x32\x63\xc9\xdd\xc6\x6a\xc2\x95\xa8\x51\x73\xe4\x56\xff\xd3\x3a\x06\xd7\x4a\xc8\x60\xdf\xa4\x84\x5a\x56\x69\x89\x41\xdd\x9b\x0e\xfc\x9c\x6a\x72\x02\x99\x19\x8f\x7e\xf7\x6c\x7e\x74\x3a\x01\x17\x5e\xf4\x26\xa5\x05\x9d\x33\xcd\x8a\x11\x3a\x8f\xce\x64\x59\x28\x72\x72\x34\x3b\x3a\x1d\x91\x39\x17\xa5\xde\xe0\x2e\x77\x72\x34\x37\xaf\x51\x91\x12\x85\xd5\x59\xc8\xc9\x91\x3a\x3a\x75\x1a\x4f\xef\x07\x3b\xc1\x03\x09\xd5\xd4\xdc\x6f\x9b\xcb\x2b\xdb\x35\xa6\x58\xce\xc7\xb3\x23\x48\x5e\x2b\xff\x5a\xeb\x53\x0c\x50\x09\x37\xa1\x77\x68\x1e\x98\x46\x0d\xaf\xf3\x82\xfc\xbf\x93\x1f\x9f\x8d\xff\xfd\xa7\xdf\x9c\xfc\xd7\x04\xff\x38\xfd\xfa\x44\xfd\x63\xfe\x8f\xd9\xe9\xe9\x6f\x7e\xfd\xc5\xea\xee\x45\x12\x93\xc6\xbc\x84\x7b\x24\x28\x8f\x6a\x3a\xab\xec\x65\x9e\x4a\x39\xc7\x0c\x40\xc6\x82\x11\x6a\x76\x54\x7b\x37\x83\x40\xfe\xae\x6a\x82\x9d\x5f\x5e\xf8\xba\x08\x4d\xdb\x6b\xe4\xbb\xf5\x4f\xae\xad\x7f\x7d\x99\x68\xcc\x64\xaa\xb1\xea\xb1\x99\x41\xca\x0b\x60\x5a\x15\x03\x15\xb6\x2b\x7d\x6f\x29\x02\x3a\x2a\x43\x18\xc5\xc4\xaa\xdd\x2b\x70\x4e\xea\xde\xf0\x8d\x65\xe9\xfe\x3f\x03\x63\xf2\x46\x4a\xbb\xfd\x38\x93\xbf\x37\xbd\x6d\xfe\x73\x76\x46\x3e\x2e\xd9\x17\x6f\xcc\xe1\xb6\xe5\x3d\x41\x2b\x31\x95\xf2\xb8\x6e\x14\x68\x04\x8d\xeb\xf3\x5b\x21\x1f\xc4\xba\x95\xc0\x0c\x69\xc1\x5e\x90\xa3\xf3\x7b\xca\x33\x43\x39\x8e\x46\xe4\xe8\xd2\x46\x2b\x71\x71\xeb\x2a\xa9\xbd\x62\xb7\x05\x4d\x59\xda\x54\x50\xcd\x8d\xf5\x1b\x28\x80\xff\x8e\x15\xb7\xec\x5b\xb6\xf8\x8f\x0d\xae\x5f\xf5\x2f\xae\xb0\xd6\xfe\xe2\x3f\xa0\x8c\x7e\xdb\x27\x86\xdd\xb9\x5e\xe4\xec\x3f\xe6\xb4\x49\x45\x5a\x7b\xf7\x1d\xcd\x63\x66\x13\x38\xed\xfd\xf8\x93\xe1\x2e\xef\x9f\x4f\xaa\xa3\xfc\xf3\x5f\x94\x14\x2f\x8e\x82\x5c\xfc\x72\x6e\x6e\x4a\xae\x17\x47\xa4\xb6\x88\x17\x47\xb0\x0a\xfb\xab\x03\xc6\x8b\x23\x33\xfe\x91\xb9\xb5\x5a\xde\x94\xd3\x17\x47\x37\x0b\xcd\xd4\xe8\xf9\xa8\x60\xf9\xc8\x90\xf8\xff\xa8\xfa\x3e\xfa\xb9\xf9\x60\xd9\x95\x81\x5b\x1a\x9e\xd5\x26\x7c\xfd\xff\xfd\x73\xbd\x5a\x67\x7b\x23\xc6\xaa\x61\xb9\xf1\xd5\xb6\x7c\xb5\x68\x24\x6d\x7c\xdc\x92\xb1\xb6\x71\x4f\xf7\x58\x1d\x60\xa3\x72\x71\xb5\x57\x5f\x0f\x67\x7f\x1e\x88\x88\xeb\x50\xc2\xbf\x09\xd4\x7d\x60\x73\x04\xfd\x5e\x30\x1e\xc6\x5c\xa4\x13\x08\x62\x72\xf9\x35\x0c\xa1\x06\x5f\x2e\x20\xd2\xc2\xb2\x1a\xab\x0a\x44\x83\x93\x11\x3f\xda\x6e\x40\x16\x4e\x12\x96\x6b\x83\x3e\x0e\x54\xfc\xa0\x5b\x09\x81\x8d\xfb\x35\x5f\xb1\x03\xef\xc5\xc1\x10\x76\xc8\x32\x49\x54\xd8\x7a\x25\x08\x8d\x2d\x61\x36\xa7\x9f\xde\x42\xc5\xe6\x17\xe4\xdf\xbe\xfa\xfd\xef\xfe\xd0\xf0\x22\x92\x12\x96\x7e\xb3\x31\x29\x50\x57\xe8\xad\xf6\xba\x6c\x7a\x9b\x38\x31\x7d\x52\xa5\x23\xf2\x05\x25\x97\x9c\x52\x15\xd3\xe4\x06\x3c\x27\xca\x7c\x33\x38\xdf\xb8\x1c\x2f\x22\x41\xd7\xfe\xb5\xc3\x70\x4f\x29\xb3\x05\x79\xfe\x15\x16\xf8\x85\x49\xad\x10\xc3\x1f\x3f\xfd\x34\x59\xb3\x18\xae\xc8\xbf\x8f\x96\x66\x6a\x24\xbd\x12\x58\x17\x73\x4c\x37\x4c\x12\xfc\xb0\x0a\x86\x9c\x8e\x53\x95\xaf\x72\x3a\xcc\xaf\xa4\xed\x24\x74\xa8\x74\xf8\xbb\xdf\x36\x1f\x18\x2e\xf8\xbc\x9c\xbf\x20\xcf\x1a\x5e\xd9\x5d\x0d\x09\xeb\x00\xe3\xb9\x40\x8a\x45\xb9\xe8\x1c\x72\x73\x05\x9e\x96\xe1\x15\xd3\x3b\xf3\x95\xbd\x2c\x64\x5a\x26\xac\xc0\xea\x9b\x2e\x72\x24\xc0\xbc\x50\x99\xd3\xdc\x4a\x2b\x19\xb2\x4f\x66\xaf\x58\x55\x62\x56\xa4\x50\x02\x95\x8b\x5b\x55\xa5\x93\x07\xfc\x37\xda\x30\xae\xf9\xec\x61\xc6\x80\x40\x7b\x19\xc6\x16\x7b\x95\x42\xf1\x94\x15\x2c\x25\x94\xdc\x96\xb4\xa0\x42\x33\xac\x70\xb7\x19\x7d\x78\x49\xc8\x63\x79\x1a\x64\xfa\x6f\xc3\x24\x16\x01\x21\xe6\x36\x0b\xb6\xca\x40\xc0\x43\xbb\x43\x40\xcf\x9f\x7d\xb5\xf1\xdc\xf9\xf7\x36\x48\xdb\x4e\x16\xfb\xf1\x7c\xfc\x7f\xe9\xf8\x6f\x3f\x9d\xd8\x3f\x9e\x8d\xff\xfd\xbf\x47\x2f\x7e\xfa\x32\xf8\xe7\x4f\xa7\x5f\xff\xba\xa1\xa7\x4e\xd6\x42\xb5\x53\x9f\xe7\x28\xa0\xb5\x17\xf0\x3c\x32\xa3\x6e\x2a\x60\x3c\x26\x47\x30\xa5\xcd\xef\xd8\xe9\x6e\x92\x8e\x77\x70\xd1\xf5\xb2\x1f\x36\xe1\x81\x36\x19\x22\x67\xcd\x6d\x96\x13\x2b\x37\x4d\x12\x39\x3f\xdb\xa0\x6d\x0e\x56\xd0\x28\xe0\x99\xf6\x8e\x8a\x05\xa9\xd0\x38\x8a\x34\xcb\xd7\x4d\x41\xa2\x02\x9a\x14\x52\xa9\x9a\x3d\xf3\x8e\x11\x2f\xf8\x20\x71\xb8\x61\x09\x05\xa9\xb0\xb8\xe1\xba\xa0\xc5\x22\x10\xa4\x6d\xad\xb1\x0d\xb3\x29\x15\x9b\x96\x19\x39\x51\x8c\x91\x89\x90\x29\x5b\xa5\x33\xa7\x48\x4d\xe8\x0d\xcf\xb8\x5e\xa0\x52\x2a\x91\x62\x9a\x71\x2b\xa6\x3a\x97\xb1\x36\x6c\x50\xb0\x5b\xf6\x89\x70\x8d\x95\x94\xd1\x35\xf8\x24\x15\xea\xf9\xf3\xaf\xfe\xed\xaa\xbc\x49\xe5\x9c\x72\xf1\x66\xae\xcf\x4e\xbf\x3e\xf9\x6b\x49\x33\xd0\x9e\xbc\xa7\x73\xf6\x66\xae\xb7\x72\x24\xaf\x73\x1c\xcf\x7f\x17\x71\x95\x4f\x7e\xc4\x0b\xfb\xd3\xc9\x8f\x63\xfb\xd7\x97\xee\xa7\xd3\xaf\x4f\xfe\x6b\xb2\xf1\xf9\xe9\x97\x66\x0d\x01\x1a\xf8\xe9\xc7\x71\x85\x03\x26\x3f\x7d\x79\xfa\x75\xf0\xec\xd4\x61\x84\x7f\x09\x13\xb2\x55\xc8\x06\x42\xfd\xc1\x4c\xc9\xb6\x0f\x2f\x20\xc3\xb3\xc0\xa4\xbc\xfc\x7c\xd5\xb4\xbc\x32\x79\x78\xbc\x2e\x3b\x78\x52\x1b\x24\x30\x42\x2f\x77\x11\x99\x2a\x7c\x57\xf6\xe8\xe5\x35\xa2\x14\x81\x47\xc0\xab\xae\x80\xae\x18\xbc\xf4\xf3\xca\xfb\x3f\xdb\x98\xd5\x40\x47\x0d\x76\xb1\x45\xdd\xa5\x54\x82\x36\xbf\x9e\xbc\xd2\xa7\x9a\x58\xa3\x93\x1f\x8c\xdc\x83\x91\xdb\xb7\xc1\xc8\x1d\xb6\xc1\xc8\xbd\x82\x84\xc0\xd8\x4d\xb3\x4c\x3e\xa8\xca\xee\x09\x25\xec\x45\x03\x42\xda\x8c\x89\x2c\xbe\x1a\x91\x5c\x1a\xc6\x8b\x83\x41\x4c\xde\xb3\xa2\xe0\xe0\xfa\x8e\xdf\x14\xac\x2a\x87\x1f\xc6\xc5\xed\xc8\xfe\x91\xb2\x3c\x93\x8b\x79\x53\x31\xaa\xfd\xc4\x2b\xd9\x45\xee\x38\x44\x6a\xb0\xb9\x0c\x36\x97\x4d\x63\x0d\x36\x97\x7f\x0d\x9b\xcb\x60\x48\x19\x0c\x29\x83\x21\x65\x30\xa4\x0c\x86\x94\xc1\x90\x32\x18\x52\x06\x43\xca\x60\x48\x21\x83\x21\x65\x30\xa4\x0c\x86\x94\x3d\x1b\x52\xaa\xa6\x6a\xd5\x7b\x0e\xa4\x58\xe9\x57\x16\x6a\x55\xcb\x85\xa8\xc9\xe9\xb9\xea\xea\xaa\x35\x3a\x2e\xae\x95\x4b\xd8\x01\xea\xac\x49\x58\x6d\x7e\x5d\x85\xa7\x55\x68\x6d\x51\xf1\x69\x70\xed\x1d\xd4\x4c\x83\x9a\x29\xe2\xdd\x41\xcd\x54\x6b\x83\x6b\x2f\xb4\x41\x23\x35\x68\xa4\x06\x8d\xd4\x76\xd0\x1b\x34\x52\x83\x46\x6a\xd0\x48\x2d\xb7\x41\x23\xb5\xf6\xbd\x41\x23\x55\xb5\x41\x23\x35\x68\xa4\x06\x8d\xd4\x63\xb9\xf6\x4e\xcd\xbd\x71\x3f\xb6\xf9\xf6\x92\xd0\x1b\xf4\x2b\xf7\xd5\xe0\x0d\x3a\x78\x83\x0e\xde\xa0\x55\x1b\xbc\x41\x7f\xb9\xde\xa0\x51\xaa\xf3\xd0\x41\xb4\xae\x38\x47\x2f\xce\x9a\xa2\x1c\x58\xe4\xbc\x90\xf7\x3c\x5d\x93\x48\xa4\xee\x5e\xea\x33\xd5\x07\x44\x73\x4e\x45\x19\xba\x8c\xb2\xc3\x38\x8c\x0e\x5a\xf5\x41\xab\x4e\x06\xad\xfa\xa0\x55\x5f\xd3\x06\xad\x3a\xb4\x41\xab\x3e\x68\xd5\x07\xad\xfa\x76\xd0\x1b\xb4\xea\x83\x56\x7d\xd0\xaa\x2f\xb7\x41\xab\xbe\xf6\xbd\x41\xab\x5e\xb5\x41\xab\x3e\x68\xd5\x07\xad\xfa\x61\xfc\x3c\x87\xe0\xd9\x41\xff\x32\xe8\x5f\x36\x7e\x31\xe8\x5f\x3e\x2f\xfd\xcb\xa0\x54\x19\x94\x2a\x83\x52\x65\x50\xaa\x0c\x4a\x95\x41\xa9\x32\x28\x55\x06\xa5\xca\xa0\x54\x21\x83\x52\x65\x50\xaa\x0c\x4a\x95\x7f\xf9\xe0\xd9\x96\x48\xd9\x0f\x6f\xdf\x05\x8e\x88\xe8\xa0\x18\x9c\xc6\x19\xbd\x67\x58\xeb\xca\xf1\x2d\x83\x3f\xce\xa0\x0f\x1a\xf4\x41\x9b\x3f\x19\xf4\x41\x8f\xad\x0f\x1a\xfc\x71\x9a\xda\xa0\x3a\x5a\xdf\x06\xd5\xd1\xa0\x3a\x1a\x54\x47\x83\xea\x68\x50\x1d\x0d\xaa\xa3\x41\x75\x34\xa8\x8e\x06\xd5\xd1\xa0\x3a\x1a\x0a\xd8\xec\xa8\x80\x0d\x14\xa6\x39\x7c\xf1\x1a\xa8\xb7\x0e\xbf\xaf\x16\xae\x81\x67\x8d\x45\x6b\x70\xc2\xf0\x68\x5d\xc1\x1a\x89\x87\x6f\xb5\x52\xcd\xad\x1d\xf1\x80\x55\x6a\x96\xf0\x5e\xbd\xd6\xbc\x15\xed\x4a\xc1\x81\x21\x9c\x97\x99\xe6\x9a\x09\x2a\x92\x05\xf0\x0b\x1f\xde\xbe\x23\x73\x2a\xe8\x6d\x50\xfe\x7d\x29\x88\xf3\x42\x03\x96\xd2\x05\x70\x48\x9e\x1d\xcc\x32\x1f\xab\x1b\x56\xdf\x87\xc4\x7a\xbe\xa0\x3d\x88\x87\x41\x75\x6f\xc3\x40\x1b\x2a\x06\xc5\xef\x1b\xea\xde\x0f\xf1\xcc\x43\x3c\xb3\x6f\x43\x3c\x73\xd8\x86\x78\xe6\x1a\x76\x83\xc0\x65\x57\x77\xdf\xfc\xed\xaa\xee\xd7\x50\x60\x8f\xca\xfb\x29\x9b\xd2\x32\xd3\xab\x8c\x67\x99\x83\x9a\xd9\x2b\x52\xc9\x2b\x7c\xb3\x83\xe1\x43\xb1\x8c\x25\x5a\x16\xeb\xb8\xda\xda\x52\xaf\xec\x8b\xf6\x0b\x5c\x66\x6d\x69\xc7\x6a\x33\x26\x8d\x58\x69\xdb\x6c\x09\xe0\x10\x9d\xcc\x5e\x7f\xca\x41\xe5\xde\x60\xb0\x59\x99\xfd\xf2\x47\x78\x21\x0d\x19\x36\xd8\x30\xa3\x37\x2c\xf3\xa0\x70\xb8\x1d\x3c\x92\x27\x96\x7b\xac\x7e\x01\x46\xf9\xfc\xfd\xab\x75\x37\x22\x5c\x60\x93\xb9\x88\x6c\x36\x19\xad\x4c\x7d\xa3\x20\x71\xbe\x61\xee\x16\xe9\xb8\x27\xa0\x44\xf2\xaa\x05\xc4\xb8\x23\x42\xc9\x1d\x5b\xa0\xd5\xa2\x16\x6c\x3f\xa3\xeb\x75\xdd\xd8\x0a\x06\x48\x1f\xce\xc0\x1d\x5b\xc0\xe7\x4d\x38\xbc\x0e\x95\x0d\x6a\x74\x12\xa1\x4a\x27\x40\x64\xef\x58\x13\x60\xf1\xb9\x5b\x46\x33\xaf\xdd\xaa\xed\x36\xed\x8e\x2d\x36\x3d\x5e\xda\x27\x03\x07\xaf\xba\x36\x7b\x62\x7e\xf0\x9a\x3b\xbf\x0d\x34\xcf\x33\xce\xd6\xe3\xdc\xb0\x45\x89\x16\xc4\x2f\xb5\xc3\x44\x37\x1e\xa8\xb0\xcf\x50\x37\x09\xe7\xe4\x58\xe1\xce\x9b\x1b\x34\xe3\xb9\x65\xa7\x90\x89\x6a\xdb\x7e\x6c\xdf\xd3\x8c\x07\xac\x1d\xdc\xa5\x0b\x31\x22\xef\xa5\x36\xff\x7b\xfd\x89\x1b\x7a\x64\x8e\xd3\x2b\xc9\xd4\x7b\xa9\xe1\x97\x9d\x40\x0a\x27\xb8\x4b\x38\x59\xc1\x99\x07\x26\x51\x39\xad\x51\x79\x35\x41\xa3\x41\x95\x3f\xc2\xbc\x7d\x21\x8c\x84\x8f\x4b\x6e\x19\xa2\xa6\x0e\x33\x03\xcc\x4b\x05\x44\x59\x48\x31\x46\x6d\xd4\xba\x11\x2c\x1c\x65\x51\x03\x63\xef\xc1\xec\x40\xa0\x13\xc3\x27\xc8\x54\x66\x46\x94\x20\x69\x09\x0b\x06\xfe\xc6\xd0\x21\x9e\xb4\x8c\x03\xe6\x3e\xb4\xf6\xc5\xec\xec\x26\x44\x8a\xad\x05\x9d\x86\x9d\x6d\x38\x26\x40\x23\xde\x9a\xab\x1b\x47\x53\x36\x9c\x8f\xa0\x2b\xc4\xc2\x73\x9a\x9b\xb3\xf1\x77\x83\x6c\x01\xc4\xff\x24\x39\xe5\x85\x9a\x90\x73\x10\xdb\x32\x56\x7b\xc6\xd1\x7a\x14\x74\xb3\x61\x28\x10\xab\x0c\xde\xbc\xa7\x99\x41\xfb\x60\x03\x23\x2c\x43\x22\x60\xc4\xac\x25\xe2\x37\x22\x0f\x33\xa9\x10\x73\xa3\x8a\x93\x2b\x72\x74\xc7\x16\x47\xa0\x6d\x69\x1c\x2a\x3c\x61\x47\x17\xc2\x1a\xbb\x57\x4e\x8d\xa7\x31\x52\x64\x0b\x72\x04\xcf\x8e\xfa\xd3\xd1\x8d\x14\x83\xa6\xa8\x28\xa2\xd9\x65\x04\x4a\x6f\x39\x02\x9f\xc6\x77\xe5\x0d\x2b\x04\xd3\x4c\x8d\xe7\x34\x1f\xdb\xf3\xa7\xe5\x7c\xcd\x99\xae\x7b\xd8\x18\xd1\xba\x95\x87\x6a\x38\x31\x57\x2b\x3d\x39\x42\x82\x79\x6b\x42\x81\x15\xde\x24\x14\x5f\xb5\x0e\x32\x0f\x3c\xcb\x9a\x34\x6d\x2e\xb5\x17\x06\x59\xf9\x2d\x3c\x51\xa7\x78\xc8\x8c\x94\xe1\xb6\x15\xb4\x05\xcd\x1c\x5b\x03\xdc\x94\x91\x2a\x93\x4b\x4c\xc1\x93\x9e\x5f\x5e\xac\xdd\x80\x3a\x2f\x09\x9f\x10\xcd\xb2\x0c\x5d\x7e\x8c\xa4\xa1\xa5\x95\x34\xd6\x72\x96\x79\xd0\x7f\xa0\x0f\x6a\x9c\xec\x8d\x94\x19\xa3\xab\xcf\x91\x43\xf5\x8a\x90\xf6\xb9\x36\xec\xd9\xf5\x52\x3f\x96\x0a\xb0\x4f\x79\xc6\x13\xae\x1d\x55\xac\x38\x61\x90\x96\xe1\xa3\xf5\xc7\xfd\x62\x4a\x38\xb0\x6c\x8a\xe9\x51\xc5\x6d\x73\x45\xf8\xad\x90\xc5\xfa\x5b\xb2\x9f\xd8\xb8\xa5\x9b\x60\xb8\x64\x7b\x15\x14\x5b\xbd\x88\xcb\x42\x48\x4f\x80\x7e\x57\xef\xa6\xa6\xd8\xb0\x43\x38\x02\x83\xba\xa2\x9a\x9a\xc7\xbc\xe5\x61\xbd\x1e\xc0\xd7\x33\x56\x30\xd4\x72\x7b\x23\xa7\x7e\x90\x44\x95\xb9\x4d\xf5\xb4\x34\x0c\xa0\x92\xf5\x6e\x25\x56\xce\x7a\x01\x87\x17\xae\x1f\xe0\x3a\x70\x62\x73\x49\xa7\xec\xad\xb6\x8a\x1a\xd8\xff\xb9\xbc\x67\x4e\x6b\x82\xe4\xb3\x89\x16\xe5\x33\xaa\x58\x25\xc5\xab\x32\x49\x18\x4b\x59\x8a\x0f\x2c\x29\x66\xd3\x29\x4b\x34\xbf\x67\xd9\x02\xcc\x6e\x0a\xd9\x4d\x3f\x27\x21\xd7\xa3\x4d\x9c\x66\x05\xbf\xa5\x99\x09\xf6\x49\x3b\x5d\x12\xe1\xa0\x2b\xaa\xab\xd8\x0a\x07\xa9\xb5\xbd\xcf\xa8\x22\x53\xca\x33\x73\x62\xd7\x43\xef\x9a\x25\xb3\xcb\x82\xdd\x73\xf6\xf0\x9d\x50\x74\xca\xde\x50\x9e\xbd\x91\xc5\x03\x2d\xd2\x00\xa4\x1d\xa0\xb9\x76\x18\x0f\xe1\x16\x68\x9a\x05\xf9\x67\x38\x73\x0b\xe6\xb5\xdd\x9e\x7b\x92\x93\x2d\x46\xd5\x6c\xad\x1d\xdd\x80\xef\xc1\xc1\xeb\x32\x33\x9b\x02\xce\x20\x94\xa8\xf2\xc6\xdf\x02\x52\xb0\x29\x2b\x98\x58\x55\x3d\xd9\x1d\x72\xf3\x08\x3a\xf2\xc4\x36\xa1\x9a\x66\xf2\x16\x00\x0d\xbe\x90\x56\x41\x83\x06\x74\x0a\x13\x70\x47\x79\xda\x20\x04\x81\x6a\xc8\xf0\x84\x50\x22\x17\x71\x55\xa0\x70\x5d\xbf\x6f\x3f\x9c\x7f\x7c\x7f\xf1\xfe\x9b\x17\x40\xca\x37\x6d\xe2\xea\x85\xe5\x8a\x94\xf0\x16\xda\x88\x41\x0d\xa8\x56\x35\x15\xd8\xb8\x20\xa5\xf0\xb6\xe5\x1b\x36\xa3\xf7\xdc\x5c\xf8\xc2\x2a\x0d\xef\x59\x01\xfe\x26\x29\xd5\x94\x64\x52\x99\xbe\x33\xa6\x14\x59\xc8\x12\x5d\x44\x53\xc6\xd6\x7b\xba\x81\x87\x8f\xd2\x54\x40\x6d\x60\x6b\xc1\x5c\x5e\x3f\xb9\x61\xe6\xa9\x53\x44\xc7\xa0\x97\x16\x7c\xea\x34\x38\x0d\x0a\x1a\xb2\xd1\xc2\x39\xde\xf0\x95\x79\xba\x69\x27\xea\xea\xac\x78\xf7\x5c\x54\x68\xa1\x9d\xd7\xa9\xb4\xf0\x5f\xeb\x94\x5a\x4d\x5e\xa7\x1b\x18\xb8\x66\x41\x1f\xbd\xe5\xbe\xc3\x33\xdd\x41\x93\xb5\xd9\x85\xb7\xb6\xca\xc0\x73\x71\x49\x78\x5b\xc7\x7a\x04\x2e\xa0\xbb\x24\xc1\x83\x6f\xf0\xe0\x1b\xbc\x69\xac\xc1\x37\x78\xf0\x0d\x5e\x7a\x75\xf0\x0d\x1e\x7c\x83\x07\xdf\xe0\xc1\x37\x78\xf0\x0d\x1e\x7c\x83\x07\xdf\xe0\xc1\x37\x78\xf0\x0d\x26\x83\x6f\xf0\xe0\x1b\x3c\xf8\x06\x1f\x2c\xac\x3c\x50\xcd\xb4\x6a\x59\xde\x56\xef\x22\x4b\x68\xb8\x50\xa5\xe9\x3c\x77\xe8\xa1\xce\xc6\x2f\xeb\x5d\x2c\x2a\x31\xdc\xcc\x77\x4d\x2e\x68\xad\x60\x6e\x67\x83\x45\xbc\x2d\xa8\x6e\xee\x09\x54\x87\x2b\x7e\x4f\x9e\xdc\xd6\x16\xf5\x54\x4d\x38\x75\x53\xe6\x47\x36\x8d\xf0\x06\x5b\xfa\x22\xd0\x68\x5b\xc0\xd4\x2d\x95\xd6\x95\xd1\x9b\x32\xf7\xe0\x18\xd6\xec\x4f\xbb\x76\x09\x46\xfc\x72\x56\x0e\x7b\x1e\xed\x1a\x1a\x11\x46\xeb\x95\x06\xa6\xe0\x92\xea\xd9\xb6\x0e\x04\x17\x16\xa0\xe0\x59\x01\x6e\x36\x39\x67\x09\xab\xb9\xee\x02\xaf\xcb\x68\x6a\x7f\x34\xfc\x5f\xc1\xec\xb3\x11\xb2\x57\x2d\xd8\xa7\x72\xf1\x35\x3c\x25\xa1\x06\xdd\xf3\x94\xfc\xe7\xd5\x87\xf7\x67\xdf\x48\xcb\xe2\x18\x89\x54\xd9\xea\xe4\x73\x26\xf4\x88\xa8\x32\x99\x11\xaa\xcc\x62\x78\xc1\xd2\x2b\xd0\x9c\xcd\xa9\xe0\x53\xa6\xf4\xc4\xf6\xc6\x0a\xf5\xe3\x57\x3f\x35\xa3\xde\x50\xf3\x67\xa4\x0e\xd4\xd1\x59\x7f\x57\x7b\x94\xe0\x96\x99\xc5\xfb\x3e\x41\x10\x80\xa9\xe6\x32\xb5\x8b\x7c\x80\x45\x68\x7a\xc7\x88\xb4\x8b\x28\x19\x90\xa4\x66\x72\x7c\x64\x0e\x62\x30\xd5\xbf\x9b\xab\xfb\xcf\x23\x72\xf2\x00\x56\xc2\x23\xf3\xcf\x23\x9c\x88\xf7\x73\x36\xbf\x05\x8c\x8d\x9d\x10\xca\x5f\x05\xbf\xbd\x35\x9c\x68\x33\x35\x98\x31\xc2\xee\x99\xd0\xa7\x40\xc1\xa7\x44\xc8\xa0\x13\x61\x6d\xfe\x95\xa5\x7f\x79\x82\x3f\x7e\xf5\xd3\x11\x39\xa9\xc3\xa1\x71\x30\x2e\x52\xf6\x89\x7c\xe5\x2d\xfc\xb9\x4c\x4f\xad\xcd\x50\x2d\x84\xa6\x9f\x40\x9c\x9b\x49\xc5\x04\x1a\x2e\xb5\x44\xbb\x89\x92\x73\x46\x1e\x58\x96\x8d\x91\x8b\x4f\xc9\x03\xe8\xc5\x1b\x47\x72\x5b\x85\x0e\x40\x39\x2d\x74\x8b\x77\xb9\x6b\xd7\x1f\x5e\x7d\x78\x81\xb3\x33\xc7\xe8\x56\x38\xcd\xc9\x94\x0b\x9a\x59\x5b\x97\x67\xb3\xcd\xc4\x4b\x3c\x1c\x5a\x5a\x75\x89\xb3\xcb\x4c\x4b\x5d\x16\x8d\x7c\x4f\xeb\x95\x5d\xe7\xd2\xed\x5a\xec\x6d\x05\x17\xef\x48\x1c\xf2\x88\x8e\xd1\xd1\x30\x11\x0d\xce\x2c\x5d\x60\xf2\x3e\xb8\x2d\xbd\x60\x52\x91\x2f\x03\x96\x54\x26\xca\x40\x24\x61\xb9\x56\x67\xf2\xde\x90\x17\xf6\x70\xf6\x20\x8b\x3b\x2e\x6e\xc7\xe6\x3a\x8c\xf1\xcc\xa9\x33\x20\xc3\x67\xbf\x82\xff\x6d\x03\x02\x20\xe5\xbb\x80\x03\x06\x9f\x3c\x22\x30\x80\x27\x39\xeb\x0b\x0b\xc7\xe7\x77\xa1\xae\x1b\x20\x72\xe5\xb4\x07\x4b\xfd\x9a\xab\x8d\x0e\x4d\x36\x68\x25\xa0\x02\x73\x9a\x22\x99\xa0\x62\x83\x8c\xbd\xe7\x9b\x65\x20\x0e\x3a\xa7\x64\x31\xb6\x11\x68\x63\x2a\xd2\xb1\x97\x8c\x92\x26\x37\xc5\x56\x10\x97\x7c\x6b\x24\xf4\xdd\xc5\xab\xc7\xbd\x6f\x25\xef\x8b\x71\x62\x1c\xef\x76\x15\x9f\x48\x6a\xc1\x6e\x34\xcb\x67\x74\xdb\x52\x9c\x43\xc8\xdb\x10\xf2\x36\x84\xbc\x05\x6d\x08\x79\x1b\x42\xde\xb6\x0b\x79\x1b\x42\xd6\x86\x90\xb5\x21\x64\x2d\x6c\x43\xc8\xda\xa6\x36\x84\xac\x0d\x21\x6b\x43\xc8\xda\xba\x36\x84\xac\x0d\x21\x6b\xae\x0d\x21\x6b\x16\x0e\x43\xc8\xda\x2f\x28\x64\xed\x97\x1d\xd6\x30\x58\xdc\x3f\x0f\x8b\xfb\x60\x43\x1f\x6c\xe8\x83\x0d\x7d\xb0\xa1\x0f\x36\xf4\x7a\x1b\x6c\xe8\xfd\x61\x32\xd8\xd0\x2b\x38\x0c\x36\xf4\xb0\x0d\x36\xf4\xd5\x36\xd8\xd0\xb7\xb1\xa1\x4f\x69\xa6\x7e\x51\x49\x7e\x0f\x9f\xdf\x17\x7e\x5a\x4d\xed\xdb\x98\xd5\xd7\x26\xf4\x5d\xc9\xda\x5b\x25\xec\x7d\x89\xc9\x2f\xf6\x97\xad\xf7\xc3\x5a\xbd\xb9\xcd\xb9\xe1\x27\x14\xe1\x1c\x30\x58\xfc\x7d\x1b\x2c\xfe\x83\xc5\xff\x97\x68\xf1\x07\x63\x7f\x78\x15\xad\xec\x5a\x05\x60\x7e\x58\x6f\xc4\x6c\x1e\x3a\x5e\x73\x67\x95\x76\xe1\xf0\x2e\xc6\xb4\x1a\x3f\x50\xe0\x81\xf4\x63\xf6\x3f\x91\xf3\x5c\x0a\x73\xae\xe2\xb5\x78\x9b\xd3\x8c\xb8\xfe\x22\xd2\x8c\xb8\x57\xed\xef\x37\x2c\x0c\x9a\xb2\xd6\xed\x79\x2e\x15\xab\x99\xc3\x7a\xe8\x75\x36\x1b\xa1\xc7\x68\xde\x75\x1a\xda\x1e\x7a\xa1\xda\xf7\x51\x5c\xd6\xdb\xf0\x0b\xeb\xbb\x00\x36\xe6\xbf\x96\xac\x58\x10\xc3\x0d\x55\x96\xd8\x0a\x28\x4e\xf9\x8f\xc6\xe7\x1a\x58\x8e\x37\x6c\x66\x24\x98\x62\x96\x4a\x3a\x38\x6c\xac\xac\xfa\xa0\x4e\x1b\x24\xda\xde\x18\x61\x6d\xec\x66\x47\x7e\x24\x27\x0e\xd2\xd3\x91\x83\xc4\x3a\x73\x90\x48\x87\x0e\x12\xe1\xd4\x41\xe2\x1c\x3b\x48\xb4\x73\x07\x89\x71\xf0\x20\x7b\x76\xf2\x20\xf1\xee\x0b\x24\xda\xd9\x63\x65\xd2\xad\x07\x90\xec\xd7\xe9\x83\xec\xc9\xf1\x83\x74\x83\x5e\x8c\x03\x08\xe9\x05\xbb\x03\x38\x82\x90\x43\x3b\x83\x6c\x1c\x70\xc7\x0e\x21\xa4\x8b\x53\x08\xe9\xe0\x18\x42\x62\x9d\x43\x48\x7c\x8c\x71\xab\x93\x08\xe9\x78\x86\x0e\xe8\x2c\x42\x0e\xeb\x30\x42\x1e\xc1\x69\x84\xc4\x53\xa7\x6e\xce\x23\x24\xee\x88\x74\x73\x22\x21\x68\xb2\x88\x73\x38\xfa\xc8\xa6\x08\x80\x80\xd5\xab\x6c\x9c\xb2\x91\xbf\xab\x38\xc2\x91\x25\x51\x2e\xbf\x65\x8d\xaf\x3c\x8c\x3b\xeb\x47\x9e\xcc\x3e\x86\x9a\x54\x1a\x28\x56\x81\xb6\xb8\xd9\x8e\x08\x13\x05\x4f\x66\x6e\xb2\x46\x00\xb1\x46\xf5\xcd\x59\x04\xc3\x69\xb7\x1c\x82\x38\x5e\xa1\xdd\x90\xbb\x66\xa1\x3d\xcc\xb9\xe1\xc4\x5b\x49\xda\xe6\x14\x8d\x0d\x93\x0a\x52\xc9\x2d\xe5\x43\xb2\x3a\x99\x5a\xfe\x1f\x7f\x82\x0e\xe8\xa6\xb7\x7e\xba\xd5\x6c\xc3\xc9\x52\x97\x24\x63\x35\x21\xa1\xa8\x26\x6f\x7d\x31\x36\x66\xf3\x20\x5d\x78\xda\x78\xae\xb6\x35\x51\x5c\xf8\xe2\x86\x34\x80\xae\xc5\xb3\xb6\xdd\xd2\xc8\x55\x6d\xc5\x05\x66\x4f\x99\xe1\x5c\xeb\xc0\xbf\x91\x0e\x89\xd8\xea\x60\x40\xff\x9b\x9d\x82\xe0\x81\x82\x4f\xda\xcd\x06\x0b\xfb\x01\x17\xd9\x9a\x77\xae\x61\x75\xe7\x7b\xcc\x2c\xd7\x6b\xf1\x6d\x29\xbe\x1a\xd6\x71\xbd\xb3\xd4\x5c\xbd\x66\xdd\x96\xd4\xa9\x61\xd6\x57\x3b\x4d\xef\xd4\x73\xee\x9b\x33\x2d\x35\xcc\xfc\x7a\x39\xad\xd2\x0e\xa7\xd5\xea\xb2\xb4\x66\x3e\xad\x52\xda\x61\xdc\x97\xb0\x3d\xa6\x13\x13\xb6\xc7\x75\x65\xc2\x76\x70\x87\x26\x6c\x07\x75\x6b\xc2\x76\x38\xe7\x26\x6c\xbd\x5d\x9c\xb0\x1d\xca\xd1\xc9\xee\x47\xdc\xa5\xdf\xe4\xf4\x84\xad\xdb\x7d\xef\xe6\x00\x85\xed\xd1\xdd\xa0\x3a\x41\x6c\x93\x4b\x54\x1f\x88\x75\x73\x8f\x6a\x84\xd8\x5e\x9d\xa4\x3a\x03\x68\xa3\xc3\x54\x5f\x28\x75\x74\x9e\xda\x17\xa8\x36\xba\x50\x75\x82\x54\xa4\x3b\x55\x1f\x78\xed\xcf\xb5\xaa\x11\xac\x4f\xc3\xc1\xaa\xd3\x06\x6c\x70\xb6\xea\x03\xf4\x4e\x8e\x57\x8d\x70\xdc\xa7\xfb\x55\x07\xe8\x1c\x32\x9d\xc9\x53\xf6\xc4\x0a\x2b\xde\x1c\xce\x1b\xeb\x2a\x18\x15\x7e\xae\x3c\xb2\xc2\x47\x2b\x5e\x59\xb5\xd9\xc2\x93\x75\xa5\xd6\x55\x79\x13\xfe\xbd\xec\xc2\xa5\xea\x83\xc7\xd4\x5d\x0f\x55\xba\xe0\x5e\xf4\x52\x66\xe5\x3c\x54\x91\x8d\x57\x25\xc7\x9c\x26\x77\x46\xe8\xb5\xe3\xdd\x80\xd1\x3c\x38\x90\x7f\x51\x52\x80\x40\x42\x26\xc0\x2d\x1a\x08\x06\x8f\x71\x7f\x2e\xb1\x93\x2f\x5a\x8e\xf7\x9a\xe1\x5d\x09\x22\xeb\xc7\xe3\x04\xd8\x8a\x47\xcd\x57\xba\x5e\x9e\x11\x7e\xba\x32\xa7\xab\xe5\x9f\xa3\xa7\x34\xa3\x42\xb0\xcc\x60\x11\xf4\xe5\x01\x16\xdd\xc3\x67\x33\x78\xec\xc7\x2b\xb3\x79\xb9\xf2\xfb\x9a\xe9\xd4\x72\x09\x6d\xeb\x90\x17\x1e\x51\x72\xc7\x58\xae\x02\x0b\x64\x09\xa6\x4c\x08\x38\xbc\x59\x10\x5d\xd0\xe4\x0e\xea\x11\x00\x8b\x0b\xeb\x7d\x89\x1b\xb3\xe3\x74\x3e\x70\xd8\x73\x16\xda\x02\x06\x7f\x3f\xdf\x06\x7f\xbf\xc1\xdf\xef\x97\xe4\xef\x17\xa2\xa0\x9a\xcf\x1f\x15\xe4\x3c\xcf\x33\xd0\xb2\xba\xca\x13\x98\xc8\xdb\x25\x24\x5b\xd1\x75\xf4\x0c\x95\x5d\x22\x57\xee\xe7\x15\x9a\x51\x7f\xe0\xc9\xec\xd2\x1b\x1b\xdd\xf9\x10\xc3\xaf\xe3\x65\x37\xf2\x7a\x89\x14\x53\x7e\xdb\x1e\xe3\x19\xc0\xf2\x25\x7c\x52\x99\x8d\xb1\x8b\xd2\x96\xc7\xa8\x68\x27\x84\x22\xd7\x38\x89\x7d\x04\x7a\x4e\x81\xf5\x6b\x74\x26\xea\x10\x64\xe9\x67\x3e\x02\xaf\xbe\x82\xa7\x16\x75\xe7\x32\x3d\x56\x80\x58\xd3\x32\xb3\x85\x73\x30\x8b\xdd\xba\x4b\xef\x9a\xe0\x99\x59\xfc\x98\x6a\xbc\x41\x4c\x61\xb6\x80\x2f\x85\xd4\x5f\xfa\x11\x50\x41\x58\xf0\x5b\xee\xb1\xb3\x2f\x04\x9a\xcb\x74\xe2\xb3\x51\x69\x70\x03\xa8\x77\xd8\x3c\xf8\x77\xca\x7a\x8a\x38\x34\x75\xf2\xf7\x7f\x9e\x1a\x9a\xc0\x0a\x4c\xbe\x6f\x07\xac\xf5\xd7\xe2\x53\xb4\x23\x9f\x44\x21\x53\x76\xde\xb2\x6b\x64\x79\xe7\x5e\x79\xbf\x53\xf3\xb9\xdf\xf5\x70\x53\x8a\x32\x0b\xa2\xa7\x0d\xec\x36\x74\x1e\x69\x70\x8c\x35\xfa\xe5\xa8\xe1\x66\xe9\x2b\xf0\xbf\xb9\xf2\xb3\xba\xc0\x04\x02\xf8\xf3\xeb\x4f\x2c\x29\x75\xab\x98\xdf\xdd\x0d\xca\xf0\x8d\x16\x12\xa0\x37\xcd\x32\x3b\x23\x60\x1d\xed\x03\x03\x12\x60\x0b\x0c\x04\xad\xd7\xae\xa2\x9a\xab\x69\xbb\x23\x0f\x24\xc4\x70\x30\x67\x81\x5b\x68\x75\xdb\x0d\x23\x57\x55\x42\x81\xca\x09\x50\x89\x60\x41\x92\x99\x94\xaa\xdd\x90\x46\x71\x6b\x61\x5e\xf7\x5c\xa2\x73\x24\x98\x63\x0a\x32\x37\xe4\xca\xca\xd5\xc1\xf0\xe8\xa4\x52\x7d\xc6\xdb\x6d\xbd\x73\xa9\x74\xb5\x5d\xce\xa1\xd0\x0c\x03\x8e\x0e\xe6\x1f\xb7\x05\xb3\x06\xf9\x72\x6e\x06\x7d\x60\xfc\x76\xa6\xd5\x88\xf0\x49\xab\x21\x1b\x2c\x88\x84\xd1\x64\x16\x4c\x6b\xce\x98\x56\x84\x66\x99\x2f\xd4\x19\x9c\xda\xd0\xc3\xe6\xc4\x71\x18\xad\xa3\x58\xee\x60\xe4\xa9\xcf\xf2\xc1\x5b\xbb\x5d\x23\xc2\x74\x32\x39\x6d\xf7\x3f\x4b\xe4\x3c\x37\x08\x81\x02\x0c\x6e\x16\x84\x6b\x28\x7f\x04\xdc\x50\x21\xcb\x5b\x84\x94\xf5\x5b\x52\x9e\x97\xb5\x06\x16\x91\x82\x34\x18\x61\x02\x3b\x42\xe0\x1e\x39\x76\xd5\x0c\x67\xad\x26\x00\x3f\x57\xc9\x02\xcd\x12\x45\xc1\x54\x2e\xb1\xe6\xe9\xb2\xa3\xd4\xff\x6c\x75\x87\x22\x16\xf9\x9c\xa8\xd3\x6a\xb3\x67\xfc\x76\xe6\xf6\x9a\x16\x88\x8e\xeb\x67\x24\xce\x77\x21\xc6\x21\x2e\xd2\x1d\xae\xbb\x13\xe4\xb9\xab\x1e\x56\x1d\xec\xe0\x88\x69\x56\xcc\x3d\x20\xe1\x14\xa2\xb2\xc8\xba\xf6\xcc\x6d\xda\x14\xdc\x89\xc6\x0a\x50\x61\x3b\x31\x37\x81\x70\x7d\xac\xe0\xd6\x8e\x65\x7e\x3a\x21\xe7\x44\x94\x1e\xf1\x6c\x9a\x82\x90\x7e\x06\xb6\x23\x33\x2d\x25\xab\xbe\xda\xf1\x51\xbc\xbf\x48\x17\x8f\x11\xc3\x82\xe5\x5e\x21\x1a\xf5\x3a\x42\xad\xf5\xd5\x2e\xde\x23\x24\x98\x43\xcc\xdb\x2b\x8e\x05\x70\x73\x2a\xbf\x75\x56\xcc\x47\x84\x2a\x25\x13\x5e\x95\x57\x5e\xbd\x50\xb8\x92\x18\x6b\x72\x47\xf8\x93\xce\xeb\x27\x1d\x43\x17\xea\x6d\x09\x1a\x2e\x68\xa1\x0e\x95\x1a\xde\xbd\x59\xc0\x53\x70\x57\xb8\x61\x59\x94\x57\x35\xb6\x2e\xde\xb0\xae\x45\x7b\xc5\xae\x5d\x50\x14\x42\xa8\xda\xf2\x69\xd8\x4d\x7c\x43\xa7\x29\x40\xc7\x7d\xa3\x1d\x96\xba\xea\x7a\xee\xb0\x75\xc1\x00\x55\x8b\x89\x8b\x58\xfe\xa2\x07\x80\xba\x5f\x0d\x6c\x51\x11\x14\xf5\xb6\xa2\x6c\xdc\x55\x20\x45\xbd\x75\xf4\xb9\xaa\x5a\x7c\x90\xc5\x86\x75\x75\xbc\x20\xa6\x7d\xdc\x4b\xdc\x45\xbd\x45\x45\x61\x8c\xea\x21\x18\xe4\x1b\x8d\x57\xef\x6d\x24\x5e\xae\x5a\xef\x3d\x88\x0d\xd5\xa8\xb7\x6d\x77\xe0\x7c\x9f\xc1\x1b\xf5\x76\xf0\x50\x8e\xc8\xe1\x9b\x87\xfe\x46\x9b\x61\xdf\xea\x51\xf0\x71\xe7\x71\x83\xc1\xc0\x03\x86\xba\x78\x06\xcb\xc4\x8f\xea\x19\x0d\x51\x63\x9c\x17\xcc\x70\x0c\x58\x10\xdd\x96\x1a\xed\x7e\xf4\xa3\x63\x55\xba\x45\xa2\xd4\x5b\x1f\x4a\x8c\xad\x33\x3d\x0e\x07\xec\x74\xc3\x80\xa7\x79\x03\xe5\xb9\x0f\xc3\xce\x60\x29\xf0\x81\x9d\x19\xd8\x99\x81\x9d\x19\xd8\x99\x81\x9d\x89\x6d\x03\x3b\xb3\xf5\xf0\x03\x3b\xf3\x0b\x67\x67\xba\x47\x5b\xd6\x1b\xea\x9b\x7a\x28\xb8\x7e\x40\x45\xe5\xb2\x46\x0b\x98\x2b\x67\xaf\xaf\xab\xb6\x0c\xcf\xe0\x42\x2d\xaf\x41\x1d\x66\x2d\x6c\x05\xf8\x54\x3f\x1f\x3f\x7f\xf6\xac\x8b\xe2\xab\xad\xe8\x7e\xd8\x82\x02\xfc\xff\xf6\xd5\xc6\x2f\x9a\x54\xf9\x87\xb1\x21\xd9\x8b\xea\xcd\x06\x35\x8e\xb2\xc1\xcc\x03\x58\x5f\x48\x4d\xe6\x4c\x93\xd6\x84\x17\xa4\xa6\x11\xe6\x73\x36\x72\x96\x3a\xbc\xa5\xd6\xa3\xc1\xd9\xab\x52\x22\x85\x0b\x4e\x90\x69\x84\xe5\xa5\xd7\x0a\x12\x46\x15\x04\xbf\xde\x30\xb3\x8a\x76\x2b\x95\xc6\xd8\x01\xf4\xdb\xb0\x77\xde\x2c\x81\xb9\x8d\x21\x27\x6c\x72\x3b\x21\x69\xc9\x6c\x74\x37\xba\x68\xd8\x2a\xdf\x6a\xa1\x34\x9b\xb7\x9b\xa9\x0c\xed\x28\x7c\x59\x7e\x5d\x40\xe8\x02\x44\x57\x94\x34\xcb\x16\x84\xdd\x73\x9b\x56\xc6\x0c\x0e\x1e\x25\x50\x2f\x2d\x02\x52\x7b\x0a\xb6\x5c\xbe\x64\x6d\x38\xbd\x0b\xa3\xb8\xd2\x77\xe7\xb0\xa9\x8f\x76\x25\x93\x46\x11\x4a\x9b\x7e\xd1\xa2\x08\x7f\xc2\xe1\xfe\xf0\xb1\xdd\x00\x44\x3a\xa3\xeb\x0e\x28\xba\x1f\x27\x62\x6d\x31\xb2\xb0\x76\xa1\xd5\x95\xae\xb1\xc6\xac\x09\xf9\x6f\x0d\x88\x71\x4d\xcf\xd8\x3c\x2e\x41\x40\xd8\xcc\x78\xd7\x32\x97\x99\xbc\x5d\x84\xdb\x0b\xe0\x04\xcb\x94\x4b\x3d\x00\x6e\x24\x36\x63\xfa\x8c\x91\xf7\x4b\xe7\x61\xb0\x5a\x0c\x56\x8b\x41\xcc\x87\x36\x88\xf9\x83\x98\x3f\x88\xf9\x71\x6d\x10\xf3\xb7\x1e\x7e\x10\xf3\x7f\xe1\x62\xfe\x60\xb5\x58\xb3\xa0\x81\x9d\x19\xd8\x19\x68\x03\x3b\xb3\x7e\x5d\x03\x3b\x43\x06\x76\x66\x43\x1b\xd8\x99\x81\x9d\xa9\xb5\xcf\xc1\x6a\xd1\xef\xdb\x5c\xa6\x5b\x84\xbb\xe4\x32\xdd\x10\xed\x82\xaa\xe6\x44\x8e\x33\x99\x60\xf9\x4e\x4c\x82\xe3\xec\x1b\x8a\xce\x51\x7b\x3e\x22\x7f\x93\x82\xa1\xff\xbf\x39\x49\xa0\xc3\x86\x4c\x71\xe6\xf5\x13\x75\xba\xd1\xe9\x7a\x88\x96\x19\xa2\x65\x86\x68\x99\xc6\xf6\x64\xa2\x65\x66\x54\xe1\xb9\x45\x2a\xd2\x1c\x3c\x13\xe0\xa4\x6b\x56\xcc\x7f\xa1\xb1\x33\xe6\xb8\xdb\xe3\x08\x61\xf5\xd5\x91\x42\xc8\xa4\xd6\x94\xcc\xd2\xcb\x3a\x3c\xac\x04\x8a\x09\x7f\xd3\x94\xa5\x24\x67\xc5\x18\x8f\xa8\x24\x53\x6e\xb3\x28\x2f\xdd\x0e\x0b\x9f\x76\xf4\xb0\xc7\xe0\x95\xfa\x3a\xa2\xbe\xd9\x4f\x04\x4b\x7d\x22\x3d\x6c\x5d\xa1\xc1\xae\x46\x04\x9f\x44\x3c\x4b\x57\x61\x76\x4c\xb4\xb5\x73\x7d\x1b\x29\xce\x76\x97\x48\xa3\x6a\x9b\xac\xb6\xfe\x52\xc3\x79\x4c\x25\x94\x91\x4f\xce\x97\x50\x85\x64\xb5\x0b\x57\x09\xb5\xb9\x8f\x15\xd8\x33\x6d\x62\xc4\xe5\xcb\xea\xd0\x1c\x9c\x03\x21\xcd\xf3\xce\xca\xa3\x8e\xda\x8c\x7e\xea\x82\xfe\xc6\x41\xf2\xe8\xf5\x59\x56\x5b\x5f\x5e\xbf\x17\xa7\xbf\xb5\x68\xfb\x78\x75\x5e\x56\xdb\x6e\xd4\x70\xa4\xbf\x2a\x8e\xf4\x56\xc7\x91\x5e\x2a\x39\xd2\x57\x2d\x47\xb6\x50\xcd\x91\x7e\xea\x39\x72\x80\xba\x33\xab\xad\xb7\xa6\x88\x6c\xa1\xb1\x23\x3b\xb8\x58\x64\xff\xf5\x6b\x56\xdb\xbe\x2a\xda\xac\xb6\xad\xf6\xa5\x9f\x16\x8f\xec\x68\x57\x0e\x54\x19\x67\xb5\x3d\xb2\x6e\x6f\xe3\x14\xf6\x50\x3d\x67\xb5\x6d\xa1\x40\x23\x5b\x29\xd1\x48\x7f\x45\x1a\xe9\x7f\xd8\x23\xeb\xf2\xac\xb6\xed\x4e\xf9\x81\x6b\xf7\xac\x9b\xc0\x41\xab\xf9\xac\xb6\xc7\xa8\xef\xb3\xda\x7a\xf3\x20\xdd\x6b\x00\x35\x0d\xde\xf1\xc8\x6e\xeb\xb9\x4e\x6a\xa7\xef\x5b\xb6\xe8\x6b\x17\xef\x74\xe6\xdf\xd5\x46\x74\x4c\x2b\x1c\x33\x23\x1f\x7b\xde\x44\x05\x65\x27\x51\x0f\x84\x2a\x21\x9e\x65\x1d\x46\xbb\x61\x90\x7a\x1e\x0c\x0e\x90\xc6\x5d\xf1\x94\x61\x8a\x2f\x3c\x3a\x30\x92\x39\x32\xae\xd2\x65\x26\xe5\x5d\x99\xbb\xa3\xe7\x72\xdc\x75\x18\x92\x8b\x44\xce\x9d\x3b\x35\xba\x34\x8e\x6c\xda\xab\x3b\xb6\x18\xdb\xfc\xf7\x78\xe1\xcd\xc0\x80\x66\xad\xf8\xff\x73\xad\x9c\xd2\xcf\x84\x2a\xf2\x33\x30\x6e\x82\x9c\xc0\x87\xa7\x3f\x77\xb1\x70\xd7\xea\x76\x42\x4e\x57\x03\x66\x66\x08\x92\x9d\xa0\x5a\x86\xed\x26\x88\x75\x18\xda\xe5\xaf\x0a\x81\x71\x8c\x3a\xfd\x13\x2a\x34\x3f\xf5\x8a\x90\x09\x81\x73\x00\x9c\x68\x2a\xc5\xb1\xc6\xf9\x39\xbc\xe6\x3a\xe8\x62\x04\xf7\x70\xaf\x0c\x50\xa8\x91\xc7\x2d\x4f\xd9\x94\x96\x99\xb6\x39\x12\x0d\xea\x03\x6a\xda\x61\x84\x6b\x67\x93\xb0\x4c\xf5\x54\x16\x37\x3c\x4d\x19\x24\xa5\xf6\xd3\xbf\x91\x7a\xb6\x7c\xdc\xc1\x00\x1b\x53\x32\x6b\x5d\x3b\xcf\x94\x1c\x2d\xf7\x98\xf8\x1c\x8a\xe6\x16\x3d\xcc\x98\x58\xa9\xf5\x6a\x80\xaa\x58\x27\xc6\x11\x38\x0b\xcb\x73\x65\xf9\x8c\x06\x4a\x5e\x8b\x6c\x15\x61\x82\xde\x80\xd6\xb9\x3e\xa3\x0b\x11\x68\x36\xc8\x94\x51\x5d\x16\x8c\xdc\x46\x94\x4f\xaa\xda\x41\x5c\x61\xb6\x47\xba\x19\x57\xba\x17\xd6\xe5\xea\x11\x10\xef\xf2\xa0\x03\xee\x8d\xc2\xbd\x42\xea\x01\xfd\x7e\xb6\xe8\x77\xe5\xd0\xef\x02\x03\xaf\x74\x3a\x20\x61\xdb\x3e\x23\x24\xec\x4b\x60\x3c\xb2\xad\x01\xd5\x6f\xe8\x56\xea\xab\x72\x54\x9a\x39\x88\x72\xea\xa7\x95\x73\x31\x60\x70\x86\xa0\x87\xd4\x99\x5c\x4b\x11\x14\x95\x0c\x86\xf5\xc5\x3d\x6b\x96\xfd\x0e\x63\x3a\xd1\x4d\x0a\xa6\x40\x91\xcf\xbc\x17\x47\x30\x0c\xf4\xda\x65\x29\x10\x07\x56\x29\x29\x45\xba\x1c\x19\x56\xf5\x0d\xd6\x83\x39\xa3\x42\x91\x23\xe7\x48\x72\xac\xaa\x37\x8e\x3a\x5d\x78\x97\x92\xd0\x8f\x0d\x19\x68\xc3\x34\x84\xd5\xd0\x83\xb5\x66\xb0\xd6\x84\x6d\xb0\xd6\xac\x4e\x62\xb0\xd6\x34\xb5\xc1\x5a\xd3\x6b\xfc\xc1\x5a\x53\x6f\x83\xb5\x66\xb0\xd6\x0c\xd6\x9a\xe6\x36\x58\x6b\x06\x6b\xcd\xe7\x6a\xad\xa9\x44\x8d\x43\xc8\xaa\xa1\x58\x68\x3d\xbe\xb1\xc2\x10\xd5\x3c\xa9\x42\x21\x7d\x3d\x4b\xf8\xeb\xb1\x04\xd7\x50\xd4\xdc\x56\x6c\x0d\x85\xe0\x15\x2d\x41\x67\xa9\xb5\x51\x46\xf5\x52\xec\xca\x18\x3b\x12\x5f\x9f\xaa\x02\x27\xf0\x21\x3d\xc4\x39\xbe\x76\xd1\x24\xb6\xda\xd8\x0d\xab\x42\x4d\x52\x72\xe2\x34\xa1\x50\xee\x59\x48\x5d\x7f\x28\x34\x1f\x57\x6f\x78\x1f\x5d\x50\xd8\xba\x54\x5d\x5d\xa0\xe5\x18\xfa\x4a\x33\x28\x96\x6a\xf5\x55\xc7\xc4\x20\x6e\x56\xd4\x66\x0b\x25\x97\xb1\xd2\x33\x55\xa4\x28\x85\x30\xbc\x03\x14\xd6\x16\x32\xed\x82\xcb\x91\x26\xa0\x12\xd6\x5e\x27\x94\x34\x60\x8d\x20\x6e\x54\xdb\x14\xf8\xe0\x53\x5b\x2b\xda\x66\xe3\x91\xc2\xaa\xb0\xcd\x2f\xd8\x4f\x87\x49\xf8\x9b\x06\xf0\xe4\x7e\x45\x5d\x2e\xd9\x6b\xb8\x5c\xe1\x64\x6d\x35\x6a\x9a\x65\xf2\xa1\x0b\x61\xe9\x78\x94\x7b\x67\x7e\x8b\x3e\xbd\x0f\x9d\x53\xc4\x2d\x39\xac\xc7\x32\xb2\x43\x1e\xb9\xe5\x36\xe4\x91\xdb\x4f\x1e\xb9\xc0\xd0\x18\x26\x94\x6b\x87\x15\x24\x9c\xdb\x6b\x42\x39\x42\x7e\x98\x31\xb8\x08\x05\x43\xeb\x60\x99\x69\x9e\x57\x61\xad\x0a\x77\x28\x43\x91\x71\x6a\x63\xea\xea\x17\xd0\xcc\x86\x26\x6d\x05\xff\x57\x22\x4b\x60\x3c\x08\x93\x55\x80\x10\x31\xee\x0c\xf4\xcb\x98\xc5\xcd\xc9\x92\x18\xbc\xc7\x1f\x3b\x26\x29\x0a\x85\xbd\x72\x85\x0a\x03\x23\xb3\x22\x27\x86\xc0\x65\x0b\x6b\x96\xad\xe1\xb2\x1a\x65\x8c\x18\x00\xf5\x3c\xf7\xcc\x31\x87\xb7\xfc\x9e\x89\x8a\x80\x9e\xa8\xd3\x53\xc7\x8f\x2e\xb3\x00\x11\xbd\x6f\xc3\x24\xc4\x20\xde\xae\xc4\x7d\x89\x64\x47\x8c\xb0\x86\xa8\xff\x31\x20\x94\x7f\x6a\x27\xeb\x11\x83\xe0\x95\x76\x41\x8e\xc1\x46\x57\xe4\xbc\xb5\x97\x3d\xc6\x92\x75\x09\x58\xea\xa6\xf5\xed\x11\xa8\xd4\x37\x0d\xe2\x7e\x03\x94\xf6\x1a\x9c\xf4\xf9\x64\x2b\x7c\x64\xf3\xd6\x67\x90\xfe\xe7\x89\x98\xb3\x86\xfc\x3f\x4d\xed\xb1\xf2\xff\xec\xdd\x5c\xf5\xd9\xa5\x01\x3a\xa8\x79\xea\x30\xa6\xa9\xcf\x2c\x0d\xd0\xa3\x98\xa2\x9e\x78\x42\xa0\xfd\x99\xa0\x7e\xd1\xd9\x76\x7a\x9a\x9b\xfa\x9f\xe0\x47\x35\x33\x3d\xaa\x89\xe9\xf1\xcd\x4b\xbd\xf8\x82\x6d\xcd\x4a\x07\x2f\x5b\xd1\xc7\xff\xbc\xdf\x79\x3e\x5c\xc0\xcf\x81\x1d\xce\x9f\x46\xa0\xcf\x23\x79\x99\x3f\x96\x87\xf9\x7e\xbd\xcb\x1f\x21\xb0\xe7\x40\x41\x3d\x8f\xe8\x4b\xde\x95\xbe\x77\xa2\xea\xdb\x21\xce\x3e\xbe\xe3\x3d\x83\x77\x7a\x22\xcf\x43\x06\xed\xfc\x02\xf0\x67\xaf\x60\x9d\x01\x85\x3e\x12\x0a\xdd\x5d\x70\xce\xe1\x02\x73\x06\x44\x6a\xdb\xd6\x88\xb4\x67\x00\xce\xce\x74\xe8\xfb\x09\xbc\x39\x74\xd0\xcd\x1e\x02\x6e\x1e\x23\xd8\x66\x0f\x81\x36\x83\xe5\x21\xb2\x0d\x96\x87\xd8\x36\x58\x1e\x9a\xda\x60\x79\x58\x6e\x83\xe5\x61\xb0\x3c\x0c\x96\x87\xc1\xf2\xb0\x3a\xe0\x60\x79\x68\x1c\x7c\xb0\x3c\xfc\xe2\x2d\x0f\x5d\x83\x58\xfa\x9d\xe5\xc7\x09\x5e\x39\x6c\xe0\xca\xee\x83\x56\x1e\x31\x60\xe5\x29\x29\x37\x3a\x07\xa8\xf4\x3b\xa3\x4f\x25\x30\xe5\x69\x04\xa5\x3c\x7a\x40\xca\xb6\xc1\x28\xbb\x09\x44\x89\x3a\xaa\xb9\x4c\xcf\x85\xe6\xdb\x16\xe4\x09\xcf\x50\x53\x55\x1e\x7a\x2f\x79\x4a\xf2\x52\xdb\x42\x20\x43\x65\x9e\xd6\x6d\x3c\x4c\x65\x9e\xda\xe6\x0d\xe5\x79\x36\xb5\x27\x53\x9e\xa7\x69\xcf\x86\x1a\x3d\xf5\x36\xd4\xe8\x19\x6a\xf4\x0c\x35\x7a\xb0\x0d\x35\x7a\x86\x1a\x3d\x43\xd6\xb7\x21\xeb\xdb\x90\xf5\x2d\xfe\xab\x21\xeb\x5b\x73\x1b\xb2\xbe\x75\x69\x43\xd6\xb7\xe8\xd1\x87\xac\x6f\x43\xd6\xb7\x6e\x03\x0f\x59\xdf\xa2\x27\x30\x64\x7d\xfb\x97\xcd\xfa\x36\xd4\xe8\xf9\x2c\xea\x44\x0c\x45\x22\xba\xb8\x8b\x3d\xa9\x22\x11\x43\x8d\x9e\xa1\x3c\xc4\x72\x1b\x6a\xf4\x7c\x46\xb8\x77\xa8\xd1\xf3\x39\xa3\xdf\xa1\x46\xcf\x80\x84\xd7\xb7\xa1\x46\xcf\x50\xa3\xa7\xb5\x0d\x35\x7a\x06\x6b\xcd\x60\xad\xa9\xb7\xc1\x5a\xb3\xb9\x0d\xd6\x9a\xb6\x36\x58\x6b\x36\xb6\xc1\x5a\xd3\xbd\x0d\xd6\x9a\xc1\x5a\x13\xd5\x06\x6b\xcd\x60\xad\xf9\x5c\xad\x35\x43\x8d\x9e\xa1\x46\xcf\x50\xa3\x67\xa8\xd1\x33\xd4\xe8\x09\xda\x50\xa3\x67\xa8\xd1\xb3\xbf\x1a\x3d\xb5\xa8\x9a\xcf\xb7\x50\x4f\xf7\x65\x0c\xd5\x7a\x86\x6a\x3d\x0d\x6d\xa8\xd6\x33\x54\xeb\x59\xd7\x86\x6a\x3d\x43\xb5\x9e\x0d\x6d\xc8\x99\x17\xd9\x86\x9c\x79\xb1\x6d\xc8\x99\xd7\xd4\x86\x9c\x79\xcb\x6d\xc8\x99\x37\xe4\xcc\x1b\x72\xe6\x0d\x39\xf3\x56\x07\x1c\x72\xe6\x35\x0e\x3e\xe4\xcc\xfb\xc5\xe7\xcc\x1b\xaa\xf5\x3c\xc9\x6a\x13\x43\xa9\x89\x96\xf6\x74\x4a\x4d\x0c\xd5\x7a\xfe\x35\x8b\x4c\x0c\xd5\x7a\x9e\x30\xfe\x1c\xaa\xf5\xb4\xb7\xa7\x83\x42\x87\x6a\x3d\xff\xca\x88\x74\xa8\xd6\x33\x54\xeb\xf1\x6d\xa8\xd6\x33\x58\x1e\x1a\xdb\x60\x79\x20\x83\xe5\xc1\xb7\xc1\xf2\x10\x35\xee\x60\x79\x18\x2c\x0f\x83\xe5\x61\xf3\xa4\x07\xcb\xc3\x86\xe1\x06\xcb\xc3\x60\x79\x58\xd3\x86\x6a\x3d\xcd\x6d\xa8\xd6\x33\x54\xeb\x19\xaa\xf5\x0c\xd5\x7a\xf6\x59\xad\x07\x34\x9a\xc8\xc5\x37\x1d\xce\xd8\xe3\x78\x5e\x75\x65\xb9\xd5\x52\x28\x5d\x94\x89\x2e\x0b\x96\x02\xcc\x71\x3f\x0c\x61\x56\x5a\x16\x4e\xfd\x0e\xa5\x4f\x5e\xb1\x3c\x93\x0b\x43\xed\x46\xe4\x52\xa6\x23\x72\x7e\x79\x71\xc5\x8a\x7b\x9e\x30\x77\x80\x3e\x58\x9a\xda\xbc\xf4\xeb\x45\xce\x13\x9a\x65\x20\x9d\x57\xb3\x99\xd3\x85\x53\xda\xde\x2c\x08\xfb\xa4\x59\x21\x68\x46\xb4\x94\x19\xda\x39\xcc\x64\xac\xd2\x55\x17\x9c\xdd\x33\x42\x8b\x1b\xae\x0b\x5a\x2c\xc8\x9c\x69\x9a\x52\x4d\x9b\x47\xfd\x4e\xb1\x30\xea\x41\x4b\x92\x17\x6c\x8c\x87\xb8\x36\x0f\x38\x5e\x1f\xde\xbe\x73\x57\x94\xa6\xa9\x73\xf1\x77\x87\xf4\xaa\xbc\xf1\xd0\x3e\x6e\xe6\x76\x52\x0f\x2d\x35\x82\x13\x66\xd5\x11\x39\x57\x08\xb3\x46\xe9\x2b\x82\x2d\xe8\xc6\x04\xb4\x1e\x31\x26\xee\xb7\x3d\x5a\xaf\xc5\x7d\x5d\x8b\xc5\xc4\x3d\x2f\xa4\x00\x3e\xee\x9e\x16\x9c\xde\x64\xcc\x9a\xac\xbc\x21\xc3\xf2\x56\x6c\xc3\x79\x79\xe9\x15\xfa\x18\x3e\xd2\x78\xab\xda\xe9\x49\x0b\x05\xa9\xad\xf4\xb5\xb8\xff\x9e\xd6\x45\x6a\xb1\x76\x49\xc4\xbe\x60\x96\x44\xc9\xcb\xf6\x05\x45\x31\x7d\x31\xaa\x9f\x31\x20\xe9\xc6\x17\xe2\x14\x34\xa6\x8b\xcd\x24\xaf\x06\x96\xf7\x74\x5e\x55\x6c\x5a\x03\x8d\x09\x79\x67\xc5\x40\x4a\x5e\xfe\xf7\xc5\xab\xd7\xef\xaf\x2f\xde\x5c\xbc\xfe\xb8\x19\x15\x46\x52\x6b\x40\x4d\x1d\x26\xdb\x4a\x97\xbf\x77\x7b\x08\x55\x71\x98\x30\x8c\xcf\xaf\x4f\xbe\x3f\xff\xf8\xdf\xef\xcf\xdf\xbd\x3e\x05\x96\x9e\x7d\xca\xa9\x48\x59\x1b\x8b\x56\x2a\x17\xd3\x92\x17\xec\x9e\xcb\x52\x65\x0b\x4f\x24\xd7\x5f\x85\xe5\x3b\x60\xd0\x43\xcb\x28\x86\xc4\x59\xec\xb1\xbe\x53\x10\xf9\x69\x75\x38\x2b\x73\x58\xc1\x94\xcc\xee\x59\xda\x26\xe9\x43\x80\xa0\x03\x47\x65\x70\xcc\x4b\xed\x14\x1a\xce\x86\x58\x8a\x64\x46\xc5\x2d\x4b\x27\xe4\x95\x2c\xcd\x68\xbf\xfe\x35\x80\xac\x60\x69\x99\xb4\x42\x0c\xb5\x51\x28\x50\xfe\x7a\xe4\x68\xb8\xa1\x9c\x0a\xab\x6d\xa9\x84\xe6\x0e\xa8\xe1\xae\xa8\x85\xd0\xf4\xd3\x8b\x98\xba\x5d\x47\xbf\x0e\x3e\x3c\x72\x75\xd4\xa4\x99\x1e\xf2\x3b\xb8\xa2\x0c\x4a\x60\x65\xe4\x28\x7c\xbb\xad\xef\xd7\x66\x7e\x2c\x0d\xcf\x0e\xc6\xf2\xb1\x7b\x56\x80\x22\xc4\x9e\x9c\x11\x29\xd8\x2d\x2d\xd2\x8c\x29\x88\x22\x7b\x98\x31\x28\x6a\x87\x92\x26\x6e\x54\xcb\x58\xcc\x2b\x6d\x84\x6c\x55\xa6\xbd\x42\x73\x2e\xe0\xda\xa3\x96\x65\x74\xb9\x79\x6f\x0a\xd9\x52\x1a\xa9\x76\xfb\xae\x20\x4c\xc5\x1b\xbd\xd7\x1d\xd7\x63\xab\xb0\x9f\x84\x58\x5e\x19\x06\x73\x5a\x19\xa3\xcd\xef\x11\x06\xe9\x68\x59\x3a\x5e\x71\x9d\x48\x31\xe5\xb7\xef\x68\xfe\x2d\x5b\x7c\x64\xd3\x8e\x11\x73\xc8\x5b\x5b\x55\x2c\x70\xac\x86\x3a\x60\x87\xed\x9c\xe1\x1e\x03\xa4\x62\xcc\x03\xdd\xb4\xfb\xd1\x3a\xfd\x95\x82\x67\xc8\xe5\x5b\x4e\x7c\x87\xd5\x2d\xab\xd6\x4e\xe0\xd6\x4e\x2e\x5a\xa6\x0b\x29\xa2\x45\x05\xd1\xea\xee\x77\x12\x82\x40\xa7\xf2\x05\x99\x69\x9d\xab\x17\x67\x67\x95\xaa\x65\xc2\xe5\x59\x2a\x13\x75\x96\x48\x91\xb0\x5c\xab\x33\x79\x6f\x50\x3f\x7b\x38\x7b\x90\xc5\x1d\x17\xb7\x63\xc3\x9a\x8f\xf1\x8c\xa8\x33\x90\xd8\xce\x7e\x05\xff\x8b\x95\x47\x3f\xbc\xfa\xf0\x82\x9c\xa7\xa9\x2d\xb3\x59\x2a\x36\x2d\x33\x5b\x4f\x6e\x62\x58\xd5\xef\x59\xa1\xb8\x14\x23\x72\xc7\x45\x3a\x22\x25\x4f\xbf\xde\xc7\x26\xc9\x1c\x99\xd9\x1e\x1b\x75\x05\x22\xeb\xa2\x86\x55\xfd\x3d\x33\x18\x93\x6b\x05\xc7\xcc\xe9\xa7\x2d\x51\xee\xb0\x8c\x1b\x29\x33\x46\xdb\xbd\x7c\xb6\x51\x94\x01\xcc\xbb\x23\x99\xa8\x63\x5a\x61\x22\x94\x7e\xec\x69\xcd\x65\xfa\x82\xa8\x32\xcf\x65\xa1\x55\x25\x43\x99\x03\x34\xaa\xff\x13\x14\x01\x23\xf2\xb3\xff\x11\xbd\x89\x7e\x3c\xfe\xe3\xb7\xaf\xff\xcf\x9f\x8e\x7f\xfa\x39\x7c\x16\x48\x53\xc1\x0b\x11\xd3\x54\x39\x4b\x26\x46\xa4\x7f\x0f\x33\x80\x7f\x5a\x66\xe7\x3c\x49\x64\x29\xb4\x7d\xa0\xa9\x2e\xd5\x64\x26\x95\xbe\xb8\xf4\xff\xcc\x65\xba\xfc\xaf\x08\xf3\xd6\x1e\xd1\x2c\xc0\xfa\x92\xea\x88\xd0\xf0\x4e\xc8\xb6\xba\x95\x3d\x6e\x8b\xfd\x32\xac\x58\x3a\xa7\xf0\xe7\x1b\x37\x5d\x43\x73\x1f\x0a\xae\x35\xb8\xba\xd9\x68\x74\x39\x1d\x39\x37\x31\xe4\x2b\xee\x9f\x77\x52\xf3\x45\x63\x02\x0f\xb5\x1e\x8b\x83\xd9\xdb\x95\x79\x39\xdf\x3a\xfa\xad\x28\xb8\xce\x2f\x2f\xc8\x3d\x42\x63\x0f\x0b\xd9\x06\x15\xb8\x08\xdf\x37\x07\x41\x09\x6e\x34\x07\x38\x2f\x8e\xbc\x40\x83\x87\x8f\x37\x26\x19\x9f\x73\x6b\xdb\xb5\x75\x6a\x63\xe8\xcc\x09\x7e\x36\x49\xf2\x72\x64\xbb\x98\xcc\xd9\x5c\x16\x0b\xff\x4f\x96\xcf\xd8\xdc\x30\xe0\x63\xa5\x65\x41\x6f\xd9\xc8\x0f\x80\x9f\xf9\x7f\xe1\x87\xb5\x29\xac\x7e\x8d\x72\x5b\x52\x16\x86\x14\x67\x0b\x87\xe2\x62\xf4\x71\x7b\x44\x07\xd1\x35\x80\xbb\x61\x03\xbf\x5d\xef\xfb\xf1\x39\xc7\x5e\x63\x81\x9c\x92\x5f\x15\x30\xee\xf7\x32\x2b\xe7\x4c\x8d\x3c\x81\x46\xc9\x4c\xdc\x1b\x16\x5e\x1d\xef\x03\x01\xa4\xfc\x9e\xab\x5e\xae\x81\x57\xde\xec\x03\x36\x92\x52\x1b\x99\x15\x13\xd1\x04\x45\xa6\xa5\x02\x99\xcd\x07\xd1\xd7\xb0\xda\xf3\xa3\xa8\x61\x73\xaa\x35\x2b\xc4\x0b\xf2\xff\x4e\xfe\xeb\x37\xff\x18\x9f\x7e\x7d\x72\xf2\xe3\xb3\xf1\xbf\xff\xf4\x9b\x93\xff\x9a\xc0\x1f\x5f\x9e\x7e\x7d\xfa\x0f\xf7\x8f\xdf\x9c\x9e\x9e\x9c\xfc\xf8\xed\xbb\x6f\xae\x2f\x5f\xff\xc4\x4f\xff\xf1\xa3\x28\xe7\x77\xf8\xaf\x7f\x9c\xfc\xc8\x5e\xff\x14\xd9\xc9\xe9\xe9\xd7\xbf\x8e\x9a\x1e\x15\x8b\x0f\x11\x58\x03\xdb\xb8\x47\x76\x9f\xea\xab\xbe\x66\x44\x2e\xf4\x58\x16\x63\xfc\xfc\x05\xd1\x45\x19\xa3\xb4\x77\xdb\xd6\xe7\x9c\xbb\x0a\xbd\x2f\x2a\x8c\xe7\xa9\xc3\x1e\x0e\xf2\x36\x04\x40\xb1\xa4\x60\x7a\x57\x42\x27\xf6\xe6\x08\xe0\x92\xad\x6e\x90\x43\x2b\x39\xd4\x67\x34\x01\x78\x55\xac\xc3\xb4\x90\xf3\x09\x09\x14\x9b\xf7\xe0\x03\x65\xdf\xbb\x63\x91\x9e\xf2\x83\xdc\x3a\xc8\xad\x2d\x72\xeb\x15\x1e\xa9\x27\x2e\xb4\x32\x71\xbf\x49\x15\xd8\xc1\x60\xf4\x06\xb2\x75\x85\x46\x23\xc7\x6b\x6a\x49\x72\x99\x97\x19\xd5\x0d\x8a\xee\x0e\x16\x24\x1f\xc8\xe4\xd4\xf1\xe6\xf8\x81\xb5\xc6\xd2\x81\xf9\x7a\x93\x05\x39\xcf\x32\xc2\x05\xde\x76\xd3\x41\xe3\x08\x4e\x23\x5e\x30\x64\x34\x09\x45\x73\xd1\xbd\x99\xf2\x83\xcd\x31\x16\x28\xfa\xb9\x32\x72\x6a\xa1\xb9\xb8\x9d\x60\x0e\x32\xc4\xd7\x56\xcd\xcb\x85\xcf\x44\xd6\x38\xa4\xe7\x5f\xbc\xbf\xd2\xda\x22\xf3\x19\x55\xda\x2d\x13\x66\xa9\xe9\x1d\x98\x28\x12\x96\x32\x91\x6c\x50\xa0\x7f\x8f\x3e\x50\x0e\x66\x37\x86\xeb\x06\x23\x1f\xf4\x4d\x49\x5a\xe6\x19\x4f\xcc\xfe\x98\x99\x77\xeb\xfb\x62\x3e\x2f\x35\x98\x8b\x0e\x65\xcb\x33\x27\xcd\x2a\xa4\x03\x93\x1e\xa0\x7b\x2f\xfd\x78\xdf\x58\xaf\x3e\x6a\xde\xf1\x28\xb2\x18\x47\xbc\xbc\x96\xb9\x95\xda\xaf\x50\xad\x4a\xcf\x55\xa7\x56\x87\x56\x94\xc7\xd1\xaa\xee\x74\xaa\x2f\x8d\x7a\x4c\xfa\xb4\x1f\xda\xd4\x81\x2e\xc5\xd3\xa4\x0e\x7a\xd4\xae\x74\x28\x9e\x06\xf5\x65\x94\xf3\x82\x4d\xf9\xa7\x0e\x17\xe6\x5c\x54\x52\x2c\x4f\x99\xd0\x46\x56\x2c\xac\x2b\x48\xce\x44\xe5\xe7\x61\xe3\xf2\x6b\x10\xd8\xab\x61\x1b\x59\xc9\xee\xf7\xff\x6a\x1d\xab\x3a\x5c\xfe\xe1\xf2\xef\xe2\xf2\xdb\xc3\xf5\x94\x6e\xbe\x90\x69\x6b\xec\x68\xec\x41\x7b\x1f\xf4\xb5\x14\x52\x86\xae\x08\x6e\xe1\xba\x28\x2b\x2b\x76\x2e\x01\x4d\x4c\xb9\xae\xdc\x1d\x9b\x0f\xe5\xd5\x9a\x1e\xc1\x8f\xd1\x7e\x79\xac\x5c\x5c\xf6\x52\xff\x4b\xb9\x80\xd1\x2b\x6d\xf3\x58\x1d\x8f\x3d\x72\x1d\x25\xc6\xaf\x9f\x51\xa5\xf8\xad\x18\xe7\x32\x1d\x9b\x51\xce\x36\xb2\x65\x87\x74\x4c\xf3\x8a\xba\x6d\xb7\xfb\xa3\x57\x63\x07\xfc\x5f\x22\xe7\x79\xa9\x59\xa0\xe3\xf6\xda\x4f\x17\x99\x1b\x21\x5f\xb4\x72\xb3\x5b\x6e\xce\x9c\x0a\x7a\xcb\xc6\x76\xb2\x63\x3f\xd9\xb1\x9f\xdb\x16\xfb\x15\x83\xe7\x93\x8c\xf2\xcd\xae\xd7\x5d\xb0\xfb\x4b\xe8\xcd\x26\x55\xf6\xbe\xf1\x4b\xa9\x4d\x9d\xd8\xc1\x05\xda\x01\xdd\x23\xfc\x78\xb3\x35\x11\x2e\x8b\x4f\x5a\xb1\x66\x23\xbf\xd8\xf8\x79\xa7\x78\xff\x36\x67\xe3\x57\x0b\x41\xe7\x3c\x71\xa7\xef\x3c\x03\x17\x6a\x2e\xc5\x52\x36\x80\x88\x29\xf9\x60\x17\xee\xcf\x1b\xb9\xd0\x24\xa1\x02\x0d\x35\xd6\x7b\xd6\x60\x12\xbf\xd6\x8d\x16\xd0\x38\x07\xfc\x08\xb7\xfb\xda\xee\x7f\x0c\x77\x2a\x74\x8e\x92\xc2\x88\xf2\xba\x00\xde\xea\x52\xa6\x86\xe6\x4c\x6a\x6f\xb7\xd8\x6b\xa3\x79\x97\x58\x35\x64\x8b\x03\x25\x79\x3a\x6c\x50\x40\x39\xdc\x8d\x31\x17\xa6\x06\xd2\x5c\xa6\x93\x35\x77\x25\x3e\x71\xf4\xa5\x4c\xad\xab\xbf\xae\x9d\x37\x73\x8d\xe0\xa8\xcd\xe9\x9d\x73\xc0\xf7\x3a\x74\x7a\x4f\x79\x16\xe1\xc1\x46\x20\xff\x8b\xe2\xa9\x61\xa0\x23\x90\xaa\x9f\x58\x1c\xef\xb3\x9a\x9b\xc2\x30\x14\x77\xad\xc9\x7a\x5a\x8f\x40\x53\xd2\x8b\x39\xcd\x1b\xbf\x42\xb3\xe6\xae\xf0\xe5\x5b\x34\xbb\xe2\x27\x37\xd6\xba\x35\xa7\x9f\xf8\xbc\x9c\x13\x3a\x97\x25\xc6\xc9\xad\xd2\xb2\xa8\x28\x84\x5d\x50\xa6\x35\x14\x49\x35\x91\x24\x12\x7f\x91\xbb\x07\xba\x3d\x51\xbb\x5c\x94\x3d\xae\x9b\x1d\xae\x83\xfd\xad\xb7\xdd\xcd\x59\xd8\x77\x75\x90\x3f\xda\xfe\x96\x8f\x32\x17\xad\x47\xd9\x61\xf4\xcd\x67\xf9\x62\x5a\x8d\xc1\x15\x91\x73\xae\xb5\x35\x64\x07\x38\x67\x44\xb8\xae\x59\x7d\xed\x05\xe3\x53\x44\x6d\x5c\x11\xf6\x29\xcf\x78\xc2\xc1\x79\xc0\x39\x8c\x6c\xe6\x39\x40\xdc\x7b\xe0\x58\x4a\x83\x0a\xc2\xe7\x39\x86\xb0\xc2\x45\x19\x3b\x76\xc6\x7a\xbb\xfa\x59\x5a\xf7\x6c\xf6\x29\x61\x2c\xb5\x13\x19\xee\xeb\x70\x5f\x3b\xdf\x57\xb5\x23\xa9\x38\x94\x88\xab\x80\x3c\x2f\x19\x9b\xab\x04\xc1\x72\x28\xa3\xba\xd3\xb5\xe9\x62\xbe\x76\x49\xd5\x3e\x32\x30\x18\x5c\x31\xad\x6c\xe8\x1f\xf4\x44\x8b\x0d\x46\x8e\xe5\x3c\x49\x3e\x11\x9b\x0b\x82\xa5\xd3\x69\xfd\x8d\x2a\xea\x6a\x83\xc0\xa6\x97\x19\x2a\x10\xbb\xd9\x3c\xcf\xa8\xae\x84\xf2\x2d\xc2\xb3\x62\xd8\xc6\x2e\xa9\x84\x1e\x37\x79\xd0\x7e\x04\x85\x56\xee\xf7\x11\x93\x00\xf5\x4d\xfb\xb3\x07\x11\xa5\xdd\x4b\x22\x32\x7d\x4f\xbc\x28\x13\xe5\x46\xb1\xef\xa4\x3c\x9d\x94\x9e\xb1\x89\x77\xba\x8b\x5f\x7b\x4e\xae\xb3\xaf\x74\x3a\x1d\xa0\x17\x9b\x32\xa7\x3b\xec\x0e\x94\x16\xe7\xe0\x89\x70\x0e\x99\xfa\xa6\x53\xb2\x9b\x2e\x29\x15\xa2\xd3\x29\x44\x1d\xa5\xc8\xa4\x35\x5d\xce\xd0\x81\x13\xd3\x1c\x38\x15\xcd\x63\x24\x9f\xd9\x1b\x1f\x1f\x71\x44\xba\x1b\x7b\xb4\xcc\x6c\x7a\xdd\x38\xe5\xff\x75\xf5\x3e\x80\xa3\xf2\x76\x0c\x7a\x3a\x8c\xc3\xc9\xc6\x93\x7d\xed\xf8\x4d\x83\x25\xaa\x49\xc3\x19\xd7\x9a\x26\x33\x9b\x42\x06\x9f\x98\x93\x20\x16\xc4\x1c\x02\x8d\x14\xd5\x26\xc2\xd8\xb4\xcf\x33\x46\x74\x01\x85\x0c\xff\xe8\x2f\xc4\x88\x01\xab\xfc\xa7\x20\x52\xd9\x97\xe2\xf3\x87\xf1\x8f\xee\xaf\x3f\x6d\x19\xbf\x1e\xc7\x6c\xe0\x94\x76\xc9\x33\xbe\x86\x1e\x09\x17\x29\xf8\x26\x21\x4b\x82\xc0\xc3\xc1\x0c\x68\x61\xdd\x13\x9b\xbe\x03\x13\xd9\x58\xab\x1c\x38\x31\x55\x2f\xb7\x92\x70\xf0\xdd\xaa\x54\x04\x4e\xe5\x56\xdd\x61\x46\xde\x4b\x5b\xd3\x94\x8d\xc8\x25\xa8\xc3\xab\x5f\xe0\xce\xbf\x97\x58\xdd\xb4\x25\x98\x39\x92\xa2\xb7\xf2\x6e\xdd\xe0\xf9\x6d\xc5\xd8\x21\x60\x6a\x8c\x5d\x75\xb1\x42\xd6\x6e\x23\x60\xef\xd8\xa2\x15\xaa\x96\x58\x5b\xa6\x12\x88\xea\xa8\x3a\xa3\x8e\xd8\x22\xfd\xfe\x9f\xce\xba\x33\xbf\xe1\x02\xa7\x82\x03\xbb\x7d\x86\xb1\xdd\x7e\x18\x49\x20\xcb\x22\x26\x11\x09\xed\x38\xce\xb3\x1b\xc8\x3f\x74\xe0\x38\x3d\xbd\x68\x03\xe9\x3a\x3e\x33\x60\x2e\x5f\xff\xb5\xa4\xd9\xa4\x16\x39\x8e\x3f\xb5\x5d\x37\xeb\xb0\xb8\x4c\x37\x1f\x78\x96\x26\xb4\xb0\x41\x24\x80\x7e\x88\x92\xd6\x32\x07\xd8\x2f\x69\x75\x4d\x75\x08\xb0\x3a\x3c\x0a\xbd\xf4\x72\x5a\x68\x9e\x94\x19\x2d\x88\xb9\xe3\xb7\xb2\x88\x0a\x0d\x6f\xdd\xcc\xea\x34\x5f\xb1\x44\x8a\x74\xa7\xc2\xec\xf5\x72\xe7\xcb\x7e\x88\x39\x2b\xb8\x2d\xab\xc9\xe7\x6c\xf9\x7a\x9d\xd4\x7c\x12\xda\xe4\xa1\xa9\x43\x76\x1e\xb7\x8c\x42\x0d\x65\xdd\x9a\x88\x99\xe0\x4f\x03\x82\xe3\x6f\xfb\x84\xfc\x79\xe1\x54\xa5\x6d\x8c\x31\xd7\x2e\x58\x5f\x31\xed\xd2\x39\xb8\xab\x68\x77\xb2\x42\x23\x53\x59\x40\x9a\x84\x93\x54\x62\x80\xff\x3d\x4f\xf4\xe9\x84\xfc\x5f\x56\xc8\x88\x3c\x18\x82\xdd\x62\x1d\x58\x7b\xb1\xbd\x5e\xa8\x60\xd4\xfa\xdf\x3e\x23\x27\x58\x1a\x98\xcf\xe7\x2c\xe5\x54\xb3\x6c\x71\x8a\x6a\x22\x66\x8b\x0b\xc7\x9c\x9a\x18\xf5\x5e\x50\xec\xfa\x77\xbf\xdd\xf0\xe6\x1e\xf2\x97\xd8\x1c\x09\x15\x60\xd1\x15\x78\xe9\xf4\xf8\xdc\x59\xad\x72\x77\xa3\x9c\x14\x3a\x1a\x57\xd9\xcb\x1c\x6e\xf6\x67\xeb\x2f\xe6\x80\x52\x52\xb0\x5b\xb8\x9f\x78\xe7\xb6\xbc\x9d\x18\x84\xf6\x4e\x96\xa2\xd9\x16\x51\x83\xdb\x5b\xab\x0a\xfb\x3e\xf8\xb0\x6b\xe2\xa1\xdd\x32\x84\xc1\x4c\x02\xeb\x07\x25\x60\xf2\x00\x0e\xcc\x20\x36\x7c\xab\x72\x4f\x8f\x30\x93\xee\x30\x99\x10\xcc\xa5\x25\x5e\x79\x27\x29\x87\xfc\x40\xbb\xbc\x0a\x10\xfb\x6b\x21\xb7\x94\x55\xc7\x55\x47\x81\x03\x8c\x20\xae\x4e\x30\x4c\x86\xa5\x36\xbe\xa7\x0d\xed\x48\xaf\x65\x24\xc7\x2f\x8e\x77\x42\x75\x10\x1a\x85\xcc\xe9\x2d\x6d\xaf\x70\xdf\x0d\x28\xcb\x7d\x93\x94\x69\x56\xcc\xa1\x46\xf7\x4c\x3e\xe0\x73\x64\x06\x72\xfb\x16\x4b\x7d\x55\x17\x32\x93\xad\x10\xc1\x4a\x28\x55\xfe\x22\xc4\x1e\xe0\x43\xf8\x40\x17\x84\x16\xb2\x14\xad\x71\xb7\xc0\x45\x7b\xca\xf1\x6e\x69\xd2\xef\xa5\x60\xde\x0d\xa1\x8d\xca\xd6\x48\xdb\x0d\xd3\xd4\x5c\xf8\xe7\x93\xe7\xcf\x76\xb2\x57\x1d\x93\x65\xc1\x6c\x96\x2c\x0d\xce\xab\xd5\xdd\xf6\x9d\xcc\xab\x60\x34\xfd\x20\xb2\x9d\x72\xfe\xef\xf0\x62\x40\xdf\x63\xd0\x3e\xf0\x29\xd8\x9f\x46\xf8\xd3\x43\xc1\x35\x0b\x30\xff\xc9\x94\x66\x8a\x11\x59\x90\x52\x78\x89\xe8\xb4\x4b\xae\x22\xe8\x20\x06\x1e\xed\xce\xa5\xaa\xbc\xd9\x37\x82\xb1\x98\x04\x2e\x4b\x85\x5f\xfc\x65\x38\x56\xcd\xb8\xa6\x03\x4c\x8e\x8e\xc8\x09\xf6\x63\xb8\x7f\x29\x75\x0b\x44\x63\x1d\xce\x11\x3e\xaf\x3f\xe5\x3b\x15\x5d\x5e\xdb\x8c\x57\x24\x3f\x18\xb0\xfe\xcc\x66\xf4\x9e\x29\xa2\xf8\x9c\x67\xb4\xc8\x20\x9d\xd0\x15\x2e\x8f\xdc\x94\x7a\x7d\xce\xbe\x88\x7c\x6f\x81\x9e\x24\x9c\x67\xd0\xdd\x3e\xf7\x91\xb8\x35\x98\x2d\x02\xc4\xea\xd6\x04\x85\xb1\x4a\x5d\xd2\x2c\x5b\x10\xf6\x29\xc9\x4a\xc5\xef\xb7\x45\x23\x36\xce\xbf\x07\x77\xb5\xcc\x58\xe5\xd6\xb1\xef\x80\x6c\x55\x5d\x50\x36\x38\x3a\x75\xc7\x09\xd8\x28\x54\xb6\x81\xe6\x0c\xbc\x24\x69\x92\x30\xa5\x5c\x4c\xdb\x22\x8c\xcb\xf3\x6b\xf8\x5c\xd2\x37\xd2\x07\xf5\x3a\xa3\x4a\xf3\xe4\xcf\x99\x4c\xee\xae\xb4\x2c\x76\x2a\x61\xac\xeb\x7f\x29\x29\xe6\xf9\x0f\x57\xe4\x15\x57\x77\x41\x5c\xbd\x75\xa3\x09\xd5\x99\xb4\xcd\xe6\x58\xde\xb0\x8c\xe9\x63\x05\x5c\x07\x99\xd3\x64\x86\xa9\x59\x81\xa5\x10\x3e\x73\x83\x55\x7a\x6c\xdc\x22\x6c\x1d\x3d\x65\x6c\xf2\x90\x33\x7b\x15\x7e\x45\x1f\x14\xc3\x95\xdf\x98\x95\x43\xfe\xd9\x43\xdb\x7e\x71\x2e\x17\xaf\x76\x64\xd7\x9d\xaa\x6b\x33\xc7\x3d\x58\xfa\xb0\x67\x27\x89\x4e\x79\xc6\x50\xc2\x06\xa0\xb8\x20\x1e\x7b\x27\xe1\x74\x2c\x64\x49\x1e\x28\x2a\x8b\x00\xd3\xc7\x18\x4b\xaf\x79\xfe\x82\xbc\x16\xaa\x2c\x58\xa5\x83\x5c\x1e\x8c\xab\x2a\xe1\x8b\x13\xf7\xe1\x48\xa1\x4c\x6b\x70\x7a\x8c\xf4\x8f\xed\xf5\x27\x3a\xcf\x33\xa6\x5e\x90\x23\xf6\x49\xff\xf6\x68\x44\x8e\x3e\x4d\x95\xf9\x9f\xd0\x53\x75\x34\x21\x17\x73\xef\x29\xc6\xc5\x94\x15\x05\x73\xf1\x1b\xf8\x81\x61\x9a\x02\x7e\x68\x0f\xf1\x4b\x5b\x9f\x5b\x0b\x5b\x88\x5c\x32\x42\x41\x2a\xc9\x03\x66\x31\x35\x24\x93\x15\x85\x2c\x7c\xb4\x75\x00\x6c\xa0\xe5\x89\x9c\xe7\x85\x9c\xf3\xc0\xa4\x00\xf7\x76\x97\xf6\x69\x50\xf7\xb5\x4b\x46\xa4\xd7\xc1\xf5\x9d\xbb\xb3\x1b\xfc\x20\x76\x73\x6a\x2f\xa6\xce\x13\x11\x75\x28\xae\xda\x22\x57\xbe\x1b\x73\x4e\xed\x38\x86\x26\x74\x3b\x99\x6f\x7c\x9e\x1e\x72\x96\xb2\xfb\x33\x95\xd2\xe7\x23\x98\xaa\xb2\x51\x5d\xf5\x75\x51\x45\x8e\xe2\x92\x77\x5d\x39\x9e\x6a\x14\x42\xa2\xea\x69\x2a\x0b\x3f\x24\xd8\x31\x9f\x1d\x91\x13\x59\xc0\xd8\x09\x15\x24\x63\xf4\xde\xda\xe1\x10\x47\x2d\x50\x61\xd4\xca\xfb\x74\x51\xbe\x91\xba\x02\xee\xdf\xbe\x6a\x79\x3b\x4e\x56\x22\xbd\x4e\x93\xeb\xdb\x69\xe1\x8a\xd2\x46\xdd\x4f\x65\x61\x33\xce\xfa\x57\x14\xd3\x80\x8c\xb8\xa8\xe9\xa9\x9e\x2a\x86\xe8\x92\x54\xc2\x91\xad\xbd\xf8\x94\xd8\xbe\x41\x23\x20\xf8\x5f\x4b\x46\x2e\x5e\xf9\x8c\x86\xac\x50\x5c\x69\x83\xb7\xd2\x1a\x47\xc2\x91\x4d\x39\x39\x9f\xd3\xbf\x49\x41\x5e\xff\xf9\xca\x76\x14\x71\x14\x1f\x13\xde\xad\x08\x92\xfe\xad\x2c\x98\xe1\xbe\x3a\x30\x7d\xfe\x9b\x65\x46\xce\xfc\x4e\x5e\x51\x4d\x91\x9f\xb3\xfe\xd8\xa2\x22\xa1\x86\x1b\xbb\xe1\x22\xb5\x8f\x62\x79\xb1\x3d\x70\x46\x66\x7b\xdf\xb7\x05\xef\xb8\x17\xbf\xfb\x78\xb1\x23\x0e\x2a\x01\xf2\x76\xfb\x4e\xa6\x5d\xd9\xa8\xe3\xe0\x53\x47\x6b\xfe\x97\x81\xe9\x4b\xfc\x9d\xcc\x4d\x9f\xe4\xbd\x14\x6c\x44\x3e\x32\x9a\x12\x83\x25\xec\x9f\x3f\x14\x5c\xb3\x49\x7b\x96\xaa\x0e\x54\xd5\x01\xb0\xe3\x32\xdc\x67\x6e\x09\x61\x90\x76\x6a\x4e\x0e\xdc\x3b\x4b\x3a\x6f\x32\x79\x43\xec\x6d\xd8\xf5\xdc\xbf\xfb\x78\xd1\x63\xea\xdf\x7d\xbc\x70\x33\x37\x7f\xca\xe9\xe1\x26\x7d\x08\xe6\xfb\xcd\x12\x2f\xdc\x85\x4d\xa9\xd2\x1b\x2c\x73\xd4\xbb\x64\xa7\x27\x07\x63\xa4\x3b\x6c\xcd\x1d\x17\x11\x29\xcb\xea\xd7\xd9\x7c\x63\x84\x52\xf4\x3e\x0f\xfc\x3d\xae\x66\x14\xb2\xcc\xb9\x0c\x3e\x78\xa0\xcc\x09\x53\x86\x3e\xb9\xa3\x45\x28\xa6\xb4\x25\xe4\x15\x43\x5f\x95\xf4\x85\xf3\x62\xf3\x5f\xac\xff\xe0\x1d\x44\x71\xa4\x16\x91\x13\x0c\xea\x48\x83\x93\x7c\x82\xea\x5a\xe1\x1f\xd9\x20\x3d\x9e\x71\xa8\xb7\xab\x4f\x27\xb5\x00\x18\x05\x53\xde\x29\x7a\x39\x08\x97\xb5\xa2\x3c\x26\x27\xe6\xd9\x19\xa8\xa6\x4f\x27\x80\x3b\xe1\x45\x08\x6a\xac\x18\xb1\x88\x31\xcc\x31\xff\xb8\x35\xab\x16\xcb\x34\xc1\x46\x9a\xcb\xdb\x95\x8a\x9b\x6f\xd6\x52\x71\x78\xe0\x6a\xf3\x3c\x65\x42\x8e\xa9\x4f\xa2\x48\x39\x1c\xd3\xd6\x37\xe3\x89\xf9\x41\xce\x68\xfa\x4b\x39\xa3\xc4\xe7\xa9\xe9\xc1\x36\x54\x1f\x3a\xf2\xeb\x63\x98\x5d\xba\xc5\x5a\x04\x07\x1e\xe2\x2b\x8b\xf9\x6c\xf6\x6f\x64\x36\xcc\xd1\xfd\x36\x22\x73\x64\x07\x64\xe5\x0f\x56\xd7\x55\xb9\xef\xdc\xa2\x10\x21\xc3\xcf\x24\xe2\x48\x47\x4f\x32\x61\xf9\x6c\xda\xc5\x1d\xc9\x7c\xf0\xe6\xaa\xae\x18\x7f\xc9\xf2\x19\x79\x73\xb5\x06\x1b\x00\xec\x61\xd6\x0a\xd5\xe5\xc7\x8a\x64\x7c\xca\x34\x6f\x59\xc2\x1e\xf0\xc1\x5c\x0a\xae\x65\xb1\xd9\x57\x3b\xfe\x8e\xbb\xee\xf6\x71\xc7\x5d\xdf\x66\xf7\xab\xec\xb2\xef\x82\x5f\x29\x49\x64\x96\xb1\x44\xdb\x94\xeb\xb0\x05\x51\x2b\xc4\xb6\x46\xf0\x64\x56\xef\x33\xb9\xfb\x03\x88\x9e\x56\xc8\x3c\xc3\x23\x72\xf6\xf1\xf5\xf9\xab\x77\xaf\x27\xf3\xf4\x57\x33\xf9\x30\xd6\x72\x5c\x2a\x36\xe6\xed\x99\x5b\x1f\x2f\x72\x00\x5b\x1e\x95\xf1\xbd\xce\x82\xe5\x36\x59\xfd\x07\x97\xf3\x88\x7c\xa7\xd0\xf7\x0b\x34\x91\xce\x7e\x2d\xa5\x1e\x91\x82\xda\xbc\x46\xd4\x2a\x32\xcb\x2c\xc3\xed\xd0\x05\x63\xa3\x50\x29\x77\xf6\xf9\x31\x42\x35\x20\x3c\x79\xae\xe8\xf0\xe7\xba\x0b\x75\x6b\x67\xc3\x48\xaf\xcd\xaa\x7a\xaf\x6f\xd7\x55\xed\x77\x54\xd5\xea\x99\xd9\xbc\x3b\xb6\x20\x10\x31\x34\x95\x85\x39\xda\x45\xfd\x98\x32\x9d\x00\x74\xce\x4a\xc5\x8a\x09\x76\xff\x04\x61\x1f\x47\x81\xe3\x12\xe0\x91\x2d\x20\xff\x91\x4d\xd7\x01\xde\xfe\x5c\x55\x3c\xb3\xbc\x30\x2d\xf5\x8c\x09\xcd\x6d\xb6\x1e\xcb\xa5\xac\xdd\x89\x88\xe2\x54\xd8\x0e\x0d\xfa\xc8\xac\xdd\xdd\x72\x6c\x0f\x79\xa9\x9b\xdb\x13\xc9\x4b\xbd\x4d\xee\x79\x83\x4c\xf6\x71\x09\x4d\xbf\x90\x94\x23\x24\xd6\x3e\xcd\x40\x41\x53\xa9\xf0\x1d\x2c\x3f\x14\x5c\x2f\x9a\xce\x79\x7b\x1a\xeb\x27\x88\xd8\x12\x2e\xd2\x36\x60\x76\x03\x24\xf6\x58\x67\xeb\xed\x6f\xd6\x38\xe7\x5d\x2e\xa8\x13\xee\x31\x81\xa0\x75\xaf\xa8\x7b\x57\xf4\xf0\xa0\x58\x86\xe8\x7c\xa1\xfe\x9a\x8d\x71\x0e\xe3\x3c\xad\x40\x3a\xb8\x4a\x6c\xec\xb9\xc9\x55\xe2\xe9\x69\x6c\x9f\x84\x03\xc4\x6e\x8e\x1d\x79\x82\xac\xfb\x93\xd7\x0f\x1d\x64\x3f\xba\x30\xe8\x87\xe0\x12\x2b\x2a\x95\x4b\x6e\xa3\x47\x7c\x25\x15\xc4\x5b\x4e\x59\x65\x80\x9a\xd3\x82\xce\x99\x66\x05\x7a\xa9\x5b\xaf\x78\x11\xc3\x7c\x81\x0b\xfd\x87\x9c\x89\x2b\x4d\x93\xbb\x1d\x57\xa8\x1a\x38\xbb\x81\xb3\xf3\xed\x20\x5e\x19\xee\xf8\xdb\x04\xeb\x8b\xd0\x71\x88\x0b\xcb\xac\x3c\x11\xa4\xd3\xce\xc0\xb9\xe4\xef\x5d\x34\xaf\x3e\x65\x7e\x9d\x4b\xab\x2a\x35\xa0\xb2\x15\xdc\xdc\x7d\x89\x13\x08\xc9\x44\x30\xed\x86\x71\x8a\xbf\xf9\x96\x00\xf5\x70\x69\x88\x3a\x19\x41\xf7\x75\xc4\x3a\x37\xbf\xdc\x70\x5d\xa1\x4c\xc5\x34\xc9\x59\x31\xe7\x36\xad\x95\x14\x24\xb1\xf1\x9c\xc0\xe0\x18\x66\xc6\x76\xd7\x89\x3d\x12\x44\x26\x9a\xda\x20\x70\x72\xc3\xf4\x03\x63\x82\x3c\x7b\xf6\xec\x19\x70\xc9\xcf\x7e\xff\xfb\xdf\x13\x48\x11\x98\xb2\x84\xcf\x57\x5f\x84\xb7\xfe\xc7\xf3\xe7\x31\x83\xfe\x9f\xf3\x77\x6f\xc1\xc1\x3c\xd7\x8a\xdc\x48\x3d\xb3\x63\x9b\x2e\x6a\xdd\xab\x11\xf9\xcf\xab\x0f\xef\xab\x94\xc2\xf5\xa7\xa0\x69\xf0\x20\x8a\x19\x39\x54\xfb\x3d\xfb\xdd\x6f\x7f\x1b\xf5\x0d\x2f\x20\x31\x13\x87\x10\x5a\x1f\xad\x91\xbb\x38\x03\x21\xf5\x6a\x86\x35\xcb\x49\x44\x39\xec\x42\x00\x14\xbf\x9d\xc1\x46\x98\xfb\x2f\xc5\x34\xe3\x89\xc6\x22\x32\x88\x4a\xf1\x48\xd8\xbc\xb2\xd4\x26\x69\xb0\xac\x71\x94\x16\x3e\x65\x23\x92\xf1\x3b\x46\xa6\xea\x9b\x42\x96\x79\x95\x4a\xa5\x60\xca\x08\x91\x09\x15\x66\x7c\x1c\xae\x3a\x77\x8a\x45\x27\x52\xda\x87\x23\x62\xa4\x1a\xbd\xfb\x95\x83\x8e\x97\xf8\xee\x91\xaf\x6c\x31\xc6\xd3\x9d\x53\xee\xe3\x1d\xc0\xe5\xab\x56\x1a\xd8\xab\xc3\x62\x2a\x4e\x55\x55\x42\x5c\x18\x76\x5e\xc8\xbf\xe0\xa1\xe1\xc2\x65\x29\xb0\xf2\xa9\xb2\xe2\x8a\x4d\x9d\x23\x2a\xeb\x59\xc4\x48\x2e\x15\x9b\x61\xbd\x6c\x12\xb8\x2a\x03\x02\xb9\x98\x86\xa9\x38\x20\x17\x19\x57\x66\x12\x50\xfc\xc9\xce\x2d\x62\x94\x35\xb3\xaf\xca\xc6\x9a\xbb\xa1\xf0\x84\x95\x62\xa5\x7f\xac\x61\x1f\x35\x06\x90\x06\x98\x34\x75\x99\x2e\xaa\x51\x30\x46\xca\xc6\xd3\xdb\x77\x57\x4a\x92\x44\xa7\xaa\xb2\xa1\x55\x4c\x97\x76\x8b\xc0\xa9\xdb\xcc\x9f\x29\x65\x03\xf7\xe7\xb4\xb8\x63\xa9\xc7\xcf\x13\x88\x77\x53\x91\x09\x07\x88\x4b\x99\xc7\xef\xd1\x40\x3b\xa7\x8b\x5a\xb0\xac\x99\xc6\xf1\x64\x72\x8c\xa8\x45\x16\x58\xfe\x0a\xb1\x80\xf9\xfd\x91\x52\x5b\xd5\xee\xd6\x3b\x9a\x2b\x4c\xce\x65\x58\x7a\x5b\x98\x9e\xd6\x42\xd9\xa8\x85\x65\x0c\xee\xeb\xc4\xa8\x77\x2b\x9d\x18\x5b\x3c\x11\xdf\xcc\x63\x4a\x50\x77\x95\x15\x3a\xd4\x5a\x6c\x4e\x15\x68\x61\x6c\xef\x5b\xac\x28\xd0\xb9\xf0\xe8\x3c\x8a\xb5\x59\x33\xd5\x68\xc9\x06\xc7\xa8\x9b\x17\xa2\xf8\x1b\x9b\x8a\x63\x53\xe9\x88\xe5\xf6\x28\x6c\x0d\xb6\xc7\x63\x6e\xb0\x5d\x4c\x31\x4a\xbc\x8e\xe4\x2d\x7a\x0b\x19\x4d\x47\x87\x62\x42\xc6\xab\x76\x08\x6e\x05\xdb\x9e\x79\x16\x6c\x7d\xca\xfa\x76\xe1\x5f\xb0\xc5\x19\xee\xb1\xf5\xbd\x5c\xce\xd0\x8f\xe0\xb1\x64\x26\xaf\x15\x7b\xcf\x50\x75\x0a\xf2\x95\x43\x2c\x1d\xee\x94\x25\x57\x78\xad\xe8\x8d\x92\x59\xa9\x71\x88\xee\x9d\x84\x34\x0f\x26\xe9\x32\x08\xc6\x11\xba\xe5\xee\x02\x4a\x09\x9c\x08\x92\xa7\x2e\x7d\x75\x40\x98\x43\x2d\xaf\xaa\x7d\xae\xb5\xbc\x7c\x91\x3b\xb5\xb1\xa2\x5f\x55\x64\x56\x3d\xa9\x1a\x5f\xd8\x12\xc5\xbb\x28\x5d\x14\x27\x27\x55\x21\x7b\xe7\x37\x78\x21\x34\x2b\xa6\x34\x61\xa7\xa1\x32\x86\xe5\x33\x36\x67\x85\x01\x90\x7d\xcf\xc5\x2b\xcf\xa8\x48\x33\x94\x74\x13\x56\xc0\x25\x66\x9f\x34\x2b\x0c\x30\x5f\x5e\x5d\x90\xb4\xe0\xf7\xac\x50\xe4\xe4\xcf\xcc\x08\x4c\x58\xc0\x27\x2a\x21\xc3\x6e\x63\x5f\x60\x1a\xbb\x52\xff\x40\x67\x7b\xd1\xfc\x40\xcf\x0e\x6f\x8b\x00\x03\x54\xb0\x44\xd0\x23\xdc\x55\xa8\x05\x8b\x41\x0e\x2f\xa5\x00\x52\x09\xb8\x71\x21\xcb\x02\x4d\xc5\xbe\x96\x5a\x22\x8b\xc2\x90\x67\x18\x9a\x2a\x52\xb0\x5b\x23\xaf\x15\x58\x56\x0a\xde\xc8\x4a\xf3\xc3\x4e\x83\x09\xf6\x6e\x39\xf4\x26\xc2\x0d\xe1\x14\x11\xbd\x59\x66\x2a\x2f\xe4\x3d\x4f\x1d\x2f\x05\xae\x2c\x96\x51\xe4\x8a\xe4\x54\x05\x31\xf7\x41\x7d\xe1\x6a\x07\x23\x46\x42\x61\x16\x78\x32\x9f\x7f\xa8\x16\x09\x1b\x9a\x2f\x25\x64\x92\x8c\x70\xa7\xe9\x42\xd5\x64\xca\x2e\xcb\x9b\x8c\xab\xd9\xd5\x3e\x4d\x48\xeb\xc6\x41\x37\xd0\x15\xf7\xa2\x26\x53\x52\x94\xa1\x4a\x28\x0e\x2c\x90\x21\x8c\x86\x5f\xe3\x46\x92\x90\xb0\x5b\xae\xff\xf0\x8a\x49\x08\xd3\xce\x98\x4d\xc0\xf7\xf2\x6a\x73\x34\x1c\xb6\xf7\xd5\x5a\x6c\x96\x0d\xcc\x55\x9a\xb2\xef\x44\x5e\xfb\x3d\xa1\x59\x73\xad\x84\xb0\xd5\x93\x33\x39\x32\x85\x9c\xaf\xcb\xcd\x81\x07\x90\x9b\xb3\xe9\x60\xc4\x83\xf2\x2f\x36\x3f\x5d\xb4\x39\x6f\x09\xc0\x8a\xcc\x25\xe6\x0e\x10\x50\x3b\x0b\x5f\x82\xb4\xad\xee\x83\x20\x33\x0c\xa4\xc5\x82\x1b\x30\x98\xe5\x1a\xda\x60\x96\x83\xb6\x8d\x59\xee\x20\x5e\x06\x4e\x64\x46\x5c\xe4\x12\x7a\xd5\x8a\x03\x79\xb2\x19\x4f\x80\x5b\x3c\x8d\x77\x6a\xfb\xc7\x59\x9d\x6b\x5d\xf0\x9b\x52\xef\xa9\x5e\xc1\xd2\x18\xc0\x20\x32\x65\x11\xe9\xd8\x02\x31\x09\xee\x6f\x55\x6b\xb2\x4e\x2a\xe3\x70\x2c\xf6\x3b\xf1\x8c\x0c\xf0\x30\xf8\xe3\xb1\x22\xa9\x4c\x4a\x5f\x41\x0a\x76\xa7\x72\xeb\x89\x2d\x30\xd1\x09\x2d\x75\xcf\xfb\x1e\x0e\xd2\x7a\x55\x52\xf9\x20\x1e\x68\x91\x9e\x5f\xb6\x44\xee\xd6\xa3\x76\xab\xaf\x42\x26\xde\xfd\x4c\xcc\xef\xf4\x46\x96\xba\xaa\xe3\xf3\xaf\x65\x60\x5d\xa7\x71\xd4\xd2\x60\xc2\x8d\x06\xd4\x4a\x8f\xd8\x73\x8c\xc1\x6a\x3b\x58\x6d\x07\xab\x6d\x53\xab\xdd\xe3\x0b\x34\xc8\x86\x55\xba\x6a\xf8\xcb\x65\x47\x8c\x01\xdd\xfe\xed\x60\xaf\x2a\x8c\x8b\x1c\xfe\x72\x90\xf1\x92\xd8\x81\xb7\xbd\xd2\xc3\x06\x7e\x71\x0e\x25\x03\x3f\xf6\xf8\x36\xb3\x3d\x59\xc2\x60\x75\x51\x22\x25\xb6\x7a\x14\x5b\x15\x39\x88\xb5\xf7\xd0\x40\x1e\xd8\xe2\x73\x99\xbe\xc0\xf2\x2f\x50\x2c\x12\xf3\xff\x8f\x6c\x8d\xba\x91\xd5\x6e\x88\x14\xcb\x68\xe7\x34\x61\x80\x04\x3c\xaf\x10\x91\x36\x04\x5b\x47\xe0\x93\xce\x1b\x40\x60\x13\x60\x6d\x2d\x69\xa6\xc3\xd6\x75\x37\x4c\xab\xf8\xfe\xf8\x6f\x96\x53\x4b\xe2\xf7\x6e\x13\x54\x32\x63\x73\x0a\x7f\xbe\x71\x0b\x30\x37\xda\xb0\xba\x9a\x61\xb2\x30\x56\x40\xb5\xe5\x51\xcd\xa7\xf7\xe8\x3e\x2e\xd7\x96\x6b\x9d\xad\x9b\xc4\x9d\xc0\xf6\x84\xb7\x1b\x96\x7b\x59\xb3\xa6\x98\xd3\x07\xa4\x3d\xc3\x62\x2a\x4b\x3e\x10\x80\xb3\x10\x3e\x7b\x5e\xda\x36\x82\x15\xb6\x43\x18\x7f\xfb\x1a\x7d\x47\x5e\xf1\x5e\xe7\x76\xa2\x07\x1e\x8c\xbe\x83\xd1\xb7\xde\x9e\xb8\xd1\x37\xa0\x76\x0e\x83\xae\xb1\xea\x86\xb6\x02\x67\xda\xbd\x61\x4e\xac\xb0\xa2\x8b\xb3\xd7\x3a\x63\xad\x2c\xea\xde\x46\xc7\x93\xc9\x31\xfa\x1b\x55\xb2\x4e\xa9\xa7\xe3\x3f\x10\x26\x12\x99\x9a\x7e\xae\xa1\xff\x42\x69\xe0\x94\x2a\x1d\x58\x38\x97\xb9\x1b\x2b\xf4\x58\x82\xbe\xbb\xd1\xd5\x0e\x68\xcf\x65\xad\x7b\xb3\x0d\x5f\xd1\x01\x7d\x55\x7c\x87\xcf\x97\x67\x41\xe1\x33\x23\x5b\x06\xa4\x2a\xc8\x8d\x25\xee\xe1\xfc\xba\x32\xe1\xd1\xe3\x9d\xe0\xc7\x93\x24\x2f\x47\xb6\xa3\xc9\x9c\xcd\x65\xb1\x18\xf9\xce\xcc\xc3\x5a\xef\xf6\x0d\xcc\xd1\x9d\x94\x45\xc1\x04\x94\xe7\xf6\x6c\xce\xd3\xe2\x72\x1c\xa4\xf6\xc8\xe4\xf8\xcd\x89\xcb\x5c\x52\xb5\xfa\x8d\xac\xcc\xa6\xa0\x68\xf6\xab\xc5\xd2\x4d\x18\x30\x39\xaa\x8c\xca\xe6\x57\x26\xee\xc9\x3d\x2d\x54\xec\x0d\x20\x7d\xf9\x9a\x94\xdf\x73\x15\x53\xd7\xb5\x61\x71\x57\x5e\xed\x09\x65\x29\x4a\x9d\x97\xda\xa2\x3b\x77\xc4\x5d\x5e\x69\x7f\xb4\x97\xd8\xb7\xe7\x47\x1d\x06\x7f\xa2\xf5\xcc\xeb\x2d\xaa\xba\x79\xbd\x75\xab\x75\xbe\xfe\xdb\x8e\x5b\xdf\xb3\x0e\xfa\xba\xe6\xb6\xb6\xff\x1d\xa9\xa8\x56\x95\xe3\xdc\xb1\xc7\x7b\xbe\x04\x7d\x39\x60\x30\xa4\xbd\xe2\x3b\x0d\x3f\x76\x7d\xd6\x43\x5b\x34\x9b\xe7\xb2\xa0\xc5\x82\xa4\x56\x31\xb5\xd8\x98\x51\x68\xcf\x79\xdb\x61\x92\x29\xdf\x7c\x48\xf7\xa0\xe6\x9d\xb3\x94\x97\xf3\xbd\xe4\x19\x82\x9e\x43\xa0\x3f\x40\xf2\x73\x9b\x5a\xdd\x79\xb1\xd8\xd7\x5c\x05\x0d\x9a\xdc\xd9\x8a\xf8\x6e\x57\xe2\x74\x7f\xb5\x04\xd5\x47\x47\x4b\x85\xdc\x40\xaf\x0c\xfe\x1c\x32\x65\xc7\xca\xbf\x8b\x83\x77\x54\xf0\xa2\xb1\xd7\x7a\xb4\x9d\xd8\xae\x4e\x0d\x27\xf7\x0e\x88\xfd\x01\x72\xf3\x46\x9d\x16\xd2\x31\x99\x09\xff\x1b\x7b\x6b\xd8\x9a\xbd\x84\xa9\xba\xce\x7d\xd9\x37\x09\xd2\x98\xcd\xea\x35\x25\x99\x4c\x02\xd7\xa6\x1a\x35\x87\xe3\xf0\xda\x5d\xe2\x78\x3b\x9f\x39\x14\x66\x5c\x64\xd6\x40\x91\x99\x29\x74\xd4\xe0\x09\xd4\x53\x01\xd9\x0e\xf6\xac\xc3\x49\xb8\x86\x7c\xf1\x9f\xf8\xbc\x9c\x93\x52\x99\xd9\x42\xf1\xce\xa0\x97\x6a\xb2\x0f\xae\x2c\x0c\xa4\x76\xe2\x02\x3e\xaa\xc9\xb6\x31\xea\xc5\x19\x23\x57\x1e\x7e\x95\x3e\x03\x42\xab\x9d\x28\xa6\x4a\x90\x04\xec\x3c\x2c\x9f\x2b\xa7\xe0\x23\xe0\x59\x2e\xe5\x2b\x8b\xf4\xb8\x54\x82\x67\xf5\x5b\xe5\x4a\x19\x78\xf0\x96\xc2\x7a\xe2\x3d\xa5\x1b\xf0\x84\x99\x9b\x68\x96\xa6\x3b\x23\xd3\x91\x7d\xd9\x82\x69\xf1\x7e\x89\x3b\x25\xd9\xde\xd9\xb1\x46\xb3\xc3\xa2\x06\x75\xc7\x47\xea\x9c\xe2\x3c\x0a\xb1\x56\xea\x96\x81\xae\xbd\x52\xc6\x92\xfa\x64\x91\xd8\x94\x56\xbc\x56\xb6\x05\x07\xc5\xf3\x0d\xc1\x47\x63\xf3\x1f\xa7\xbc\x71\xa6\xc3\x1b\x36\x95\x55\x0d\x6f\x14\xbe\x55\x5b\xc0\x13\xaa\xa4\x32\xa6\x21\x82\x8a\xf9\x62\x3e\xe8\x42\x34\x97\xf7\xe6\x42\x7d\xd1\xd2\xc9\x77\xae\x42\x2a\x6f\x3d\x51\xf4\xb4\x16\xde\x6c\x8b\xb4\x0b\xc6\x52\x0c\xe1\xca\xaa\x05\x14\xa5\x68\x9d\xfe\xcd\xa9\xf3\x29\x05\x84\x23\x8c\x9c\x92\x39\x11\x0c\x15\x47\x05\x33\xbb\x02\x39\xc1\x0a\x39\x27\x4a\xd0\x5c\xcd\xa4\x06\xe5\x07\xcd\x69\xc2\x75\x44\x54\x90\x2e\x68\x72\x67\xfa\x00\x63\x21\xcc\xb6\x6d\x6a\xc9\xa9\x75\x3e\x0f\x8f\x44\x3d\x64\x4d\xcf\x0a\x59\xde\xce\x20\x82\x0a\xdf\x4a\x32\xaa\x30\x54\xae\xcd\x42\xbe\xb6\x77\x2b\xda\x2b\x92\x2e\x04\x9d\xf3\xc4\xd7\x9f\x28\xe4\x3d\x57\x5c\x5a\x0b\x13\x8c\xda\xbe\x68\x4a\x2e\x7d\x71\x00\x34\x6b\xbd\xcc\x28\x9f\x93\x13\xc5\x18\x79\xed\x6e\x09\x3e\xb9\x42\x16\x1f\x15\x96\x31\xd5\x53\x42\x8b\x98\xf4\xf5\x27\x85\x4d\xfc\xe8\x94\xaf\x81\x0f\x02\x20\x95\x88\x49\x8b\x74\xfd\xb4\x4f\xe3\xce\xf1\xfa\x25\xcb\x02\x9c\xdf\x5c\x55\x1e\x26\x52\x59\x39\xb7\xb4\xf4\x7a\x7e\x79\xa1\x42\xcd\x00\xde\x66\x5b\x77\x01\x1e\x64\x52\xdc\x86\x99\x16\x3d\x2e\x68\xe9\xd9\x90\x58\x01\x85\xdb\xef\x79\x5a\xd2\x0c\x89\x6b\xcc\x2a\x5f\x5e\x5d\xe0\xc8\xfc\x76\xa6\xc7\x0f\x0c\x94\xb9\xc8\x06\x55\xe8\xcf\xcd\x97\xaf\xb8\x20\x73\x05\x74\x58\x13\x2d\xdb\x2e\x28\xb3\x6a\x7d\xb3\xe6\x07\xba\x80\xf4\xc5\xd6\x95\xb5\xe6\xac\xe3\x12\xe2\xe3\x00\x53\xd9\x46\x68\xe6\x8e\x84\xdb\x43\xd4\xbe\xee\x73\x57\x44\x1b\x18\x72\x50\xcb\x9b\x23\x05\x88\x63\x75\xd1\xed\x57\x30\xa8\x9c\xe1\x3f\x42\xa6\x44\x51\x73\x5c\x5b\xe5\xb6\x3d\x48\x54\xf7\xd5\x99\xbd\x66\xf3\x3c\xa3\x7a\x2f\x0e\x34\x3f\x04\x76\x83\xc0\x9e\x6d\xf0\x18\x15\xe9\x98\x66\xe6\xb2\x5c\x7e\xff\xd2\x86\x2a\x22\xee\xe9\xe8\x29\x77\xed\x08\x91\xf0\xe5\x0f\x0d\x2b\xbe\x16\xed\x40\x46\xc1\x1b\x96\x02\x11\x71\x75\xad\xa3\x7c\x5e\xe5\x83\x60\x85\x3b\x7c\x97\xdf\xbf\x1c\x11\x3e\x61\x13\xf7\x2f\xdf\x99\x23\x91\x5a\xde\x62\x60\x88\x0b\x2e\x8a\xb1\x8d\xcb\x74\x82\xcb\x09\x95\xf4\x61\xef\x3f\xff\xd1\x2c\xd4\x3c\xfd\xd3\xf8\x8f\x41\x51\xa3\x3f\xfd\x6c\x68\x72\x54\x2d\xaa\x9f\x97\xbe\x0b\x43\x08\x7c\x71\xda\x9f\x2f\x6d\xa5\x41\x5b\x87\xf0\xe7\x48\xa7\x08\x42\x98\xd0\xc5\x62\x42\x2e\x25\xf8\xd1\xf1\x14\xef\x2c\xcc\xbf\x60\x7f\x71\xb6\x1d\xd8\x2e\xaf\x06\x4f\xa8\x66\x02\x38\x93\x8d\x45\xfb\xaa\x66\x63\xb7\x61\x00\xc0\x4e\x14\xa0\x74\x02\xfa\x53\x4c\x64\x32\x22\x5a\x4a\xc0\x97\x11\xe8\xdc\xb4\x73\x41\xd8\x27\xae\x20\x8f\x13\x82\x1c\xf6\x8d\xda\x10\x07\xc7\xcd\x99\x71\xcd\x51\xf0\xd9\xbf\x72\x19\xe3\x7c\x01\x00\xf8\x52\x48\xfd\xa5\xbf\x0d\xce\x25\x14\xd8\x36\x49\xe8\xbd\xe4\xae\x2e\xa6\xc1\x3c\x02\x4c\x25\x51\x39\x02\xec\x86\xde\x2c\xc8\x9c\x2b\x4d\xef\xd8\x84\x5c\x19\x9e\x2e\xf4\x12\xc1\x6d\x16\x04\xaa\xe4\xb0\x94\x94\x42\xf3\x2c\x52\xac\xf3\x73\x01\xc0\x04\xfc\x1e\x64\x05\x28\x13\xc3\x97\xe4\x05\x1b\x3b\xfe\x12\xdf\x8a\x52\xbe\xd8\x7a\x5f\x0e\x26\x15\x4c\x47\xfe\xec\xcf\x28\xea\x46\xf2\x14\x3a\x87\x7d\x69\xf5\x68\x25\xfe\xc6\xae\x44\x07\x18\x68\x48\x91\x54\xec\x23\x6c\xbb\x9a\x90\xf7\xc0\x13\x66\x31\xa7\x1c\xbd\xbe\x50\x19\x64\x6d\x65\x82\x25\x4c\x29\x5a\x2c\x46\x50\x19\x95\xfb\x8a\x98\xd6\x6d\xda\xf0\xcc\x31\x20\xa1\x02\xab\x8f\x16\x2c\x91\x42\xe9\xa2\x4c\x60\x1f\x29\xb9\x29\xe4\x1d\x13\x55\x58\x4d\xcc\xa1\xae\x47\x05\x54\xce\xc9\xe0\xd2\x22\x49\x32\xa3\xe2\x36\xa8\xf0\x3f\xa7\x29\x1c\xa3\x6f\xbd\x98\x15\x03\x0b\xe9\xb7\x8a\x4e\x8d\x6c\xc3\x35\xec\xd9\x8d\x61\xcb\x9c\x59\x31\x6a\xb6\x4e\x13\x3c\xaa\x0c\x83\x06\xb0\x3c\xdb\xb1\x2f\x6e\x17\x9b\xd3\x18\xb8\xf0\x76\xf9\xbd\x93\x8d\x69\xce\x34\x4d\xa9\xa6\xfb\x8c\x3c\x78\x47\x7d\xf1\x55\xeb\xce\x04\xbb\x1e\xb8\x39\x59\x56\xcb\x09\x87\x32\xe7\x61\x56\x8e\xcb\xef\x5f\x46\x8e\x04\xd2\x20\x6c\x34\xe4\xc0\xd3\xe6\x26\x59\x33\x3b\xc6\x0a\x80\x2c\x44\xb3\x4c\x3e\xd8\xdc\x99\x6e\x4c\xa4\x08\x2c\x25\x69\xd9\x41\x6b\x5f\xd1\x95\x38\xbb\x64\x47\xab\xa4\xd9\xef\x7d\x6e\xcc\x75\xe5\xee\x93\xd4\x83\x03\xd6\x4a\x14\x68\x49\x67\x42\xf3\x82\x05\xb9\x59\x22\x07\xb3\xbb\x5a\x0a\xbc\xea\xf5\xfd\xc5\x03\x70\xcb\xb4\xaa\xbc\x8a\x91\x03\x88\xee\x5f\x5b\xde\x11\x67\x09\xec\xac\xdb\x73\xab\xc6\x5b\xbb\xa8\xc8\xde\xf1\xdc\x28\x69\x29\xbd\xe1\x70\xf6\xb2\xe5\x7d\x6c\xc4\x58\xe8\xf8\x9d\x4c\xbb\x98\x95\xfb\x7a\x11\xd4\x86\xab\x02\xae\x30\xce\x4f\x81\x0e\x1a\x5f\x00\xc7\x16\x55\xcb\x4c\x83\x54\x6a\x46\xdb\xea\x58\xd7\x5b\x4f\xc5\x67\x25\xea\x8c\x7d\x85\x3e\x98\xd8\x18\x26\x36\x7e\x1e\x3d\x85\x2e\xbe\xb8\xae\x45\xfb\xe4\xd6\x07\xe9\x64\x33\x34\x78\xfb\xaa\xa3\xc9\xb3\xff\xb6\x57\xa3\x59\x32\x6e\xbd\x98\xbc\x07\x9c\x0d\x43\x67\xdc\xe0\xdb\x2e\x4b\xff\xb2\xc6\xf1\x5a\x21\xc9\xab\xbc\x30\xb2\xef\xc4\xe9\xc0\x26\x76\x7f\x5d\x76\xc0\xfa\xeb\xa7\xbd\x87\x05\xae\x7d\xbd\x12\xa6\x43\x9f\x17\xd6\x97\xd7\xc9\x8f\x46\x4e\x2b\xc0\x06\xe6\x02\xcc\xcd\x8d\x29\x64\x96\xb1\x02\x00\x68\xb5\x5f\x4b\x9e\x97\x50\xe3\x0b\x2d\xd0\x31\xd9\x9f\x5c\x73\x0a\x56\x2f\xda\x0a\xf6\xe0\x59\x72\xaa\x30\x45\xb4\x73\xf8\x01\x15\xb1\x73\x7b\x5d\x37\x72\x97\x3b\xfa\x83\x53\xc3\x9e\x8b\x05\x82\xee\x55\x70\x5c\x50\xdb\x49\x6e\xcd\xa4\x8c\xd8\x2b\xe8\x4d\x66\x78\xab\xe0\x48\xf9\x19\x2d\x31\x01\x5a\x06\x6f\x7d\x64\xd3\x2e\xe0\x00\x3d\x71\xf8\x71\xdc\x28\xc8\x45\xd4\x3e\x9c\x54\x4e\xd7\x56\xf0\xea\x94\xe9\xd8\x35\x7b\x3a\x6a\x9d\xd5\x1d\x1e\x97\xc6\x0d\xb3\x8d\xad\x9d\x6b\xfc\xe8\x3d\x1c\xa2\xfa\xb8\x44\x41\xce\x2a\xde\xaa\x87\xaa\x7f\x10\x29\x6b\x63\xeb\xe3\x43\x05\xae\xe2\xe0\x8b\xd9\xcd\x21\xa6\x3f\xb6\x24\xa8\x44\x85\x31\x9d\x62\xe3\x16\xfe\xe1\x58\x2c\xef\x62\x72\xc3\x0c\xfe\xa9\x52\xf1\x75\x39\x51\x04\x4f\x55\x38\xd2\x1a\x2f\xda\xea\x7a\x7f\x0b\xc5\xe0\xac\x69\xde\x65\x47\x30\xf4\xf5\xfc\xf2\x02\xe7\xd7\x75\xf4\x37\x80\xdf\x16\x96\xcb\xd6\x33\x5e\xa4\xe3\x9c\x16\x7a\x81\x8a\xca\x51\x6d\x6e\x3e\xc0\xbb\xd3\x20\x3d\x1d\x8b\xe2\xca\x3d\x86\xad\xb6\xdd\x00\x2a\x67\x7c\xb7\x3e\x18\x8d\x7b\x76\x88\xf5\xc4\x07\x88\xaf\x5d\x4f\x58\xc0\xcc\x29\xf5\x1e\x71\x3d\xdb\xbb\xfc\x93\x3a\xae\x3c\x2c\x0f\x64\x90\xb3\xaa\xbb\x1d\x22\xa3\x02\x62\x8b\x55\xfe\xca\x30\x30\xd5\xb3\xc1\xa0\x36\x32\x3d\x8d\x08\x9f\x1a\x22\x2d\xc5\x18\xac\xf3\x1d\x26\x52\xd9\x22\x2d\xd3\x3d\xb1\x1e\xee\xa8\xe8\x81\x0b\x19\xcc\x27\x18\xa4\xba\xe9\xe4\x44\xc8\x18\x3d\x90\x6b\x80\x27\xb0\xd7\x53\x0c\x3e\x68\xb0\x3b\xdd\x74\x49\xf3\x47\x2a\xee\x21\x54\x10\x05\x18\xcc\x31\x30\x5c\xa4\xe6\x90\x02\x49\x04\xd5\x91\x2a\x93\x84\x31\xaf\xbe\xb5\x97\xb4\x0b\xcf\x5d\xc3\x8d\x16\x60\x73\xaa\x93\x19\x53\x44\x49\xc8\x65\xad\x34\xcd\x32\x96\x7a\xab\x24\x6e\xa8\x04\xbe\xce\x5a\x2c\x3b\x8c\x18\x30\x86\x5d\x00\x14\x28\xcf\xac\xfe\x3a\xcf\xa8\xd5\x1b\x4e\x4b\x91\xa0\xd3\x2e\xd7\x8b\xb0\x46\x73\x8d\x59\x07\x85\x8b\x02\x15\x69\x17\x86\x72\x8a\x36\xa7\x40\x79\xe2\x0f\x12\x90\x96\x05\x12\x13\x23\xd2\x55\x56\x24\x9b\xa7\xd5\x50\x86\x1b\x9a\xdc\x3d\xd0\x22\x8d\xf7\x1a\x27\x90\xc5\x84\x6a\x8e\x65\x6c\x47\xc8\x8d\x85\x2c\x93\x38\x0e\x9d\x7a\xb8\xe8\xcf\x20\x86\x6b\x3b\x09\x40\xb6\xc2\x38\x9e\x7a\x86\x51\x31\x5f\x46\x55\x75\xe1\x5a\x88\xf5\x62\xa2\xa5\x96\x73\xaa\x79\x02\x9a\x55\x3e\x0d\x4c\xb4\x73\x5f\x64\xca\x3b\x29\x21\x51\x05\xa2\x6e\xa1\xde\xf9\x5a\xad\x67\x36\xb7\x02\x5b\x00\x29\xbb\x1b\x75\xa0\xb8\xa5\x06\xac\x46\xe7\xb9\x5f\xa3\xb3\x16\xf8\x86\x14\x8c\x11\x3e\x37\x62\x12\x85\x8a\xff\x53\x9f\xba\xc5\x99\xdc\x37\xed\x5d\x37\x49\xf4\x07\x70\xe7\x08\xfa\x43\x25\x75\x96\xc9\x07\x45\xf4\x83\xf4\xfa\xb2\xca\x0e\x6b\xf3\x9a\x8c\xea\xc3\x76\xa2\xa0\xb6\x7f\x83\xb6\xcd\x4e\x07\x98\x76\x64\x6e\xed\x03\xcb\x32\xf3\xff\x4d\xf8\xb6\x43\xa8\xd5\xda\x75\xf2\x5b\x81\x49\x30\xb8\x72\xfa\x51\x1b\xd0\x75\x92\x16\x32\xcf\xad\x05\x67\x7e\xba\xcd\x3a\xc1\x35\xa9\xb8\x67\x0a\xdc\xec\x5c\x38\x99\xd9\xb2\x5b\x26\x58\x41\x35\x18\xb1\x6d\xde\x62\x20\x8e\xcb\xd3\x89\xd7\x37\x62\xeb\x25\xa7\xb5\x1c\x03\xf4\x39\x58\xbf\xed\xee\x1d\xfb\xb4\xd3\x5c\xb9\xc0\x13\xe0\x6e\x6c\xa7\x2d\x85\x64\x75\xa7\xe4\x3b\x85\x1b\xe5\xe9\x85\x0f\xd3\x8b\x92\xce\xd1\x00\x66\x05\xf4\x4e\xc3\x9f\x67\xf9\x2c\x18\x3f\x94\x72\x7d\x98\x73\x1d\x52\xb5\x99\xbd\x2c\xa4\x52\xef\xdd\x27\x7b\x99\xe4\x20\x01\x0f\x12\xf0\x20\x01\x6f\x6e\x83\x04\x7c\xe8\xf5\x00\xbe\x3b\xe4\x9d\x7c\x1f\x32\x84\x75\x44\xbd\x33\x78\x10\xf2\x5e\x6a\xeb\xa9\x02\xfc\x3b\x6d\x54\x7a\x52\xc0\xe9\x0f\x74\x31\x11\x4c\xdb\x7c\x71\x4e\xb7\xff\xd1\x8d\xfe\x4d\x61\x38\x3f\x2b\xa0\x05\xb7\xc8\x5d\x60\x97\xcf\x2e\x18\x45\x4b\x24\xc5\x95\xe3\x0c\xfc\x7e\xac\xac\x33\x86\x79\x0e\xd1\xee\xa4\x56\x08\x63\x42\xae\xac\xab\xdf\xd2\xe0\xab\x69\xba\x52\xa6\x29\x8f\x4b\x89\x18\x36\x47\x29\xaf\x1b\x68\xf4\x01\x28\x21\xe9\x77\x64\x7d\xec\xe4\x21\x54\x2d\x55\x0c\x72\xe0\xd1\x1e\x46\x85\x54\x2f\x6c\x6f\x62\xbc\x98\x92\x8f\x2c\x91\xf7\xac\x40\x78\xbf\xfe\x94\x53\x61\xc4\xf4\x37\x94\x67\x06\xda\x0e\xea\x95\xf5\x02\xaa\x98\xd6\xfd\x09\x02\x23\x98\xbf\x46\x76\x6b\xcd\xc9\xe9\xc2\x0c\xfa\x7c\x73\xa6\x67\xeb\x65\x9b\x17\xec\x9e\xcb\x52\xb9\x78\x98\x52\x23\x1d\x53\xda\xca\xa6\x33\x7e\xeb\x8b\x9f\x3b\x37\x71\x70\xde\x29\x52\x7f\x55\x3a\xcc\x41\x69\xaa\x4b\x55\x4f\x52\x93\x80\x1f\xc0\xa3\x18\x6f\xfd\x7e\xef\x97\xe1\xeb\xc7\x5c\x61\xfc\xd0\x21\xd1\xf8\x5b\x8c\x58\xc2\x4e\x6e\xec\x2d\x70\x61\x56\x55\x98\x58\x22\xe7\x79\xa9\x59\x70\x5b\xec\x69\xed\x8a\xb6\x3a\x6e\x64\x2d\xe7\xe4\xd9\x9c\x0a\x7a\xcb\xc6\x7e\x12\xe3\x2a\xc2\xea\xac\x07\xd6\xea\xb8\xa5\x64\x8b\xa4\x87\x61\x7b\xc2\x91\x51\x4b\x8b\xed\x1e\xfa\x4d\xb6\x0c\xff\x26\xdb\x84\x80\x93\x5d\x86\x81\x13\x9f\x4b\xe2\x90\xd7\xf1\xa3\x1d\x73\xf9\x42\x5a\x62\xb5\xe9\x42\xf6\x13\x09\x2c\xd1\xb2\xa3\x72\x45\xe4\x9c\x6b\xcd\x9c\x13\xb2\xbf\x60\x23\xc2\x75\x2d\xd5\x81\x45\x1c\xa0\x34\x47\x47\x62\xf6\xc9\xd7\xf6\xad\x18\xb3\x8e\x93\x01\xe1\xe7\x81\x2b\x64\xbc\x04\xe1\xf3\x1c\xcb\x61\x00\x02\x18\xdb\x38\x47\xa7\x1a\xf6\xf3\x4e\xc0\x09\x90\xb0\x4f\xa0\xc8\xc7\xa9\x0d\x98\x69\xc0\x4c\x4b\xed\x97\x80\x99\x30\x8d\x44\x97\x2c\x27\x35\x8c\xe4\x3e\xb7\xf9\x25\xe9\x0d\xcb\xc8\x5f\x4b\x56\x2c\x88\x61\x5b\xab\x38\x2d\x28\x49\xac\x78\x8a\x01\x49\xce\x6a\xb6\x67\x2d\x59\x3f\xa6\x09\x2c\x6d\xaf\x3f\x19\xee\x1e\x92\xa6\x6d\x81\xaf\x97\xbb\xaa\x67\xe1\x44\x68\x79\x08\x86\x3c\x39\x7a\x8b\x86\xbf\x00\xdb\x7d\xfe\xfe\x55\x3f\x81\xaa\x9b\x97\x20\xe9\xe3\x29\xb8\xb2\xf8\xce\xc4\x8a\x90\xf3\x0d\x30\x41\xd8\xf9\x27\x40\x25\xbc\x9f\xa7\xd7\xd9\x93\x3b\xb6\x18\x59\x3f\x6e\x5b\x72\xde\xbe\xdc\x79\x32\x18\xd2\x51\xd5\x8a\x33\x9d\xc6\x66\xbe\xae\xb7\xde\x48\xb8\x9f\xa2\x17\x5b\x7c\x91\xbe\xfa\x57\x0e\x68\x5d\x71\x7d\x6f\x2a\xd1\xa9\x98\x5f\xd8\x9a\x0a\xfb\xe1\x19\x82\x2a\x5c\x2e\xb7\x81\x3f\x36\x90\x35\x02\x10\x52\xd7\x4d\x24\xfd\x15\x6a\xd8\x1c\x60\xb7\x5e\x6a\x8f\x8b\x15\x8e\x5f\x8f\xc5\xbf\x63\x8b\x63\x65\xb3\xce\x49\xa1\x66\x3c\x77\xd5\xe6\x01\x47\xf5\x3b\xf0\xd8\xbe\x07\x9f\x74\x37\x2c\x62\xb0\x0b\x31\x22\xef\xa5\x36\xff\x7b\x0d\x51\x45\x70\xad\x5e\x49\xa6\xde\x4b\x0d\xbf\x1c\x7c\x5f\x70\x89\x8f\xb5\x2b\xd6\x9a\xc9\xc1\xc2\x08\x68\x1a\xb3\xea\x40\x98\xbd\x85\xbe\xf3\xd0\xf4\x3b\xc8\x15\xb9\x10\x44\x16\x16\x94\xbd\x06\xd6\xae\x74\xad\xb2\xc3\x3a\xeb\x43\x65\xd4\x5f\x37\xae\xdd\x35\x59\xd4\x36\x6d\xc7\x53\xb0\xc3\x83\x2e\x12\x9f\x80\x76\x15\xbc\x4b\x5c\x2c\x0c\x16\x4b\xa5\x9a\xdd\x76\x72\x75\xa9\xda\x9c\x15\xb7\x90\x66\x31\xe9\x50\x66\x2f\x98\x7c\x4f\xc2\x8a\xad\x17\x79\x0d\x07\xee\x7c\xd8\x81\x17\x79\x0b\x71\x4e\x87\x94\x40\x83\x61\x91\x82\xcf\x69\x6e\x4e\xf8\xdf\x0d\xa1\x86\xcd\xff\x27\x54\x83\x56\x13\x72\x4e\x14\x17\xb7\x19\xab\x3d\xb3\xaa\xf4\xa0\x9b\xce\x13\x00\x0b\x97\xa1\xa3\xf7\x34\x63\x18\x4e\x49\x85\xaf\x8b\x28\xa7\x2b\x6c\xda\xc8\x96\x87\x36\x24\xc4\xbb\x7e\x1d\xdd\xb1\xc5\xd1\xa8\xa3\xb2\x92\x84\x78\xd7\x74\x72\x21\x8e\xaa\xbc\xab\xb5\xb3\xef\x79\x19\xb0\xe9\x1f\xc1\xb3\xa3\x5d\xf3\x81\x8f\x24\x08\x3e\x9a\x2b\xa6\x55\xdc\xbe\xcc\x28\x1a\x2f\x0e\x61\x22\x58\x1e\x73\x5d\x0d\xba\xab\xe0\x9d\xca\x6c\x64\x83\x7b\x1f\x51\x9b\x0d\x49\x53\x3a\xc7\x20\x75\xda\xd8\xe5\x32\x37\x07\xdd\x9b\xc6\xc1\x83\x58\x64\x9f\x38\xdb\xec\xc5\xf7\xeb\x3e\x08\x42\xb1\xb9\xea\xbe\x5d\xab\x95\xe2\x83\x7c\x20\x61\xa4\x8c\x2c\x6c\x50\xf7\x8a\x9f\x2e\x14\xc4\xab\x2a\x05\xc5\x56\xce\xac\x5a\xe5\x62\x50\x30\x95\x4b\xf4\x61\x5d\xbb\x58\x4b\x86\x67\x50\x3b\xdf\x79\xb9\x69\x92\x97\x45\x2e\x95\xad\x66\xb6\x7c\xe4\x3b\x46\x07\xd9\x90\x2d\x17\x81\x89\x41\xd2\xfe\x26\x98\xfb\xe3\x93\x2f\x9f\x2f\xe5\xed\x43\xa3\x53\x90\xc9\x4c\xc8\xf5\xcb\xe8\x30\x23\xe7\x54\x89\xb2\x82\xcf\x1e\x85\x93\xc1\xd0\xf5\x63\x74\xe7\x08\x4c\x6c\x86\xa3\xd6\xa1\x87\x93\x96\xf5\x99\x42\x44\x3d\x26\x58\xeb\x90\x51\x9b\xe0\x79\x29\x45\xe5\x2a\xe2\xa8\xc7\x7a\xb7\x3b\xc8\xdf\x76\x23\x4b\x61\x8f\x96\xcb\xfc\xb6\x2b\xa0\x98\x55\xba\x24\x04\x7e\x02\xf6\x68\x06\x41\x64\x7c\x6a\xd6\x6a\x13\x07\x74\x5b\x6b\xcd\x07\x07\x2c\xe0\x05\x82\xf8\x66\xb1\xfe\xfe\x92\x54\x32\xdc\x0f\x18\x6f\x84\xbb\xb0\x1e\x3c\x76\x19\x5d\xd0\x39\x7a\x91\x52\x72\xc9\xf0\x96\x28\x4d\x35\x1b\x61\x49\xcf\x69\x16\xd4\xb9\x61\x64\x2e\x53\x3e\xb5\xbe\x6c\x57\x81\x9d\x72\x84\xd9\x24\x6c\x2a\x88\x30\xd7\x75\x87\x89\x74\x07\xe6\xee\xe8\x02\xfe\xbf\xc2\x38\x49\xc7\xd3\xb3\xec\x87\xb7\xde\xc7\x60\x3d\xb2\xdd\x9d\x93\x5d\x0f\x3a\x15\x57\x37\xcb\xb5\x6d\x09\x13\x54\x12\x70\xc9\xe9\x6a\x69\x56\xab\xc8\x8a\xad\xb9\x85\xef\x01\x65\xca\x29\x79\x53\x15\x3e\xe5\x0a\x4c\x23\xdc\xa5\xae\x33\x97\x89\x8b\x24\x2b\xad\x89\x1e\x71\x9f\xc1\x41\x07\x80\xf9\x16\xcc\x40\xd5\x81\xe3\xba\x5c\x7c\xc6\x4a\x96\x93\x65\xfc\x00\x41\x01\xfe\x74\x76\x84\x6a\xe4\x5a\xa7\x2d\x79\x13\x6a\x6b\x99\x26\x75\x4d\xcd\x1b\x7e\x53\x30\xf2\x72\x46\x85\x60\x59\x90\x0a\xda\x9a\xcb\xa8\xd6\x34\x99\x21\xa6\xa4\xc4\xdc\xf3\x8c\x19\x3a\x35\x93\x4a\x93\x39\x4d\x66\x5c\xf8\x34\xa3\xc2\x27\x1e\xaf\x52\xbe\x1c\x3c\xc1\xd6\xde\x4b\x15\xdb\x13\x10\xd6\xf7\xad\x55\x30\x8e\xe8\xc9\xa7\x0b\x5e\xe9\xa5\xaa\x86\x68\xef\x21\xc0\x19\x65\x3d\xa0\x12\xf0\x6e\xcc\x18\xcd\x75\x94\xc9\xc5\xdc\x9b\x40\xb9\x08\x08\x21\xb3\x1f\x18\x32\x1b\xb0\x06\x51\xb9\xc0\xa0\x66\xe9\x4c\x3e\x90\x54\x92\x07\x06\xee\x3b\x86\x9f\x03\xe7\x76\xe5\xf8\xc2\x60\xb5\x10\xa9\x95\xc8\x79\x5e\xc8\x39\xf7\x6e\xd4\xf6\x40\xb5\x0e\xd8\x01\x09\x64\x65\x44\xbd\xa4\x7a\x66\xf4\xac\x14\x66\x97\xab\x0a\x38\x6f\x5e\x12\x4d\x8b\x5b\xa6\x4d\x6f\x44\x94\xf3\x1b\x56\xb4\xa7\x48\xdf\x5f\xbd\xb6\x83\x94\x57\xad\x41\xa0\xa5\x2a\x2a\xf9\xe8\xbe\x82\x48\x16\x60\x87\xa6\x32\x8e\x11\x41\xf7\x43\x57\xd3\x15\x2b\xfa\x99\x03\xf3\xbd\xa5\x5d\xa5\x88\x61\x4f\xba\x94\x5d\xc5\xbd\xfc\xe1\x87\xf7\x5d\x6b\xde\x1d\x57\x5f\x36\x1d\x90\x07\x59\x64\xe9\x03\x4f\xad\xa7\x29\x39\x31\x2f\x9f\xc6\x1e\x96\x1d\x97\xc0\xeb\x70\x4d\x1e\x1e\x78\xba\x97\xfa\xb3\xd0\x71\x1d\x54\x4e\xe4\x34\xa0\x22\x00\x2b\x9e\x32\xa1\x0d\xb2\x29\x14\x39\x81\x2f\x62\xf2\x50\xbc\xe6\x98\xe9\x0f\x46\x80\x52\x39\xf3\x1b\x2e\xaa\x6c\x95\xd5\x66\x19\x02\x65\xae\xae\xd3\x04\x2b\xa6\x31\x5d\x18\x64\x1b\x90\x7a\x46\x14\x9f\x97\x99\xa6\x82\xc9\x52\xc5\x57\x6a\x7f\x9c\xfd\x9a\x66\xec\x13\xde\x8e\x5d\x66\x55\xae\x7a\xad\x33\x08\x10\xac\x54\x65\xaa\x5d\xe6\x10\x5a\x7a\xad\x62\x40\xd3\x33\xcf\x4b\xf8\x6c\x7b\xec\x13\x4b\x6c\xb2\x8e\x3c\x2b\x6f\x79\x4b\x66\xa9\x68\x76\x21\xd6\xbe\x39\x8e\x29\xf8\xdf\xa1\x2a\x2e\x74\xd6\xf1\x16\x55\x19\x5b\x97\xd5\x79\x55\xad\xfb\x52\xb1\x2a\xd9\x7d\x6c\x86\xce\x0e\xb7\x7f\x60\x9a\xb0\x6d\x60\x9a\xc2\x7c\xf7\xc1\x04\x52\x96\x33\x91\x42\x09\xbc\x37\xd5\x05\x42\x28\xed\x74\x8b\x6c\xb9\xb6\xae\x14\xcb\x55\x79\xab\x91\xab\x40\x52\x9e\xc9\x2c\x55\x84\x7d\xd2\x05\x35\xf8\x73\x6e\x30\xa5\xff\x66\x4a\xa8\x58\x44\xd4\xda\x7c\x4a\x15\xb9\xc9\xa3\xf0\x47\xe9\x2f\x89\x3f\x52\x2c\x29\x98\x8e\x8a\x26\xee\x51\xeb\xc3\x75\x5e\x07\x60\xed\xe7\x15\xa9\x1a\x9f\xba\x98\x98\xaa\x18\x6f\xd4\x78\x42\x71\x28\x7d\xb7\x54\xe2\x37\xa7\x4a\x79\x41\x15\x88\x8f\xbd\xb6\xaa\x96\x5e\x22\x62\x08\x54\xc8\xf2\x29\x11\x72\x69\xa6\x61\xf4\x8f\xb7\x7b\xd7\x5e\x89\xe8\xde\x9b\xf0\xe6\x58\x3d\x80\x0a\x88\xa3\xc7\x6e\x46\x10\x5c\x8c\x7f\xab\x35\x45\xfb\x71\x65\x31\x70\xb2\x6b\xdf\xed\x65\xef\xe6\xbf\x13\x1f\xf2\xd6\x4f\x25\xf6\x3e\x20\xae\x2e\x8a\x2a\x56\x1b\xd3\x51\xeb\x29\xef\x59\x71\xcf\xd9\xc3\x99\x8d\xf2\x1a\x3f\x70\x3d\x1b\xdb\x40\xe9\x33\x90\x0d\xce\x7e\x05\xff\x8b\x1c\x1f\x25\xec\xf3\x34\xb5\xa1\x97\x36\xbd\x2d\x26\x74\x98\x04\xd5\x81\x47\x10\x09\x39\x22\x25\x4f\xbf\x8e\xea\xbb\x7f\x2d\x90\x0e\xe6\xd3\x29\xe4\x3f\xee\x52\xb9\xcb\x7e\xb1\xa4\xad\xb2\x3f\x5a\x66\x34\x46\x3b\x65\x6f\x73\x40\xa8\xcd\xf6\xbb\x8e\xac\x71\x81\x28\xb3\x5d\x55\x24\x60\x29\x5a\xd1\xcb\x1e\x74\x57\x29\xd5\x54\x31\x1d\xa7\xa9\xec\x7e\x05\x82\xee\x0d\x66\x0a\x6f\x83\x7d\x04\x26\x37\x06\xc9\x53\x5c\xae\x5c\x32\xfe\x93\x65\x4a\x45\xed\x4d\xc3\x8e\x5a\x20\xc6\x60\x97\x99\xab\x75\xe4\x1c\x76\x71\x94\xd4\x6c\x6e\x12\x95\x6f\xbb\xc3\x31\xb5\x73\xfc\xee\xbb\x8b\x57\x5d\x99\xf1\xea\x4b\xc7\xb3\xc2\xdf\x75\x30\xd9\x23\x05\x46\x31\xfe\xd7\x32\x94\x5f\xa1\xe4\x83\x3f\x5d\xf6\xfd\x5d\xad\xed\x36\x61\x95\x7e\xf9\x15\x57\x77\xbb\x94\xff\x56\x3a\xaf\xdf\xbc\x6f\x5e\xbe\x26\xf6\xd7\x4d\x2a\xe2\x96\x41\x76\xad\x40\xde\xba\x52\xd4\x6d\xc2\x2a\xc3\x54\xca\xd5\xdd\xa1\x05\xd0\x3c\x7d\xdf\x96\x0e\xe1\x69\x29\xbf\x97\xa5\x2f\x57\x72\x25\xa8\xbe\xb4\x90\x25\x79\xb0\x29\xe6\xa3\xe5\xbb\x6b\x9e\xbf\x20\xaf\x85\x2a\x0b\x56\x79\xd8\x2e\x0f\x66\x18\xaa\x1d\x4a\x7b\x50\xb2\x40\xbd\x38\xa0\xa2\xfc\xa0\xc7\xd5\x02\xf6\xc9\xea\xe6\x73\x5a\x68\x90\x05\xf7\x71\x62\x7d\xe7\x0e\x91\x07\x3f\x88\xdd\x1c\xd9\x8b\xa9\x0b\x44\xab\x7b\x45\x70\xe5\xbb\xa9\xdc\x0b\x80\x8a\x76\x3b\x96\x6f\x7c\x4d\x22\x72\x96\xb2\xfb\x33\x95\xd2\xe7\x23\x98\xaa\x0b\xbd\xae\xaf\x8b\x2a\x72\xf4\xfc\x28\x66\x8c\x2b\x3e\xe7\x19\x2d\xb2\x45\xad\xf2\x7c\xd5\x93\xa1\xee\x6e\x48\xf0\x30\x7c\x76\x44\x4e\x64\x01\x63\x27\x54\x90\x8c\xb9\x24\x68\x16\x39\x2d\x50\x0a\x3a\x7d\x92\x77\x60\x7f\x96\x18\xc4\xde\x7b\x39\xbe\xa9\xe3\xd3\x2c\x8f\x51\xab\x4d\xf3\xaa\x22\xc3\x5c\x18\xda\x3c\x21\xdf\x59\xba\x69\x79\x11\x3c\x1b\x06\x3c\xee\x8d\xa7\xbb\x33\x4f\x47\xa9\xb3\xa4\x9e\xd9\x91\xf2\x85\xac\xda\xcf\x9e\xf0\x6e\xb4\x2b\x89\x6e\xb9\xfe\xc8\x72\xb9\x53\xee\x13\xbb\x5c\x32\x3d\x70\x6d\x7e\x90\x8a\x43\x01\x66\xaa\x09\x45\x1c\x95\x94\x19\x35\x92\x21\x9a\x16\xda\x60\xf9\xea\xf5\xe5\xc7\xd7\x2f\xcf\xaf\x5f\xbf\x7a\x41\xbe\xb1\xe3\xf0\x50\xf6\x98\x90\xeb\xb0\x0c\x56\x10\x50\x6c\xcb\xde\xf8\x99\x8c\x2c\x56\x6f\xd5\xa1\xf9\x22\xaf\x50\xf8\x81\x0a\x72\x21\xb8\xae\xca\xd2\x63\x9c\x59\x26\x85\xf5\x51\x32\x7d\x5b\xb3\xc8\x2d\xd7\x36\x3b\x36\x0e\x65\x1e\xbb\xde\x5a\x06\xad\x8a\x4c\x40\x71\x6a\xbf\x8a\x83\x5b\x55\xaa\x4d\xdb\x95\x64\xec\xea\x3d\xef\x45\x2e\xf6\x25\xbe\x5d\xfe\x27\xb4\xe5\x56\xbf\xc7\x92\xee\x77\xae\x7e\x8e\xab\x00\x23\x0b\x2c\xf3\x89\xe7\xe8\x78\x32\x39\x9e\x00\xdb\x70\x3c\x39\x76\xbc\x6c\xe6\xfd\x75\x2d\x15\xae\x86\xed\x56\x29\xad\x7e\x5b\x26\x84\x7c\x70\x61\xea\x90\x7b\x77\xc9\x39\xd8\xfb\xfd\x56\x25\x80\x31\x6b\x59\xfd\xce\x45\xe9\x0e\x41\xab\x59\xde\x84\x13\xb7\xde\xc4\xb7\xfc\xde\xa6\xe5\xdc\xa9\x31\xa4\x9a\x60\xc7\xf3\x10\xae\xcc\x8a\xf7\x1f\xdf\xee\x76\x66\x88\x44\x3a\xcf\xcb\xe2\x1e\x3b\xab\x44\xce\xe7\x58\xcf\x69\xe6\x33\xc8\x55\xbe\xba\xb1\x88\x2f\x5e\xb1\x80\xc5\xad\xa6\x2d\xf7\xb0\x23\x4a\x77\x9d\x2e\x29\x12\xfc\xcf\x36\x4d\x84\xa8\xa4\xb8\x1d\x97\xd8\xb7\x35\xe9\x94\x4b\xb1\x65\x29\xe3\x99\x9f\xd9\xd9\xc7\xd7\xe7\xaf\xde\xbd\x9e\xcc\x37\xab\x9f\xf6\x80\x21\x99\x48\x73\xc9\xdb\xf3\x24\x8d\x49\x4e\xf5\xe6\x2c\xc6\xf1\x58\xd4\x0f\xba\x0f\x2c\xea\x3b\x77\x67\xd8\xfd\x10\x14\xf2\xb3\x59\xc4\x82\x33\xa0\x65\x2e\x33\x79\xdb\xb7\x2c\x7e\x87\x1d\xfe\x15\x7a\xfb\x8f\xe9\x38\xa6\x74\x60\x27\x29\x56\xcf\xf6\x23\xc0\xea\x99\x83\x65\x05\x30\x2f\xaa\xe9\xa8\xf8\xc2\x27\x0a\xb3\x47\x63\xe6\x57\x00\x89\xfa\x1c\x40\x45\xae\xca\x61\x55\xaf\x2f\x67\xc5\x9c\x63\xf4\xde\x21\xb9\xfc\x3d\xef\x50\x3b\x83\x6f\x90\xf1\x65\xeb\xb1\xee\xb6\x35\xae\xcf\x3a\x35\xc8\x0b\x36\xf6\x65\x89\xa6\x3c\x83\xf0\xa4\x8a\x91\x08\x88\x43\x4b\xf7\x4e\x95\xec\xb4\xd2\xd8\x47\xb6\x58\x56\x29\x57\x4c\xb1\x57\xe2\x63\x3a\xe6\xf6\x0a\x94\xbe\x7c\xa8\xd5\x93\xd1\x5b\x2c\x2b\x54\x58\x93\x5c\x5e\xf0\x7b\x9e\xb1\x5b\xa8\xa6\xcc\xc5\xad\xaa\x32\xdb\xd9\x90\x9e\x96\x01\x20\x42\x8c\x55\xe4\xd0\x5b\xb0\xde\x99\x7f\x55\xc9\x7a\xf0\x50\xbf\xff\x70\x0d\x95\xce\xc1\x9d\x63\xcf\x6a\x72\x33\x9d\x56\x42\x44\xc8\x78\xdc\x76\x0a\xae\x3f\xbc\xfa\x70\xf2\x17\x23\xf7\xa4\xd9\x29\xf9\x81\xd9\x15\x40\xa4\x93\x2e\x78\xa2\xc9\xc3\x4c\xfa\x1a\xd0\x00\x85\xea\x34\xc0\x2d\x45\x6f\x3e\xfb\xd6\x99\x79\x53\xc8\xd6\xc3\x01\x9c\x46\xad\x37\xce\x14\x06\xdb\x38\x2f\x8d\x83\x0b\x49\x3b\x24\xec\x7b\x25\x41\xce\xf6\xb5\xee\x52\x46\x6a\x49\x51\x4d\x89\xe4\x8c\x12\xb5\x98\x67\x5c\xdc\x8d\x7c\x09\xaf\xa9\xb4\xc9\x4b\x19\x31\x0f\xdc\x55\x2d\x18\xcd\xb6\x21\x74\x7b\x38\xe0\x9d\x88\x9c\xde\x93\x2d\x06\x2c\x21\x06\x0f\xfd\x2f\x87\x52\x51\x1d\xd5\x91\x42\x1d\x1d\x7d\x7e\x60\xe5\x2a\x51\x7c\x97\x54\x09\x3a\xac\x91\x24\x41\x2e\xae\x5e\x5e\x5d\x7c\x2e\xc6\xce\x26\x5e\x01\x16\xf6\x78\xf2\x0d\xff\x6b\x9b\xe2\x60\x4c\xb2\xb2\xfd\x1d\x54\xc5\x5c\xca\x42\xd3\xcd\x65\xb3\xe3\x91\x65\x32\xa3\xf9\x79\xa9\x67\xaf\xb8\x82\x2c\xb8\x5d\x99\xd0\x95\xef\x83\xd8\x3a\xac\x3d\xef\xea\x1c\x72\x77\x90\xec\x7b\x2f\xff\xd7\xf9\x25\xa1\xa5\xd9\x7c\x6d\x8b\xd0\xee\x8c\x65\x0b\x57\x76\x85\x19\x27\x7a\xae\xcb\x7e\xdd\xb2\x2a\xf7\xd6\xbe\xd7\xf4\x58\xae\xc9\x83\x59\xfb\x80\x66\x6d\x40\x56\x9f\xb5\x29\x9b\x0b\xae\x39\xd5\xb2\xd8\x97\x3d\xb0\x36\x80\x57\x13\x96\x4a\xcb\xb9\xbd\x91\x17\xee\x0d\xf0\xec\x8a\xe4\xcc\x56\xba\xad\xb4\x8c\x20\x0b\xc3\xce\x5c\x08\x23\x75\xd2\x84\x2d\x85\xc9\x8c\xa0\xe6\x2a\x8e\xce\xdd\x3b\x11\xe3\xfe\xd1\x2a\xd8\xa1\xca\x51\xf6\xa7\x17\x7f\x0c\x2c\xe4\x7f\xaa\xca\x95\xba\xda\xd8\x56\xff\x99\x48\x21\x58\x12\x57\x7f\xbc\xcb\xce\xfd\xb5\x2b\xa2\xe4\x7f\x15\x4b\x96\x02\x04\xc1\xff\x2e\x69\x86\xa0\x8b\xdb\x80\x2e\x93\xac\x6d\xc3\x5e\xce\x57\x7d\xa3\xed\xfa\xfc\xae\xa2\xb7\x20\x20\xb0\x52\x61\xe1\x22\x5c\xb4\x2e\xa8\x50\x66\x23\xbb\x2a\x48\x8e\xad\xb7\xc4\x31\x39\xd1\x49\x1e\xe1\x38\xb0\xd7\xa0\xcf\xac\x14\x21\x17\x88\x6b\xbb\xc6\xdd\x7d\xeb\x83\x3e\x63\x27\xb9\x17\x57\x03\xb8\x2c\x7b\x51\xdd\xda\xae\xfd\xa6\x87\x8b\x47\xd6\x8b\xbc\xe5\x4a\x63\x10\x0c\xbe\x0c\xc9\xaf\x30\xfe\xce\x70\xcc\x97\x44\x16\x84\xe7\xff\x4d\xd3\xb4\x78\x81\x5c\x82\x95\xfa\x64\x11\xe3\xe3\xce\x95\xaf\x28\x43\x85\xf7\xa3\x39\xd1\x8b\xdc\x16\x8f\xbb\x7e\x79\x09\x7d\x29\xf2\x87\xdf\x3d\x03\x16\xfa\xdf\xbe\xfa\xdd\xb3\xe8\x53\xf3\x78\x81\x95\xff\x6a\x6e\x0b\x87\x08\x34\xa9\x05\x8b\x40\xa6\x23\xc3\x84\x5e\x61\x5c\x85\x21\x17\x16\x35\xe1\x09\x36\x87\xc5\x93\xb9\x7e\xac\xea\x10\xed\x30\x44\x3b\x74\x4d\x16\x17\x4a\xae\x7b\xd1\x02\x05\xfd\x43\xa6\x95\x55\xac\x8d\x08\xfb\xf2\x73\x44\xd8\xad\x1b\xd4\x7e\x7b\xba\x81\x34\x74\xaf\x8b\x8b\xb0\xad\x02\x52\x5f\xbd\xbf\xfa\xef\xb7\xe7\x7f\x7e\xfd\x16\xd6\x69\xfd\xf5\xcc\x15\xb0\x02\xc9\xee\xdd\xd8\x77\x74\xe1\x62\x61\xbd\x5b\xc7\x00\xb1\xe4\x12\x20\xc8\xfb\x37\x57\x1d\xbd\x01\xf6\x6b\xee\x10\xd3\x18\xb8\x1d\xd6\x1a\x60\x5e\x82\x7a\xa2\xbb\x8a\x56\xdf\xab\xd1\x20\x28\xb7\x51\xd3\x6a\x98\x9d\xc6\x55\x1c\x40\xad\xd0\xb6\x8d\xe4\x33\x61\xe5\x0c\xd0\x10\x90\x4f\xd2\x5c\xbd\x9f\x2d\x89\x65\x21\x8b\xee\x29\x17\x22\x03\x95\x8b\x20\x2f\x83\x41\x48\x48\x22\x0a\x43\x3c\x0d\xd9\x64\x4a\x39\x82\xf1\xb9\x9e\xea\x7c\x5d\x36\xc3\x5d\xa2\xfa\xb5\x03\xd8\x4c\x86\x2e\x15\x63\xe0\x0d\x50\x0b\xfc\x6e\x33\xaf\x34\x64\xaa\x44\x02\x02\xa5\xb9\x7d\x21\xc4\x3d\x59\xc7\xd7\xa4\x34\x5c\xce\x5e\x09\x19\xdf\x0e\x4e\x4c\x60\xd4\x1d\xc6\x95\xf9\xfe\xf6\x71\xd1\x7c\xe7\xcb\x39\x50\x68\x97\x2d\x26\x54\x39\x5e\xcb\x3a\x52\x77\x4a\x96\xf2\xc8\x67\x80\x3c\x41\x4a\xf4\xc3\xde\xf4\x09\xbb\xd6\x25\xe4\x33\xa9\xa5\xe8\x1d\x1a\xbb\xee\xf3\x3a\x5e\xba\x84\x37\x5e\x56\x89\x68\xab\x2d\xc6\x10\x1b\x6f\x16\x36\x02\x80\xa3\xce\x52\x38\x13\x70\xdd\x02\x7c\x70\xd6\x32\xbd\x78\xb5\x23\x44\x30\x24\x0a\xc2\x76\xc8\xec\x8a\x5d\x5c\x51\xd3\xce\x11\xef\xe6\x13\x07\xf5\x8b\x57\x96\x6f\x77\xe1\xec\xca\x9e\x7c\xd2\x7c\xf4\x77\xc6\x8a\xc8\x42\x3f\xc8\xa2\x7b\x62\xb3\xfa\x87\x4b\xde\x85\xf6\xd9\x4a\xbe\x88\xa7\x78\x4d\x71\x8e\x9f\xc3\x55\xbd\x82\xab\xba\x54\xaa\xb8\xe9\xca\x3e\xd5\x1b\xfb\xb8\x37\xf5\x20\x14\xfc\x17\x95\x95\xca\x5d\x8f\x8e\x10\x73\x9f\x59\xb5\x9c\xd9\xeb\x0a\xbb\x51\x50\x8e\x06\x18\x62\x67\xd8\xac\x90\x7f\x81\x1c\xee\x5d\x10\x99\xfb\x06\xed\x50\x58\xdb\x34\xcb\x0c\x54\xa5\x08\x6b\xa8\xda\x6c\x4f\x23\x82\xd5\x3d\xe7\x34\x57\x58\xfd\x25\x95\x0f\xe2\x81\x16\x29\x39\xbf\xbc\xd8\x0d\xf6\xea\x10\xa1\x87\x67\x2d\x2e\xb3\x79\x8f\x18\xbd\xaa\x7b\x70\xa8\xb6\x79\xf1\x19\xb9\xe1\x5a\xd5\xea\x6b\x04\x4a\x10\x83\xda\xbd\x17\x81\xc1\x2c\x06\x8b\xd8\x9e\x3a\x71\x12\x82\xc8\x44\xd3\xcc\x15\x23\x67\xfa\x81\x31\x41\x9e\x3d\x7b\x86\x9a\xed\x67\xbf\xff\xfd\xef\x09\x54\xa2\x4d\x59\xc2\xe7\xab\x2f\xc2\x5b\xff\xe3\xf9\xf3\x98\x41\xff\xcf\xf9\xbb\xb7\xb6\x5a\xbf\xc2\xdc\xa4\x38\x36\x6c\x70\xd8\xbd\x1a\x91\xff\xbc\xfa\xf0\xbe\x4a\x76\x5f\x7f\x0a\xe7\xc7\x83\x28\x8a\x3b\x0f\x5c\xa3\x43\xed\x35\xd5\x33\x80\x39\xd4\xa6\x98\x4e\x83\xda\x04\x58\x75\x42\x47\xd6\xdc\xc4\xac\x6a\xfc\x76\x06\x40\xe5\x02\xce\x6f\x06\x3e\xdf\xdc\x2c\x13\xec\x09\x2e\xf9\x20\xba\xce\xc3\x68\x9e\xbc\x44\x8c\x61\x16\x3c\x22\x19\xbf\x63\x64\xaa\xbe\x29\x64\x99\x57\x85\x91\x0a\xa6\x8c\xf0\x61\xeb\x82\xe0\x70\xd5\x19\x8a\x2a\x9f\xb1\x3f\xf3\xbe\xbd\xdc\x5d\x2d\xa1\x16\x25\xb8\x1a\x85\xb6\x06\xa8\x0b\x12\x42\x8c\x62\xe0\xf9\x38\x76\xf2\xda\x5c\x2f\xfd\x6c\x70\x73\x6d\x6d\x9c\x0a\xed\xd1\x4c\x8a\xdb\xf0\x2c\x54\xd4\xdf\xb9\xe1\x2d\xf2\x28\x13\x62\xc7\xb2\x54\x5d\xab\x4c\x26\x18\x87\x73\x5d\x94\x4a\xff\xb9\x14\x69\x16\x5d\x58\xa0\x6f\x29\x87\x97\x2b\x23\x62\x48\x89\x35\x8c\x80\xba\x2c\x49\x98\xc2\x63\xf0\xf3\x04\x6a\x2a\xe8\xea\xed\x9f\xd1\x74\x1a\x3d\x9e\x9c\xae\x1b\xd2\xda\x97\xcc\xd5\xa5\x82\xd0\x52\xcb\x31\x54\x12\x72\xb1\x3b\x93\x2f\xbe\x88\x1e\x01\x4a\x77\x8c\xa0\xfc\x86\x67\xee\x56\x87\x0c\xce\x4c\x58\xb0\xa3\xcb\x40\x1b\xd6\x61\x30\x81\xb5\x89\xde\xb8\x6a\x9e\x38\x1b\x41\xe7\x6c\x64\x50\x3a\xce\x2c\x7a\xb0\xa5\x14\xd4\x8a\xdf\x0a\x56\xa0\x42\x0b\xaa\xc7\x2e\x55\xa2\xed\xb2\x8e\x6f\x51\x46\x31\xf4\xcd\xe0\x15\x45\xe8\xed\x2d\x94\x96\xbb\x37\x98\xb9\x98\xd3\x8c\xff\xad\xca\x7d\x3d\x63\xe4\xf2\xf5\x3b\x88\x19\x02\x0e\xdd\xb0\x7c\x9a\xc5\x04\x73\x63\xf3\xa9\x04\xcc\xe9\xaa\xb8\xf2\x09\x21\xaf\x95\xd4\x90\x10\xda\xf4\x6f\x37\x45\xf9\x1a\x34\xe0\x30\x36\xbe\xc9\x64\x12\x93\x9a\xc8\x03\xcd\x16\xa1\x13\x29\x81\x4f\xc9\x8c\xd1\x94\xd9\xe2\x9e\x86\xd9\xca\x73\x96\x4e\x08\x79\x69\x6e\xe9\x94\x27\x50\x41\xd7\x3c\x4b\x59\x5a\x1a\x26\x1e\xb2\x38\x44\x0f\x78\x3d\x63\x44\x16\x29\xc3\x0a\x4a\x53\x92\x84\xdd\x06\x94\x0f\xe2\xd1\xa0\x58\xe4\x0d\xd7\x05\x2d\x6c\x0d\x60\xbb\x13\xd1\xc3\x19\x44\x87\x55\xa8\xa0\x57\x18\x19\x0b\x59\xc7\xc4\x35\xbb\xd6\xa3\xd4\x5e\xf7\x32\xbf\x51\x76\x48\xd7\xfa\x14\xe7\x85\xf3\x7f\xd5\xb9\x3a\xf8\x76\xf5\x22\x71\x3c\x60\xa6\x57\xb1\x81\x72\xd4\x48\x27\x33\x64\x69\x96\xee\x28\x21\x28\x23\xd1\x6e\x35\x22\x19\xf2\x2e\xdc\x61\x01\xef\x60\xcb\xf4\xc4\xb0\x96\xba\xa4\x59\xb6\x18\xb3\x4f\x86\x9a\x98\x4b\x0c\x84\x0f\x52\x25\xb8\xe2\x5c\xac\x63\x05\x54\xb8\x7c\x79\xc1\x34\x26\x57\x3c\xc2\x35\x09\x09\xd1\x88\x47\xd8\x2d\x54\xda\x2a\x35\xa6\x6b\x1a\xad\xff\xa4\xdb\x3a\xef\x59\xb1\xb0\x23\x74\xf8\xb0\x67\xe5\xc8\xbe\x05\xa1\xb7\x2b\xbf\xfe\xf4\x0a\xb0\x6f\x53\x29\xb6\x67\x95\xd8\xed\xeb\x12\x3f\xa9\x42\xec\xbb\x2c\xc5\xbe\x55\x31\xf6\x6d\xca\xb1\xf7\x2d\xc8\xbe\x45\x49\xf6\xed\x8a\xb2\xf7\x2e\xcb\xfe\x18\x85\xd9\xb7\x2c\x01\xbe\x5d\x71\xf6\xdd\x14\x02\x7f\x84\x02\xed\x87\x2c\xd1\xbe\xf5\x0e\xf5\x2f\xd3\xbe\xab\xfd\x79\xb4\x52\xed\x4f\xa2\x58\xfb\x63\x97\x6b\xdf\xba\x60\xfb\xb6\x25\xdb\xb7\x2a\xda\xbe\xc5\xf1\xef\x5d\xb8\x7d\xfb\x73\xff\xe8\xc5\xdb\x9f\x40\xf9\xf6\xa7\x52\xc0\x7d\x2b\xce\x65\x17\x45\xdc\x7b\x1f\xe1\x5d\x14\x72\xef\x12\x84\x81\x6d\x17\x62\xa8\x3b\xd3\x6b\x34\x53\x37\x0b\x57\x3a\xc4\x0a\x82\xab\x72\x62\xa7\x21\x41\xa6\x0c\xe4\x4f\x28\x84\x16\x8a\xe0\xdd\x45\xb6\x8e\x1b\x25\x5d\x89\x97\x03\x01\xd9\xd0\xab\xa2\x64\x23\x92\x4a\x71\xac\xad\x3a\x29\x97\x29\xe6\x61\x2c\x73\x17\xe7\xe0\x5d\x0d\xd3\x35\xfb\x70\x12\x55\x7f\xae\x6a\xb4\x60\x66\x30\x7a\x4f\x79\x46\x6f\x32\x27\xc1\x83\x1b\x1a\xaa\x12\x21\xe1\x83\x73\x6e\x5b\x37\x64\x7b\x29\xb5\xa5\x21\x6d\x91\x70\x21\x01\x77\x41\x0e\xa5\x70\xd8\x6a\xd3\x83\xc1\xeb\xea\xc9\x4e\xe3\x6d\x3a\x44\x80\xc5\xab\xa2\xe5\xa8\x76\xf8\x1b\x2b\x64\xa7\x11\xd6\xa8\x66\xba\x9f\xce\x38\x5b\x72\xd5\xe2\x9c\xe0\xab\x56\x3b\x9a\x1f\x81\x7d\xbe\xb7\x26\x32\x88\x35\x0f\x72\x06\x14\x12\xb7\x06\xac\xed\xf0\xe0\x06\x56\xb5\xf7\x2b\x57\x6d\xd5\x13\x55\xb0\x05\x6a\xf1\x6e\xd4\xaa\x45\x6b\x76\x6d\xf3\x7b\x61\x5a\xae\xa9\x2d\x8d\x84\x5a\xfd\x6d\x8f\xa2\x0f\x4b\x2f\x45\x55\x30\xbf\x9f\xfa\xb9\xc7\xb6\xa2\xa5\xff\x1d\xcd\x7b\x19\x9a\xfc\xd7\xb5\x1a\x58\xf4\x46\x96\xda\x45\xd6\xdb\xe7\x50\xf1\x45\x4b\x67\x94\xdb\x9f\x6a\xba\x8f\x0e\xa1\x33\xa3\xbc\xcd\x91\x46\x1f\x8c\xba\x07\xd0\x88\x30\x9a\xcc\x0c\x07\x38\x46\x03\xbf\xe1\x52\x1d\x3b\xfa\xca\x80\x0e\x19\x43\xb9\x4c\x62\xba\x1d\x3e\xbf\x1b\xee\xc8\x05\x9e\x21\xce\x2c\xe3\x1c\xda\x94\x75\x9a\xb2\xcc\xa9\xa8\xdc\xa8\x3b\x8d\xe9\xd4\x5f\xf6\xf6\x38\xd5\x0a\xac\x12\x64\xc0\xa5\xec\xc1\x19\x57\x66\x3a\x77\x6c\xe1\x2f\x46\xa7\xf1\xd6\xac\xa8\x4a\x3c\x61\xb0\xa9\xf5\x68\x29\xc5\xca\x48\x50\xb2\xb5\xeb\x68\xa0\xf7\x80\x85\x50\xa7\x3a\x0a\x12\x5d\xcc\x78\x02\xa9\xc9\x4c\xd7\xf6\x5d\xb7\xab\x7e\x33\xba\x89\xb7\xc1\x16\x29\x66\xb8\x0e\x98\x3a\xa4\x29\x31\x6b\x62\x4a\x11\x0e\x50\x9e\xd3\xe2\x8e\xa5\x9e\x4b\x9a\x90\x4b\xb3\x78\x27\x03\x77\x1a\xb3\x70\xd4\x08\x9c\x1b\xe9\xa2\x96\x88\xda\x4c\xe8\x78\x32\x39\xb6\x29\xdd\x56\xd3\x52\x77\xc6\x5e\x5d\x05\xde\x1e\x62\x6e\xed\xfe\xbe\xa3\xb9\x42\x71\xdf\xb0\x37\xa0\xee\x93\x90\x0f\x5e\xcf\x9c\xcd\x8e\x76\x70\xf7\x5f\x5e\x4e\x0f\x01\xa8\xaf\xda\xb6\x8f\xca\xb6\x93\x61\x0e\x5b\x7f\x35\x6d\x2f\x15\x6d\x93\x7a\xd6\xee\x94\xbd\xf1\x7d\x35\xeb\xbd\x14\x7c\xf3\x28\x67\xb4\xe5\xb6\xbd\x5a\x0f\x9c\x8a\x6a\xe5\x2d\xa3\x5c\xd5\x6c\x59\xd6\x6e\x1c\xa2\x6b\x8f\xe2\xab\xb6\xdc\x1e\xcf\x77\x6d\xb9\x5d\x4c\x01\xfd\xad\x4f\x7a\x1f\x3a\x13\x7a\xb6\x4e\x75\x57\x9d\x90\x03\x39\xb5\x2d\xb7\x3d\x3b\xb9\x2d\xb7\x6e\x4e\x6f\xcb\xad\x8b\x13\xdc\x72\xeb\x2a\x9d\x61\xdb\xfe\x02\x87\xa9\xb7\x8b\x9a\x90\x67\x59\x3b\x60\xb9\x40\xd4\xcd\x03\x24\xd7\xeb\xde\x5a\x42\x8d\x57\x97\xde\x28\x99\x95\x3a\x3e\xbf\x77\x53\x77\x21\xdd\x87\x89\x3b\xcd\x66\x57\x62\xbf\xdc\x71\xc0\x37\x00\xd7\x86\xe4\xb8\x5f\xaf\xbd\x50\xfb\x21\x35\x76\xdb\xa4\x50\xc1\xf6\xd8\x89\x54\xb0\xed\x2f\x9d\x0a\xb6\xc7\xd1\x0c\xba\x0e\x7c\x35\x34\x97\xa9\xb2\xc6\xb8\x43\xa2\x13\xad\x50\x82\x70\xb6\x25\xcc\x6d\xd9\x45\x2e\xeb\xa3\x5e\xda\x5e\x45\xed\x3c\xfa\xcf\x2f\x2f\x7a\x49\xfe\xc1\xf7\x0d\xb2\x7f\xf8\xc6\x2f\x58\xfa\xbf\x40\x71\x3e\xf4\xd3\x79\x55\xad\xdc\xc6\x8e\x75\x24\xc7\x8f\x23\x07\xad\x4c\xfb\x8d\xa1\x45\x61\xee\xba\x7a\x9d\x73\x0c\x80\xa8\xa8\x56\x55\x3d\x3d\xf0\xef\xec\xe2\x1b\x4c\x1e\x47\x66\x3a\xa0\xfc\x03\xf0\x88\x4a\x4b\xb6\xdc\x6a\x3b\x75\xfc\xd1\x2d\xd6\x2a\x48\x51\x59\x13\x68\x88\x72\x99\xbe\x40\xc3\x1e\x15\x42\x6a\xf4\xc5\x18\xa1\x72\x5d\x8d\x2a\xbf\xe1\x20\xca\xbd\x08\x82\xe2\x26\xc7\x9f\x93\x9f\x12\xac\xfc\xb2\xeb\x2e\x92\xad\x1d\x8e\x2a\xea\xb6\x03\x37\x0f\xdb\x93\xdb\x40\x95\xcc\xd8\x9c\xc2\x9f\x6f\xdc\xf2\x0c\x96\xb1\xee\xd6\xa0\x45\x62\xc5\x5c\x11\x39\x1d\xd5\xc2\xf1\x8e\xee\xe3\x0a\x75\xae\xb6\x2d\x1d\x5e\xfc\x2e\xec\x00\x18\x97\x35\x8e\xd8\x9c\x6b\x10\x6c\xc1\x16\xe0\x92\x34\x78\x2d\x9b\x21\x30\xf7\x08\xbd\x47\x58\xf8\x6e\xac\xc5\xd8\x1e\x4b\xad\xd0\x57\x9d\x30\xf2\x6c\x4f\x5d\x39\xd0\x63\x0a\x83\x3a\x61\x50\x27\xfc\x4b\xab\x13\x02\x9a\xee\x70\xfd\x1a\x2d\x41\x98\x4c\xd0\xa9\x0a\xaa\x8c\xd6\x93\xaa\x4e\xa4\xb9\x93\x4e\xe4\x97\x45\x5d\x5b\x6f\x64\x6a\xd4\xd7\x4f\xbc\x76\xaf\xd4\xd3\xf1\x1f\x08\x13\x89\x4c\xa1\x6c\x29\xf4\x5f\x28\x0d\x5c\x65\x25\xa9\x86\x73\x99\xbb\xb1\x42\x8d\x3f\xf4\xdd\x97\x7b\xe8\x85\x82\x5d\xf8\xf2\x9b\xdd\xf0\x56\xbd\x10\x68\xc5\x85\xf9\xba\x1e\x16\x64\xbe\xb6\x92\x65\xc7\xaa\x60\xeb\x8c\xcf\xb9\x75\x56\x35\xd8\x85\xa9\xd6\x92\x7d\xeb\xda\x09\x76\x33\x49\xf2\x72\x64\xbb\x9c\xcc\xd9\x5c\x16\x8b\x91\xef\xd6\x3c\xac\x8d\x63\xdf\x38\x05\xa6\x2f\x29\x8b\x82\x09\x9d\x2d\x02\xf6\xef\x73\xe2\xfe\x1c\x44\x0f\xcc\xfc\xf9\x8d\xed\xea\x0e\x51\xb5\xfa\xfd\xaf\x6a\xf8\x82\x22\xca\x43\x05\x68\x8c\xcd\x00\x35\xaa\x54\x13\xe6\x57\x26\xee\xc9\x3d\x2d\x54\xf7\xfb\x46\xb6\xe7\xf7\x52\x7e\xcf\xd5\x4e\x3c\xd0\xaf\x2c\xf1\x43\xb5\xa8\x2c\x75\x5e\x6a\x8b\x8e\xdd\x35\x72\x15\x6d\xfc\xf5\x59\x62\x7a\x9f\xc7\x94\x1c\x5a\x6d\x39\xd5\x9a\x15\xe2\x05\xf9\x7f\x27\xff\xf5\x9b\x7f\x8c\x4f\xbf\x3e\x39\xf9\xf1\xd9\xf8\xdf\x7f\xfa\xcd\xc9\x7f\x4d\xe0\x8f\x2f\x4f\xbf\x3e\xfd\x87\xfb\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xf6\xdd\x37\xd7\x97\xaf\x7f\xe2\xa7\xff\xf8\x51\x94\xf3\x3b\xfc\xd7\x3f\x4e\x7e\x64\xaf\x7f\x8a\xec\xe4\xf4\xf4\xeb\x5f\xf7\x9a\x2e\x15\x8b\x0f\x3d\xf0\x1b\xb6\xf1\x96\xf4\xb1\xde\x4b\xef\x63\xb3\xc4\x31\x73\xa1\xc7\xb2\x18\x63\x77\x2f\xc0\xc3\xae\x47\xa7\xee\x58\xec\xe2\x1e\x56\x74\xb8\xaa\xd1\xe4\x84\x8f\x47\xb8\x68\xdb\xcb\x17\x98\xd5\xa3\x97\x96\x0f\x3f\x6d\x50\xf0\xd9\x87\xbf\x60\xdd\xde\x67\xe3\xd9\x63\x33\xd4\x0f\x6e\x3d\x8f\xee\xd6\x83\x3b\x31\xf8\xf4\x54\x8b\x1b\x7c\x7a\xa0\x0d\x3e\x3d\x61\x1b\x7c\x7a\x6a\xe3\x0e\x3e\x3d\x83\x12\x6e\x50\xc2\x3d\xbe\x12\x6e\xf0\xe9\x19\x7c\x7a\x06\x9f\x9e\x5f\xb6\x4f\x0f\xca\x5b\xeb\x3c\x7b\xac\x14\x55\xb9\xf5\x7c\x76\x5e\x3d\xca\x1c\x88\x84\x9d\x27\x89\x2c\x85\xbe\x96\x77\x2c\xda\x34\xbd\x24\xf7\xaf\xf4\x03\x95\xa0\x1a\xf4\x00\xab\x2f\x1f\x4c\x29\xf0\x04\x33\x51\xd1\x32\xe5\x46\x84\x3f\x14\xde\x71\xe3\x85\xa5\x35\x45\xca\xd2\xea\x81\x45\x4a\xda\x6c\xcd\x84\x9c\x93\x82\x25\x3c\xe7\x36\x1c\x9d\xe2\xef\x9d\x86\x84\x7b\x61\xd3\xdd\x2e\xcc\x6d\x61\xd9\x14\xd1\x3c\x15\x55\x1a\xdc\x22\x90\x99\x2d\x75\x59\x9a\x52\x37\xd1\xcb\x4c\x13\x79\x17\x40\x4c\x0f\x5c\x31\xa2\x66\xb2\xcc\x52\x52\xb0\xbf\x38\x36\xc9\xae\xf2\x3a\x1c\x2d\xd4\x15\x77\x1d\x36\x58\x8e\x85\x23\xcd\x79\x7c\x4d\x16\x3f\xfb\x3e\x58\x8f\x7d\xca\x79\x01\xf7\xed\x8a\x25\x52\xa4\x07\x53\x65\xad\x0c\x5c\x31\x38\x60\x42\xc2\x3c\x19\x3e\x2b\xe0\x3d\xcd\x78\xca\xf5\xc2\x7b\xaf\x20\x4a\xe8\x76\x8c\x11\x7f\xf8\x53\xaa\xaa\xdd\x24\x34\xcf\x0b\x49\x93\x19\x53\xc1\xcc\x90\x4b\xb7\x19\xd6\x63\xd3\x2c\x87\x2d\xcf\xca\x5b\x2e\x90\xa9\x87\xfe\x0d\xe7\x96\x2d\x48\x21\xb5\x73\x6c\xb3\x0b\x59\x9e\xdc\x75\x30\xb0\xf9\xbc\xd3\xb0\xc8\x14\xe9\x62\x01\x9e\x72\x32\x1c\x0e\x57\xcb\xa7\xe1\x3f\x14\x91\x59\xea\xea\xe1\xfd\xe1\x99\x91\x03\x13\xbc\xba\x1d\x95\x93\x0a\xb2\x02\x9a\x11\x33\xc3\xa1\x1a\x32\xd7\x3c\xd0\x57\xbf\x25\x33\x59\x16\x6a\x12\xd6\x72\x7a\x0e\xbf\x75\xdb\x55\x91\x56\x4e\x22\x9a\x64\x8c\x2a\x4d\x9e\x3f\x23\x73\x2e\x4a\xdd\x27\x0e\xbb\xbb\x64\x11\xc8\x14\xbf\xfb\x6d\xf4\x77\x5b\xc5\x6f\x77\xbc\x6d\xa1\x04\x01\x7f\x7b\x31\xc2\xea\x3a\xb1\x84\x5d\x2e\xb9\xd0\xcb\x42\x85\xa5\xb0\xfd\xb0\x29\x68\x53\xf7\x80\xc5\xfe\x5a\xca\x9b\x85\xee\x52\x6c\xc1\x7e\x51\xcf\x25\xf5\xbf\xed\x8f\x3b\xac\xe0\xb7\x87\xf2\x0a\x05\xbb\xe5\x4a\x17\x6d\x4a\xba\x71\x0c\x8a\x8a\xe7\x37\x6e\x8d\x24\xbf\x8f\x84\xe8\xd0\xb1\x13\x57\x9d\xd9\xc0\xa6\x00\x8e\xc9\xbb\xe0\x4a\xf1\x80\x7e\x1c\x7b\x6b\xfd\xea\xa9\xd5\x37\x58\x57\x2b\xcf\x1d\x46\x97\x31\xfa\x71\xeb\xe5\x75\x91\x2f\xdc\x01\xdd\x0f\xc8\xb0\xef\xfa\xc5\xb5\x79\x68\x64\x41\xe6\x65\xa6\x79\x9e\x55\xe0\xfb\xe8\x3e\xb0\xa4\x35\x46\x36\xad\xd8\x48\x1a\x68\xf5\x29\x56\x55\xc1\x22\xb3\x60\x56\x3b\xf1\xa3\x31\xa1\x21\xdb\x3c\x78\x35\xb3\x9c\x16\xd4\xef\x52\x22\xe7\x73\x1a\x95\x86\x05\xed\x3c\x14\x1c\x7b\x10\x39\x1b\xc2\x5b\xd0\xac\x5a\x75\xe0\x9b\xb1\xcb\x43\xae\x99\xa0\x22\xc2\x64\xdb\xa3\xb8\x2f\xf4\x4c\xe4\x83\xf7\xd3\xbf\xe5\xf7\x4c\x2c\x9f\x6e\xcb\xae\xff\x99\x26\x77\x4c\xc4\xc8\xbd\xdf\x29\x07\xdf\x74\x21\xe8\xdc\xd6\xea\xcd\x0b\x79\xcf\xcd\x35\x60\xe9\xd2\x08\x6a\x64\x55\xc9\x98\xb8\xd6\x25\xea\x46\x96\x6c\x97\xa0\x2c\xd5\x7e\xaa\x38\x9a\x7e\xb7\xc7\x92\x0a\xb5\xfb\x05\xbf\x4f\x98\xe3\x31\x4d\xcf\xbb\x84\xc0\x7d\x44\xe1\x23\xb2\xbe\xba\x89\xcd\x9d\x8a\xf7\x0d\x68\xae\x37\x50\x63\x56\xc1\xec\xff\x67\xef\xea\x7a\xdb\xc6\x95\xf6\xfd\xfe\x0a\x22\x7b\xd1\x16\x88\xe3\x17\xc5\xe2\xc5\x41\xcf\x55\x9a\xa4\x5d\x63\xfb\x11\xd4\x49\x81\x83\xc5\x5e\xd0\x12\x63\x13\x91\x49\x1f\x92\xb2\x1b\x2c\xf6\xbf\x1f\x90\x43\x4a\x94\x6d\x49\xa4\x2c\xcb\x29\x90\xbd\xd9\x46\x16\x25\x72\x38\x1a\xce\x3c\xf3\xa5\x65\xde\x53\xd1\x0b\x63\x8b\x8b\x6c\xbd\xf3\xde\xfa\xdb\x88\x59\x4c\xdb\x93\xd6\x6d\x14\xb3\xb4\x2a\xb6\xbe\xe1\x94\x4b\xf4\xde\x54\x76\xba\x26\x46\xf1\x8f\x53\x3d\x3a\xb4\x83\x24\x3f\xf0\x72\x95\x11\x79\xf1\xf8\x2f\x03\xf1\xd9\xcf\x63\x2c\x66\xe9\xf8\xdb\xcd\xe5\xf5\xe7\x9b\x8b\x65\xf3\x07\x78\x04\x95\x86\x2e\xf1\xbc\x4d\x9d\x1c\xa1\x25\x67\x54\x71\xd1\x2c\xf9\x9e\x45\x5f\xa9\xc6\x16\x70\x95\xde\xdc\xb0\xbd\x4f\x3c\x47\x1b\x0c\xc5\xfb\x82\xdb\xc3\xdd\xd1\xd5\x3b\x74\xc3\x64\x2e\x48\x59\x30\x76\xfb\x65\x5a\xdc\xf5\xd8\x7a\x0a\x78\xe7\xdd\x60\x2d\xe3\x0e\xee\x31\x2b\x66\x21\xa7\x09\x40\xd0\x0b\xbe\x41\x29\x47\x1b\x82\x56\x82\xac\xb5\xcd\x6b\x62\x22\x24\xf2\xaa\xe8\x5b\xda\x9a\x12\x59\x09\x5f\xae\x04\x5f\x52\xe9\x8e\xb6\x90\x7e\x6b\x28\x4e\x98\x9a\x2f\xe3\x18\x3c\x6a\x1e\x5c\xa0\x2c\x46\x10\xc1\xa5\xd0\x62\x56\x5d\x65\xcb\xaf\x0b\xbe\x19\x29\x3e\xca\x25\x19\xd1\x76\xd8\x35\x82\x56\x8f\xe4\xc9\x44\xf5\x1d\x81\x5a\xf6\xd1\x15\xa3\x59\x71\x83\xd9\x9b\xeb\x5a\x2f\xfb\xf6\xfe\xfa\x5e\x86\x81\x74\x9e\xcd\x32\x26\x2a\x19\x27\x64\xb5\x18\xdb\x77\xfc\x9c\xb4\x77\xb2\xf9\x18\xc4\x77\xcf\x06\xed\x20\xe1\x59\x66\x3b\xa9\xf0\x07\x74\x45\x56\x8b\xe2\x86\x67\x47\xba\x9e\xbb\x10\xc5\x34\xd0\xe4\x3c\xc0\x77\xd5\xa1\x27\x3e\xe7\x59\x55\x6a\x98\x2b\xa1\x42\xc3\x63\x7c\x31\xeb\x2a\xff\x4f\xcc\xea\x27\x43\x04\x7a\x6c\x5c\x7c\x70\xab\xfc\xe3\xed\x41\x68\xbb\xfc\x44\x10\x15\x94\x7e\xd3\xa5\x63\xbe\x7d\xb8\x01\x95\x3c\x37\x3b\xce\xd5\x82\x30\x45\x13\xf0\x44\xd8\x88\x64\x5f\xf8\xa3\xc9\x03\x58\xa1\x69\x90\xfb\x96\xaf\x89\x10\x34\x25\x12\x45\x48\x7f\x1f\xf1\xa2\xd9\xb3\xdb\xc0\x40\x7f\x6a\x9c\xab\x33\x3c\xb0\xa2\x1b\x30\x7e\x48\x30\xc5\xa9\xc3\x28\x8e\x17\x40\x11\xe5\x44\x3c\x24\x9c\xe0\xa8\xa8\x49\xe5\xb8\x32\x57\x3a\x1c\x57\x38\x5d\xd2\xa0\x7c\xef\xe7\x75\x60\xc9\x04\x67\x64\xf2\x35\x02\xc6\xb0\x23\xaa\x48\xc5\xd4\x5e\xf4\x7a\x66\xb7\x74\xa2\xfe\xa3\xe0\x05\xc4\x78\xda\xe6\x79\x3b\x02\xa6\x30\xc7\x8a\x6c\x5a\xb5\xaf\x51\x29\xec\xdb\xef\x34\xb6\xdf\x4f\x8e\x3e\xfc\x3c\x0d\xe8\xe3\xbe\x4f\x68\x85\xdd\xa7\x9e\x67\x19\x28\x72\x8b\xec\x28\x47\x7e\x43\x17\x9c\xa6\x82\x48\xe9\xce\x17\xf7\x31\x5d\xde\x4e\xd0\x47\xb8\xbd\xdf\xe6\xf9\x82\x2b\xb0\x90\xae\xf9\x12\xd3\x80\x90\xac\xed\xf6\xcd\x95\xe1\x6e\x29\xbe\x22\xe4\x96\x70\x5b\xdc\x8b\xec\xcd\x0f\x5c\x78\xa5\x98\x73\x41\x52\x64\x31\x99\x9f\xaf\xed\xf8\x8e\xb2\xfc\x33\xb7\x1d\x1f\x48\x63\xf6\x00\x7b\x97\x38\x55\x6a\xc9\x8e\x6d\xcc\x21\x5c\x04\x56\x05\x3d\x9f\x49\x6a\x22\x14\xbc\x98\x40\xdb\xd3\x87\xca\x32\x37\x0a\x14\xef\x73\xf4\x89\xcf\xa9\xeb\xab\xa6\x99\x13\xf6\x06\x87\x68\xcb\x2f\x4a\xec\x8b\x12\xdb\x4d\x89\x95\x32\xbb\x61\x78\x96\x85\x44\x87\x56\x55\xae\x62\x20\xfa\x90\xe1\x39\x22\xe6\x8f\x71\x4a\xa5\xfe\x3f\x9a\x4e\x3f\x19\x2f\x72\xce\x9c\xe1\x69\x1c\x9f\xf6\xe8\x28\x32\xd3\x41\x44\xf5\x2b\x33\x40\x72\x1f\xab\x17\xbe\xf7\x78\x44\x59\xea\xfa\xd6\x7a\x21\xd2\xf6\x0e\x23\x3c\x70\x91\xb4\x08\x31\x98\x33\x82\xee\x16\x34\x79\xbc\xf5\x9c\xbe\x5c\xe8\x6b\xcc\xbb\x14\xa9\x46\x44\x8f\x8e\xe0\x2e\xbb\x98\xdb\x78\x68\xce\x1b\xe9\x4e\x63\x27\x4a\xa7\x96\x42\xe6\x37\x2c\x25\x4f\x68\x19\x7b\x60\xb0\xea\xf2\x88\x4e\xcd\x11\xdd\xef\x9a\x8c\xa2\x17\xbb\x1c\xd0\x24\xf7\xe8\x15\x6e\xbf\xed\x1d\x58\xfa\x7a\x04\x65\x6e\xd5\xbd\x2e\x01\xb8\x2a\xac\xac\x46\x3c\x8f\x97\x4f\xdf\x5e\x6f\xc1\xcf\xdb\x5e\x6d\x97\xda\x6b\x77\x38\xc0\xec\xb0\x6b\x5e\x60\x30\x55\x77\xb8\x80\xca\xe2\xdb\x31\x15\x06\x7a\xa3\x5f\x48\xae\x7f\x1c\xcd\xac\xb6\x50\x0d\xef\x81\x6b\xd6\x13\x6e\x3e\xfe\x15\x5f\xe5\x19\x84\xb1\x16\x8b\xeb\xe0\x0d\x8f\x71\x25\xc2\x2c\xfa\x31\x63\xc3\xf5\x06\x2f\x1d\xf0\x18\xec\xe9\x67\x1b\xc6\x27\x85\x3a\x8e\x35\xe6\xa1\x36\x05\xed\xe3\xa2\x8c\xcb\x21\x73\x42\xfb\xca\x01\x0d\x31\xc3\x2b\x59\xa2\x15\x5b\xe2\xff\xfe\xff\xb7\xdf\x82\xce\x25\x2a\x4c\x5b\x2a\x5a\xed\xe6\x6e\xbc\x8f\x58\x10\xa3\xf3\x42\xc2\xa6\x33\xc4\x21\xba\x49\x05\x02\xc9\x43\xa4\x87\x1e\x39\x1d\x34\x2e\x48\x3b\x26\xdd\x33\xd0\x2b\xd7\xc1\xf3\x6e\xca\x76\x4c\x06\x2b\xdb\x31\x50\xb1\x8e\x61\x4a\x74\x0c\x51\x98\x63\x90\x72\x1c\xc3\x15\xe1\x38\x72\xe9\x8d\xa3\x78\xba\x8f\x59\x5c\x23\x32\xeb\x2f\x2e\xe3\x2f\xbc\x7c\x46\x70\x5e\x60\x6c\x4e\x60\x44\x81\x8c\x7e\xcb\x62\x44\xa7\x9c\xc5\x94\xc0\xe8\x9a\xef\x32\x5c\xb9\x8b\x13\x16\xb9\x38\x75\x69\x8b\x23\x17\xb4\x18\xae\x8c\xc5\x20\xc5\x2b\xba\x24\x96\xc5\x17\xaa\x88\x49\x28\xeb\xfa\x71\x1d\xbd\x14\x45\x2f\x05\x28\x7a\x2e\x3b\xd1\x5f\xb1\x89\x08\x81\x19\x5e\x8f\xe0\xe0\x2a\x04\xf1\xcd\x45\xe2\xdd\x10\xc7\x42\x5b\xca\xa7\xef\x45\x97\x5c\x79\x41\xd7\xb3\xe0\x95\xf4\x3a\x12\x28\xae\xc5\xd2\x00\x31\xc9\x01\x40\x02\x8a\x80\x60\xe0\xe9\xbc\x45\x3b\xd8\x87\x27\x7e\x9d\x6e\x79\xf9\x8b\xcb\xa7\x71\xee\xbf\x78\xcf\xfb\xf3\x9e\xf7\x1f\x8b\xff\xdc\xbc\xb3\xe9\x8b\x77\x36\xda\x3b\x2b\x2b\xa5\x8f\x1d\xae\x6a\x04\x9f\xd1\xfd\xf8\xcc\x6f\xa9\x53\xca\x83\xcb\xdb\x49\xc0\x7b\x12\x41\x4c\xf1\x0a\x9c\xc9\x8b\x7d\x4a\xa1\x73\x54\x59\x65\xd3\x29\x83\x58\x29\xb2\x5c\x05\xd5\x01\x7f\x71\xce\xbe\x38\x67\xbb\x39\x67\x87\xf6\xf2\x2c\xf2\x25\x66\x23\x2d\x90\x8c\x0f\xb7\x12\x3c\xb3\x75\xcc\x5e\x20\x2b\x58\x02\xb9\x14\xd2\x8c\x4d\xe2\x77\xce\xe8\x7f\x73\x52\xa2\x20\x85\x36\x73\x24\x0f\x99\x79\xf6\x71\x09\x08\xca\xd8\x96\xa0\x4a\xf8\x4e\xe2\x9c\x5d\x73\x41\x4c\x27\x71\x42\x89\x68\x5e\x53\x01\xf6\xd4\x82\x80\x66\x78\xbb\xa5\x19\x56\xac\x56\x6b\x8e\xe2\x2c\xe3\x9b\x50\x6c\xd4\xd7\x97\x34\x23\xe8\xf5\xd8\x6a\x2c\x33\x82\x96\x54\x08\x2e\xac\xb7\xce\x5f\x12\x04\x53\x69\xbb\x97\x08\xb0\x17\x21\x9c\x25\x44\x6c\x4c\x89\xb2\x5c\x65\xb8\x52\x71\x84\x19\xa4\xc7\xea\x7f\xbb\xb8\x73\xb3\x5c\x27\x96\x67\x64\x81\xd7\x94\xe7\x41\x29\x4c\x53\x38\x38\xce\xec\x60\xa3\x4e\x3c\xf1\xbc\xf0\x4b\xe4\x26\x2b\xae\xa0\xa1\xdc\xdd\xaf\x80\x97\x7c\x29\x87\x1b\xb3\x3e\xe5\x0e\x74\x1d\x91\x1f\x54\xaa\x5d\x8a\xb9\xad\x72\x1d\x4a\xfa\xfa\x0c\xd6\x72\xa5\xd5\x88\xef\x01\xb9\xcd\xd5\xbc\x66\x7f\x5c\x55\xdb\x5e\x4f\xcd\x4f\x6d\xba\xb6\xad\xfb\x03\xc5\x07\x82\x52\x0c\x8f\x10\x4c\x0b\x73\x6c\xed\x79\xf6\xbc\x14\xf8\x17\xe5\xbd\xfc\xaf\x4b\x98\x4a\x46\x93\xa7\xc9\x75\xd7\x50\x15\x18\xed\x8e\x43\x59\x84\xa9\xe8\xeb\xe8\x3d\x96\x24\x45\x9f\x31\xc3\x73\x80\x60\x5e\x4f\x6f\xdf\x7f\x7e\xa3\x19\xc8\x40\x46\x93\xeb\xbd\xb1\x2c\x53\xff\xe1\x5f\xfa\x4c\xf5\xdf\x59\x78\x07\x4d\x61\x67\x7c\xc7\xc5\xf7\x5a\xc3\x00\x15\x87\x6b\x58\xaf\xbc\x3d\x55\x19\x6e\xb7\xcb\x45\x41\xa0\x89\xab\x53\x27\xb7\x25\xd9\x7a\x99\x3e\x1e\x36\x7d\xca\xa4\xc2\x59\x76\x9b\x61\x76\xb9\x5a\x09\xbe\xde\x0f\x7c\x85\x08\x07\x37\xde\x2d\x00\x42\x4f\xdd\xc5\x15\xec\x88\x09\x2f\x63\x68\x52\xbe\x76\x3f\xfd\x27\xaa\xc0\xc6\x38\x33\x0a\xc9\xd9\x65\xae\xf8\x12\x2b\x9a\x9c\x21\x2e\xd0\xd9\x67\xcc\x72\x9c\xed\x0d\x44\x6f\x5c\x71\x9d\xf5\xd1\x38\xa8\xbe\x09\x49\xc0\xb0\x46\x75\xae\x79\xbc\xc2\x42\x8b\xba\xab\xe9\xf7\xa8\xb1\x52\x61\x95\xef\x9c\x0c\x0d\xa7\x55\xfd\xf9\x34\x42\x19\x96\xea\x7e\x95\x6a\xf9\xb0\xf5\x6b\xd3\x21\x94\x60\x85\x33\x3e\xff\x9d\xe0\x6c\xff\xc7\x10\xc2\x52\x57\xfe\x43\x1c\xaa\x6c\xa3\xf2\xf2\x59\x31\xfe\x95\x44\xda\x08\xd3\x5c\x42\x95\x44\x82\x64\x64\x8d\x99\x72\xc3\xa7\xd0\x58\xe8\x95\x25\x4b\x2d\xc3\xd1\xd2\x4f\x95\x12\x45\xc4\x92\xb2\xea\x7b\xa6\x66\xfc\x15\x67\x29\x05\x0f\x88\x41\xe2\x61\x44\xf5\x5d\xf5\x5c\x59\xe7\xbe\x6d\x70\xd8\x56\x5b\x2a\x79\xf3\xa9\x92\x07\x6e\x9b\x59\x45\x7e\x01\x17\x4d\xf4\x5b\x65\x6e\x3b\xd4\x43\x8f\x4c\xeb\xd7\xa6\xec\xeb\x7e\xda\xb4\xaa\x39\x6d\xea\xcd\xc8\xb1\x03\x4c\xa1\x3e\x05\x68\x64\xe7\x5d\xe7\xd8\x6d\xe2\x46\xf8\xaf\x5d\x31\xda\x9e\x4a\xbd\xa4\xae\x10\xfe\x6a\x6b\x18\xe4\xc8\x17\xf1\x21\xe0\x29\xaf\xdc\x54\x7f\xb2\x04\xe9\x8d\x61\x2a\x5e\x68\xab\xda\xca\x5a\xbc\xc6\xaa\x71\x40\x49\xe0\x51\x18\xd8\x31\x36\x4e\xe5\x9c\xd8\x94\x07\x61\xed\x39\x8c\x56\x94\x40\xc1\x59\xcc\x2c\x31\xcd\x79\x46\x70\x6a\x2f\xea\x73\x53\x1b\xf0\xe6\xb7\x73\x1b\xb5\x15\xa4\xa0\x40\xec\xa3\xf3\x63\x61\xa8\x83\x6a\x3c\xba\xe3\x8f\xdc\xfa\x78\x6c\x55\x28\x2d\x55\x8c\x76\x71\x8e\x64\x9e\x2c\x10\x96\x7a\x61\xfa\x73\xd0\xf2\x82\x5c\x2c\x31\xa3\x0f\x44\xaa\x8b\xa2\xb1\x9c\xfc\xf3\xed\x5f\x6d\x6a\xc7\x07\x2e\x90\xcd\x66\x3c\x77\xe5\x3c\xed\x1a\x4b\x9e\xa3\x12\x08\x51\x3c\xb9\xc4\x27\x56\x3c\xb5\x0b\xde\x98\xa5\x28\xfc\xa8\x8f\x52\x58\x4a\x4e\x8c\xe7\xb5\x4d\x47\x39\xd3\x6a\xaf\x37\xed\xbf\xf5\xd9\xf9\xcf\x19\x7a\xbd\x31\x4a\xc8\x99\xfe\xf3\x0c\xa6\x53\xe4\xa0\xf8\xf0\x4b\x39\x2d\xa8\x9a\x23\xe8\x7c\x4e\x44\xab\x9b\xcb\xb4\x85\x5b\x13\xa6\xde\xd8\x52\xa6\x8c\x7b\x8f\x72\xb1\x52\x25\x9a\xb0\x3d\xcd\x3f\xdf\xfe\x75\x86\x5e\x57\x69\xd2\xf2\x4a\xca\x52\xf2\x03\xbd\x05\x87\x15\x95\x9a\x7a\x6f\x2e\x00\x7e\x90\x4f\x4c\xe1\x1f\xfa\x8d\xc9\x82\x4b\xc2\x00\x0e\x52\x1c\x2d\xf0\x9a\x20\xc9\x97\x04\x6d\x48\x96\x8d\xac\x0b\x0f\x6d\xf0\x53\x7b\x05\x57\xb7\x85\xa6\xda\x1d\x5a\x61\xa1\x2a\x6c\xdc\xc6\x1c\x80\x12\x9a\x99\x6a\x56\x9b\x33\x17\x24\xf5\x40\x99\x0d\x46\xb0\x61\x15\x9a\x4f\x4d\x65\x22\x60\x1d\xc5\x51\xb2\xc0\x6c\x5e\xd4\x81\x7b\xc8\x55\x2e\x5a\x74\xe0\xc0\x8f\xfe\x91\xb2\x5e\x8b\x78\xfd\x41\xd9\x76\x18\x5e\x2b\x61\xf6\xc0\xb7\x73\xaa\x5c\x36\xb0\x4d\xed\x50\x4f\x63\xcd\x1c\x82\xce\x72\xc5\x85\x1c\xa7\x64\x4d\xb2\xb1\xa4\xf3\x11\x16\xc9\x82\x2a\x92\x68\x9a\x8c\xf1\x8a\x8e\x12\xce\x34\x23\x9a\x72\x8f\xcb\xf4\x57\x4d\x09\x39\xd2\x0b\x6d\xc6\x73\x03\x29\xd6\x0e\x84\xc7\x51\xac\x0b\xf0\x7d\x1a\xc0\x3b\x82\x40\x01\x40\x68\x3c\x95\x00\x6d\x3c\x39\xa9\x0c\xe0\x36\xee\x83\x52\xae\xa3\x61\xbc\x2e\xd0\x4a\x2f\xdb\xc4\x33\xd9\x7e\x87\x16\x26\x10\xa1\x69\x64\x4d\xe5\x54\x5a\xe2\x14\x8e\x2d\xcc\x5a\x33\x6e\x8f\xfc\xcd\xea\xfd\x30\x8d\x70\x93\xa7\x91\x79\x04\xcf\x46\x98\xa5\xfa\xdf\x90\x60\x9f\x34\x47\x11\x06\x6e\x40\x4e\x7b\x15\x7e\xf7\x93\xeb\xd3\xb3\xe7\xf8\xd7\x9c\xf6\x21\xe9\xba\x78\x93\xac\x1d\x10\xa8\x9c\x83\x09\x04\x51\x95\x22\x27\x4e\x61\xaa\x1a\x3e\x54\xba\xa7\xfe\xdb\xba\xb1\x8b\x6e\x03\x6d\xaa\x7a\xb3\x6b\xd9\xb3\x49\x02\xe7\xfb\xa9\x1c\xe1\x43\xd5\x26\x5a\x1b\x4b\x65\xeb\xb9\xbb\x52\x83\x95\x65\x38\x63\xd8\x1c\xe3\xf5\xaa\x54\xd0\xc6\xb8\x58\x37\x3d\x91\xd1\xde\x0a\xdb\x49\x61\xec\xb6\xda\xf0\x9e\x5d\x6c\x4c\xa3\x8c\xca\xa2\xa6\xb9\x36\x93\xa5\x42\x78\x8d\x69\x66\xbc\x74\x7c\x26\x89\x58\x63\xb8\x1d\x3a\x8e\xe0\x6d\x9b\xde\xf6\xaf\x06\x05\x7b\x20\x8b\xda\xad\x61\x77\x57\x9a\x16\x60\xac\xec\xad\xd9\xd7\xce\xba\x17\x7b\x1a\xa0\x8c\xda\x9f\xf5\x1b\x3a\x9a\xc7\x9a\xff\x7e\x27\x58\xa8\x19\xc1\xea\x8e\x36\x69\x28\x3b\x2c\x5d\x19\xe7\x70\xc0\x92\xa1\x37\x04\xcd\xb9\xd2\x6a\x6e\x6e\x78\x1f\xec\x11\x28\x53\x5c\x30\xda\xb1\x39\xba\x5c\xe5\x9d\xc0\x26\xd7\x9d\xb3\xc8\x65\x56\x07\xee\xae\xd3\xda\x3e\x96\x93\x14\xdc\x0d\x95\x2c\x39\x23\x76\xef\xc0\x51\xd8\x9c\x96\xdf\xeb\x92\x97\x44\xca\xc6\x12\x97\xd5\x54\x00\xb8\x1b\x3e\xe5\x2d\x17\xfb\xd2\xfd\x06\x99\xc4\xda\x88\x49\x89\xc2\x34\x73\x9f\x32\x90\xa2\xa0\x52\x9b\x74\x6d\x5c\xa0\x20\x58\x36\x29\x34\x95\x59\x7f\x33\x37\xc3\xa4\x39\x23\xa3\x0d\x17\x29\xba\xc2\x4b\x92\x5d\x61\x49\xec\xb3\xfc\xca\x19\xb0\x47\xaf\x64\xaf\x53\xde\x0f\xbf\xd6\x4c\x19\x40\xc5\xd2\x81\x61\xfe\x2a\x0d\x68\x98\xe0\xb9\x43\xc1\xef\x44\x4e\xce\xd1\x07\x7d\x7a\x9d\xa3\x7b\xf6\xc8\xf8\xe6\xb0\xb9\xaa\x46\xe7\x60\x65\xa6\x7e\xb8\x9e\xab\xaf\x5b\x01\x12\x8b\xe9\x76\x9c\x91\x15\xf8\x35\x68\x77\xf5\xb0\x29\x6e\x75\x33\xd2\xff\xdc\x81\x36\xb5\x29\x2f\xf8\x5c\x10\x09\xa5\x63\xf7\x06\x44\x87\x3a\x48\x3e\x12\x66\xab\x5c\xb4\x4e\x6f\xb2\x6f\x94\x9b\xa9\x3b\xd7\xe6\xe5\x2f\x76\xbf\xed\xcb\x56\xd9\x5e\x55\xa3\x39\x9a\xdd\x9b\x68\x0d\xa8\x59\x37\xc3\xfd\x60\xa6\x77\xea\x79\xf7\x82\x52\xd2\x84\xc4\xbb\xd5\x5d\x4d\xbf\xd7\x13\xbb\xf6\xec\x6b\x3b\x9f\xda\xe1\xce\x43\x81\xce\xd6\x6f\xa6\x15\xdc\x0c\xd5\xf4\x87\x01\x34\x4f\x09\x65\x9e\x16\xc4\x1c\x1c\xbe\x1c\x14\xb8\x1c\x0e\xb2\xec\x0c\x56\x0e\x05\x53\xb6\x7e\xb2\x4d\xd0\x64\xe8\xd7\x1a\x07\x47\x9e\x1c\x88\x6c\xa5\x49\x13\xf8\x18\x4a\x93\x38\xc0\x71\x68\xa8\x31\x88\x04\x8d\xf0\x62\x0c\x1d\x22\x21\xc5\x81\xc1\xc4\x56\x5a\x04\x02\x88\xa1\x14\x39\x1e\x68\xf8\x6c\xe1\xc2\x56\x12\x37\x40\x84\xa1\x64\x8d\x82\x05\x07\x06\x04\x5b\xd6\x1f\x07\x02\x5a\x6d\x96\xa4\x21\xc6\xc0\xc4\xbb\xd9\x37\x07\xac\x2a\x6a\x42\xfb\xec\x1d\x2e\x94\xd0\x57\x5a\xbb\xda\x04\x5a\x4d\xef\x1a\xd9\x62\xa7\x1c\xae\x77\x5b\x63\x81\xa4\x85\xf5\xda\xb6\x04\x84\xae\x6f\x6e\xbf\xdd\x5c\x5d\xde\xdd\x5c\x6f\xeb\xfb\xf1\x8a\x79\x33\x24\x35\xf2\x14\xf3\x9a\x1b\xf4\x61\x55\xf3\x93\xe6\xad\x9a\x9f\xf2\x9c\xee\x1b\x75\xb8\x99\x70\x90\xce\x70\xd0\xe1\xda\x2e\x27\x7a\x12\x14\x86\xb7\x20\x1e\x57\xeb\xaf\x0b\x9e\xa5\xd2\xe5\x31\x4c\xae\x8b\x34\x75\xca\x92\x2c\x4f\xb5\x72\x77\x7f\x3f\xb9\x96\x17\x08\xbd\x27\x09\xce\xa5\x56\x12\xeb\x81\x01\xce\x5e\x29\xf4\xf5\xcb\xa7\xff\x98\x8c\x26\x33\xf2\xbc\x28\x11\x69\x1a\x48\x51\x0c\x3d\xb0\xcc\x42\xcd\x53\x41\x81\x34\x33\x4a\xf0\x4a\x4b\xe0\x7a\xe7\x02\x85\xda\x26\x5a\x47\x5c\x90\x6c\xa5\x4f\x87\x47\x82\xca\x16\x3c\xfa\x85\xe6\x57\xc8\xd3\xb0\xf1\xea\x73\xa2\x20\x65\xbd\x29\x24\xbd\x71\x03\x5a\xb0\xfc\x03\x50\xfc\x0a\x30\x61\x71\x9e\x0d\x96\x16\x0b\xdd\x3b\xdb\x16\x56\x69\x47\xfe\xea\xc1\xb3\x1a\xd8\x0c\x4e\x16\xf3\xd7\xce\x9c\xf5\x64\x4b\x84\x0c\xc2\xde\xa8\x0a\xc6\xe9\xeb\x63\x1c\xf7\xf7\x13\xdd\x41\xc9\xc8\x36\x91\x2b\x2f\x2e\x72\x7e\xbc\x29\x87\xcd\xc5\xb4\x7c\x4e\xdf\x19\xcf\x91\xbb\x04\x71\xc4\xd5\x6b\xf9\xcc\x29\x33\x9e\xd4\xb1\x58\x1f\xfa\xfb\x9f\x5f\x7e\xf9\x5f\x00\x00\x00\xff\xff\xd6\x7d\x4d\xf0\x1f\xcd\x10\x00") -func olmManifests0270CrdsYamlBytes() ([]byte, error) { +func olmManifests0280CrdsYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0270CrdsYaml, - "olm-manifests/0.27.0-crds.yaml", + _olmManifests0280CrdsYaml, + "olm-manifests/0.28.0-crds.yaml", ) } -func olmManifests0270CrdsYaml() (*asset, error) { - bytes, err := olmManifests0270CrdsYamlBytes() +func olmManifests0280CrdsYaml() (*asset, error) { + bytes, err := olmManifests0280CrdsYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.27.0-crds.yaml", size: 827853, mode: os.FileMode(420), modTime: time.Unix(1709244470, 0)} + info := bindataFileInfo{name: "olm-manifests/0.28.0-crds.yaml", size: 1101087, mode: os.FileMode(420), modTime: time.Unix(1730300880, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _olmManifests0270OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xdd\x6f\x1b\xb9\x11\x7f\xd7\x5f\x31\x10\x0a\xb8\x2d\xb2\x92\xe5\xef\x2c\x10\xe0\x5c\x27\x77\x39\xd4\x76\x04\xcb\xe9\xcb\x21\x28\xb8\xdc\xd1\x8a\x35\x97\xdc\x23\xb9\x52\x74\x45\xff\xf7\x82\xcb\xfd\x16\x25\xcb\x4a\xee\x52\x14\xe1\x8b\x24\x72\xc8\x19\xce\xcc\xce\xc7\x4f\x1b\x04\xc1\x80\x64\xec\x1f\xa8\x34\x93\x22\x84\xe5\x64\xf0\xc4\x44\x1c\xc2\x3d\x49\x51\x67\x84\xe2\x20\x45\x43\x62\x62\x48\x38\x00\x10\x24\xc5\x10\x24\x4f\x07\x00\x9c\x44\xc8\xb5\x9d\x05\xc8\x64\x1c\x68\xa4\xb9\x62\x66\x3d\x7a\xca\x23\x54\x02\x0d\xea\x11\x93\x63\x14\x73\xa9\x28\x86\xa0\x50\x1b\xc5\xa8\xc1\x78\xcf\x2d\xc1\xb2\x92\x8a\x13\x83\xda\x3c\xb7\x8d\xe4\x31\x33\x2f\xe1\x53\x6c\x78\x29\x97\x15\x51\xe2\x25\x4c\x2c\xfd\x06\x8f\xc3\xd4\x9e\xa1\x22\x46\x2a\x7d\x80\xf2\x23\xa2\x91\x33\x81\xdf\x55\x6f\x55\xef\x74\x3d\x43\xb5\x64\x14\xaf\x29\x95\xb9\x30\x7d\x7b\x78\xdd\x3e\xa8\x6c\x10\x68\xb7\x99\x94\x9b\x1d\x4d\x61\x39\xf7\x7c\xf4\x2d\xac\x22\x42\x47\x24\x37\x0b\xa9\xd8\x6f\xc4\x30\x29\x46\x4f\x57\x85\x94\xb5\xed\x6f\x78\xae\x0d\xaa\x07\xc9\x7d\xd6\xd7\x6b\x6d\x30\x0d\xa9\x14\x46\x49\xce\x51\x85\xb5\x2c\x9c\xcd\x91\xae\x29\xc7\x20\x25\x82\x24\xa8\x06\x2a\xe7\xa8\xc3\x41\x00\x24\x63\x3f\x29\x99\x67\x3a\x84\x5f\x86\x7f\x1d\x7e\x1a\x80\xd5\x9f\xcc\x15\xc5\xd6\xd4\x12\x55\x54\xfc\x5c\x11\x43\x17\xc3\x57\x30\xe4\x4c\x1b\xfb\x99\x60\xf1\x41\x15\x12\x83\xf6\x5b\x9e\xc5\xe5\xb7\xac\xa2\x8d\x91\xa3\x9b\x72\xdf\xa8\x15\x8f\xda\x2b\xda\x39\xd4\x94\xf0\x72\x4b\xc4\x44\x3c\xfc\x34\x08\x40\x48\xf1\x50\x8a\xf1\xf1\xe1\xd6\x27\x89\xfd\xf9\x65\x3a\xfc\x1b\x13\x31\x13\xc9\x73\x86\x8c\x1c\x59\x60\x8d\xa6\x24\xc7\x07\x9c\x5b\xca\x4a\x71\x3b\xb8\x0e\x00\x36\x0d\x77\x90\xb9\x74\x1e\xfd\x0b\xa9\x29\x2c\xe6\xf5\xcd\xaf\xe2\x82\x75\xfc\x18\x51\xa9\x50\xda\x8f\xb4\xd1\xdc\x87\xdb\xbb\x1b\x29\xe6\xcc\xa7\x30\xea\x2e\xb8\x71\x22\xc9\x32\xdd\x9c\xf0\x16\x33\x2e\xd7\x29\x0a\xf3\x8c\xce\x37\x45\xed\x06\x34\x92\x65\xbd\x0d\x3a\x43\x6a\xd7\xb4\x51\xc4\x60\xb2\x76\x74\x66\x9d\x61\x08\x0f\xe8\xbc\xb3\x70\xed\x8c\x33\x4a\x74\x08\x13\x4b\x8c\xd6\x0d\xa5\x72\xc4\xa9\x75\xd7\xdb\x16\x17\x1f\x1f\x00\x83\x69\x66\xdd\xb5\xdc\xd4\xba\x87\x1d\xbc\xb3\xdf\x7f\x02\x40\x25\x6d\xf1\xbd\x0c\x4d\x37\x52\x18\xfc\x6c\x9a\xad\x2a\x17\xd7\xfa\x5e\x8a\x07\x29\x4d\x08\x46\xe5\x58\x2f\x69\xa4\x54\xa6\xd9\x54\xc9\x39\xe3\xd8\x6c\xa9\x6f\x9c\x0b\xc3\x52\x7c\x8b\x73\x92\x73\x53\x33\x6a\x7b\xcc\xfd\x1e\xee\x62\x87\xf5\x4f\xc2\x04\xaa\xd6\xa5\x02\xbf\xc9\x5a\xd2\xf9\x6f\x54\x28\x84\x73\xb9\x9a\x2a\xb6\x64\x1c\x13\x7c\xe7\x9e\xfd\xc2\x57\xe6\x84\x6b\xec\xd0\x52\x92\x91\x88\x71\x66\x18\xea\xee\x29\x00\xb1\x92\x59\x08\xbf\xc0\xf0\xfa\xf6\x76\x08\x9f\x5a\xab\x54\xa6\x29\x11\x71\x7b\x43\x00\xe3\x88\x89\xb1\x73\xa4\x5a\x12\x95\xe8\x2e\x51\x10\xd4\x5e\xd7\x99\xff\xd3\x9f\x3f\x4c\xdf\x3d\x5c\x3f\x7e\x78\xf8\xe7\xfd\xf5\xdd\xbb\xd9\xf4\xfa\xe6\xdd\x5f\x7a\x3b\x57\x8a\x19\x9c\x19\x62\x72\x6d\x55\xdb\x59\x1d\x0e\x5b\x3f\x59\x4a\x12\x0c\xe1\xd7\x9c\xac\x6d\x60\xaa\xb5\x3f\x57\x24\xc5\x95\x54\x4f\x56\xcc\x1f\xf4\x82\x9c\x9c\x5f\x84\x93\xe8\xe2\xf8\xf8\x64\x72\x7e\x31\x3f\xbf\xb8\x8a\x2f\x4f\x4e\xe8\xc9\xeb\xc9\xe9\xd5\xf9\xe5\xf9\xe5\xe9\xe9\xf9\xeb\xc9\xf1\xe9\x25\x3d\x39\x8b\xce\xa2\x39\x89\xe8\xc5\xe5\xeb\xb3\x8b\xf9\xc9\xc5\x15\xc5\xb3\xcb\xf3\x13\x7a\x8a\x17\x7d\xbe\xd3\x9c\xf3\xa9\xe4\x8c\xae\x43\xf8\x79\x7e\x2f\xcd\x54\xa1\xc6\xda\xd8\x50\xa4\x4b\x65\x7a\xda\x0e\x1a\x2f\x98\x4a\x65\x42\xb8\x3a\xbe\x3a\xee\xd9\xc3\x79\x44\x8a\x36\xf3\xea\xd6\x1a\x67\x4b\x14\xa8\xf5\x54\xc9\x08\xbb\xc7\x2e\x8c\xc9\x7e\x42\xd3\xb7\x6c\x46\xcc\x22\x84\xf1\x02\x09\x37\x8b\xdf\xfa\x8b\xdb\xf8\x6b\xba\x40\x2b\xc1\xfb\xc7\xc7\x69\x6b\x49\x21\x89\xd9\x37\xe4\x6f\x50\xa5\x4c\x14\x1e\x7e\x87\x5a\x5b\x13\x94\xea\xff\x91\x70\x1e\x11\xfa\xf4\x28\x6f\x65\xa2\x3f\x88\x77\x4a\x75\x9e\x22\x14\xcb\xae\x77\x3a\x0d\x6f\x7a\x62\x47\x90\x25\xe1\x39\xfe\xa8\x64\xda\xbf\xd5\x9c\x21\x8f\xcb\xd4\xe5\x59\x99\x16\x97\xae\xa2\xd9\xc8\xff\x1c\x78\x24\xd8\x64\xbe\x35\x2c\x34\x65\x45\x67\x93\xc2\x5f\x73\xd4\x7d\x97\x03\xa0\x59\x1e\xc2\xe4\x38\xed\x4d\xa7\x98\x4a\xb5\x0e\x61\x72\x71\x7c\xc7\xca\x35\x21\x63\x9c\x75\x62\xb9\x1d\xdd\x52\x4f\xea\x10\x38\x13\xf9\xe7\x2f\xc9\x51\x94\x18\xc2\x65\xf2\xb2\x3c\xb5\xb1\xe9\x77\xcc\x55\x1e\x01\x0f\xc8\x57\x9e\x53\xfe\x6f\x72\x96\xf7\x6e\xcf\xdc\x0a\xbe\x71\xde\x2a\x65\xde\x99\xbb\x8e\x5a\xc9\xeb\xa8\xb3\xd2\xcd\x7a\x36\x57\xd1\xa2\x8c\x4b\x49\x66\x8b\x48\x54\x3f\xdb\xcc\xf0\x66\x47\x42\xaa\xe9\x1b\xbd\x2b\x4c\x98\x36\x6a\x1d\xb6\x1a\xb3\x86\x41\x6e\x18\x0f\x8a\x84\xd3\x59\xf8\xe3\x93\x9e\x15\x46\xa3\x09\x2c\x0b\x2e\x49\x1c\xe4\x1a\x55\xc0\xe2\x37\x1d\xd7\xfc\x9e\x94\x9b\xf1\x3d\x29\xef\x4a\xca\x5f\x37\x87\x5d\x7d\x49\x0a\xdb\xec\x2c\xf7\xee\x84\x37\x13\x1b\x49\x12\x85\x09\x31\x68\xbb\xdc\x00\x63\x66\x7a\x99\x6c\xfb\x79\xcd\x56\x23\x03\x12\xa7\x4c\x84\x30\xb4\x8f\xd7\xf0\x25\x1b\xb1\x80\x87\xca\x7d\x7e\x70\xc2\xd7\x9d\x6e\xe2\x15\x3a\x8f\x34\x55\x2c\xb3\x9c\x74\x17\x31\xd8\x07\xa3\xf8\x74\x18\xd7\xb2\xff\x2d\xb3\x51\x89\x28\xe9\x02\x18\x71\xb1\xbb\xa4\xb5\x33\x4c\x68\x43\x38\xcf\x38\x71\x14\x3b\x24\x6e\x84\xfa\x7d\x0d\xbe\x64\xb8\xfa\x96\x06\x7f\xc1\x3e\x2b\xea\x57\x71\x94\xaf\x67\xb2\x57\x50\xb3\x4c\x0a\x21\xba\x46\x2c\x11\xb2\x0a\x30\x73\x08\xda\x86\x9f\x65\x84\x3e\x91\x04\xf5\x68\x3f\xe9\x4b\xf2\x94\x08\x36\xb7\x91\xc7\xf9\x72\x77\x6e\xcc\xa8\x14\xfb\xc9\xf2\x32\x20\xa8\x5c\x2d\x84\xf7\xf8\x56\xc2\x65\x44\x78\xd0\x46\xa3\xdb\x55\x72\x3d\xfd\x75\xb9\xb6\xcb\xc2\x3e\x4b\x9e\xd6\x45\xb7\x21\x2a\x41\x53\xa3\xe8\xa5\xb7\x07\x2f\xc1\xc3\x08\xcf\x16\xa4\x87\x27\x96\x70\x5c\xb9\xd5\x23\x5e\x65\xdf\xa2\xe2\x7a\xae\x6f\x90\x3c\x1d\xd5\xb0\xf4\xf2\x78\x74\x72\x39\x3a\xae\x6f\x10\x33\x9d\x71\xb2\x76\xc5\xf0\xd4\x1d\x0b\xb3\xea\xdc\x18\x6b\xcf\xb4\xdd\x44\xe6\x4a\x09\x0d\x44\xd4\x1a\xac\x64\x01\xb3\x20\x06\x98\x06\xb2\x24\x8c\x93\x88\x23\xcc\x95\x4c\x81\x40\x62\xeb\x03\xb8\x71\xcf\xc1\xac\xf0\x3a\x58\x2d\x18\x5d\xc0\x8a\x71\x5e\x78\x22\x5f\x22\x18\x09\xc4\xaf\x80\xd1\x00\x20\x65\xe2\xef\x79\x84\xb5\x36\x27\xa3\xc9\x64\x64\x33\xf4\x13\xae\x57\x52\xc5\xd6\x21\x8f\xfa\x3e\x7b\xf4\x0a\x8e\x24\x4f\xed\x47\xa5\xb1\x23\xeb\xc1\x29\x61\xed\x9a\xbe\xaa\xe6\x1f\x30\x86\xf7\xc4\x55\x4a\x98\x12\xc6\x0b\xa3\x09\xbd\x60\x73\xd3\x78\xc3\x0f\x0a\xe3\x05\x31\xd6\x7c\x03\x80\x4c\xc9\x25\x8b\xb1\x4c\xb3\xfd\x73\x38\x13\x4f\x1d\x16\x1b\x1a\x06\xc8\x15\x0f\x8b\x42\x45\x87\xe3\x71\xc2\xcc\x22\x8f\x0a\xd7\xf0\x95\x8d\x5b\x31\xdd\xb1\x51\x88\xe3\x94\x58\xe5\x8d\xb3\xa7\x64\x5c\xde\x37\xa8\x5d\xa4\x8c\x3a\x77\x32\xc6\x52\x22\xd7\x29\x7d\x58\x89\xfb\x4e\x7f\xae\xf3\xcc\x96\x40\x18\xd7\x2d\x57\x45\x3a\x63\x22\xe1\xb8\x2f\xf5\x5d\xce\x0d\xdb\x97\xf8\x9a\xf3\xe6\x29\xda\x42\x5b\xde\xc0\x69\xba\x6e\x77\x21\x6e\x7a\x6c\xe8\x75\x96\x65\x54\x9e\xda\x0a\x4d\x17\x11\xb9\x5a\x09\x0e\x6c\x06\x6d\x53\xca\xb1\xd3\x09\x36\x81\xb7\x57\x51\x6f\x01\xf1\x9f\xa9\xfe\x02\x28\xe1\x79\x42\x29\x6a\xad\xd0\xe6\xa8\x76\xb9\xed\xc2\x6f\xbf\x7a\xaf\xfa\xfc\xf6\x64\x82\xe6\x39\x39\x7b\x70\xa2\x57\xa6\xa2\x37\x70\x2d\xdb\x4e\x39\xba\x0c\xed\x6f\x9b\x19\x3a\x13\x45\x8a\xd8\x43\x26\x6f\xda\xda\x43\xce\x4e\xae\xfd\x83\x64\xdd\x9d\x6b\x9f\x17\xba\x1f\xb4\x0e\x16\xbb\x79\x10\x5a\x6e\xee\xcf\x17\x6e\xb4\x1f\x15\x80\x3e\x84\x54\x8d\x12\x50\x91\x9c\x33\x91\x7c\x2c\x6a\xdd\x6e\xbb\xd2\x5e\xe9\xf7\x2c\x29\xf9\xfc\x51\xd4\x19\xc1\x81\x4f\xbd\xf5\x59\xae\x92\xde\x4a\x03\x56\x9d\x74\x10\x95\x7e\x47\x03\x7e\xf0\xaa\x1a\x05\xfc\xe4\xbf\x7a\x1f\xc9\xaa\x4f\xeb\x21\x5a\xd5\xe8\x23\x5b\x7b\xb1\xd8\xd4\x30\x3c\x07\x0c\xc1\x6e\xd8\xab\x75\xc6\x16\xf8\xab\xbe\xde\x76\x18\xac\x39\xe4\xb0\x08\xe8\x86\xbf\xc7\xac\xc6\xb6\x5e\xb3\x4b\xe5\x83\xd6\xdc\xd8\xed\xb8\x7b\xab\xf2\x65\x48\x5b\x29\xd4\x0e\xbc\xcd\x8d\xed\xa8\x5b\x75\xad\x0d\xec\xad\xba\x55\x81\xc0\x6d\xe4\xe6\x3e\x55\xb0\x7c\x73\xe6\x9b\x76\x6f\x1e\x60\x60\x13\xa3\x67\x7d\x78\x7e\x76\x76\x3a\xf4\x6e\x2c\xab\x68\x1f\x12\x5f\x11\x75\x91\x3d\x37\xbe\x15\x92\xd5\xe2\xde\xc6\xb3\xae\xf9\x8a\xac\xf5\x06\x9d\x07\xcf\x02\x1f\xa6\x65\xd5\xe3\x31\x68\xa6\xa4\x91\x54\xf2\x10\x1e\x6f\xa6\x1b\xeb\x3b\xd0\x2d\x37\xb6\x60\x4c\x6e\xb4\x31\xa3\x99\x97\x62\x27\x16\xd5\xdc\x6f\x8b\xf4\xbb\xc0\xaf\xff\x01\xf1\x0e\xc7\xc6\xaa\xeb\x79\x6b\xa4\x6a\xd1\x8f\x93\xb9\xb1\x05\x2d\x73\xa3\xc2\xcc\xce\x1b\xcc\xac\x19\x4b\xc9\xf3\x14\xef\x6c\xcc\xf3\x7a\x95\x8b\x4c\x26\xcd\xe6\x9b\xae\x08\x90\xda\x7d\xee\x0f\xb0\xb1\x49\xb3\x81\xef\xec\xad\xe1\xce\x7f\x28\xa6\x99\x59\xbf\x65\x2a\x84\x7f\xff\xa7\xe8\x5e\x4c\x11\xf5\x42\x28\x7a\x47\xd7\x91\x77\xbb\xbb\xe2\x85\x92\x32\x7c\xc7\x38\x67\x82\x99\xa6\xfa\x95\x2b\x81\x71\xd5\xa9\x26\xee\xad\x93\x9d\x45\x4c\x29\xd0\xb2\xf5\xba\x92\x9b\x71\x4d\x6b\xd9\xd3\xdc\x95\x05\x4c\x85\x41\xb6\xe3\x77\xbf\xb8\xf1\x75\x9d\xbd\xfd\x9d\xd6\xf3\xba\x4f\x54\x34\x9a\xb5\x7b\x40\x82\xc2\x8a\x8d\xb1\xeb\x39\xf1\x33\xd3\x86\x89\xa4\xdb\x74\xda\xb6\x35\x06\xb3\x40\xa6\xc0\xbd\x7b\x72\xd7\x54\xb4\x4d\xf1\x74\xbf\x35\xf1\xf8\xc2\xc9\x41\x5d\x7e\x5b\xaa\x1d\x6f\xde\x2d\xf2\x88\xc9\xa0\xf9\xbf\x66\x0b\x08\xe1\x74\xf0\x58\x24\xfc\x44\x65\x74\xb0\x35\x6e\x17\x07\x56\x7f\x00\x35\x7f\xb6\x74\xac\x71\x23\xd3\x34\x17\xcc\xac\xeb\x0e\xdf\xaa\x28\xcb\x23\xce\xf4\x02\x55\x03\x9d\xbc\xcf\x23\xd7\xd0\x58\x9e\x53\x19\x3b\x95\x96\xdd\x59\x37\x31\x97\x4b\xdd\x77\xe9\x1c\x6c\x3a\xeb\xd4\x9c\xd5\x1f\x41\x53\x59\xf5\x79\xb6\xed\x33\xa8\x96\x84\x87\x70\x71\x9c\x0e\xfe\x1b\x00\x00\xff\xff\xa1\x41\x61\x14\x42\x2a\x00\x00") +var _olmManifests0280OlmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x6d\x6f\x1b\xb9\xf1\x7f\xaf\x4f\x31\x10\xfe\x80\xff\x2d\xb2\x7a\xb0\x9d\x44\x5d\x20\xc0\xb9\x4e\xee\x72\xa8\xed\x08\xb6\xd3\x37\x87\xa0\xa0\xb8\xa3\x15\x6b\x3e\xec\x91\x5c\x29\xba\xa2\xdf\xbd\xe0\x72\x9f\x45\xc9\xb2\x93\xbb\x14\x45\xf8\x46\x12\x39\xe4\x0c\x67\x66\xe7\xe1\xa7\x8d\xa2\x68\x40\x32\xf6\x77\xd4\x86\x29\x19\xc3\x7a\x3a\x78\x60\x32\x89\xe1\x86\x08\x34\x19\xa1\x38\x10\x68\x49\x42\x2c\x89\x07\x00\x92\x08\x8c\x41\x71\x31\x00\xe0\x64\x81\xdc\xb8\x59\x80\x4c\x25\x91\x41\x9a\x6b\x66\xb7\xa3\x87\x7c\x81\x5a\xa2\x45\x33\x62\x6a\x8c\x72\xa9\x34\xc5\x18\x34\x1a\xab\x19\xb5\x98\x1c\xb9\x25\x5a\x57\x52\x71\x62\xd1\xd8\xc7\xb6\x91\x3c\x61\xf6\x29\x7c\x8a\x0d\x4f\xe5\xb2\x21\x5a\x3e\x85\x89\xa3\xdf\xe1\xf1\x3c\xb5\x67\xa8\x89\x55\xda\x3c\x43\xf9\x0b\x62\x90\x33\x89\xdf\x55\xef\x54\xef\x75\x7d\x87\x7a\xcd\x28\x5e\x50\xaa\x72\x69\xfb\xf6\x08\xba\x7d\x54\xd9\x20\x32\x7e\x33\x29\x37\x7b\x9a\xc2\x72\xfe\xf9\xe8\x5b\x58\x2f\x08\x1d\x91\xdc\xae\x94\x66\xbf\x11\xcb\x94\x1c\x3d\xcc\x0a\x29\x6b\xdb\x5f\xf2\xdc\x58\xd4\xb7\x8a\x87\xac\x6f\xb6\xc6\xa2\x88\xa9\x92\x56\x2b\xce\x51\xc7\xb5\x2c\x9c\x2d\x91\x6e\x29\xc7\x48\x10\x49\x52\xd4\x03\x9d\x73\x34\xf1\x20\x02\x92\xb1\x9f\xb4\xca\x33\x13\xc3\x2f\xc3\x3f\x0f\x3f\x0d\xc0\xe9\x4f\xe5\x9a\x62\x6b\x6a\x8d\x7a\x51\xfc\xdc\x10\x4b\x57\xc3\x17\x30\xe4\xcc\x58\xf7\x99\x62\xf1\x41\x35\x12\x8b\xee\x5b\x9e\x25\xe5\xb7\xac\xa2\x4d\x90\xa3\x9f\xf2\xdf\xa8\x13\x8f\xba\x2b\xba\x39\x34\x94\xf0\x72\xcb\x82\xc9\x64\xf8\x69\x10\x81\x54\xf2\xb6\x14\xe3\xe3\xed\x55\x48\x12\xf7\xf3\xcb\x74\xf8\x57\x26\x13\x26\xd3\xc7\x0c\xb9\xf0\x64\x91\x33\x9a\x56\x1c\x6f\x71\xe9\x28\x2b\xc5\x1d\xe0\x3a\x00\xd8\x35\xdc\xb3\xcc\x65\xf2\xc5\x3f\x91\xda\xc2\x62\x41\xdf\xfc\x2a\x2e\x58\xc7\x8f\x11\x55\x1a\x95\xfb\x10\x8d\xe6\x3e\x5c\x5d\x5f\x2a\xb9\x64\x21\x85\x51\x7f\xc1\x9d\x13\x49\x96\x99\xe6\x84\xb7\x98\x71\xb5\x15\x28\xed\x23\x3a\xdf\x15\xb5\x1b\xd0\x48\x96\xf5\x36\x98\x0c\xa9\x5b\x33\x56\x13\x8b\xe9\xd6\xd3\xd9\x6d\x86\x31\xdc\xa2\xf7\xce\xc2\xb5\x33\xce\x28\x31\x31\x4c\x1d\x31\x3a\x37\x54\xda\x13\x0b\xe7\xae\x57\x2d\x2e\x21\x3e\x00\x16\x45\xe6\xdc\xb5\xdc\xd4\xba\x87\x1b\xbc\xb3\x3f\x7c\x02\x40\x25\x6d\xf1\xbd\x0c\x4d\x97\x4a\x5a\xfc\x6c\x9b\xad\x3a\x97\x17\xe6\x46\xc9\x5b\xa5\x6c\x0c\x56\xe7\x58\x2f\x19\xa4\x54\x89\x6c\xae\xd5\x92\x71\x6c\xb6\xd4\x37\xce\xa5\x65\x02\xdf\xe2\x92\xe4\xdc\xd6\x8c\xda\x1e\x73\x73\x84\xbb\xb8\xe1\xfc\x93\x30\x89\xba\x75\xa9\x28\x6c\xb2\x96\x74\xe1\x1b\x15\x0a\xe1\x5c\x6d\xe6\x9a\xad\x19\xc7\x14\xdf\xf9\x67\xbf\xf0\x95\x25\xe1\x06\x3b\xb4\x94\x64\x64\xc1\x38\xb3\x0c\x4d\xf7\x14\x80\x44\xab\x2c\x86\x5f\x60\x78\x71\x75\x35\x84\x4f\xad\x55\xaa\x84\x20\x32\x69\x6f\x88\x60\xbc\x60\x72\xec\x1d\xa9\x96\x44\xa7\xa6\x4b\x14\x45\xb5\xd7\x75\xe6\xff\xef\xff\x3f\xcc\xdf\xdd\x5e\xdc\x7f\xb8\xfd\xc7\xcd\xc5\xf5\xbb\xbb\xf9\xc5\xe5\xbb\x3f\xf5\x76\x6e\x34\xb3\x78\x67\x89\xcd\x8d\x53\x6d\x67\x75\x38\x6c\xfd\x64\x82\xa4\x18\xc3\xaf\x39\xd9\xba\xc0\x54\x6b\x7f\xa9\x89\xc0\x8d\xd2\x0f\x4e\xcc\x1f\xcc\x8a\x9c\xbe\x7c\x15\x9f\x4f\x92\xc9\xd9\xab\xb3\xe5\x39\x21\xaf\x66\xe7\x67\xd3\xbf\xd0\xe4\xf5\xe9\x94\x9e\x2e\xe9\xf2\xec\xec\x74\xfa\x7a\xf6\xf2\x6c\x36\x59\x26\xf4\xf5\x79\x82\x33\x5c\xce\x4e\xa7\x67\xd3\xd7\x34\x39\x7d\x49\xa6\x93\xd7\xb3\x53\xd2\xe7\x3b\xcf\x39\x9f\x2b\xce\xe8\x36\x86\x9f\x97\x37\xca\xce\x35\x1a\xac\x8d\x0d\x45\xba\xd4\xb6\xa7\xed\xa8\xf1\x82\xb9\xd2\x36\x86\xd9\x64\x36\xe9\xd9\xc3\x7b\x84\x40\x97\x79\x4d\x6b\x8d\xb3\x35\x4a\x34\x66\xae\xd5\x02\xbb\xc7\xae\xac\xcd\x7e\x42\xdb\xb7\x6c\x46\xec\x2a\x86\xf1\x0a\x09\xb7\xab\xdf\xfa\x8b\xfb\xf8\x1b\xba\x42\x27\xc1\xfb\xfb\xfb\x79\x6b\x49\x23\x49\xd8\x37\xe4\x6f\x51\x0b\x26\x0b\x0f\xbf\x46\x63\x9c\x09\x4a\xf5\xff\x48\x38\x5f\x10\xfa\x70\xaf\xae\x54\x6a\x3e\xc8\x77\x5a\x77\x9e\x22\x94\xeb\xae\x77\x7a\x0d\xef\x7a\x62\x47\x90\x35\xe1\x39\xfe\xa8\x95\xe8\xdf\x6a\xc9\x90\x27\x65\xea\x0a\xac\xcc\x8b\x4b\x57\xd1\x6c\x14\x7e\x0e\x02\x12\xec\x32\xdf\x1b\x16\x9a\xb2\xa2\xb3\x49\xe3\xaf\x39\x9a\xbe\xcb\x01\xd0\x2c\x8f\x61\x3a\x11\xbd\x69\x81\x42\xe9\x6d\x0c\xd3\x57\x93\x6b\x56\xae\x49\x95\xe0\x5d\x27\x96\xbb\xd1\x2d\xf5\x94\x89\x81\x33\x99\x7f\xfe\x92\x1c\x45\x89\x25\x5c\xa5\x4f\xcb\x53\x3b\x9b\x7e\xc7\x5c\x15\x10\xf0\x19\xf9\x2a\x70\xca\xff\x4c\xce\x0a\xde\xed\x91\x5b\xc1\x37\xce\x5b\xa5\xcc\x07\x73\xd7\x49\x2b\x79\x9d\x74\x56\xba\x59\xcf\xe5\x2a\x5a\x94\x71\x82\x64\xae\x88\x44\xfd\xb3\xcb\x0c\x6f\x0e\x24\xa4\x9a\xbe\xd1\xbb\xc6\x94\x19\xab\xb7\x71\xab\x31\x6b\x18\xe4\x96\xf1\xa8\x48\x38\x9d\x85\x3f\x3e\xe9\x39\x61\x0c\xda\xc8\xb1\xe0\x8a\x24\x51\x6e\x50\x47\x2c\x79\xd3\x71\xcd\xef\x49\xb9\x19\xdf\x93\xf2\xa1\xa4\xfc\x75\x73\xd8\xec\x4b\x52\xd8\x6e\x67\x79\x74\x27\xbc\x9b\xd8\x48\x9a\x6a\x4c\x89\x45\xd7\xe5\x46\x98\x30\xdb\xcb\x64\xfb\xcf\x6b\xb6\x5a\x15\x91\x44\x30\x19\xc3\xd0\x3d\x5e\xc3\xa7\x6c\xc4\x02\x1e\x2a\xf7\x85\xc1\x89\x50\x77\xba\x8b\x57\x98\x7c\x61\xa8\x66\x99\xe3\x64\xba\x88\xc1\x31\x18\xc5\xa7\xe7\x71\x2d\xfb\xdf\x32\x1b\x95\x88\x92\x29\x80\x11\x1f\xbb\x4b\x5a\x37\xc3\xa4\xb1\x84\xf3\x8c\x13\x4f\x71\x40\xe2\x46\xa8\xdf\xd7\xe0\x6b\x86\x9b\x6f\x69\xf0\x27\xec\x73\xa2\x7e\x15\x47\xf9\x7a\x26\x7b\x01\x35\xcb\xb4\x10\xa2\x6b\xc4\x12\x21\xab\x00\x33\x8f\xa0\xed\xf8\x59\x46\xe8\x03\x49\xd1\x8c\x8e\x93\xbe\x24\x17\x44\xb2\xa5\x8b\x3c\xde\x97\xbb\x73\x63\x46\x95\x3c\x4e\x96\xa7\x01\x41\xe5\x6a\x21\x7c\xc0\xb7\x52\xae\x16\x84\x47\x6d\x34\xba\x5d\x25\xd7\xd3\x5f\x97\x6b\xbb\x2c\xec\xb3\xe4\xa2\x2e\xba\x2d\xd1\x29\xda\x1a\x45\x2f\xbd\x3d\x7a\x0a\x1e\x46\x78\xb6\x22\x3d\x3c\xb1\x84\xe3\xca\xad\x01\xf1\x2a\xfb\x16\x15\xd7\x63\x7d\x83\xe2\x62\x54\xc3\xd2\xeb\xc9\xe8\x74\x36\x9a\xd4\x37\x48\x98\xc9\x38\xd9\xfa\x62\x78\xee\x8f\x85\xbb\xea\xdc\x04\x6b\xcf\x74\xdd\x44\xe6\x4b\x09\x03\x44\xd6\x1a\xac\x64\x01\xbb\x22\x16\x98\x01\xb2\x26\x8c\x93\x05\x47\x58\x6a\x25\x80\x40\xea\xea\x03\xb8\xf4\xcf\xc1\x5d\xe1\x75\xb0\x59\x31\xba\x82\x0d\xe3\xbc\xf0\x44\xbe\x46\xb0\x0a\x48\x58\x01\xa3\x01\x80\x60\xf2\x6f\xf9\x02\x6b\x6d\x4e\x47\xd3\xe9\xc8\x65\xe8\x07\xdc\x6e\x94\x4e\x9c\x43\x9e\xf4\x7d\xf6\xe4\x05\x9c\x28\x2e\xdc\x47\xa5\xb1\x13\xe7\xc1\x82\xb0\x76\x4d\x5f\x55\xf3\xb7\x98\xc0\x7b\xe2\x2b\x25\x14\x84\xf1\xc2\x68\xd2\xac\xd8\xd2\x36\xde\xf0\x83\xc6\x64\x45\xac\x33\xdf\x00\x20\xd3\x6a\xcd\x12\x2c\xd3\x6c\xff\x1c\xce\xe4\x43\x87\xc5\x8e\x86\x01\x72\xcd\xe3\xa2\x50\x31\xf1\x78\x9c\x32\xbb\xca\x17\x85\x6b\x84\xca\xc6\xbd\x98\xee\xd8\x6a\xc4\xb1\x20\x4e\x79\xe3\xec\x21\x1d\x97\xf7\x8d\x6a\x17\x29\xa3\xce\xb5\x4a\xb0\x94\xc8\x77\x4a\x1f\x36\xf2\xa6\xd3\x9f\x9b\x3c\x73\x25\x10\x26\x75\xcb\x55\x91\xde\x31\x99\x72\x3c\x96\xfa\x3a\xe7\x96\x1d\x4b\x7c\xc1\x79\xf3\x14\xed\xa1\x2d\x6f\xe0\x35\x5d\xb7\xbb\x90\x34\x3d\x36\xf4\x3a\xcb\x32\x2a\xcf\x5d\x85\x66\x8a\x88\x5c\xad\x44\xcf\x6c\x06\x5d\x53\xca\xb1\xd3\x09\x36\x81\xb7\x57\x51\xef\x01\xf1\x1f\xa9\xfe\x22\x28\xe1\x79\x42\x29\x1a\xa3\xd1\xe5\xa8\x76\xb9\xed\xc3\x6f\xbf\x7a\xaf\xfa\xfc\xf6\x64\x8a\xf6\x31\x39\x7b\x70\x62\x50\xa6\xa2\x37\xf0\x2d\xdb\x41\x39\xba\x0c\xdd\x6f\x97\x19\x3a\x13\x45\x8a\x38\x42\xa6\x60\xda\x3a\x42\xce\x4e\xae\xfd\x83\x64\x3d\x9c\x6b\x1f\x17\xba\x1f\xb4\x9e\x2d\x76\xf3\x20\xb4\xdc\x3c\x9c\x2f\xfc\x68\x3f\x2a\x00\x7d\x08\xa9\x1a\x25\xa0\xa2\x38\x67\x32\xfd\x58\xd4\xba\xdd\x76\xa5\xbd\xd2\xef\x59\x04\xf9\xfc\x51\xd6\x19\xc1\x83\x4f\xbd\xf5\xbb\x5c\xa7\xbd\x95\x06\xac\x3a\xed\x20\x2a\xfd\x8e\x06\xc2\xe0\x55\x35\x0a\xf8\x29\x7c\xf5\x3e\x92\x55\x9f\xd6\x43\xb4\xaa\xd1\x47\xb6\x8e\x62\xb1\xab\x61\x78\x0c\x18\x82\xc3\xb0\x57\xeb\x8c\x3d\xf0\x57\x7d\xbd\xfd\x30\x58\x73\xc8\xf3\x22\xa0\x1f\xe1\x1e\xb3\x1a\xfb\x7a\xcd\x2e\x55\x08\x5a\xf3\xe3\xb0\xe3\x1e\xad\xca\xa7\x21\x6d\xa5\x50\x07\xf0\x36\x3f\xf6\xa3\x6e\xd5\xb5\x76\xb0\xb7\xea\x56\x05\x02\xb7\x93\x9b\xfb\x54\xd1\xfa\xcd\x79\x68\xda\xbf\x79\x80\x91\x4b\x8c\x81\xf5\xe1\xcb\xf3\xf3\xb3\x61\x70\x63\x59\x45\x87\x90\xf8\x8a\xa8\x8b\xec\xf9\xf1\xad\x90\xac\x16\xf7\x36\x9e\x75\xc1\x37\x64\x6b\x76\xe8\x02\x78\x16\x84\x30\x2d\xa7\x9e\x80\x41\x33\xad\xac\xa2\x8a\xc7\x70\x7f\x39\xdf\x59\x3f\x80\x6e\xf9\xb1\x07\x63\xf2\xa3\x8d\x19\xdd\x05\x29\x0e\x62\x51\xcd\xfd\xf6\x48\x7f\x08\xfc\xfa\x2f\x10\xef\xf9\xd8\x58\x75\xbd\x60\x8d\x54\x2d\x86\x71\x32\x3f\xf6\xa0\x65\x7e\x54\x98\xd9\xcb\x06\x33\x6b\xc6\x5a\xf1\x5c\xe0\xb5\x8b\x79\x41\xaf\xf2\x91\xc9\x8a\x6c\xb9\xeb\x8a\x00\xc2\xed\xf3\x7f\x80\x8d\xad\xc8\x06\xa1\xb3\xf7\x86\xbb\xf0\xa1\x28\x32\xbb\x7d\xcb\x74\x0c\xff\xfa\x77\xd1\xbd\xd8\x22\xea\xc5\x50\xf4\x8e\xbe\x23\xef\x76\x77\xc5\x0b\x25\x65\xf8\x4e\x70\xc9\x24\xb3\x4d\xf5\xab\x36\x12\x93\xaa\x53\x4d\xfd\x5b\x27\x07\x8b\x98\x52\xa0\x75\xeb\x75\x25\x3f\xe3\x9b\xd6\xb2\xa7\xb9\x2e\x0b\x98\x0a\x83\x6c\xc7\xef\x7e\x71\x13\xea\x3a\x7b\xfb\x3b\xad\xe7\x45\x9f\xa8\x68\x34\x6b\xf7\x80\x14\xa5\x13\x1b\x13\xdf\x73\xe2\x67\x66\x2c\x93\x69\xb7\xe9\x74\x6d\x6b\x02\x76\x85\x4c\x83\x7f\xf7\xe4\xba\xa9\x68\x9b\xe2\xe9\x66\x6f\xe2\x09\x85\x93\x67\x75\xf9\x6d\xa9\x0e\xbc\x79\xb7\xca\x17\x4c\x45\xcd\xff\x35\x7b\x40\x08\xaf\x83\xfb\x22\xe1\xa7\x3a\xa3\x83\xbd\x71\xbb\x38\xb0\xfa\x03\xa8\xf9\xb3\xa5\x63\x8d\x4b\x25\x44\x2e\x99\xdd\xd6\x1d\xbe\x53\x51\x96\x2f\x38\x33\x2b\xd4\x0d\x74\xf2\x3e\x5f\xf8\x86\xc6\xf1\x9c\xab\xc4\xab\xb4\xec\xce\xba\x89\xb9\x5c\xea\xbe\x4b\xe7\x61\xd3\xbb\x4e\xcd\x59\xfd\x11\x34\x57\x55\x9f\xe7\xda\x3e\x8b\x7a\x4d\x78\x0c\xaf\x26\x62\xf0\x9f\x00\x00\x00\xff\xff\x80\xce\x61\xa0\x42\x2a\x00\x00") -func olmManifests0270OlmYamlBytes() ([]byte, error) { +func olmManifests0280OlmYamlBytes() ([]byte, error) { return bindataRead( - _olmManifests0270OlmYaml, - "olm-manifests/0.27.0-olm.yaml", + _olmManifests0280OlmYaml, + "olm-manifests/0.28.0-olm.yaml", ) } -func olmManifests0270OlmYaml() (*asset, error) { - bytes, err := olmManifests0270OlmYamlBytes() +func olmManifests0280OlmYaml() (*asset, error) { + bytes, err := olmManifests0280OlmYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "olm-manifests/0.27.0-olm.yaml", size: 10818, mode: os.FileMode(420), modTime: time.Unix(1709244469, 0)} + info := bindataFileInfo{name: "olm-manifests/0.28.0-olm.yaml", size: 10818, mode: os.FileMode(420), modTime: time.Unix(1730300879, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -254,12 +254,12 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "olm-manifests/0.25.0-crds.yaml": olmManifests0250CrdsYaml, - "olm-manifests/0.25.0-olm.yaml": olmManifests0250OlmYaml, "olm-manifests/0.26.0-crds.yaml": olmManifests0260CrdsYaml, "olm-manifests/0.26.0-olm.yaml": olmManifests0260OlmYaml, "olm-manifests/0.27.0-crds.yaml": olmManifests0270CrdsYaml, "olm-manifests/0.27.0-olm.yaml": olmManifests0270OlmYaml, + "olm-manifests/0.28.0-crds.yaml": olmManifests0280CrdsYaml, + "olm-manifests/0.28.0-olm.yaml": olmManifests0280OlmYaml, } // AssetDir returns the file names below a certain @@ -306,12 +306,12 @@ type bintree struct { var _bintree = &bintree{nil, map[string]*bintree{ "olm-manifests": &bintree{nil, map[string]*bintree{ - "0.25.0-crds.yaml": &bintree{olmManifests0250CrdsYaml, map[string]*bintree{}}, - "0.25.0-olm.yaml": &bintree{olmManifests0250OlmYaml, map[string]*bintree{}}, "0.26.0-crds.yaml": &bintree{olmManifests0260CrdsYaml, map[string]*bintree{}}, "0.26.0-olm.yaml": &bintree{olmManifests0260OlmYaml, map[string]*bintree{}}, "0.27.0-crds.yaml": &bintree{olmManifests0270CrdsYaml, map[string]*bintree{}}, "0.27.0-olm.yaml": &bintree{olmManifests0270OlmYaml, map[string]*bintree{}}, + "0.28.0-crds.yaml": &bintree{olmManifests0280CrdsYaml, map[string]*bintree{}}, + "0.28.0-olm.yaml": &bintree{olmManifests0280OlmYaml, map[string]*bintree{}}, }}, }} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go index 98b5a7a23..82b6a279e 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/alpha/config3alphato3/convert_config_3-alpha_to_3.go @@ -25,7 +25,7 @@ import ( "text/template" "golang.org/x/mod/modfile" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" "sigs.k8s.io/yaml" ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli/cli.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli/cli.go index d0f00199c..99712f18e 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli/cli.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/cli/cli.go @@ -18,23 +18,16 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/viper" - "sigs.k8s.io/kubebuilder/v3/pkg/cli" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - kustomizev1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1" - kustomizev2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/cli" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + kustomizev2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" - // TODO: Remove this import and plugin once we have upgraded to a version of - // kubebuilder that no longer has the declarative plugin as a package - declarativev1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1" // nolint:staticcheck - deployimagev1alpha "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1" - golangv2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2" - golangv3 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3" - golangv4 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4" - grafanav1alpha "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha" + deployimagev1alpha "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1" + golangv4 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4" + grafanav1alpha "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha" ansiblev1 "github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1" "github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/alpha/config3alphato3" @@ -47,7 +40,6 @@ import ( "github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/scorecard" "github.com/operator-framework/operator-sdk/internal/flags" "github.com/operator-framework/operator-sdk/internal/plugins" - envtestv1 "github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1" helmv1 "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1" manifestsv2 "github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2" scorecardv2 "github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2" @@ -78,32 +70,6 @@ func Run() error { // This CLI can run kubebuilder commands and certain SDK specific commands that are aligned for // the kubebuilder project layout func GetPluginsCLIAndRoot() (*cli.CLI, *cobra.Command) { - // deprecated - gov2Bundle, _ := plugin.NewBundleWithOptions( - plugin.WithName(golang.DefaultNameQualifier), - plugin.WithVersion(golangv2.Plugin{}.Version()), - plugin.WithPlugins( - golangv2.Plugin{}, - envtestv1.Plugin{}, - manifestsv2.Plugin{}, - scorecardv2.Plugin{}, - ), - plugin.WithDeprecationMessage(golangv2.Plugin{}.DeprecationWarning()), - ) - - // deprecated - gov3Bundle, _ := plugin.NewBundleWithOptions( - plugin.WithName(golang.DefaultNameQualifier), - plugin.WithVersion(golangv3.Plugin{}.Version()), - plugin.WithPlugins( - kustomizev1.Plugin{}, - golangv3.Plugin{}, - manifestsv2.Plugin{}, - scorecardv2.Plugin{}, - ), - plugin.WithDeprecationMessage(golangv3.Plugin{}.DeprecationWarning()), - ) - gov4Bundle, _ := plugin.NewBundleWithOptions( plugin.WithName(golang.DefaultNameQualifier), plugin.WithVersion(golangv4.Plugin{}.Version()), @@ -150,15 +116,11 @@ func GetPluginsCLIAndRoot() (*cli.CLI, *cobra.Command) { cli.WithVersion(makeVersionString()), cli.WithPlugins( ansibleBundle, - gov2Bundle, // Deprecated - gov3Bundle, // Deprecated gov4Bundle, helmBundle, grafanav1alpha.Plugin{}, deployImageBundle, - declarativev1.Plugin{}, ), - cli.WithDefaultPlugins(cfgv2.Version, gov2Bundle), cli.WithDefaultPlugins(cfgv3.Version, gov4Bundle), cli.WithDefaultProjectVersion(cfgv3.Version), cli.WithExtraCommands(commands...), diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/internal/genutil.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/internal/genutil.go index a99d3c5d1..3b64c5a43 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/internal/genutil.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/internal/genutil.go @@ -28,7 +28,6 @@ import ( apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "sigs.k8s.io/controller-runtime/pkg/client" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" "sigs.k8s.io/yaml" ) @@ -182,18 +181,9 @@ func GetPackageNameAndLayout(defaultPackageName string) (packageName string, lay return "", "", err } if packageName == "" { - switch { - case cfg.GetVersion().Compare(cfgv2.Version) == 0: - wd, err := os.Getwd() - if err != nil { - return "", "", err - } - packageName = strings.ToLower(filepath.Base(wd)) - default: - packageName = cfg.GetProjectName() - if packageName == "" { - return "", "", errors.New("--package must be set if \"projectName\" is not set in the PROJECT config file") - } + packageName = cfg.GetProjectName() + if packageName == "" { + return "", "", errors.New("--package must be set if \"projectName\" is not set in the PROJECT config file") } } layout = projutil.GetProjectLayout(cfg) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/kustomize/manifests.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/kustomize/manifests.go index 659150077..0c45dc08c 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/kustomize/manifests.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/kustomize/manifests.go @@ -29,9 +29,8 @@ import ( "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "sigs.k8s.io/yaml" genutil "github.com/operator-framework/operator-sdk/internal/cmd/operator-sdk/generate/internal" @@ -257,11 +256,6 @@ func getGVKs(cfg config.Config) ([]schema.GroupVersionKind, error) { } gvks := make([]schema.GroupVersionKind, len(resources)) for i, gvk := range resources { - // check if the resource has an specific domain - // otherwise use the config.Domain. - if cfg.GetVersion().Compare(cfgv2.Version) == 0 { - gvk.Domain = cfg.GetDomain() - } gvks[i].Group = gvk.QualifiedGroup() gvks[i].Version = gvk.Version gvks[i].Kind = gvk.Kind diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/fbcutil/util.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/fbcutil/util.go index 540cc1391..7e4a0ca42 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/fbcutil/util.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/fbcutil/util.go @@ -48,7 +48,7 @@ const ( // TODO(v2.0.0): pin this image tag to a specific version. DefaultIndexImage = DefaultIndexImageBase + "latest" // DefaultInitImage is the default image to be used in the registry init container - DefaultInitImage = "registry.access.redhat.com/ubi8:8.9" + DefaultInitImage = "registry.access.redhat.com/ubi9/ubi:9.4" ) // BundleDeclcfg represents a minimal File-Based Catalog. diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/installer/manager.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/installer/manager.go index 21eb09842..49905c0ef 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/installer/manager.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/installer/manager.go @@ -26,7 +26,9 @@ import ( ) const ( - DefaultVersion = "latest" + // TODO: switch back to latest once olm fixes their releases + // https://github.com/operator-framework/operator-lifecycle-manager/issues/3419 + DefaultVersion = "0.28.0" DefaultTimeout = time.Minute * 2 // DefaultOLMNamespace is the namespace where OLM is installed DefaultOLMNamespace = "olm" diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go index bba5264a1..ec898394e 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go @@ -15,13 +15,17 @@ package fbcindex import ( + "bufio" "context" "errors" "fmt" + "io" "path" "strings" "time" + "k8s.io/apimachinery/pkg/util/yaml" + "github.com/operator-framework/api/pkg/operators/v1alpha1" log "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" @@ -399,8 +403,22 @@ func (f *FBCRegistryPod) createConfigMaps(cs *v1alpha1.CatalogSource) ([]*corev1 // properly have all the FBC contents rendered in the registry pod. func (f *FBCRegistryPod) partitionedConfigMaps() ([]*corev1.ConfigMap, error) { var err error - // Split on the YAML separator `---` - yamlDefs := strings.Split(f.FBCContent, "---") + + var yamlDefs []string + yamlReader := yaml.NewYAMLReader(bufio.NewReader(strings.NewReader(f.FBCContent))) + for { + doc, err := yamlReader.Read() + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, err + } + if len(doc) == 0 { + continue + } + yamlDefs = append(yamlDefs, string(doc)) + } configMaps, err := f.getConfigMaps(yamlDefs) if err != nil { diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/init.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/init.go deleted file mode 100644 index fb5ee58d2..000000000 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/init.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2021 The Operator-SDK 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 v1 - -import ( - "fmt" - "os" - "strings" - - "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" -) - -const ( - // controllerRuntimeVersion version to be used to download the envtest setup script - controllerRuntimeVersion = "v0.6.3" - - filePath = "Makefile" -) - -var _ plugin.InitSubcommand = &initSubcommand{} - -type initSubcommand struct { - config config.Config -} - -func (s *initSubcommand) InjectConfig(c config.Config) error { - s.config = c - - return nil -} - -func (s *initSubcommand) Scaffold(fs machinery.Filesystem) error { - makefileBytes, err := afero.ReadFile(fs.FS, filePath) - if err != nil { - return err - } - - makefileBytes = []byte(strings.Replace(string(makefileBytes), oldMakefileTestTarget, fmt.Sprintf(makefileTestTarget, controllerRuntimeVersion), 1)) - - var mode os.FileMode = 0644 - if info, err := fs.FS.Stat(filePath); err == nil { - mode = info.Mode() - } - if err := os.WriteFile(filePath, makefileBytes, mode); err != nil { - return fmt.Errorf("error updating Makefile: %w", err) - } - - return nil -} - -const ( - oldMakefileTestTarget = `# Run tests -test: manifests generate fmt vet - go test ./... -coverprofile cover.out` - makefileTestTarget = `# Run tests -ENVTEST_ASSETS_DIR = $(shell pwd)/testbin -test: manifests generate fmt vet - mkdir -p $(ENVTEST_ASSETS_DIR) - test -f $(ENVTEST_ASSETS_DIR)/setup-envtest.sh || curl -sSLo $(ENVTEST_ASSETS_DIR)/setup-envtest.sh https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/%s/hack/setup-envtest.sh - source $(ENVTEST_ASSETS_DIR)/setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR); setup_envtest_env $(ENVTEST_ASSETS_DIR); go test ./... -coverprofile cover.out` -) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/plugin.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/plugin.go deleted file mode 100644 index 5ddf8b586..000000000 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1/plugin.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2021 The Operator-SDK 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. - -// This plugin replaces the test target of go/v2 plugins to match that of go/v3. -// More info: https://github.com/kubernetes-sigs/kubebuilder/pull/1711 -package v1 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - - "github.com/operator-framework/operator-sdk/internal/plugins" -) - -const pluginName = "envtest" + plugins.DefaultNameQualifier - -var ( - pluginVersion = plugin.Version{Number: 1} - supportedProjectVersions = []config.Version{cfgv2.Version, cfgv3.Version} -) - -var ( - _ plugin.Plugin = Plugin{} - _ plugin.Init = Plugin{} -) - -type Plugin struct { - initSubcommand -} - -func (Plugin) Name() string { return pluginName } -func (Plugin) Version() plugin.Version { return pluginVersion } -func (Plugin) SupportedProjectVersions() []config.Version { return supportedProjectVersions } -func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p.initSubcommand } - -type Config struct{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/api.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/api.go index 012feefdc..696d7bcca 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/api.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/api.go @@ -19,20 +19,17 @@ import ( "fmt" "strings" - "github.com/sirupsen/logrus" - "github.com/iancoleman/strcase" - "github.com/spf13/pflag" - "helm.sh/helm/v3/pkg/chart" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/chartutil" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds" "github.com/operator-framework/operator-sdk/internal/plugins/util" + "github.com/sirupsen/logrus" + "github.com/spf13/pflag" + "helm.sh/helm/v3/pkg/chart" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const ( @@ -208,7 +205,7 @@ func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { // Selected CRD version must match existing CRD versions. // nolint:staticcheck - if pluginutil.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { + if hasDifferentAPIVersion(p.config.ListCRDVersions(), p.resource.API.CRDVersion) { return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", p.resource.API.CRDVersion) } @@ -232,3 +229,8 @@ func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { return nil } + +// hasDifferentCRDVersion returns true if any other CRD version is tracked in the project configuration. +func hasDifferentAPIVersion(versions []string, version string) bool { + return !(len(versions) == 0 || (len(versions) == 1 && versions[0] == version)) +} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/init.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/init.go index cc6ba11b2..733b10614 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/init.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/init.go @@ -20,10 +20,10 @@ import ( "path/filepath" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds" sdkpluginutil "github.com/operator-framework/operator-sdk/internal/plugins/util" @@ -130,8 +130,7 @@ func (p *initSubcommand) InjectConfig(c config.Config) error { } func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error { - - if err := addInitCustomizations(p.config.GetProjectName(), p.config.IsComponentConfig()); err != nil { + if err := addInitCustomizations(p.config.GetProjectName()); err != nil { return fmt.Errorf("error updating init manifests: %s", err) } @@ -147,7 +146,7 @@ func (p *initSubcommand) PostScaffold() error { fmt.Printf("Next: define a resource with:\n$ %s create api\n", p.commandName) } else { args := []string{"create", "api"} - // The following three checks should match the default values in sig.k8s.io/kubebuilder/v3/pkg/cli/resource.go + // The following three checks should match the default values in sig.k8s.io/kubebuilder/v4/pkg/cli/resource.go if p.group != "" { args = append(args, fmt.Sprintf("--%s", groupFlag), p.group) } @@ -178,46 +177,18 @@ func (p *initSubcommand) PostScaffold() error { } // addInitCustomizations will perform the required customizations for this plugin on the common base -func addInitCustomizations(projectName string, componentConfig bool) error { +func addInitCustomizations(projectName string) error { managerFile := filepath.Join("config", "manager", "manager.yaml") + managerMetricsPatch := filepath.Join("config", "default", "manager_metrics_patch.yaml") // todo: we ought to use afero instead. Replace this methods to insert/update // by https://github.com/kubernetes-sigs/kubebuilder/pull/2119 - // Add leader election arg in config/manager/manager.yaml and in config/default/manager_auth_proxy_patch.yaml - if componentConfig { - err := util.InsertCode(managerFile, - "- /manager", - fmt.Sprintf("\n args:\n - --leader-election-id=%s", projectName)) - if err != nil { - return err - } - - err = util.InsertCode(filepath.Join("config", "default", "manager_auth_proxy_patch.yaml"), - "memory: 64Mi", - fmt.Sprintf("\n - name: manager\n args:\n - \"--leader-election-id=%s\"", projectName)) - if err != nil { - return err - } - // Remove the webhook option for the componentConfig since webhooks are not supported by helm - err = util.ReplaceInFile(filepath.Join("config", "manager", "controller_manager_config.yaml"), - "webhook:\n port: 9443", "") - if err != nil { - return err - } - } else { - err := util.InsertCode(managerFile, - "--leader-elect", - fmt.Sprintf("\n - --leader-election-id=%s", projectName)) - if err != nil { - return err - } - err = util.InsertCode(filepath.Join("config", "default", "manager_auth_proxy_patch.yaml"), - "- \"--leader-elect\"", - fmt.Sprintf("\n - \"--leader-election-id=%s\"", projectName)) - if err != nil { - return err - } + err := util.InsertCode(managerFile, + "--leader-elect", + fmt.Sprintf("\n - --leader-election-id=%s", projectName)) + if err != nil { + return err } // Remove the call to the command as manager. Helm has not been exposing this entrypoint @@ -225,7 +196,28 @@ func addInitCustomizations(projectName string, componentConfig bool) error { const command = `command: - /manager ` - err := util.ReplaceInFile(managerFile, command, "") + err = util.ReplaceInFile(managerFile, command, "") + if err != nil { + return err + } + + // Enable the proper auth/metrics flags for helm + err = util.ReplaceInFile(managerMetricsPatch, + `# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443`, `# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443 +# This patch adds the args to allow securing the metrics endpoint +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-secure +# This patch adds the args to allow RBAC-based authn/authz the metrics endpoint +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-require-rbac`) if err != nil { return err } diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/plugin.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/plugin.go index a36802dff..392744f73 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/plugin.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/plugin.go @@ -15,9 +15,9 @@ package v1 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/plugins" ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/api.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/api.go index 194668f5a..8e39b1fdf 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/api.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/api.go @@ -22,10 +22,10 @@ import ( "os" "helm.sh/helm/v3/pkg/chart" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/chartutil" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates" diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/init.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/init.go index 7b5b703f2..60b8235c2 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/init.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/init.go @@ -18,11 +18,11 @@ limitations under the License. package scaffolds import ( - kustomizev2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" + kustomizev2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/chartutil" "github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates" diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/crd.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/crd.go index 85f81da32..c83f8f77b 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/crd.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/crd.go @@ -19,7 +19,7 @@ import ( "path/filepath" "github.com/kr/text" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRD{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/kustomization.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/kustomization.go index 871c00e19..9c0ecebd1 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/kustomization.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/crd/kustomization.go @@ -21,7 +21,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var ( diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go index db0eab070..a0d0f8218 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/rbac/manager_role.go @@ -32,7 +32,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/discovery" crconfig "sigs.k8s.io/controller-runtime/pkg/client/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "sigs.k8s.io/yaml" ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/samples/custom_resource.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/samples/custom_resource.go index 01f95991f..7aed0f676 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/samples/custom_resource.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/config/samples/custom_resource.go @@ -24,7 +24,7 @@ import ( "text/template" "helm.sh/helm/v3/pkg/chart" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" "sigs.k8s.io/yaml" ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/dockerfile.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/dockerfile.go index 9cc3139cf..d307ed906 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/dockerfile.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/dockerfile.go @@ -17,7 +17,7 @@ package templates import ( "errors" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Dockerfile{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/gitignore.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/gitignore.go index 0d7290b58..c29aa8ab8 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/gitignore.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/gitignore.go @@ -18,7 +18,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &GitIgnore{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/makefile.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/makefile.go index dccaf36a5..342e9b941 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/makefile.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/makefile.go @@ -20,7 +20,7 @@ package templates import ( "errors" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Makefile{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/watches.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/watches.go index 2297cc036..50ab159ea 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/watches.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds/internal/templates/watches.go @@ -17,7 +17,7 @@ package templates import ( "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Watches{} diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/api.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/api.go index 84a187b7f..09c5d651d 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/api.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/api.go @@ -18,10 +18,10 @@ import ( "errors" "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/samples" "github.com/operator-framework/operator-sdk/internal/plugins/util" diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/init.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/init.go index b4ada2770..9d1708cf5 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/init.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/init.go @@ -22,9 +22,9 @@ import ( "strings" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests" "github.com/operator-framework/operator-sdk/internal/util/projutil" diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/plugin.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/plugin.go index e7ac8d519..ed1205750 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/plugin.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/plugin.go @@ -15,10 +15,9 @@ package v2 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/plugins" ) @@ -27,7 +26,7 @@ const pluginName = "manifests" + plugins.DefaultNameQualifier var ( pluginVersion = plugin.Version{Number: 2} - supportedProjectVersions = []config.Version{cfgv2.Version, cfgv3.Version} + supportedProjectVersions = []config.Version{cfgv3.Version} pluginKey = plugin.KeyFor(Plugin{}) ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests/kustomization.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests/kustomization.go index 08c69d269..7aab3ec5f 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests/kustomization.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests/kustomization.go @@ -17,7 +17,7 @@ package manifests import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} @@ -64,7 +64,7 @@ resources: # [WEBHOOK] To enable webhooks, uncomment all the sections with [WEBHOOK] prefix. # Do NOT uncomment sections with prefix [CERTMANAGER], as OLM does not support cert-manager. # These patches remove the unnecessary "cert" volume and its manager container volumeMount. -#patchesJson6902: +#patches: #- target: # group: apps # version: v1 diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/samples/kustomization.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/samples/kustomization.go index b547ac38a..6cecb88b6 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/samples/kustomization.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/samples/kustomization.go @@ -18,7 +18,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var ( diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/utils.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/utils.go index 3de39d598..e4d49cfd1 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/utils.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/utils.go @@ -18,7 +18,7 @@ import ( "errors" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) const ( diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/init.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/init.go index 3c8b5d370..5c5e8c2e2 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/init.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/init.go @@ -20,9 +20,9 @@ import ( "path/filepath" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/scorecard" "github.com/operator-framework/operator-sdk/internal/version" @@ -77,7 +77,7 @@ func (s *initSubcommand) Scaffold(fs machinery.Filesystem) error { } // Write "kustomization.yaml". - kustomizeContent := fmt.Sprintf(scorecardKustomizationFile, machinery.NewMarkerFor("kustomization.yaml", patchesJSON6902Marker)) + kustomizeContent := fmt.Sprintf(scorecardKustomizationFile, machinery.NewMarkerFor("kustomization.yaml", patchesMarker)) if err := afero.WriteFile(fs.FS, filepath.Join(outputDir, "kustomization.yaml"), []byte(kustomizeContent), 0666); err != nil { return fmt.Errorf("error writing scorecard kustomization.yaml: %w", err) } @@ -94,24 +94,26 @@ const ( // This should always be written to config/scorecard/kustomization.yaml. scorecardKustomizationFile = `resources: - bases/config.yaml -patchesJson6902: +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +patches: - path: patches/basic.config.yaml target: group: scorecard.operatorframework.io - version: v1alpha3 kind: Configuration name: config + version: v1alpha3 - path: patches/olm.config.yaml target: group: scorecard.operatorframework.io - version: v1alpha3 kind: Configuration name: config + version: v1alpha3 %[1]s ` // YAML file marker to append to kustomization.yaml files. - patchesJSON6902Marker = "patchesJson6902" + patchesMarker = "patches" // configBaseFile is an empty scorecard componentconfig with parallel stages. configBaseFile = `apiVersion: scorecard.operatorframework.io/v1alpha3 diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/plugin.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/plugin.go index 5455f034d..7ab27adb0 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/plugin.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/scorecard/v2/plugin.go @@ -15,10 +15,9 @@ package v2 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" "github.com/operator-framework/operator-sdk/internal/plugins" ) @@ -27,7 +26,7 @@ const pluginName = "scorecard" + plugins.DefaultNameQualifier var ( pluginVersion = plugin.Version{Number: 2} - supportedProjectVersions = []config.Version{cfgv2.Version, cfgv3.Version} + supportedProjectVersions = []config.Version{cfgv3.Version} pluginKey = plugin.KeyFor(Plugin{}) ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/cleanup.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/cleanup.go index 69a963182..536a2804d 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/cleanup.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/cleanup.go @@ -21,7 +21,7 @@ import ( "os" "path/filepath" - kbutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" + kbutil "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" log "github.com/sirupsen/logrus" ) diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/legacy_keys.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/legacy_keys.go index 1e0da04de..603c9c0cd 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/legacy_keys.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/plugins/util/legacy_keys.go @@ -19,8 +19,8 @@ import ( log "github.com/sirupsen/logrus" gofunk "github.com/thoas/go-funk" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" ) const ( diff --git a/tools/vendor/github.com/operator-framework/operator-sdk/internal/util/projutil/project_util.go b/tools/vendor/github.com/operator-framework/operator-sdk/internal/util/projutil/project_util.go index b8efb3d28..8ea7d8d38 100644 --- a/tools/vendor/github.com/operator-framework/operator-sdk/internal/util/projutil/project_util.go +++ b/tools/vendor/github.com/operator-framework/operator-sdk/internal/util/projutil/project_util.go @@ -22,11 +22,10 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - yamlstore "sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml" - _ "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" // Register config/v2 for `config.New` - _ "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" // Register config/v3 for `config.New` - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + yamlstore "sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml" + _ "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" // Register config/v3 for `config.New` + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) const ( diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/.gitignore b/tools/vendor/github.com/pelletier/go-toml/v2/.gitignore index a69e2b0eb..4b7c4eda3 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/.gitignore +++ b/tools/vendor/github.com/pelletier/go-toml/v2/.gitignore @@ -3,4 +3,5 @@ fuzz/ cmd/tomll/tomll cmd/tomljson/tomljson cmd/tomltestgen/tomltestgen -dist \ No newline at end of file +dist +tests/ diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md b/tools/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md index 04dd12bcb..96ecf9e2b 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md +++ b/tools/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md @@ -165,25 +165,22 @@ Checklist: ### New release -1. Decide on the next version number. Use semver. -2. Generate release notes using [`gh`][gh]. Example: +1. Decide on the next version number. Use semver. Review commits since last + version to assess. +2. Tag release. For example: ``` -$ gh api -X POST \ - -F tag_name='v2.0.0-beta.5' \ - -F target_commitish='v2' \ - -F previous_tag_name='v2.0.0-beta.4' \ - --jq '.body' \ - repos/pelletier/go-toml/releases/generate-notes +git checkout v2 +git pull +git tag v2.2.0 +git push --tags ``` -3. Look for "Other changes". That would indicate a pull request not labeled - properly. Tweak labels and pull request titles until changelog looks good for - users. -4. [Draft new release][new-release]. -5. Fill tag and target with the same value used to generate the changelog. -6. Set title to the new tag value. -7. Paste the generated changelog. -8. Check "create discussion", in the "Releases" category. -9. Check pre-release if new version is an alpha or beta. +3. CI automatically builds a draft Github release. Review it and edit as + necessary. Look for "Other changes". That would indicate a pull request not + labeled properly. Tweak labels and pull request titles until changelog looks + good for users. +4. Check "create discussion" box, in the "Releases" category. +5. If new version is an alpha or beta only, check pre-release box. + [issues-tracker]: https://github.com/pelletier/go-toml/issues [bug-report]: https://github.com/pelletier/go-toml/issues/new?template=bug_report.md diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/README.md b/tools/vendor/github.com/pelletier/go-toml/v2/README.md index 63b92f3b0..d964b25fe 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/README.md +++ b/tools/vendor/github.com/pelletier/go-toml/v2/README.md @@ -98,9 +98,9 @@ Given the following struct, let's see how to read it and write it as TOML: ```go type MyConfig struct { - Version int - Name string - Tags []string + Version int + Name string + Tags []string } ``` @@ -119,7 +119,7 @@ tags = ["go", "toml"] var cfg MyConfig err := toml.Unmarshal([]byte(doc), &cfg) if err != nil { - panic(err) + panic(err) } fmt.Println("version:", cfg.Version) fmt.Println("name:", cfg.Name) @@ -140,14 +140,14 @@ as a TOML document: ```go cfg := MyConfig{ - Version: 2, - Name: "go-toml", - Tags: []string{"go", "toml"}, + Version: 2, + Name: "go-toml", + Tags: []string{"go", "toml"}, } b, err := toml.Marshal(cfg) if err != nil { - panic(err) + panic(err) } fmt.Println(string(b)) @@ -175,17 +175,17 @@ the AST level. See https://pkg.go.dev/github.com/pelletier/go-toml/v2/unstable. Execution time speedup compared to other Go TOML libraries: - - - - - - - - - - - + + + + + + + + + + +
Benchmarkgo-toml v1BurntSushi/toml
Marshal/HugoFrontMatter-21.9x1.9x
Marshal/ReferenceFile/map-21.7x1.8x
Marshal/ReferenceFile/struct-22.2x2.5x
Unmarshal/HugoFrontMatter-22.9x2.9x
Unmarshal/ReferenceFile/map-22.6x2.9x
Unmarshal/ReferenceFile/struct-24.4x5.3x
Benchmarkgo-toml v1BurntSushi/toml
Marshal/HugoFrontMatter-21.9x2.2x
Marshal/ReferenceFile/map-21.7x2.1x
Marshal/ReferenceFile/struct-22.2x3.0x
Unmarshal/HugoFrontMatter-22.9x2.7x
Unmarshal/ReferenceFile/map-22.6x2.7x
Unmarshal/ReferenceFile/struct-24.6x5.1x
See more

The table above has the results of the most common use-cases. The table below @@ -193,22 +193,22 @@ contains the results of all benchmarks, including unrealistic ones. It is provided for completeness.

- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
Benchmarkgo-toml v1BurntSushi/toml
Marshal/SimpleDocument/map-21.8x2.9x
Marshal/SimpleDocument/struct-22.7x4.2x
Unmarshal/SimpleDocument/map-24.5x3.1x
Unmarshal/SimpleDocument/struct-26.2x3.9x
UnmarshalDataset/example-23.1x3.5x
UnmarshalDataset/code-22.3x3.1x
UnmarshalDataset/twitter-22.5x2.6x
UnmarshalDataset/citm_catalog-22.1x2.2x
UnmarshalDataset/canada-21.6x1.3x
UnmarshalDataset/config-24.3x3.2x
[Geo mean]2.7x2.8x
Benchmarkgo-toml v1BurntSushi/toml
Marshal/SimpleDocument/map-21.8x2.7x
Marshal/SimpleDocument/struct-22.7x3.8x
Unmarshal/SimpleDocument/map-23.8x3.0x
Unmarshal/SimpleDocument/struct-25.6x4.1x
UnmarshalDataset/example-23.0x3.2x
UnmarshalDataset/code-22.3x2.9x
UnmarshalDataset/twitter-22.6x2.7x
UnmarshalDataset/citm_catalog-22.2x2.3x
UnmarshalDataset/canada-21.8x1.5x
UnmarshalDataset/config-24.1x2.9x
geomean2.7x2.8x

This table can be generated with ./ci.sh benchmark -a -html.

@@ -233,24 +233,24 @@ Go-toml provides three handy command line tools: * `tomljson`: Reads a TOML file and outputs its JSON representation. - ``` - $ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest - $ tomljson --help - ``` + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest + $ tomljson --help + ``` * `jsontoml`: Reads a JSON file and outputs a TOML representation. - ``` - $ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest - $ jsontoml --help - ``` + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest + $ jsontoml --help + ``` * `tomll`: Lints and reformats a TOML file. - ``` - $ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest - $ tomll --help - ``` + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest + $ tomll --help + ``` ### Docker image @@ -261,7 +261,7 @@ Those tools are also available as a [Docker image][docker]. For example, to use docker run -i ghcr.io/pelletier/go-toml:v2 tomljson < example.toml ``` -Multiple versions are availble on [ghcr.io][docker]. +Multiple versions are available on [ghcr.io][docker]. [docker]: https://github.com/pelletier/go-toml/pkgs/container/go-toml @@ -293,16 +293,16 @@ element in the interface to decode the object. For example: ```go type inner struct { - B interface{} + B interface{} } type doc struct { - A interface{} + A interface{} } d := doc{ - A: inner{ - B: "Before", - }, + A: inner{ + B: "Before", + }, } data := ` @@ -341,7 +341,7 @@ contained in the doc is superior to the capacity of the array. For example: ```go type doc struct { - A [2]string + A [2]string } d := doc{} err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d) @@ -565,10 +565,11 @@ complete solutions exist out there. ## Versioning -Go-toml follows [Semantic Versioning](https://semver.org). The supported version -of [TOML](https://github.com/toml-lang/toml) is indicated at the beginning of -this document. The last two major versions of Go are supported -(see [Go Release Policy](https://golang.org/doc/devel/release.html#policy)). +Expect for parts explicitely marked otherwise, go-toml follows [Semantic +Versioning](https://semver.org). The supported version of +[TOML](https://github.com/toml-lang/toml) is indicated at the beginning of this +document. The last two major versions of Go are supported (see [Go Release +Policy](https://golang.org/doc/devel/release.html#policy)). ## License diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/SECURITY.md b/tools/vendor/github.com/pelletier/go-toml/v2/SECURITY.md index b2f21cfc9..d4d554fda 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/SECURITY.md +++ b/tools/vendor/github.com/pelletier/go-toml/v2/SECURITY.md @@ -2,9 +2,6 @@ ## Supported Versions -Use this section to tell people about which versions of your project are -currently being supported with security updates. - | Version | Supported | | ---------- | ------------------ | | Latest 2.x | :white_check_mark: | diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/ci.sh b/tools/vendor/github.com/pelletier/go-toml/v2/ci.sh index 9ae8b7537..86217a9b0 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/ci.sh +++ b/tools/vendor/github.com/pelletier/go-toml/v2/ci.sh @@ -77,7 +77,7 @@ cover() { pushd "$dir" go test -covermode=atomic -coverpkg=./... -coverprofile=coverage.out.tmp ./... - cat coverage.out.tmp | grep -v fuzz | grep -v testsuite | grep -v tomltestgen | grep -v gotoml-test-decoder > coverage.out + grep -Ev '(fuzz|testsuite|tomltestgen|gotoml-test-decoder|gotoml-test-encoder)' coverage.out.tmp > coverage.out go tool cover -func=coverage.out echo "Coverage profile for ${branch}: ${dir}/coverage.out" >&2 popd @@ -152,7 +152,7 @@ bench() { fi export GOMAXPROCS=2 - nice -n -19 taskset --cpu-list 0,1 go test '-bench=^Benchmark(Un)?[mM]arshal' -count=5 -run=Nothing ./... | tee "${out}" + go test '-bench=^Benchmark(Un)?[mM]arshal' -count=10 -run=Nothing ./... | tee "${out}" popd if [ "${branch}" != "HEAD" ]; then @@ -161,10 +161,12 @@ bench() { } fmktemp() { - if mktemp --version|grep GNU >/dev/null; then - mktemp --suffix=-$1; + if mktemp --version &> /dev/null; then + # GNU + mktemp --suffix=-$1 else - mktemp -t $1; + # BSD + mktemp -t $1 fi } @@ -184,12 +186,14 @@ with open(sys.argv[1]) as f: lines.append(line.split(',')) results = [] -for line in reversed(lines[1:]): +for line in reversed(lines[2:]): + if len(line) < 8 or line[0] == "": + continue v2 = float(line[1]) results.append([ line[0].replace("-32", ""), "%.1fx" % (float(line[3])/v2), # v1 - "%.1fx" % (float(line[5])/v2), # bs + "%.1fx" % (float(line[7])/v2), # bs ]) # move geomean to the end results.append(results[0]) @@ -260,10 +264,10 @@ benchmark() { if [ "$1" = "-html" ]; then tmpcsv=`fmktemp csv` - benchstat -csv -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt > $tmpcsv + benchstat -format csv go-toml-v2.txt go-toml-v1.txt bs-toml.txt > $tmpcsv benchstathtml $tmpcsv else - benchstat -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt + benchstat go-toml-v2.txt go-toml-v1.txt bs-toml.txt fi rm -f go-toml-v2.txt go-toml-v1.txt bs-toml.txt diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go b/tools/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go index 40e23f830..76df2d5b6 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go +++ b/tools/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go @@ -57,7 +57,11 @@ type SeenTracker struct { currentIdx int } -var pool sync.Pool +var pool = sync.Pool{ + New: func() interface{} { + return &SeenTracker{} + }, +} func (s *SeenTracker) reset() { // Always contains a root element at index 0. @@ -149,8 +153,9 @@ func (s *SeenTracker) setExplicitFlag(parentIdx int) { // CheckExpression takes a top-level node and checks that it does not contain // keys that have been seen in previous calls, and validates that types are -// consistent. -func (s *SeenTracker) CheckExpression(node *unstable.Node) error { +// consistent. It returns true if it is the first time this node's key is seen. +// Useful to clear array tables on first use. +func (s *SeenTracker) CheckExpression(node *unstable.Node) (bool, error) { if s.entries == nil { s.reset() } @@ -166,7 +171,7 @@ func (s *SeenTracker) CheckExpression(node *unstable.Node) error { } } -func (s *SeenTracker) checkTable(node *unstable.Node) error { +func (s *SeenTracker) checkTable(node *unstable.Node) (bool, error) { if s.currentIdx >= 0 { s.setExplicitFlag(s.currentIdx) } @@ -192,7 +197,7 @@ func (s *SeenTracker) checkTable(node *unstable.Node) error { } else { entry := s.entries[idx] if entry.kind == valueKind { - return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) } } parentIdx = idx @@ -201,25 +206,27 @@ func (s *SeenTracker) checkTable(node *unstable.Node) error { k := it.Node().Data idx := s.find(parentIdx, k) + first := false if idx >= 0 { kind := s.entries[idx].kind if kind != tableKind { - return fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind) + return false, fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind) } if s.entries[idx].explicit { - return fmt.Errorf("toml: table %s already exists", string(k)) + return false, fmt.Errorf("toml: table %s already exists", string(k)) } s.entries[idx].explicit = true } else { idx = s.create(parentIdx, k, tableKind, true, false) + first = true } s.currentIdx = idx - return nil + return first, nil } -func (s *SeenTracker) checkArrayTable(node *unstable.Node) error { +func (s *SeenTracker) checkArrayTable(node *unstable.Node) (bool, error) { if s.currentIdx >= 0 { s.setExplicitFlag(s.currentIdx) } @@ -242,7 +249,7 @@ func (s *SeenTracker) checkArrayTable(node *unstable.Node) error { } else { entry := s.entries[idx] if entry.kind == valueKind { - return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) } } @@ -252,22 +259,23 @@ func (s *SeenTracker) checkArrayTable(node *unstable.Node) error { k := it.Node().Data idx := s.find(parentIdx, k) - if idx >= 0 { + firstTime := idx < 0 + if firstTime { + idx = s.create(parentIdx, k, arrayTableKind, true, false) + } else { kind := s.entries[idx].kind if kind != arrayTableKind { - return fmt.Errorf("toml: key %s already exists as a %s, but should be an array table", kind, string(k)) + return false, fmt.Errorf("toml: key %s already exists as a %s, but should be an array table", kind, string(k)) } s.clear(idx) - } else { - idx = s.create(parentIdx, k, arrayTableKind, true, false) } s.currentIdx = idx - return nil + return firstTime, nil } -func (s *SeenTracker) checkKeyValue(node *unstable.Node) error { +func (s *SeenTracker) checkKeyValue(node *unstable.Node) (bool, error) { parentIdx := s.currentIdx it := node.Key() @@ -281,11 +289,11 @@ func (s *SeenTracker) checkKeyValue(node *unstable.Node) error { } else { entry := s.entries[idx] if it.IsLast() { - return fmt.Errorf("toml: key %s is already defined", string(k)) + return false, fmt.Errorf("toml: key %s is already defined", string(k)) } else if entry.kind != tableKind { - return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + return false, fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) } else if entry.explicit { - return fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k)) + return false, fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k)) } } @@ -303,45 +311,39 @@ func (s *SeenTracker) checkKeyValue(node *unstable.Node) error { return s.checkArray(value) } - return nil + return false, nil } -func (s *SeenTracker) checkArray(node *unstable.Node) error { +func (s *SeenTracker) checkArray(node *unstable.Node) (first bool, err error) { it := node.Children() for it.Next() { n := it.Node() switch n.Kind { case unstable.InlineTable: - err := s.checkInlineTable(n) + first, err = s.checkInlineTable(n) if err != nil { - return err + return false, err } case unstable.Array: - err := s.checkArray(n) + first, err = s.checkArray(n) if err != nil { - return err + return false, err } } } - return nil + return first, nil } -func (s *SeenTracker) checkInlineTable(node *unstable.Node) error { - if pool.New == nil { - pool.New = func() interface{} { - return &SeenTracker{} - } - } - +func (s *SeenTracker) checkInlineTable(node *unstable.Node) (first bool, err error) { s = pool.Get().(*SeenTracker) s.reset() it := node.Children() for it.Next() { n := it.Node() - err := s.checkKeyValue(n) + first, err = s.checkKeyValue(n) if err != nil { - return err + return false, err } } @@ -352,5 +354,5 @@ func (s *SeenTracker) checkInlineTable(node *unstable.Node) error { // redefinition of its keys: check* functions cannot walk into // a value. pool.Put(s) - return nil + return first, nil } diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/marshaler.go b/tools/vendor/github.com/pelletier/go-toml/v2/marshaler.go index 6fe78533c..7f4e20c12 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/marshaler.go +++ b/tools/vendor/github.com/pelletier/go-toml/v2/marshaler.go @@ -3,6 +3,7 @@ package toml import ( "bytes" "encoding" + "encoding/json" "fmt" "io" "math" @@ -37,10 +38,11 @@ type Encoder struct { w io.Writer // global settings - tablesInline bool - arraysMultiline bool - indentSymbol string - indentTables bool + tablesInline bool + arraysMultiline bool + indentSymbol string + indentTables bool + marshalJsonNumbers bool } // NewEncoder returns a new Encoder that writes to w. @@ -87,6 +89,17 @@ func (enc *Encoder) SetIndentTables(indent bool) *Encoder { return enc } +// SetMarshalJsonNumbers forces the encoder to serialize `json.Number` as a +// float or integer instead of relying on TextMarshaler to emit a string. +// +// *Unstable:* This method does not follow the compatibility guarantees of +// semver. It can be changed or removed without a new major version being +// issued. +func (enc *Encoder) SetMarshalJsonNumbers(indent bool) *Encoder { + enc.marshalJsonNumbers = indent + return enc +} + // Encode writes a TOML representation of v to the stream. // // If v cannot be represented to TOML it returns an error. @@ -252,6 +265,18 @@ func (enc *Encoder) encode(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, e return append(b, x.String()...), nil case LocalDateTime: return append(b, x.String()...), nil + case json.Number: + if enc.marshalJsonNumbers { + if x == "" { /// Useful zero value. + return append(b, "0"...), nil + } else if v, err := x.Int64(); err == nil { + return enc.encode(b, ctx, reflect.ValueOf(v)) + } else if f, err := x.Float64(); err == nil { + return enc.encode(b, ctx, reflect.ValueOf(f)) + } else { + return nil, fmt.Errorf("toml: unable to convert %q to int64 or float64", x) + } + } } hasTextMarshaler := v.Type().Implements(textMarshalerType) @@ -707,6 +732,8 @@ func walkStruct(ctx encoderCtx, t *table, v reflect.Value) { if fieldType.Anonymous { if fieldType.Type.Kind() == reflect.Struct { walkStruct(ctx, t, f) + } else if fieldType.Type.Kind() == reflect.Pointer && !f.IsNil() && f.Elem().Kind() == reflect.Struct { + walkStruct(ctx, t, f.Elem()) } continue } else { @@ -998,6 +1025,10 @@ func (enc *Encoder) encodeSliceAsArrayTable(b []byte, ctx encoderCtx, v reflect. scratch = enc.commented(ctx.commented, scratch) + if enc.indentTables { + scratch = enc.indent(ctx.indent, scratch) + } + scratch = append(scratch, "[["...) for i, k := range ctx.parentKey { diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go b/tools/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go index 868c74c15..98231bae6 100644 --- a/tools/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go +++ b/tools/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go @@ -35,6 +35,9 @@ type Decoder struct { // global settings strict bool + + // toggles unmarshaler interface + unmarshalerInterface bool } // NewDecoder creates a new Decoder that will read from r. @@ -54,6 +57,24 @@ func (d *Decoder) DisallowUnknownFields() *Decoder { return d } +// EnableUnmarshalerInterface allows to enable unmarshaler interface. +// +// With this feature enabled, types implementing the unstable/Unmarshaler +// interface can be decoded from any structure of the document. It allows types +// that don't have a straightfoward TOML representation to provide their own +// decoding logic. +// +// Currently, types can only decode from a single value. Tables and array tables +// are not supported. +// +// *Unstable:* This method does not follow the compatibility guarantees of +// semver. It can be changed or removed without a new major version being +// issued. +func (d *Decoder) EnableUnmarshalerInterface() *Decoder { + d.unmarshalerInterface = true + return d +} + // Decode the whole content of r into v. // // By default, values in the document that don't exist in the target Go value @@ -108,6 +129,7 @@ func (d *Decoder) Decode(v interface{}) error { strict: strict{ Enabled: d.strict, }, + unmarshalerInterface: d.unmarshalerInterface, } return dec.FromParser(v) @@ -127,6 +149,10 @@ type decoder struct { // need to be skipped. skipUntilTable bool + // Flag indicating that the current array/slice table should be cleared because + // it is the first encounter of an array table. + clearArrayTable bool + // Tracks position in Go arrays. // This is used when decoding [[array tables]] into Go arrays. Given array // tables are separate TOML expression, we need to keep track of where we @@ -139,6 +165,9 @@ type decoder struct { // Strict mode strict strict + // Flag that enables/disables unmarshaler interface. + unmarshalerInterface bool + // Current context for the error. errorContext *errorContext } @@ -246,9 +275,10 @@ Rules for the unmarshal code: func (d *decoder) handleRootExpression(expr *unstable.Node, v reflect.Value) error { var x reflect.Value var err error + var first bool // used for to clear array tables on first use if !(d.skipUntilTable && expr.Kind == unstable.KeyValue) { - err = d.seen.CheckExpression(expr) + first, err = d.seen.CheckExpression(expr) if err != nil { return err } @@ -267,6 +297,7 @@ func (d *decoder) handleRootExpression(expr *unstable.Node, v reflect.Value) err case unstable.ArrayTable: d.skipUntilTable = false d.strict.EnterArrayTable(expr) + d.clearArrayTable = first x, err = d.handleArrayTable(expr.Key(), v) default: panic(fmt.Errorf("parser should not permit expression of kind %s at document root", expr.Kind)) @@ -307,6 +338,10 @@ func (d *decoder) handleArrayTableCollectionLast(key unstable.Iterator, v reflec reflect.Copy(nelem, elem) elem = nelem } + if d.clearArrayTable && elem.Len() > 0 { + elem.SetLen(0) + d.clearArrayTable = false + } } return d.handleArrayTableCollectionLast(key, elem) case reflect.Ptr: @@ -325,6 +360,10 @@ func (d *decoder) handleArrayTableCollectionLast(key unstable.Iterator, v reflec return v, nil case reflect.Slice: + if d.clearArrayTable && v.Len() > 0 { + v.SetLen(0) + d.clearArrayTable = false + } elemType := v.Type().Elem() var elem reflect.Value if elemType.Kind() == reflect.Interface { @@ -576,7 +615,7 @@ func (d *decoder) handleKeyValues(v reflect.Value) (reflect.Value, error) { break } - err := d.seen.CheckExpression(expr) + _, err := d.seen.CheckExpression(expr) if err != nil { return reflect.Value{}, err } @@ -634,6 +673,14 @@ func (d *decoder) handleValue(value *unstable.Node, v reflect.Value) error { v = initAndDereferencePointer(v) } + if d.unmarshalerInterface { + if v.CanAddr() && v.Addr().CanInterface() { + if outi, ok := v.Addr().Interface().(unstable.Unmarshaler); ok { + return outi.UnmarshalTOML(value) + } + } + } + ok, err := d.tryTextUnmarshaler(value, v) if ok || err != nil { return err @@ -1097,9 +1144,9 @@ func (d *decoder) handleKeyValuePart(key unstable.Iterator, value *unstable.Node f := fieldByIndex(v, path) - if !f.CanSet() { - // If the field is not settable, need to take a slower path and make a copy of - // the struct itself to a new location. + if !f.CanAddr() { + // If the field is not addressable, need to take a slower path and + // make a copy of the struct itself to a new location. nvp := reflect.New(v.Type()) nvp.Elem().Set(v) v = nvp.Elem() diff --git a/tools/vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go b/tools/vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go new file mode 100644 index 000000000..00cfd6de4 --- /dev/null +++ b/tools/vendor/github.com/pelletier/go-toml/v2/unstable/unmarshaler.go @@ -0,0 +1,7 @@ +package unstable + +// The Unmarshaler interface may be implemented by types to customize their +// behavior when being unmarshaled from a TOML document. +type Unmarshaler interface { + UnmarshalTOML(value *Node) error +} diff --git a/tools/vendor/github.com/prometheus/client_golang/NOTICE b/tools/vendor/github.com/prometheus/client_golang/NOTICE index dd878a30e..b9cc55abb 100644 --- a/tools/vendor/github.com/prometheus/client_golang/NOTICE +++ b/tools/vendor/github.com/prometheus/client_golang/NOTICE @@ -16,8 +16,3 @@ Go support for Protocol Buffers - Google's data interchange format http://github.com/golang/protobuf/ Copyright 2010 The Go Authors See source code for license details. - -Support for streaming Protocol Buffer messages for the Go language (golang). -https://github.com/matttproud/golang_protobuf_extensions -Copyright 2013 Matt T. Proud -Licensed under the Apache License, Version 2.0 diff --git a/tools/vendor/github.com/klauspost/pgzip/GO_LICENSE b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE similarity index 96% rename from tools/vendor/github.com/klauspost/pgzip/GO_LICENSE rename to tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE index 744875676..65d761bc9 100644 --- a/tools/vendor/github.com/klauspost/pgzip/GO_LICENSE +++ b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2013 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go new file mode 100644 index 000000000..8547c8dfd --- /dev/null +++ b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go @@ -0,0 +1,145 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd. + +// Package header provides functions for parsing HTTP headers. +package header + +import ( + "net/http" + "strings" +) + +// Octet types from RFC 2616. +var octetTypes [256]octetType + +type octetType byte + +const ( + isToken octetType = 1 << iota + isSpace +) + +func init() { + // OCTET = + // CHAR = + // CTL = + // CR = + // LF = + // SP = + // HT = + // <"> = + // CRLF = CR LF + // LWS = [CRLF] 1*( SP | HT ) + // TEXT = + // separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT + // token = 1* + // qdtext = > + + for c := 0; c < 256; c++ { + var t octetType + isCtl := c <= 31 || c == 127 + isChar := 0 <= c && c <= 127 + isSeparator := strings.ContainsRune(" \t\"(),/:;<=>?@[]\\{}", rune(c)) + if strings.ContainsRune(" \t\r\n", rune(c)) { + t |= isSpace + } + if isChar && !isCtl && !isSeparator { + t |= isToken + } + octetTypes[c] = t + } +} + +// AcceptSpec describes an Accept* header. +type AcceptSpec struct { + Value string + Q float64 +} + +// ParseAccept parses Accept* headers. +func ParseAccept(header http.Header, key string) (specs []AcceptSpec) { +loop: + for _, s := range header[key] { + for { + var spec AcceptSpec + spec.Value, s = expectTokenSlash(s) + if spec.Value == "" { + continue loop + } + spec.Q = 1.0 + s = skipSpace(s) + if strings.HasPrefix(s, ";") { + s = skipSpace(s[1:]) + if !strings.HasPrefix(s, "q=") { + continue loop + } + spec.Q, s = expectQuality(s[2:]) + if spec.Q < 0.0 { + continue loop + } + } + specs = append(specs, spec) + s = skipSpace(s) + if !strings.HasPrefix(s, ",") { + continue loop + } + s = skipSpace(s[1:]) + } + } + return +} + +func skipSpace(s string) (rest string) { + i := 0 + for ; i < len(s); i++ { + if octetTypes[s[i]]&isSpace == 0 { + break + } + } + return s[i:] +} + +func expectTokenSlash(s string) (token, rest string) { + i := 0 + for ; i < len(s); i++ { + b := s[i] + if (octetTypes[b]&isToken == 0) && b != '/' { + break + } + } + return s[:i], s[i:] +} + +func expectQuality(s string) (q float64, rest string) { + switch { + case len(s) == 0: + return -1, "" + case s[0] == '0': + q = 0 + case s[0] == '1': + q = 1 + default: + return -1, "" + } + s = s[1:] + if !strings.HasPrefix(s, ".") { + return q, s + } + s = s[1:] + i := 0 + n := 0 + d := 1 + for ; i < len(s); i++ { + b := s[i] + if b < '0' || b > '9' { + break + } + n = n*10 + int(b) - '0' + d *= 10 + } + return q + float64(n)/float64(d), s[i:] +} diff --git a/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go new file mode 100644 index 000000000..2e45780b7 --- /dev/null +++ b/tools/vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go @@ -0,0 +1,36 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd. + +package httputil + +import ( + "net/http" + + "github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header" +) + +// NegotiateContentEncoding returns the best offered content encoding for the +// request's Accept-Encoding header. If two offers match with equal weight and +// then the offer earlier in the list is preferred. If no offers are +// acceptable, then "" is returned. +func NegotiateContentEncoding(r *http.Request, offers []string) string { + bestOffer := "identity" + bestQ := -1.0 + specs := header.ParseAccept(r.Header, "Accept-Encoding") + for _, offer := range offers { + for _, spec := range specs { + if spec.Q > bestQ && + (spec.Value == "*" || spec.Value == offer) { + bestQ = spec.Q + bestOffer = offer + } + } + } + if bestQ == 0 { + bestOffer = "" + } + return bestOffer +} diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go index bcfa4fa10..cc4ef1077 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go @@ -37,6 +37,9 @@ var ( // MetricsScheduler allows only scheduler metrics to be collected from Go runtime. // e.g. go_sched_goroutines_goroutines MetricsScheduler = GoRuntimeMetricsRule{regexp.MustCompile(`^/sched/.*`)} + // MetricsDebug allows only debug metrics to be collected from Go runtime. + // e.g. go_godebug_non_default_behavior_gocachetest_events_total + MetricsDebug = GoRuntimeMetricsRule{regexp.MustCompile(`^/godebug/.*`)} ) // WithGoCollectorMemStatsMetricsDisabled disables metrics that is gathered in runtime.MemStats structure such as: @@ -44,7 +47,6 @@ var ( // go_memstats_alloc_bytes // go_memstats_alloc_bytes_total // go_memstats_sys_bytes -// go_memstats_lookups_total // go_memstats_mallocs_total // go_memstats_frees_total // go_memstats_heap_alloc_bytes diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index ad9a71a5e..520cbd7d4 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -22,13 +22,13 @@ import ( // goRuntimeMemStats provides the metrics initially provided by runtime.ReadMemStats. // From Go 1.17 those similar (and better) statistics are provided by runtime/metrics, so // while eval closure works on runtime.MemStats, the struct from Go 1.17+ is -// populated using runtime/metrics. +// populated using runtime/metrics. Those are the defaults we can't alter. func goRuntimeMemStats() memStatsMetrics { return memStatsMetrics{ { desc: NewDesc( memstatNamespace("alloc_bytes"), - "Number of bytes allocated and still in use.", + "Number of bytes allocated in heap and currently in use. Equals to /memory/classes/heap/objects:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, @@ -36,7 +36,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("alloc_bytes_total"), - "Total number of bytes allocated, even if freed.", + "Total number of bytes allocated in heap until now, even if released already. Equals to /gc/heap/allocs:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, @@ -44,23 +44,16 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("sys_bytes"), - "Number of bytes obtained from system.", + "Number of bytes obtained from system. Equals to /memory/classes/total:byte.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("lookups_total"), - "Total number of pointer lookups.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, - valType: CounterValue, }, { desc: NewDesc( memstatNamespace("mallocs_total"), - "Total number of mallocs.", + // TODO(bwplotka): We could add go_memstats_heap_objects, probably useful for discovery. Let's gather more feedback, kind of a waste of bytes for everybody for compatibility reasons to keep both, and we can't really rename/remove useful metric. + "Total number of heap objects allocated, both live and gc-ed. Semantically a counter version for go_memstats_heap_objects gauge. Equals to /gc/heap/allocs:objects + /gc/heap/tiny/allocs:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, @@ -68,7 +61,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("frees_total"), - "Total number of frees.", + "Total number of heap objects frees. Equals to /gc/heap/frees:objects + /gc/heap/tiny/allocs:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, @@ -76,7 +69,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_alloc_bytes"), - "Number of heap bytes allocated and still in use.", + "Number of heap bytes allocated and currently in use, same as go_memstats_alloc_bytes. Equals to /memory/classes/heap/objects:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, @@ -84,7 +77,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_sys_bytes"), - "Number of heap bytes obtained from system.", + "Number of heap bytes obtained from system. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes + /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, @@ -92,7 +85,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_idle_bytes"), - "Number of heap bytes waiting to be used.", + "Number of heap bytes waiting to be used. Equals to /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, @@ -100,7 +93,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_inuse_bytes"), - "Number of heap bytes that are in use.", + "Number of heap bytes that are in use. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, @@ -108,7 +101,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_released_bytes"), - "Number of heap bytes released to OS.", + "Number of heap bytes released to OS. Equals to /memory/classes/heap/released:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, @@ -116,7 +109,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("heap_objects"), - "Number of allocated objects.", + "Number of currently allocated objects. Equals to /gc/heap/objects:objects.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, @@ -124,7 +117,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("stack_inuse_bytes"), - "Number of bytes in use by the stack allocator.", + "Number of bytes obtained from system for stack allocator in non-CGO environments. Equals to /memory/classes/heap/stacks:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, @@ -132,7 +125,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("stack_sys_bytes"), - "Number of bytes obtained from system for stack allocator.", + "Number of bytes obtained from system for stack allocator. Equals to /memory/classes/heap/stacks:bytes + /memory/classes/os-stacks:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, @@ -140,7 +133,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mspan_inuse_bytes"), - "Number of bytes in use by mspan structures.", + "Number of bytes in use by mspan structures. Equals to /memory/classes/metadata/mspan/inuse:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, @@ -148,7 +141,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mspan_sys_bytes"), - "Number of bytes used for mspan structures obtained from system.", + "Number of bytes used for mspan structures obtained from system. Equals to /memory/classes/metadata/mspan/inuse:bytes + /memory/classes/metadata/mspan/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, @@ -156,7 +149,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mcache_inuse_bytes"), - "Number of bytes in use by mcache structures.", + "Number of bytes in use by mcache structures. Equals to /memory/classes/metadata/mcache/inuse:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, @@ -164,7 +157,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("mcache_sys_bytes"), - "Number of bytes used for mcache structures obtained from system.", + "Number of bytes used for mcache structures obtained from system. Equals to /memory/classes/metadata/mcache/inuse:bytes + /memory/classes/metadata/mcache/free:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, @@ -172,7 +165,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("buck_hash_sys_bytes"), - "Number of bytes used by the profiling bucket hash table.", + "Number of bytes used by the profiling bucket hash table. Equals to /memory/classes/profiling/buckets:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, @@ -180,7 +173,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("gc_sys_bytes"), - "Number of bytes used for garbage collection system metadata.", + "Number of bytes used for garbage collection system metadata. Equals to /memory/classes/metadata/other:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, @@ -188,7 +181,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("other_sys_bytes"), - "Number of bytes used for other system allocations.", + "Number of bytes used for other system allocations. Equals to /memory/classes/other:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, @@ -196,7 +189,7 @@ func goRuntimeMemStats() memStatsMetrics { }, { desc: NewDesc( memstatNamespace("next_gc_bytes"), - "Number of heap bytes when next garbage collection will take place.", + "Number of heap bytes when next garbage collection will take place. Equals to /gc/heap/goal:bytes.", nil, nil, ), eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, @@ -225,7 +218,7 @@ func newBaseGoCollector() baseGoCollector { nil, nil), gcDesc: NewDesc( "go_gc_duration_seconds", - "A summary of the pause duration of garbage collection cycles.", + "A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.", nil, nil), gcLastTimeDesc: NewDesc( "go_memstats_last_gc_time_seconds", diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go index 2d8d9f64f..511746417 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go @@ -17,6 +17,7 @@ package prometheus import ( + "fmt" "math" "runtime" "runtime/metrics" @@ -153,7 +154,8 @@ func defaultGoCollectorOptions() internal.GoCollectorOptions { "/gc/heap/frees-by-size:bytes": goGCHeapFreesBytes, }, RuntimeMetricRules: []internal.GoCollectorRule{ - //{Matcher: regexp.MustCompile("")}, + // Recommended metrics we want by default from runtime/metrics. + {Matcher: internal.GoCollectorDefaultRuntimeMetrics}, }, } } @@ -203,6 +205,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { // to fail here. This condition is tested in TestExpectedRuntimeMetrics. continue } + help := attachOriginalName(d.Description.Description, d.Name) sampleBuf = append(sampleBuf, metrics.Sample{Name: d.Name}) sampleMap[d.Name] = &sampleBuf[len(sampleBuf)-1] @@ -214,7 +217,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { m = newBatchHistogram( NewDesc( BuildFQName(namespace, subsystem, name), - d.Description.Description, + help, nil, nil, ), @@ -226,7 +229,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { Namespace: namespace, Subsystem: subsystem, Name: name, - Help: d.Description.Description, + Help: help, }, ) } else { @@ -234,7 +237,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { Namespace: namespace, Subsystem: subsystem, Name: name, - Help: d.Description.Description, + Help: help, }) } metricSet = append(metricSet, m) @@ -284,6 +287,10 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector { } } +func attachOriginalName(desc, origName string) string { + return fmt.Sprintf("%s Sourced from %s", desc, origName) +} + // Describe returns all descriptions of the collector. func (c *goCollector) Describe(ch chan<- *Desc) { c.base.Describe(ch) @@ -376,13 +383,13 @@ func unwrapScalarRMValue(v metrics.Value) float64 { // // This should never happen because we always populate our metric // set from the runtime/metrics package. - panic("unexpected unsupported metric") + panic("unexpected bad kind metric") default: // Unsupported metric kind. // // This should never happen because we check for this during initialization // and flag and filter metrics whose kinds we don't understand. - panic("unexpected unsupported metric kind") + panic(fmt.Sprintf("unexpected unsupported metric: %v", v.Kind())) } } diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index b5c8bcb39..519db348a 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -440,7 +440,7 @@ type HistogramOpts struct { // constant (or any negative float value). NativeHistogramZeroThreshold float64 - // The remaining fields define a strategy to limit the number of + // The next three fields define a strategy to limit the number of // populated sparse buckets. If NativeHistogramMaxBucketNumber is left // at zero, the number of buckets is not limited. (Note that this might // lead to unbounded memory consumption if the values observed by the @@ -473,6 +473,22 @@ type HistogramOpts struct { NativeHistogramMinResetDuration time.Duration NativeHistogramMaxZeroThreshold float64 + // NativeHistogramMaxExemplars limits the number of exemplars + // that are kept in memory for each native histogram. If you leave it at + // zero, a default value of 10 is used. If no exemplars should be kept specifically + // for native histograms, set it to a negative value. (Scrapers can + // still use the exemplars exposed for classic buckets, which are managed + // independently.) + NativeHistogramMaxExemplars int + // NativeHistogramExemplarTTL is only checked once + // NativeHistogramMaxExemplars is exceeded. In that case, the + // oldest exemplar is removed if it is older than NativeHistogramExemplarTTL. + // Otherwise, the older exemplar in the pair of exemplars that are closest + // together (on an exponential scale) is removed. + // If NativeHistogramExemplarTTL is left at its zero value, a default value of + // 5m is used. To always delete the oldest exemplar, set it to a negative value. + NativeHistogramExemplarTTL time.Duration + // now is for testing purposes, by default it's time.Now. now func() time.Time @@ -532,6 +548,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr if opts.afterFunc == nil { opts.afterFunc = time.AfterFunc } + h := &histogram{ desc: desc, upperBounds: opts.Buckets, @@ -556,6 +573,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr h.nativeHistogramZeroThreshold = DefNativeHistogramZeroThreshold } // Leave h.nativeHistogramZeroThreshold at 0 otherwise. h.nativeHistogramSchema = pickSchema(opts.NativeHistogramBucketFactor) + h.nativeExemplars = makeNativeExemplars(opts.NativeHistogramExemplarTTL, opts.NativeHistogramMaxExemplars) } for i, upperBound := range h.upperBounds { if i < len(h.upperBounds)-1 { @@ -725,7 +743,8 @@ type histogram struct { // resetScheduled is protected by mtx. It is true if a reset is // scheduled for a later time (when nativeHistogramMinResetDuration has // passed). - resetScheduled bool + resetScheduled bool + nativeExemplars nativeExemplars // now is for testing purposes, by default it's time.Now. now func() time.Time @@ -742,6 +761,9 @@ func (h *histogram) Observe(v float64) { h.observe(v, h.findBucket(v)) } +// ObserveWithExemplar should not be called in a high-frequency setting +// for a native histogram with configured exemplars. For this case, +// the implementation isn't lock-free and might suffer from lock contention. func (h *histogram) ObserveWithExemplar(v float64, e Labels) { i := h.findBucket(v) h.observe(v, i) @@ -821,6 +843,13 @@ func (h *histogram) Write(out *dto.Metric) error { Length: proto.Uint32(0), }} } + + if h.nativeExemplars.isEnabled() { + h.nativeExemplars.Lock() + his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...) + h.nativeExemplars.Unlock() + } + } addAndResetCounts(hotCounts, coldCounts) return nil @@ -1091,8 +1120,10 @@ func (h *histogram) resetCounts(counts *histogramCounts) { deleteSyncMap(&counts.nativeHistogramBucketsPositive) } -// updateExemplar replaces the exemplar for the provided bucket. With empty -// labels, it's a no-op. It panics if any of the labels is invalid. +// updateExemplar replaces the exemplar for the provided classic bucket. +// With empty labels, it's a no-op. It panics if any of the labels is invalid. +// If histogram is native, the exemplar will be cached into nativeExemplars, +// which has a limit, and will remove one exemplar when limit is reached. func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { if l == nil { return @@ -1102,6 +1133,10 @@ func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { panic(err) } h.exemplars[bucket].Store(e) + doSparse := h.nativeHistogramSchema > math.MinInt32 && !math.IsNaN(v) + if doSparse { + h.nativeExemplars.addExemplar(e) + } } // HistogramVec is a Collector that bundles a set of Histograms that all share the @@ -1336,6 +1371,48 @@ func MustNewConstHistogram( return m } +// NewConstHistogramWithCreatedTimestamp does the same thing as NewConstHistogram but sets the created timestamp. +func NewConstHistogramWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + buckets map[float64]uint64, + ct time.Time, + labelValues ...string, +) (Metric, error) { + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { + return nil, err + } + return &constHistogram{ + desc: desc, + count: count, + sum: sum, + buckets: buckets, + labelPairs: MakeLabelPairs(desc, labelValues), + createdTs: timestamppb.New(ct), + }, nil +} + +// MustNewConstHistogramWithCreatedTimestamp is a version of NewConstHistogramWithCreatedTimestamp that panics where +// NewConstHistogramWithCreatedTimestamp would have returned an error. +func MustNewConstHistogramWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + buckets map[float64]uint64, + ct time.Time, + labelValues ...string, +) Metric { + m, err := NewConstHistogramWithCreatedTimestamp(desc, count, sum, buckets, ct, labelValues...) + if err != nil { + panic(err) + } + return m +} + type buckSort []*dto.Bucket func (s buckSort) Len() int { @@ -1575,3 +1652,186 @@ func addAndResetCounts(hot, cold *histogramCounts) { atomic.AddUint64(&hot.nativeHistogramZeroBucket, atomic.LoadUint64(&cold.nativeHistogramZeroBucket)) atomic.StoreUint64(&cold.nativeHistogramZeroBucket, 0) } + +type nativeExemplars struct { + sync.Mutex + + // Time-to-live for exemplars, it is set to -1 if exemplars are disabled, that is NativeHistogramMaxExemplars is below 0. + // The ttl is used on insertion to remove an exemplar that is older than ttl, if present. + ttl time.Duration + + exemplars []*dto.Exemplar +} + +func (n *nativeExemplars) isEnabled() bool { + return n.ttl != -1 +} + +func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars { + if ttl == 0 { + ttl = 5 * time.Minute + } + + if maxCount == 0 { + maxCount = 10 + } + + if maxCount < 0 { + maxCount = 0 + ttl = -1 + } + + return nativeExemplars{ + ttl: ttl, + exemplars: make([]*dto.Exemplar, 0, maxCount), + } +} + +func (n *nativeExemplars) addExemplar(e *dto.Exemplar) { + if !n.isEnabled() { + return + } + + n.Lock() + defer n.Unlock() + + // When the number of exemplars has not yet exceeded or + // is equal to cap(n.exemplars), then + // insert the new exemplar directly. + if len(n.exemplars) < cap(n.exemplars) { + var nIdx int + for nIdx = 0; nIdx < len(n.exemplars); nIdx++ { + if *e.Value < *n.exemplars[nIdx].Value { + break + } + } + n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...) + return + } + + if len(n.exemplars) == 1 { + // When the number of exemplars is 1, then + // replace the existing exemplar with the new exemplar. + n.exemplars[0] = e + return + } + // From this point on, the number of exemplars is greater than 1. + + // When the number of exemplars exceeds the limit, remove one exemplar. + var ( + ot = time.Time{} // Oldest timestamp seen. Initial value doesn't matter as we replace it due to otIdx == -1 in the loop. + otIdx = -1 // Index of the exemplar with the oldest timestamp. + + md = -1.0 // Logarithm of the delta of the closest pair of exemplars. + + // The insertion point of the new exemplar in the exemplars slice after insertion. + // This is calculated purely based on the order of the exemplars by value. + // nIdx == len(n.exemplars) means the new exemplar is to be inserted after the end. + nIdx = -1 + + // rIdx is ultimately the index for the exemplar that we are replacing with the new exemplar. + // The aim is to keep a good spread of exemplars by value and not let them bunch up too much. + // It is calculated in 3 steps: + // 1. First we set rIdx to the index of the older exemplar within the closest pair by value. + // That is the following will be true (on log scale): + // either the exemplar pair on index (rIdx-1, rIdx) or (rIdx, rIdx+1) will have + // the closest values to each other from all pairs. + // For example, suppose the values are distributed like this: + // |-----------x-------------x----------------x----x-----| + // ^--rIdx as this is older. + // Or like this: + // |-----------x-------------x----------------x----x-----| + // ^--rIdx as this is older. + // 2. If there is an exemplar that expired, then we simple reset rIdx to that index. + // 3. We check if by inserting the new exemplar we would create a closer pair at + // (nIdx-1, nIdx) or (nIdx, nIdx+1) and set rIdx to nIdx-1 or nIdx accordingly to + // keep the spread of exemplars by value; otherwise we keep rIdx as it is. + rIdx = -1 + cLog float64 // Logarithm of the current exemplar. + pLog float64 // Logarithm of the previous exemplar. + ) + + for i, exemplar := range n.exemplars { + // Find the exemplar with the oldest timestamp. + if otIdx == -1 || exemplar.Timestamp.AsTime().Before(ot) { + ot = exemplar.Timestamp.AsTime() + otIdx = i + } + + // Find the index at which to insert new the exemplar. + if nIdx == -1 && *e.Value <= *exemplar.Value { + nIdx = i + } + + // Find the two closest exemplars and pick the one the with older timestamp. + pLog = cLog + cLog = math.Log(exemplar.GetValue()) + if i == 0 { + continue + } + diff := math.Abs(cLog - pLog) + if md == -1 || diff < md { + // The closest exemplar pair is at index: i-1, i. + // Choose the exemplar with the older timestamp for replacement. + md = diff + if n.exemplars[i].Timestamp.AsTime().Before(n.exemplars[i-1].Timestamp.AsTime()) { + rIdx = i + } else { + rIdx = i - 1 + } + } + + } + + // If all existing exemplar are smaller than new exemplar, + // then the exemplar should be inserted at the end. + if nIdx == -1 { + nIdx = len(n.exemplars) + } + // Here, we have the following relationships: + // n.exemplars[nIdx-1].Value < e.Value (if nIdx > 0) + // e.Value <= n.exemplars[nIdx].Value (if nIdx < len(n.exemplars)) + + if otIdx != -1 && e.Timestamp.AsTime().Sub(ot) > n.ttl { + // If the oldest exemplar has expired, then replace it with the new exemplar. + rIdx = otIdx + } else { + // In the previous for loop, when calculating the closest pair of exemplars, + // we did not take into account the newly inserted exemplar. + // So we need to calculate with the newly inserted exemplar again. + elog := math.Log(e.GetValue()) + if nIdx > 0 { + diff := math.Abs(elog - math.Log(n.exemplars[nIdx-1].GetValue())) + if diff < md { + // The value we are about to insert is closer to the previous exemplar at the insertion point than what we calculated before in rIdx. + // v--rIdx + // |-----------x-n-----------x----------------x----x-----| + // nIdx-1--^ ^--new exemplar value + // Do not make the spread worse, replace nIdx-1 and not rIdx. + md = diff + rIdx = nIdx - 1 + } + } + if nIdx < len(n.exemplars) { + diff := math.Abs(math.Log(n.exemplars[nIdx].GetValue()) - elog) + if diff < md { + // The value we are about to insert is closer to the next exemplar at the insertion point than what we calculated before in rIdx. + // v--rIdx + // |-----------x-----------n-x----------------x----x-----| + // new exemplar value--^ ^--nIdx + // Do not make the spread worse, replace nIdx-1 and not rIdx. + rIdx = nIdx + } + } + } + + // Adjust the slice according to rIdx and nIdx. + switch { + case rIdx == nIdx: + n.exemplars[nIdx] = e + case rIdx < nIdx: + n.exemplars = append(n.exemplars[:rIdx], append(n.exemplars[rIdx+1:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...)...) + case rIdx > nIdx: + n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, append(n.exemplars[nIdx:rIdx], n.exemplars[rIdx+1:]...)...)...) + } +} diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go index 723b45d64..a4fa6eabd 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/internal/go_collector_options.go @@ -30,3 +30,5 @@ type GoCollectorOptions struct { RuntimeMetricSumForHist map[string]string RuntimeMetricRules []GoCollectorRule } + +var GoCollectorDefaultRuntimeMetrics = regexp.MustCompile(`/gc/gogc:percent|/gc/gomemlimit:bytes|/sched/gomaxprocs:threads`) diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/metric.go index f018e5723..9d9b81ab4 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -234,7 +234,7 @@ func NewMetricWithExemplars(m Metric, exemplars ...Exemplar) (Metric, error) { ) for i, e := range exemplars { ts := e.Timestamp - if ts == (time.Time{}) { + if ts.IsZero() { ts = now } exs[i], err = newExemplar(e.Value, ts, e.Labels) diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go index 8548dd18e..62a4e7ad9 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go @@ -22,14 +22,15 @@ import ( ) type processCollector struct { - collectFn func(chan<- Metric) - pidFn func() (int, error) - reportErrors bool - cpuTotal *Desc - openFDs, maxFDs *Desc - vsize, maxVsize *Desc - rss *Desc - startTime *Desc + collectFn func(chan<- Metric) + pidFn func() (int, error) + reportErrors bool + cpuTotal *Desc + openFDs, maxFDs *Desc + vsize, maxVsize *Desc + rss *Desc + startTime *Desc + inBytes, outBytes *Desc } // ProcessCollectorOpts defines the behavior of a process metrics collector @@ -100,6 +101,16 @@ func NewProcessCollector(opts ProcessCollectorOpts) Collector { "Start time of the process since unix epoch in seconds.", nil, nil, ), + inBytes: NewDesc( + ns+"process_network_receive_bytes_total", + "Number of bytes received by the process over the network.", + nil, nil, + ), + outBytes: NewDesc( + ns+"process_network_transmit_bytes_total", + "Number of bytes sent by the process over the network.", + nil, nil, + ), } if opts.PidFn == nil { @@ -129,6 +140,8 @@ func (c *processCollector) Describe(ch chan<- *Desc) { ch <- c.maxVsize ch <- c.rss ch <- c.startTime + ch <- c.inBytes + ch <- c.outBytes } // Collect returns the current state of all metrics of the collector. diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go index 8c1136cee..14d56d2d0 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go @@ -63,4 +63,18 @@ func (c *processCollector) processCollect(ch chan<- Metric) { } else { c.reportError(ch, nil, err) } + + if netstat, err := p.Netstat(); err == nil { + var inOctets, outOctets float64 + if netstat.IpExt.InOctets != nil { + inOctets = *netstat.IpExt.InOctets + } + if netstat.IpExt.OutOctets != nil { + outOctets = *netstat.IpExt.OutOctets + } + ch <- MustNewConstMetric(c.inBytes, CounterValue, inOctets) + ch <- MustNewConstMetric(c.outBytes, CounterValue, outOctets) + } else { + c.reportError(ch, nil, err) + } } diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go index 9819917b8..315eab5f1 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go @@ -76,6 +76,12 @@ func (r *responseWriterDelegator) Write(b []byte) (int, error) { return n, err } +// Unwrap lets http.ResponseController get the underlying http.ResponseWriter, +// by implementing the [rwUnwrapper](https://cs.opensource.google/go/go/+/refs/tags/go1.21.4:src/net/http/responsecontroller.go;l=42-44) interface. +func (r *responseWriterDelegator) Unwrap() http.ResponseWriter { + return r.ResponseWriter +} + type ( closeNotifierDelegator struct{ *responseWriterDelegator } flusherDelegator struct{ *responseWriterDelegator } diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go index 09b8d2fbe..e598e66e6 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -38,12 +38,13 @@ import ( "io" "net/http" "strconv" - "strings" "sync" "time" + "github.com/klauspost/compress/zstd" "github.com/prometheus/common/expfmt" + "github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil" "github.com/prometheus/client_golang/prometheus" ) @@ -54,6 +55,18 @@ const ( processStartTimeHeader = "Process-Start-Time-Unix" ) +// Compression represents the content encodings handlers support for the HTTP +// responses. +type Compression string + +const ( + Identity Compression = "identity" + Gzip Compression = "gzip" + Zstd Compression = "zstd" +) + +var defaultCompressionFormats = []Compression{Identity, Gzip, Zstd} + var gzipPool = sync.Pool{ New: func() interface{} { return gzip.NewWriter(nil) @@ -122,6 +135,18 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO } } + // Select compression formats to offer based on default or user choice. + var compressions []string + if !opts.DisableCompression { + offers := defaultCompressionFormats + if len(opts.OfferedCompressions) > 0 { + offers = opts.OfferedCompressions + } + for _, comp := range offers { + compressions = append(compressions, string(comp)) + } + } + h := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { if !opts.ProcessStartTime.IsZero() { rsp.Header().Set(processStartTimeHeader, strconv.FormatInt(opts.ProcessStartTime.Unix(), 10)) @@ -165,21 +190,23 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO } else { contentType = expfmt.Negotiate(req.Header) } - header := rsp.Header() - header.Set(contentTypeHeader, string(contentType)) + rsp.Header().Set(contentTypeHeader, string(contentType)) - w := io.Writer(rsp) - if !opts.DisableCompression && gzipAccepted(req.Header) { - header.Set(contentEncodingHeader, "gzip") - gz := gzipPool.Get().(*gzip.Writer) - defer gzipPool.Put(gz) + w, encodingHeader, closeWriter, err := negotiateEncodingWriter(req, rsp, compressions) + if err != nil { + if opts.ErrorLog != nil { + opts.ErrorLog.Println("error getting writer", err) + } + w = io.Writer(rsp) + encodingHeader = string(Identity) + } - gz.Reset(w) - defer gz.Close() + defer closeWriter() - w = gz + // Set Content-Encoding only when data is compressed + if encodingHeader != string(Identity) { + rsp.Header().Set(contentEncodingHeader, encodingHeader) } - enc := expfmt.NewEncoder(w, contentType) // handleError handles the error according to opts.ErrorHandling @@ -343,9 +370,19 @@ type HandlerOpts struct { // no effect on the HTTP status code because ErrorHandling is set to // ContinueOnError. Registry prometheus.Registerer - // If DisableCompression is true, the handler will never compress the - // response, even if requested by the client. + // DisableCompression disables the response encoding (compression) and + // encoding negotiation. If true, the handler will + // never compress the response, even if requested + // by the client and the OfferedCompressions field is set. DisableCompression bool + // OfferedCompressions is a set of encodings (compressions) handler will + // try to offer when negotiating with the client. This defaults to identity, gzip + // and zstd. + // NOTE: If handler can't agree with the client on the encodings or + // unsupported or empty encodings are set in OfferedCompressions, + // handler always fallbacks to no compression (identity), for + // compatibility reasons. In such cases ErrorLog will be used if set. + OfferedCompressions []Compression // The number of concurrent HTTP requests is limited to // MaxRequestsInFlight. Additional requests are responded to with 503 // Service Unavailable and a suitable message in the body. If @@ -381,19 +418,6 @@ type HandlerOpts struct { ProcessStartTime time.Time } -// gzipAccepted returns whether the client will accept gzip-encoded content. -func gzipAccepted(header http.Header) bool { - a := header.Get(acceptEncodingHeader) - parts := strings.Split(a, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return true - } - } - return false -} - // httpError removes any content-encoding header and then calls http.Error with // the provided error and http.StatusInternalServerError. Error contents is // supposed to be uncompressed plain text. Same as with a plain http.Error, this @@ -406,3 +430,38 @@ func httpError(rsp http.ResponseWriter, err error) { http.StatusInternalServerError, ) } + +// negotiateEncodingWriter reads the Accept-Encoding header from a request and +// selects the right compression based on an allow-list of supported +// compressions. It returns a writer implementing the compression and an the +// correct value that the caller can set in the response header. +func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []string) (_ io.Writer, encodingHeaderValue string, closeWriter func(), _ error) { + if len(compressions) == 0 { + return rw, string(Identity), func() {}, nil + } + + // TODO(mrueg): Replace internal/github.com/gddo once https://github.com/golang/go/issues/19307 is implemented. + selected := httputil.NegotiateContentEncoding(r, compressions) + + switch selected { + case "zstd": + // TODO(mrueg): Replace klauspost/compress with stdlib implementation once https://github.com/golang/go/issues/62513 is implemented. + z, err := zstd.NewWriter(rw, zstd.WithEncoderLevel(zstd.SpeedFastest)) + if err != nil { + return nil, "", func() {}, err + } + + z.Reset(rw) + return z, selected, func() { _ = z.Close() }, nil + case "gzip": + gz := gzipPool.Get().(*gzip.Writer) + gz.Reset(rw) + return gz, selected, func() { _ = gz.Close(); gzipPool.Put(gz) }, nil + case "identity": + // This means the content is not compressed. + return rw, selected, func() {}, nil + default: + // The content encoding was not implemented yet. + return nil, "", func() {}, fmt.Errorf("content compression format not recognized: %s. Valid formats are: %s", selected, defaultCompressionFormats) + } +} diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/registry.go index 5e2ced25a..c6fd2f58b 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -314,16 +314,17 @@ func (r *Registry) Register(c Collector) error { if dimHash != desc.dimHash { return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) } - } else { - // ...then check the new descriptors already seen. - if dimHash, exists := newDimHashesByName[desc.fqName]; exists { - if dimHash != desc.dimHash { - return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) - } - } else { - newDimHashesByName[desc.fqName] = desc.dimHash + continue + } + + // ...then check the new descriptors already seen. + if dimHash, exists := newDimHashesByName[desc.fqName]; exists { + if dimHash != desc.dimHash { + return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) } + continue } + newDimHashesByName[desc.fqName] = desc.dimHash } // A Collector yielding no Desc at all is considered unchecked. if len(newDescIDs) == 0 { diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/summary.go index 146270444..1ab0e4796 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -783,3 +783,45 @@ func MustNewConstSummary( } return m } + +// NewConstSummaryWithCreatedTimestamp does the same thing as NewConstSummary but sets the created timestamp. +func NewConstSummaryWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + quantiles map[float64]float64, + ct time.Time, + labelValues ...string, +) (Metric, error) { + if desc.err != nil { + return nil, desc.err + } + if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil { + return nil, err + } + return &constSummary{ + desc: desc, + count: count, + sum: sum, + quantiles: quantiles, + labelPairs: MakeLabelPairs(desc, labelValues), + createdTs: timestamppb.New(ct), + }, nil +} + +// MustNewConstSummaryWithCreatedTimestamp is a version of NewConstSummaryWithCreatedTimestamp that panics where +// NewConstSummaryWithCreatedTimestamp would have returned an error. +func MustNewConstSummaryWithCreatedTimestamp( + desc *Desc, + count uint64, + sum float64, + quantiles map[float64]float64, + ct time.Time, + labelValues ...string, +) Metric { + m, err := NewConstSummaryWithCreatedTimestamp(desc, count, sum, quantiles, ct, labelValues...) + if err != nil { + panic(err) + } + return m +} diff --git a/tools/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/tools/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 955cfd59f..2c808eece 100644 --- a/tools/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/tools/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -507,7 +507,7 @@ func (m *metricMap) getOrCreateMetricWithLabelValues( return metric } -// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value +// getOrCreateMetricWithLabels retrieves the metric by hash and label value // or creates it and returns the new one. // // This function holds the mutex. diff --git a/tools/vendor/github.com/rivo/uniseg/README.md b/tools/vendor/github.com/rivo/uniseg/README.md index 25e934687..a8191b815 100644 --- a/tools/vendor/github.com/rivo/uniseg/README.md +++ b/tools/vendor/github.com/rivo/uniseg/README.md @@ -3,7 +3,7 @@ [![Go Reference](https://pkg.go.dev/badge/github.com/rivo/uniseg.svg)](https://pkg.go.dev/github.com/rivo/uniseg) [![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg) -This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 14.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html). +This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 15.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html). ## Background @@ -73,7 +73,7 @@ for gr.Next() { ### Using the [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) Function -This is orders of magnitude faster than the `Graphemes` class, but it requires the handling of states and boundaries: +This avoids allocating a new `Graphemes` object but it requires the handling of states and boundaries: ```go str := "🇩🇪🏳️‍🌈" @@ -88,29 +88,7 @@ for len(str) > 0 { ### Advanced Examples -Breaking into grapheme clusters and evaluating line breaks: - -```go -str := "First line.\nSecond line." -state := -1 -var ( - c string - boundaries int -) -for len(str) > 0 { - c, str, boundaries, state = uniseg.StepString(str, state) - fmt.Print(c) - if boundaries&uniseg.MaskLine == uniseg.LineCanBreak { - fmt.Print("|") - } else if boundaries&uniseg.MaskLine == uniseg.LineMustBreak { - fmt.Print("‖") - } -} -// First |line. -// ‖Second |line.‖ -``` - -If you're only interested in word segmentation, use [`FirstWord`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWord) or [`FirstWordInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWordInString): +The [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class offers the most convenient way to access all functionality of this package. But in some cases, it may be better to use the specialized functions directly. For example, if you're only interested in word segmentation, use [`FirstWord`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWord) or [`FirstWordInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWordInString): ```go str := "Hello, world!" @@ -133,6 +111,8 @@ Similarly, use - [`FirstSentence`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentence) or [`FirstSentenceInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentenceInString) for sentence segmentation only, and - [`FirstLineSegment`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegment) or [`FirstLineSegmentInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegmentInString) for line breaking / word wrapping (although using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) is preferred as it will observe grapheme cluster boundaries). +If you're only interested in the width of characters, use [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString). It is much faster than using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step), [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString), or the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class because it does not include the logic for word / sentence / line boundaries. + Finally, if you need to reverse a string while preserving grapheme clusters, use [`ReverseString`](https://pkg.go.dev/github.com/rivo/uniseg#ReverseString): ```go diff --git a/tools/vendor/github.com/rivo/uniseg/eastasianwidth.go b/tools/vendor/github.com/rivo/uniseg/eastasianwidth.go index 661934ac2..5fc54d991 100644 --- a/tools/vendor/github.com/rivo/uniseg/eastasianwidth.go +++ b/tools/vendor/github.com/rivo/uniseg/eastasianwidth.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // eastAsianWidth are taken from -// https://www.unicode.org/Public/14.0.0/ucd/EastAsianWidth.txt +// https://www.unicode.org/Public/15.0.0/ucd/EastAsianWidth.txt // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var eastAsianWidth = [][3]int{ {0x0000, 0x001F, prN}, // Cc [32] .. @@ -504,6 +504,7 @@ var eastAsianWidth = [][3]int{ {0x0CE2, 0x0CE3, prN}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL {0x0CE6, 0x0CEF, prN}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE {0x0CF1, 0x0CF2, prN}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA + {0x0CF3, 0x0CF3, prN}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT {0x0D00, 0x0D01, prN}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU {0x0D02, 0x0D03, prN}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA {0x0D04, 0x0D0C, prN}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -565,7 +566,7 @@ var eastAsianWidth = [][3]int{ {0x0EBD, 0x0EBD, prN}, // Lo LAO SEMIVOWEL SIGN NYO {0x0EC0, 0x0EC4, prN}, // Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI {0x0EC6, 0x0EC6, prN}, // Lm LAO KO LA - {0x0EC8, 0x0ECD, prN}, // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + {0x0EC8, 0x0ECE, prN}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN {0x0ED0, 0x0ED9, prN}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE {0x0EDC, 0x0EDF, prN}, // Lo [4] LAO HO NO..LAO LETTER KHMU NYO {0x0F00, 0x0F00, prN}, // Lo TIBETAN SYLLABLE OM @@ -1916,6 +1917,7 @@ var eastAsianWidth = [][3]int{ {0x10EAB, 0x10EAC, prN}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK {0x10EAD, 0x10EAD, prN}, // Pd YEZIDI HYPHENATION MARK {0x10EB0, 0x10EB1, prN}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE + {0x10EFD, 0x10EFF, prN}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA {0x10F00, 0x10F1C, prN}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL {0x10F1D, 0x10F26, prN}, // No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF {0x10F27, 0x10F27, prN}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH @@ -1998,6 +2000,8 @@ var eastAsianWidth = [][3]int{ {0x11236, 0x11237, prN}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA {0x11238, 0x1123D, prN}, // Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN {0x1123E, 0x1123E, prN}, // Mn KHOJKI SIGN SUKUN + {0x1123F, 0x11240, prN}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I + {0x11241, 0x11241, prN}, // Mn KHOJKI VOWEL SIGN VOCALIC R {0x11280, 0x11286, prN}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA {0x11288, 0x11288, prN}, // Lo MULTANI LETTER GHA {0x1128A, 0x1128D, prN}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA @@ -2160,6 +2164,7 @@ var eastAsianWidth = [][3]int{ {0x11A9E, 0x11AA2, prN}, // Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 {0x11AB0, 0x11ABF, prN}, // Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA {0x11AC0, 0x11AF8, prN}, // Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL + {0x11B00, 0x11B09, prN}, // Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU {0x11C00, 0x11C08, prN}, // Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L {0x11C0A, 0x11C2E, prN}, // Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA {0x11C2F, 0x11C2F, prN}, // Mc BHAIKSUKI VOWEL SIGN AA @@ -2205,6 +2210,19 @@ var eastAsianWidth = [][3]int{ {0x11EF3, 0x11EF4, prN}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U {0x11EF5, 0x11EF6, prN}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O {0x11EF7, 0x11EF8, prN}, // Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION + {0x11F00, 0x11F01, prN}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA + {0x11F02, 0x11F02, prN}, // Lo KAWI SIGN REPHA + {0x11F03, 0x11F03, prN}, // Mc KAWI SIGN VISARGA + {0x11F04, 0x11F10, prN}, // Lo [13] KAWI LETTER A..KAWI LETTER O + {0x11F12, 0x11F33, prN}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA + {0x11F34, 0x11F35, prN}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA + {0x11F36, 0x11F3A, prN}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R + {0x11F3E, 0x11F3F, prN}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI + {0x11F40, 0x11F40, prN}, // Mn KAWI VOWEL SIGN EU + {0x11F41, 0x11F41, prN}, // Mc KAWI SIGN KILLER + {0x11F42, 0x11F42, prN}, // Mn KAWI CONJOINER + {0x11F43, 0x11F4F, prN}, // Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL + {0x11F50, 0x11F59, prN}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE {0x11FB0, 0x11FB0, prN}, // Lo LISU LETTER YHA {0x11FC0, 0x11FD4, prN}, // No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH {0x11FD5, 0x11FDC, prN}, // So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI @@ -2217,8 +2235,11 @@ var eastAsianWidth = [][3]int{ {0x12480, 0x12543, prN}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU {0x12F90, 0x12FF0, prN}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 {0x12FF1, 0x12FF2, prN}, // Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 - {0x13000, 0x1342E, prN}, // Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 - {0x13430, 0x13438, prN}, // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT + {0x13000, 0x1342F, prN}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D + {0x13430, 0x1343F, prN}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE + {0x13440, 0x13440, prN}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY + {0x13441, 0x13446, prN}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN + {0x13447, 0x13455, prN}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED {0x14400, 0x14646, prN}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 {0x16800, 0x16A38, prN}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ {0x16A40, 0x16A5E, prN}, // Lo [31] MRO LETTER TA..MRO LETTER TEK @@ -2263,7 +2284,9 @@ var eastAsianWidth = [][3]int{ {0x1AFFD, 0x1AFFE, prW}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 {0x1B000, 0x1B0FF, prW}, // Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 {0x1B100, 0x1B122, prW}, // Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU + {0x1B132, 0x1B132, prW}, // Lo HIRAGANA LETTER SMALL KO {0x1B150, 0x1B152, prW}, // Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO + {0x1B155, 0x1B155, prW}, // Lo KATAKANA LETTER SMALL KO {0x1B164, 0x1B167, prW}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N {0x1B170, 0x1B2FB, prW}, // Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB {0x1BC00, 0x1BC6A, prN}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M @@ -2294,6 +2317,7 @@ var eastAsianWidth = [][3]int{ {0x1D200, 0x1D241, prN}, // So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 {0x1D242, 0x1D244, prN}, // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME {0x1D245, 0x1D245, prN}, // So GREEK MUSICAL LEIMMA + {0x1D2C0, 0x1D2D3, prN}, // No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN {0x1D2E0, 0x1D2F3, prN}, // No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN {0x1D300, 0x1D356, prN}, // So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING {0x1D360, 0x1D378, prN}, // No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE @@ -2353,11 +2377,14 @@ var eastAsianWidth = [][3]int{ {0x1DF00, 0x1DF09, prN}, // Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK {0x1DF0A, 0x1DF0A, prN}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK {0x1DF0B, 0x1DF1E, prN}, // Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL + {0x1DF25, 0x1DF2A, prN}, // Ll [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK {0x1E000, 0x1E006, prN}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE {0x1E008, 0x1E018, prN}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU {0x1E01B, 0x1E021, prN}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI {0x1E023, 0x1E024, prN}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS {0x1E026, 0x1E02A, prN}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + {0x1E030, 0x1E06D, prN}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE + {0x1E08F, 0x1E08F, prN}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I {0x1E100, 0x1E12C, prN}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W {0x1E130, 0x1E136, prN}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D {0x1E137, 0x1E13D, prN}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER @@ -2370,6 +2397,10 @@ var eastAsianWidth = [][3]int{ {0x1E2EC, 0x1E2EF, prN}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI {0x1E2F0, 0x1E2F9, prN}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE {0x1E2FF, 0x1E2FF, prN}, // Sc WANCHO NGUN SIGN + {0x1E4D0, 0x1E4EA, prN}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL + {0x1E4EB, 0x1E4EB, prN}, // Lm NAG MUNDARI SIGN OJOD + {0x1E4EC, 0x1E4EF, prN}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH + {0x1E4F0, 0x1E4F9, prN}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE {0x1E7E0, 0x1E7E6, prN}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO {0x1E7E8, 0x1E7EB, prN}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE {0x1E7ED, 0x1E7EE, prN}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2498,13 +2529,14 @@ var eastAsianWidth = [][3]int{ {0x1F6D0, 0x1F6D2, prW}, // So [3] PLACE OF WORSHIP..SHOPPING TROLLEY {0x1F6D3, 0x1F6D4, prN}, // So [2] STUPA..PAGODA {0x1F6D5, 0x1F6D7, prW}, // So [3] HINDU TEMPLE..ELEVATOR - {0x1F6DD, 0x1F6DF, prW}, // So [3] PLAYGROUND SLIDE..RING BUOY + {0x1F6DC, 0x1F6DF, prW}, // So [4] WIRELESS..RING BUOY {0x1F6E0, 0x1F6EA, prN}, // So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE {0x1F6EB, 0x1F6EC, prW}, // So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING {0x1F6F0, 0x1F6F3, prN}, // So [4] SATELLITE..PASSENGER SHIP {0x1F6F4, 0x1F6FC, prW}, // So [9] SCOOTER..ROLLER SKATE - {0x1F700, 0x1F773, prN}, // So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE - {0x1F780, 0x1F7D8, prN}, // So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE + {0x1F700, 0x1F776, prN}, // So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE + {0x1F77B, 0x1F77F, prN}, // So [5] HAUMEA..ORCUS + {0x1F780, 0x1F7D9, prN}, // So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR {0x1F7E0, 0x1F7EB, prW}, // So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE {0x1F7F0, 0x1F7F0, prW}, // So HEAVY EQUALS SIGN {0x1F800, 0x1F80B, prN}, // So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD @@ -2521,22 +2553,20 @@ var eastAsianWidth = [][3]int{ {0x1F947, 0x1F9FF, prW}, // So [185] FIRST PLACE MEDAL..NAZAR AMULET {0x1FA00, 0x1FA53, prN}, // So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP {0x1FA60, 0x1FA6D, prN}, // So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER - {0x1FA70, 0x1FA74, prW}, // So [5] BALLET SHOES..THONG SANDAL - {0x1FA78, 0x1FA7C, prW}, // So [5] DROP OF BLOOD..CRUTCH - {0x1FA80, 0x1FA86, prW}, // So [7] YO-YO..NESTING DOLLS - {0x1FA90, 0x1FAAC, prW}, // So [29] RINGED PLANET..HAMSA - {0x1FAB0, 0x1FABA, prW}, // So [11] FLY..NEST WITH EGGS - {0x1FAC0, 0x1FAC5, prW}, // So [6] ANATOMICAL HEART..PERSON WITH CROWN - {0x1FAD0, 0x1FAD9, prW}, // So [10] BLUEBERRIES..JAR - {0x1FAE0, 0x1FAE7, prW}, // So [8] MELTING FACE..BUBBLES - {0x1FAF0, 0x1FAF6, prW}, // So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS + {0x1FA70, 0x1FA7C, prW}, // So [13] BALLET SHOES..CRUTCH + {0x1FA80, 0x1FA88, prW}, // So [9] YO-YO..FLUTE + {0x1FA90, 0x1FABD, prW}, // So [46] RINGED PLANET..WING + {0x1FABF, 0x1FAC5, prW}, // So [7] GOOSE..PERSON WITH CROWN + {0x1FACE, 0x1FADB, prW}, // So [14] MOOSE..PEA POD + {0x1FAE0, 0x1FAE8, prW}, // So [9] MELTING FACE..SHAKING FACE + {0x1FAF0, 0x1FAF8, prW}, // So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND {0x1FB00, 0x1FB92, prN}, // So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK {0x1FB94, 0x1FBCA, prN}, // So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON {0x1FBF0, 0x1FBF9, prN}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE {0x20000, 0x2A6DF, prW}, // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF {0x2A6E0, 0x2A6FF, prW}, // Cn [32] .. - {0x2A700, 0x2B738, prW}, // Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 - {0x2B739, 0x2B73F, prW}, // Cn [7] .. + {0x2A700, 0x2B739, prW}, // Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 + {0x2B73A, 0x2B73F, prW}, // Cn [6] .. {0x2B740, 0x2B81D, prW}, // Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D {0x2B81E, 0x2B81F, prW}, // Cn [2] .. {0x2B820, 0x2CEA1, prW}, // Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 @@ -2547,7 +2577,9 @@ var eastAsianWidth = [][3]int{ {0x2FA1E, 0x2FA1F, prW}, // Cn [2] .. {0x2FA20, 0x2FFFD, prW}, // Cn [1502] .. {0x30000, 0x3134A, prW}, // Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A - {0x3134B, 0x3FFFD, prW}, // Cn [60595] .. + {0x3134B, 0x3134F, prW}, // Cn [5] .. + {0x31350, 0x323AF, prW}, // Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF + {0x323B0, 0x3FFFD, prW}, // Cn [56398] .. {0xE0001, 0xE0001, prN}, // Cf LANGUAGE TAG {0xE0020, 0xE007F, prN}, // Cf [96] TAG SPACE..CANCEL TAG {0xE0100, 0xE01EF, prA}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 diff --git a/tools/vendor/github.com/rivo/uniseg/emojipresentation.go b/tools/vendor/github.com/rivo/uniseg/emojipresentation.go index fd0f7451a..9b5f499c4 100644 --- a/tools/vendor/github.com/rivo/uniseg/emojipresentation.go +++ b/tools/vendor/github.com/rivo/uniseg/emojipresentation.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // emojiPresentation are taken from // // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var emojiPresentation = [][3]int{ {0x231A, 0x231B, prEmojiPresentation}, // E0.6 [2] (⌚..⌛) watch..hourglass done @@ -211,6 +211,7 @@ var emojiPresentation = [][3]int{ {0x1F6D1, 0x1F6D2, prEmojiPresentation}, // E3.0 [2] (🛑..🛒) stop sign..shopping cart {0x1F6D5, 0x1F6D5, prEmojiPresentation}, // E12.0 [1] (🛕) hindu temple {0x1F6D6, 0x1F6D7, prEmojiPresentation}, // E13.0 [2] (🛖..🛗) hut..elevator + {0x1F6DC, 0x1F6DC, prEmojiPresentation}, // E15.0 [1] (🛜) wireless {0x1F6DD, 0x1F6DF, prEmojiPresentation}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy {0x1F6EB, 0x1F6EC, prEmojiPresentation}, // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival {0x1F6F4, 0x1F6F6, prEmojiPresentation}, // E3.0 [3] (🛴..🛶) kick scooter..canoe @@ -267,19 +268,28 @@ var emojiPresentation = [][3]int{ {0x1F9E7, 0x1F9FF, prEmojiPresentation}, // E11.0 [25] (🧧..🧿) red envelope..nazar amulet {0x1FA70, 0x1FA73, prEmojiPresentation}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts {0x1FA74, 0x1FA74, prEmojiPresentation}, // E13.0 [1] (🩴) thong sandal + {0x1FA75, 0x1FA77, prEmojiPresentation}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart {0x1FA78, 0x1FA7A, prEmojiPresentation}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope {0x1FA7B, 0x1FA7C, prEmojiPresentation}, // E14.0 [2] (🩻..🩼) x-ray..crutch {0x1FA80, 0x1FA82, prEmojiPresentation}, // E12.0 [3] (🪀..🪂) yo-yo..parachute {0x1FA83, 0x1FA86, prEmojiPresentation}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls + {0x1FA87, 0x1FA88, prEmojiPresentation}, // E15.0 [2] (🪇..🪈) maracas..flute {0x1FA90, 0x1FA95, prEmojiPresentation}, // E12.0 [6] (🪐..🪕) ringed planet..banjo {0x1FA96, 0x1FAA8, prEmojiPresentation}, // E13.0 [19] (🪖..🪨) military helmet..rock {0x1FAA9, 0x1FAAC, prEmojiPresentation}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa + {0x1FAAD, 0x1FAAF, prEmojiPresentation}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda {0x1FAB0, 0x1FAB6, prEmojiPresentation}, // E13.0 [7] (🪰..🪶) fly..feather {0x1FAB7, 0x1FABA, prEmojiPresentation}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs + {0x1FABB, 0x1FABD, prEmojiPresentation}, // E15.0 [3] (🪻..🪽) hyacinth..wing + {0x1FABF, 0x1FABF, prEmojiPresentation}, // E15.0 [1] (🪿) goose {0x1FAC0, 0x1FAC2, prEmojiPresentation}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging {0x1FAC3, 0x1FAC5, prEmojiPresentation}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown + {0x1FACE, 0x1FACF, prEmojiPresentation}, // E15.0 [2] (🫎..🫏) moose..donkey {0x1FAD0, 0x1FAD6, prEmojiPresentation}, // E13.0 [7] (🫐..🫖) blueberries..teapot {0x1FAD7, 0x1FAD9, prEmojiPresentation}, // E14.0 [3] (🫗..🫙) pouring liquid..jar + {0x1FADA, 0x1FADB, prEmojiPresentation}, // E15.0 [2] (🫚..🫛) ginger root..pea pod {0x1FAE0, 0x1FAE7, prEmojiPresentation}, // E14.0 [8] (🫠..🫧) melting face..bubbles + {0x1FAE8, 0x1FAE8, prEmojiPresentation}, // E15.0 [1] (🫨) shaking face {0x1FAF0, 0x1FAF6, prEmojiPresentation}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands + {0x1FAF7, 0x1FAF8, prEmojiPresentation}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand } diff --git a/tools/vendor/github.com/rivo/uniseg/gen_breaktest.go b/tools/vendor/github.com/rivo/uniseg/gen_breaktest.go index e613c4cd0..6bfbeb5e7 100644 --- a/tools/vendor/github.com/rivo/uniseg/gen_breaktest.go +++ b/tools/vendor/github.com/rivo/uniseg/gen_breaktest.go @@ -32,7 +32,7 @@ import ( // We want to test against a specific version rather than the latest. When the // package is upgraded to a new version, change these to generate new tests. const ( - testCaseURL = `https://www.unicode.org/Public/14.0.0/ucd/auxiliary/%s.txt` + testCaseURL = `https://www.unicode.org/Public/15.0.0/ucd/auxiliary/%s.txt` ) func main() { @@ -76,9 +76,9 @@ func parse(url string) ([]byte, error) { buf := new(bytes.Buffer) buf.Grow(120 << 10) - buf.WriteString(`package uniseg + buf.WriteString(`// Code generated via go generate from gen_breaktest.go. DO NOT EDIT. -// Code generated via go generate from gen_breaktest.go. DO NOT EDIT. +package uniseg // ` + os.Args[3] + ` are Grapheme testcases taken from // ` + url + ` @@ -136,7 +136,9 @@ var ( // // E.g. for the input b="÷ 0020 × 0308 ÷ 1F1E6 ÷" // it will append -// "\u0020\u0308\U0001F1E6" +// +// "\u0020\u0308\U0001F1E6" +// // and "[][]rune{{0x0020,0x0308},{0x1F1E6},}" // to orig and exp respectively. // diff --git a/tools/vendor/github.com/rivo/uniseg/gen_properties.go b/tools/vendor/github.com/rivo/uniseg/gen_properties.go index 999d5efdd..8992d2c5f 100644 --- a/tools/vendor/github.com/rivo/uniseg/gen_properties.go +++ b/tools/vendor/github.com/rivo/uniseg/gen_properties.go @@ -41,8 +41,8 @@ import ( // We want to test against a specific version rather than the latest. When the // package is upgraded to a new version, change these to generate new tests. const ( - propertyURL = `https://www.unicode.org/Public/14.0.0/ucd/%s.txt` - emojiURL = `https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt` + propertyURL = `https://www.unicode.org/Public/15.0.0/ucd/%s.txt` + emojiURL = `https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt` ) // The regular expression for a line containing a code point range property. @@ -178,6 +178,11 @@ func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (stri } } + // Avoid overflow during binary search. + if len(properties) >= 1<<31 { + return "", errors.New("too many properties") + } + // Sort properties. sort.Slice(properties, func(i, j int) bool { left, _ := strconv.ParseUint(properties[i][0], 16, 64) @@ -200,9 +205,9 @@ func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (stri // ` + emojiURL + ` // ("Extended_Pictographic" only)` } - buf.WriteString(`package uniseg + buf.WriteString(`// Code generated via go generate from gen_properties.go. DO NOT EDIT. -// Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg // ` + os.Args[3] + ` are taken from // ` + propertyURL + emojiComment + ` diff --git a/tools/vendor/github.com/rivo/uniseg/grapheme.go b/tools/vendor/github.com/rivo/uniseg/grapheme.go index 0086fc1b2..b12403d43 100644 --- a/tools/vendor/github.com/rivo/uniseg/grapheme.go +++ b/tools/vendor/github.com/rivo/uniseg/grapheme.go @@ -13,9 +13,10 @@ import "unicode/utf8" // well as boundary information and character width is available via the various // methods (see examples below). // -// Using this class to iterate over a string is convenient but it is much slower -// than using this package's [Step] or [StepString] functions or any of the -// other specialized functions starting with "First". +// This class basically wraps the [StepString] parser and provides a convenient +// interface to it. If you are only interested in some parts of this package's +// functionality, using the specialized functions starting with "First" is +// almost always faster. type Graphemes struct { // The original string. original string @@ -222,7 +223,7 @@ func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, width, new if len(b) <= length { // If we're already past the end, there is nothing else to parse. var prop int if state < 0 { - prop = property(graphemeCodePoints, r) + prop = propertyGraphemes(r) } else { prop = state >> shiftGraphemePropState } @@ -252,16 +253,14 @@ func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, width, new return b[:length], b[length:], width, state | (prop << shiftGraphemePropState) } - if r == vs16 { - width = 2 - } else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } else if firstProp == prExtendedPictographic { + if firstProp == prExtendedPictographic { if r == vs15 { width = 1 - } else { + } else if r == vs16 { width = 2 } + } else if firstProp != prRegionalIndicator && firstProp != prL { + width += runeWidth(r, prop) } length += l @@ -284,7 +283,7 @@ func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, if len(str) <= length { // If we're already past the end, there is nothing else to parse. var prop int if state < 0 { - prop = property(graphemeCodePoints, r) + prop = propertyGraphemes(r) } else { prop = state >> shiftGraphemePropState } @@ -314,16 +313,14 @@ func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, return str[:length], str[length:], width, state | (prop << shiftGraphemePropState) } - if r == vs16 { - width = 2 - } else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } else if firstProp == prExtendedPictographic { + if firstProp == prExtendedPictographic { if r == vs15 { width = 1 - } else { + } else if r == vs16 { width = 2 } + } else if firstProp != prRegionalIndicator && firstProp != prL { + width += runeWidth(r, prop) } length += l diff --git a/tools/vendor/github.com/rivo/uniseg/graphemeproperties.go b/tools/vendor/github.com/rivo/uniseg/graphemeproperties.go index a87d140bf..0aff4a619 100644 --- a/tools/vendor/github.com/rivo/uniseg/graphemeproperties.go +++ b/tools/vendor/github.com/rivo/uniseg/graphemeproperties.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // graphemeCodePoints are taken from -// https://www.unicode.org/Public/14.0.0/ucd/auxiliary/GraphemeBreakProperty.txt +// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var graphemeCodePoints = [][3]int{ {0x0000, 0x0009, prControl}, // Cc [10] .. @@ -143,6 +143,7 @@ var graphemeCodePoints = [][3]int{ {0x0CCC, 0x0CCD, prExtend}, // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA {0x0CD5, 0x0CD6, prExtend}, // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL + {0x0CF3, 0x0CF3, prSpacingMark}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU {0x0D02, 0x0D03, prSpacingMark}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA {0x0D3B, 0x0D3C, prExtend}, // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA @@ -172,7 +173,7 @@ var graphemeCodePoints = [][3]int{ {0x0EB1, 0x0EB1, prExtend}, // Mn LAO VOWEL SIGN MAI KAN {0x0EB3, 0x0EB3, prSpacingMark}, // Lo LAO VOWEL SIGN AM {0x0EB4, 0x0EBC, prExtend}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EC8, 0x0ECD, prExtend}, // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN {0x0F18, 0x0F19, prExtend}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS {0x0F35, 0x0F35, prExtend}, // Mn TIBETAN MARK NGAS BZUNG NYI ZLA {0x0F37, 0x0F37, prExtend}, // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS @@ -1336,6 +1337,7 @@ var graphemeCodePoints = [][3]int{ {0x10AE5, 0x10AE6, prExtend}, // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW {0x10D24, 0x10D27, prExtend}, // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK + {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA {0x10F46, 0x10F50, prExtend}, // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW {0x10F82, 0x10F85, prExtend}, // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW {0x11000, 0x11000, prSpacingMark}, // Mc BRAHMI SIGN CANDRABINDU @@ -1375,6 +1377,7 @@ var graphemeCodePoints = [][3]int{ {0x11235, 0x11235, prSpacingMark}, // Mc KHOJKI SIGN VIRAMA {0x11236, 0x11237, prExtend}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN + {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R {0x112DF, 0x112DF, prExtend}, // Mn KHUDAWADI SIGN ANUSVARA {0x112E0, 0x112E2, prSpacingMark}, // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II {0x112E3, 0x112EA, prExtend}, // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA @@ -1494,7 +1497,18 @@ var graphemeCodePoints = [][3]int{ {0x11D97, 0x11D97, prExtend}, // Mn GUNJALA GONDI VIRAMA {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U {0x11EF5, 0x11EF6, prSpacingMark}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x13430, 0x13438, prControl}, // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT + {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA + {0x11F02, 0x11F02, prPrepend}, // Lo KAWI SIGN REPHA + {0x11F03, 0x11F03, prSpacingMark}, // Mc KAWI SIGN VISARGA + {0x11F34, 0x11F35, prSpacingMark}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA + {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R + {0x11F3E, 0x11F3F, prSpacingMark}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI + {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU + {0x11F41, 0x11F41, prSpacingMark}, // Mc KAWI SIGN KILLER + {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER + {0x13430, 0x1343F, prControl}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE + {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY + {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED {0x16AF0, 0x16AF4, prExtend}, // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE {0x16B30, 0x16B36, prExtend}, // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM {0x16F4F, 0x16F4F, prExtend}, // Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -1527,9 +1541,11 @@ var graphemeCodePoints = [][3]int{ {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D {0x1E2AE, 0x1E2AE, prExtend}, // Mn TOTO SIGN RISING TONE {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI + {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH {0x1E8D0, 0x1E8D6, prExtend}, // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS {0x1E944, 0x1E94A, prExtend}, // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA {0x1F000, 0x1F003, prExtendedPictographic}, // E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND @@ -1780,7 +1796,8 @@ var graphemeCodePoints = [][3]int{ {0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0 [2] (🛓..🛔) STUPA..PAGODA {0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0 [1] (🛕) hindu temple {0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0 [2] (🛖..🛗) hut..elevator - {0x1F6D8, 0x1F6DC, prExtendedPictographic}, // E0.0 [5] (🛘..🛜) .. + {0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0 [4] (🛘..🛛) .. + {0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0 [1] (🛜) wireless {0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy {0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat {0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE @@ -1797,7 +1814,7 @@ var graphemeCodePoints = [][3]int{ {0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0 [1] (🛺) auto rickshaw {0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0 [2] (🛻..🛼) pickup truck..roller skate {0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0 [3] (🛽..🛿) .. - {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) .. + {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS {0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. {0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫) orange circle..brown square {0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0 [4] (🟬..🟯) .. @@ -1856,30 +1873,37 @@ var graphemeCodePoints = [][3]int{ {0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. {0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts {0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0 [1] (🩴) thong sandal - {0x1FA75, 0x1FA77, prExtendedPictographic}, // E0.0 [3] (🩵..🩷) .. + {0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart {0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope {0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0 [2] (🩻..🩼) x-ray..crutch {0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0 [3] (🩽..🩿) .. {0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0 [3] (🪀..🪂) yo-yo..parachute {0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - {0x1FA87, 0x1FA8F, prExtendedPictographic}, // E0.0 [9] (🪇..🪏) .. + {0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0 [2] (🪇..🪈) maracas..flute + {0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0 [7] (🪉..🪏) .. {0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0 [6] (🪐..🪕) ringed planet..banjo {0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨) military helmet..rock {0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa - {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E0.0 [3] (🪭..🪯) .. + {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda {0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0 [7] (🪰..🪶) fly..feather {0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs - {0x1FABB, 0x1FABF, prExtendedPictographic}, // E0.0 [5] (🪻..🪿) .. + {0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0 [3] (🪻..🪽) hyacinth..wing + {0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0 [1] (🪾) + {0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0 [1] (🪿) goose {0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging {0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown - {0x1FAC6, 0x1FACF, prExtendedPictographic}, // E0.0 [10] (🫆..🫏) .. + {0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0 [8] (🫆..🫍) .. + {0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0 [2] (🫎..🫏) moose..donkey {0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0 [7] (🫐..🫖) blueberries..teapot {0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0 [3] (🫗..🫙) pouring liquid..jar - {0x1FADA, 0x1FADF, prExtendedPictographic}, // E0.0 [6] (🫚..🫟) .. + {0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0 [2] (🫚..🫛) ginger root..pea pod + {0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0 [4] (🫜..🫟) .. {0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0 [8] (🫠..🫧) melting face..bubbles - {0x1FAE8, 0x1FAEF, prExtendedPictographic}, // E0.0 [8] (🫨..🫯) .. + {0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0 [1] (🫨) shaking face + {0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0 [7] (🫩..🫯) .. {0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - {0x1FAF7, 0x1FAFF, prExtendedPictographic}, // E0.0 [9] (🫷..🫿) .. + {0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand + {0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0 [7] (🫹..🫿) .. {0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽) .. {0xE0000, 0xE0000, prControl}, // Cn {0xE0001, 0xE0001, prControl}, // Cf LANGUAGE TAG diff --git a/tools/vendor/github.com/rivo/uniseg/graphemerules.go b/tools/vendor/github.com/rivo/uniseg/graphemerules.go index 9f46b575b..5d399d29c 100644 --- a/tools/vendor/github.com/rivo/uniseg/graphemerules.go +++ b/tools/vendor/github.com/rivo/uniseg/graphemerules.go @@ -21,11 +21,12 @@ const ( grBoundary ) -// The grapheme cluster parser's state transitions. Maps (state, property) to -// (new state, breaking instruction, rule number). The breaking instruction -// always refers to the boundary between the last and next code point. +// grTransitions implements the grapheme cluster parser's state transitions. +// Maps state and property to a new state, a breaking instruction, and rule +// number. The breaking instruction always refers to the boundary between the +// last and next code point. Returns negative values if no transition is found. // -// This map is queried as follows: +// This function is used as follows: // // 1. Find specific state + specific property. Stop if found. // 2. Find specific state + any property. @@ -36,59 +37,96 @@ const ( // are equal. Stop. // 6. Assume grAny and grBoundary. // -// Unicode version 14.0.0. -var grTransitions = map[[2]int][3]int{ +// Unicode version 15.0.0. +func grTransitions(state, prop int) (newState int, newProp int, boundary int) { + // It turns out that using a big switch statement is much faster than using + // a map. + + switch uint64(state) | uint64(prop)<<32 { // GB5 - {grAny, prCR}: {grCR, grBoundary, 50}, - {grAny, prLF}: {grControlLF, grBoundary, 50}, - {grAny, prControl}: {grControlLF, grBoundary, 50}, + case grAny | prCR<<32: + return grCR, grBoundary, 50 + case grAny | prLF<<32: + return grControlLF, grBoundary, 50 + case grAny | prControl<<32: + return grControlLF, grBoundary, 50 // GB4 - {grCR, prAny}: {grAny, grBoundary, 40}, - {grControlLF, prAny}: {grAny, grBoundary, 40}, - - // GB3. - {grCR, prLF}: {grControlLF, grNoBoundary, 30}, - - // GB6. - {grAny, prL}: {grL, grBoundary, 9990}, - {grL, prL}: {grL, grNoBoundary, 60}, - {grL, prV}: {grLVV, grNoBoundary, 60}, - {grL, prLV}: {grLVV, grNoBoundary, 60}, - {grL, prLVT}: {grLVTT, grNoBoundary, 60}, - - // GB7. - {grAny, prLV}: {grLVV, grBoundary, 9990}, - {grAny, prV}: {grLVV, grBoundary, 9990}, - {grLVV, prV}: {grLVV, grNoBoundary, 70}, - {grLVV, prT}: {grLVTT, grNoBoundary, 70}, - - // GB8. - {grAny, prLVT}: {grLVTT, grBoundary, 9990}, - {grAny, prT}: {grLVTT, grBoundary, 9990}, - {grLVTT, prT}: {grLVTT, grNoBoundary, 80}, - - // GB9. - {grAny, prExtend}: {grAny, grNoBoundary, 90}, - {grAny, prZWJ}: {grAny, grNoBoundary, 90}, - - // GB9a. - {grAny, prSpacingMark}: {grAny, grNoBoundary, 91}, - - // GB9b. - {grAny, prPrepend}: {grPrepend, grBoundary, 9990}, - {grPrepend, prAny}: {grAny, grNoBoundary, 92}, - - // GB11. - {grAny, prExtendedPictographic}: {grExtendedPictographic, grBoundary, 9990}, - {grExtendedPictographic, prExtend}: {grExtendedPictographic, grNoBoundary, 110}, - {grExtendedPictographic, prZWJ}: {grExtendedPictographicZWJ, grNoBoundary, 110}, - {grExtendedPictographicZWJ, prExtendedPictographic}: {grExtendedPictographic, grNoBoundary, 110}, - - // GB12 / GB13. - {grAny, prRegionalIndicator}: {grRIOdd, grBoundary, 9990}, - {grRIOdd, prRegionalIndicator}: {grRIEven, grNoBoundary, 120}, - {grRIEven, prRegionalIndicator}: {grRIOdd, grBoundary, 120}, + case grCR | prAny<<32: + return grAny, grBoundary, 40 + case grControlLF | prAny<<32: + return grAny, grBoundary, 40 + + // GB3 + case grCR | prLF<<32: + return grControlLF, grNoBoundary, 30 + + // GB6 + case grAny | prL<<32: + return grL, grBoundary, 9990 + case grL | prL<<32: + return grL, grNoBoundary, 60 + case grL | prV<<32: + return grLVV, grNoBoundary, 60 + case grL | prLV<<32: + return grLVV, grNoBoundary, 60 + case grL | prLVT<<32: + return grLVTT, grNoBoundary, 60 + + // GB7 + case grAny | prLV<<32: + return grLVV, grBoundary, 9990 + case grAny | prV<<32: + return grLVV, grBoundary, 9990 + case grLVV | prV<<32: + return grLVV, grNoBoundary, 70 + case grLVV | prT<<32: + return grLVTT, grNoBoundary, 70 + + // GB8 + case grAny | prLVT<<32: + return grLVTT, grBoundary, 9990 + case grAny | prT<<32: + return grLVTT, grBoundary, 9990 + case grLVTT | prT<<32: + return grLVTT, grNoBoundary, 80 + + // GB9 + case grAny | prExtend<<32: + return grAny, grNoBoundary, 90 + case grAny | prZWJ<<32: + return grAny, grNoBoundary, 90 + + // GB9a + case grAny | prSpacingMark<<32: + return grAny, grNoBoundary, 91 + + // GB9b + case grAny | prPrepend<<32: + return grPrepend, grBoundary, 9990 + case grPrepend | prAny<<32: + return grAny, grNoBoundary, 92 + + // GB11 + case grAny | prExtendedPictographic<<32: + return grExtendedPictographic, grBoundary, 9990 + case grExtendedPictographic | prExtend<<32: + return grExtendedPictographic, grNoBoundary, 110 + case grExtendedPictographic | prZWJ<<32: + return grExtendedPictographicZWJ, grNoBoundary, 110 + case grExtendedPictographicZWJ | prExtendedPictographic<<32: + return grExtendedPictographic, grNoBoundary, 110 + + // GB12 / GB13 + case grAny | prRegionalIndicator<<32: + return grRIOdd, grBoundary, 9990 + case grRIOdd | prRegionalIndicator<<32: + return grRIEven, grNoBoundary, 120 + case grRIEven | prRegionalIndicator<<32: + return grRIOdd, grBoundary, 120 + default: + return -1, -1, -1 + } } // transitionGraphemeState determines the new state of the grapheme cluster @@ -97,40 +135,40 @@ var grTransitions = map[[2]int][3]int{ // table) and whether a cluster boundary was detected. func transitionGraphemeState(state int, r rune) (newState, prop int, boundary bool) { // Determine the property of the next character. - prop = property(graphemeCodePoints, r) + prop = propertyGraphemes(r) // Find the applicable transition. - transition, ok := grTransitions[[2]int{state, prop}] - if ok { + nextState, nextProp, _ := grTransitions(state, prop) + if nextState >= 0 { // We have a specific transition. We'll use it. - return transition[0], prop, transition[1] == grBoundary + return nextState, prop, nextProp == grBoundary } // No specific transition found. Try the less specific ones. - transAnyProp, okAnyProp := grTransitions[[2]int{state, prAny}] - transAnyState, okAnyState := grTransitions[[2]int{grAny, prop}] - if okAnyProp && okAnyState { + anyPropState, anyPropProp, anyPropRule := grTransitions(state, prAny) + anyStateState, anyStateProp, anyStateRule := grTransitions(grAny, prop) + if anyPropState >= 0 && anyStateState >= 0 { // Both apply. We'll use a mix (see comments for grTransitions). - newState = transAnyState[0] - boundary = transAnyState[1] == grBoundary - if transAnyProp[2] < transAnyState[2] { - boundary = transAnyProp[1] == grBoundary + newState = anyStateState + boundary = anyStateProp == grBoundary + if anyPropRule < anyStateRule { + boundary = anyPropProp == grBoundary } return } - if okAnyProp { + if anyPropState >= 0 { // We only have a specific state. - return transAnyProp[0], prop, transAnyProp[1] == grBoundary + return anyPropState, prop, anyPropProp == grBoundary // This branch will probably never be reached because okAnyState will // always be true given the current transition map. But we keep it here // for future modifications to the transition map where this may not be // true anymore. } - if okAnyState { + if anyStateState >= 0 { // We only have a specific property. - return transAnyState[0], prop, transAnyState[1] == grBoundary + return anyStateState, prop, anyStateProp == grBoundary } // No known transition. GB999: Any ÷ Any. diff --git a/tools/vendor/github.com/rivo/uniseg/line.go b/tools/vendor/github.com/rivo/uniseg/line.go index 87f28503f..7a46318d9 100644 --- a/tools/vendor/github.com/rivo/uniseg/line.go +++ b/tools/vendor/github.com/rivo/uniseg/line.go @@ -80,7 +80,7 @@ func FirstLineSegment(b []byte, state int) (segment, rest []byte, mustBreak bool } } -// FirstLineSegmentInString is like FirstLineSegment() but its input and outputs +// FirstLineSegmentInString is like [FirstLineSegment] but its input and outputs // are strings. func FirstLineSegmentInString(str string, state int) (segment, rest string, mustBreak bool, newState int) { // An empty byte slice returns nothing. @@ -122,13 +122,13 @@ func FirstLineSegmentInString(str string, state int) (segment, rest string, must // [UAX #14]: https://www.unicode.org/reports/tr14/#Algorithm func HasTrailingLineBreak(b []byte) bool { r, _ := utf8.DecodeLastRune(b) - property, _ := propertyWithGenCat(lineBreakCodePoints, r) - return property == lbBK || property == lbCR || property == lbLF || property == lbNL + property, _ := propertyLineBreak(r) + return property == prBK || property == prCR || property == prLF || property == prNL } // HasTrailingLineBreakInString is like [HasTrailingLineBreak] but for a string. func HasTrailingLineBreakInString(str string) bool { r, _ := utf8.DecodeLastRuneInString(str) - property, _ := propertyWithGenCat(lineBreakCodePoints, r) - return property == lbBK || property == lbCR || property == lbLF || property == lbNL + property, _ := propertyLineBreak(r) + return property == prBK || property == prCR || property == prLF || property == prNL } diff --git a/tools/vendor/github.com/rivo/uniseg/lineproperties.go b/tools/vendor/github.com/rivo/uniseg/lineproperties.go index 32169306e..ac7fac4c0 100644 --- a/tools/vendor/github.com/rivo/uniseg/lineproperties.go +++ b/tools/vendor/github.com/rivo/uniseg/lineproperties.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // lineBreakCodePoints are taken from -// https://www.unicode.org/Public/14.0.0/ucd/LineBreak.txt +// https://www.unicode.org/Public/15.0.0/ucd/LineBreak.txt // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var lineBreakCodePoints = [][4]int{ {0x0000, 0x0008, prCM, gcCc}, // [9] .. @@ -439,6 +439,7 @@ var lineBreakCodePoints = [][4]int{ {0x0CE2, 0x0CE3, prCM, gcMn}, // [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL {0x0CE6, 0x0CEF, prNU, gcNd}, // [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE {0x0CF1, 0x0CF2, prAL, gcLo}, // [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA + {0x0CF3, 0x0CF3, prCM, gcMc}, // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT {0x0D00, 0x0D01, prCM, gcMn}, // [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU {0x0D02, 0x0D03, prCM, gcMc}, // [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA {0x0D04, 0x0D0C, prAL, gcLo}, // [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -500,7 +501,7 @@ var lineBreakCodePoints = [][4]int{ {0x0EBD, 0x0EBD, prSA, gcLo}, // LAO SEMIVOWEL SIGN NYO {0x0EC0, 0x0EC4, prSA, gcLo}, // [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI {0x0EC6, 0x0EC6, prSA, gcLm}, // LAO KO LA - {0x0EC8, 0x0ECD, prSA, gcMn}, // [6] LAO TONE MAI EK..LAO NIGGAHITA + {0x0EC8, 0x0ECE, prSA, gcMn}, // [7] LAO TONE MAI EK..LAO YAMAKKAN {0x0ED0, 0x0ED9, prNU, gcNd}, // [10] LAO DIGIT ZERO..LAO DIGIT NINE {0x0EDC, 0x0EDF, prSA, gcLo}, // [4] LAO HO NO..LAO LETTER KHMU NYO {0x0F00, 0x0F00, prAL, gcLo}, // TIBETAN SYLLABLE OM @@ -813,7 +814,11 @@ var lineBreakCodePoints = [][4]int{ {0x1D79, 0x1D7F, prAL, gcLl}, // [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE {0x1D80, 0x1D9A, prAL, gcLl}, // [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK {0x1D9B, 0x1DBF, prAL, gcLm}, // [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - {0x1DC0, 0x1DFF, prCM, gcMn}, // [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW + {0x1DC0, 0x1DCC, prCM, gcMn}, // [13] COMBINING DOTTED GRAVE ACCENT..COMBINING MACRON-BREVE + {0x1DCD, 0x1DCD, prGL, gcMn}, // COMBINING DOUBLE CIRCUMFLEX ABOVE + {0x1DCE, 0x1DFB, prCM, gcMn}, // [46] COMBINING OGONEK ABOVE..COMBINING DELETION MARK + {0x1DFC, 0x1DFC, prGL, gcMn}, // COMBINING DOUBLE INVERTED BREVE BELOW + {0x1DFD, 0x1DFF, prCM, gcMn}, // [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW {0x1E00, 0x1EFF, prAL, gcLC}, // [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP {0x1F00, 0x1F15, prAL, gcLC}, // [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA {0x1F18, 0x1F1D, prAL, gcLu}, // [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA @@ -889,7 +894,7 @@ var lineBreakCodePoints = [][4]int{ {0x2054, 0x2054, prAL, gcPc}, // INVERTED UNDERTIE {0x2055, 0x2055, prAL, gcPo}, // FLOWER PUNCTUATION MARK {0x2056, 0x2056, prBA, gcPo}, // THREE DOT PUNCTUATION - {0x2057, 0x2057, prAL, gcPo}, // QUADRUPLE PRIME + {0x2057, 0x2057, prPO, gcPo}, // QUADRUPLE PRIME {0x2058, 0x205B, prBA, gcPo}, // [4] FOUR DOT PUNCTUATION..FOUR DOT MARK {0x205C, 0x205C, prAL, gcPo}, // DOTTED CROSS {0x205D, 0x205E, prBA, gcPo}, // [2] TRICOLON..VERTICAL FOUR DOTS @@ -2751,6 +2756,7 @@ var lineBreakCodePoints = [][4]int{ {0x10EAB, 0x10EAC, prCM, gcMn}, // [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK {0x10EAD, 0x10EAD, prBA, gcPd}, // YEZIDI HYPHENATION MARK {0x10EB0, 0x10EB1, prAL, gcLo}, // [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE + {0x10EFD, 0x10EFF, prCM, gcMn}, // [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA {0x10F00, 0x10F1C, prAL, gcLo}, // [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL {0x10F1D, 0x10F26, prAL, gcNo}, // [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF {0x10F27, 0x10F27, prAL, gcLo}, // OLD SOGDIAN LIGATURE AYIN-DALETH @@ -2840,6 +2846,8 @@ var lineBreakCodePoints = [][4]int{ {0x1123B, 0x1123C, prBA, gcPo}, // [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK {0x1123D, 0x1123D, prAL, gcPo}, // KHOJKI ABBREVIATION SIGN {0x1123E, 0x1123E, prCM, gcMn}, // KHOJKI SIGN SUKUN + {0x1123F, 0x11240, prAL, gcLo}, // [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I + {0x11241, 0x11241, prCM, gcMn}, // KHOJKI VOWEL SIGN VOCALIC R {0x11280, 0x11286, prAL, gcLo}, // [7] MULTANI LETTER A..MULTANI LETTER GA {0x11288, 0x11288, prAL, gcLo}, // MULTANI LETTER GHA {0x1128A, 0x1128D, prAL, gcLo}, // [4] MULTANI LETTER CA..MULTANI LETTER JJA @@ -3013,6 +3021,7 @@ var lineBreakCodePoints = [][4]int{ {0x11AA1, 0x11AA2, prBA, gcPo}, // [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2 {0x11AB0, 0x11ABF, prAL, gcLo}, // [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA {0x11AC0, 0x11AF8, prAL, gcLo}, // [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL + {0x11B00, 0x11B09, prBB, gcPo}, // [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU {0x11C00, 0x11C08, prAL, gcLo}, // [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L {0x11C0A, 0x11C2E, prAL, gcLo}, // [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA {0x11C2F, 0x11C2F, prCM, gcMc}, // BHAIKSUKI VOWEL SIGN AA @@ -3059,6 +3068,20 @@ var lineBreakCodePoints = [][4]int{ {0x11EF3, 0x11EF4, prCM, gcMn}, // [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U {0x11EF5, 0x11EF6, prCM, gcMc}, // [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O {0x11EF7, 0x11EF8, prAL, gcPo}, // [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION + {0x11F00, 0x11F01, prCM, gcMn}, // [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA + {0x11F02, 0x11F02, prAL, gcLo}, // KAWI SIGN REPHA + {0x11F03, 0x11F03, prCM, gcMc}, // KAWI SIGN VISARGA + {0x11F04, 0x11F10, prAL, gcLo}, // [13] KAWI LETTER A..KAWI LETTER O + {0x11F12, 0x11F33, prAL, gcLo}, // [34] KAWI LETTER KA..KAWI LETTER JNYA + {0x11F34, 0x11F35, prCM, gcMc}, // [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA + {0x11F36, 0x11F3A, prCM, gcMn}, // [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R + {0x11F3E, 0x11F3F, prCM, gcMc}, // [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI + {0x11F40, 0x11F40, prCM, gcMn}, // KAWI VOWEL SIGN EU + {0x11F41, 0x11F41, prCM, gcMc}, // KAWI SIGN KILLER + {0x11F42, 0x11F42, prCM, gcMn}, // KAWI CONJOINER + {0x11F43, 0x11F44, prBA, gcPo}, // [2] KAWI DANDA..KAWI DOUBLE DANDA + {0x11F45, 0x11F4F, prID, gcPo}, // [11] KAWI PUNCTUATION SECTION MARKER..KAWI PUNCTUATION CLOSING SPIRAL + {0x11F50, 0x11F59, prNU, gcNd}, // [10] KAWI DIGIT ZERO..KAWI DIGIT NINE {0x11FB0, 0x11FB0, prAL, gcLo}, // LISU LETTER YHA {0x11FC0, 0x11FD4, prAL, gcNo}, // [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH {0x11FD5, 0x11FDC, prAL, gcSo}, // [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI @@ -3084,10 +3107,18 @@ var lineBreakCodePoints = [][4]int{ {0x1328A, 0x13378, prAL, gcLo}, // [239] EGYPTIAN HIEROGLYPH O037..EGYPTIAN HIEROGLYPH V011 {0x13379, 0x13379, prOP, gcLo}, // EGYPTIAN HIEROGLYPH V011A {0x1337A, 0x1337B, prCL, gcLo}, // [2] EGYPTIAN HIEROGLYPH V011B..EGYPTIAN HIEROGLYPH V011C - {0x1337C, 0x1342E, prAL, gcLo}, // [179] EGYPTIAN HIEROGLYPH V012..EGYPTIAN HIEROGLYPH AA032 + {0x1337C, 0x1342F, prAL, gcLo}, // [180] EGYPTIAN HIEROGLYPH V012..EGYPTIAN HIEROGLYPH V011D {0x13430, 0x13436, prGL, gcCf}, // [7] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH OVERLAY MIDDLE {0x13437, 0x13437, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN SEGMENT {0x13438, 0x13438, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END SEGMENT + {0x13439, 0x1343B, prGL, gcCf}, // [3] EGYPTIAN HIEROGLYPH INSERT AT MIDDLE..EGYPTIAN HIEROGLYPH INSERT AT BOTTOM + {0x1343C, 0x1343C, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE + {0x1343D, 0x1343D, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END ENCLOSURE + {0x1343E, 0x1343E, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE + {0x1343F, 0x1343F, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE + {0x13440, 0x13440, prCM, gcMn}, // EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY + {0x13441, 0x13446, prAL, gcLo}, // [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN + {0x13447, 0x13455, prCM, gcMn}, // [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED {0x14400, 0x145CD, prAL, gcLo}, // [462] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A409 {0x145CE, 0x145CE, prOP, gcLo}, // ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK {0x145CF, 0x145CF, prCL, gcLo}, // ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK @@ -3137,7 +3168,9 @@ var lineBreakCodePoints = [][4]int{ {0x1AFFD, 0x1AFFE, prAL, gcLm}, // [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 {0x1B000, 0x1B0FF, prID, gcLo}, // [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 {0x1B100, 0x1B122, prID, gcLo}, // [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU + {0x1B132, 0x1B132, prCJ, gcLo}, // HIRAGANA LETTER SMALL KO {0x1B150, 0x1B152, prCJ, gcLo}, // [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO + {0x1B155, 0x1B155, prCJ, gcLo}, // KATAKANA LETTER SMALL KO {0x1B164, 0x1B167, prCJ, gcLo}, // [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N {0x1B170, 0x1B2FB, prID, gcLo}, // [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB {0x1BC00, 0x1BC6A, prAL, gcLo}, // [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M @@ -3168,6 +3201,7 @@ var lineBreakCodePoints = [][4]int{ {0x1D200, 0x1D241, prAL, gcSo}, // [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 {0x1D242, 0x1D244, prCM, gcMn}, // [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME {0x1D245, 0x1D245, prAL, gcSo}, // GREEK MUSICAL LEIMMA + {0x1D2C0, 0x1D2D3, prAL, gcNo}, // [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN {0x1D2E0, 0x1D2F3, prAL, gcNo}, // [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN {0x1D300, 0x1D356, prAL, gcSo}, // [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING {0x1D360, 0x1D378, prAL, gcNo}, // [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE @@ -3228,11 +3262,14 @@ var lineBreakCodePoints = [][4]int{ {0x1DF00, 0x1DF09, prAL, gcLl}, // [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK {0x1DF0A, 0x1DF0A, prAL, gcLo}, // LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK {0x1DF0B, 0x1DF1E, prAL, gcLl}, // [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL + {0x1DF25, 0x1DF2A, prAL, gcLl}, // [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK {0x1E000, 0x1E006, prCM, gcMn}, // [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE {0x1E008, 0x1E018, prCM, gcMn}, // [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU {0x1E01B, 0x1E021, prCM, gcMn}, // [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI {0x1E023, 0x1E024, prCM, gcMn}, // [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS {0x1E026, 0x1E02A, prCM, gcMn}, // [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + {0x1E030, 0x1E06D, prAL, gcLm}, // [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE + {0x1E08F, 0x1E08F, prCM, gcMn}, // COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I {0x1E100, 0x1E12C, prAL, gcLo}, // [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W {0x1E130, 0x1E136, prCM, gcMn}, // [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D {0x1E137, 0x1E13D, prAL, gcLm}, // [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER @@ -3245,6 +3282,10 @@ var lineBreakCodePoints = [][4]int{ {0x1E2EC, 0x1E2EF, prCM, gcMn}, // [4] WANCHO TONE TUP..WANCHO TONE KOINI {0x1E2F0, 0x1E2F9, prNU, gcNd}, // [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE {0x1E2FF, 0x1E2FF, prPR, gcSc}, // WANCHO NGUN SIGN + {0x1E4D0, 0x1E4EA, prAL, gcLo}, // [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL + {0x1E4EB, 0x1E4EB, prAL, gcLm}, // NAG MUNDARI SIGN OJOD + {0x1E4EC, 0x1E4EF, prCM, gcMn}, // [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH + {0x1E4F0, 0x1E4F9, prNU, gcNd}, // [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE {0x1E7E0, 0x1E7E6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO {0x1E7E8, 0x1E7EB, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE {0x1E7ED, 0x1E7EE, prAL, gcLo}, // [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -3412,16 +3453,18 @@ var lineBreakCodePoints = [][4]int{ {0x1F6C1, 0x1F6CB, prID, gcSo}, // [11] BATHTUB..COUCH AND LAMP {0x1F6CC, 0x1F6CC, prEB, gcSo}, // SLEEPING ACCOMMODATION {0x1F6CD, 0x1F6D7, prID, gcSo}, // [11] SHOPPING BAGS..ELEVATOR - {0x1F6D8, 0x1F6DC, prID, gcCn}, // [5] .. - {0x1F6DD, 0x1F6EC, prID, gcSo}, // [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING + {0x1F6D8, 0x1F6DB, prID, gcCn}, // [4] .. + {0x1F6DC, 0x1F6EC, prID, gcSo}, // [17] WIRELESS..AIRPLANE ARRIVING {0x1F6ED, 0x1F6EF, prID, gcCn}, // [3] .. {0x1F6F0, 0x1F6FC, prID, gcSo}, // [13] SATELLITE..ROLLER SKATE {0x1F6FD, 0x1F6FF, prID, gcCn}, // [3] .. {0x1F700, 0x1F773, prAL, gcSo}, // [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE - {0x1F774, 0x1F77F, prID, gcCn}, // [12] .. + {0x1F774, 0x1F776, prID, gcSo}, // [3] LOT OF FORTUNE..LUNAR ECLIPSE + {0x1F777, 0x1F77A, prID, gcCn}, // [4] .. + {0x1F77B, 0x1F77F, prID, gcSo}, // [5] HAUMEA..ORCUS {0x1F780, 0x1F7D4, prAL, gcSo}, // [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR - {0x1F7D5, 0x1F7D8, prID, gcSo}, // [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE - {0x1F7D9, 0x1F7DF, prID, gcCn}, // [7] .. + {0x1F7D5, 0x1F7D9, prID, gcSo}, // [5] CIRCLED TRIANGLE..NINE POINTED WHITE STAR + {0x1F7DA, 0x1F7DF, prID, gcCn}, // [6] .. {0x1F7E0, 0x1F7EB, prID, gcSo}, // [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE {0x1F7EC, 0x1F7EF, prID, gcCn}, // [4] .. {0x1F7F0, 0x1F7F0, prID, gcSo}, // HEAVY EQUALS SIGN @@ -3467,33 +3510,29 @@ var lineBreakCodePoints = [][4]int{ {0x1FA54, 0x1FA5F, prID, gcCn}, // [12] .. {0x1FA60, 0x1FA6D, prID, gcSo}, // [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER {0x1FA6E, 0x1FA6F, prID, gcCn}, // [2] .. - {0x1FA70, 0x1FA74, prID, gcSo}, // [5] BALLET SHOES..THONG SANDAL - {0x1FA75, 0x1FA77, prID, gcCn}, // [3] .. - {0x1FA78, 0x1FA7C, prID, gcSo}, // [5] DROP OF BLOOD..CRUTCH + {0x1FA70, 0x1FA7C, prID, gcSo}, // [13] BALLET SHOES..CRUTCH {0x1FA7D, 0x1FA7F, prID, gcCn}, // [3] .. - {0x1FA80, 0x1FA86, prID, gcSo}, // [7] YO-YO..NESTING DOLLS - {0x1FA87, 0x1FA8F, prID, gcCn}, // [9] .. - {0x1FA90, 0x1FAAC, prID, gcSo}, // [29] RINGED PLANET..HAMSA - {0x1FAAD, 0x1FAAF, prID, gcCn}, // [3] .. - {0x1FAB0, 0x1FABA, prID, gcSo}, // [11] FLY..NEST WITH EGGS - {0x1FABB, 0x1FABF, prID, gcCn}, // [5] .. - {0x1FAC0, 0x1FAC2, prID, gcSo}, // [3] ANATOMICAL HEART..PEOPLE HUGGING + {0x1FA80, 0x1FA88, prID, gcSo}, // [9] YO-YO..FLUTE + {0x1FA89, 0x1FA8F, prID, gcCn}, // [7] .. + {0x1FA90, 0x1FABD, prID, gcSo}, // [46] RINGED PLANET..WING + {0x1FABE, 0x1FABE, prID, gcCn}, // + {0x1FABF, 0x1FAC2, prID, gcSo}, // [4] GOOSE..PEOPLE HUGGING {0x1FAC3, 0x1FAC5, prEB, gcSo}, // [3] PREGNANT MAN..PERSON WITH CROWN - {0x1FAC6, 0x1FACF, prID, gcCn}, // [10] .. - {0x1FAD0, 0x1FAD9, prID, gcSo}, // [10] BLUEBERRIES..JAR - {0x1FADA, 0x1FADF, prID, gcCn}, // [6] .. - {0x1FAE0, 0x1FAE7, prID, gcSo}, // [8] MELTING FACE..BUBBLES - {0x1FAE8, 0x1FAEF, prID, gcCn}, // [8] .. - {0x1FAF0, 0x1FAF6, prEB, gcSo}, // [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS - {0x1FAF7, 0x1FAFF, prID, gcCn}, // [9] .. + {0x1FAC6, 0x1FACD, prID, gcCn}, // [8] .. + {0x1FACE, 0x1FADB, prID, gcSo}, // [14] MOOSE..PEA POD + {0x1FADC, 0x1FADF, prID, gcCn}, // [4] .. + {0x1FAE0, 0x1FAE8, prID, gcSo}, // [9] MELTING FACE..SHAKING FACE + {0x1FAE9, 0x1FAEF, prID, gcCn}, // [7] .. + {0x1FAF0, 0x1FAF8, prEB, gcSo}, // [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND + {0x1FAF9, 0x1FAFF, prID, gcCn}, // [7] .. {0x1FB00, 0x1FB92, prAL, gcSo}, // [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK {0x1FB94, 0x1FBCA, prAL, gcSo}, // [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON {0x1FBF0, 0x1FBF9, prNU, gcNd}, // [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE {0x1FC00, 0x1FFFD, prID, gcCn}, // [1022] .. {0x20000, 0x2A6DF, prID, gcLo}, // [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF {0x2A6E0, 0x2A6FF, prID, gcCn}, // [32] .. - {0x2A700, 0x2B738, prID, gcLo}, // [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 - {0x2B739, 0x2B73F, prID, gcCn}, // [7] .. + {0x2A700, 0x2B739, prID, gcLo}, // [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 + {0x2B73A, 0x2B73F, prID, gcCn}, // [6] .. {0x2B740, 0x2B81D, prID, gcLo}, // [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D {0x2B81E, 0x2B81F, prID, gcCn}, // [2] .. {0x2B820, 0x2CEA1, prID, gcLo}, // [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 @@ -3504,7 +3543,9 @@ var lineBreakCodePoints = [][4]int{ {0x2FA1E, 0x2FA1F, prID, gcCn}, // [2] .. {0x2FA20, 0x2FFFD, prID, gcCn}, // [1502] .. {0x30000, 0x3134A, prID, gcLo}, // [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A - {0x3134B, 0x3FFFD, prID, gcCn}, // [60595] .. + {0x3134B, 0x3134F, prID, gcCn}, // [5] .. + {0x31350, 0x323AF, prID, gcLo}, // [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF + {0x323B0, 0x3FFFD, prID, gcCn}, // [56398] .. {0xE0001, 0xE0001, prCM, gcCf}, // LANGUAGE TAG {0xE0020, 0xE007F, prCM, gcCf}, // [96] TAG SPACE..CANCEL TAG {0xE0100, 0xE01EF, prCM, gcMn}, // [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 diff --git a/tools/vendor/github.com/rivo/uniseg/linerules.go b/tools/vendor/github.com/rivo/uniseg/linerules.go index d2ad51680..7708ae0fb 100644 --- a/tools/vendor/github.com/rivo/uniseg/linerules.go +++ b/tools/vendor/github.com/rivo/uniseg/linerules.go @@ -64,222 +64,381 @@ const ( LineMustBreak // You must break the line here. ) -// The line break parser's state transitions. It's anologous to grTransitions, -// see comments there for details. Unicode version 14.0.0. -var lbTransitions = map[[2]int][3]int{ +// lbTransitions implements the line break parser's state transitions. It's +// anologous to [grTransitions], see comments there for details. +// +// Unicode version 15.0.0. +func lbTransitions(state, prop int) (newState, lineBreak, rule int) { + switch uint64(state) | uint64(prop)<<32 { // LB4. - {lbAny, prBK}: {lbBK, LineCanBreak, 310}, - {lbBK, prAny}: {lbAny, LineMustBreak, 40}, + case lbBK | prAny<<32: + return lbAny, LineMustBreak, 40 // LB5. - {lbAny, prCR}: {lbCR, LineCanBreak, 310}, - {lbAny, prLF}: {lbLF, LineCanBreak, 310}, - {lbAny, prNL}: {lbNL, LineCanBreak, 310}, - {lbCR, prLF}: {lbLF, LineDontBreak, 50}, - {lbCR, prAny}: {lbAny, LineMustBreak, 50}, - {lbLF, prAny}: {lbAny, LineMustBreak, 50}, - {lbNL, prAny}: {lbAny, LineMustBreak, 50}, + case lbCR | prLF<<32: + return lbLF, LineDontBreak, 50 + case lbCR | prAny<<32: + return lbAny, LineMustBreak, 50 + case lbLF | prAny<<32: + return lbAny, LineMustBreak, 50 + case lbNL | prAny<<32: + return lbAny, LineMustBreak, 50 // LB6. - {lbAny, prBK}: {lbBK, LineDontBreak, 60}, - {lbAny, prCR}: {lbCR, LineDontBreak, 60}, - {lbAny, prLF}: {lbLF, LineDontBreak, 60}, - {lbAny, prNL}: {lbNL, LineDontBreak, 60}, + case lbAny | prBK<<32: + return lbBK, LineDontBreak, 60 + case lbAny | prCR<<32: + return lbCR, LineDontBreak, 60 + case lbAny | prLF<<32: + return lbLF, LineDontBreak, 60 + case lbAny | prNL<<32: + return lbNL, LineDontBreak, 60 // LB7. - {lbAny, prSP}: {lbSP, LineDontBreak, 70}, - {lbAny, prZW}: {lbZW, LineDontBreak, 70}, + case lbAny | prSP<<32: + return lbSP, LineDontBreak, 70 + case lbAny | prZW<<32: + return lbZW, LineDontBreak, 70 // LB8. - {lbZW, prSP}: {lbZW, LineDontBreak, 70}, - {lbZW, prAny}: {lbAny, LineCanBreak, 80}, + case lbZW | prSP<<32: + return lbZW, LineDontBreak, 70 + case lbZW | prAny<<32: + return lbAny, LineCanBreak, 80 // LB11. - {lbAny, prWJ}: {lbWJ, LineDontBreak, 110}, - {lbWJ, prAny}: {lbAny, LineDontBreak, 110}, + case lbAny | prWJ<<32: + return lbWJ, LineDontBreak, 110 + case lbWJ | prAny<<32: + return lbAny, LineDontBreak, 110 // LB12. - {lbAny, prGL}: {lbGL, LineCanBreak, 310}, - {lbGL, prAny}: {lbAny, LineDontBreak, 120}, + case lbAny | prGL<<32: + return lbGL, LineCanBreak, 310 + case lbGL | prAny<<32: + return lbAny, LineDontBreak, 120 // LB13 (simple transitions). - {lbAny, prCL}: {lbCL, LineCanBreak, 310}, - {lbAny, prCP}: {lbCP, LineCanBreak, 310}, - {lbAny, prEX}: {lbEX, LineDontBreak, 130}, - {lbAny, prIS}: {lbIS, LineCanBreak, 310}, - {lbAny, prSY}: {lbSY, LineCanBreak, 310}, + case lbAny | prCL<<32: + return lbCL, LineCanBreak, 310 + case lbAny | prCP<<32: + return lbCP, LineCanBreak, 310 + case lbAny | prEX<<32: + return lbEX, LineDontBreak, 130 + case lbAny | prIS<<32: + return lbIS, LineCanBreak, 310 + case lbAny | prSY<<32: + return lbSY, LineCanBreak, 310 // LB14. - {lbAny, prOP}: {lbOP, LineCanBreak, 310}, - {lbOP, prSP}: {lbOP, LineDontBreak, 70}, - {lbOP, prAny}: {lbAny, LineDontBreak, 140}, + case lbAny | prOP<<32: + return lbOP, LineCanBreak, 310 + case lbOP | prSP<<32: + return lbOP, LineDontBreak, 70 + case lbOP | prAny<<32: + return lbAny, LineDontBreak, 140 // LB15. - {lbQU, prSP}: {lbQUSP, LineDontBreak, 70}, - {lbQU, prOP}: {lbOP, LineDontBreak, 150}, - {lbQUSP, prOP}: {lbOP, LineDontBreak, 150}, + case lbQU | prSP<<32: + return lbQUSP, LineDontBreak, 70 + case lbQU | prOP<<32: + return lbOP, LineDontBreak, 150 + case lbQUSP | prOP<<32: + return lbOP, LineDontBreak, 150 // LB16. - {lbCL, prSP}: {lbCLCPSP, LineDontBreak, 70}, - {lbNUCL, prSP}: {lbCLCPSP, LineDontBreak, 70}, - {lbCP, prSP}: {lbCLCPSP, LineDontBreak, 70}, - {lbNUCP, prSP}: {lbCLCPSP, LineDontBreak, 70}, - {lbCL, prNS}: {lbNS, LineDontBreak, 160}, - {lbNUCL, prNS}: {lbNS, LineDontBreak, 160}, - {lbCP, prNS}: {lbNS, LineDontBreak, 160}, - {lbNUCP, prNS}: {lbNS, LineDontBreak, 160}, - {lbCLCPSP, prNS}: {lbNS, LineDontBreak, 160}, + case lbCL | prSP<<32: + return lbCLCPSP, LineDontBreak, 70 + case lbNUCL | prSP<<32: + return lbCLCPSP, LineDontBreak, 70 + case lbCP | prSP<<32: + return lbCLCPSP, LineDontBreak, 70 + case lbNUCP | prSP<<32: + return lbCLCPSP, LineDontBreak, 70 + case lbCL | prNS<<32: + return lbNS, LineDontBreak, 160 + case lbNUCL | prNS<<32: + return lbNS, LineDontBreak, 160 + case lbCP | prNS<<32: + return lbNS, LineDontBreak, 160 + case lbNUCP | prNS<<32: + return lbNS, LineDontBreak, 160 + case lbCLCPSP | prNS<<32: + return lbNS, LineDontBreak, 160 // LB17. - {lbAny, prB2}: {lbB2, LineCanBreak, 310}, - {lbB2, prSP}: {lbB2SP, LineDontBreak, 70}, - {lbB2, prB2}: {lbB2, LineDontBreak, 170}, - {lbB2SP, prB2}: {lbB2, LineDontBreak, 170}, + case lbAny | prB2<<32: + return lbB2, LineCanBreak, 310 + case lbB2 | prSP<<32: + return lbB2SP, LineDontBreak, 70 + case lbB2 | prB2<<32: + return lbB2, LineDontBreak, 170 + case lbB2SP | prB2<<32: + return lbB2, LineDontBreak, 170 // LB18. - {lbSP, prAny}: {lbAny, LineCanBreak, 180}, - {lbQUSP, prAny}: {lbAny, LineCanBreak, 180}, - {lbCLCPSP, prAny}: {lbAny, LineCanBreak, 180}, - {lbB2SP, prAny}: {lbAny, LineCanBreak, 180}, + case lbSP | prAny<<32: + return lbAny, LineCanBreak, 180 + case lbQUSP | prAny<<32: + return lbAny, LineCanBreak, 180 + case lbCLCPSP | prAny<<32: + return lbAny, LineCanBreak, 180 + case lbB2SP | prAny<<32: + return lbAny, LineCanBreak, 180 // LB19. - {lbAny, prQU}: {lbQU, LineDontBreak, 190}, - {lbQU, prAny}: {lbAny, LineDontBreak, 190}, + case lbAny | prQU<<32: + return lbQU, LineDontBreak, 190 + case lbQU | prAny<<32: + return lbAny, LineDontBreak, 190 // LB20. - {lbAny, prCB}: {lbCB, LineCanBreak, 200}, - {lbCB, prAny}: {lbAny, LineCanBreak, 200}, + case lbAny | prCB<<32: + return lbCB, LineCanBreak, 200 + case lbCB | prAny<<32: + return lbAny, LineCanBreak, 200 // LB21. - {lbAny, prBA}: {lbBA, LineDontBreak, 210}, - {lbAny, prHY}: {lbHY, LineDontBreak, 210}, - {lbAny, prNS}: {lbNS, LineDontBreak, 210}, - {lbAny, prBB}: {lbBB, LineCanBreak, 310}, - {lbBB, prAny}: {lbAny, LineDontBreak, 210}, + case lbAny | prBA<<32: + return lbBA, LineDontBreak, 210 + case lbAny | prHY<<32: + return lbHY, LineDontBreak, 210 + case lbAny | prNS<<32: + return lbNS, LineDontBreak, 210 + case lbAny | prBB<<32: + return lbBB, LineCanBreak, 310 + case lbBB | prAny<<32: + return lbAny, LineDontBreak, 210 // LB21a. - {lbAny, prHL}: {lbHL, LineCanBreak, 310}, - {lbHL, prHY}: {lbLB21a, LineDontBreak, 210}, - {lbHL, prBA}: {lbLB21a, LineDontBreak, 210}, - {lbLB21a, prAny}: {lbAny, LineDontBreak, 211}, + case lbAny | prHL<<32: + return lbHL, LineCanBreak, 310 + case lbHL | prHY<<32: + return lbLB21a, LineDontBreak, 210 + case lbHL | prBA<<32: + return lbLB21a, LineDontBreak, 210 + case lbLB21a | prAny<<32: + return lbAny, LineDontBreak, 211 // LB21b. - {lbSY, prHL}: {lbHL, LineDontBreak, 212}, - {lbNUSY, prHL}: {lbHL, LineDontBreak, 212}, + case lbSY | prHL<<32: + return lbHL, LineDontBreak, 212 + case lbNUSY | prHL<<32: + return lbHL, LineDontBreak, 212 // LB22. - {lbAny, prIN}: {lbAny, LineDontBreak, 220}, + case lbAny | prIN<<32: + return lbAny, LineDontBreak, 220 // LB23. - {lbAny, prAL}: {lbAL, LineCanBreak, 310}, - {lbAny, prNU}: {lbNU, LineCanBreak, 310}, - {lbAL, prNU}: {lbNU, LineDontBreak, 230}, - {lbHL, prNU}: {lbNU, LineDontBreak, 230}, - {lbNU, prAL}: {lbAL, LineDontBreak, 230}, - {lbNU, prHL}: {lbHL, LineDontBreak, 230}, - {lbNUNU, prAL}: {lbAL, LineDontBreak, 230}, - {lbNUNU, prHL}: {lbHL, LineDontBreak, 230}, + case lbAny | prAL<<32: + return lbAL, LineCanBreak, 310 + case lbAny | prNU<<32: + return lbNU, LineCanBreak, 310 + case lbAL | prNU<<32: + return lbNU, LineDontBreak, 230 + case lbHL | prNU<<32: + return lbNU, LineDontBreak, 230 + case lbNU | prAL<<32: + return lbAL, LineDontBreak, 230 + case lbNU | prHL<<32: + return lbHL, LineDontBreak, 230 + case lbNUNU | prAL<<32: + return lbAL, LineDontBreak, 230 + case lbNUNU | prHL<<32: + return lbHL, LineDontBreak, 230 // LB23a. - {lbAny, prPR}: {lbPR, LineCanBreak, 310}, - {lbAny, prID}: {lbIDEM, LineCanBreak, 310}, - {lbAny, prEB}: {lbEB, LineCanBreak, 310}, - {lbAny, prEM}: {lbIDEM, LineCanBreak, 310}, - {lbPR, prID}: {lbIDEM, LineDontBreak, 231}, - {lbPR, prEB}: {lbEB, LineDontBreak, 231}, - {lbPR, prEM}: {lbIDEM, LineDontBreak, 231}, - {lbIDEM, prPO}: {lbPO, LineDontBreak, 231}, - {lbEB, prPO}: {lbPO, LineDontBreak, 231}, + case lbAny | prPR<<32: + return lbPR, LineCanBreak, 310 + case lbAny | prID<<32: + return lbIDEM, LineCanBreak, 310 + case lbAny | prEB<<32: + return lbEB, LineCanBreak, 310 + case lbAny | prEM<<32: + return lbIDEM, LineCanBreak, 310 + case lbPR | prID<<32: + return lbIDEM, LineDontBreak, 231 + case lbPR | prEB<<32: + return lbEB, LineDontBreak, 231 + case lbPR | prEM<<32: + return lbIDEM, LineDontBreak, 231 + case lbIDEM | prPO<<32: + return lbPO, LineDontBreak, 231 + case lbEB | prPO<<32: + return lbPO, LineDontBreak, 231 // LB24. - {lbAny, prPO}: {lbPO, LineCanBreak, 310}, - {lbPR, prAL}: {lbAL, LineDontBreak, 240}, - {lbPR, prHL}: {lbHL, LineDontBreak, 240}, - {lbPO, prAL}: {lbAL, LineDontBreak, 240}, - {lbPO, prHL}: {lbHL, LineDontBreak, 240}, - {lbAL, prPR}: {lbPR, LineDontBreak, 240}, - {lbAL, prPO}: {lbPO, LineDontBreak, 240}, - {lbHL, prPR}: {lbPR, LineDontBreak, 240}, - {lbHL, prPO}: {lbPO, LineDontBreak, 240}, + case lbAny | prPO<<32: + return lbPO, LineCanBreak, 310 + case lbPR | prAL<<32: + return lbAL, LineDontBreak, 240 + case lbPR | prHL<<32: + return lbHL, LineDontBreak, 240 + case lbPO | prAL<<32: + return lbAL, LineDontBreak, 240 + case lbPO | prHL<<32: + return lbHL, LineDontBreak, 240 + case lbAL | prPR<<32: + return lbPR, LineDontBreak, 240 + case lbAL | prPO<<32: + return lbPO, LineDontBreak, 240 + case lbHL | prPR<<32: + return lbPR, LineDontBreak, 240 + case lbHL | prPO<<32: + return lbPO, LineDontBreak, 240 // LB25 (simple transitions). - {lbPR, prNU}: {lbNU, LineDontBreak, 250}, - {lbPO, prNU}: {lbNU, LineDontBreak, 250}, - {lbOP, prNU}: {lbNU, LineDontBreak, 250}, - {lbHY, prNU}: {lbNU, LineDontBreak, 250}, - {lbNU, prNU}: {lbNUNU, LineDontBreak, 250}, - {lbNU, prSY}: {lbNUSY, LineDontBreak, 250}, - {lbNU, prIS}: {lbNUIS, LineDontBreak, 250}, - {lbNUNU, prNU}: {lbNUNU, LineDontBreak, 250}, - {lbNUNU, prSY}: {lbNUSY, LineDontBreak, 250}, - {lbNUNU, prIS}: {lbNUIS, LineDontBreak, 250}, - {lbNUSY, prNU}: {lbNUNU, LineDontBreak, 250}, - {lbNUSY, prSY}: {lbNUSY, LineDontBreak, 250}, - {lbNUSY, prIS}: {lbNUIS, LineDontBreak, 250}, - {lbNUIS, prNU}: {lbNUNU, LineDontBreak, 250}, - {lbNUIS, prSY}: {lbNUSY, LineDontBreak, 250}, - {lbNUIS, prIS}: {lbNUIS, LineDontBreak, 250}, - {lbNU, prCL}: {lbNUCL, LineDontBreak, 250}, - {lbNU, prCP}: {lbNUCP, LineDontBreak, 250}, - {lbNUNU, prCL}: {lbNUCL, LineDontBreak, 250}, - {lbNUNU, prCP}: {lbNUCP, LineDontBreak, 250}, - {lbNUSY, prCL}: {lbNUCL, LineDontBreak, 250}, - {lbNUSY, prCP}: {lbNUCP, LineDontBreak, 250}, - {lbNUIS, prCL}: {lbNUCL, LineDontBreak, 250}, - {lbNUIS, prCP}: {lbNUCP, LineDontBreak, 250}, - {lbNU, prPO}: {lbPO, LineDontBreak, 250}, - {lbNUNU, prPO}: {lbPO, LineDontBreak, 250}, - {lbNUSY, prPO}: {lbPO, LineDontBreak, 250}, - {lbNUIS, prPO}: {lbPO, LineDontBreak, 250}, - {lbNUCL, prPO}: {lbPO, LineDontBreak, 250}, - {lbNUCP, prPO}: {lbPO, LineDontBreak, 250}, - {lbNU, prPR}: {lbPR, LineDontBreak, 250}, - {lbNUNU, prPR}: {lbPR, LineDontBreak, 250}, - {lbNUSY, prPR}: {lbPR, LineDontBreak, 250}, - {lbNUIS, prPR}: {lbPR, LineDontBreak, 250}, - {lbNUCL, prPR}: {lbPR, LineDontBreak, 250}, - {lbNUCP, prPR}: {lbPR, LineDontBreak, 250}, + case lbPR | prNU<<32: + return lbNU, LineDontBreak, 250 + case lbPO | prNU<<32: + return lbNU, LineDontBreak, 250 + case lbOP | prNU<<32: + return lbNU, LineDontBreak, 250 + case lbHY | prNU<<32: + return lbNU, LineDontBreak, 250 + case lbNU | prNU<<32: + return lbNUNU, LineDontBreak, 250 + case lbNU | prSY<<32: + return lbNUSY, LineDontBreak, 250 + case lbNU | prIS<<32: + return lbNUIS, LineDontBreak, 250 + case lbNUNU | prNU<<32: + return lbNUNU, LineDontBreak, 250 + case lbNUNU | prSY<<32: + return lbNUSY, LineDontBreak, 250 + case lbNUNU | prIS<<32: + return lbNUIS, LineDontBreak, 250 + case lbNUSY | prNU<<32: + return lbNUNU, LineDontBreak, 250 + case lbNUSY | prSY<<32: + return lbNUSY, LineDontBreak, 250 + case lbNUSY | prIS<<32: + return lbNUIS, LineDontBreak, 250 + case lbNUIS | prNU<<32: + return lbNUNU, LineDontBreak, 250 + case lbNUIS | prSY<<32: + return lbNUSY, LineDontBreak, 250 + case lbNUIS | prIS<<32: + return lbNUIS, LineDontBreak, 250 + case lbNU | prCL<<32: + return lbNUCL, LineDontBreak, 250 + case lbNU | prCP<<32: + return lbNUCP, LineDontBreak, 250 + case lbNUNU | prCL<<32: + return lbNUCL, LineDontBreak, 250 + case lbNUNU | prCP<<32: + return lbNUCP, LineDontBreak, 250 + case lbNUSY | prCL<<32: + return lbNUCL, LineDontBreak, 250 + case lbNUSY | prCP<<32: + return lbNUCP, LineDontBreak, 250 + case lbNUIS | prCL<<32: + return lbNUCL, LineDontBreak, 250 + case lbNUIS | prCP<<32: + return lbNUCP, LineDontBreak, 250 + case lbNU | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNUNU | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNUSY | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNUIS | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNUCL | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNUCP | prPO<<32: + return lbPO, LineDontBreak, 250 + case lbNU | prPR<<32: + return lbPR, LineDontBreak, 250 + case lbNUNU | prPR<<32: + return lbPR, LineDontBreak, 250 + case lbNUSY | prPR<<32: + return lbPR, LineDontBreak, 250 + case lbNUIS | prPR<<32: + return lbPR, LineDontBreak, 250 + case lbNUCL | prPR<<32: + return lbPR, LineDontBreak, 250 + case lbNUCP | prPR<<32: + return lbPR, LineDontBreak, 250 // LB26. - {lbAny, prJL}: {lbJL, LineCanBreak, 310}, - {lbAny, prJV}: {lbJV, LineCanBreak, 310}, - {lbAny, prJT}: {lbJT, LineCanBreak, 310}, - {lbAny, prH2}: {lbH2, LineCanBreak, 310}, - {lbAny, prH3}: {lbH3, LineCanBreak, 310}, - {lbJL, prJL}: {lbJL, LineDontBreak, 260}, - {lbJL, prJV}: {lbJV, LineDontBreak, 260}, - {lbJL, prH2}: {lbH2, LineDontBreak, 260}, - {lbJL, prH3}: {lbH3, LineDontBreak, 260}, - {lbJV, prJV}: {lbJV, LineDontBreak, 260}, - {lbJV, prJT}: {lbJT, LineDontBreak, 260}, - {lbH2, prJV}: {lbJV, LineDontBreak, 260}, - {lbH2, prJT}: {lbJT, LineDontBreak, 260}, - {lbJT, prJT}: {lbJT, LineDontBreak, 260}, - {lbH3, prJT}: {lbJT, LineDontBreak, 260}, + case lbAny | prJL<<32: + return lbJL, LineCanBreak, 310 + case lbAny | prJV<<32: + return lbJV, LineCanBreak, 310 + case lbAny | prJT<<32: + return lbJT, LineCanBreak, 310 + case lbAny | prH2<<32: + return lbH2, LineCanBreak, 310 + case lbAny | prH3<<32: + return lbH3, LineCanBreak, 310 + case lbJL | prJL<<32: + return lbJL, LineDontBreak, 260 + case lbJL | prJV<<32: + return lbJV, LineDontBreak, 260 + case lbJL | prH2<<32: + return lbH2, LineDontBreak, 260 + case lbJL | prH3<<32: + return lbH3, LineDontBreak, 260 + case lbJV | prJV<<32: + return lbJV, LineDontBreak, 260 + case lbJV | prJT<<32: + return lbJT, LineDontBreak, 260 + case lbH2 | prJV<<32: + return lbJV, LineDontBreak, 260 + case lbH2 | prJT<<32: + return lbJT, LineDontBreak, 260 + case lbJT | prJT<<32: + return lbJT, LineDontBreak, 260 + case lbH3 | prJT<<32: + return lbJT, LineDontBreak, 260 // LB27. - {lbJL, prPO}: {lbPO, LineDontBreak, 270}, - {lbJV, prPO}: {lbPO, LineDontBreak, 270}, - {lbJT, prPO}: {lbPO, LineDontBreak, 270}, - {lbH2, prPO}: {lbPO, LineDontBreak, 270}, - {lbH3, prPO}: {lbPO, LineDontBreak, 270}, - {lbPR, prJL}: {lbJL, LineDontBreak, 270}, - {lbPR, prJV}: {lbJV, LineDontBreak, 270}, - {lbPR, prJT}: {lbJT, LineDontBreak, 270}, - {lbPR, prH2}: {lbH2, LineDontBreak, 270}, - {lbPR, prH3}: {lbH3, LineDontBreak, 270}, + case lbJL | prPO<<32: + return lbPO, LineDontBreak, 270 + case lbJV | prPO<<32: + return lbPO, LineDontBreak, 270 + case lbJT | prPO<<32: + return lbPO, LineDontBreak, 270 + case lbH2 | prPO<<32: + return lbPO, LineDontBreak, 270 + case lbH3 | prPO<<32: + return lbPO, LineDontBreak, 270 + case lbPR | prJL<<32: + return lbJL, LineDontBreak, 270 + case lbPR | prJV<<32: + return lbJV, LineDontBreak, 270 + case lbPR | prJT<<32: + return lbJT, LineDontBreak, 270 + case lbPR | prH2<<32: + return lbH2, LineDontBreak, 270 + case lbPR | prH3<<32: + return lbH3, LineDontBreak, 270 // LB28. - {lbAL, prAL}: {lbAL, LineDontBreak, 280}, - {lbAL, prHL}: {lbHL, LineDontBreak, 280}, - {lbHL, prAL}: {lbAL, LineDontBreak, 280}, - {lbHL, prHL}: {lbHL, LineDontBreak, 280}, + case lbAL | prAL<<32: + return lbAL, LineDontBreak, 280 + case lbAL | prHL<<32: + return lbHL, LineDontBreak, 280 + case lbHL | prAL<<32: + return lbAL, LineDontBreak, 280 + case lbHL | prHL<<32: + return lbHL, LineDontBreak, 280 // LB29. - {lbIS, prAL}: {lbAL, LineDontBreak, 290}, - {lbIS, prHL}: {lbHL, LineDontBreak, 290}, - {lbNUIS, prAL}: {lbAL, LineDontBreak, 290}, - {lbNUIS, prHL}: {lbHL, LineDontBreak, 290}, + case lbIS | prAL<<32: + return lbAL, LineDontBreak, 290 + case lbIS | prHL<<32: + return lbHL, LineDontBreak, 290 + case lbNUIS | prAL<<32: + return lbAL, LineDontBreak, 290 + case lbNUIS | prHL<<32: + return lbHL, LineDontBreak, 290 + + default: + return -1, -1, -1 + } } // transitionLineBreakState determines the new state of the line break parser @@ -290,7 +449,7 @@ var lbTransitions = map[[2]int][3]int{ // further lookups. func transitionLineBreakState(state int, r rune, b []byte, str string) (newState int, lineBreak int) { // Determine the property of the next character. - nextProperty, generalCategory := propertyWithGenCat(lineBreakCodePoints, r) + nextProperty, generalCategory := propertyLineBreak(r) // Prepare. var forceNoBreak, isCPeaFWH bool @@ -306,7 +465,7 @@ func transitionLineBreakState(state int, r rune, b []byte, str string) (newState defer func() { // Transition into LB30. if newState == lbCP || newState == lbNUCP { - ea := property(eastAsianWidth, r) + ea := propertyEastAsianWidth(r) if ea != prF && ea != prW && ea != prH { newState |= lbCPeaFWHBit } @@ -352,30 +511,27 @@ func transitionLineBreakState(state int, r rune, b []byte, str string) (newState // Find the applicable transition in the table. var rule int - transition, ok := lbTransitions[[2]int{state, nextProperty}] - if ok { - // We have a specific transition. We'll use it. - newState, lineBreak, rule = transition[0], transition[1], transition[2] - } else { + newState, lineBreak, rule = lbTransitions(state, nextProperty) + if newState < 0 { // No specific transition found. Try the less specific ones. - transAnyProp, okAnyProp := lbTransitions[[2]int{state, prAny}] - transAnyState, okAnyState := lbTransitions[[2]int{lbAny, nextProperty}] - if okAnyProp && okAnyState { + anyPropProp, anyPropLineBreak, anyPropRule := lbTransitions(state, prAny) + anyStateProp, anyStateLineBreak, anyStateRule := lbTransitions(lbAny, nextProperty) + if anyPropProp >= 0 && anyStateProp >= 0 { // Both apply. We'll use a mix (see comments for grTransitions). - newState, lineBreak, rule = transAnyState[0], transAnyState[1], transAnyState[2] - if transAnyProp[2] < transAnyState[2] { - lineBreak, rule = transAnyProp[1], transAnyProp[2] + newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule + if anyPropRule < anyStateRule { + lineBreak, rule = anyPropLineBreak, anyPropRule } - } else if okAnyProp { + } else if anyPropProp >= 0 { // We only have a specific state. - newState, lineBreak, rule = transAnyProp[0], transAnyProp[1], transAnyProp[2] + newState, lineBreak, rule = anyPropProp, anyPropLineBreak, anyPropRule // This branch will probably never be reached because okAnyState will // always be true given the current transition map. But we keep it here // for future modifications to the transition map where this may not be // true anymore. - } else if okAnyState { + } else if anyStateProp >= 0 { // We only have a specific property. - newState, lineBreak, rule = transAnyState[0], transAnyState[1], transAnyState[2] + newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule } else { // No known transition. LB31: ALL ÷ ALL. newState, lineBreak, rule = lbAny, LineCanBreak, 310 @@ -414,7 +570,7 @@ func transitionLineBreakState(state int, r rune, b []byte, str string) (newState r, _ = utf8.DecodeRuneInString(str) } if r != utf8.RuneError { - pr, _ := propertyWithGenCat(lineBreakCodePoints, r) + pr, _ := propertyLineBreak(r) if pr == prNU { return lbNU, LineDontBreak } @@ -424,7 +580,7 @@ func transitionLineBreakState(state int, r rune, b []byte, str string) (newState // LB30 (part one). if rule > 300 { if (state == lbAL || state == lbHL || state == lbNU || state == lbNUNU) && nextProperty == prOP { - ea := property(eastAsianWidth, r) + ea := propertyEastAsianWidth(r) if ea != prF && ea != prW && ea != prH { return lbOP, LineDontBreak } @@ -460,7 +616,7 @@ func transitionLineBreakState(state int, r rune, b []byte, str string) (newState return prAny, LineDontBreak } } - graphemeProperty := property(graphemeCodePoints, r) + graphemeProperty := propertyGraphemes(r) if graphemeProperty == prExtendedPictographic && generalCategory == gcCn { return lbExtPicCn, LineCanBreak } diff --git a/tools/vendor/github.com/rivo/uniseg/properties.go b/tools/vendor/github.com/rivo/uniseg/properties.go index bc3c7bcf3..6290e6810 100644 --- a/tools/vendor/github.com/rivo/uniseg/properties.go +++ b/tools/vendor/github.com/rivo/uniseg/properties.go @@ -160,9 +160,49 @@ func property(dictionary [][3]int, r rune) int { return propertySearch(dictionary, r)[2] } -// propertyWithGenCat returns the Unicode property value and General Category -// (see constants above) of the given code point. -func propertyWithGenCat(dictionary [][4]int, r rune) (property, generalCategory int) { - entry := propertySearch(dictionary, r) +// propertyLineBreak returns the Unicode property value and General Category +// (see constants above) of the given code point, as listed in the line break +// code points table, while fast tracking ASCII digits and letters. +func propertyLineBreak(r rune) (property, generalCategory int) { + if r >= 'a' && r <= 'z' { + return prAL, gcLl + } + if r >= 'A' && r <= 'Z' { + return prAL, gcLu + } + if r >= '0' && r <= '9' { + return prNU, gcNd + } + entry := propertySearch(lineBreakCodePoints, r) return entry[2], entry[3] } + +// propertyGraphemes returns the Unicode grapheme cluster property value of the +// given code point while fast tracking ASCII characters. +func propertyGraphemes(r rune) int { + if r >= 0x20 && r <= 0x7e { + return prAny + } + if r == 0x0a { + return prLF + } + if r == 0x0d { + return prCR + } + if r >= 0 && r <= 0x1f || r == 0x7f { + return prControl + } + return property(graphemeCodePoints, r) +} + +// propertyEastAsianWidth returns the Unicode East Asian Width property value of +// the given code point while fast tracking ASCII characters. +func propertyEastAsianWidth(r rune) int { + if r >= 0x20 && r <= 0x7e { + return prNa + } + if r >= 0 && r <= 0x1f || r == 0x7f { + return prN + } + return property(eastAsianWidth, r) +} diff --git a/tools/vendor/github.com/rivo/uniseg/sentenceproperties.go b/tools/vendor/github.com/rivo/uniseg/sentenceproperties.go index ba0cf2de1..67717ec1f 100644 --- a/tools/vendor/github.com/rivo/uniseg/sentenceproperties.go +++ b/tools/vendor/github.com/rivo/uniseg/sentenceproperties.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // sentenceBreakCodePoints are taken from -// https://www.unicode.org/Public/14.0.0/ucd/auxiliary/SentenceBreakProperty.txt +// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/SentenceBreakProperty.txt // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var sentenceBreakCodePoints = [][3]int{ {0x0009, 0x0009, prSp}, // Cc @@ -843,6 +843,7 @@ var sentenceBreakCodePoints = [][3]int{ {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL {0x0CE6, 0x0CEF, prNumeric}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE {0x0CF1, 0x0CF2, prOLetter}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA + {0x0CF3, 0x0CF3, prExtend}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU {0x0D02, 0x0D03, prExtend}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA {0x0D04, 0x0D0C, prOLetter}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -896,7 +897,7 @@ var sentenceBreakCodePoints = [][3]int{ {0x0EBD, 0x0EBD, prOLetter}, // Lo LAO SEMIVOWEL SIGN NYO {0x0EC0, 0x0EC4, prOLetter}, // Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI {0x0EC6, 0x0EC6, prOLetter}, // Lm LAO KO LA - {0x0EC8, 0x0ECD, prExtend}, // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN {0x0ED0, 0x0ED9, prNumeric}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE {0x0EDC, 0x0EDF, prOLetter}, // Lo [4] LAO HO NO..LAO LETTER KHMU NYO {0x0F00, 0x0F00, prOLetter}, // Lo TIBETAN SYLLABLE OM @@ -958,7 +959,7 @@ var sentenceBreakCodePoints = [][3]int{ {0x10C7, 0x10C7, prUpper}, // L& GEORGIAN CAPITAL LETTER YN {0x10CD, 0x10CD, prUpper}, // L& GEORGIAN CAPITAL LETTER AEN {0x10D0, 0x10FA, prOLetter}, // L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - {0x10FC, 0x10FC, prOLetter}, // Lm MODIFIER LETTER GEORGIAN NAR + {0x10FC, 0x10FC, prLower}, // Lm MODIFIER LETTER GEORGIAN NAR {0x10FD, 0x10FF, prOLetter}, // L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN {0x1100, 0x1248, prOLetter}, // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA {0x124A, 0x124D, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE @@ -2034,7 +2035,7 @@ var sentenceBreakCodePoints = [][3]int{ {0xA7D7, 0xA7D7, prLower}, // L& LATIN SMALL LETTER MIDDLE SCOTS S {0xA7D8, 0xA7D8, prUpper}, // L& LATIN CAPITAL LETTER SIGMOID S {0xA7D9, 0xA7D9, prLower}, // L& LATIN SMALL LETTER SIGMOID S - {0xA7F2, 0xA7F4, prOLetter}, // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q + {0xA7F2, 0xA7F4, prLower}, // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q {0xA7F5, 0xA7F5, prUpper}, // L& LATIN CAPITAL LETTER REVERSED HALF H {0xA7F6, 0xA7F6, prLower}, // L& LATIN SMALL LETTER REVERSED HALF H {0xA7F7, 0xA7F7, prOLetter}, // Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I @@ -2140,7 +2141,7 @@ var sentenceBreakCodePoints = [][3]int{ {0xAB30, 0xAB5A, prLower}, // L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG {0xAB5C, 0xAB5F, prLower}, // Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK {0xAB60, 0xAB68, prLower}, // L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - {0xAB69, 0xAB69, prOLetter}, // Lm MODIFIER LETTER SMALL TURNED W + {0xAB69, 0xAB69, prLower}, // Lm MODIFIER LETTER SMALL TURNED W {0xAB70, 0xABBF, prLower}, // L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA {0xABC0, 0xABE2, prOLetter}, // Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM {0xABE3, 0xABE4, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP @@ -2334,6 +2335,7 @@ var sentenceBreakCodePoints = [][3]int{ {0x10E80, 0x10EA9, prOLetter}, // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK {0x10EB0, 0x10EB1, prOLetter}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE + {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA {0x10F00, 0x10F1C, prOLetter}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL {0x10F27, 0x10F27, prOLetter}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH {0x10F30, 0x10F45, prOLetter}, // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -2408,6 +2410,8 @@ var sentenceBreakCodePoints = [][3]int{ {0x11238, 0x11239, prSTerm}, // Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA {0x1123B, 0x1123C, prSTerm}, // Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN + {0x1123F, 0x11240, prOLetter}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I + {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R {0x11280, 0x11286, prOLetter}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA {0x11288, 0x11288, prOLetter}, // Lo MULTANI LETTER GHA {0x1128A, 0x1128D, prOLetter}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA @@ -2603,13 +2607,29 @@ var sentenceBreakCodePoints = [][3]int{ {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U {0x11EF5, 0x11EF6, prExtend}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O {0x11EF7, 0x11EF8, prSTerm}, // Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION + {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA + {0x11F02, 0x11F02, prOLetter}, // Lo KAWI SIGN REPHA + {0x11F03, 0x11F03, prExtend}, // Mc KAWI SIGN VISARGA + {0x11F04, 0x11F10, prOLetter}, // Lo [13] KAWI LETTER A..KAWI LETTER O + {0x11F12, 0x11F33, prOLetter}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA + {0x11F34, 0x11F35, prExtend}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA + {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R + {0x11F3E, 0x11F3F, prExtend}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI + {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU + {0x11F41, 0x11F41, prExtend}, // Mc KAWI SIGN KILLER + {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER + {0x11F43, 0x11F44, prSTerm}, // Po [2] KAWI DANDA..KAWI DOUBLE DANDA + {0x11F50, 0x11F59, prNumeric}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE {0x11FB0, 0x11FB0, prOLetter}, // Lo LISU LETTER YHA {0x12000, 0x12399, prOLetter}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U {0x12400, 0x1246E, prOLetter}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM {0x12480, 0x12543, prOLetter}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU {0x12F90, 0x12FF0, prOLetter}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x13000, 0x1342E, prOLetter}, // Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 - {0x13430, 0x13438, prFormat}, // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT + {0x13000, 0x1342F, prOLetter}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D + {0x13430, 0x1343F, prFormat}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE + {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY + {0x13441, 0x13446, prOLetter}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN + {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED {0x14400, 0x14646, prOLetter}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 {0x16800, 0x16A38, prOLetter}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ {0x16A40, 0x16A5E, prOLetter}, // Lo [31] MRO LETTER TA..MRO LETTER TEK @@ -2648,7 +2668,9 @@ var sentenceBreakCodePoints = [][3]int{ {0x1AFF5, 0x1AFFB, prOLetter}, // Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 {0x1AFFD, 0x1AFFE, prOLetter}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 {0x1B000, 0x1B122, prOLetter}, // Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU + {0x1B132, 0x1B132, prOLetter}, // Lo HIRAGANA LETTER SMALL KO {0x1B150, 0x1B152, prOLetter}, // Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO + {0x1B155, 0x1B155, prOLetter}, // Lo KATAKANA LETTER SMALL KO {0x1B164, 0x1B167, prOLetter}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N {0x1B170, 0x1B2FB, prOLetter}, // Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB {0x1BC00, 0x1BC6A, prOLetter}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M @@ -2738,11 +2760,14 @@ var sentenceBreakCodePoints = [][3]int{ {0x1DF00, 0x1DF09, prLower}, // L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK {0x1DF0A, 0x1DF0A, prOLetter}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK {0x1DF0B, 0x1DF1E, prLower}, // L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL + {0x1DF25, 0x1DF2A, prLower}, // L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK {0x1E000, 0x1E006, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE {0x1E008, 0x1E018, prExtend}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + {0x1E030, 0x1E06D, prLower}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE + {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I {0x1E100, 0x1E12C, prOLetter}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D {0x1E137, 0x1E13D, prOLetter}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER @@ -2753,6 +2778,10 @@ var sentenceBreakCodePoints = [][3]int{ {0x1E2C0, 0x1E2EB, prOLetter}, // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI {0x1E2F0, 0x1E2F9, prNumeric}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE + {0x1E4D0, 0x1E4EA, prOLetter}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL + {0x1E4EB, 0x1E4EB, prOLetter}, // Lm NAG MUNDARI SIGN OJOD + {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH + {0x1E4F0, 0x1E4F9, prNumeric}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE {0x1E7E0, 0x1E7E6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO {0x1E7E8, 0x1E7EB, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE {0x1E7ED, 0x1E7EE, prOLetter}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2803,12 +2832,13 @@ var sentenceBreakCodePoints = [][3]int{ {0x1F676, 0x1F678, prClose}, // So [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT {0x1FBF0, 0x1FBF9, prNumeric}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE {0x20000, 0x2A6DF, prOLetter}, // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF - {0x2A700, 0x2B738, prOLetter}, // Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 + {0x2A700, 0x2B739, prOLetter}, // Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 {0x2B740, 0x2B81D, prOLetter}, // Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D {0x2B820, 0x2CEA1, prOLetter}, // Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 {0x2CEB0, 0x2EBE0, prOLetter}, // Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 {0x2F800, 0x2FA1D, prOLetter}, // Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D {0x30000, 0x3134A, prOLetter}, // Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A + {0x31350, 0x323AF, prOLetter}, // Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF {0xE0001, 0xE0001, prFormat}, // Cf LANGUAGE TAG {0xE0020, 0xE007F, prExtend}, // Cf [96] TAG SPACE..CANCEL TAG {0xE0100, 0xE01EF, prExtend}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 diff --git a/tools/vendor/github.com/rivo/uniseg/sentencerules.go b/tools/vendor/github.com/rivo/uniseg/sentencerules.go index 58c04794e..0b29c7bdb 100644 --- a/tools/vendor/github.com/rivo/uniseg/sentencerules.go +++ b/tools/vendor/github.com/rivo/uniseg/sentencerules.go @@ -18,104 +18,178 @@ const ( sbSB8aSp ) -// The sentence break parser's breaking instructions. -const ( - sbDontBreak = iota - sbBreak -) - -// The sentence break parser's state transitions. It's anologous to -// grTransitions, see comments there for details. Unicode version 14.0.0. -var sbTransitions = map[[2]int][3]int{ +// sbTransitions implements the sentence break parser's state transitions. It's +// anologous to [grTransitions], see comments there for details. +// +// Unicode version 15.0.0. +func sbTransitions(state, prop int) (newState int, sentenceBreak bool, rule int) { + switch uint64(state) | uint64(prop)<<32 { // SB3. - {sbAny, prCR}: {sbCR, sbDontBreak, 9990}, - {sbCR, prLF}: {sbParaSep, sbDontBreak, 30}, + case sbAny | prCR<<32: + return sbCR, false, 9990 + case sbCR | prLF<<32: + return sbParaSep, false, 30 // SB4. - {sbAny, prSep}: {sbParaSep, sbDontBreak, 9990}, - {sbAny, prLF}: {sbParaSep, sbDontBreak, 9990}, - {sbParaSep, prAny}: {sbAny, sbBreak, 40}, - {sbCR, prAny}: {sbAny, sbBreak, 40}, + case sbAny | prSep<<32: + return sbParaSep, false, 9990 + case sbAny | prLF<<32: + return sbParaSep, false, 9990 + case sbParaSep | prAny<<32: + return sbAny, true, 40 + case sbCR | prAny<<32: + return sbAny, true, 40 // SB6. - {sbAny, prATerm}: {sbATerm, sbDontBreak, 9990}, - {sbATerm, prNumeric}: {sbAny, sbDontBreak, 60}, - {sbSB7, prNumeric}: {sbAny, sbDontBreak, 60}, // Because ATerm also appears in SB7. + case sbAny | prATerm<<32: + return sbATerm, false, 9990 + case sbATerm | prNumeric<<32: + return sbAny, false, 60 + case sbSB7 | prNumeric<<32: + return sbAny, false, 60 // Because ATerm also appears in SB7. // SB7. - {sbAny, prUpper}: {sbUpper, sbDontBreak, 9990}, - {sbAny, prLower}: {sbLower, sbDontBreak, 9990}, - {sbUpper, prATerm}: {sbSB7, sbDontBreak, 70}, - {sbLower, prATerm}: {sbSB7, sbDontBreak, 70}, - {sbSB7, prUpper}: {sbUpper, sbDontBreak, 70}, + case sbAny | prUpper<<32: + return sbUpper, false, 9990 + case sbAny | prLower<<32: + return sbLower, false, 9990 + case sbUpper | prATerm<<32: + return sbSB7, false, 70 + case sbLower | prATerm<<32: + return sbSB7, false, 70 + case sbSB7 | prUpper<<32: + return sbUpper, false, 70 // SB8a. - {sbAny, prSTerm}: {sbSTerm, sbDontBreak, 9990}, - {sbATerm, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbATerm, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbATerm, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSB7, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSB7, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSB7, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSB8Close, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSB8Close, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSB8Close, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSB8Sp, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSB8Sp, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSB8Sp, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSTerm, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSTerm, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSTerm, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSB8aClose, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSB8aClose, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSB8aClose, prSTerm}: {sbSTerm, sbDontBreak, 81}, - {sbSB8aSp, prSContinue}: {sbAny, sbDontBreak, 81}, - {sbSB8aSp, prATerm}: {sbATerm, sbDontBreak, 81}, - {sbSB8aSp, prSTerm}: {sbSTerm, sbDontBreak, 81}, + case sbAny | prSTerm<<32: + return sbSTerm, false, 9990 + case sbATerm | prSContinue<<32: + return sbAny, false, 81 + case sbATerm | prATerm<<32: + return sbATerm, false, 81 + case sbATerm | prSTerm<<32: + return sbSTerm, false, 81 + case sbSB7 | prSContinue<<32: + return sbAny, false, 81 + case sbSB7 | prATerm<<32: + return sbATerm, false, 81 + case sbSB7 | prSTerm<<32: + return sbSTerm, false, 81 + case sbSB8Close | prSContinue<<32: + return sbAny, false, 81 + case sbSB8Close | prATerm<<32: + return sbATerm, false, 81 + case sbSB8Close | prSTerm<<32: + return sbSTerm, false, 81 + case sbSB8Sp | prSContinue<<32: + return sbAny, false, 81 + case sbSB8Sp | prATerm<<32: + return sbATerm, false, 81 + case sbSB8Sp | prSTerm<<32: + return sbSTerm, false, 81 + case sbSTerm | prSContinue<<32: + return sbAny, false, 81 + case sbSTerm | prATerm<<32: + return sbATerm, false, 81 + case sbSTerm | prSTerm<<32: + return sbSTerm, false, 81 + case sbSB8aClose | prSContinue<<32: + return sbAny, false, 81 + case sbSB8aClose | prATerm<<32: + return sbATerm, false, 81 + case sbSB8aClose | prSTerm<<32: + return sbSTerm, false, 81 + case sbSB8aSp | prSContinue<<32: + return sbAny, false, 81 + case sbSB8aSp | prATerm<<32: + return sbATerm, false, 81 + case sbSB8aSp | prSTerm<<32: + return sbSTerm, false, 81 // SB9. - {sbATerm, prClose}: {sbSB8Close, sbDontBreak, 90}, - {sbSB7, prClose}: {sbSB8Close, sbDontBreak, 90}, - {sbSB8Close, prClose}: {sbSB8Close, sbDontBreak, 90}, - {sbATerm, prSp}: {sbSB8Sp, sbDontBreak, 90}, - {sbSB7, prSp}: {sbSB8Sp, sbDontBreak, 90}, - {sbSB8Close, prSp}: {sbSB8Sp, sbDontBreak, 90}, - {sbSTerm, prClose}: {sbSB8aClose, sbDontBreak, 90}, - {sbSB8aClose, prClose}: {sbSB8aClose, sbDontBreak, 90}, - {sbSTerm, prSp}: {sbSB8aSp, sbDontBreak, 90}, - {sbSB8aClose, prSp}: {sbSB8aSp, sbDontBreak, 90}, - {sbATerm, prSep}: {sbParaSep, sbDontBreak, 90}, - {sbATerm, prCR}: {sbParaSep, sbDontBreak, 90}, - {sbATerm, prLF}: {sbParaSep, sbDontBreak, 90}, - {sbSB7, prSep}: {sbParaSep, sbDontBreak, 90}, - {sbSB7, prCR}: {sbParaSep, sbDontBreak, 90}, - {sbSB7, prLF}: {sbParaSep, sbDontBreak, 90}, - {sbSB8Close, prSep}: {sbParaSep, sbDontBreak, 90}, - {sbSB8Close, prCR}: {sbParaSep, sbDontBreak, 90}, - {sbSB8Close, prLF}: {sbParaSep, sbDontBreak, 90}, - {sbSTerm, prSep}: {sbParaSep, sbDontBreak, 90}, - {sbSTerm, prCR}: {sbParaSep, sbDontBreak, 90}, - {sbSTerm, prLF}: {sbParaSep, sbDontBreak, 90}, - {sbSB8aClose, prSep}: {sbParaSep, sbDontBreak, 90}, - {sbSB8aClose, prCR}: {sbParaSep, sbDontBreak, 90}, - {sbSB8aClose, prLF}: {sbParaSep, sbDontBreak, 90}, + case sbATerm | prClose<<32: + return sbSB8Close, false, 90 + case sbSB7 | prClose<<32: + return sbSB8Close, false, 90 + case sbSB8Close | prClose<<32: + return sbSB8Close, false, 90 + case sbATerm | prSp<<32: + return sbSB8Sp, false, 90 + case sbSB7 | prSp<<32: + return sbSB8Sp, false, 90 + case sbSB8Close | prSp<<32: + return sbSB8Sp, false, 90 + case sbSTerm | prClose<<32: + return sbSB8aClose, false, 90 + case sbSB8aClose | prClose<<32: + return sbSB8aClose, false, 90 + case sbSTerm | prSp<<32: + return sbSB8aSp, false, 90 + case sbSB8aClose | prSp<<32: + return sbSB8aSp, false, 90 + case sbATerm | prSep<<32: + return sbParaSep, false, 90 + case sbATerm | prCR<<32: + return sbParaSep, false, 90 + case sbATerm | prLF<<32: + return sbParaSep, false, 90 + case sbSB7 | prSep<<32: + return sbParaSep, false, 90 + case sbSB7 | prCR<<32: + return sbParaSep, false, 90 + case sbSB7 | prLF<<32: + return sbParaSep, false, 90 + case sbSB8Close | prSep<<32: + return sbParaSep, false, 90 + case sbSB8Close | prCR<<32: + return sbParaSep, false, 90 + case sbSB8Close | prLF<<32: + return sbParaSep, false, 90 + case sbSTerm | prSep<<32: + return sbParaSep, false, 90 + case sbSTerm | prCR<<32: + return sbParaSep, false, 90 + case sbSTerm | prLF<<32: + return sbParaSep, false, 90 + case sbSB8aClose | prSep<<32: + return sbParaSep, false, 90 + case sbSB8aClose | prCR<<32: + return sbParaSep, false, 90 + case sbSB8aClose | prLF<<32: + return sbParaSep, false, 90 // SB10. - {sbSB8Sp, prSp}: {sbSB8Sp, sbDontBreak, 100}, - {sbSB8aSp, prSp}: {sbSB8aSp, sbDontBreak, 100}, - {sbSB8Sp, prSep}: {sbParaSep, sbDontBreak, 100}, - {sbSB8Sp, prCR}: {sbParaSep, sbDontBreak, 100}, - {sbSB8Sp, prLF}: {sbParaSep, sbDontBreak, 100}, + case sbSB8Sp | prSp<<32: + return sbSB8Sp, false, 100 + case sbSB8aSp | prSp<<32: + return sbSB8aSp, false, 100 + case sbSB8Sp | prSep<<32: + return sbParaSep, false, 100 + case sbSB8Sp | prCR<<32: + return sbParaSep, false, 100 + case sbSB8Sp | prLF<<32: + return sbParaSep, false, 100 // SB11. - {sbATerm, prAny}: {sbAny, sbBreak, 110}, - {sbSB7, prAny}: {sbAny, sbBreak, 110}, - {sbSB8Close, prAny}: {sbAny, sbBreak, 110}, - {sbSB8Sp, prAny}: {sbAny, sbBreak, 110}, - {sbSTerm, prAny}: {sbAny, sbBreak, 110}, - {sbSB8aClose, prAny}: {sbAny, sbBreak, 110}, - {sbSB8aSp, prAny}: {sbAny, sbBreak, 110}, + case sbATerm | prAny<<32: + return sbAny, true, 110 + case sbSB7 | prAny<<32: + return sbAny, true, 110 + case sbSB8Close | prAny<<32: + return sbAny, true, 110 + case sbSB8Sp | prAny<<32: + return sbAny, true, 110 + case sbSTerm | prAny<<32: + return sbAny, true, 110 + case sbSB8aClose | prAny<<32: + return sbAny, true, 110 + case sbSB8aSp | prAny<<32: + return sbAny, true, 110 // We'll always break after ParaSep due to SB4. + + default: + return -1, false, -1 + } } // transitionSentenceBreakState determines the new state of the sentence break @@ -141,30 +215,27 @@ func transitionSentenceBreakState(state int, r rune, b []byte, str string) (newS // Find the applicable transition in the table. var rule int - transition, ok := sbTransitions[[2]int{state, nextProperty}] - if ok { - // We have a specific transition. We'll use it. - newState, sentenceBreak, rule = transition[0], transition[1] == sbBreak, transition[2] - } else { + newState, sentenceBreak, rule = sbTransitions(state, nextProperty) + if newState < 0 { // No specific transition found. Try the less specific ones. - transAnyProp, okAnyProp := sbTransitions[[2]int{state, prAny}] - transAnyState, okAnyState := sbTransitions[[2]int{sbAny, nextProperty}] - if okAnyProp && okAnyState { + anyPropState, anyPropProp, anyPropRule := sbTransitions(state, prAny) + anyStateState, anyStateProp, anyStateRule := sbTransitions(sbAny, nextProperty) + if anyPropState >= 0 && anyStateState >= 0 { // Both apply. We'll use a mix (see comments for grTransitions). - newState, sentenceBreak, rule = transAnyState[0], transAnyState[1] == sbBreak, transAnyState[2] - if transAnyProp[2] < transAnyState[2] { - sentenceBreak, rule = transAnyProp[1] == sbBreak, transAnyProp[2] + newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule + if anyPropRule < anyStateRule { + sentenceBreak, rule = anyPropProp, anyPropRule } - } else if okAnyProp { + } else if anyPropState >= 0 { // We only have a specific state. - newState, sentenceBreak, rule = transAnyProp[0], transAnyProp[1] == sbBreak, transAnyProp[2] + newState, sentenceBreak, rule = anyPropState, anyPropProp, anyPropRule // This branch will probably never be reached because okAnyState will // always be true given the current transition map. But we keep it here // for future modifications to the transition map where this may not be // true anymore. - } else if okAnyState { + } else if anyStateState >= 0 { // We only have a specific property. - newState, sentenceBreak, rule = transAnyState[0], transAnyState[1] == sbBreak, transAnyState[2] + newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule } else { // No known transition. SB999: Any × Any. newState, sentenceBreak, rule = sbAny, false, 9990 diff --git a/tools/vendor/github.com/rivo/uniseg/step.go b/tools/vendor/github.com/rivo/uniseg/step.go index 6eca4b5dc..9b72c5e59 100644 --- a/tools/vendor/github.com/rivo/uniseg/step.go +++ b/tools/vendor/github.com/rivo/uniseg/step.go @@ -100,7 +100,7 @@ func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState i if len(b) <= length { // If we're already past the end, there is nothing else to parse. var prop int if state < 0 { - prop = property(graphemeCodePoints, r) + prop = propertyGraphemes(r) } else { prop = state >> shiftPropState } @@ -150,16 +150,14 @@ func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState i return b[:length], b[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState) } - if r == vs16 { - width = 2 - } else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } else if firstProp == prExtendedPictographic { + if firstProp == prExtendedPictographic { if r == vs15 { width = 1 - } else { + } else if r == vs16 { width = 2 } + } else if firstProp != prRegionalIndicator && firstProp != prL { + width += runeWidth(r, prop) } length += l @@ -179,7 +177,7 @@ func StepString(str string, state int) (cluster, rest string, boundaries int, ne // Extract the first rune. r, length := utf8.DecodeRuneInString(str) if len(str) <= length { // If we're already past the end, there is nothing else to parse. - prop := property(graphemeCodePoints, r) + prop := propertyGraphemes(r) return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) } @@ -226,16 +224,14 @@ func StepString(str string, state int) (cluster, rest string, boundaries int, ne return str[:length], str[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState) } - if r == vs16 { - width = 2 - } else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } else if firstProp == prExtendedPictographic { + if firstProp == prExtendedPictographic { if r == vs15 { width = 1 - } else { + } else if r == vs16 { width = 2 } + } else if firstProp != prRegionalIndicator && firstProp != prL { + width += runeWidth(r, prop) } length += l diff --git a/tools/vendor/github.com/rivo/uniseg/width.go b/tools/vendor/github.com/rivo/uniseg/width.go index 12a57cc2e..975a9f134 100644 --- a/tools/vendor/github.com/rivo/uniseg/width.go +++ b/tools/vendor/github.com/rivo/uniseg/width.go @@ -1,5 +1,10 @@ package uniseg +// EastAsianAmbiguousWidth specifies the monospace width for East Asian +// characters classified as Ambiguous. The default is 1 but some rare fonts +// render them with a width of 2. +var EastAsianAmbiguousWidth = 1 + // runeWidth returns the monospace width for the given rune. The provided // grapheme property is a value mapped by the [graphemeCodePoints] table. // @@ -33,9 +38,11 @@ func runeWidth(r rune, graphemeProperty int) int { return 4 } - switch property(eastAsianWidth, r) { + switch propertyEastAsianWidth(r) { case prW, prF: return 2 + case prA: + return EastAsianAmbiguousWidth } return 1 diff --git a/tools/vendor/github.com/rivo/uniseg/wordproperties.go b/tools/vendor/github.com/rivo/uniseg/wordproperties.go index 805cc536c..277ca1006 100644 --- a/tools/vendor/github.com/rivo/uniseg/wordproperties.go +++ b/tools/vendor/github.com/rivo/uniseg/wordproperties.go @@ -1,13 +1,13 @@ -package uniseg - // Code generated via go generate from gen_properties.go. DO NOT EDIT. +package uniseg + // workBreakCodePoints are taken from -// https://www.unicode.org/Public/14.0.0/ucd/auxiliary/WordBreakProperty.txt +// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/WordBreakProperty.txt // and -// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt +// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt // ("Extended_Pictographic" only) -// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode +// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode // license agreement. var workBreakCodePoints = [][3]int{ {0x000A, 0x000A, prLF}, // Cc @@ -318,6 +318,7 @@ var workBreakCodePoints = [][3]int{ {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL {0x0CE6, 0x0CEF, prNumeric}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE {0x0CF1, 0x0CF2, prALetter}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA + {0x0CF3, 0x0CF3, prExtend}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU {0x0D02, 0x0D03, prExtend}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA {0x0D04, 0x0D0C, prALetter}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -357,7 +358,7 @@ var workBreakCodePoints = [][3]int{ {0x0E50, 0x0E59, prNumeric}, // Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE {0x0EB1, 0x0EB1, prExtend}, // Mn LAO VOWEL SIGN MAI KAN {0x0EB4, 0x0EBC, prExtend}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EC8, 0x0ECD, prExtend}, // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN {0x0ED0, 0x0ED9, prNumeric}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE {0x0F00, 0x0F00, prALetter}, // Lo TIBETAN SYLLABLE OM {0x0F18, 0x0F19, prExtend}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS @@ -1093,6 +1094,7 @@ var workBreakCodePoints = [][3]int{ {0x10E80, 0x10EA9, prALetter}, // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK {0x10EB0, 0x10EB1, prALetter}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE + {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA {0x10F00, 0x10F1C, prALetter}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL {0x10F27, 0x10F27, prALetter}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH {0x10F30, 0x10F45, prALetter}, // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -1157,6 +1159,8 @@ var workBreakCodePoints = [][3]int{ {0x11235, 0x11235, prExtend}, // Mc KHOJKI SIGN VIRAMA {0x11236, 0x11237, prExtend}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN + {0x1123F, 0x11240, prALetter}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I + {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R {0x11280, 0x11286, prALetter}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA {0x11288, 0x11288, prALetter}, // Lo MULTANI LETTER GHA {0x1128A, 0x1128D, prALetter}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA @@ -1337,13 +1341,28 @@ var workBreakCodePoints = [][3]int{ {0x11EE0, 0x11EF2, prALetter}, // Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U {0x11EF5, 0x11EF6, prExtend}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O + {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA + {0x11F02, 0x11F02, prALetter}, // Lo KAWI SIGN REPHA + {0x11F03, 0x11F03, prExtend}, // Mc KAWI SIGN VISARGA + {0x11F04, 0x11F10, prALetter}, // Lo [13] KAWI LETTER A..KAWI LETTER O + {0x11F12, 0x11F33, prALetter}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA + {0x11F34, 0x11F35, prExtend}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA + {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R + {0x11F3E, 0x11F3F, prExtend}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI + {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU + {0x11F41, 0x11F41, prExtend}, // Mc KAWI SIGN KILLER + {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER + {0x11F50, 0x11F59, prNumeric}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE {0x11FB0, 0x11FB0, prALetter}, // Lo LISU LETTER YHA {0x12000, 0x12399, prALetter}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U {0x12400, 0x1246E, prALetter}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM {0x12480, 0x12543, prALetter}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU {0x12F90, 0x12FF0, prALetter}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x13000, 0x1342E, prALetter}, // Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 - {0x13430, 0x13438, prFormat}, // Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT + {0x13000, 0x1342F, prALetter}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D + {0x13430, 0x1343F, prFormat}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE + {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY + {0x13441, 0x13446, prALetter}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN + {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED {0x14400, 0x14646, prALetter}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 {0x16800, 0x16A38, prALetter}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ {0x16A40, 0x16A5E, prALetter}, // Lo [31] MRO LETTER TA..MRO LETTER TEK @@ -1374,6 +1393,7 @@ var workBreakCodePoints = [][3]int{ {0x1AFFD, 0x1AFFE, prKatakana}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 {0x1B000, 0x1B000, prKatakana}, // Lo KATAKANA LETTER ARCHAIC E {0x1B120, 0x1B122, prKatakana}, // Lo [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU + {0x1B155, 0x1B155, prKatakana}, // Lo KATAKANA LETTER SMALL KO {0x1B164, 0x1B167, prKatakana}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N {0x1BC00, 0x1BC6A, prALetter}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M {0x1BC70, 0x1BC7C, prALetter}, // Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK @@ -1431,11 +1451,14 @@ var workBreakCodePoints = [][3]int{ {0x1DF00, 0x1DF09, prALetter}, // L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK {0x1DF0A, 0x1DF0A, prALetter}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK {0x1DF0B, 0x1DF1E, prALetter}, // L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL + {0x1DF25, 0x1DF2A, prALetter}, // L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK {0x1E000, 0x1E006, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE {0x1E008, 0x1E018, prExtend}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + {0x1E030, 0x1E06D, prALetter}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE + {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I {0x1E100, 0x1E12C, prALetter}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D {0x1E137, 0x1E13D, prALetter}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER @@ -1446,6 +1469,10 @@ var workBreakCodePoints = [][3]int{ {0x1E2C0, 0x1E2EB, prALetter}, // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI {0x1E2F0, 0x1E2F9, prNumeric}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE + {0x1E4D0, 0x1E4EA, prALetter}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL + {0x1E4EB, 0x1E4EB, prALetter}, // Lm NAG MUNDARI SIGN OJOD + {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH + {0x1E4F0, 0x1E4F9, prNumeric}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE {0x1E7E0, 0x1E7E6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO {0x1E7E8, 0x1E7EB, prALetter}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE {0x1E7ED, 0x1E7EE, prALetter}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -1740,7 +1767,8 @@ var workBreakCodePoints = [][3]int{ {0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0 [2] (🛓..🛔) STUPA..PAGODA {0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0 [1] (🛕) hindu temple {0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0 [2] (🛖..🛗) hut..elevator - {0x1F6D8, 0x1F6DC, prExtendedPictographic}, // E0.0 [5] (🛘..🛜) .. + {0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0 [4] (🛘..🛛) .. + {0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0 [1] (🛜) wireless {0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy {0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat {0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE @@ -1757,7 +1785,7 @@ var workBreakCodePoints = [][3]int{ {0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0 [1] (🛺) auto rickshaw {0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0 [2] (🛻..🛼) pickup truck..roller skate {0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0 [3] (🛽..🛿) .. - {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) .. + {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS {0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. {0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫) orange circle..brown square {0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0 [4] (🟬..🟯) .. @@ -1816,30 +1844,37 @@ var workBreakCodePoints = [][3]int{ {0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. {0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts {0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0 [1] (🩴) thong sandal - {0x1FA75, 0x1FA77, prExtendedPictographic}, // E0.0 [3] (🩵..🩷) .. + {0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart {0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope {0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0 [2] (🩻..🩼) x-ray..crutch {0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0 [3] (🩽..🩿) .. {0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0 [3] (🪀..🪂) yo-yo..parachute {0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - {0x1FA87, 0x1FA8F, prExtendedPictographic}, // E0.0 [9] (🪇..🪏) .. + {0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0 [2] (🪇..🪈) maracas..flute + {0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0 [7] (🪉..🪏) .. {0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0 [6] (🪐..🪕) ringed planet..banjo {0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨) military helmet..rock {0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa - {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E0.0 [3] (🪭..🪯) .. + {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda {0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0 [7] (🪰..🪶) fly..feather {0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs - {0x1FABB, 0x1FABF, prExtendedPictographic}, // E0.0 [5] (🪻..🪿) .. + {0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0 [3] (🪻..🪽) hyacinth..wing + {0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0 [1] (🪾) + {0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0 [1] (🪿) goose {0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging {0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown - {0x1FAC6, 0x1FACF, prExtendedPictographic}, // E0.0 [10] (🫆..🫏) .. + {0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0 [8] (🫆..🫍) .. + {0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0 [2] (🫎..🫏) moose..donkey {0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0 [7] (🫐..🫖) blueberries..teapot {0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0 [3] (🫗..🫙) pouring liquid..jar - {0x1FADA, 0x1FADF, prExtendedPictographic}, // E0.0 [6] (🫚..🫟) .. + {0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0 [2] (🫚..🫛) ginger root..pea pod + {0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0 [4] (🫜..🫟) .. {0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0 [8] (🫠..🫧) melting face..bubbles - {0x1FAE8, 0x1FAEF, prExtendedPictographic}, // E0.0 [8] (🫨..🫯) .. + {0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0 [1] (🫨) shaking face + {0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0 [7] (🫩..🫯) .. {0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - {0x1FAF7, 0x1FAFF, prExtendedPictographic}, // E0.0 [9] (🫷..🫿) .. + {0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand + {0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0 [7] (🫹..🫿) .. {0x1FBF0, 0x1FBF9, prNumeric}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE {0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽) .. {0xE0001, 0xE0001, prFormat}, // Cf LANGUAGE TAG diff --git a/tools/vendor/github.com/rivo/uniseg/wordrules.go b/tools/vendor/github.com/rivo/uniseg/wordrules.go index 325407e40..57a8c6831 100644 --- a/tools/vendor/github.com/rivo/uniseg/wordrules.go +++ b/tools/vendor/github.com/rivo/uniseg/wordrules.go @@ -22,82 +22,121 @@ const ( wbZWJBit = 16 // This bit is set for any states followed by at least one zero-width joiner (see WB4 and WB3c). ) -// The word break parser's breaking instructions. -const ( - wbDontBreak = iota - wbBreak -) - -// The word break parser's state transitions. It's anologous to grTransitions, -// see comments there for details. Unicode version 14.0.0. -var wbTransitions = map[[2]int][3]int{ +// wbTransitions implements the word break parser's state transitions. It's +// anologous to [grTransitions], see comments there for details. +// +// Unicode version 15.0.0. +func wbTransitions(state, prop int) (newState int, wordBreak bool, rule int) { + switch uint64(state) | uint64(prop)<<32 { // WB3b. - {wbAny, prNewline}: {wbNewline, wbBreak, 32}, - {wbAny, prCR}: {wbCR, wbBreak, 32}, - {wbAny, prLF}: {wbLF, wbBreak, 32}, + case wbAny | prNewline<<32: + return wbNewline, true, 32 + case wbAny | prCR<<32: + return wbCR, true, 32 + case wbAny | prLF<<32: + return wbLF, true, 32 // WB3a. - {wbNewline, prAny}: {wbAny, wbBreak, 31}, - {wbCR, prAny}: {wbAny, wbBreak, 31}, - {wbLF, prAny}: {wbAny, wbBreak, 31}, + case wbNewline | prAny<<32: + return wbAny, true, 31 + case wbCR | prAny<<32: + return wbAny, true, 31 + case wbLF | prAny<<32: + return wbAny, true, 31 // WB3. - {wbCR, prLF}: {wbLF, wbDontBreak, 30}, + case wbCR | prLF<<32: + return wbLF, false, 30 // WB3d. - {wbAny, prWSegSpace}: {wbWSegSpace, wbBreak, 9990}, - {wbWSegSpace, prWSegSpace}: {wbWSegSpace, wbDontBreak, 34}, + case wbAny | prWSegSpace<<32: + return wbWSegSpace, true, 9990 + case wbWSegSpace | prWSegSpace<<32: + return wbWSegSpace, false, 34 // WB5. - {wbAny, prALetter}: {wbALetter, wbBreak, 9990}, - {wbAny, prHebrewLetter}: {wbHebrewLetter, wbBreak, 9990}, - {wbALetter, prALetter}: {wbALetter, wbDontBreak, 50}, - {wbALetter, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 50}, - {wbHebrewLetter, prALetter}: {wbALetter, wbDontBreak, 50}, - {wbHebrewLetter, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 50}, + case wbAny | prALetter<<32: + return wbALetter, true, 9990 + case wbAny | prHebrewLetter<<32: + return wbHebrewLetter, true, 9990 + case wbALetter | prALetter<<32: + return wbALetter, false, 50 + case wbALetter | prHebrewLetter<<32: + return wbHebrewLetter, false, 50 + case wbHebrewLetter | prALetter<<32: + return wbALetter, false, 50 + case wbHebrewLetter | prHebrewLetter<<32: + return wbHebrewLetter, false, 50 // WB7. Transitions to wbWB7 handled by transitionWordBreakState(). - {wbWB7, prALetter}: {wbALetter, wbDontBreak, 70}, - {wbWB7, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 70}, + case wbWB7 | prALetter<<32: + return wbALetter, false, 70 + case wbWB7 | prHebrewLetter<<32: + return wbHebrewLetter, false, 70 // WB7a. - {wbHebrewLetter, prSingleQuote}: {wbAny, wbDontBreak, 71}, + case wbHebrewLetter | prSingleQuote<<32: + return wbAny, false, 71 // WB7c. Transitions to wbWB7c handled by transitionWordBreakState(). - {wbWB7c, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 73}, + case wbWB7c | prHebrewLetter<<32: + return wbHebrewLetter, false, 73 // WB8. - {wbAny, prNumeric}: {wbNumeric, wbBreak, 9990}, - {wbNumeric, prNumeric}: {wbNumeric, wbDontBreak, 80}, + case wbAny | prNumeric<<32: + return wbNumeric, true, 9990 + case wbNumeric | prNumeric<<32: + return wbNumeric, false, 80 // WB9. - {wbALetter, prNumeric}: {wbNumeric, wbDontBreak, 90}, - {wbHebrewLetter, prNumeric}: {wbNumeric, wbDontBreak, 90}, + case wbALetter | prNumeric<<32: + return wbNumeric, false, 90 + case wbHebrewLetter | prNumeric<<32: + return wbNumeric, false, 90 // WB10. - {wbNumeric, prALetter}: {wbALetter, wbDontBreak, 100}, - {wbNumeric, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 100}, + case wbNumeric | prALetter<<32: + return wbALetter, false, 100 + case wbNumeric | prHebrewLetter<<32: + return wbHebrewLetter, false, 100 // WB11. Transitions to wbWB11 handled by transitionWordBreakState(). - {wbWB11, prNumeric}: {wbNumeric, wbDontBreak, 110}, + case wbWB11 | prNumeric<<32: + return wbNumeric, false, 110 // WB13. - {wbAny, prKatakana}: {wbKatakana, wbBreak, 9990}, - {wbKatakana, prKatakana}: {wbKatakana, wbDontBreak, 130}, + case wbAny | prKatakana<<32: + return wbKatakana, true, 9990 + case wbKatakana | prKatakana<<32: + return wbKatakana, false, 130 // WB13a. - {wbAny, prExtendNumLet}: {wbExtendNumLet, wbBreak, 9990}, - {wbALetter, prExtendNumLet}: {wbExtendNumLet, wbDontBreak, 131}, - {wbHebrewLetter, prExtendNumLet}: {wbExtendNumLet, wbDontBreak, 131}, - {wbNumeric, prExtendNumLet}: {wbExtendNumLet, wbDontBreak, 131}, - {wbKatakana, prExtendNumLet}: {wbExtendNumLet, wbDontBreak, 131}, - {wbExtendNumLet, prExtendNumLet}: {wbExtendNumLet, wbDontBreak, 131}, + case wbAny | prExtendNumLet<<32: + return wbExtendNumLet, true, 9990 + case wbALetter | prExtendNumLet<<32: + return wbExtendNumLet, false, 131 + case wbHebrewLetter | prExtendNumLet<<32: + return wbExtendNumLet, false, 131 + case wbNumeric | prExtendNumLet<<32: + return wbExtendNumLet, false, 131 + case wbKatakana | prExtendNumLet<<32: + return wbExtendNumLet, false, 131 + case wbExtendNumLet | prExtendNumLet<<32: + return wbExtendNumLet, false, 131 // WB13b. - {wbExtendNumLet, prALetter}: {wbALetter, wbDontBreak, 132}, - {wbExtendNumLet, prHebrewLetter}: {wbHebrewLetter, wbDontBreak, 132}, - {wbExtendNumLet, prNumeric}: {wbNumeric, wbDontBreak, 132}, - {wbExtendNumLet, prKatakana}: {prKatakana, wbDontBreak, 132}, + case wbExtendNumLet | prALetter<<32: + return wbALetter, false, 132 + case wbExtendNumLet | prHebrewLetter<<32: + return wbHebrewLetter, false, 132 + case wbExtendNumLet | prNumeric<<32: + return wbNumeric, false, 132 + case wbExtendNumLet | prKatakana<<32: + return wbKatakana, false, 132 + + default: + return -1, false, -1 + } } // transitionWordBreakState determines the new state of the word break parser @@ -141,30 +180,27 @@ func transitionWordBreakState(state int, r rune, b []byte, str string) (newState // Find the applicable transition in the table. var rule int - transition, ok := wbTransitions[[2]int{state, nextProperty}] - if ok { - // We have a specific transition. We'll use it. - newState, wordBreak, rule = transition[0], transition[1] == wbBreak, transition[2] - } else { + newState, wordBreak, rule = wbTransitions(state, nextProperty) + if newState < 0 { // No specific transition found. Try the less specific ones. - transAnyProp, okAnyProp := wbTransitions[[2]int{state, prAny}] - transAnyState, okAnyState := wbTransitions[[2]int{wbAny, nextProperty}] - if okAnyProp && okAnyState { + anyPropState, anyPropWordBreak, anyPropRule := wbTransitions(state, prAny) + anyStateState, anyStateWordBreak, anyStateRule := wbTransitions(wbAny, nextProperty) + if anyPropState >= 0 && anyStateState >= 0 { // Both apply. We'll use a mix (see comments for grTransitions). - newState, wordBreak, rule = transAnyState[0], transAnyState[1] == wbBreak, transAnyState[2] - if transAnyProp[2] < transAnyState[2] { - wordBreak, rule = transAnyProp[1] == wbBreak, transAnyProp[2] + newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule + if anyPropRule < anyStateRule { + wordBreak, rule = anyPropWordBreak, anyPropRule } - } else if okAnyProp { + } else if anyPropState >= 0 { // We only have a specific state. - newState, wordBreak, rule = transAnyProp[0], transAnyProp[1] == wbBreak, transAnyProp[2] + newState, wordBreak, rule = anyPropState, anyPropWordBreak, anyPropRule // This branch will probably never be reached because okAnyState will // always be true given the current transition map. But we keep it here // for future modifications to the transition map where this may not be // true anymore. - } else if okAnyState { + } else if anyStateState >= 0 { // We only have a specific property. - newState, wordBreak, rule = transAnyState[0], transAnyState[1] == wbBreak, transAnyState[2] + newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule } else { // No known transition. WB999: Any ÷ Any. newState, wordBreak, rule = wbAny, true, 9990 diff --git a/tools/vendor/github.com/spf13/viper/README.md b/tools/vendor/github.com/spf13/viper/README.md index b96180b3b..3fc7d84f1 100644 --- a/tools/vendor/github.com/spf13/viper/README.md +++ b/tools/vendor/github.com/spf13/viper/README.md @@ -11,7 +11,7 @@ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/spf13/viper/ci.yaml?branch=master&style=flat-square)](https://github.com/spf13/viper/actions?query=workflow%3ACI) [![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/viper?style=flat-square)](https://goreportcard.com/report/github.com/spf13/viper) -![Go Version](https://img.shields.io/badge/go%20version-%3E=1.19-61CFDD.svg?style=flat-square) +![Go Version](https://img.shields.io/badge/go%20version-%3E=1.20-61CFDD.svg?style=flat-square) [![PkgGoDev](https://pkg.go.dev/badge/mod/github.com/spf13/viper)](https://pkg.go.dev/mod/github.com/spf13/viper) **Go configuration with fangs!** @@ -39,7 +39,7 @@ Many Go projects are built using Viper including: go get github.com/spf13/viper ``` -**Note:** Viper uses [Go Modules](https://github.com/golang/go/wiki/Modules) to manage dependencies. +**Note:** Viper uses [Go Modules](https://go.dev/wiki/Modules) to manage dependencies. ## What is Viper? @@ -420,7 +420,7 @@ flags, or environment variables. Viper supports multiple hosts. To use, pass a list of endpoints separated by `;`. For example `http://127.0.0.1:4001;http://127.0.0.1:4002`. -Viper uses [crypt](https://github.com/bketelsen/crypt) to retrieve +Viper uses [crypt](https://github.com/sagikazarmark/crypt) to retrieve configuration from the K/V store, which means that you can store your configuration values encrypted and have them automatically decrypted if you have the correct gpg keyring. Encryption is optional. @@ -432,7 +432,7 @@ independently of it. K/V store. `crypt` defaults to etcd on http://127.0.0.1:4001. ```bash -$ go get github.com/bketelsen/crypt/bin/crypt +$ go get github.com/sagikazarmark/crypt/bin/crypt $ crypt set -plaintext /config/hugo.json /Users/hugo/settings/config.json ``` diff --git a/tools/vendor/github.com/spf13/viper/TROUBLESHOOTING.md b/tools/vendor/github.com/spf13/viper/TROUBLESHOOTING.md index c4e36c686..b68993d41 100644 --- a/tools/vendor/github.com/spf13/viper/TROUBLESHOOTING.md +++ b/tools/vendor/github.com/spf13/viper/TROUBLESHOOTING.md @@ -15,10 +15,10 @@ cannot find package "github.com/hashicorp/hcl/tree/hcl1" in any of: ``` As the error message suggests, Go tries to look up dependencies in `GOPATH` mode (as it's commonly called) from the `GOPATH`. -Viper opted to use [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. While in many cases the two methods are interchangeable, once a dependency releases new (major) versions, `GOPATH` mode is no longer able to decide which version to use, so it'll either use one that's already present or pick a version (usually the `master` branch). +Viper opted to use [Go Modules](https://go.dev/wiki/Modules) to manage its dependencies. While in many cases the two methods are interchangeable, once a dependency releases new (major) versions, `GOPATH` mode is no longer able to decide which version to use, so it'll either use one that's already present or pick a version (usually the `master` branch). The solution is easy: switch to using Go Modules. -Please refer to the [wiki](https://github.com/golang/go/wiki/Modules) on how to do that. +Please refer to the [wiki](https://go.dev/wiki/Modules) on how to do that. **tl;dr* `export GO111MODULE=on` diff --git a/tools/vendor/github.com/spf13/viper/flake.lock b/tools/vendor/github.com/spf13/viper/flake.lock index 78da51090..3840614fa 100644 --- a/tools/vendor/github.com/spf13/viper/flake.lock +++ b/tools/vendor/github.com/spf13/viper/flake.lock @@ -8,11 +8,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1687972261, - "narHash": "sha256-+mxvZfwMVoaZYETmuQWqTi/7T9UKoAE+WpdSQkOVJ2g=", + "lastModified": 1707817777, + "narHash": "sha256-vHyIs1OULQ3/91wD6xOiuayfI71JXALGA5KLnDKAcy0=", "owner": "cachix", "repo": "devenv", - "rev": "e85df562088573305e55906eaa964341f8cb0d9f", + "rev": "5a30b9e5ac7c6167e61b1f4193d5130bb9f8defa", "type": "github" }, "original": { @@ -42,11 +42,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1687762428, - "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=", + "lastModified": 1706830856, + "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836", + "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", "type": "github" }, "original": { @@ -56,12 +56,15 @@ } }, "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1685518550, + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", "type": "github" }, "original": { @@ -151,11 +154,11 @@ "nixpkgs-lib": { "locked": { "dir": "lib", - "lastModified": 1685564631, - "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=", + "lastModified": 1706550542, + "narHash": "sha256-UcsnCG6wx++23yeER4Hg18CXWbgNpqNXcHIo5/1Y+hc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a", + "rev": "97b17f32362e475016f942bbdfda4a4a72a8a652", "type": "github" }, "original": { @@ -184,27 +187,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1678872516, - "narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=", + "lastModified": 1685801374, + "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8", + "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-22.11", + "ref": "nixos-23.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1687886075, - "narHash": "sha256-PeayJDDDy+uw1Ats4moZnRdL1OFuZm1Tj+KiHlD67+o=", + "lastModified": 1707939175, + "narHash": "sha256-D1xan0lgxbmXDyzVqXTiSYHLmAMrMRdD+alKzEO/p3w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a565059a348422af5af9026b5174dc5c0dcefdae", + "rev": "f7e8132daca31b1e3859ac0fb49741754375ac3d", "type": "github" }, "original": { @@ -229,11 +232,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1686050334, - "narHash": "sha256-R0mczWjDzBpIvM3XXhO908X5e2CQqjyh/gFbwZk/7/Q=", + "lastModified": 1704725188, + "narHash": "sha256-qq8NbkhRZF1vVYQFt1s8Mbgo8knj+83+QlL5LBnYGpI=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "6881eb2ae5d8a3516e34714e7a90d9d95914c4dc", + "rev": "ea96f0c05924341c551a797aaba8126334c505d2", "type": "github" }, "original": { @@ -248,6 +251,21 @@ "flake-parts": "flake-parts", "nixpkgs": "nixpkgs_2" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/tools/vendor/github.com/spf13/viper/flake.nix b/tools/vendor/github.com/spf13/viper/flake.nix index 9b26c3fcf..0230668cf 100644 --- a/tools/vendor/github.com/spf13/viper/flake.nix +++ b/tools/vendor/github.com/spf13/viper/flake.nix @@ -20,6 +20,7 @@ default = { languages = { go.enable = true; + go.package = pkgs.go_1_22; }; pre-commit.hooks = { diff --git a/tools/vendor/github.com/spf13/viper/viper.go b/tools/vendor/github.com/spf13/viper/viper.go index 20eb4da17..da68d9944 100644 --- a/tools/vendor/github.com/spf13/viper/viper.go +++ b/tools/vendor/github.com/spf13/viper/viper.go @@ -624,7 +624,7 @@ func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error { // To retrieve a config file called myapp.json from /configs/myapp.json // you should set path to /configs and set config name (SetConfigName()) to // "myapp". -// Secure Remote Providers are implemented with github.com/bketelsen/crypt. +// Secure Remote Providers are implemented with github.com/sagikazarmark/crypt. func AddSecureRemoteProvider(provider, endpoint, path, secretkeyring string) error { return v.AddSecureRemoteProvider(provider, endpoint, path, secretkeyring) } @@ -1791,12 +1791,6 @@ func (v *Viper) writeConfig(filename string, force bool) error { return f.Sync() } -// Unmarshal a Reader into a map. -// Should probably be an unexported function. -func unmarshalReader(in io.Reader, c map[string]any) error { - return v.unmarshalReader(in, c) -} - func (v *Viper) unmarshalReader(in io.Reader, c map[string]any) error { buf := new(bytes.Buffer) buf.ReadFrom(in) diff --git a/tools/vendor/github.com/ulikunitz/xz/.gitignore b/tools/vendor/github.com/ulikunitz/xz/.gitignore deleted file mode 100644 index eb3d5f517..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# .gitignore - -TODO.html -README.html - -lzma/writer.txt -lzma/reader.txt - -cmd/gxz/gxz -cmd/xb/xb - -# test executables -*.test - -# profile files -*.out - -# vim swap file -.*.swp - -# executables on windows -*.exe - -# default compression test file -enwik8* - -# file generated by example -example.xz \ No newline at end of file diff --git a/tools/vendor/github.com/ulikunitz/xz/LICENSE b/tools/vendor/github.com/ulikunitz/xz/LICENSE deleted file mode 100644 index 8a7f0877d..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2014-2022 Ulrich Kunitz -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* My name, Ulrich Kunitz, may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/vendor/github.com/ulikunitz/xz/README.md b/tools/vendor/github.com/ulikunitz/xz/README.md deleted file mode 100644 index 554718521..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Package xz - -This Go language package supports the reading and writing of xz -compressed streams. It includes also a gxz command for compressing and -decompressing data. The package is completely written in Go and doesn't -have any dependency on any C code. - -The package is currently under development. There might be bugs and APIs -are not considered stable. At this time the package cannot compete with -the xz tool regarding compression speed and size. The algorithms there -have been developed over a long time and are highly optimized. However -there are a number of improvements planned and I'm very optimistic about -parallel compression and decompression. Stay tuned! - -## Using the API - -The following example program shows how to use the API. - -```go -package main - -import ( - "bytes" - "io" - "log" - "os" - - "github.com/ulikunitz/xz" -) - -func main() { - const text = "The quick brown fox jumps over the lazy dog.\n" - var buf bytes.Buffer - // compress text - w, err := xz.NewWriter(&buf) - if err != nil { - log.Fatalf("xz.NewWriter error %s", err) - } - if _, err := io.WriteString(w, text); err != nil { - log.Fatalf("WriteString error %s", err) - } - if err := w.Close(); err != nil { - log.Fatalf("w.Close error %s", err) - } - // decompress buffer and write output to stdout - r, err := xz.NewReader(&buf) - if err != nil { - log.Fatalf("NewReader error %s", err) - } - if _, err = io.Copy(os.Stdout, r); err != nil { - log.Fatalf("io.Copy error %s", err) - } -} -``` - -## Documentation - -You can find the full documentation at [pkg.go.dev](https://pkg.go.dev/github.com/ulikunitz/xz). - -## Using the gxz compression tool - -The package includes a gxz command line utility for compression and -decompression. - -Use following command for installation: - - $ go get github.com/ulikunitz/xz/cmd/gxz - -To test it call the following command. - - $ gxz bigfile - -After some time a much smaller file bigfile.xz will replace bigfile. -To decompress it use the following command. - - $ gxz -d bigfile.xz - diff --git a/tools/vendor/github.com/ulikunitz/xz/SECURITY.md b/tools/vendor/github.com/ulikunitz/xz/SECURITY.md deleted file mode 100644 index 5f7ec01b3..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/SECURITY.md +++ /dev/null @@ -1,10 +0,0 @@ -# Security Policy - -## Supported Versions - -Currently the last minor version v0.5.x is supported. - -## Reporting a Vulnerability - -Report a vulnerability by creating a Github issue at -. Expect a response in a week. diff --git a/tools/vendor/github.com/ulikunitz/xz/TODO.md b/tools/vendor/github.com/ulikunitz/xz/TODO.md deleted file mode 100644 index a3d6f1925..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/TODO.md +++ /dev/null @@ -1,372 +0,0 @@ -# TODO list - -## Release v0.5.x - -1. Support check flag in gxz command. - -## Release v0.6 - -1. Review encoder and check for lzma improvements under xz. -2. Fix binary tree matcher. -3. Compare compression ratio with xz tool using comparable parameters and optimize parameters -4. rename operation action and make it a simple type of size 8 -5. make maxMatches, wordSize parameters -6. stop searching after a certain length is found (parameter sweetLen) - -## Release v0.7 - -1. Optimize code -2. Do statistical analysis to get linear presets. -3. Test sync.Pool compatability for xz and lzma Writer and Reader -4. Fuzz optimized code. - -## Release v0.8 - -1. Support parallel go routines for writing and reading xz files. -2. Support a ReaderAt interface for xz files with small block sizes. -3. Improve compatibility between gxz and xz -4. Provide manual page for gxz - -## Release v0.9 - -1. Improve documentation -2. Fuzz again - -## Release v1.0 - -1. Full functioning gxz -2. Add godoc URL to README.md (godoc.org) -3. Resolve all issues. -4. Define release candidates. -5. Public announcement. - -## Package lzma - -### v0.6 - -* Rewrite Encoder into a simple greedy one-op-at-a-time encoder including - * simple scan at the dictionary head for the same byte - * use the killer byte (requiring matches to get longer, the first test should be the byte that would make the match longer) - -## Optimizations - -* There may be a lot of false sharing in lzma. State; check whether this can be improved by reorganizing the internal structure of it. - -* Check whether batching encoding and decoding improves speed. - -### DAG optimizations - -* Use full buffer to create minimal bit-length above range encoder. -* Might be too slow (see v0.4) - -### Different match finders - -* hashes with 2, 3 characters additional to 4 characters -* binary trees with 2-7 characters (uint64 as key, use uint32 as - - pointers into a an array) - -* rb-trees with 2-7 characters (uint64 as key, use uint32 as pointers - - into an array with bit-steeling for the colors) - -## Release Procedure - -* execute goch -l for all packages; probably with lower param like 0.5. -* check orthography with gospell -* Write release notes in doc/relnotes. -* Update README.md -* xb copyright . in xz directory to ensure all new files have Copyright header -* `VERSION= go generate github.com/ulikunitz/xz/...` to update version files -* Execute test for Linux/amd64, Linux/x86 and Windows/amd64. -* Update TODO.md - write short log entry -* `git checkout master && git merge dev` -* `git tag -a ` -* `git push` - -## Log - -### 2022-12-12 - -Matt Dantay (@bodgit) reported an issue with the LZMA reader. The implementation -returned an error if the dictionary size was less than 4096 byte, but the -recommendation stated the actual used window size should be set to 4096 byte in -that case. It actually was the pull request -[#52](https://github.com/ulikunitz/xz/pull/52). The new patch v0.5.11 will fix -it. - -### 2021-02-02 - -Mituo Heijo has fuzzed xz and found a bug in the function readIndexBody. The -function allocated a slice of records immediately after reading the value -without further checks. Sincex the number has been too large the make function -did panic. The fix is to check the number against the expected number of records -before allocating the records. - -### 2020-12-17 - -Release v0.5.9 fixes warnings, a typo and adds SECURITY.md. - -One fix is interesting. - -```go -const ( - a byte = 0x1 - b = 0x2 -) -``` - -The constants a and b don't have the same type. Correct is - -```go -const ( - a byte = 0x1 - b byte = 0x2 -) -``` - -### 2020-08-19 - -Release v0.5.8 fixes issue -[issue #35](https://github.com/ulikunitz/xz/issues/35). - -### 2020-02-24 - -Release v0.5.7 supports the check-ID None and fixes -[issue #27](https://github.com/ulikunitz/xz/issues/27). - -### 2019-02-20 - -Release v0.5.6 supports the go.mod file. - -### 2018-10-28 - -Release v0.5.5 fixes issues #19 observing ErrLimit outputs. - -### 2017-06-05 - -Release v0.5.4 fixes issues #15 of another problem with the padding size -check for the xz block header. I removed the check completely. - -### 2017-02-15 - -Release v0.5.3 fixes issue #12 regarding the decompression of an empty -XZ stream. Many thanks to Tomasz Kłak, who reported the issue. - -### 2016-12-02 - -Release v0.5.2 became necessary to allow the decoding of xz files with -4-byte padding in the block header. Many thanks to Greg, who reported -the issue. - -### 2016-07-23 - -Release v0.5.1 became necessary to fix problems with 32-bit platforms. -Many thanks to Bruno Brigas, who reported the issue. - -### 2016-07-04 - -Release v0.5 provides improvements to the compressor and provides support for -the decompression of xz files with multiple xz streams. - -### 2016-01-31 - -Another compression rate increase by checking the byte at length of the -best match first, before checking the whole prefix. This makes the -compressor even faster. We have now a large time budget to beat the -compression ratio of the xz tool. For enwik8 we have now over 40 seconds -to reduce the compressed file size for another 7 MiB. - -### 2016-01-30 - -I simplified the encoder. Speed and compression rate increased -dramatically. A high compression rate affects also the decompression -speed. The approach with the buffer and optimizing for operation -compression rate has not been successful. Going for the maximum length -appears to be the best approach. - -### 2016-01-28 - -The release v0.4 is ready. It provides a working xz implementation, -which is rather slow, but works and is interoperable with the xz tool. -It is an important milestone. - -### 2016-01-10 - -I have the first working implementation of an xz reader and writer. I'm -happy about reaching this milestone. - -### 2015-12-02 - -I'm now ready to implement xz because, I have a working LZMA2 -implementation. I decided today that v0.4 will use the slow encoder -using the operations buffer to be able to go back, if I intend to do so. - -### 2015-10-21 - -I have restarted the work on the library. While trying to implement -LZMA2, I discovered that I need to resimplify the encoder and decoder -functions. The option approach is too complicated. Using a limited byte -writer and not caring for written bytes at all and not to try to handle -uncompressed data simplifies the LZMA encoder and decoder much. -Processing uncompressed data and handling limits is a feature of the -LZMA2 format not of LZMA. - -I learned an interesting method from the LZO format. If the last copy is -too far away they are moving the head one 2 bytes and not 1 byte to -reduce processing times. - -### 2015-08-26 - -I have now reimplemented the lzma package. The code is reasonably fast, -but can still be optimized. The next step is to implement LZMA2 and then -xz. - -### 2015-07-05 - -Created release v0.3. The version is the foundation for a full xz -implementation that is the target of v0.4. - -### 2015-06-11 - -The gflag package has been developed because I couldn't use flag and -pflag for a fully compatible support of gzip's and lzma's options. It -seems to work now quite nicely. - -### 2015-06-05 - -The overflow issue was interesting to research, however Henry S. Warren -Jr. Hacker's Delight book was very helpful as usual and had the issue -explained perfectly. Fefe's information on his website was based on the -C FAQ and quite bad, because it didn't address the issue of -MININT == -MININT. - -### 2015-06-04 - -It has been a productive day. I improved the interface of lzma. Reader -and lzma. Writer and fixed the error handling. - -### 2015-06-01 - -By computing the bit length of the LZMA operations I was able to -improve the greedy algorithm implementation. By using an 8 MByte buffer -the compression rate was not as good as for xz but already better then -gzip default. - -Compression is currently slow, but this is something we will be able to -improve over time. - -### 2015-05-26 - -Checked the license of ogier/pflag. The binary lzmago binary should -include the license terms for the pflag library. - -I added the endorsement clause as used by Google for the Go sources the -LICENSE file. - -### 2015-05-22 - -The package lzb contains now the basic implementation for creating or -reading LZMA byte streams. It allows the support for the implementation -of the DAG-shortest-path algorithm for the compression function. - -### 2015-04-23 - -Completed yesterday the lzbase classes. I'm a little bit concerned that -using the components may require too much code, but on the other hand -there is a lot of flexibility. - -### 2015-04-22 - -Implemented Reader and Writer during the Bayern game against Porto. The -second half gave me enough time. - -### 2015-04-21 - -While showering today morning I discovered that the design for OpEncoder -and OpDecoder doesn't work, because encoding/decoding might depend on -the current status of the dictionary. This is not exactly the right way -to start the day. - -Therefore we need to keep the Reader and Writer design. This time around -we simplify it by ignoring size limits. These can be added by wrappers -around the Reader and Writer interfaces. The Parameters type isn't -needed anymore. - -However I will implement a ReaderState and WriterState type to use -static typing to ensure the right State object is combined with the -right lzbase. Reader and lzbase. Writer. - -As a start I have implemented ReaderState and WriterState to ensure -that the state for reading is only used by readers and WriterState only -used by Writers. - -### 2015-04-20 - -Today I implemented the OpDecoder and tested OpEncoder and OpDecoder. - -### 2015-04-08 - -Came up with a new simplified design for lzbase. I implemented already -the type State that replaces OpCodec. - -### 2015-04-06 - -The new lzma package is now fully usable and lzmago is using it now. The -old lzma package has been completely removed. - -### 2015-04-05 - -Implemented lzma. Reader and tested it. - -### 2015-04-04 - -Implemented baseReader by adapting code form lzma. Reader. - -### 2015-04-03 - -The opCodec has been copied yesterday to lzma2. opCodec has a high -number of dependencies on other files in lzma2. Therefore I had to copy -almost all files from lzma. - -### 2015-03-31 - -Removed only a TODO item. - -However in Francesco Campoy's presentation "Go for Javaneros -(Javaïstes?)" is the the idea that using an embedded field E, all the -methods of E will be defined on T. If E is an interface T satisfies E. - - - -I have never used this, but it seems to be a cool idea. - -### 2015-03-30 - -Finished the type writerDict and wrote a simple test. - -### 2015-03-25 - -I started to implement the writerDict. - -### 2015-03-24 - -After thinking long about the LZMA2 code and several false starts, I -have now a plan to create a self-sufficient lzma2 package that supports -the classic LZMA format as well as LZMA2. The core idea is to support a -baseReader and baseWriter type that support the basic LZMA stream -without any headers. Both types must support the reuse of dictionaries -and the opCodec. - -### 2015-01-10 - -1. Implemented simple lzmago tool -2. Tested tool against large 4.4G file - * compression worked correctly; tested decompression with lzma - * decompression hits a full buffer condition -3. Fixed a bug in the compressor and wrote a test for it -4. Executed full cycle for 4.4 GB file; performance can be improved ;-) - -### 2015-01-11 - -* Release v0.2 because of the working LZMA encoder and decoder diff --git a/tools/vendor/github.com/ulikunitz/xz/bits.go b/tools/vendor/github.com/ulikunitz/xz/bits.go deleted file mode 100644 index b30f1ec97..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/bits.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "io" -) - -// putUint32LE puts the little-endian representation of x into the first -// four bytes of p. -func putUint32LE(p []byte, x uint32) { - p[0] = byte(x) - p[1] = byte(x >> 8) - p[2] = byte(x >> 16) - p[3] = byte(x >> 24) -} - -// putUint64LE puts the little-endian representation of x into the first -// eight bytes of p. -func putUint64LE(p []byte, x uint64) { - p[0] = byte(x) - p[1] = byte(x >> 8) - p[2] = byte(x >> 16) - p[3] = byte(x >> 24) - p[4] = byte(x >> 32) - p[5] = byte(x >> 40) - p[6] = byte(x >> 48) - p[7] = byte(x >> 56) -} - -// uint32LE converts a little endian representation to an uint32 value. -func uint32LE(p []byte) uint32 { - return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | - uint32(p[3])<<24 -} - -// putUvarint puts a uvarint representation of x into the byte slice. -func putUvarint(p []byte, x uint64) int { - i := 0 - for x >= 0x80 { - p[i] = byte(x) | 0x80 - x >>= 7 - i++ - } - p[i] = byte(x) - return i + 1 -} - -// errOverflow indicates an overflow of the 64-bit unsigned integer. -var errOverflowU64 = errors.New("xz: uvarint overflows 64-bit unsigned integer") - -// readUvarint reads a uvarint from the given byte reader. -func readUvarint(r io.ByteReader) (x uint64, n int, err error) { - const maxUvarintLen = 10 - - var s uint - i := 0 - for { - b, err := r.ReadByte() - if err != nil { - return x, i, err - } - i++ - if i > maxUvarintLen { - return x, i, errOverflowU64 - } - if b < 0x80 { - if i == maxUvarintLen && b > 1 { - return x, i, errOverflowU64 - } - return x | uint64(b)< 0 { - k = 4 - k - } - return k -} - -/*** Header ***/ - -// headerMagic stores the magic bytes for the header -var headerMagic = []byte{0xfd, '7', 'z', 'X', 'Z', 0x00} - -// HeaderLen provides the length of the xz file header. -const HeaderLen = 12 - -// Constants for the checksum methods supported by xz. -const ( - None byte = 0x0 - CRC32 byte = 0x1 - CRC64 byte = 0x4 - SHA256 byte = 0xa -) - -// errInvalidFlags indicates that flags are invalid. -var errInvalidFlags = errors.New("xz: invalid flags") - -// verifyFlags returns the error errInvalidFlags if the value is -// invalid. -func verifyFlags(flags byte) error { - switch flags { - case None, CRC32, CRC64, SHA256: - return nil - default: - return errInvalidFlags - } -} - -// flagstrings maps flag values to strings. -var flagstrings = map[byte]string{ - None: "None", - CRC32: "CRC-32", - CRC64: "CRC-64", - SHA256: "SHA-256", -} - -// flagString returns the string representation for the given flags. -func flagString(flags byte) string { - s, ok := flagstrings[flags] - if !ok { - return "invalid" - } - return s -} - -// newHashFunc returns a function that creates hash instances for the -// hash method encoded in flags. -func newHashFunc(flags byte) (newHash func() hash.Hash, err error) { - switch flags { - case None: - newHash = newNoneHash - case CRC32: - newHash = newCRC32 - case CRC64: - newHash = newCRC64 - case SHA256: - newHash = sha256.New - default: - err = errInvalidFlags - } - return -} - -// header provides the actual content of the xz file header: the flags. -type header struct { - flags byte -} - -// Errors returned by readHeader. -var errHeaderMagic = errors.New("xz: invalid header magic bytes") - -// ValidHeader checks whether data is a correct xz file header. The -// length of data must be HeaderLen. -func ValidHeader(data []byte) bool { - var h header - err := h.UnmarshalBinary(data) - return err == nil -} - -// String returns a string representation of the flags. -func (h header) String() string { - return flagString(h.flags) -} - -// UnmarshalBinary reads header from the provided data slice. -func (h *header) UnmarshalBinary(data []byte) error { - // header length - if len(data) != HeaderLen { - return errors.New("xz: wrong file header length") - } - - // magic header - if !bytes.Equal(headerMagic, data[:6]) { - return errHeaderMagic - } - - // checksum - crc := crc32.NewIEEE() - crc.Write(data[6:8]) - if uint32LE(data[8:]) != crc.Sum32() { - return errors.New("xz: invalid checksum for file header") - } - - // stream flags - if data[6] != 0 { - return errInvalidFlags - } - flags := data[7] - if err := verifyFlags(flags); err != nil { - return err - } - - h.flags = flags - return nil -} - -// MarshalBinary generates the xz file header. -func (h *header) MarshalBinary() (data []byte, err error) { - if err = verifyFlags(h.flags); err != nil { - return nil, err - } - - data = make([]byte, 12) - copy(data, headerMagic) - data[7] = h.flags - - crc := crc32.NewIEEE() - crc.Write(data[6:8]) - putUint32LE(data[8:], crc.Sum32()) - - return data, nil -} - -/*** Footer ***/ - -// footerLen defines the length of the footer. -const footerLen = 12 - -// footerMagic contains the footer magic bytes. -var footerMagic = []byte{'Y', 'Z'} - -// footer represents the content of the xz file footer. -type footer struct { - indexSize int64 - flags byte -} - -// String prints a string representation of the footer structure. -func (f footer) String() string { - return fmt.Sprintf("%s index size %d", flagString(f.flags), f.indexSize) -} - -// Minimum and maximum for the size of the index (backward size). -const ( - minIndexSize = 4 - maxIndexSize = (1 << 32) * 4 -) - -// MarshalBinary converts footer values into an xz file footer. Note -// that the footer value is checked for correctness. -func (f *footer) MarshalBinary() (data []byte, err error) { - if err = verifyFlags(f.flags); err != nil { - return nil, err - } - if !(minIndexSize <= f.indexSize && f.indexSize <= maxIndexSize) { - return nil, errors.New("xz: index size out of range") - } - if f.indexSize%4 != 0 { - return nil, errors.New( - "xz: index size not aligned to four bytes") - } - - data = make([]byte, footerLen) - - // backward size (index size) - s := (f.indexSize / 4) - 1 - putUint32LE(data[4:], uint32(s)) - // flags - data[9] = f.flags - // footer magic - copy(data[10:], footerMagic) - - // CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[4:10]) - putUint32LE(data, crc.Sum32()) - - return data, nil -} - -// UnmarshalBinary sets the footer value by unmarshalling an xz file -// footer. -func (f *footer) UnmarshalBinary(data []byte) error { - if len(data) != footerLen { - return errors.New("xz: wrong footer length") - } - - // magic bytes - if !bytes.Equal(data[10:], footerMagic) { - return errors.New("xz: footer magic invalid") - } - - // CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[4:10]) - if uint32LE(data) != crc.Sum32() { - return errors.New("xz: footer checksum error") - } - - var g footer - // backward size (index size) - g.indexSize = (int64(uint32LE(data[4:])) + 1) * 4 - - // flags - if data[8] != 0 { - return errInvalidFlags - } - g.flags = data[9] - if err := verifyFlags(g.flags); err != nil { - return err - } - - *f = g - return nil -} - -/*** Block Header ***/ - -// blockHeader represents the content of an xz block header. -type blockHeader struct { - compressedSize int64 - uncompressedSize int64 - filters []filter -} - -// String converts the block header into a string. -func (h blockHeader) String() string { - var buf bytes.Buffer - first := true - if h.compressedSize >= 0 { - fmt.Fprintf(&buf, "compressed size %d", h.compressedSize) - first = false - } - if h.uncompressedSize >= 0 { - if !first { - buf.WriteString(" ") - } - fmt.Fprintf(&buf, "uncompressed size %d", h.uncompressedSize) - first = false - } - for _, f := range h.filters { - if !first { - buf.WriteString(" ") - } - fmt.Fprintf(&buf, "filter %s", f) - first = false - } - return buf.String() -} - -// Masks for the block flags. -const ( - filterCountMask = 0x03 - compressedSizePresent = 0x40 - uncompressedSizePresent = 0x80 - reservedBlockFlags = 0x3C -) - -// errIndexIndicator signals that an index indicator (0x00) has been found -// instead of an expected block header indicator. -var errIndexIndicator = errors.New("xz: found index indicator") - -// readBlockHeader reads the block header. -func readBlockHeader(r io.Reader) (h *blockHeader, n int, err error) { - var buf bytes.Buffer - buf.Grow(20) - - // block header size - z, err := io.CopyN(&buf, r, 1) - n = int(z) - if err != nil { - return nil, n, err - } - s := buf.Bytes()[0] - if s == 0 { - return nil, n, errIndexIndicator - } - - // read complete header - headerLen := (int(s) + 1) * 4 - buf.Grow(headerLen - 1) - z, err = io.CopyN(&buf, r, int64(headerLen-1)) - n += int(z) - if err != nil { - return nil, n, err - } - - // unmarshal block header - h = new(blockHeader) - if err = h.UnmarshalBinary(buf.Bytes()); err != nil { - return nil, n, err - } - - return h, n, nil -} - -// readSizeInBlockHeader reads the uncompressed or compressed size -// fields in the block header. The present value informs the function -// whether the respective field is actually present in the header. -func readSizeInBlockHeader(r io.ByteReader, present bool) (n int64, err error) { - if !present { - return -1, nil - } - x, _, err := readUvarint(r) - if err != nil { - return 0, err - } - if x >= 1<<63 { - return 0, errors.New("xz: size overflow in block header") - } - return int64(x), nil -} - -// UnmarshalBinary unmarshals the block header. -func (h *blockHeader) UnmarshalBinary(data []byte) error { - // Check header length - s := data[0] - if data[0] == 0 { - return errIndexIndicator - } - headerLen := (int(s) + 1) * 4 - if len(data) != headerLen { - return fmt.Errorf("xz: data length %d; want %d", len(data), - headerLen) - } - n := headerLen - 4 - - // Check CRC-32 - crc := crc32.NewIEEE() - crc.Write(data[:n]) - if crc.Sum32() != uint32LE(data[n:]) { - return errors.New("xz: checksum error for block header") - } - - // Block header flags - flags := data[1] - if flags&reservedBlockFlags != 0 { - return errors.New("xz: reserved block header flags set") - } - - r := bytes.NewReader(data[2:n]) - - // Compressed size - var err error - h.compressedSize, err = readSizeInBlockHeader( - r, flags&compressedSizePresent != 0) - if err != nil { - return err - } - - // Uncompressed size - h.uncompressedSize, err = readSizeInBlockHeader( - r, flags&uncompressedSizePresent != 0) - if err != nil { - return err - } - - h.filters, err = readFilters(r, int(flags&filterCountMask)+1) - if err != nil { - return err - } - - // Check padding - // Since headerLen is a multiple of 4 we don't need to check - // alignment. - k := r.Len() - // The standard spec says that the padding should have not more - // than 3 bytes. However we found paddings of 4 or 5 in the - // wild. See https://github.com/ulikunitz/xz/pull/11 and - // https://github.com/ulikunitz/xz/issues/15 - // - // The only reasonable approach seems to be to ignore the - // padding size. We still check that all padding bytes are zero. - if !allZeros(data[n-k : n]) { - return errPadding - } - return nil -} - -// MarshalBinary marshals the binary header. -func (h *blockHeader) MarshalBinary() (data []byte, err error) { - if !(minFilters <= len(h.filters) && len(h.filters) <= maxFilters) { - return nil, errors.New("xz: filter count wrong") - } - for i, f := range h.filters { - if i < len(h.filters)-1 { - if f.id() == lzmaFilterID { - return nil, errors.New( - "xz: LZMA2 filter is not the last") - } - } else { - // last filter - if f.id() != lzmaFilterID { - return nil, errors.New("xz: " + - "last filter must be the LZMA2 filter") - } - } - } - - var buf bytes.Buffer - // header size must set at the end - buf.WriteByte(0) - - // flags - flags := byte(len(h.filters) - 1) - if h.compressedSize >= 0 { - flags |= compressedSizePresent - } - if h.uncompressedSize >= 0 { - flags |= uncompressedSizePresent - } - buf.WriteByte(flags) - - p := make([]byte, 10) - if h.compressedSize >= 0 { - k := putUvarint(p, uint64(h.compressedSize)) - buf.Write(p[:k]) - } - if h.uncompressedSize >= 0 { - k := putUvarint(p, uint64(h.uncompressedSize)) - buf.Write(p[:k]) - } - - for _, f := range h.filters { - fp, err := f.MarshalBinary() - if err != nil { - return nil, err - } - buf.Write(fp) - } - - // padding - for i := padLen(int64(buf.Len())); i > 0; i-- { - buf.WriteByte(0) - } - - // crc place holder - buf.Write(p[:4]) - - data = buf.Bytes() - if len(data)%4 != 0 { - panic("data length not aligned") - } - s := len(data)/4 - 1 - if !(1 < s && s <= 255) { - panic("wrong block header size") - } - data[0] = byte(s) - - crc := crc32.NewIEEE() - crc.Write(data[:len(data)-4]) - putUint32LE(data[len(data)-4:], crc.Sum32()) - - return data, nil -} - -// Constants used for marshalling and unmarshalling filters in the xz -// block header. -const ( - minFilters = 1 - maxFilters = 4 - minReservedID = 1 << 62 -) - -// filter represents a filter in the block header. -type filter interface { - id() uint64 - UnmarshalBinary(data []byte) error - MarshalBinary() (data []byte, err error) - reader(r io.Reader, c *ReaderConfig) (fr io.Reader, err error) - writeCloser(w io.WriteCloser, c *WriterConfig) (fw io.WriteCloser, err error) - // filter must be last filter - last() bool -} - -// readFilter reads a block filter from the block header. At this point -// in time only the LZMA2 filter is supported. -func readFilter(r io.Reader) (f filter, err error) { - br := lzma.ByteReader(r) - - // index - id, _, err := readUvarint(br) - if err != nil { - return nil, err - } - - var data []byte - switch id { - case lzmaFilterID: - data = make([]byte, lzmaFilterLen) - data[0] = lzmaFilterID - if _, err = io.ReadFull(r, data[1:]); err != nil { - return nil, err - } - f = new(lzmaFilter) - default: - if id >= minReservedID { - return nil, errors.New( - "xz: reserved filter id in block stream header") - } - return nil, errors.New("xz: invalid filter id") - } - if err = f.UnmarshalBinary(data); err != nil { - return nil, err - } - return f, err -} - -// readFilters reads count filters. At this point in time only the count -// 1 is supported. -func readFilters(r io.Reader, count int) (filters []filter, err error) { - if count != 1 { - return nil, errors.New("xz: unsupported filter count") - } - f, err := readFilter(r) - if err != nil { - return nil, err - } - return []filter{f}, err -} - -/*** Index ***/ - -// record describes a block in the xz file index. -type record struct { - unpaddedSize int64 - uncompressedSize int64 -} - -// readRecord reads an index record. -func readRecord(r io.ByteReader) (rec record, n int, err error) { - u, k, err := readUvarint(r) - n += k - if err != nil { - return rec, n, err - } - rec.unpaddedSize = int64(u) - if rec.unpaddedSize < 0 { - return rec, n, errors.New("xz: unpadded size negative") - } - - u, k, err = readUvarint(r) - n += k - if err != nil { - return rec, n, err - } - rec.uncompressedSize = int64(u) - if rec.uncompressedSize < 0 { - return rec, n, errors.New("xz: uncompressed size negative") - } - - return rec, n, nil -} - -// MarshalBinary converts an index record in its binary encoding. -func (rec *record) MarshalBinary() (data []byte, err error) { - // maximum length of a uvarint is 10 - p := make([]byte, 20) - n := putUvarint(p, uint64(rec.unpaddedSize)) - n += putUvarint(p[n:], uint64(rec.uncompressedSize)) - return p[:n], nil -} - -// writeIndex writes the index, a sequence of records. -func writeIndex(w io.Writer, index []record) (n int64, err error) { - crc := crc32.NewIEEE() - mw := io.MultiWriter(w, crc) - - // index indicator - k, err := mw.Write([]byte{0}) - n += int64(k) - if err != nil { - return n, err - } - - // number of records - p := make([]byte, 10) - k = putUvarint(p, uint64(len(index))) - k, err = mw.Write(p[:k]) - n += int64(k) - if err != nil { - return n, err - } - - // list of records - for _, rec := range index { - p, err := rec.MarshalBinary() - if err != nil { - return n, err - } - k, err = mw.Write(p) - n += int64(k) - if err != nil { - return n, err - } - } - - // index padding - k, err = mw.Write(make([]byte, padLen(int64(n)))) - n += int64(k) - if err != nil { - return n, err - } - - // crc32 checksum - putUint32LE(p, crc.Sum32()) - k, err = w.Write(p[:4]) - n += int64(k) - - return n, err -} - -// readIndexBody reads the index from the reader. It assumes that the -// index indicator has already been read. -func readIndexBody(r io.Reader, expectedRecordLen int) (records []record, n int64, err error) { - crc := crc32.NewIEEE() - // index indicator - crc.Write([]byte{0}) - - br := lzma.ByteReader(io.TeeReader(r, crc)) - - // number of records - u, k, err := readUvarint(br) - n += int64(k) - if err != nil { - return nil, n, err - } - recLen := int(u) - if recLen < 0 || uint64(recLen) != u { - return nil, n, errors.New("xz: record number overflow") - } - if recLen != expectedRecordLen { - return nil, n, fmt.Errorf( - "xz: index length is %d; want %d", - recLen, expectedRecordLen) - } - - // list of records - records = make([]record, recLen) - for i := range records { - records[i], k, err = readRecord(br) - n += int64(k) - if err != nil { - return nil, n, err - } - } - - p := make([]byte, padLen(int64(n+1)), 4) - k, err = io.ReadFull(br.(io.Reader), p) - n += int64(k) - if err != nil { - return nil, n, err - } - if !allZeros(p) { - return nil, n, errors.New("xz: non-zero byte in index padding") - } - - // crc32 - s := crc.Sum32() - p = p[:4] - k, err = io.ReadFull(br.(io.Reader), p) - n += int64(k) - if err != nil { - return records, n, err - } - if uint32LE(p) != s { - return nil, n, errors.New("xz: wrong checksum for index") - } - - return records, n, nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/fox-check-none.xz b/tools/vendor/github.com/ulikunitz/xz/fox-check-none.xz deleted file mode 100644 index 46043f7dc89b610dc3badb9db3426620c4c97462..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmexsUKJ6=z`*cd=%ynRgCe6CkX@qxbTK1?PDnLRM*R tL9s%9S!$6&2~avGv8qxbB|lw{3#g5Ofzej?!NQIFY(?{`7{LOOQ2>-O93KDx diff --git a/tools/vendor/github.com/ulikunitz/xz/fox.xz b/tools/vendor/github.com/ulikunitz/xz/fox.xz deleted file mode 100644 index 4b820bd5a16e83fe5db4fb315639a4337f862483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmexsUKJ6=z`*kC+7>q^21Q0O1_p)_{ill=8FWH2QWXkIGn2Cwl8W-n^AytZD-^Oy za|?dFO$zmVVdxt0+m!4eq- E0K@hlng9R* diff --git a/tools/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go b/tools/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go deleted file mode 100644 index dae159db5..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// CyclicPoly provides a cyclic polynomial rolling hash. -type CyclicPoly struct { - h uint64 - p []uint64 - i int -} - -// ror rotates the unsigned 64-bit integer to right. The argument s must be -// less than 64. -func ror(x uint64, s uint) uint64 { - return (x >> s) | (x << (64 - s)) -} - -// NewCyclicPoly creates a new instance of the CyclicPoly structure. The -// argument n gives the number of bytes for which a hash will be executed. -// This number must be positive; the method panics if this isn't the case. -func NewCyclicPoly(n int) *CyclicPoly { - if n < 1 { - panic("argument n must be positive") - } - return &CyclicPoly{p: make([]uint64, 0, n)} -} - -// Len returns the length of the byte sequence for which a hash is generated. -func (r *CyclicPoly) Len() int { - return cap(r.p) -} - -// RollByte hashes the next byte and returns a hash value. The complete becomes -// available after at least Len() bytes have been hashed. -func (r *CyclicPoly) RollByte(x byte) uint64 { - y := hash[x] - if len(r.p) < cap(r.p) { - r.h = ror(r.h, 1) ^ y - r.p = append(r.p, y) - } else { - r.h ^= ror(r.p[r.i], uint(cap(r.p)-1)) - r.h = ror(r.h, 1) ^ y - r.p[r.i] = y - r.i = (r.i + 1) % cap(r.p) - } - return r.h -} - -// Stores the hash for the individual bytes. -var hash = [256]uint64{ - 0x2e4fc3f904065142, 0xc790984cfbc99527, - 0x879f95eb8c62f187, 0x3b61be86b5021ef2, - 0x65a896a04196f0a5, 0xc5b307b80470b59e, - 0xd3bff376a70df14b, 0xc332f04f0b3f1701, - 0x753b5f0e9abf3e0d, 0xb41538fdfe66ef53, - 0x1906a10c2c1c0208, 0xfb0c712a03421c0d, - 0x38be311a65c9552b, 0xfee7ee4ca6445c7e, - 0x71aadeded184f21e, 0xd73426fccda23b2d, - 0x29773fb5fb9600b5, 0xce410261cd32981a, - 0xfe2848b3c62dbc2d, 0x459eaaff6e43e11c, - 0xc13e35fc9c73a887, 0xf30ed5c201e76dbc, - 0xa5f10b3910482cea, 0x2945d59be02dfaad, - 0x06ee334ff70571b5, 0xbabf9d8070f44380, - 0xee3e2e9912ffd27c, 0x2a7118d1ea6b8ea7, - 0x26183cb9f7b1664c, 0xea71dac7da068f21, - 0xea92eca5bd1d0bb7, 0x415595862defcd75, - 0x248a386023c60648, 0x9cf021ab284b3c8a, - 0xfc9372df02870f6c, 0x2b92d693eeb3b3fc, - 0x73e799d139dc6975, 0x7b15ae312486363c, - 0xb70e5454a2239c80, 0x208e3fb31d3b2263, - 0x01f563cabb930f44, 0x2ac4533d2a3240d8, - 0x84231ed1064f6f7c, 0xa9f020977c2a6d19, - 0x213c227271c20122, 0x09fe8a9a0a03d07a, - 0x4236dc75bcaf910c, 0x460a8b2bead8f17e, - 0xd9b27be1aa07055f, 0xd202d5dc4b11c33e, - 0x70adb010543bea12, 0xcdae938f7ea6f579, - 0x3f3d870208672f4d, 0x8e6ccbce9d349536, - 0xe4c0871a389095ae, 0xf5f2a49152bca080, - 0x9a43f9b97269934e, 0xc17b3753cb6f475c, - 0xd56d941e8e206bd4, 0xac0a4f3e525eda00, - 0xa06d5a011912a550, 0x5537ed19537ad1df, - 0xa32fe713d611449d, 0x2a1d05b47c3b579f, - 0x991d02dbd30a2a52, 0x39e91e7e28f93eb0, - 0x40d06adb3e92c9ac, 0x9b9d3afde1c77c97, - 0x9a3f3f41c02c616f, 0x22ecd4ba00f60c44, - 0x0b63d5d801708420, 0x8f227ca8f37ffaec, - 0x0256278670887c24, 0x107e14877dbf540b, - 0x32c19f2786ac1c05, 0x1df5b12bb4bc9c61, - 0xc0cac129d0d4c4e2, 0x9fdb52ee9800b001, - 0x31f601d5d31c48c4, 0x72ff3c0928bcaec7, - 0xd99264421147eb03, 0x535a2d6d38aefcfe, - 0x6ba8b4454a916237, 0xfa39366eaae4719c, - 0x10f00fd7bbb24b6f, 0x5bd23185c76c84d4, - 0xb22c3d7e1b00d33f, 0x3efc20aa6bc830a8, - 0xd61c2503fe639144, 0x30ce625441eb92d3, - 0xe5d34cf359e93100, 0xa8e5aa13f2b9f7a5, - 0x5c2b8d851ca254a6, 0x68fb6c5e8b0d5fdf, - 0xc7ea4872c96b83ae, 0x6dd5d376f4392382, - 0x1be88681aaa9792f, 0xfef465ee1b6c10d9, - 0x1f98b65ed43fcb2e, 0x4d1ca11eb6e9a9c9, - 0x7808e902b3857d0b, 0x171c9c4ea4607972, - 0x58d66274850146df, 0x42b311c10d3981d1, - 0x647fa8c621c41a4c, 0xf472771c66ddfedc, - 0x338d27e3f847b46b, 0x6402ce3da97545ce, - 0x5162db616fc38638, 0x9c83be97bc22a50e, - 0x2d3d7478a78d5e72, 0xe621a9b938fd5397, - 0x9454614eb0f81c45, 0x395fb6e742ed39b6, - 0x77dd9179d06037bf, 0xc478d0fee4d2656d, - 0x35d9d6cb772007af, 0x83a56e92c883f0f6, - 0x27937453250c00a1, 0x27bd6ebc3a46a97d, - 0x9f543bf784342d51, 0xd158f38c48b0ed52, - 0x8dd8537c045f66b4, 0x846a57230226f6d5, - 0x6b13939e0c4e7cdf, 0xfca25425d8176758, - 0x92e5fc6cd52788e6, 0x9992e13d7a739170, - 0x518246f7a199e8ea, 0xf104c2a71b9979c7, - 0x86b3ffaabea4768f, 0x6388061cf3e351ad, - 0x09d9b5295de5bbb5, 0x38bf1638c2599e92, - 0x1d759846499e148d, 0x4c0ff015e5f96ef4, - 0xa41a94cfa270f565, 0x42d76f9cb2326c0b, - 0x0cf385dd3c9c23ba, 0x0508a6c7508d6e7a, - 0x337523aabbe6cf8d, 0x646bb14001d42b12, - 0xc178729d138adc74, 0xf900ef4491f24086, - 0xee1a90d334bb5ac4, 0x9755c92247301a50, - 0xb999bf7c4ff1b610, 0x6aeeb2f3b21e8fc9, - 0x0fa8084cf91ac6ff, 0x10d226cf136e6189, - 0xd302057a07d4fb21, 0x5f03800e20a0fcc3, - 0x80118d4ae46bd210, 0x58ab61a522843733, - 0x51edd575c5432a4b, 0x94ee6ff67f9197f7, - 0x765669e0e5e8157b, 0xa5347830737132f0, - 0x3ba485a69f01510c, 0x0b247d7b957a01c3, - 0x1b3d63449fd807dc, 0x0fdc4721c30ad743, - 0x8b535ed3829b2b14, 0xee41d0cad65d232c, - 0xe6a99ed97a6a982f, 0x65ac6194c202003d, - 0x692accf3a70573eb, 0xcc3c02c3e200d5af, - 0x0d419e8b325914a3, 0x320f160f42c25e40, - 0x00710d647a51fe7a, 0x3c947692330aed60, - 0x9288aa280d355a7a, 0xa1806a9b791d1696, - 0x5d60e38496763da1, 0x6c69e22e613fd0f4, - 0x977fc2a5aadffb17, 0xfb7bd063fc5a94ba, - 0x460c17992cbaece1, 0xf7822c5444d3297f, - 0x344a9790c69b74aa, 0xb80a42e6cae09dce, - 0x1b1361eaf2b1e757, 0xd84c1e758e236f01, - 0x88e0b7be347627cc, 0x45246009b7a99490, - 0x8011c6dd3fe50472, 0xc341d682bffb99d7, - 0x2511be93808e2d15, 0xd5bc13d7fd739840, - 0x2a3cd030679ae1ec, 0x8ad9898a4b9ee157, - 0x3245fef0a8eaf521, 0x3d6d8dbbb427d2b0, - 0x1ed146d8968b3981, 0x0c6a28bf7d45f3fc, - 0x4a1fd3dbcee3c561, 0x4210ff6a476bf67e, - 0xa559cce0d9199aac, 0xde39d47ef3723380, - 0xe5b69d848ce42e35, 0xefa24296f8e79f52, - 0x70190b59db9a5afc, 0x26f166cdb211e7bf, - 0x4deaf2df3c6b8ef5, 0xf171dbdd670f1017, - 0xb9059b05e9420d90, 0x2f0da855c9388754, - 0x611d5e9ab77949cc, 0x2912038ac01163f4, - 0x0231df50402b2fba, 0x45660fc4f3245f58, - 0xb91cc97c7c8dac50, 0xb72d2aafe4953427, - 0xfa6463f87e813d6b, 0x4515f7ee95d5c6a2, - 0x1310e1c1a48d21c3, 0xad48a7810cdd8544, - 0x4d5bdfefd5c9e631, 0xa43ed43f1fdcb7de, - 0xe70cfc8fe1ee9626, 0xef4711b0d8dda442, - 0xb80dd9bd4dab6c93, 0xa23be08d31ba4d93, - 0x9b37db9d0335a39c, 0x494b6f870f5cfebc, - 0x6d1b3c1149dda943, 0x372c943a518c1093, - 0xad27af45e77c09c4, 0x3b6f92b646044604, - 0xac2917909f5fcf4f, 0x2069a60e977e5557, - 0x353a469e71014de5, 0x24be356281f55c15, - 0x2b6d710ba8e9adea, 0x404ad1751c749c29, - 0xed7311bf23d7f185, 0xba4f6976b4acc43e, - 0x32d7198d2bc39000, 0xee667019014d6e01, - 0x494ef3e128d14c83, 0x1f95a152baecd6be, - 0x201648dff1f483a5, 0x68c28550c8384af6, - 0x5fc834a6824a7f48, 0x7cd06cb7365eaf28, - 0xd82bbd95e9b30909, 0x234f0d1694c53f6d, - 0xd2fb7f4a96d83f4a, 0xff0d5da83acac05e, - 0xf8f6b97f5585080a, 0x74236084be57b95b, - 0xa25e40c03bbc36ad, 0x6b6e5c14ce88465b, - 0x4378ffe93e1528c5, 0x94ca92a17118e2d2, -} diff --git a/tools/vendor/github.com/ulikunitz/xz/internal/hash/doc.go b/tools/vendor/github.com/ulikunitz/xz/internal/hash/doc.go deleted file mode 100644 index b4cf8b75e..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/internal/hash/doc.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -/* -Package hash provides rolling hashes. - -Rolling hashes have to be used for maintaining the positions of n-byte -sequences in the dictionary buffer. - -The package provides currently the Rabin-Karp rolling hash and a Cyclic -Polynomial hash. Both support the Hashes method to be used with an interface. -*/ -package hash diff --git a/tools/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go b/tools/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go deleted file mode 100644 index 5322342ee..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// A is the default constant for Robin-Karp rolling hash. This is a random -// prime. -const A = 0x97b548add41d5da1 - -// RabinKarp supports the computation of a rolling hash. -type RabinKarp struct { - A uint64 - // a^n - aOldest uint64 - h uint64 - p []byte - i int -} - -// NewRabinKarp creates a new RabinKarp value. The argument n defines the -// length of the byte sequence to be hashed. The default constant will will be -// used. -func NewRabinKarp(n int) *RabinKarp { - return NewRabinKarpConst(n, A) -} - -// NewRabinKarpConst creates a new RabinKarp value. The argument n defines the -// length of the byte sequence to be hashed. The argument a provides the -// constant used to compute the hash. -func NewRabinKarpConst(n int, a uint64) *RabinKarp { - if n <= 0 { - panic("number of bytes n must be positive") - } - aOldest := uint64(1) - // There are faster methods. For the small n required by the LZMA - // compressor O(n) is sufficient. - for i := 0; i < n; i++ { - aOldest *= a - } - return &RabinKarp{ - A: a, aOldest: aOldest, - p: make([]byte, 0, n), - } -} - -// Len returns the length of the byte sequence. -func (r *RabinKarp) Len() int { - return cap(r.p) -} - -// RollByte computes the hash after x has been added. -func (r *RabinKarp) RollByte(x byte) uint64 { - if len(r.p) < cap(r.p) { - r.h += uint64(x) - r.h *= r.A - r.p = append(r.p, x) - } else { - r.h -= uint64(r.p[r.i]) * r.aOldest - r.h += uint64(x) - r.h *= r.A - r.p[r.i] = x - r.i = (r.i + 1) % cap(r.p) - } - return r.h -} diff --git a/tools/vendor/github.com/ulikunitz/xz/internal/hash/roller.go b/tools/vendor/github.com/ulikunitz/xz/internal/hash/roller.go deleted file mode 100644 index a98983356..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/internal/hash/roller.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package hash - -// Roller provides an interface for rolling hashes. The hash value will become -// valid after hash has been called Len times. -type Roller interface { - Len() int - RollByte(x byte) uint64 -} - -// Hashes computes all hash values for the array p. Note that the state of the -// roller is changed. -func Hashes(r Roller, p []byte) []uint64 { - n := r.Len() - if len(p) < n { - return nil - } - h := make([]uint64, len(p)-n+1) - for i := 0; i < n-1; i++ { - r.RollByte(p[i]) - } - for i := range h { - h[i] = r.RollByte(p[i+n-1]) - } - return h -} diff --git a/tools/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go b/tools/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go deleted file mode 100644 index f4627ea11..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package xlog provides a simple logging package that allows to disable -// certain message categories. It defines a type, Logger, with multiple -// methods for formatting output. The package has also a predefined -// 'standard' Logger accessible through helper function Print[f|ln], -// Fatal[f|ln], Panic[f|ln], Warn[f|ln], Print[f|ln] and Debug[f|ln] -// that are easier to use then creating a Logger manually. That logger -// writes to standard error and prints the date and time of each logged -// message, which can be configured using the function SetFlags. -// -// The Fatal functions call os.Exit(1) after the message is output -// unless not suppressed by the flags. The Panic functions call panic -// after the writing the log message unless suppressed. -package xlog - -import ( - "fmt" - "io" - "os" - "runtime" - "sync" - "time" -) - -// The flags define what information is prefixed to each log entry -// generated by the Logger. The Lno* versions allow the suppression of -// specific output. The bits are or'ed together to control what will be -// printed. There is no control over the order of the items printed and -// the format. The full format is: -// -// 2009-01-23 01:23:23.123123 /a/b/c/d.go:23: message -const ( - Ldate = 1 << iota // the date: 2009-01-23 - Ltime // the time: 01:23:23 - Lmicroseconds // microsecond resolution: 01:23:23.123123 - Llongfile // full file name and line number: /a/b/c/d.go:23 - Lshortfile // final file name element and line number: d.go:23 - Lnopanic // suppresses output from Panic[f|ln] but not the panic call - Lnofatal // suppresses output from Fatal[f|ln] but not the exit - Lnowarn // suppresses output from Warn[f|ln] - Lnoprint // suppresses output from Print[f|ln] - Lnodebug // suppresses output from Debug[f|ln] - // initial values for the standard logger - Lstdflags = Ldate | Ltime | Lnodebug -) - -// A Logger represents an active logging object that generates lines of -// output to an io.Writer. Each logging operation if not suppressed -// makes a single call to the Writer's Write method. A Logger can be -// used simultaneously from multiple goroutines; it guarantees to -// serialize access to the Writer. -type Logger struct { - mu sync.Mutex // ensures atomic writes; and protects the following - // fields - prefix string // prefix to write at beginning of each line - flag int // properties - out io.Writer // destination for output - buf []byte // for accumulating text to write -} - -// New creates a new Logger. The out argument sets the destination to -// which the log output will be written. The prefix appears at the -// beginning of each log line. The flag argument defines the logging -// properties. -func New(out io.Writer, prefix string, flag int) *Logger { - return &Logger{out: out, prefix: prefix, flag: flag} -} - -// std is the standard logger used by the package scope functions. -var std = New(os.Stderr, "", Lstdflags) - -// itoa converts the integer to ASCII. A negative widths will avoid -// zero-padding. The function supports only non-negative integers. -func itoa(buf *[]byte, i int, wid int) { - var u = uint(i) - if u == 0 && wid <= 1 { - *buf = append(*buf, '0') - return - } - var b [32]byte - bp := len(b) - for ; u > 0 || wid > 0; u /= 10 { - bp-- - wid-- - b[bp] = byte(u%10) + '0' - } - *buf = append(*buf, b[bp:]...) -} - -// formatHeader puts the header into the buf field of the buffer. -func (l *Logger) formatHeader(t time.Time, file string, line int) { - l.buf = append(l.buf, l.prefix...) - if l.flag&(Ldate|Ltime|Lmicroseconds) != 0 { - if l.flag&Ldate != 0 { - year, month, day := t.Date() - itoa(&l.buf, year, 4) - l.buf = append(l.buf, '-') - itoa(&l.buf, int(month), 2) - l.buf = append(l.buf, '-') - itoa(&l.buf, day, 2) - l.buf = append(l.buf, ' ') - } - if l.flag&(Ltime|Lmicroseconds) != 0 { - hour, min, sec := t.Clock() - itoa(&l.buf, hour, 2) - l.buf = append(l.buf, ':') - itoa(&l.buf, min, 2) - l.buf = append(l.buf, ':') - itoa(&l.buf, sec, 2) - if l.flag&Lmicroseconds != 0 { - l.buf = append(l.buf, '.') - itoa(&l.buf, t.Nanosecond()/1e3, 6) - } - l.buf = append(l.buf, ' ') - } - } - if l.flag&(Lshortfile|Llongfile) != 0 { - if l.flag&Lshortfile != 0 { - short := file - for i := len(file) - 1; i > 0; i-- { - if file[i] == '/' { - short = file[i+1:] - break - } - } - file = short - } - l.buf = append(l.buf, file...) - l.buf = append(l.buf, ':') - itoa(&l.buf, line, -1) - l.buf = append(l.buf, ": "...) - } -} - -func (l *Logger) output(calldepth int, now time.Time, s string) error { - var file string - var line int - if l.flag&(Lshortfile|Llongfile) != 0 { - l.mu.Unlock() - var ok bool - _, file, line, ok = runtime.Caller(calldepth) - if !ok { - file = "???" - line = 0 - } - l.mu.Lock() - } - l.buf = l.buf[:0] - l.formatHeader(now, file, line) - l.buf = append(l.buf, s...) - if len(s) == 0 || s[len(s)-1] != '\n' { - l.buf = append(l.buf, '\n') - } - _, err := l.out.Write(l.buf) - return err -} - -// Output writes the string s with the header controlled by the flags to -// the l.out writer. A newline will be appended if s doesn't end in a -// newline. Calldepth is used to recover the PC, although all current -// calls of Output use the call depth 2. Access to the function is serialized. -func (l *Logger) Output(calldepth, noflag int, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprint(v...) - return l.output(calldepth+1, now, s) -} - -// Outputf works like output but formats the output like Printf. -func (l *Logger) Outputf(calldepth int, noflag int, format string, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprintf(format, v...) - return l.output(calldepth+1, now, s) -} - -// Outputln works like output but formats the output like Println. -func (l *Logger) Outputln(calldepth int, noflag int, v ...interface{}) error { - now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() - if l.flag&noflag != 0 { - return nil - } - s := fmt.Sprintln(v...) - return l.output(calldepth+1, now, s) -} - -// Panic prints the message like Print and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panic(v ...interface{}) { - l.Output(2, Lnopanic, v...) - s := fmt.Sprint(v...) - panic(s) -} - -// Panic prints the message like Print and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panic(v ...interface{}) { - std.Output(2, Lnopanic, v...) - s := fmt.Sprint(v...) - panic(s) -} - -// Panicf prints the message like Printf and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panicf(format string, v ...interface{}) { - l.Outputf(2, Lnopanic, format, v...) - s := fmt.Sprintf(format, v...) - panic(s) -} - -// Panicf prints the message like Printf and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panicf(format string, v ...interface{}) { - std.Outputf(2, Lnopanic, format, v...) - s := fmt.Sprintf(format, v...) - panic(s) -} - -// Panicln prints the message like Println and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func (l *Logger) Panicln(v ...interface{}) { - l.Outputln(2, Lnopanic, v...) - s := fmt.Sprintln(v...) - panic(s) -} - -// Panicln prints the message like Println and calls panic. The printing -// might be suppressed by the flag Lnopanic. -func Panicln(v ...interface{}) { - std.Outputln(2, Lnopanic, v...) - s := fmt.Sprintln(v...) - panic(s) -} - -// Fatal prints the message like Print and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatal(v ...interface{}) { - l.Output(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatal prints the message like Print and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatal(v ...interface{}) { - std.Output(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatalf prints the message like Printf and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatalf(format string, v ...interface{}) { - l.Outputf(2, Lnofatal, format, v...) - os.Exit(1) -} - -// Fatalf prints the message like Printf and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatalf(format string, v ...interface{}) { - std.Outputf(2, Lnofatal, format, v...) - os.Exit(1) -} - -// Fatalln prints the message like Println and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func (l *Logger) Fatalln(format string, v ...interface{}) { - l.Outputln(2, Lnofatal, v...) - os.Exit(1) -} - -// Fatalln prints the message like Println and calls os.Exit(1). The -// printing might be suppressed by the flag Lnofatal. -func Fatalln(format string, v ...interface{}) { - std.Outputln(2, Lnofatal, v...) - os.Exit(1) -} - -// Warn prints the message like Print. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warn(v ...interface{}) { - l.Output(2, Lnowarn, v...) -} - -// Warn prints the message like Print. The printing might be suppressed -// by the flag Lnowarn. -func Warn(v ...interface{}) { - std.Output(2, Lnowarn, v...) -} - -// Warnf prints the message like Printf. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warnf(format string, v ...interface{}) { - l.Outputf(2, Lnowarn, format, v...) -} - -// Warnf prints the message like Printf. The printing might be suppressed -// by the flag Lnowarn. -func Warnf(format string, v ...interface{}) { - std.Outputf(2, Lnowarn, format, v...) -} - -// Warnln prints the message like Println. The printing might be suppressed -// by the flag Lnowarn. -func (l *Logger) Warnln(v ...interface{}) { - l.Outputln(2, Lnowarn, v...) -} - -// Warnln prints the message like Println. The printing might be suppressed -// by the flag Lnowarn. -func Warnln(v ...interface{}) { - std.Outputln(2, Lnowarn, v...) -} - -// Print prints the message like fmt.Print. The printing might be suppressed -// by the flag Lnoprint. -func (l *Logger) Print(v ...interface{}) { - l.Output(2, Lnoprint, v...) -} - -// Print prints the message like fmt.Print. The printing might be suppressed -// by the flag Lnoprint. -func Print(v ...interface{}) { - std.Output(2, Lnoprint, v...) -} - -// Printf prints the message like fmt.Printf. The printing might be suppressed -// by the flag Lnoprint. -func (l *Logger) Printf(format string, v ...interface{}) { - l.Outputf(2, Lnoprint, format, v...) -} - -// Printf prints the message like fmt.Printf. The printing might be suppressed -// by the flag Lnoprint. -func Printf(format string, v ...interface{}) { - std.Outputf(2, Lnoprint, format, v...) -} - -// Println prints the message like fmt.Println. The printing might be -// suppressed by the flag Lnoprint. -func (l *Logger) Println(v ...interface{}) { - l.Outputln(2, Lnoprint, v...) -} - -// Println prints the message like fmt.Println. The printing might be -// suppressed by the flag Lnoprint. -func Println(v ...interface{}) { - std.Outputln(2, Lnoprint, v...) -} - -// Debug prints the message like Print. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debug(v ...interface{}) { - l.Output(2, Lnodebug, v...) -} - -// Debug prints the message like Print. The printing might be suppressed -// by the flag Lnodebug. -func Debug(v ...interface{}) { - std.Output(2, Lnodebug, v...) -} - -// Debugf prints the message like Printf. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debugf(format string, v ...interface{}) { - l.Outputf(2, Lnodebug, format, v...) -} - -// Debugf prints the message like Printf. The printing might be suppressed -// by the flag Lnodebug. -func Debugf(format string, v ...interface{}) { - std.Outputf(2, Lnodebug, format, v...) -} - -// Debugln prints the message like Println. The printing might be suppressed -// by the flag Lnodebug. -func (l *Logger) Debugln(v ...interface{}) { - l.Outputln(2, Lnodebug, v...) -} - -// Debugln prints the message like Println. The printing might be suppressed -// by the flag Lnodebug. -func Debugln(v ...interface{}) { - std.Outputln(2, Lnodebug, v...) -} - -// Flags returns the current flags used by the logger. -func (l *Logger) Flags() int { - l.mu.Lock() - defer l.mu.Unlock() - return l.flag -} - -// Flags returns the current flags used by the standard logger. -func Flags() int { - return std.Flags() -} - -// SetFlags sets the flags of the logger. -func (l *Logger) SetFlags(flag int) { - l.mu.Lock() - defer l.mu.Unlock() - l.flag = flag -} - -// SetFlags sets the flags for the standard logger. -func SetFlags(flag int) { - std.SetFlags(flag) -} - -// Prefix returns the prefix used by the logger. -func (l *Logger) Prefix() string { - l.mu.Lock() - defer l.mu.Unlock() - return l.prefix -} - -// Prefix returns the prefix used by the standard logger of the package. -func Prefix() string { - return std.Prefix() -} - -// SetPrefix sets the prefix for the logger. -func (l *Logger) SetPrefix(prefix string) { - l.mu.Lock() - defer l.mu.Unlock() - l.prefix = prefix -} - -// SetPrefix sets the prefix of the standard logger of the package. -func SetPrefix(prefix string) { - std.SetPrefix(prefix) -} - -// SetOutput sets the output of the logger. -func (l *Logger) SetOutput(w io.Writer) { - l.mu.Lock() - defer l.mu.Unlock() - l.out = w -} - -// SetOutput sets the output for the standard logger of the package. -func SetOutput(w io.Writer) { - std.SetOutput(w) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/bintree.go b/tools/vendor/github.com/ulikunitz/xz/lzma/bintree.go deleted file mode 100644 index 2b39da6f7..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/bintree.go +++ /dev/null @@ -1,522 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "unicode" -) - -// node represents a node in the binary tree. -type node struct { - // x is the search value - x uint32 - // p parent node - p uint32 - // l left child - l uint32 - // r right child - r uint32 -} - -// wordLen is the number of bytes represented by the v field of a node. -const wordLen = 4 - -// binTree supports the identification of the next operation based on a -// binary tree. -// -// Nodes will be identified by their index into the ring buffer. -type binTree struct { - dict *encoderDict - // ring buffer of nodes - node []node - // absolute offset of the entry for the next node. Position 4 - // byte larger. - hoff int64 - // front position in the node ring buffer - front uint32 - // index of the root node - root uint32 - // current x value - x uint32 - // preallocated array - data []byte -} - -// null represents the nonexistent index. We can't use zero because it -// would always exist or we would need to decrease the index for each -// reference. -const null uint32 = 1<<32 - 1 - -// newBinTree initializes the binTree structure. The capacity defines -// the size of the buffer and defines the maximum distance for which -// matches will be found. -func newBinTree(capacity int) (t *binTree, err error) { - if capacity < 1 { - return nil, errors.New( - "newBinTree: capacity must be larger than zero") - } - if int64(capacity) >= int64(null) { - return nil, errors.New( - "newBinTree: capacity must less 2^{32}-1") - } - t = &binTree{ - node: make([]node, capacity), - hoff: -int64(wordLen), - root: null, - data: make([]byte, maxMatchLen), - } - return t, nil -} - -func (t *binTree) SetDict(d *encoderDict) { t.dict = d } - -// WriteByte writes a single byte into the binary tree. -func (t *binTree) WriteByte(c byte) error { - t.x = (t.x << 8) | uint32(c) - t.hoff++ - if t.hoff < 0 { - return nil - } - v := t.front - if int64(v) < t.hoff { - // We are overwriting old nodes stored in the tree. - t.remove(v) - } - t.node[v].x = t.x - t.add(v) - t.front++ - if int64(t.front) >= int64(len(t.node)) { - t.front = 0 - } - return nil -} - -// Writes writes a sequence of bytes into the binTree structure. -func (t *binTree) Write(p []byte) (n int, err error) { - for _, c := range p { - t.WriteByte(c) - } - return len(p), nil -} - -// add puts the node v into the tree. The node must not be part of the -// tree before. -func (t *binTree) add(v uint32) { - vn := &t.node[v] - // Set left and right to null indices. - vn.l, vn.r = null, null - // If the binary tree is empty make v the root. - if t.root == null { - t.root = v - vn.p = null - return - } - x := vn.x - p := t.root - // Search for the right leave link and add the new node. - for { - pn := &t.node[p] - if x <= pn.x { - if pn.l == null { - pn.l = v - vn.p = p - return - } - p = pn.l - } else { - if pn.r == null { - pn.r = v - vn.p = p - return - } - p = pn.r - } - } -} - -// parent returns the parent node index of v and the pointer to v value -// in the parent. -func (t *binTree) parent(v uint32) (p uint32, ptr *uint32) { - if t.root == v { - return null, &t.root - } - p = t.node[v].p - if t.node[p].l == v { - ptr = &t.node[p].l - } else { - ptr = &t.node[p].r - } - return -} - -// Remove node v. -func (t *binTree) remove(v uint32) { - vn := &t.node[v] - p, ptr := t.parent(v) - l, r := vn.l, vn.r - if l == null { - // Move the right child up. - *ptr = r - if r != null { - t.node[r].p = p - } - return - } - if r == null { - // Move the left child up. - *ptr = l - t.node[l].p = p - return - } - - // Search the in-order predecessor u. - un := &t.node[l] - ur := un.r - if ur == null { - // In order predecessor is l. Move it up. - un.r = r - t.node[r].p = l - un.p = p - *ptr = l - return - } - var u uint32 - for { - // Look for the max value in the tree where l is root. - u = ur - ur = t.node[u].r - if ur == null { - break - } - } - // replace u with ul - un = &t.node[u] - ul := un.l - up := un.p - t.node[up].r = ul - if ul != null { - t.node[ul].p = up - } - - // replace v by u - un.l, un.r = l, r - t.node[l].p = u - t.node[r].p = u - *ptr = u - un.p = p -} - -// search looks for the node that have the value x or for the nodes that -// brace it. The node highest in the tree with the value x will be -// returned. All other nodes with the same value live in left subtree of -// the returned node. -func (t *binTree) search(v uint32, x uint32) (a, b uint32) { - a, b = null, null - if v == null { - return - } - for { - vn := &t.node[v] - if x <= vn.x { - if x == vn.x { - return v, v - } - b = v - if vn.l == null { - return - } - v = vn.l - } else { - a = v - if vn.r == null { - return - } - v = vn.r - } - } -} - -// max returns the node with maximum value in the subtree with v as -// root. -func (t *binTree) max(v uint32) uint32 { - if v == null { - return null - } - for { - r := t.node[v].r - if r == null { - return v - } - v = r - } -} - -// min returns the node with the minimum value in the subtree with v as -// root. -func (t *binTree) min(v uint32) uint32 { - if v == null { - return null - } - for { - l := t.node[v].l - if l == null { - return v - } - v = l - } -} - -// pred returns the in-order predecessor of node v. -func (t *binTree) pred(v uint32) uint32 { - if v == null { - return null - } - u := t.max(t.node[v].l) - if u != null { - return u - } - for { - p := t.node[v].p - if p == null { - return null - } - if t.node[p].r == v { - return p - } - v = p - } -} - -// succ returns the in-order successor of node v. -func (t *binTree) succ(v uint32) uint32 { - if v == null { - return null - } - u := t.min(t.node[v].r) - if u != null { - return u - } - for { - p := t.node[v].p - if p == null { - return null - } - if t.node[p].l == v { - return p - } - v = p - } -} - -// xval converts the first four bytes of a into an 32-bit unsigned -// integer in big-endian order. -func xval(a []byte) uint32 { - var x uint32 - switch len(a) { - default: - x |= uint32(a[3]) - fallthrough - case 3: - x |= uint32(a[2]) << 8 - fallthrough - case 2: - x |= uint32(a[1]) << 16 - fallthrough - case 1: - x |= uint32(a[0]) << 24 - case 0: - } - return x -} - -// dumpX converts value x into a four-letter string. -func dumpX(x uint32) string { - a := make([]byte, 4) - for i := 0; i < 4; i++ { - c := byte(x >> uint((3-i)*8)) - if unicode.IsGraphic(rune(c)) { - a[i] = c - } else { - a[i] = '.' - } - } - return string(a) -} - -/* -// dumpNode writes a representation of the node v into the io.Writer. -func (t *binTree) dumpNode(w io.Writer, v uint32, indent int) { - if v == null { - return - } - - vn := &t.node[v] - - t.dumpNode(w, vn.r, indent+2) - - for i := 0; i < indent; i++ { - fmt.Fprint(w, " ") - } - if vn.p == null { - fmt.Fprintf(w, "node %d %q parent null\n", v, dumpX(vn.x)) - } else { - fmt.Fprintf(w, "node %d %q parent %d\n", v, dumpX(vn.x), vn.p) - } - - t.dumpNode(w, vn.l, indent+2) -} - -// dump prints a representation of the binary tree into the writer. -func (t *binTree) dump(w io.Writer) error { - bw := bufio.NewWriter(w) - t.dumpNode(bw, t.root, 0) - return bw.Flush() -} -*/ - -func (t *binTree) distance(v uint32) int { - dist := int(t.front) - int(v) - if dist <= 0 { - dist += len(t.node) - } - return dist -} - -type matchParams struct { - rep [4]uint32 - // length when match will be accepted - nAccept int - // nodes to check - check int - // finish if length get shorter - stopShorter bool -} - -func (t *binTree) match(m match, distIter func() (int, bool), p matchParams, -) (r match, checked int, accepted bool) { - buf := &t.dict.buf - for { - if checked >= p.check { - return m, checked, true - } - dist, ok := distIter() - if !ok { - return m, checked, false - } - checked++ - if m.n > 0 { - i := buf.rear - dist + m.n - 1 - if i < 0 { - i += len(buf.data) - } else if i >= len(buf.data) { - i -= len(buf.data) - } - if buf.data[i] != t.data[m.n-1] { - if p.stopShorter { - return m, checked, false - } - continue - } - } - n := buf.matchLen(dist, t.data) - switch n { - case 0: - if p.stopShorter { - return m, checked, false - } - continue - case 1: - if uint32(dist-minDistance) != p.rep[0] { - continue - } - } - if n < m.n || (n == m.n && int64(dist) >= m.distance) { - continue - } - m = match{int64(dist), n} - if n >= p.nAccept { - return m, checked, true - } - } -} - -func (t *binTree) NextOp(rep [4]uint32) operation { - // retrieve maxMatchLen data - n, _ := t.dict.buf.Peek(t.data[:maxMatchLen]) - if n == 0 { - panic("no data in buffer") - } - t.data = t.data[:n] - - var ( - m match - x, u, v uint32 - iterPred, iterSucc func() (int, bool) - ) - p := matchParams{ - rep: rep, - nAccept: maxMatchLen, - check: 32, - } - i := 4 - iterSmall := func() (dist int, ok bool) { - i-- - if i <= 0 { - return 0, false - } - return i, true - } - m, checked, accepted := t.match(m, iterSmall, p) - if accepted { - goto end - } - p.check -= checked - x = xval(t.data) - u, v = t.search(t.root, x) - if u == v && len(t.data) == 4 { - iter := func() (dist int, ok bool) { - if u == null { - return 0, false - } - dist = t.distance(u) - u, v = t.search(t.node[u].l, x) - if u != v { - u = null - } - return dist, true - } - m, _, _ = t.match(m, iter, p) - goto end - } - p.stopShorter = true - iterSucc = func() (dist int, ok bool) { - if v == null { - return 0, false - } - dist = t.distance(v) - v = t.succ(v) - return dist, true - } - m, checked, accepted = t.match(m, iterSucc, p) - if accepted { - goto end - } - p.check -= checked - iterPred = func() (dist int, ok bool) { - if u == null { - return 0, false - } - dist = t.distance(u) - u = t.pred(u) - return dist, true - } - m, _, _ = t.match(m, iterPred, p) -end: - if m.n == 0 { - return lit{t.data[0]} - } - return m -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/bitops.go b/tools/vendor/github.com/ulikunitz/xz/lzma/bitops.go deleted file mode 100644 index 201091709..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/bitops.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -/* Naming conventions follows the CodeReviewComments in the Go Wiki. */ - -// ntz32Const is used by the functions NTZ and NLZ. -const ntz32Const = 0x04d7651f - -// ntz32Table is a helper table for de Bruijn algorithm by Danny Dubé. -// See Henry S. Warren, Jr. "Hacker's Delight" section 5-1 figure 5-26. -var ntz32Table = [32]int8{ - 0, 1, 2, 24, 3, 19, 6, 25, - 22, 4, 20, 10, 16, 7, 12, 26, - 31, 23, 18, 5, 21, 9, 15, 11, - 30, 17, 8, 14, 29, 13, 28, 27, -} - -/* -// ntz32 computes the number of trailing zeros for an unsigned 32-bit integer. -func ntz32(x uint32) int { - if x == 0 { - return 32 - } - x = (x & -x) * ntz32Const - return int(ntz32Table[x>>27]) -} -*/ - -// nlz32 computes the number of leading zeros for an unsigned 32-bit integer. -func nlz32(x uint32) int { - // Smear left most bit to the right - x |= x >> 1 - x |= x >> 2 - x |= x >> 4 - x |= x >> 8 - x |= x >> 16 - // Use ntz mechanism to calculate nlz. - x++ - if x == 0 { - return 0 - } - x *= ntz32Const - return 32 - int(ntz32Table[x>>27]) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/breader.go b/tools/vendor/github.com/ulikunitz/xz/lzma/breader.go deleted file mode 100644 index 9dfdf28b2..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/breader.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// breader provides the ReadByte function for a Reader. It doesn't read -// more data from the reader than absolutely necessary. -type breader struct { - io.Reader - // helper slice to save allocations - p []byte -} - -// ByteReader converts an io.Reader into an io.ByteReader. -func ByteReader(r io.Reader) io.ByteReader { - br, ok := r.(io.ByteReader) - if !ok { - return &breader{r, make([]byte, 1)} - } - return br -} - -// ReadByte read byte function. -func (r *breader) ReadByte() (c byte, err error) { - n, err := r.Reader.Read(r.p) - if n < 1 { - if err == nil { - err = errors.New("breader.ReadByte: no data") - } - return 0, err - } - return r.p[0], nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/buffer.go b/tools/vendor/github.com/ulikunitz/xz/lzma/buffer.go deleted file mode 100644 index af41d5b2d..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/buffer.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" -) - -// buffer provides a circular buffer of bytes. If the front index equals -// the rear index the buffer is empty. As a consequence front cannot be -// equal rear for a full buffer. So a full buffer has a length that is -// one byte less the the length of the data slice. -type buffer struct { - data []byte - front int - rear int -} - -// newBuffer creates a buffer with the given size. -func newBuffer(size int) *buffer { - return &buffer{data: make([]byte, size+1)} -} - -// Cap returns the capacity of the buffer. -func (b *buffer) Cap() int { - return len(b.data) - 1 -} - -// Resets the buffer. The front and rear index are set to zero. -func (b *buffer) Reset() { - b.front = 0 - b.rear = 0 -} - -// Buffered returns the number of bytes buffered. -func (b *buffer) Buffered() int { - delta := b.front - b.rear - if delta < 0 { - delta += len(b.data) - } - return delta -} - -// Available returns the number of bytes available for writing. -func (b *buffer) Available() int { - delta := b.rear - 1 - b.front - if delta < 0 { - delta += len(b.data) - } - return delta -} - -// addIndex adds a non-negative integer to the index i and returns the -// resulting index. The function takes care of wrapping the index as -// well as potential overflow situations. -func (b *buffer) addIndex(i int, n int) int { - // subtraction of len(b.data) prevents overflow - i += n - len(b.data) - if i < 0 { - i += len(b.data) - } - return i -} - -// Read reads bytes from the buffer into p and returns the number of -// bytes read. The function never returns an error but might return less -// data than requested. -func (b *buffer) Read(p []byte) (n int, err error) { - n, err = b.Peek(p) - b.rear = b.addIndex(b.rear, n) - return n, err -} - -// Peek reads bytes from the buffer into p without changing the buffer. -// Peek will never return an error but might return less data than -// requested. -func (b *buffer) Peek(p []byte) (n int, err error) { - m := b.Buffered() - n = len(p) - if m < n { - n = m - p = p[:n] - } - k := copy(p, b.data[b.rear:]) - if k < n { - copy(p[k:], b.data) - } - return n, nil -} - -// Discard skips the n next bytes to read from the buffer, returning the -// bytes discarded. -// -// If Discards skips fewer than n bytes, it returns an error. -func (b *buffer) Discard(n int) (discarded int, err error) { - if n < 0 { - return 0, errors.New("buffer.Discard: negative argument") - } - m := b.Buffered() - if m < n { - n = m - err = errors.New( - "buffer.Discard: discarded less bytes then requested") - } - b.rear = b.addIndex(b.rear, n) - return n, err -} - -// ErrNoSpace indicates that there is insufficient space for the Write -// operation. -var ErrNoSpace = errors.New("insufficient space") - -// Write puts data into the buffer. If less bytes are written than -// requested ErrNoSpace is returned. -func (b *buffer) Write(p []byte) (n int, err error) { - m := b.Available() - n = len(p) - if m < n { - n = m - p = p[:m] - err = ErrNoSpace - } - k := copy(b.data[b.front:], p) - if k < n { - copy(b.data, p[k:]) - } - b.front = b.addIndex(b.front, n) - return n, err -} - -// WriteByte writes a single byte into the buffer. The error ErrNoSpace -// is returned if no single byte is available in the buffer for writing. -func (b *buffer) WriteByte(c byte) error { - if b.Available() < 1 { - return ErrNoSpace - } - b.data[b.front] = c - b.front = b.addIndex(b.front, 1) - return nil -} - -// prefixLen returns the length of the common prefix of a and b. -func prefixLen(a, b []byte) int { - if len(a) > len(b) { - a, b = b, a - } - for i, c := range a { - if b[i] != c { - return i - } - } - return len(a) -} - -// matchLen returns the length of the common prefix for the given -// distance from the rear and the byte slice p. -func (b *buffer) matchLen(distance int, p []byte) int { - var n int - i := b.rear - distance - if i < 0 { - if n = prefixLen(p, b.data[len(b.data)+i:]); n < -i { - return n - } - p = p[n:] - i = 0 - } - n += prefixLen(p, b.data[i:]) - return n -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go b/tools/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go deleted file mode 100644 index f27e31a4a..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/bytewriter.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// ErrLimit indicates that the limit of the LimitedByteWriter has been -// reached. -var ErrLimit = errors.New("limit reached") - -// LimitedByteWriter provides a byte writer that can be written until a -// limit is reached. The field N provides the number of remaining -// bytes. -type LimitedByteWriter struct { - BW io.ByteWriter - N int64 -} - -// WriteByte writes a single byte to the limited byte writer. It returns -// ErrLimit if the limit has been reached. If the byte is successfully -// written the field N of the LimitedByteWriter will be decremented by -// one. -func (l *LimitedByteWriter) WriteByte(c byte) error { - if l.N <= 0 { - return ErrLimit - } - if err := l.BW.WriteByte(c); err != nil { - return err - } - l.N-- - return nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/decoder.go b/tools/vendor/github.com/ulikunitz/xz/lzma/decoder.go deleted file mode 100644 index 3765484e6..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/decoder.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -// decoder decodes a raw LZMA stream without any header. -type decoder struct { - // dictionary; the rear pointer of the buffer will be used for - // reading the data. - Dict *decoderDict - // decoder state - State *state - // range decoder - rd *rangeDecoder - // start stores the head value of the dictionary for the LZMA - // stream - start int64 - // size of uncompressed data - size int64 - // end-of-stream encountered - eos bool - // EOS marker found - eosMarker bool -} - -// newDecoder creates a new decoder instance. The parameter size provides -// the expected byte size of the decompressed data. If the size is -// unknown use a negative value. In that case the decoder will look for -// a terminating end-of-stream marker. -func newDecoder(br io.ByteReader, state *state, dict *decoderDict, size int64) (d *decoder, err error) { - rd, err := newRangeDecoder(br) - if err != nil { - return nil, err - } - d = &decoder{ - State: state, - Dict: dict, - rd: rd, - size: size, - start: dict.pos(), - } - return d, nil -} - -// Reopen restarts the decoder with a new byte reader and a new size. Reopen -// resets the Decompressed counter to zero. -func (d *decoder) Reopen(br io.ByteReader, size int64) error { - var err error - if d.rd, err = newRangeDecoder(br); err != nil { - return err - } - d.start = d.Dict.pos() - d.size = size - d.eos = false - return nil -} - -// decodeLiteral decodes a single literal from the LZMA stream. -func (d *decoder) decodeLiteral() (op operation, err error) { - litState := d.State.litState(d.Dict.byteAt(1), d.Dict.head) - match := d.Dict.byteAt(int(d.State.rep[0]) + 1) - s, err := d.State.litCodec.Decode(d.rd, d.State.state, match, litState) - if err != nil { - return nil, err - } - return lit{s}, nil -} - -// errEOS indicates that an EOS marker has been found. -var errEOS = errors.New("EOS marker found") - -// readOp decodes the next operation from the compressed stream. It -// returns the operation. If an explicit end of stream marker is -// identified the eos error is returned. -func (d *decoder) readOp() (op operation, err error) { - // Value of the end of stream (EOS) marker - const eosDist = 1<<32 - 1 - - state, state2, posState := d.State.states(d.Dict.head) - - b, err := d.State.isMatch[state2].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - // literal - op, err := d.decodeLiteral() - if err != nil { - return nil, err - } - d.State.updateStateLiteral() - return op, nil - } - b, err = d.State.isRep[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - // simple match - d.State.rep[3], d.State.rep[2], d.State.rep[1] = - d.State.rep[2], d.State.rep[1], d.State.rep[0] - - d.State.updateStateMatch() - // The length decoder returns the length offset. - n, err := d.State.lenCodec.Decode(d.rd, posState) - if err != nil { - return nil, err - } - // The dist decoder returns the distance offset. The actual - // distance is 1 higher. - d.State.rep[0], err = d.State.distCodec.Decode(d.rd, n) - if err != nil { - return nil, err - } - if d.State.rep[0] == eosDist { - d.eosMarker = true - return nil, errEOS - } - op = match{n: int(n) + minMatchLen, - distance: int64(d.State.rep[0]) + minDistance} - return op, nil - } - b, err = d.State.isRepG0[state].Decode(d.rd) - if err != nil { - return nil, err - } - dist := d.State.rep[0] - if b == 0 { - // rep match 0 - b, err = d.State.isRepG0Long[state2].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - d.State.updateStateShortRep() - op = match{n: 1, distance: int64(dist) + minDistance} - return op, nil - } - } else { - b, err = d.State.isRepG1[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - dist = d.State.rep[1] - } else { - b, err = d.State.isRepG2[state].Decode(d.rd) - if err != nil { - return nil, err - } - if b == 0 { - dist = d.State.rep[2] - } else { - dist = d.State.rep[3] - d.State.rep[3] = d.State.rep[2] - } - d.State.rep[2] = d.State.rep[1] - } - d.State.rep[1] = d.State.rep[0] - d.State.rep[0] = dist - } - n, err := d.State.repLenCodec.Decode(d.rd, posState) - if err != nil { - return nil, err - } - d.State.updateStateRep() - op = match{n: int(n) + minMatchLen, distance: int64(dist) + minDistance} - return op, nil -} - -// apply takes the operation and transforms the decoder dictionary accordingly. -func (d *decoder) apply(op operation) error { - var err error - switch x := op.(type) { - case match: - err = d.Dict.writeMatch(x.distance, x.n) - case lit: - err = d.Dict.WriteByte(x.b) - default: - panic("op is neither a match nor a literal") - } - return err -} - -// decompress fills the dictionary unless no space for new data is -// available. If the end of the LZMA stream has been reached io.EOF will -// be returned. -func (d *decoder) decompress() error { - if d.eos { - return io.EOF - } - for d.Dict.Available() >= maxMatchLen { - op, err := d.readOp() - switch err { - case nil: - // break - case errEOS: - d.eos = true - if !d.rd.possiblyAtEnd() { - return errDataAfterEOS - } - if d.size >= 0 && d.size != d.Decompressed() { - return errSize - } - return io.EOF - case io.EOF: - d.eos = true - return io.ErrUnexpectedEOF - default: - return err - } - if err = d.apply(op); err != nil { - return err - } - if d.size >= 0 && d.Decompressed() >= d.size { - d.eos = true - if d.Decompressed() > d.size { - return errSize - } - if !d.rd.possiblyAtEnd() { - switch _, err = d.readOp(); err { - case nil: - return errSize - case io.EOF: - return io.ErrUnexpectedEOF - case errEOS: - break - default: - return err - } - } - return io.EOF - } - } - return nil -} - -// Errors that may be returned while decoding data. -var ( - errDataAfterEOS = errors.New("lzma: data after end of stream marker") - errSize = errors.New("lzma: wrong uncompressed data size") -) - -// Read reads data from the buffer. If no more data is available io.EOF is -// returned. -func (d *decoder) Read(p []byte) (n int, err error) { - var k int - for { - // Read of decoder dict never returns an error. - k, err = d.Dict.Read(p[n:]) - if err != nil { - panic(fmt.Errorf("dictionary read error %s", err)) - } - if k == 0 && d.eos { - return n, io.EOF - } - n += k - if n >= len(p) { - return n, nil - } - if err = d.decompress(); err != nil && err != io.EOF { - return n, err - } - } -} - -// Decompressed returns the number of bytes decompressed by the decoder. -func (d *decoder) Decompressed() int64 { - return d.Dict.pos() - d.start -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go b/tools/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go deleted file mode 100644 index d5b814f0a..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/decoderdict.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// decoderDict provides the dictionary for the decoder. The whole -// dictionary is used as reader buffer. -type decoderDict struct { - buf buffer - head int64 -} - -// newDecoderDict creates a new decoder dictionary. The whole dictionary -// will be used as reader buffer. -func newDecoderDict(dictCap int) (d *decoderDict, err error) { - // lower limit supports easy test cases - if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) { - return nil, errors.New("lzma: dictCap out of range") - } - d = &decoderDict{buf: *newBuffer(dictCap)} - return d, nil -} - -// Reset clears the dictionary. The read buffer is not changed, so the -// buffered data can still be read. -func (d *decoderDict) Reset() { - d.head = 0 -} - -// WriteByte writes a single byte into the dictionary. It is used to -// write literals into the dictionary. -func (d *decoderDict) WriteByte(c byte) error { - if err := d.buf.WriteByte(c); err != nil { - return err - } - d.head++ - return nil -} - -// pos returns the position of the dictionary head. -func (d *decoderDict) pos() int64 { return d.head } - -// dictLen returns the actual length of the dictionary. -func (d *decoderDict) dictLen() int { - capacity := d.buf.Cap() - if d.head >= int64(capacity) { - return capacity - } - return int(d.head) -} - -// byteAt returns a byte stored in the dictionary. If the distance is -// non-positive or exceeds the current length of the dictionary the zero -// byte is returned. -func (d *decoderDict) byteAt(dist int) byte { - if !(0 < dist && dist <= d.dictLen()) { - return 0 - } - i := d.buf.front - dist - if i < 0 { - i += len(d.buf.data) - } - return d.buf.data[i] -} - -// writeMatch writes the match at the top of the dictionary. The given -// distance must point in the current dictionary and the length must not -// exceed the maximum length 273 supported in LZMA. -// -// The error value ErrNoSpace indicates that no space is available in -// the dictionary for writing. You need to read from the dictionary -// first. -func (d *decoderDict) writeMatch(dist int64, length int) error { - if !(0 < dist && dist <= int64(d.dictLen())) { - return errors.New("writeMatch: distance out of range") - } - if !(0 < length && length <= maxMatchLen) { - return errors.New("writeMatch: length out of range") - } - if length > d.buf.Available() { - return ErrNoSpace - } - d.head += int64(length) - - i := d.buf.front - int(dist) - if i < 0 { - i += len(d.buf.data) - } - for length > 0 { - var p []byte - if i >= d.buf.front { - p = d.buf.data[i:] - i = 0 - } else { - p = d.buf.data[i:d.buf.front] - i = d.buf.front - } - if len(p) > length { - p = p[:length] - } - if _, err := d.buf.Write(p); err != nil { - panic(fmt.Errorf("d.buf.Write returned error %s", err)) - } - length -= len(p) - } - return nil -} - -// Write writes the given bytes into the dictionary and advances the -// head. -func (d *decoderDict) Write(p []byte) (n int, err error) { - n, err = d.buf.Write(p) - d.head += int64(n) - return n, err -} - -// Available returns the number of available bytes for writing into the -// decoder dictionary. -func (d *decoderDict) Available() int { return d.buf.Available() } - -// Read reads data from the buffer contained in the decoder dictionary. -func (d *decoderDict) Read(p []byte) (n int, err error) { return d.buf.Read(p) } diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/directcodec.go b/tools/vendor/github.com/ulikunitz/xz/lzma/directcodec.go deleted file mode 100644 index 76b713106..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/directcodec.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// directCodec allows the encoding and decoding of values with a fixed number -// of bits. The number of bits must be in the range [1,32]. -type directCodec byte - -// Bits returns the number of bits supported by this codec. -func (dc directCodec) Bits() int { - return int(dc) -} - -// Encode uses the range encoder to encode a value with the fixed number of -// bits. The most-significant bit is encoded first. -func (dc directCodec) Encode(e *rangeEncoder, v uint32) error { - for i := int(dc) - 1; i >= 0; i-- { - if err := e.DirectEncodeBit(v >> uint(i)); err != nil { - return err - } - } - return nil -} - -// Decode uses the range decoder to decode a value with the given number of -// given bits. The most-significant bit is decoded first. -func (dc directCodec) Decode(d *rangeDecoder) (v uint32, err error) { - for i := int(dc) - 1; i >= 0; i-- { - x, err := d.DirectDecodeBit() - if err != nil { - return 0, err - } - v = (v << 1) | x - } - return v, nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/distcodec.go b/tools/vendor/github.com/ulikunitz/xz/lzma/distcodec.go deleted file mode 100644 index b447d8ec4..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/distcodec.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// Constants used by the distance codec. -const ( - // minimum supported distance - minDistance = 1 - // maximum supported distance, value is used for the eos marker. - maxDistance = 1 << 32 - // number of the supported len states - lenStates = 4 - // start for the position models - startPosModel = 4 - // first index with align bits support - endPosModel = 14 - // bits for the position slots - posSlotBits = 6 - // number of align bits - alignBits = 4 -) - -// distCodec provides encoding and decoding of distance values. -type distCodec struct { - posSlotCodecs [lenStates]treeCodec - posModel [endPosModel - startPosModel]treeReverseCodec - alignCodec treeReverseCodec -} - -// deepcopy initializes dc as deep copy of the source. -func (dc *distCodec) deepcopy(src *distCodec) { - if dc == src { - return - } - for i := range dc.posSlotCodecs { - dc.posSlotCodecs[i].deepcopy(&src.posSlotCodecs[i]) - } - for i := range dc.posModel { - dc.posModel[i].deepcopy(&src.posModel[i]) - } - dc.alignCodec.deepcopy(&src.alignCodec) -} - -// newDistCodec creates a new distance codec. -func (dc *distCodec) init() { - for i := range dc.posSlotCodecs { - dc.posSlotCodecs[i] = makeTreeCodec(posSlotBits) - } - for i := range dc.posModel { - posSlot := startPosModel + i - bits := (posSlot >> 1) - 1 - dc.posModel[i] = makeTreeReverseCodec(bits) - } - dc.alignCodec = makeTreeReverseCodec(alignBits) -} - -// lenState converts the value l to a supported lenState value. -func lenState(l uint32) uint32 { - if l >= lenStates { - l = lenStates - 1 - } - return l -} - -// Encode encodes the distance using the parameter l. Dist can have values from -// the full range of uint32 values. To get the distance offset the actual match -// distance has to be decreased by 1. A distance offset of 0xffffffff (eos) -// indicates the end of the stream. -func (dc *distCodec) Encode(e *rangeEncoder, dist uint32, l uint32) (err error) { - // Compute the posSlot using nlz32 - var posSlot uint32 - var bits uint32 - if dist < startPosModel { - posSlot = dist - } else { - bits = uint32(30 - nlz32(dist)) - posSlot = startPosModel - 2 + (bits << 1) - posSlot += (dist >> uint(bits)) & 1 - } - - if err = dc.posSlotCodecs[lenState(l)].Encode(e, posSlot); err != nil { - return - } - - switch { - case posSlot < startPosModel: - return nil - case posSlot < endPosModel: - tc := &dc.posModel[posSlot-startPosModel] - return tc.Encode(dist, e) - } - dic := directCodec(bits - alignBits) - if err = dic.Encode(e, dist>>alignBits); err != nil { - return - } - return dc.alignCodec.Encode(dist, e) -} - -// Decode decodes the distance offset using the parameter l. The dist value -// 0xffffffff (eos) indicates the end of the stream. Add one to the distance -// offset to get the actual match distance. -func (dc *distCodec) Decode(d *rangeDecoder, l uint32) (dist uint32, err error) { - posSlot, err := dc.posSlotCodecs[lenState(l)].Decode(d) - if err != nil { - return - } - - // posSlot equals distance - if posSlot < startPosModel { - return posSlot, nil - } - - // posSlot uses the individual models - bits := (posSlot >> 1) - 1 - dist = (2 | (posSlot & 1)) << bits - var u uint32 - if posSlot < endPosModel { - tc := &dc.posModel[posSlot-startPosModel] - if u, err = tc.Decode(d); err != nil { - return 0, err - } - dist += u - return dist, nil - } - - // posSlots use direct encoding and a single model for the four align - // bits. - dic := directCodec(bits - alignBits) - if u, err = dic.Decode(d); err != nil { - return 0, err - } - dist += u << alignBits - if u, err = dc.alignCodec.Decode(d); err != nil { - return 0, err - } - dist += u - return dist, nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/encoder.go b/tools/vendor/github.com/ulikunitz/xz/lzma/encoder.go deleted file mode 100644 index e40938318..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/encoder.go +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "fmt" - "io" -) - -// opLenMargin provides the upper limit of the number of bytes required -// to encode a single operation. -const opLenMargin = 16 - -// compressFlags control the compression process. -type compressFlags uint32 - -// Values for compressFlags. -const ( - // all data should be compressed, even if compression is not - // optimal. - all compressFlags = 1 << iota -) - -// encoderFlags provide the flags for an encoder. -type encoderFlags uint32 - -// Flags for the encoder. -const ( - // eosMarker requests an EOS marker to be written. - eosMarker encoderFlags = 1 << iota -) - -// Encoder compresses data buffered in the encoder dictionary and writes -// it into a byte writer. -type encoder struct { - dict *encoderDict - state *state - re *rangeEncoder - start int64 - // generate eos marker - marker bool - limit bool - margin int -} - -// newEncoder creates a new encoder. If the byte writer must be -// limited use LimitedByteWriter provided by this package. The flags -// argument supports the eosMarker flag, controlling whether a -// terminating end-of-stream marker must be written. -func newEncoder(bw io.ByteWriter, state *state, dict *encoderDict, - flags encoderFlags) (e *encoder, err error) { - - re, err := newRangeEncoder(bw) - if err != nil { - return nil, err - } - e = &encoder{ - dict: dict, - state: state, - re: re, - marker: flags&eosMarker != 0, - start: dict.Pos(), - margin: opLenMargin, - } - if e.marker { - e.margin += 5 - } - return e, nil -} - -// Write writes the bytes from p into the dictionary. If not enough -// space is available the data in the dictionary buffer will be -// compressed to make additional space available. If the limit of the -// underlying writer has been reached ErrLimit will be returned. -func (e *encoder) Write(p []byte) (n int, err error) { - for { - k, err := e.dict.Write(p[n:]) - n += k - if err == ErrNoSpace { - if err = e.compress(0); err != nil { - return n, err - } - continue - } - return n, err - } -} - -// Reopen reopens the encoder with a new byte writer. -func (e *encoder) Reopen(bw io.ByteWriter) error { - var err error - if e.re, err = newRangeEncoder(bw); err != nil { - return err - } - e.start = e.dict.Pos() - e.limit = false - return nil -} - -// writeLiteral writes a literal into the LZMA stream -func (e *encoder) writeLiteral(l lit) error { - var err error - state, state2, _ := e.state.states(e.dict.Pos()) - if err = e.state.isMatch[state2].Encode(e.re, 0); err != nil { - return err - } - litState := e.state.litState(e.dict.ByteAt(1), e.dict.Pos()) - match := e.dict.ByteAt(int(e.state.rep[0]) + 1) - err = e.state.litCodec.Encode(e.re, l.b, state, match, litState) - if err != nil { - return err - } - e.state.updateStateLiteral() - return nil -} - -// iverson implements the Iverson operator as proposed by Donald Knuth in his -// book Concrete Mathematics. -func iverson(ok bool) uint32 { - if ok { - return 1 - } - return 0 -} - -// writeMatch writes a repetition operation into the operation stream -func (e *encoder) writeMatch(m match) error { - var err error - if !(minDistance <= m.distance && m.distance <= maxDistance) { - panic(fmt.Errorf("match distance %d out of range", m.distance)) - } - dist := uint32(m.distance - minDistance) - if !(minMatchLen <= m.n && m.n <= maxMatchLen) && - !(dist == e.state.rep[0] && m.n == 1) { - panic(fmt.Errorf( - "match length %d out of range; dist %d rep[0] %d", - m.n, dist, e.state.rep[0])) - } - state, state2, posState := e.state.states(e.dict.Pos()) - if err = e.state.isMatch[state2].Encode(e.re, 1); err != nil { - return err - } - g := 0 - for ; g < 4; g++ { - if e.state.rep[g] == dist { - break - } - } - b := iverson(g < 4) - if err = e.state.isRep[state].Encode(e.re, b); err != nil { - return err - } - n := uint32(m.n - minMatchLen) - if b == 0 { - // simple match - e.state.rep[3], e.state.rep[2], e.state.rep[1], e.state.rep[0] = - e.state.rep[2], e.state.rep[1], e.state.rep[0], dist - e.state.updateStateMatch() - if err = e.state.lenCodec.Encode(e.re, n, posState); err != nil { - return err - } - return e.state.distCodec.Encode(e.re, dist, n) - } - b = iverson(g != 0) - if err = e.state.isRepG0[state].Encode(e.re, b); err != nil { - return err - } - if b == 0 { - // g == 0 - b = iverson(m.n != 1) - if err = e.state.isRepG0Long[state2].Encode(e.re, b); err != nil { - return err - } - if b == 0 { - e.state.updateStateShortRep() - return nil - } - } else { - // g in {1,2,3} - b = iverson(g != 1) - if err = e.state.isRepG1[state].Encode(e.re, b); err != nil { - return err - } - if b == 1 { - // g in {2,3} - b = iverson(g != 2) - err = e.state.isRepG2[state].Encode(e.re, b) - if err != nil { - return err - } - if b == 1 { - e.state.rep[3] = e.state.rep[2] - } - e.state.rep[2] = e.state.rep[1] - } - e.state.rep[1] = e.state.rep[0] - e.state.rep[0] = dist - } - e.state.updateStateRep() - return e.state.repLenCodec.Encode(e.re, n, posState) -} - -// writeOp writes a single operation to the range encoder. The function -// checks whether there is enough space available to close the LZMA -// stream. -func (e *encoder) writeOp(op operation) error { - if e.re.Available() < int64(e.margin) { - return ErrLimit - } - switch x := op.(type) { - case lit: - return e.writeLiteral(x) - case match: - return e.writeMatch(x) - default: - panic("unexpected operation") - } -} - -// compress compressed data from the dictionary buffer. If the flag all -// is set, all data in the dictionary buffer will be compressed. The -// function returns ErrLimit if the underlying writer has reached its -// limit. -func (e *encoder) compress(flags compressFlags) error { - n := 0 - if flags&all == 0 { - n = maxMatchLen - 1 - } - d := e.dict - m := d.m - for d.Buffered() > n { - op := m.NextOp(e.state.rep) - if err := e.writeOp(op); err != nil { - return err - } - d.Discard(op.Len()) - } - return nil -} - -// eosMatch is a pseudo operation that indicates the end of the stream. -var eosMatch = match{distance: maxDistance, n: minMatchLen} - -// Close terminates the LZMA stream. If requested the end-of-stream -// marker will be written. If the byte writer limit has been or will be -// reached during compression of the remaining data in the buffer the -// LZMA stream will be closed and data will remain in the buffer. -func (e *encoder) Close() error { - err := e.compress(all) - if err != nil && err != ErrLimit { - return err - } - if e.marker { - if err := e.writeMatch(eosMatch); err != nil { - return err - } - } - err = e.re.Close() - return err -} - -// Compressed returns the number bytes of the input data that been -// compressed. -func (e *encoder) Compressed() int64 { - return e.dict.Pos() - e.start -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go b/tools/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go deleted file mode 100644 index 4b3916eab..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/encoderdict.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -// matcher is an interface that supports the identification of the next -// operation. -type matcher interface { - io.Writer - SetDict(d *encoderDict) - NextOp(rep [4]uint32) operation -} - -// encoderDict provides the dictionary of the encoder. It includes an -// additional buffer atop of the actual dictionary. -type encoderDict struct { - buf buffer - m matcher - head int64 - capacity int - // preallocated array - data [maxMatchLen]byte -} - -// newEncoderDict creates the encoder dictionary. The argument bufSize -// defines the size of the additional buffer. -func newEncoderDict(dictCap, bufSize int, m matcher) (d *encoderDict, err error) { - if !(1 <= dictCap && int64(dictCap) <= MaxDictCap) { - return nil, errors.New( - "lzma: dictionary capacity out of range") - } - if bufSize < 1 { - return nil, errors.New( - "lzma: buffer size must be larger than zero") - } - d = &encoderDict{ - buf: *newBuffer(dictCap + bufSize), - capacity: dictCap, - m: m, - } - m.SetDict(d) - return d, nil -} - -// Discard discards n bytes. Note that n must not be larger than -// MaxMatchLen. -func (d *encoderDict) Discard(n int) { - p := d.data[:n] - k, _ := d.buf.Read(p) - if k < n { - panic(fmt.Errorf("lzma: can't discard %d bytes", n)) - } - d.head += int64(n) - d.m.Write(p) -} - -// Len returns the data available in the encoder dictionary. -func (d *encoderDict) Len() int { - n := d.buf.Available() - if int64(n) > d.head { - return int(d.head) - } - return n -} - -// DictLen returns the actual length of data in the dictionary. -func (d *encoderDict) DictLen() int { - if d.head < int64(d.capacity) { - return int(d.head) - } - return d.capacity -} - -// Available returns the number of bytes that can be written by a -// following Write call. -func (d *encoderDict) Available() int { - return d.buf.Available() - d.DictLen() -} - -// Write writes data into the dictionary buffer. Note that the position -// of the dictionary head will not be moved. If there is not enough -// space in the buffer ErrNoSpace will be returned. -func (d *encoderDict) Write(p []byte) (n int, err error) { - m := d.Available() - if len(p) > m { - p = p[:m] - err = ErrNoSpace - } - var e error - if n, e = d.buf.Write(p); e != nil { - err = e - } - return n, err -} - -// Pos returns the position of the head. -func (d *encoderDict) Pos() int64 { return d.head } - -// ByteAt returns the byte at the given distance. -func (d *encoderDict) ByteAt(distance int) byte { - if !(0 < distance && distance <= d.Len()) { - return 0 - } - i := d.buf.rear - distance - if i < 0 { - i += len(d.buf.data) - } - return d.buf.data[i] -} - -// CopyN copies the last n bytes from the dictionary into the provided -// writer. This is used for copying uncompressed data into an -// uncompressed segment. -func (d *encoderDict) CopyN(w io.Writer, n int) (written int, err error) { - if n <= 0 { - return 0, nil - } - m := d.Len() - if n > m { - n = m - err = ErrNoSpace - } - i := d.buf.rear - n - var e error - if i < 0 { - i += len(d.buf.data) - if written, e = w.Write(d.buf.data[i:]); e != nil { - return written, e - } - i = 0 - } - var k int - k, e = w.Write(d.buf.data[i:d.buf.rear]) - written += k - if e != nil { - err = e - } - return written, err -} - -// Buffered returns the number of bytes in the buffer. -func (d *encoderDict) Buffered() int { return d.buf.Buffered() } diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/fox.lzma b/tools/vendor/github.com/ulikunitz/xz/lzma/fox.lzma deleted file mode 100644 index 5edad633266eb5173a7c39761dc8b9e71efbfe80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcma!LU}#|Y4+RWbQXGqzRntCtR~%i$`d{za%}WYWYfXMUl6~Q5_UjH?=5CuO0w(I5 UuQ#VXelz{mI_3ZW`W7$%0HEw6g#Z8m diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/hashtable.go b/tools/vendor/github.com/ulikunitz/xz/lzma/hashtable.go deleted file mode 100644 index f66e9cdd9..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/hashtable.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - - "github.com/ulikunitz/xz/internal/hash" -) - -/* For compression we need to find byte sequences that match the byte - * sequence at the dictionary head. A hash table is a simple method to - * provide this capability. - */ - -// maxMatches limits the number of matches requested from the Matches -// function. This controls the speed of the overall encoding. -const maxMatches = 16 - -// shortDists defines the number of short distances supported by the -// implementation. -const shortDists = 8 - -// The minimum is somehow arbitrary but the maximum is limited by the -// memory requirements of the hash table. -const ( - minTableExponent = 9 - maxTableExponent = 20 -) - -// newRoller contains the function used to create an instance of the -// hash.Roller. -var newRoller = func(n int) hash.Roller { return hash.NewCyclicPoly(n) } - -// hashTable stores the hash table including the rolling hash method. -// -// We implement chained hashing into a circular buffer. Each entry in -// the circular buffer stores the delta distance to the next position with a -// word that has the same hash value. -type hashTable struct { - dict *encoderDict - // actual hash table - t []int64 - // circular list data with the offset to the next word - data []uint32 - front int - // mask for computing the index for the hash table - mask uint64 - // hash offset; initial value is -int64(wordLen) - hoff int64 - // length of the hashed word - wordLen int - // hash roller for computing the hash values for the Write - // method - wr hash.Roller - // hash roller for computing arbitrary hashes - hr hash.Roller - // preallocated slices - p [maxMatches]int64 - distances [maxMatches + shortDists]int -} - -// hashTableExponent derives the hash table exponent from the dictionary -// capacity. -func hashTableExponent(n uint32) int { - e := 30 - nlz32(n) - switch { - case e < minTableExponent: - e = minTableExponent - case e > maxTableExponent: - e = maxTableExponent - } - return e -} - -// newHashTable creates a new hash table for words of length wordLen -func newHashTable(capacity int, wordLen int) (t *hashTable, err error) { - if !(0 < capacity) { - return nil, errors.New( - "newHashTable: capacity must not be negative") - } - exp := hashTableExponent(uint32(capacity)) - if !(1 <= wordLen && wordLen <= 4) { - return nil, errors.New("newHashTable: " + - "argument wordLen out of range") - } - n := 1 << uint(exp) - if n <= 0 { - panic("newHashTable: exponent is too large") - } - t = &hashTable{ - t: make([]int64, n), - data: make([]uint32, capacity), - mask: (uint64(1) << uint(exp)) - 1, - hoff: -int64(wordLen), - wordLen: wordLen, - wr: newRoller(wordLen), - hr: newRoller(wordLen), - } - return t, nil -} - -func (t *hashTable) SetDict(d *encoderDict) { t.dict = d } - -// buffered returns the number of bytes that are currently hashed. -func (t *hashTable) buffered() int { - n := t.hoff + 1 - switch { - case n <= 0: - return 0 - case n >= int64(len(t.data)): - return len(t.data) - } - return int(n) -} - -// addIndex adds n to an index ensuring that is stays inside the -// circular buffer for the hash chain. -func (t *hashTable) addIndex(i, n int) int { - i += n - len(t.data) - if i < 0 { - i += len(t.data) - } - return i -} - -// putDelta puts the delta instance at the current front of the circular -// chain buffer. -func (t *hashTable) putDelta(delta uint32) { - t.data[t.front] = delta - t.front = t.addIndex(t.front, 1) -} - -// putEntry puts a new entry into the hash table. If there is already a -// value stored it is moved into the circular chain buffer. -func (t *hashTable) putEntry(h uint64, pos int64) { - if pos < 0 { - return - } - i := h & t.mask - old := t.t[i] - 1 - t.t[i] = pos + 1 - var delta int64 - if old >= 0 { - delta = pos - old - if delta > 1<<32-1 || delta > int64(t.buffered()) { - delta = 0 - } - } - t.putDelta(uint32(delta)) -} - -// WriteByte converts a single byte into a hash and puts them into the hash -// table. -func (t *hashTable) WriteByte(b byte) error { - h := t.wr.RollByte(b) - t.hoff++ - t.putEntry(h, t.hoff) - return nil -} - -// Write converts the bytes provided into hash tables and stores the -// abbreviated offsets into the hash table. The method will never return an -// error. -func (t *hashTable) Write(p []byte) (n int, err error) { - for _, b := range p { - // WriteByte doesn't generate an error. - t.WriteByte(b) - } - return len(p), nil -} - -// getMatches the matches for a specific hash. The functions returns the -// number of positions found. -// -// TODO: Make a getDistances because that we are actually interested in. -func (t *hashTable) getMatches(h uint64, positions []int64) (n int) { - if t.hoff < 0 || len(positions) == 0 { - return 0 - } - buffered := t.buffered() - tailPos := t.hoff + 1 - int64(buffered) - rear := t.front - buffered - if rear >= 0 { - rear -= len(t.data) - } - // get the slot for the hash - pos := t.t[h&t.mask] - 1 - delta := pos - tailPos - for { - if delta < 0 { - return n - } - positions[n] = tailPos + delta - n++ - if n >= len(positions) { - return n - } - i := rear + int(delta) - if i < 0 { - i += len(t.data) - } - u := t.data[i] - if u == 0 { - return n - } - delta -= int64(u) - } -} - -// hash computes the rolling hash for the word stored in p. For correct -// results its length must be equal to t.wordLen. -func (t *hashTable) hash(p []byte) uint64 { - var h uint64 - for _, b := range p { - h = t.hr.RollByte(b) - } - return h -} - -// Matches fills the positions slice with potential matches. The -// functions returns the number of positions filled into positions. The -// byte slice p must have word length of the hash table. -func (t *hashTable) Matches(p []byte, positions []int64) int { - if len(p) != t.wordLen { - panic(fmt.Errorf( - "byte slice must have length %d", t.wordLen)) - } - h := t.hash(p) - return t.getMatches(h, positions) -} - -// NextOp identifies the next operation using the hash table. -// -// TODO: Use all repetitions to find matches. -func (t *hashTable) NextOp(rep [4]uint32) operation { - // get positions - data := t.dict.data[:maxMatchLen] - n, _ := t.dict.buf.Peek(data) - data = data[:n] - var p []int64 - if n < t.wordLen { - p = t.p[:0] - } else { - p = t.p[:maxMatches] - n = t.Matches(data[:t.wordLen], p) - p = p[:n] - } - - // convert positions in potential distances - head := t.dict.head - dists := append(t.distances[:0], 1, 2, 3, 4, 5, 6, 7, 8) - for _, pos := range p { - dis := int(head - pos) - if dis > shortDists { - dists = append(dists, dis) - } - } - - // check distances - var m match - dictLen := t.dict.DictLen() - for _, dist := range dists { - if dist > dictLen { - continue - } - - // Here comes a trick. We are only interested in matches - // that are longer than the matches we have been found - // before. So before we test the whole byte sequence at - // the given distance, we test the first byte that would - // make the match longer. If it doesn't match the byte - // to match, we don't to care any longer. - i := t.dict.buf.rear - dist + m.n - if i < 0 { - i += len(t.dict.buf.data) - } - if t.dict.buf.data[i] != data[m.n] { - // We can't get a longer match. Jump to the next - // distance. - continue - } - - n := t.dict.buf.matchLen(dist, data) - switch n { - case 0: - continue - case 1: - if uint32(dist-minDistance) != rep[0] { - continue - } - } - if n > m.n { - m = match{int64(dist), n} - if n == len(data) { - // No better match will be found. - break - } - } - } - - if m.n == 0 { - return lit{data[0]} - } - return m -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/header.go b/tools/vendor/github.com/ulikunitz/xz/lzma/header.go deleted file mode 100644 index 1ae7d80ca..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/header.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// uint32LE reads an uint32 integer from a byte slice -func uint32LE(b []byte) uint32 { - x := uint32(b[3]) << 24 - x |= uint32(b[2]) << 16 - x |= uint32(b[1]) << 8 - x |= uint32(b[0]) - return x -} - -// uint64LE converts the uint64 value stored as little endian to an uint64 -// value. -func uint64LE(b []byte) uint64 { - x := uint64(b[7]) << 56 - x |= uint64(b[6]) << 48 - x |= uint64(b[5]) << 40 - x |= uint64(b[4]) << 32 - x |= uint64(b[3]) << 24 - x |= uint64(b[2]) << 16 - x |= uint64(b[1]) << 8 - x |= uint64(b[0]) - return x -} - -// putUint32LE puts an uint32 integer into a byte slice that must have at least -// a length of 4 bytes. -func putUint32LE(b []byte, x uint32) { - b[0] = byte(x) - b[1] = byte(x >> 8) - b[2] = byte(x >> 16) - b[3] = byte(x >> 24) -} - -// putUint64LE puts the uint64 value into the byte slice as little endian -// value. The byte slice b must have at least place for 8 bytes. -func putUint64LE(b []byte, x uint64) { - b[0] = byte(x) - b[1] = byte(x >> 8) - b[2] = byte(x >> 16) - b[3] = byte(x >> 24) - b[4] = byte(x >> 32) - b[5] = byte(x >> 40) - b[6] = byte(x >> 48) - b[7] = byte(x >> 56) -} - -// noHeaderSize defines the value of the length field in the LZMA header. -const noHeaderSize uint64 = 1<<64 - 1 - -// HeaderLen provides the length of the LZMA file header. -const HeaderLen = 13 - -// header represents the header of an LZMA file. -type header struct { - properties Properties - dictCap int - // uncompressed size; negative value if no size is given - size int64 -} - -// marshalBinary marshals the header. -func (h *header) marshalBinary() (data []byte, err error) { - if err = h.properties.verify(); err != nil { - return nil, err - } - if !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) { - return nil, fmt.Errorf("lzma: DictCap %d out of range", - h.dictCap) - } - - data = make([]byte, 13) - - // property byte - data[0] = h.properties.Code() - - // dictionary capacity - putUint32LE(data[1:5], uint32(h.dictCap)) - - // uncompressed size - var s uint64 - if h.size > 0 { - s = uint64(h.size) - } else { - s = noHeaderSize - } - putUint64LE(data[5:], s) - - return data, nil -} - -// unmarshalBinary unmarshals the header. -func (h *header) unmarshalBinary(data []byte) error { - if len(data) != HeaderLen { - return errors.New("lzma.unmarshalBinary: data has wrong length") - } - - // properties - var err error - if h.properties, err = PropertiesForCode(data[0]); err != nil { - return err - } - - // dictionary capacity - h.dictCap = int(uint32LE(data[1:])) - if h.dictCap < 0 { - return errors.New( - "LZMA header: dictionary capacity exceeds maximum " + - "integer") - } - - // uncompressed size - s := uint64LE(data[5:]) - if s == noHeaderSize { - h.size = -1 - } else { - h.size = int64(s) - if h.size < 0 { - return errors.New( - "LZMA header: uncompressed size " + - "out of int64 range") - } - } - - return nil -} - -// validDictCap checks whether the dictionary capacity is correct. This -// is used to weed out wrong file headers. -func validDictCap(dictcap int) bool { - if int64(dictcap) == MaxDictCap { - return true - } - for n := uint(10); n < 32; n++ { - if dictcap == 1<= 10 or 2^32-1. If -// there is an explicit size it must not exceed 256 GiB. The length of -// the data argument must be HeaderLen. -func ValidHeader(data []byte) bool { - var h header - if err := h.unmarshalBinary(data); err != nil { - return false - } - if !validDictCap(h.dictCap) { - return false - } - return h.size < 0 || h.size <= 1<<38 -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/header2.go b/tools/vendor/github.com/ulikunitz/xz/lzma/header2.go deleted file mode 100644 index 081fc840b..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/header2.go +++ /dev/null @@ -1,398 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" - "io" -) - -const ( - // maximum size of compressed data in a chunk - maxCompressed = 1 << 16 - // maximum size of uncompressed data in a chunk - maxUncompressed = 1 << 21 -) - -// chunkType represents the type of an LZMA2 chunk. Note that this -// value is an internal representation and no actual encoding of a LZMA2 -// chunk header. -type chunkType byte - -// Possible values for the chunk type. -const ( - // end of stream - cEOS chunkType = iota - // uncompressed; reset dictionary - cUD - // uncompressed; no reset of dictionary - cU - // LZMA compressed; no reset - cL - // LZMA compressed; reset state - cLR - // LZMA compressed; reset state; new property value - cLRN - // LZMA compressed; reset state; new property value; reset dictionary - cLRND -) - -// chunkTypeStrings provide a string representation for the chunk types. -var chunkTypeStrings = [...]string{ - cEOS: "EOS", - cU: "U", - cUD: "UD", - cL: "L", - cLR: "LR", - cLRN: "LRN", - cLRND: "LRND", -} - -// String returns a string representation of the chunk type. -func (c chunkType) String() string { - if !(cEOS <= c && c <= cLRND) { - return "unknown" - } - return chunkTypeStrings[c] -} - -// Actual encodings for the chunk types in the value. Note that the high -// uncompressed size bits are stored in the header byte additionally. -const ( - hEOS = 0 - hUD = 1 - hU = 2 - hL = 1 << 7 - hLR = 1<<7 | 1<<5 - hLRN = 1<<7 | 1<<6 - hLRND = 1<<7 | 1<<6 | 1<<5 -) - -// errHeaderByte indicates an unsupported value for the chunk header -// byte. These bytes starts the variable-length chunk header. -var errHeaderByte = errors.New("lzma: unsupported chunk header byte") - -// headerChunkType converts the header byte into a chunk type. It -// ignores the uncompressed size bits in the chunk header byte. -func headerChunkType(h byte) (c chunkType, err error) { - if h&hL == 0 { - // no compression - switch h { - case hEOS: - c = cEOS - case hUD: - c = cUD - case hU: - c = cU - default: - return 0, errHeaderByte - } - return - } - switch h & hLRND { - case hL: - c = cL - case hLR: - c = cLR - case hLRN: - c = cLRN - case hLRND: - c = cLRND - default: - return 0, errHeaderByte - } - return -} - -// uncompressedHeaderLen provides the length of an uncompressed header -const uncompressedHeaderLen = 3 - -// headerLen returns the length of the LZMA2 header for a given chunk -// type. -func headerLen(c chunkType) int { - switch c { - case cEOS: - return 1 - case cU, cUD: - return uncompressedHeaderLen - case cL, cLR: - return 5 - case cLRN, cLRND: - return 6 - } - panic(fmt.Errorf("unsupported chunk type %d", c)) -} - -// chunkHeader represents the contents of a chunk header. -type chunkHeader struct { - ctype chunkType - uncompressed uint32 - compressed uint16 - props Properties -} - -// String returns a string representation of the chunk header. -func (h *chunkHeader) String() string { - return fmt.Sprintf("%s %d %d %s", h.ctype, h.uncompressed, - h.compressed, &h.props) -} - -// UnmarshalBinary reads the content of the chunk header from the data -// slice. The slice must have the correct length. -func (h *chunkHeader) UnmarshalBinary(data []byte) error { - if len(data) == 0 { - return errors.New("no data") - } - c, err := headerChunkType(data[0]) - if err != nil { - return err - } - - n := headerLen(c) - if len(data) < n { - return errors.New("incomplete data") - } - if len(data) > n { - return errors.New("invalid data length") - } - - *h = chunkHeader{ctype: c} - if c == cEOS { - return nil - } - - h.uncompressed = uint32(uint16BE(data[1:3])) - if c <= cU { - return nil - } - h.uncompressed |= uint32(data[0]&^hLRND) << 16 - - h.compressed = uint16BE(data[3:5]) - if c <= cLR { - return nil - } - - h.props, err = PropertiesForCode(data[5]) - return err -} - -// MarshalBinary encodes the chunk header value. The function checks -// whether the content of the chunk header is correct. -func (h *chunkHeader) MarshalBinary() (data []byte, err error) { - if h.ctype > cLRND { - return nil, errors.New("invalid chunk type") - } - if err = h.props.verify(); err != nil { - return nil, err - } - - data = make([]byte, headerLen(h.ctype)) - - switch h.ctype { - case cEOS: - return data, nil - case cUD: - data[0] = hUD - case cU: - data[0] = hU - case cL: - data[0] = hL - case cLR: - data[0] = hLR - case cLRN: - data[0] = hLRN - case cLRND: - data[0] = hLRND - } - - putUint16BE(data[1:3], uint16(h.uncompressed)) - if h.ctype <= cU { - return data, nil - } - data[0] |= byte(h.uncompressed>>16) &^ hLRND - - putUint16BE(data[3:5], h.compressed) - if h.ctype <= cLR { - return data, nil - } - - data[5] = h.props.Code() - return data, nil -} - -// readChunkHeader reads the chunk header from the IO reader. -func readChunkHeader(r io.Reader) (h *chunkHeader, err error) { - p := make([]byte, 1, 6) - if _, err = io.ReadFull(r, p); err != nil { - return - } - c, err := headerChunkType(p[0]) - if err != nil { - return - } - p = p[:headerLen(c)] - if _, err = io.ReadFull(r, p[1:]); err != nil { - return - } - h = new(chunkHeader) - if err = h.UnmarshalBinary(p); err != nil { - return nil, err - } - return h, nil -} - -// uint16BE converts a big-endian uint16 representation to an uint16 -// value. -func uint16BE(p []byte) uint16 { - return uint16(p[0])<<8 | uint16(p[1]) -} - -// putUint16BE puts the big-endian uint16 presentation into the given -// slice. -func putUint16BE(p []byte, x uint16) { - p[0] = byte(x >> 8) - p[1] = byte(x) -} - -// chunkState is used to manage the state of the chunks -type chunkState byte - -// start and stop define the initial and terminating state of the chunk -// state -const ( - start chunkState = 'S' - stop chunkState = 'T' -) - -// errors for the chunk state handling -var ( - errChunkType = errors.New("lzma: unexpected chunk type") - errState = errors.New("lzma: wrong chunk state") -) - -// next transitions state based on chunk type input -func (c *chunkState) next(ctype chunkType) error { - switch *c { - // start state - case 'S': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cLRND: - *c = 'L' - default: - return errChunkType - } - // normal LZMA mode - case 'L': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cU: - *c = 'U' - case cL, cLR, cLRN, cLRND: - break - default: - return errChunkType - } - // reset required - case 'R': - switch ctype { - case cEOS: - *c = 'T' - case cUD, cU: - break - case cLRN, cLRND: - *c = 'L' - default: - return errChunkType - } - // uncompressed - case 'U': - switch ctype { - case cEOS: - *c = 'T' - case cUD: - *c = 'R' - case cU: - break - case cL, cLR, cLRN, cLRND: - *c = 'L' - default: - return errChunkType - } - // terminal state - case 'T': - return errChunkType - default: - return errState - } - return nil -} - -// defaultChunkType returns the default chunk type for each chunk state. -func (c chunkState) defaultChunkType() chunkType { - switch c { - case 'S': - return cLRND - case 'L', 'U': - return cL - case 'R': - return cLRN - default: - // no error - return cEOS - } -} - -// maxDictCap defines the maximum dictionary capacity supported by the -// LZMA2 dictionary capacity encoding. -const maxDictCap = 1<<32 - 1 - -// maxDictCapCode defines the maximum dictionary capacity code. -const maxDictCapCode = 40 - -// The function decodes the dictionary capacity byte, but doesn't change -// for the correct range of the given byte. -func decodeDictCap(c byte) int64 { - return (2 | int64(c)&1) << (11 + (c>>1)&0x1f) -} - -// DecodeDictCap decodes the encoded dictionary capacity. The function -// returns an error if the code is out of range. -func DecodeDictCap(c byte) (n int64, err error) { - if c >= maxDictCapCode { - if c == maxDictCapCode { - return maxDictCap, nil - } - return 0, errors.New("lzma: invalid dictionary size code") - } - return decodeDictCap(c), nil -} - -// EncodeDictCap encodes a dictionary capacity. The function returns the -// code for the capacity that is greater or equal n. If n exceeds the -// maximum support dictionary capacity, the maximum value is returned. -func EncodeDictCap(n int64) byte { - a, b := byte(0), byte(40) - for a < b { - c := a + (b-a)>>1 - m := decodeDictCap(c) - if n <= m { - if n == m { - return c - } - b = c - } else { - a = c + 1 - } - } - return a -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go b/tools/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go deleted file mode 100644 index 1ea5320a0..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import "errors" - -// maxPosBits defines the number of bits of the position value that are used to -// to compute the posState value. The value is used to select the tree codec -// for length encoding and decoding. -const maxPosBits = 4 - -// minMatchLen and maxMatchLen give the minimum and maximum values for -// encoding and decoding length values. minMatchLen is also used as base -// for the encoded length values. -const ( - minMatchLen = 2 - maxMatchLen = minMatchLen + 16 + 256 - 1 -) - -// lengthCodec support the encoding of the length value. -type lengthCodec struct { - choice [2]prob - low [1 << maxPosBits]treeCodec - mid [1 << maxPosBits]treeCodec - high treeCodec -} - -// deepcopy initializes the lc value as deep copy of the source value. -func (lc *lengthCodec) deepcopy(src *lengthCodec) { - if lc == src { - return - } - lc.choice = src.choice - for i := range lc.low { - lc.low[i].deepcopy(&src.low[i]) - } - for i := range lc.mid { - lc.mid[i].deepcopy(&src.mid[i]) - } - lc.high.deepcopy(&src.high) -} - -// init initializes a new length codec. -func (lc *lengthCodec) init() { - for i := range lc.choice { - lc.choice[i] = probInit - } - for i := range lc.low { - lc.low[i] = makeTreeCodec(3) - } - for i := range lc.mid { - lc.mid[i] = makeTreeCodec(3) - } - lc.high = makeTreeCodec(8) -} - -// Encode encodes the length offset. The length offset l can be compute by -// subtracting minMatchLen (2) from the actual length. -// -// l = length - minMatchLen -func (lc *lengthCodec) Encode(e *rangeEncoder, l uint32, posState uint32, -) (err error) { - if l > maxMatchLen-minMatchLen { - return errors.New("lengthCodec.Encode: l out of range") - } - if l < 8 { - if err = lc.choice[0].Encode(e, 0); err != nil { - return - } - return lc.low[posState].Encode(e, l) - } - if err = lc.choice[0].Encode(e, 1); err != nil { - return - } - if l < 16 { - if err = lc.choice[1].Encode(e, 0); err != nil { - return - } - return lc.mid[posState].Encode(e, l-8) - } - if err = lc.choice[1].Encode(e, 1); err != nil { - return - } - if err = lc.high.Encode(e, l-16); err != nil { - return - } - return nil -} - -// Decode reads the length offset. Add minMatchLen to compute the actual length -// to the length offset l. -func (lc *lengthCodec) Decode(d *rangeDecoder, posState uint32, -) (l uint32, err error) { - var b uint32 - if b, err = lc.choice[0].Decode(d); err != nil { - return - } - if b == 0 { - l, err = lc.low[posState].Decode(d) - return - } - if b, err = lc.choice[1].Decode(d); err != nil { - return - } - if b == 0 { - l, err = lc.mid[posState].Decode(d) - l += 8 - return - } - l, err = lc.high.Decode(d) - l += 16 - return -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go b/tools/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go deleted file mode 100644 index e4ef5fc59..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/literalcodec.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// literalCodec supports the encoding of literal. It provides 768 probability -// values per literal state. The upper 512 probabilities are used with the -// context of a match bit. -type literalCodec struct { - probs []prob -} - -// deepcopy initializes literal codec c as a deep copy of the source. -func (c *literalCodec) deepcopy(src *literalCodec) { - if c == src { - return - } - c.probs = make([]prob, len(src.probs)) - copy(c.probs, src.probs) -} - -// init initializes the literal codec. -func (c *literalCodec) init(lc, lp int) { - switch { - case !(minLC <= lc && lc <= maxLC): - panic("lc out of range") - case !(minLP <= lp && lp <= maxLP): - panic("lp out of range") - } - c.probs = make([]prob, 0x300<= 7 { - m := uint32(match) - for { - matchBit := (m >> 7) & 1 - m <<= 1 - bit := (r >> 7) & 1 - r <<= 1 - i := ((1 + matchBit) << 8) | symbol - if err = probs[i].Encode(e, bit); err != nil { - return - } - symbol = (symbol << 1) | bit - if matchBit != bit { - break - } - if symbol >= 0x100 { - break - } - } - } - for symbol < 0x100 { - bit := (r >> 7) & 1 - r <<= 1 - if err = probs[symbol].Encode(e, bit); err != nil { - return - } - symbol = (symbol << 1) | bit - } - return nil -} - -// Decode decodes a literal byte using the range decoder as well as the LZMA -// state, a match byte, and the literal state. -func (c *literalCodec) Decode(d *rangeDecoder, - state uint32, match byte, litState uint32, -) (s byte, err error) { - k := litState * 0x300 - probs := c.probs[k : k+0x300] - symbol := uint32(1) - if state >= 7 { - m := uint32(match) - for { - matchBit := (m >> 7) & 1 - m <<= 1 - i := ((1 + matchBit) << 8) | symbol - bit, err := d.DecodeBit(&probs[i]) - if err != nil { - return 0, err - } - symbol = (symbol << 1) | bit - if matchBit != bit { - break - } - if symbol >= 0x100 { - break - } - } - } - for symbol < 0x100 { - bit, err := d.DecodeBit(&probs[symbol]) - if err != nil { - return 0, err - } - symbol = (symbol << 1) | bit - } - s = byte(symbol - 0x100) - return s, nil -} - -// minLC and maxLC define the range for LC values. -const ( - minLC = 0 - maxLC = 8 -) - -// minLC and maxLC define the range for LP values. -const ( - minLP = 0 - maxLP = 4 -) diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go b/tools/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go deleted file mode 100644 index 02dfb8bf5..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import "errors" - -// MatchAlgorithm identifies an algorithm to find matches in the -// dictionary. -type MatchAlgorithm byte - -// Supported matcher algorithms. -const ( - HashTable4 MatchAlgorithm = iota - BinaryTree -) - -// maStrings are used by the String method. -var maStrings = map[MatchAlgorithm]string{ - HashTable4: "HashTable4", - BinaryTree: "BinaryTree", -} - -// String returns a string representation of the Matcher. -func (a MatchAlgorithm) String() string { - if s, ok := maStrings[a]; ok { - return s - } - return "unknown" -} - -var errUnsupportedMatchAlgorithm = errors.New( - "lzma: unsupported match algorithm value") - -// verify checks whether the matcher value is supported. -func (a MatchAlgorithm) verify() error { - if _, ok := maStrings[a]; !ok { - return errUnsupportedMatchAlgorithm - } - return nil -} - -func (a MatchAlgorithm) new(dictCap int) (m matcher, err error) { - switch a { - case HashTable4: - return newHashTable(dictCap, 4) - case BinaryTree: - return newBinTree(dictCap) - } - return nil, errUnsupportedMatchAlgorithm -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/operation.go b/tools/vendor/github.com/ulikunitz/xz/lzma/operation.go deleted file mode 100644 index 7b7eddc3d..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/operation.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "fmt" - "unicode" -) - -// operation represents an operation on the dictionary during encoding or -// decoding. -type operation interface { - Len() int -} - -// rep represents a repetition at the given distance and the given length -type match struct { - // supports all possible distance values, including the eos marker - distance int64 - // length - n int -} - -// Len returns the number of bytes matched. -func (m match) Len() int { - return m.n -} - -// String returns a string representation for the repetition. -func (m match) String() string { - return fmt.Sprintf("M{%d,%d}", m.distance, m.n) -} - -// lit represents a single byte literal. -type lit struct { - b byte -} - -// Len returns 1 for the single byte literal. -func (l lit) Len() int { - return 1 -} - -// String returns a string representation for the literal. -func (l lit) String() string { - var c byte - if unicode.IsPrint(rune(l.b)) { - c = l.b - } else { - c = '.' - } - return fmt.Sprintf("L{%c/%02x}", c, l.b) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/prob.go b/tools/vendor/github.com/ulikunitz/xz/lzma/prob.go deleted file mode 100644 index 2feccba11..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/prob.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// movebits defines the number of bits used for the updates of probability -// values. -const movebits = 5 - -// probbits defines the number of bits of a probability value. -const probbits = 11 - -// probInit defines 0.5 as initial value for prob values. -const probInit prob = 1 << (probbits - 1) - -// Type prob represents probabilities. The type can also be used to encode and -// decode single bits. -type prob uint16 - -// Dec decreases the probability. The decrease is proportional to the -// probability value. -func (p *prob) dec() { - *p -= *p >> movebits -} - -// Inc increases the probability. The Increase is proportional to the -// difference of 1 and the probability value. -func (p *prob) inc() { - *p += ((1 << probbits) - *p) >> movebits -} - -// Computes the new bound for a given range using the probability value. -func (p prob) bound(r uint32) uint32 { - return (r >> probbits) * uint32(p) -} - -// Bits returns 1. One is the number of bits that can be encoded or decoded -// with a single prob value. -func (p prob) Bits() int { - return 1 -} - -// Encode encodes the least-significant bit of v. Note that the p value will be -// changed. -func (p *prob) Encode(e *rangeEncoder, v uint32) error { - return e.EncodeBit(v, p) -} - -// Decode decodes a single bit. Note that the p value will change. -func (p *prob) Decode(d *rangeDecoder) (v uint32, err error) { - return d.DecodeBit(p) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/properties.go b/tools/vendor/github.com/ulikunitz/xz/lzma/properties.go deleted file mode 100644 index 15b754ccb..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/properties.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "fmt" -) - -// maximum and minimum values for the LZMA properties. -const ( - minPB = 0 - maxPB = 4 -) - -// maxPropertyCode is the possible maximum of a properties code byte. -const maxPropertyCode = (maxPB+1)*(maxLP+1)*(maxLC+1) - 1 - -// Properties contains the parameters LC, LP and PB. The parameter LC -// defines the number of literal context bits; parameter LP the number -// of literal position bits and PB the number of position bits. -type Properties struct { - LC int - LP int - PB int -} - -// String returns the properties in a string representation. -func (p *Properties) String() string { - return fmt.Sprintf("LC %d LP %d PB %d", p.LC, p.LP, p.PB) -} - -// PropertiesForCode converts a properties code byte into a Properties value. -func PropertiesForCode(code byte) (p Properties, err error) { - if code > maxPropertyCode { - return p, errors.New("lzma: invalid properties code") - } - p.LC = int(code % 9) - code /= 9 - p.LP = int(code % 5) - code /= 5 - p.PB = int(code % 5) - return p, err -} - -// verify checks the properties for correctness. -func (p *Properties) verify() error { - if p == nil { - return errors.New("lzma: properties are nil") - } - if !(minLC <= p.LC && p.LC <= maxLC) { - return errors.New("lzma: lc out of range") - } - if !(minLP <= p.LP && p.LP <= maxLP) { - return errors.New("lzma: lp out of range") - } - if !(minPB <= p.PB && p.PB <= maxPB) { - return errors.New("lzma: pb out of range") - } - return nil -} - -// Code converts the properties to a byte. The function assumes that -// the properties components are all in range. -func (p Properties) Code() byte { - return byte((p.PB*5+p.LP)*9 + p.LC) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go b/tools/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go deleted file mode 100644 index 4b0fee3ff..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/rangecodec.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" -) - -// rangeEncoder implements range encoding of single bits. The low value can -// overflow therefore we need uint64. The cache value is used to handle -// overflows. -type rangeEncoder struct { - lbw *LimitedByteWriter - nrange uint32 - low uint64 - cacheLen int64 - cache byte -} - -// maxInt64 provides the maximal value of the int64 type -const maxInt64 = 1<<63 - 1 - -// newRangeEncoder creates a new range encoder. -func newRangeEncoder(bw io.ByteWriter) (re *rangeEncoder, err error) { - lbw, ok := bw.(*LimitedByteWriter) - if !ok { - lbw = &LimitedByteWriter{BW: bw, N: maxInt64} - } - return &rangeEncoder{ - lbw: lbw, - nrange: 0xffffffff, - cacheLen: 1}, nil -} - -// Available returns the number of bytes that still can be written. The -// method takes the bytes that will be currently written by Close into -// account. -func (e *rangeEncoder) Available() int64 { - return e.lbw.N - (e.cacheLen + 4) -} - -// writeByte writes a single byte to the underlying writer. An error is -// returned if the limit is reached. The written byte will be counted if -// the underlying writer doesn't return an error. -func (e *rangeEncoder) writeByte(c byte) error { - if e.Available() < 1 { - return ErrLimit - } - return e.lbw.WriteByte(c) -} - -// DirectEncodeBit encodes the least-significant bit of b with probability 1/2. -func (e *rangeEncoder) DirectEncodeBit(b uint32) error { - e.nrange >>= 1 - e.low += uint64(e.nrange) & (0 - (uint64(b) & 1)) - - // normalize - const top = 1 << 24 - if e.nrange >= top { - return nil - } - e.nrange <<= 8 - return e.shiftLow() -} - -// EncodeBit encodes the least significant bit of b. The p value will be -// updated by the function depending on the bit encoded. -func (e *rangeEncoder) EncodeBit(b uint32, p *prob) error { - bound := p.bound(e.nrange) - if b&1 == 0 { - e.nrange = bound - p.inc() - } else { - e.low += uint64(bound) - e.nrange -= bound - p.dec() - } - - // normalize - const top = 1 << 24 - if e.nrange >= top { - return nil - } - e.nrange <<= 8 - return e.shiftLow() -} - -// Close writes a complete copy of the low value. -func (e *rangeEncoder) Close() error { - for i := 0; i < 5; i++ { - if err := e.shiftLow(); err != nil { - return err - } - } - return nil -} - -// shiftLow shifts the low value for 8 bit. The shifted byte is written into -// the byte writer. The cache value is used to handle overflows. -func (e *rangeEncoder) shiftLow() error { - if uint32(e.low) < 0xff000000 || (e.low>>32) != 0 { - tmp := e.cache - for { - err := e.writeByte(tmp + byte(e.low>>32)) - if err != nil { - return err - } - tmp = 0xff - e.cacheLen-- - if e.cacheLen <= 0 { - if e.cacheLen < 0 { - panic("negative cacheLen") - } - break - } - } - e.cache = byte(uint32(e.low) >> 24) - } - e.cacheLen++ - e.low = uint64(uint32(e.low) << 8) - return nil -} - -// rangeDecoder decodes single bits of the range encoding stream. -type rangeDecoder struct { - br io.ByteReader - nrange uint32 - code uint32 -} - -// newRangeDecoder initializes a range decoder. It reads five bytes from the -// reader and therefore may return an error. -func newRangeDecoder(br io.ByteReader) (d *rangeDecoder, err error) { - d = &rangeDecoder{br: br, nrange: 0xffffffff} - - b, err := d.br.ReadByte() - if err != nil { - return nil, err - } - if b != 0 { - return nil, errors.New("newRangeDecoder: first byte not zero") - } - - for i := 0; i < 4; i++ { - if err = d.updateCode(); err != nil { - return nil, err - } - } - - if d.code >= d.nrange { - return nil, errors.New("newRangeDecoder: d.code >= d.nrange") - } - - return d, nil -} - -// possiblyAtEnd checks whether the decoder may be at the end of the stream. -func (d *rangeDecoder) possiblyAtEnd() bool { - return d.code == 0 -} - -// DirectDecodeBit decodes a bit with probability 1/2. The return value b will -// contain the bit at the least-significant position. All other bits will be -// zero. -func (d *rangeDecoder) DirectDecodeBit() (b uint32, err error) { - d.nrange >>= 1 - d.code -= d.nrange - t := 0 - (d.code >> 31) - d.code += d.nrange & t - b = (t + 1) & 1 - - // d.code will stay less then d.nrange - - // normalize - // assume d.code < d.nrange - const top = 1 << 24 - if d.nrange >= top { - return b, nil - } - d.nrange <<= 8 - // d.code < d.nrange will be maintained - return b, d.updateCode() -} - -// decodeBit decodes a single bit. The bit will be returned at the -// least-significant position. All other bits will be zero. The probability -// value will be updated. -func (d *rangeDecoder) DecodeBit(p *prob) (b uint32, err error) { - bound := p.bound(d.nrange) - if d.code < bound { - d.nrange = bound - p.inc() - b = 0 - } else { - d.code -= bound - d.nrange -= bound - p.dec() - b = 1 - } - // normalize - // assume d.code < d.nrange - const top = 1 << 24 - if d.nrange >= top { - return b, nil - } - d.nrange <<= 8 - // d.code < d.nrange will be maintained - return b, d.updateCode() -} - -// updateCode reads a new byte into the code. -func (d *rangeDecoder) updateCode() error { - b, err := d.br.ReadByte() - if err != nil { - return err - } - d.code = (d.code << 8) | uint32(b) - return nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/reader.go b/tools/vendor/github.com/ulikunitz/xz/lzma/reader.go deleted file mode 100644 index ae911c389..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/reader.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package lzma supports the decoding and encoding of LZMA streams. -// Reader and Writer support the classic LZMA format. Reader2 and -// Writer2 support the decoding and encoding of LZMA2 streams. -// -// The package is written completely in Go and doesn't rely on any external -// library. -package lzma - -import ( - "errors" - "io" -) - -// ReaderConfig stores the parameters for the reader of the classic LZMA -// format. -type ReaderConfig struct { - DictCap int -} - -// fill converts the zero values of the configuration to the default values. -func (c *ReaderConfig) fill() { - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } -} - -// Verify checks the reader configuration for errors. Zero values will -// be replaced by default values. -func (c *ReaderConfig) Verify() error { - c.fill() - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - return nil -} - -// Reader provides a reader for LZMA files or streams. -type Reader struct { - lzma io.Reader - h header - d *decoder -} - -// NewReader creates a new reader for an LZMA stream using the classic -// format. NewReader reads and checks the header of the LZMA stream. -func NewReader(lzma io.Reader) (r *Reader, err error) { - return ReaderConfig{}.NewReader(lzma) -} - -// NewReader creates a new reader for an LZMA stream in the classic -// format. The function reads and verifies the the header of the LZMA -// stream. -func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - data := make([]byte, HeaderLen) - if _, err := io.ReadFull(lzma, data); err != nil { - if err == io.EOF { - return nil, errors.New("lzma: unexpected EOF") - } - return nil, err - } - r = &Reader{lzma: lzma} - if err = r.h.unmarshalBinary(data); err != nil { - return nil, err - } - if r.h.dictCap < MinDictCap { - r.h.dictCap = MinDictCap - } - dictCap := r.h.dictCap - if c.DictCap > dictCap { - dictCap = c.DictCap - } - - state := newState(r.h.properties) - dict, err := newDecoderDict(dictCap) - if err != nil { - return nil, err - } - r.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size) - if err != nil { - return nil, err - } - return r, nil -} - -// EOSMarker indicates that an EOS marker has been encountered. -func (r *Reader) EOSMarker() bool { - return r.d.eosMarker -} - -// Read returns uncompressed data. -func (r *Reader) Read(p []byte) (n int, err error) { - return r.d.Read(p) -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/reader2.go b/tools/vendor/github.com/ulikunitz/xz/lzma/reader2.go deleted file mode 100644 index f36e26505..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/reader2.go +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "errors" - "io" - - "github.com/ulikunitz/xz/internal/xlog" -) - -// Reader2Config stores the parameters for the LZMA2 reader. -// format. -type Reader2Config struct { - DictCap int -} - -// fill converts the zero values of the configuration to the default values. -func (c *Reader2Config) fill() { - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } -} - -// Verify checks the reader configuration for errors. Zero configuration values -// will be replaced by default values. -func (c *Reader2Config) Verify() error { - c.fill() - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - return nil -} - -// Reader2 supports the reading of LZMA2 chunk sequences. Note that the -// first chunk should have a dictionary reset and the first compressed -// chunk a properties reset. The chunk sequence may not be terminated by -// an end-of-stream chunk. -type Reader2 struct { - r io.Reader - err error - - dict *decoderDict - ur *uncompressedReader - decoder *decoder - chunkReader io.Reader - - cstate chunkState -} - -// NewReader2 creates a reader for an LZMA2 chunk sequence. -func NewReader2(lzma2 io.Reader) (r *Reader2, err error) { - return Reader2Config{}.NewReader2(lzma2) -} - -// NewReader2 creates an LZMA2 reader using the given configuration. -func (c Reader2Config) NewReader2(lzma2 io.Reader) (r *Reader2, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - r = &Reader2{r: lzma2, cstate: start} - r.dict, err = newDecoderDict(c.DictCap) - if err != nil { - return nil, err - } - if err = r.startChunk(); err != nil { - r.err = err - } - return r, nil -} - -// uncompressed tests whether the chunk type specifies an uncompressed -// chunk. -func uncompressed(ctype chunkType) bool { - return ctype == cU || ctype == cUD -} - -// startChunk parses a new chunk. -func (r *Reader2) startChunk() error { - r.chunkReader = nil - header, err := readChunkHeader(r.r) - if err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - xlog.Debugf("chunk header %v", header) - if err = r.cstate.next(header.ctype); err != nil { - return err - } - if r.cstate == stop { - return io.EOF - } - if header.ctype == cUD || header.ctype == cLRND { - r.dict.Reset() - } - size := int64(header.uncompressed) + 1 - if uncompressed(header.ctype) { - if r.ur != nil { - r.ur.Reopen(r.r, size) - } else { - r.ur = newUncompressedReader(r.r, r.dict, size) - } - r.chunkReader = r.ur - return nil - } - br := ByteReader(io.LimitReader(r.r, int64(header.compressed)+1)) - if r.decoder == nil { - state := newState(header.props) - r.decoder, err = newDecoder(br, state, r.dict, size) - if err != nil { - return err - } - r.chunkReader = r.decoder - return nil - } - switch header.ctype { - case cLR: - r.decoder.State.Reset() - case cLRN, cLRND: - r.decoder.State = newState(header.props) - } - err = r.decoder.Reopen(br, size) - if err != nil { - return err - } - r.chunkReader = r.decoder - return nil -} - -// Read reads data from the LZMA2 chunk sequence. -func (r *Reader2) Read(p []byte) (n int, err error) { - if r.err != nil { - return 0, r.err - } - for n < len(p) { - var k int - k, err = r.chunkReader.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - err = r.startChunk() - if err == nil { - continue - } - } - r.err = err - return n, err - } - if k == 0 { - r.err = errors.New("lzma: Reader2 doesn't get data") - return n, r.err - } - } - return n, nil -} - -// EOS returns whether the LZMA2 stream has been terminated by an -// end-of-stream chunk. -func (r *Reader2) EOS() bool { - return r.cstate == stop -} - -// uncompressedReader is used to read uncompressed chunks. -type uncompressedReader struct { - lr io.LimitedReader - Dict *decoderDict - eof bool - err error -} - -// newUncompressedReader initializes a new uncompressedReader. -func newUncompressedReader(r io.Reader, dict *decoderDict, size int64) *uncompressedReader { - ur := &uncompressedReader{ - lr: io.LimitedReader{R: r, N: size}, - Dict: dict, - } - return ur -} - -// Reopen reinitializes an uncompressed reader. -func (ur *uncompressedReader) Reopen(r io.Reader, size int64) { - ur.err = nil - ur.eof = false - ur.lr = io.LimitedReader{R: r, N: size} -} - -// fill reads uncompressed data into the dictionary. -func (ur *uncompressedReader) fill() error { - if !ur.eof { - n, err := io.CopyN(ur.Dict, &ur.lr, int64(ur.Dict.Available())) - if err != io.EOF { - return err - } - ur.eof = true - if n > 0 { - return nil - } - } - if ur.lr.N != 0 { - return io.ErrUnexpectedEOF - } - return io.EOF -} - -// Read reads uncompressed data from the limited reader. -func (ur *uncompressedReader) Read(p []byte) (n int, err error) { - if ur.err != nil { - return 0, ur.err - } - for { - var k int - k, err = ur.Dict.Read(p[n:]) - n += k - if n >= len(p) { - return n, nil - } - if err != nil { - break - } - err = ur.fill() - if err != nil { - break - } - } - ur.err = err - return n, err -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/state.go b/tools/vendor/github.com/ulikunitz/xz/lzma/state.go deleted file mode 100644 index 34779c513..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/state.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// states defines the overall state count -const states = 12 - -// State maintains the full state of the operation encoding or decoding -// process. -type state struct { - rep [4]uint32 - isMatch [states << maxPosBits]prob - isRepG0Long [states << maxPosBits]prob - isRep [states]prob - isRepG0 [states]prob - isRepG1 [states]prob - isRepG2 [states]prob - litCodec literalCodec - lenCodec lengthCodec - repLenCodec lengthCodec - distCodec distCodec - state uint32 - posBitMask uint32 - Properties Properties -} - -// initProbSlice initializes a slice of probabilities. -func initProbSlice(p []prob) { - for i := range p { - p[i] = probInit - } -} - -// Reset sets all state information to the original values. -func (s *state) Reset() { - p := s.Properties - *s = state{ - Properties: p, - // dict: s.dict, - posBitMask: (uint32(1) << uint(p.PB)) - 1, - } - initProbSlice(s.isMatch[:]) - initProbSlice(s.isRep[:]) - initProbSlice(s.isRepG0[:]) - initProbSlice(s.isRepG1[:]) - initProbSlice(s.isRepG2[:]) - initProbSlice(s.isRepG0Long[:]) - s.litCodec.init(p.LC, p.LP) - s.lenCodec.init() - s.repLenCodec.init() - s.distCodec.init() -} - -// newState creates a new state from the give Properties. -func newState(p Properties) *state { - s := &state{Properties: p} - s.Reset() - return s -} - -// deepcopy initializes s as a deep copy of the source. -func (s *state) deepcopy(src *state) { - if s == src { - return - } - s.rep = src.rep - s.isMatch = src.isMatch - s.isRepG0Long = src.isRepG0Long - s.isRep = src.isRep - s.isRepG0 = src.isRepG0 - s.isRepG1 = src.isRepG1 - s.isRepG2 = src.isRepG2 - s.litCodec.deepcopy(&src.litCodec) - s.lenCodec.deepcopy(&src.lenCodec) - s.repLenCodec.deepcopy(&src.repLenCodec) - s.distCodec.deepcopy(&src.distCodec) - s.state = src.state - s.posBitMask = src.posBitMask - s.Properties = src.Properties -} - -// cloneState creates a new clone of the give state. -func cloneState(src *state) *state { - s := new(state) - s.deepcopy(src) - return s -} - -// updateStateLiteral updates the state for a literal. -func (s *state) updateStateLiteral() { - switch { - case s.state < 4: - s.state = 0 - return - case s.state < 10: - s.state -= 3 - return - } - s.state -= 6 -} - -// updateStateMatch updates the state for a match. -func (s *state) updateStateMatch() { - if s.state < 7 { - s.state = 7 - } else { - s.state = 10 - } -} - -// updateStateRep updates the state for a repetition. -func (s *state) updateStateRep() { - if s.state < 7 { - s.state = 8 - } else { - s.state = 11 - } -} - -// updateStateShortRep updates the state for a short repetition. -func (s *state) updateStateShortRep() { - if s.state < 7 { - s.state = 9 - } else { - s.state = 11 - } -} - -// states computes the states of the operation codec. -func (s *state) states(dictHead int64) (state1, state2, posState uint32) { - state1 = s.state - posState = uint32(dictHead) & s.posBitMask - state2 = (s.state << maxPosBits) | posState - return -} - -// litState computes the literal state. -func (s *state) litState(prev byte, dictHead int64) uint32 { - lp, lc := uint(s.Properties.LP), uint(s.Properties.LC) - litState := ((uint32(dictHead) & ((1 << lp) - 1)) << lc) | - (uint32(prev) >> (8 - lc)) - return litState -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go b/tools/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go deleted file mode 100644 index 36b29b598..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/treecodecs.go +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -// treeCodec encodes or decodes values with a fixed bit size. It is using a -// tree of probability value. The root of the tree is the most-significant bit. -type treeCodec struct { - probTree -} - -// makeTreeCodec makes a tree codec. The bits value must be inside the range -// [1,32]. -func makeTreeCodec(bits int) treeCodec { - return treeCodec{makeProbTree(bits)} -} - -// deepcopy initializes tc as a deep copy of the source. -func (tc *treeCodec) deepcopy(src *treeCodec) { - tc.probTree.deepcopy(&src.probTree) -} - -// Encode uses the range encoder to encode a fixed-bit-size value. -func (tc *treeCodec) Encode(e *rangeEncoder, v uint32) (err error) { - m := uint32(1) - for i := int(tc.bits) - 1; i >= 0; i-- { - b := (v >> uint(i)) & 1 - if err := e.EncodeBit(b, &tc.probs[m]); err != nil { - return err - } - m = (m << 1) | b - } - return nil -} - -// Decodes uses the range decoder to decode a fixed-bit-size value. Errors may -// be caused by the range decoder. -func (tc *treeCodec) Decode(d *rangeDecoder) (v uint32, err error) { - m := uint32(1) - for j := 0; j < int(tc.bits); j++ { - b, err := d.DecodeBit(&tc.probs[m]) - if err != nil { - return 0, err - } - m = (m << 1) | b - } - return m - (1 << uint(tc.bits)), nil -} - -// treeReverseCodec is another tree codec, where the least-significant bit is -// the start of the probability tree. -type treeReverseCodec struct { - probTree -} - -// deepcopy initializes the treeReverseCodec as a deep copy of the -// source. -func (tc *treeReverseCodec) deepcopy(src *treeReverseCodec) { - tc.probTree.deepcopy(&src.probTree) -} - -// makeTreeReverseCodec creates treeReverseCodec value. The bits argument must -// be in the range [1,32]. -func makeTreeReverseCodec(bits int) treeReverseCodec { - return treeReverseCodec{makeProbTree(bits)} -} - -// Encode uses range encoder to encode a fixed-bit-size value. The range -// encoder may cause errors. -func (tc *treeReverseCodec) Encode(v uint32, e *rangeEncoder) (err error) { - m := uint32(1) - for i := uint(0); i < uint(tc.bits); i++ { - b := (v >> i) & 1 - if err := e.EncodeBit(b, &tc.probs[m]); err != nil { - return err - } - m = (m << 1) | b - } - return nil -} - -// Decodes uses the range decoder to decode a fixed-bit-size value. Errors -// returned by the range decoder will be returned. -func (tc *treeReverseCodec) Decode(d *rangeDecoder) (v uint32, err error) { - m := uint32(1) - for j := uint(0); j < uint(tc.bits); j++ { - b, err := d.DecodeBit(&tc.probs[m]) - if err != nil { - return 0, err - } - m = (m << 1) | b - v |= b << j - } - return v, nil -} - -// probTree stores enough probability values to be used by the treeEncode and -// treeDecode methods of the range coder types. -type probTree struct { - probs []prob - bits byte -} - -// deepcopy initializes the probTree value as a deep copy of the source. -func (t *probTree) deepcopy(src *probTree) { - if t == src { - return - } - t.probs = make([]prob, len(src.probs)) - copy(t.probs, src.probs) - t.bits = src.bits -} - -// makeProbTree initializes a probTree structure. -func makeProbTree(bits int) probTree { - if !(1 <= bits && bits <= 32) { - panic("bits outside of range [1,32]") - } - t := probTree{ - bits: byte(bits), - probs: make([]prob, 1< 0 { - c.SizeInHeader = true - } - if !c.SizeInHeader { - c.EOSMarker = true - } -} - -// Verify checks WriterConfig for errors. Verify will replace zero -// values with default values. -func (c *WriterConfig) Verify() error { - c.fill() - var err error - if c == nil { - return errors.New("lzma: WriterConfig is nil") - } - if c.Properties == nil { - return errors.New("lzma: WriterConfig has no Properties set") - } - if err = c.Properties.verify(); err != nil { - return err - } - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - if !(maxMatchLen <= c.BufSize) { - return errors.New("lzma: lookahead buffer size too small") - } - if c.SizeInHeader { - if c.Size < 0 { - return errors.New("lzma: negative size not supported") - } - } else if !c.EOSMarker { - return errors.New("lzma: EOS marker is required") - } - if err = c.Matcher.verify(); err != nil { - return err - } - - return nil -} - -// header returns the header structure for this configuration. -func (c *WriterConfig) header() header { - h := header{ - properties: *c.Properties, - dictCap: c.DictCap, - size: -1, - } - if c.SizeInHeader { - h.size = c.Size - } - return h -} - -// Writer writes an LZMA stream in the classic format. -type Writer struct { - h header - bw io.ByteWriter - buf *bufio.Writer - e *encoder -} - -// NewWriter creates a new LZMA writer for the classic format. The -// method will write the header to the underlying stream. -func (c WriterConfig) NewWriter(lzma io.Writer) (w *Writer, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer{h: c.header()} - - var ok bool - w.bw, ok = lzma.(io.ByteWriter) - if !ok { - w.buf = bufio.NewWriter(lzma) - w.bw = w.buf - } - state := newState(w.h.properties) - m, err := c.Matcher.new(w.h.dictCap) - if err != nil { - return nil, err - } - dict, err := newEncoderDict(w.h.dictCap, c.BufSize, m) - if err != nil { - return nil, err - } - var flags encoderFlags - if c.EOSMarker { - flags = eosMarker - } - if w.e, err = newEncoder(w.bw, state, dict, flags); err != nil { - return nil, err - } - - if err = w.writeHeader(); err != nil { - return nil, err - } - return w, nil -} - -// NewWriter creates a new LZMA writer using the classic format. The -// function writes the header to the underlying stream. -func NewWriter(lzma io.Writer) (w *Writer, err error) { - return WriterConfig{}.NewWriter(lzma) -} - -// writeHeader writes the LZMA header into the stream. -func (w *Writer) writeHeader() error { - data, err := w.h.marshalBinary() - if err != nil { - return err - } - _, err = w.bw.(io.Writer).Write(data) - return err -} - -// Write puts data into the Writer. -func (w *Writer) Write(p []byte) (n int, err error) { - if w.h.size >= 0 { - m := w.h.size - m -= w.e.Compressed() + int64(w.e.dict.Buffered()) - if m < 0 { - m = 0 - } - if m < int64(len(p)) { - p = p[:m] - err = ErrNoSpace - } - } - var werr error - if n, werr = w.e.Write(p); werr != nil { - err = werr - } - return n, err -} - -// Close closes the writer stream. It ensures that all data from the -// buffer will be compressed and the LZMA stream will be finished. -func (w *Writer) Close() error { - if w.h.size >= 0 { - n := w.e.Compressed() + int64(w.e.dict.Buffered()) - if n != w.h.size { - return errSize - } - } - err := w.e.Close() - if w.buf != nil { - ferr := w.buf.Flush() - if err == nil { - err = ferr - } - } - return err -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzma/writer2.go b/tools/vendor/github.com/ulikunitz/xz/lzma/writer2.go deleted file mode 100644 index 97bbafa11..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzma/writer2.go +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lzma - -import ( - "bytes" - "errors" - "io" -) - -// Writer2Config is used to create a Writer2 using parameters. -type Writer2Config struct { - // The properties for the encoding. If the it is nil the value - // {LC: 3, LP: 0, PB: 2} will be chosen. - Properties *Properties - // The capacity of the dictionary. If DictCap is zero, the value - // 8 MiB will be chosen. - DictCap int - // Size of the lookahead buffer; value 0 indicates default size - // 4096 - BufSize int - // Match algorithm - Matcher MatchAlgorithm -} - -// fill replaces zero values with default values. -func (c *Writer2Config) fill() { - if c.Properties == nil { - c.Properties = &Properties{LC: 3, LP: 0, PB: 2} - } - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } - if c.BufSize == 0 { - c.BufSize = 4096 - } -} - -// Verify checks the Writer2Config for correctness. Zero values will be -// replaced by default values. -func (c *Writer2Config) Verify() error { - c.fill() - var err error - if c == nil { - return errors.New("lzma: WriterConfig is nil") - } - if c.Properties == nil { - return errors.New("lzma: WriterConfig has no Properties set") - } - if err = c.Properties.verify(); err != nil { - return err - } - if !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) { - return errors.New("lzma: dictionary capacity is out of range") - } - if !(maxMatchLen <= c.BufSize) { - return errors.New("lzma: lookahead buffer size too small") - } - if c.Properties.LC+c.Properties.LP > 4 { - return errors.New("lzma: sum of lc and lp exceeds 4") - } - if err = c.Matcher.verify(); err != nil { - return err - } - return nil -} - -// Writer2 supports the creation of an LZMA2 stream. But note that -// written data is buffered, so call Flush or Close to write data to the -// underlying writer. The Close method writes the end-of-stream marker -// to the stream. So you may be able to concatenate the output of two -// writers as long the output of the first writer has only been flushed -// but not closed. -// -// Any change to the fields Properties, DictCap must be done before the -// first call to Write, Flush or Close. -type Writer2 struct { - w io.Writer - - start *state - encoder *encoder - - cstate chunkState - ctype chunkType - - buf bytes.Buffer - lbw LimitedByteWriter -} - -// NewWriter2 creates an LZMA2 chunk sequence writer with the default -// parameters and options. -func NewWriter2(lzma2 io.Writer) (w *Writer2, err error) { - return Writer2Config{}.NewWriter2(lzma2) -} - -// NewWriter2 creates a new LZMA2 writer using the given configuration. -func (c Writer2Config) NewWriter2(lzma2 io.Writer) (w *Writer2, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer2{ - w: lzma2, - start: newState(*c.Properties), - cstate: start, - ctype: start.defaultChunkType(), - } - w.buf.Grow(maxCompressed) - w.lbw = LimitedByteWriter{BW: &w.buf, N: maxCompressed} - m, err := c.Matcher.new(c.DictCap) - if err != nil { - return nil, err - } - d, err := newEncoderDict(c.DictCap, c.BufSize, m) - if err != nil { - return nil, err - } - w.encoder, err = newEncoder(&w.lbw, cloneState(w.start), d, 0) - if err != nil { - return nil, err - } - return w, nil -} - -// written returns the number of bytes written to the current chunk -func (w *Writer2) written() int { - if w.encoder == nil { - return 0 - } - return int(w.encoder.Compressed()) + w.encoder.dict.Buffered() -} - -// errClosed indicates that the writer is closed. -var errClosed = errors.New("lzma: writer closed") - -// Writes data to LZMA2 stream. Note that written data will be buffered. -// Use Flush or Close to ensure that data is written to the underlying -// writer. -func (w *Writer2) Write(p []byte) (n int, err error) { - if w.cstate == stop { - return 0, errClosed - } - for n < len(p) { - m := maxUncompressed - w.written() - if m <= 0 { - panic("lzma: maxUncompressed reached") - } - var q []byte - if n+m < len(p) { - q = p[n : n+m] - } else { - q = p[n:] - } - k, err := w.encoder.Write(q) - n += k - if err != nil && err != ErrLimit { - return n, err - } - if err == ErrLimit || k == m { - if err = w.flushChunk(); err != nil { - return n, err - } - } - } - return n, nil -} - -// writeUncompressedChunk writes an uncompressed chunk to the LZMA2 -// stream. -func (w *Writer2) writeUncompressedChunk() error { - u := w.encoder.Compressed() - if u <= 0 { - return errors.New("lzma: can't write empty uncompressed chunk") - } - if u > maxUncompressed { - panic("overrun of uncompressed data limit") - } - switch w.ctype { - case cLRND: - w.ctype = cUD - default: - w.ctype = cU - } - w.encoder.state = w.start - - header := chunkHeader{ - ctype: w.ctype, - uncompressed: uint32(u - 1), - } - hdata, err := header.MarshalBinary() - if err != nil { - return err - } - if _, err = w.w.Write(hdata); err != nil { - return err - } - _, err = w.encoder.dict.CopyN(w.w, int(u)) - return err -} - -// writeCompressedChunk writes a compressed chunk to the underlying -// writer. -func (w *Writer2) writeCompressedChunk() error { - if w.ctype == cU || w.ctype == cUD { - panic("chunk type uncompressed") - } - - u := w.encoder.Compressed() - if u <= 0 { - return errors.New("writeCompressedChunk: empty chunk") - } - if u > maxUncompressed { - panic("overrun of uncompressed data limit") - } - c := w.buf.Len() - if c <= 0 { - panic("no compressed data") - } - if c > maxCompressed { - panic("overrun of compressed data limit") - } - header := chunkHeader{ - ctype: w.ctype, - uncompressed: uint32(u - 1), - compressed: uint16(c - 1), - props: w.encoder.state.Properties, - } - hdata, err := header.MarshalBinary() - if err != nil { - return err - } - if _, err = w.w.Write(hdata); err != nil { - return err - } - _, err = io.Copy(w.w, &w.buf) - return err -} - -// writes a single chunk to the underlying writer. -func (w *Writer2) writeChunk() error { - u := int(uncompressedHeaderLen + w.encoder.Compressed()) - c := headerLen(w.ctype) + w.buf.Len() - if u < c { - return w.writeUncompressedChunk() - } - return w.writeCompressedChunk() -} - -// flushChunk terminates the current chunk. The encoder will be reset -// to support the next chunk. -func (w *Writer2) flushChunk() error { - if w.written() == 0 { - return nil - } - var err error - if err = w.encoder.Close(); err != nil { - return err - } - if err = w.writeChunk(); err != nil { - return err - } - w.buf.Reset() - w.lbw.N = maxCompressed - if err = w.encoder.Reopen(&w.lbw); err != nil { - return err - } - if err = w.cstate.next(w.ctype); err != nil { - return err - } - w.ctype = w.cstate.defaultChunkType() - w.start = cloneState(w.encoder.state) - return nil -} - -// Flush writes all buffered data out to the underlying stream. This -// could result in multiple chunks to be created. -func (w *Writer2) Flush() error { - if w.cstate == stop { - return errClosed - } - for w.written() > 0 { - if err := w.flushChunk(); err != nil { - return err - } - } - return nil -} - -// Close terminates the LZMA2 stream with an EOS chunk. -func (w *Writer2) Close() error { - if w.cstate == stop { - return errClosed - } - if err := w.Flush(); err != nil { - return nil - } - // write zero byte EOS chunk - _, err := w.w.Write([]byte{0}) - if err != nil { - return err - } - w.cstate = stop - return nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/lzmafilter.go b/tools/vendor/github.com/ulikunitz/xz/lzmafilter.go deleted file mode 100644 index bd5f42ee8..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/lzmafilter.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "fmt" - "io" - - "github.com/ulikunitz/xz/lzma" -) - -// LZMA filter constants. -const ( - lzmaFilterID = 0x21 - lzmaFilterLen = 3 -) - -// lzmaFilter declares the LZMA2 filter information stored in an xz -// block header. -type lzmaFilter struct { - dictCap int64 -} - -// String returns a representation of the LZMA filter. -func (f lzmaFilter) String() string { - return fmt.Sprintf("LZMA dict cap %#x", f.dictCap) -} - -// id returns the ID for the LZMA2 filter. -func (f lzmaFilter) id() uint64 { return lzmaFilterID } - -// MarshalBinary converts the lzmaFilter in its encoded representation. -func (f lzmaFilter) MarshalBinary() (data []byte, err error) { - c := lzma.EncodeDictCap(f.dictCap) - return []byte{lzmaFilterID, 1, c}, nil -} - -// UnmarshalBinary unmarshals the given data representation of the LZMA2 -// filter. -func (f *lzmaFilter) UnmarshalBinary(data []byte) error { - if len(data) != lzmaFilterLen { - return errors.New("xz: data for LZMA2 filter has wrong length") - } - if data[0] != lzmaFilterID { - return errors.New("xz: wrong LZMA2 filter id") - } - if data[1] != 1 { - return errors.New("xz: wrong LZMA2 filter size") - } - dc, err := lzma.DecodeDictCap(data[2]) - if err != nil { - return errors.New("xz: wrong LZMA2 dictionary size property") - } - - f.dictCap = dc - return nil -} - -// reader creates a new reader for the LZMA2 filter. -func (f lzmaFilter) reader(r io.Reader, c *ReaderConfig) (fr io.Reader, - err error) { - - config := new(lzma.Reader2Config) - if c != nil { - config.DictCap = c.DictCap - } - dc := int(f.dictCap) - if dc < 1 { - return nil, errors.New("xz: LZMA2 filter parameter " + - "dictionary capacity overflow") - } - if dc > config.DictCap { - config.DictCap = dc - } - - fr, err = config.NewReader2(r) - if err != nil { - return nil, err - } - return fr, nil -} - -// writeCloser creates a io.WriteCloser for the LZMA2 filter. -func (f lzmaFilter) writeCloser(w io.WriteCloser, c *WriterConfig, -) (fw io.WriteCloser, err error) { - config := new(lzma.Writer2Config) - if c != nil { - *config = lzma.Writer2Config{ - Properties: c.Properties, - DictCap: c.DictCap, - BufSize: c.BufSize, - Matcher: c.Matcher, - } - } - - dc := int(f.dictCap) - if dc < 1 { - return nil, errors.New("xz: LZMA2 filter parameter " + - "dictionary capacity overflow") - } - if dc > config.DictCap { - config.DictCap = dc - } - - fw, err = config.NewWriter2(w) - if err != nil { - return nil, err - } - return fw, nil -} - -// last returns true, because an LZMA2 filter must be the last filter in -// the filter list. -func (f lzmaFilter) last() bool { return true } diff --git a/tools/vendor/github.com/ulikunitz/xz/make-docs b/tools/vendor/github.com/ulikunitz/xz/make-docs deleted file mode 100644 index a8c612ce1..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/make-docs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -set -x -pandoc -t html5 -f markdown -s --css=doc/md.css -o README.html README.md -pandoc -t html5 -f markdown -s --css=doc/md.css -o TODO.html TODO.md diff --git a/tools/vendor/github.com/ulikunitz/xz/none-check.go b/tools/vendor/github.com/ulikunitz/xz/none-check.go deleted file mode 100644 index 6a56a2612..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/none-check.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import "hash" - -type noneHash struct{} - -func (h noneHash) Write(p []byte) (n int, err error) { return len(p), nil } - -func (h noneHash) Sum(b []byte) []byte { return b } - -func (h noneHash) Reset() {} - -func (h noneHash) Size() int { return 0 } - -func (h noneHash) BlockSize() int { return 0 } - -func newNoneHash() hash.Hash { - return &noneHash{} -} diff --git a/tools/vendor/github.com/ulikunitz/xz/reader.go b/tools/vendor/github.com/ulikunitz/xz/reader.go deleted file mode 100644 index bde1412cf..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/reader.go +++ /dev/null @@ -1,359 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package xz supports the compression and decompression of xz files. It -// supports version 1.0.4 of the specification without the non-LZMA2 -// filters. See http://tukaani.org/xz/xz-file-format-1.0.4.txt -package xz - -import ( - "bytes" - "errors" - "fmt" - "hash" - "io" - - "github.com/ulikunitz/xz/internal/xlog" - "github.com/ulikunitz/xz/lzma" -) - -// ReaderConfig defines the parameters for the xz reader. The -// SingleStream parameter requests the reader to assume that the -// underlying stream contains only a single stream. -type ReaderConfig struct { - DictCap int - SingleStream bool -} - -// Verify checks the reader parameters for Validity. Zero values will be -// replaced by default values. -func (c *ReaderConfig) Verify() error { - if c == nil { - return errors.New("xz: reader parameters are nil") - } - lc := lzma.Reader2Config{DictCap: c.DictCap} - if err := lc.Verify(); err != nil { - return err - } - return nil -} - -// Reader supports the reading of one or multiple xz streams. -type Reader struct { - ReaderConfig - - xz io.Reader - sr *streamReader -} - -// streamReader decodes a single xz stream -type streamReader struct { - ReaderConfig - - xz io.Reader - br *blockReader - newHash func() hash.Hash - h header - index []record -} - -// NewReader creates a new xz reader using the default parameters. -// The function reads and checks the header of the first XZ stream. The -// reader will process multiple streams including padding. -func NewReader(xz io.Reader) (r *Reader, err error) { - return ReaderConfig{}.NewReader(xz) -} - -// NewReader creates an xz stream reader. The created reader will be -// able to process multiple streams and padding unless a SingleStream -// has been set in the reader configuration c. -func (c ReaderConfig) NewReader(xz io.Reader) (r *Reader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - r = &Reader{ - ReaderConfig: c, - xz: xz, - } - if r.sr, err = c.newStreamReader(xz); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return nil, err - } - return r, nil -} - -var errUnexpectedData = errors.New("xz: unexpected data after stream") - -// Read reads uncompressed data from the stream. -func (r *Reader) Read(p []byte) (n int, err error) { - for n < len(p) { - if r.sr == nil { - if r.SingleStream { - data := make([]byte, 1) - _, err = io.ReadFull(r.xz, data) - if err != io.EOF { - return n, errUnexpectedData - } - return n, io.EOF - } - for { - r.sr, err = r.ReaderConfig.newStreamReader(r.xz) - if err != errPadding { - break - } - } - if err != nil { - return n, err - } - } - k, err := r.sr.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - r.sr = nil - continue - } - return n, err - } - } - return n, nil -} - -var errPadding = errors.New("xz: padding (4 zero bytes) encountered") - -// newStreamReader creates a new xz stream reader using the given configuration -// parameters. NewReader reads and checks the header of the xz stream. -func (c ReaderConfig) newStreamReader(xz io.Reader) (r *streamReader, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - data := make([]byte, HeaderLen) - if _, err := io.ReadFull(xz, data[:4]); err != nil { - return nil, err - } - if bytes.Equal(data[:4], []byte{0, 0, 0, 0}) { - return nil, errPadding - } - if _, err = io.ReadFull(xz, data[4:]); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return nil, err - } - r = &streamReader{ - ReaderConfig: c, - xz: xz, - index: make([]record, 0, 4), - } - if err = r.h.UnmarshalBinary(data); err != nil { - return nil, err - } - xlog.Debugf("xz header %s", r.h) - if r.newHash, err = newHashFunc(r.h.flags); err != nil { - return nil, err - } - return r, nil -} - -// readTail reads the index body and the xz footer. -func (r *streamReader) readTail() error { - index, n, err := readIndexBody(r.xz, len(r.index)) - if err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - - for i, rec := range r.index { - if rec != index[i] { - return fmt.Errorf("xz: record %d is %v; want %v", - i, rec, index[i]) - } - } - - p := make([]byte, footerLen) - if _, err = io.ReadFull(r.xz, p); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return err - } - var f footer - if err = f.UnmarshalBinary(p); err != nil { - return err - } - xlog.Debugf("xz footer %s", f) - if f.flags != r.h.flags { - return errors.New("xz: footer flags incorrect") - } - if f.indexSize != int64(n)+1 { - return errors.New("xz: index size in footer wrong") - } - return nil -} - -// Read reads actual data from the xz stream. -func (r *streamReader) Read(p []byte) (n int, err error) { - for n < len(p) { - if r.br == nil { - bh, hlen, err := readBlockHeader(r.xz) - if err != nil { - if err == errIndexIndicator { - if err = r.readTail(); err != nil { - return n, err - } - return n, io.EOF - } - return n, err - } - xlog.Debugf("block %v", *bh) - r.br, err = r.ReaderConfig.newBlockReader(r.xz, bh, - hlen, r.newHash()) - if err != nil { - return n, err - } - } - k, err := r.br.Read(p[n:]) - n += k - if err != nil { - if err == io.EOF { - r.index = append(r.index, r.br.record()) - r.br = nil - } else { - return n, err - } - } - } - return n, nil -} - -// countingReader is a reader that counts the bytes read. -type countingReader struct { - r io.Reader - n int64 -} - -// Read reads data from the wrapped reader and adds it to the n field. -func (lr *countingReader) Read(p []byte) (n int, err error) { - n, err = lr.r.Read(p) - lr.n += int64(n) - return n, err -} - -// blockReader supports the reading of a block. -type blockReader struct { - lxz countingReader - header *blockHeader - headerLen int - n int64 - hash hash.Hash - r io.Reader -} - -// newBlockReader creates a new block reader. -func (c *ReaderConfig) newBlockReader(xz io.Reader, h *blockHeader, - hlen int, hash hash.Hash) (br *blockReader, err error) { - - br = &blockReader{ - lxz: countingReader{r: xz}, - header: h, - headerLen: hlen, - hash: hash, - } - - fr, err := c.newFilterReader(&br.lxz, h.filters) - if err != nil { - return nil, err - } - if br.hash.Size() != 0 { - br.r = io.TeeReader(fr, br.hash) - } else { - br.r = fr - } - - return br, nil -} - -// uncompressedSize returns the uncompressed size of the block. -func (br *blockReader) uncompressedSize() int64 { - return br.n -} - -// compressedSize returns the compressed size of the block. -func (br *blockReader) compressedSize() int64 { - return br.lxz.n -} - -// unpaddedSize computes the unpadded size for the block. -func (br *blockReader) unpaddedSize() int64 { - n := int64(br.headerLen) - n += br.compressedSize() - n += int64(br.hash.Size()) - return n -} - -// record returns the index record for the current block. -func (br *blockReader) record() record { - return record{br.unpaddedSize(), br.uncompressedSize()} -} - -// Read reads data from the block. -func (br *blockReader) Read(p []byte) (n int, err error) { - n, err = br.r.Read(p) - br.n += int64(n) - - u := br.header.uncompressedSize - if u >= 0 && br.uncompressedSize() > u { - return n, errors.New("xz: wrong uncompressed size for block") - } - c := br.header.compressedSize - if c >= 0 && br.compressedSize() > c { - return n, errors.New("xz: wrong compressed size for block") - } - if err != io.EOF { - return n, err - } - if br.uncompressedSize() < u || br.compressedSize() < c { - return n, io.ErrUnexpectedEOF - } - - s := br.hash.Size() - k := padLen(br.lxz.n) - q := make([]byte, k+s, k+2*s) - if _, err = io.ReadFull(br.lxz.r, q); err != nil { - if err == io.EOF { - err = io.ErrUnexpectedEOF - } - return n, err - } - if !allZeros(q[:k]) { - return n, errors.New("xz: non-zero block padding") - } - checkSum := q[k:] - computedSum := br.hash.Sum(checkSum[s:]) - if !bytes.Equal(checkSum, computedSum) { - return n, errors.New("xz: checksum error for block") - } - return n, io.EOF -} - -func (c *ReaderConfig) newFilterReader(r io.Reader, f []filter) (fr io.Reader, - err error) { - - if err = verifyFilters(f); err != nil { - return nil, err - } - - fr = r - for i := len(f) - 1; i >= 0; i-- { - fr, err = f[i].reader(fr, c) - if err != nil { - return nil, err - } - } - return fr, nil -} diff --git a/tools/vendor/github.com/ulikunitz/xz/writer.go b/tools/vendor/github.com/ulikunitz/xz/writer.go deleted file mode 100644 index f693e0aef..000000000 --- a/tools/vendor/github.com/ulikunitz/xz/writer.go +++ /dev/null @@ -1,399 +0,0 @@ -// Copyright 2014-2022 Ulrich Kunitz. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package xz - -import ( - "errors" - "fmt" - "hash" - "io" - - "github.com/ulikunitz/xz/lzma" -) - -// WriterConfig describe the parameters for an xz writer. -type WriterConfig struct { - Properties *lzma.Properties - DictCap int - BufSize int - BlockSize int64 - // checksum method: CRC32, CRC64 or SHA256 (default: CRC64) - CheckSum byte - // Forces NoChecksum (default: false) - NoCheckSum bool - // match algorithm - Matcher lzma.MatchAlgorithm -} - -// fill replaces zero values with default values. -func (c *WriterConfig) fill() { - if c.Properties == nil { - c.Properties = &lzma.Properties{LC: 3, LP: 0, PB: 2} - } - if c.DictCap == 0 { - c.DictCap = 8 * 1024 * 1024 - } - if c.BufSize == 0 { - c.BufSize = 4096 - } - if c.BlockSize == 0 { - c.BlockSize = maxInt64 - } - if c.CheckSum == 0 { - c.CheckSum = CRC64 - } - if c.NoCheckSum { - c.CheckSum = None - } -} - -// Verify checks the configuration for errors. Zero values will be -// replaced by default values. -func (c *WriterConfig) Verify() error { - if c == nil { - return errors.New("xz: writer configuration is nil") - } - c.fill() - lc := lzma.Writer2Config{ - Properties: c.Properties, - DictCap: c.DictCap, - BufSize: c.BufSize, - Matcher: c.Matcher, - } - if err := lc.Verify(); err != nil { - return err - } - if c.BlockSize <= 0 { - return errors.New("xz: block size out of range") - } - if err := verifyFlags(c.CheckSum); err != nil { - return err - } - return nil -} - -// filters creates the filter list for the given parameters. -func (c *WriterConfig) filters() []filter { - return []filter{&lzmaFilter{int64(c.DictCap)}} -} - -// maxInt64 defines the maximum 64-bit signed integer. -const maxInt64 = 1<<63 - 1 - -// verifyFilters checks the filter list for the length and the right -// sequence of filters. -func verifyFilters(f []filter) error { - if len(f) == 0 { - return errors.New("xz: no filters") - } - if len(f) > 4 { - return errors.New("xz: more than four filters") - } - for _, g := range f[:len(f)-1] { - if g.last() { - return errors.New("xz: last filter is not last") - } - } - if !f[len(f)-1].last() { - return errors.New("xz: wrong last filter") - } - return nil -} - -// newFilterWriteCloser converts a filter list into a WriteCloser that -// can be used by a blockWriter. -func (c *WriterConfig) newFilterWriteCloser(w io.Writer, f []filter) (fw io.WriteCloser, err error) { - if err = verifyFilters(f); err != nil { - return nil, err - } - fw = nopWriteCloser(w) - for i := len(f) - 1; i >= 0; i-- { - fw, err = f[i].writeCloser(fw, c) - if err != nil { - return nil, err - } - } - return fw, nil -} - -// nopWCloser implements a WriteCloser with a Close method not doing -// anything. -type nopWCloser struct { - io.Writer -} - -// Close returns nil and doesn't do anything else. -func (c nopWCloser) Close() error { - return nil -} - -// nopWriteCloser converts the Writer into a WriteCloser with a Close -// function that does nothing beside returning nil. -func nopWriteCloser(w io.Writer) io.WriteCloser { - return nopWCloser{w} -} - -// Writer compresses data written to it. It is an io.WriteCloser. -type Writer struct { - WriterConfig - - xz io.Writer - bw *blockWriter - newHash func() hash.Hash - h header - index []record - closed bool -} - -// newBlockWriter creates a new block writer writes the header out. -func (w *Writer) newBlockWriter() error { - var err error - w.bw, err = w.WriterConfig.newBlockWriter(w.xz, w.newHash()) - if err != nil { - return err - } - if err = w.bw.writeHeader(w.xz); err != nil { - return err - } - return nil -} - -// closeBlockWriter closes a block writer and records the sizes in the -// index. -func (w *Writer) closeBlockWriter() error { - var err error - if err = w.bw.Close(); err != nil { - return err - } - w.index = append(w.index, w.bw.record()) - return nil -} - -// NewWriter creates a new xz writer using default parameters. -func NewWriter(xz io.Writer) (w *Writer, err error) { - return WriterConfig{}.NewWriter(xz) -} - -// NewWriter creates a new Writer using the given configuration parameters. -func (c WriterConfig) NewWriter(xz io.Writer) (w *Writer, err error) { - if err = c.Verify(); err != nil { - return nil, err - } - w = &Writer{ - WriterConfig: c, - xz: xz, - h: header{c.CheckSum}, - index: make([]record, 0, 4), - } - if w.newHash, err = newHashFunc(c.CheckSum); err != nil { - return nil, err - } - data, err := w.h.MarshalBinary() - if err != nil { - return nil, fmt.Errorf("w.h.MarshalBinary(): error %w", err) - } - if _, err = xz.Write(data); err != nil { - return nil, err - } - if err = w.newBlockWriter(); err != nil { - return nil, err - } - return w, nil - -} - -// Write compresses the uncompressed data provided. -func (w *Writer) Write(p []byte) (n int, err error) { - if w.closed { - return 0, errClosed - } - for { - k, err := w.bw.Write(p[n:]) - n += k - if err != errNoSpace { - return n, err - } - if err = w.closeBlockWriter(); err != nil { - return n, err - } - if err = w.newBlockWriter(); err != nil { - return n, err - } - } -} - -// Close closes the writer and adds the footer to the Writer. Close -// doesn't close the underlying writer. -func (w *Writer) Close() error { - if w.closed { - return errClosed - } - w.closed = true - var err error - if err = w.closeBlockWriter(); err != nil { - return err - } - - f := footer{flags: w.h.flags} - if f.indexSize, err = writeIndex(w.xz, w.index); err != nil { - return err - } - data, err := f.MarshalBinary() - if err != nil { - return err - } - if _, err = w.xz.Write(data); err != nil { - return err - } - return nil -} - -// countingWriter is a writer that counts all data written to it. -type countingWriter struct { - w io.Writer - n int64 -} - -// Write writes data to the countingWriter. -func (cw *countingWriter) Write(p []byte) (n int, err error) { - n, err = cw.w.Write(p) - cw.n += int64(n) - if err == nil && cw.n < 0 { - return n, errors.New("xz: counter overflow") - } - return -} - -// blockWriter is writes a single block. -type blockWriter struct { - cxz countingWriter - // mw combines io.WriteCloser w and the hash. - mw io.Writer - w io.WriteCloser - n int64 - blockSize int64 - closed bool - headerLen int - - filters []filter - hash hash.Hash -} - -// newBlockWriter creates a new block writer. -func (c *WriterConfig) newBlockWriter(xz io.Writer, hash hash.Hash) (bw *blockWriter, err error) { - bw = &blockWriter{ - cxz: countingWriter{w: xz}, - blockSize: c.BlockSize, - filters: c.filters(), - hash: hash, - } - bw.w, err = c.newFilterWriteCloser(&bw.cxz, bw.filters) - if err != nil { - return nil, err - } - if bw.hash.Size() != 0 { - bw.mw = io.MultiWriter(bw.w, bw.hash) - } else { - bw.mw = bw.w - } - return bw, nil -} - -// writeHeader writes the header. If the function is called after Close -// the commpressedSize and uncompressedSize fields will be filled. -func (bw *blockWriter) writeHeader(w io.Writer) error { - h := blockHeader{ - compressedSize: -1, - uncompressedSize: -1, - filters: bw.filters, - } - if bw.closed { - h.compressedSize = bw.compressedSize() - h.uncompressedSize = bw.uncompressedSize() - } - data, err := h.MarshalBinary() - if err != nil { - return err - } - if _, err = w.Write(data); err != nil { - return err - } - bw.headerLen = len(data) - return nil -} - -// compressed size returns the amount of data written to the underlying -// stream. -func (bw *blockWriter) compressedSize() int64 { - return bw.cxz.n -} - -// uncompressedSize returns the number of data written to the -// blockWriter -func (bw *blockWriter) uncompressedSize() int64 { - return bw.n -} - -// unpaddedSize returns the sum of the header length, the uncompressed -// size of the block and the hash size. -func (bw *blockWriter) unpaddedSize() int64 { - if bw.headerLen <= 0 { - panic("xz: block header not written") - } - n := int64(bw.headerLen) - n += bw.compressedSize() - n += int64(bw.hash.Size()) - return n -} - -// record returns the record for the current stream. Call Close before -// calling this method. -func (bw *blockWriter) record() record { - return record{bw.unpaddedSize(), bw.uncompressedSize()} -} - -var errClosed = errors.New("xz: writer already closed") - -var errNoSpace = errors.New("xz: no space") - -// Write writes uncompressed data to the block writer. -func (bw *blockWriter) Write(p []byte) (n int, err error) { - if bw.closed { - return 0, errClosed - } - - t := bw.blockSize - bw.n - if int64(len(p)) > t { - err = errNoSpace - p = p[:t] - } - - var werr error - n, werr = bw.mw.Write(p) - bw.n += int64(n) - if werr != nil { - return n, werr - } - return n, err -} - -// Close closes the writer. -func (bw *blockWriter) Close() error { - if bw.closed { - return errClosed - } - bw.closed = true - if err := bw.w.Close(); err != nil { - return err - } - s := bw.hash.Size() - k := padLen(bw.cxz.n) - p := make([]byte, k+s) - bw.hash.Sum(p[k:k]) - if _, err := bw.cxz.w.Write(p); err != nil { - return err - } - return nil -} diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/asm/README.md b/tools/vendor/github.com/vbatts/tar-split/tar/asm/README.md deleted file mode 100644 index 2a3a5b56a..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/asm/README.md +++ /dev/null @@ -1,44 +0,0 @@ -asm -=== - -This library for assembly and disassembly of tar archives, facilitated by -`github.com/vbatts/tar-split/tar/storage`. - - -Concerns --------- - -For completely safe assembly/disassembly, there will need to be a Content -Addressable Storage (CAS) directory, that maps to a checksum in the -`storage.Entity` of `storage.FileType`. - -This is due to the fact that tar archives _can_ allow multiple records for the -same path, but the last one effectively wins. Even if the prior records had a -different payload. - -In this way, when assembling an archive from relative paths, if the archive has -multiple entries for the same path, then all payloads read in from a relative -path would be identical. - - -Thoughts --------- - -Have a look-aside directory or storage. This way when a clobbering record is -encountered from the tar stream, then the payload of the prior/existing file is -stored to the CAS. This way the clobbering record's file payload can be -extracted, but we'll have preserved the payload needed to reassemble a precise -tar archive. - -clobbered/path/to/file.[0-N] - -*alternatively* - -We could just _not_ support tar streams that have clobbering file paths. -Appending records to the archive is not incredibly common, and doesn't happen -by default for most implementations. Not supporting them wouldn't be a -security concern either, as if it did occur, we would reassemble an archive -that doesn't validate signature/checksum, so it shouldn't be trusted anyway. - -Otherwise, this will allow us to defer support for appended files as a FUTURE FEATURE. - diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go b/tools/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go deleted file mode 100644 index 3eb32ab61..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/asm/assemble.go +++ /dev/null @@ -1,132 +0,0 @@ -package asm - -import ( - "bytes" - "fmt" - "hash" - "hash/crc64" - "io" - "sync" - - "github.com/vbatts/tar-split/tar/storage" -) - -// NewOutputTarStream returns an io.ReadCloser that is an assembled tar archive -// stream. -// -// It takes a storage.FileGetter, for mapping the file payloads that are to be read in, -// and a storage.Unpacker, which has access to the rawbytes and file order -// metadata. With the combination of these two items, a precise assembled Tar -// archive is possible. -func NewOutputTarStream(fg storage.FileGetter, up storage.Unpacker) io.ReadCloser { - // ... Since these are interfaces, this is possible, so let's not have a nil pointer - if fg == nil || up == nil { - return nil - } - pr, pw := io.Pipe() - go func() { - err := WriteOutputTarStream(fg, up, pw) - if err != nil { - pw.CloseWithError(err) - } else { - pw.Close() - } - }() - return pr -} - -// WriteOutputTarStream writes assembled tar archive to a writer. -func WriteOutputTarStream(fg storage.FileGetter, up storage.Unpacker, w io.Writer) error { - // ... Since these are interfaces, this is possible, so let's not have a nil pointer - if fg == nil || up == nil { - return nil - } - var copyBuffer []byte - var crcHash hash.Hash - var crcSum []byte - var multiWriter io.Writer - for { - entry, err := up.Next() - if err != nil { - if err == io.EOF { - return nil - } - return err - } - switch entry.Type { - case storage.SegmentType: - if _, err := w.Write(entry.Payload); err != nil { - return err - } - case storage.FileType: - if entry.Size == 0 { - continue - } - fh, err := fg.Get(entry.GetName()) - if err != nil { - return err - } - if crcHash == nil { - crcHash = crc64.New(storage.CRCTable) - crcSum = make([]byte, 8) - multiWriter = io.MultiWriter(w, crcHash) - copyBuffer = byteBufferPool.Get().([]byte) - // TODO once we have some benchmark or memory profile then we can experiment with using *bytes.Buffer - //nolint:staticcheck // SA6002 not going to do a pointer here - defer byteBufferPool.Put(copyBuffer) - } else { - crcHash.Reset() - } - - if _, err := copyWithBuffer(multiWriter, fh, copyBuffer); err != nil { - fh.Close() - return err - } - - if !bytes.Equal(crcHash.Sum(crcSum[:0]), entry.Payload) { - // I would rather this be a comparable ErrInvalidChecksum or such, - // but since it's coming through the PipeReader, the context of - // _which_ file would be lost... - fh.Close() - return fmt.Errorf("file integrity checksum failed for %q", entry.GetName()) - } - fh.Close() - } - } -} - -var byteBufferPool = &sync.Pool{ - New: func() interface{} { - return make([]byte, 32*1024) - }, -} - -// copyWithBuffer is taken from stdlib io.Copy implementation -// https://github.com/golang/go/blob/go1.5.1/src/io/io.go#L367 -func copyWithBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) { - for { - nr, er := src.Read(buf) - if nr > 0 { - nw, ew := dst.Write(buf[0:nr]) - if nw > 0 { - written += int64(nw) - } - if ew != nil { - err = ew - break - } - if nr != nw { - err = io.ErrShortWrite - break - } - } - if er == io.EOF { - break - } - if er != nil { - err = er - break - } - } - return written, err -} diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go b/tools/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go deleted file mode 100644 index 80c2522af..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/asm/disassemble.go +++ /dev/null @@ -1,156 +0,0 @@ -package asm - -import ( - "io" - - "github.com/vbatts/tar-split/archive/tar" - "github.com/vbatts/tar-split/tar/storage" -) - -// NewInputTarStream wraps the Reader stream of a tar archive and provides a -// Reader stream of the same. -// -// In the middle it will pack the segments and file metadata to storage.Packer -// `p`. -// -// The the storage.FilePutter is where payload of files in the stream are -// stashed. If this stashing is not needed, you can provide a nil -// storage.FilePutter. Since the checksumming is still needed, then a default -// of NewDiscardFilePutter will be used internally -func NewInputTarStream(r io.Reader, p storage.Packer, fp storage.FilePutter) (io.Reader, error) { - // What to do here... folks will want their own access to the Reader that is - // their tar archive stream, but we'll need that same stream to use our - // forked 'archive/tar'. - // Perhaps do an io.TeeReader that hands back an io.Reader for them to read - // from, and we'll MITM the stream to store metadata. - // We'll need a storage.FilePutter too ... - - // Another concern, whether to do any storage.FilePutter operations, such that we - // don't extract any amount of the archive. But then again, we're not making - // files/directories, hardlinks, etc. Just writing the io to the storage.FilePutter. - // Perhaps we have a DiscardFilePutter that is a bit bucket. - - // we'll return the pipe reader, since TeeReader does not buffer and will - // only read what the outputRdr Read's. Since Tar archives have padding on - // the end, we want to be the one reading the padding, even if the user's - // `archive/tar` doesn't care. - pR, pW := io.Pipe() - outputRdr := io.TeeReader(r, pW) - - // we need a putter that will generate the crc64 sums of file payloads - if fp == nil { - fp = storage.NewDiscardFilePutter() - } - - go func() { - tr := tar.NewReader(outputRdr) - tr.RawAccounting = true - for { - hdr, err := tr.Next() - if err != nil { - if err != io.EOF { - pW.CloseWithError(err) - return - } - // even when an EOF is reached, there is often 1024 null bytes on - // the end of an archive. Collect them too. - if b := tr.RawBytes(); len(b) > 0 { - _, err := p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - break // not return. We need the end of the reader. - } - if hdr == nil { - break // not return. We need the end of the reader. - } - - if b := tr.RawBytes(); len(b) > 0 { - _, err := p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - - var csum []byte - if hdr.Size > 0 { - var err error - _, csum, err = fp.Put(hdr.Name, tr) - if err != nil { - pW.CloseWithError(err) - return - } - } - - entry := storage.Entry{ - Type: storage.FileType, - Size: hdr.Size, - Payload: csum, - } - // For proper marshalling of non-utf8 characters - entry.SetName(hdr.Name) - - // File entries added, regardless of size - _, err = p.AddEntry(entry) - if err != nil { - pW.CloseWithError(err) - return - } - - if b := tr.RawBytes(); len(b) > 0 { - _, err = p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: b, - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - } - - // It is allowable, and not uncommon that there is further padding on - // the end of an archive, apart from the expected 1024 null bytes. We - // do this in chunks rather than in one go to avoid cases where a - // maliciously crafted tar file tries to trick us into reading many GBs - // into memory. - const paddingChunkSize = 1024 * 1024 - var paddingChunk [paddingChunkSize]byte - for { - var isEOF bool - n, err := outputRdr.Read(paddingChunk[:]) - if err != nil { - if err != io.EOF { - pW.CloseWithError(err) - return - } - isEOF = true - } - if n != 0 { - _, err = p.AddEntry(storage.Entry{ - Type: storage.SegmentType, - Payload: paddingChunk[:n], - }) - if err != nil { - pW.CloseWithError(err) - return - } - } - if isEOF { - break - } - } - pW.Close() - }() - - return pR, nil -} diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/asm/doc.go b/tools/vendor/github.com/vbatts/tar-split/tar/asm/doc.go deleted file mode 100644 index 4367b9022..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/asm/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -/* -Package asm provides the API for streaming assembly and disassembly of tar -archives. - -Using the `github.com/vbatts/tar-split/tar/storage` for Packing/Unpacking the -metadata for a stream, as well as an implementation of Getting/Putting the file -entries' payload. -*/ -package asm diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/storage/doc.go b/tools/vendor/github.com/vbatts/tar-split/tar/storage/doc.go deleted file mode 100644 index 83f7089ff..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/storage/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -/* -Package storage is for metadata of a tar archive. - -Packing and unpacking the Entries of the stream. The types of streams are -either segments of raw bytes (for the raw headers and various padding) and for -an entry marking a file payload. - -The raw bytes are stored precisely in the packed (marshalled) Entry, whereas -the file payload marker include the name of the file, size, and crc64 checksum -(for basic file integrity). -*/ -package storage diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/storage/entry.go b/tools/vendor/github.com/vbatts/tar-split/tar/storage/entry.go deleted file mode 100644 index c91e7ea1e..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/storage/entry.go +++ /dev/null @@ -1,78 +0,0 @@ -package storage - -import "unicode/utf8" - -// Entries is for sorting by Position -type Entries []Entry - -func (e Entries) Len() int { return len(e) } -func (e Entries) Swap(i, j int) { e[i], e[j] = e[j], e[i] } -func (e Entries) Less(i, j int) bool { return e[i].Position < e[j].Position } - -// Type of Entry -type Type int - -const ( - // FileType represents a file payload from the tar stream. - // - // This will be used to map to relative paths on disk. Only Size > 0 will get - // read into a resulting output stream (due to hardlinks). - FileType Type = 1 + iota - // SegmentType represents a raw bytes segment from the archive stream. These raw - // byte segments consist of the raw headers and various padding. - // - // Its payload is to be marshalled base64 encoded. - SegmentType -) - -// Entry is the structure for packing and unpacking the information read from -// the Tar archive. -// -// FileType Payload checksum is using `hash/crc64` for basic file integrity, -// _not_ for cryptography. -// From http://www.backplane.com/matt/crc64.html, CRC32 has almost 40,000 -// collisions in a sample of 18.2 million, CRC64 had none. -type Entry struct { - Type Type `json:"type"` - Name string `json:"name,omitempty"` - NameRaw []byte `json:"name_raw,omitempty"` - Size int64 `json:"size,omitempty"` - Payload []byte `json:"payload"` // SegmentType stores payload here; FileType stores crc64 checksum here; - Position int `json:"position"` -} - -// SetName will check name for valid UTF-8 string, and set the appropriate -// field. See https://github.com/vbatts/tar-split/issues/17 -func (e *Entry) SetName(name string) { - if utf8.ValidString(name) { - e.Name = name - } else { - e.NameRaw = []byte(name) - } -} - -// SetNameBytes will check name for valid UTF-8 string, and set the appropriate -// field -func (e *Entry) SetNameBytes(name []byte) { - if utf8.Valid(name) { - e.Name = string(name) - } else { - e.NameRaw = name - } -} - -// GetName returns the string for the entry's name, regardless of the field stored in -func (e *Entry) GetName() string { - if len(e.NameRaw) > 0 { - return string(e.NameRaw) - } - return e.Name -} - -// GetNameBytes returns the bytes for the entry's name, regardless of the field stored in -func (e *Entry) GetNameBytes() []byte { - if len(e.NameRaw) > 0 { - return e.NameRaw - } - return []byte(e.Name) -} diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/storage/getter.go b/tools/vendor/github.com/vbatts/tar-split/tar/storage/getter.go deleted file mode 100644 index 9fed24aa8..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/storage/getter.go +++ /dev/null @@ -1,105 +0,0 @@ -package storage - -import ( - "bytes" - "errors" - "hash/crc64" - "io" - "os" - "path/filepath" -) - -// FileGetter is the interface for getting a stream of a file payload, -// addressed by name/filename. Presumably, the names will be scoped to relative -// file paths. -type FileGetter interface { - // Get returns a stream for the provided file path - Get(filename string) (output io.ReadCloser, err error) -} - -// FilePutter is the interface for storing a stream of a file payload, -// addressed by name/filename. -type FilePutter interface { - // Put returns the size of the stream received, and the crc64 checksum for - // the provided stream - Put(filename string, input io.Reader) (size int64, checksum []byte, err error) -} - -// FileGetPutter is the interface that groups both Getting and Putting file -// payloads. -type FileGetPutter interface { - FileGetter - FilePutter -} - -// NewPathFileGetter returns a FileGetter that is for files relative to path -// relpath. -func NewPathFileGetter(relpath string) FileGetter { - return &pathFileGetter{root: relpath} -} - -type pathFileGetter struct { - root string -} - -func (pfg pathFileGetter) Get(filename string) (io.ReadCloser, error) { - return os.Open(filepath.Join(pfg.root, filename)) -} - -type bufferFileGetPutter struct { - files map[string][]byte -} - -func (bfgp bufferFileGetPutter) Get(name string) (io.ReadCloser, error) { - if _, ok := bfgp.files[name]; !ok { - return nil, errors.New("no such file") - } - b := bytes.NewBuffer(bfgp.files[name]) - return &readCloserWrapper{b}, nil -} - -func (bfgp *bufferFileGetPutter) Put(name string, r io.Reader) (int64, []byte, error) { - crc := crc64.New(CRCTable) - buf := bytes.NewBuffer(nil) - cw := io.MultiWriter(crc, buf) - i, err := io.Copy(cw, r) - if err != nil { - return 0, nil, err - } - bfgp.files[name] = buf.Bytes() - return i, crc.Sum(nil), nil -} - -type readCloserWrapper struct { - io.Reader -} - -func (w *readCloserWrapper) Close() error { return nil } - -// NewBufferFileGetPutter is a simple in-memory FileGetPutter -// -// Implication is this is memory intensive... -// Probably best for testing or light weight cases. -func NewBufferFileGetPutter() FileGetPutter { - return &bufferFileGetPutter{ - files: map[string][]byte{}, - } -} - -// NewDiscardFilePutter is a bit bucket FilePutter -func NewDiscardFilePutter() FilePutter { - return &bitBucketFilePutter{} -} - -type bitBucketFilePutter struct { - buffer [32 * 1024]byte // 32 kB is the buffer size currently used by io.Copy, as of August 2021. -} - -func (bbfp *bitBucketFilePutter) Put(name string, r io.Reader) (int64, []byte, error) { - c := crc64.New(CRCTable) - i, err := io.CopyBuffer(c, r, bbfp.buffer[:]) - return i, c.Sum(nil), err -} - -// CRCTable is the default table used for crc64 sum calculations -var CRCTable = crc64.MakeTable(crc64.ISO) diff --git a/tools/vendor/github.com/vbatts/tar-split/tar/storage/packer.go b/tools/vendor/github.com/vbatts/tar-split/tar/storage/packer.go deleted file mode 100644 index 4ba62d9b7..000000000 --- a/tools/vendor/github.com/vbatts/tar-split/tar/storage/packer.go +++ /dev/null @@ -1,110 +0,0 @@ -package storage - -import ( - "encoding/json" - "errors" - "io" - "path/filepath" - "unicode/utf8" -) - -// ErrDuplicatePath occurs when a tar archive has more than one entry for the -// same file path -var ErrDuplicatePath = errors.New("duplicates of file paths not supported") - -// Packer describes the methods to pack Entries to a storage destination -type Packer interface { - // AddEntry packs the Entry and returns its position - AddEntry(e Entry) (int, error) -} - -// Unpacker describes the methods to read Entries from a source -type Unpacker interface { - // Next returns the next Entry being unpacked, or error, until io.EOF - Next() (*Entry, error) -} - -type jsonUnpacker struct { - seen seenNames - dec *json.Decoder -} - -func (jup *jsonUnpacker) Next() (*Entry, error) { - var e Entry - err := jup.dec.Decode(&e) - if err != nil { - return nil, err - } - - // check for dup name - if e.Type == FileType { - cName := filepath.Clean(e.GetName()) - if _, ok := jup.seen[cName]; ok { - return nil, ErrDuplicatePath - } - jup.seen[cName] = struct{}{} - } - - return &e, err -} - -// NewJSONUnpacker provides an Unpacker that reads Entries (SegmentType and -// FileType) as a json document. -// -// Each Entry read are expected to be delimited by new line. -func NewJSONUnpacker(r io.Reader) Unpacker { - return &jsonUnpacker{ - dec: json.NewDecoder(r), - seen: seenNames{}, - } -} - -type jsonPacker struct { - w io.Writer - e *json.Encoder - pos int - seen seenNames -} - -type seenNames map[string]struct{} - -func (jp *jsonPacker) AddEntry(e Entry) (int, error) { - // if Name is not valid utf8, switch it to raw first. - if e.Name != "" { - if !utf8.ValidString(e.Name) { - e.NameRaw = []byte(e.Name) - e.Name = "" - } - } - - // check early for dup name - if e.Type == FileType { - cName := filepath.Clean(e.GetName()) - if _, ok := jp.seen[cName]; ok { - return -1, ErrDuplicatePath - } - jp.seen[cName] = struct{}{} - } - - e.Position = jp.pos - err := jp.e.Encode(e) - if err != nil { - return -1, err - } - - // made it this far, increment now - jp.pos++ - return e.Position, nil -} - -// NewJSONPacker provides a Packer that writes each Entry (SegmentType and -// FileType) as a json document. -// -// The Entries are delimited by new line. -func NewJSONPacker(w io.Writer) Packer { - return &jsonPacker{ - w: w, - e: json.NewEncoder(w), - seen: seenNames{}, - } -} diff --git a/tools/vendor/go.etcd.io/bbolt/.go-version b/tools/vendor/go.etcd.io/bbolt/.go-version new file mode 100644 index 000000000..f124bfa15 --- /dev/null +++ b/tools/vendor/go.etcd.io/bbolt/.go-version @@ -0,0 +1 @@ +1.21.9 diff --git a/tools/vendor/go.etcd.io/bbolt/README.md b/tools/vendor/go.etcd.io/bbolt/README.md index 2be669a60..495a93ef8 100644 --- a/tools/vendor/go.etcd.io/bbolt/README.md +++ b/tools/vendor/go.etcd.io/bbolt/README.md @@ -421,10 +421,19 @@ Prev() Move to the previous key. ``` Each of those functions has a return signature of `(key []byte, value []byte)`. -When you have iterated to the end of the cursor then `Next()` will return a -`nil` key. You must seek to a position using `First()`, `Last()`, or `Seek()` -before calling `Next()` or `Prev()`. If you do not seek to a position then -these functions will return a `nil` key. +You must seek to a position using `First()`, `Last()`, or `Seek()` before calling +`Next()` or `Prev()`. If you do not seek to a position then these functions will +return a `nil` key. + +When you have iterated to the end of the cursor, then `Next()` will return a +`nil` key and the cursor still points to the last element if present. When you +have iterated to the beginning of the cursor, then `Prev()` will return a `nil` +key and the cursor still points to the first element if present. + +If you remove key/value pairs during iteration, the cursor may automatically +move to the next position if present in current node each time removing a key. +When you call `c.Next()` after removing a key, it may skip one key/value pair. +Refer to [pull/611](https://github.com/etcd-io/bbolt/pull/611) to get more detailed info. During iteration, if the key is non-`nil` but the value is `nil`, that means the key refers to a bucket rather than a value. Use `Bucket.Bucket()` to @@ -850,6 +859,12 @@ Here are a few things to note when evaluating and using Bolt: to grow. However, it's important to note that deleting large chunks of data will not allow you to reclaim that space on disk. +* Removing key/values pairs in a bucket during iteration on the bucket using + cursor may not work properly. Each time when removing a key/value pair, the + cursor may automatically move to the next position if present. When users + call `c.Next()` after removing a key, it may skip one key/value pair. + Refer to https://github.com/etcd-io/bbolt/pull/611 for more detailed info. + For more information on page allocation, [see this comment][page-allocation]. [page-allocation]: https://github.com/boltdb/bolt/issues/308#issuecomment-74811638 diff --git a/tools/vendor/go.etcd.io/bbolt/cursor.go b/tools/vendor/go.etcd.io/bbolt/cursor.go index 5dafb0cac..bbfd92a9b 100644 --- a/tools/vendor/go.etcd.io/bbolt/cursor.go +++ b/tools/vendor/go.etcd.io/bbolt/cursor.go @@ -71,7 +71,7 @@ func (c *Cursor) Last() (key []byte, value []byte) { // If this is an empty page (calling Delete may result in empty pages) // we call prev to find the last page that is not empty - for len(c.stack) > 0 && c.stack[len(c.stack)-1].count() == 0 { + for len(c.stack) > 1 && c.stack[len(c.stack)-1].count() == 0 { c.prev() } @@ -254,6 +254,15 @@ func (c *Cursor) prev() (key []byte, value []byte, flags uint32) { elem.index-- break } + // If we've hit the beginning, we should stop moving the cursor, + // and stay at the first element, so that users can continue to + // iterate over the elements in reverse direction by calling `Next`. + // We should return nil in such case. + // Refer to https://github.com/etcd-io/bbolt/issues/733 + if len(c.stack) == 1 { + c.first() + return nil, nil, 0 + } c.stack = c.stack[:i] } diff --git a/tools/vendor/go.etcd.io/bbolt/freelist.go b/tools/vendor/go.etcd.io/bbolt/freelist.go index 50f2d0e17..61d43f81b 100644 --- a/tools/vendor/go.etcd.io/bbolt/freelist.go +++ b/tools/vendor/go.etcd.io/bbolt/freelist.go @@ -282,9 +282,8 @@ func (f *freelist) read(p *page) { if count == 0 { f.ids = nil } else { - var ids []pgid - data := unsafeIndex(unsafe.Pointer(p), unsafe.Sizeof(*p), unsafe.Sizeof(ids[0]), idx) - unsafeSlice(unsafe.Pointer(&ids), data, count) + data := unsafeIndex(unsafe.Pointer(p), unsafe.Sizeof(*p), unsafe.Sizeof(pgid(0)), idx) + ids := unsafe.Slice((*pgid)(data), count) // copy the ids, so we don't modify on the freelist page directly idsCopy := make([]pgid, count) @@ -322,15 +321,13 @@ func (f *freelist) write(p *page) error { p.count = uint16(l) } else if l < 0xFFFF { p.count = uint16(l) - var ids []pgid data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p)) - unsafeSlice(unsafe.Pointer(&ids), data, l) + ids := unsafe.Slice((*pgid)(data), l) f.copyall(ids) } else { p.count = 0xFFFF - var ids []pgid data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p)) - unsafeSlice(unsafe.Pointer(&ids), data, l+1) + ids := unsafe.Slice((*pgid)(data), l+1) ids[0] = pgid(l) f.copyall(ids[1:]) } diff --git a/tools/vendor/go.etcd.io/bbolt/page.go b/tools/vendor/go.etcd.io/bbolt/page.go index 379645c97..bb081b031 100644 --- a/tools/vendor/go.etcd.io/bbolt/page.go +++ b/tools/vendor/go.etcd.io/bbolt/page.go @@ -74,9 +74,8 @@ func (p *page) leafPageElements() []leafPageElement { if p.count == 0 { return nil } - var elems []leafPageElement data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p)) - unsafeSlice(unsafe.Pointer(&elems), data, int(p.count)) + elems := unsafe.Slice((*leafPageElement)(data), int(p.count)) return elems } @@ -91,9 +90,8 @@ func (p *page) branchPageElements() []branchPageElement { if p.count == 0 { return nil } - var elems []branchPageElement data := unsafeAdd(unsafe.Pointer(p), unsafe.Sizeof(*p)) - unsafeSlice(unsafe.Pointer(&elems), data, int(p.count)) + elems := unsafe.Slice((*branchPageElement)(data), int(p.count)) return elems } diff --git a/tools/vendor/go.etcd.io/bbolt/unsafe.go b/tools/vendor/go.etcd.io/bbolt/unsafe.go index c0e503750..7745d32ce 100644 --- a/tools/vendor/go.etcd.io/bbolt/unsafe.go +++ b/tools/vendor/go.etcd.io/bbolt/unsafe.go @@ -1,7 +1,6 @@ package bbolt import ( - "reflect" "unsafe" ) @@ -26,14 +25,3 @@ func unsafeByteSlice(base unsafe.Pointer, offset uintptr, i, j int) []byte { // all), so this is believed to be correct. return (*[maxAllocSize]byte)(unsafeAdd(base, offset))[i:j:j] } - -// unsafeSlice modifies the data, len, and cap of a slice variable pointed to by -// the slice parameter. This helper should be used over other direct -// manipulation of reflect.SliceHeader to prevent misuse, namely, converting -// from reflect.SliceHeader to a Go slice type. -func unsafeSlice(slice, data unsafe.Pointer, len int) { - s := (*reflect.SliceHeader)(slice) - s.Data = uintptr(data) - s.Cap = len - s.Len = len -} diff --git a/tools/vendor/golang.org/x/oauth2/LICENSE b/tools/vendor/golang.org/x/oauth2/LICENSE index 6a66aea5e..2a7cf70da 100644 --- a/tools/vendor/golang.org/x/oauth2/LICENSE +++ b/tools/vendor/golang.org/x/oauth2/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/tools/vendor/golang.org/x/tools/cmd/stringer/stringer.go b/tools/vendor/golang.org/x/tools/cmd/stringer/stringer.go deleted file mode 100644 index 94eaee844..000000000 --- a/tools/vendor/golang.org/x/tools/cmd/stringer/stringer.go +++ /dev/null @@ -1,739 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer -// interface. Given the name of a (signed or unsigned) integer type T that has constants -// defined, stringer will create a new self-contained Go source file implementing -// -// func (t T) String() string -// -// The file is created in the same package and directory as the package that defines T. -// It has helpful defaults designed for use with go generate. -// -// Stringer works best with constants that are consecutive values such as created using iota, -// but creates good code regardless. In the future it might also provide custom support for -// constant sets that are bit patterns. -// -// For example, given this snippet, -// -// package painkiller -// -// type Pill int -// -// const ( -// Placebo Pill = iota -// Aspirin -// Ibuprofen -// Paracetamol -// Acetaminophen = Paracetamol -// ) -// -// running this command -// -// stringer -type=Pill -// -// in the same directory will create the file pill_string.go, in package painkiller, -// containing a definition of -// -// func (Pill) String() string -// -// That method will translate the value of a Pill constant to the string representation -// of the respective constant name, so that the call fmt.Print(painkiller.Aspirin) will -// print the string "Aspirin". -// -// Typically this process would be run using go generate, like this: -// -// //go:generate stringer -type=Pill -// -// If multiple constants have the same value, the lexically first matching name will -// be used (in the example, Acetaminophen will print as "Paracetamol"). -// -// With no arguments, it processes the package in the current directory. -// Otherwise, the arguments must name a single directory holding a Go package -// or a set of Go source files that represent a single Go package. -// -// The -type flag accepts a comma-separated list of types so a single run can -// generate methods for multiple types. The default output file is t_string.go, -// where t is the lower-cased name of the first type listed. It can be overridden -// with the -output flag. -// -// Types can also be declared in tests, in which case type declarations in the -// non-test package or its test variant are preferred over types defined in the -// package with suffix "_test". -// The default output file for type declarations in tests is t_string_test.go with t picked as above. -// -// The -linecomment flag tells stringer to generate the text of any line comment, trimmed -// of leading spaces, instead of the constant name. For instance, if the constants above had a -// Pill prefix, one could write -// -// PillAspirin // Aspirin -// -// to suppress it in the output. - -//go:debug gotypesalias=0 - -package main // import "golang.org/x/tools/cmd/stringer" - -import ( - "bytes" - "flag" - "fmt" - "go/ast" - "go/constant" - "go/format" - "go/token" - "go/types" - "log" - "os" - "path/filepath" - "sort" - "strings" - - "golang.org/x/tools/go/packages" -) - -var ( - typeNames = flag.String("type", "", "comma-separated list of type names; must be set") - output = flag.String("output", "", "output file name; default srcdir/_string.go") - trimprefix = flag.String("trimprefix", "", "trim the `prefix` from the generated constant names") - linecomment = flag.Bool("linecomment", false, "use line comment text as printed text when present") - buildTags = flag.String("tags", "", "comma-separated list of build tags to apply") -) - -// Usage is a replacement usage function for the flags package. -func Usage() { - fmt.Fprintf(os.Stderr, "Usage of stringer:\n") - fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T [directory]\n") - fmt.Fprintf(os.Stderr, "\tstringer [flags] -type T files... # Must be a single package\n") - fmt.Fprintf(os.Stderr, "For more information, see:\n") - fmt.Fprintf(os.Stderr, "\thttps://pkg.go.dev/golang.org/x/tools/cmd/stringer\n") - fmt.Fprintf(os.Stderr, "Flags:\n") - flag.PrintDefaults() -} - -func main() { - log.SetFlags(0) - log.SetPrefix("stringer: ") - flag.Usage = Usage - flag.Parse() - if len(*typeNames) == 0 { - flag.Usage() - os.Exit(2) - } - types := strings.Split(*typeNames, ",") - var tags []string - if len(*buildTags) > 0 { - tags = strings.Split(*buildTags, ",") - } - - // We accept either one directory or a list of files. Which do we have? - args := flag.Args() - if len(args) == 0 { - // Default: process whole package in current directory. - args = []string{"."} - } - - // Parse the package once. - var dir string - // TODO(suzmue): accept other patterns for packages (directories, list of files, import paths, etc). - if len(args) == 1 && isDirectory(args[0]) { - dir = args[0] - } else { - if len(tags) != 0 { - log.Fatal("-tags option applies only to directories, not when files are specified") - } - dir = filepath.Dir(args[0]) - } - - // For each type, generate code in the first package where the type is declared. - // The order of packages is as follows: - // package x - // package x compiled for tests - // package x_test - // - // Each package pass could result in a separate generated file. - // These files must have the same package and test/not-test nature as the types - // from which they were generated. - // - // Types will be excluded when generated, to avoid repetitions. - pkgs := loadPackages(args, tags, *trimprefix, *linecomment, nil /* logf */) - sort.Slice(pkgs, func(i, j int) bool { - // Put x_test packages last. - iTest := strings.HasSuffix(pkgs[i].name, "_test") - jTest := strings.HasSuffix(pkgs[j].name, "_test") - if iTest != jTest { - return !iTest - } - - return len(pkgs[i].files) < len(pkgs[j].files) - }) - for _, pkg := range pkgs { - g := Generator{ - pkg: pkg, - } - - // Print the header and package clause. - g.Printf("// Code generated by \"stringer %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " ")) - g.Printf("\n") - g.Printf("package %s", g.pkg.name) - g.Printf("\n") - g.Printf("import \"strconv\"\n") // Used by all methods. - - // Run generate for types that can be found. Keep the rest for the remainingTypes iteration. - var foundTypes, remainingTypes []string - for _, typeName := range types { - values := findValues(typeName, pkg) - if len(values) > 0 { - g.generate(typeName, values) - foundTypes = append(foundTypes, typeName) - } else { - remainingTypes = append(remainingTypes, typeName) - } - } - if len(foundTypes) == 0 { - // This package didn't have any of the relevant types, skip writing a file. - continue - } - if len(remainingTypes) > 0 && output != nil && *output != "" { - log.Fatalf("cannot write to single file (-output=%q) when matching types are found in multiple packages", *output) - } - types = remainingTypes - - // Format the output. - src := g.format() - - // Write to file. - outputName := *output - if outputName == "" { - // Type names will be unique across packages since only the first - // match is picked. - // So there won't be collisions between a package compiled for tests - // and the separate package of tests (package foo_test). - outputName = filepath.Join(dir, baseName(pkg, foundTypes[0])) - } - err := os.WriteFile(outputName, src, 0644) - if err != nil { - log.Fatalf("writing output: %s", err) - } - } - - if len(types) > 0 { - log.Fatalf("no values defined for types: %s", strings.Join(types, ",")) - } -} - -// baseName that will put the generated code together with pkg. -func baseName(pkg *Package, typename string) string { - suffix := "string.go" - if pkg.hasTestFiles { - suffix = "string_test.go" - } - return fmt.Sprintf("%s_%s", strings.ToLower(typename), suffix) -} - -// isDirectory reports whether the named file is a directory. -func isDirectory(name string) bool { - info, err := os.Stat(name) - if err != nil { - log.Fatal(err) - } - return info.IsDir() -} - -// Generator holds the state of the analysis. Primarily used to buffer -// the output for format.Source. -type Generator struct { - buf bytes.Buffer // Accumulated output. - pkg *Package // Package we are scanning. - - logf func(format string, args ...interface{}) // test logging hook; nil when not testing -} - -func (g *Generator) Printf(format string, args ...interface{}) { - fmt.Fprintf(&g.buf, format, args...) -} - -// File holds a single parsed file and associated data. -type File struct { - pkg *Package // Package to which this file belongs. - file *ast.File // Parsed AST. - // These fields are reset for each type being generated. - typeName string // Name of the constant type. - values []Value // Accumulator for constant values of that type. - - trimPrefix string - lineComment bool -} - -type Package struct { - name string - defs map[*ast.Ident]types.Object - files []*File - hasTestFiles bool -} - -// loadPackages analyzes the single package constructed from the patterns and tags. -// loadPackages exits if there is an error. -// -// Returns all variants (such as tests) of the package. -// -// logf is a test logging hook. It can be nil when not testing. -func loadPackages( - patterns, tags []string, - trimPrefix string, lineComment bool, - logf func(format string, args ...interface{}), -) []*Package { - cfg := &packages.Config{ - Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedSyntax | packages.NeedFiles, - // Tests are included, let the caller decide how to fold them in. - Tests: true, - BuildFlags: []string{fmt.Sprintf("-tags=%s", strings.Join(tags, " "))}, - Logf: logf, - } - pkgs, err := packages.Load(cfg, patterns...) - if err != nil { - log.Fatal(err) - } - if len(pkgs) == 0 { - log.Fatalf("error: no packages matching %v", strings.Join(patterns, " ")) - } - - out := make([]*Package, len(pkgs)) - for i, pkg := range pkgs { - p := &Package{ - name: pkg.Name, - defs: pkg.TypesInfo.Defs, - files: make([]*File, len(pkg.Syntax)), - } - - for j, file := range pkg.Syntax { - p.files[j] = &File{ - file: file, - pkg: p, - - trimPrefix: trimPrefix, - lineComment: lineComment, - } - } - - // Keep track of test files, since we might want to generated - // code that ends up in that kind of package. - // Can be replaced once https://go.dev/issue/38445 lands. - for _, f := range pkg.GoFiles { - if strings.HasSuffix(f, "_test.go") { - p.hasTestFiles = true - break - } - } - - out[i] = p - } - return out -} - -func findValues(typeName string, pkg *Package) []Value { - values := make([]Value, 0, 100) - for _, file := range pkg.files { - // Set the state for this run of the walker. - file.typeName = typeName - file.values = nil - if file.file != nil { - ast.Inspect(file.file, file.genDecl) - values = append(values, file.values...) - } - } - return values -} - -// generate produces the String method for the named type. -func (g *Generator) generate(typeName string, values []Value) { - // Generate code that will fail if the constants change value. - g.Printf("func _() {\n") - g.Printf("\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n") - g.Printf("\t// Re-run the stringer command to generate them again.\n") - g.Printf("\tvar x [1]struct{}\n") - for _, v := range values { - g.Printf("\t_ = x[%s - %s]\n", v.originalName, v.str) - } - g.Printf("}\n") - runs := splitIntoRuns(values) - // The decision of which pattern to use depends on the number of - // runs in the numbers. If there's only one, it's easy. For more than - // one, there's a tradeoff between complexity and size of the data - // and code vs. the simplicity of a map. A map takes more space, - // but so does the code. The decision here (crossover at 10) is - // arbitrary, but considers that for large numbers of runs the cost - // of the linear scan in the switch might become important, and - // rather than use yet another algorithm such as binary search, - // we punt and use a map. In any case, the likelihood of a map - // being necessary for any realistic example other than bitmasks - // is very low. And bitmasks probably deserve their own analysis, - // to be done some other day. - switch { - case len(runs) == 1: - g.buildOneRun(runs, typeName) - case len(runs) <= 10: - g.buildMultipleRuns(runs, typeName) - default: - g.buildMap(runs, typeName) - } -} - -// splitIntoRuns breaks the values into runs of contiguous sequences. -// For example, given 1,2,3,5,6,7 it returns {1,2,3},{5,6,7}. -// The input slice is known to be non-empty. -func splitIntoRuns(values []Value) [][]Value { - // We use stable sort so the lexically first name is chosen for equal elements. - sort.Stable(byValue(values)) - // Remove duplicates. Stable sort has put the one we want to print first, - // so use that one. The String method won't care about which named constant - // was the argument, so the first name for the given value is the only one to keep. - // We need to do this because identical values would cause the switch or map - // to fail to compile. - j := 1 - for i := 1; i < len(values); i++ { - if values[i].value != values[i-1].value { - values[j] = values[i] - j++ - } - } - values = values[:j] - runs := make([][]Value, 0, 10) - for len(values) > 0 { - // One contiguous sequence per outer loop. - i := 1 - for i < len(values) && values[i].value == values[i-1].value+1 { - i++ - } - runs = append(runs, values[:i]) - values = values[i:] - } - return runs -} - -// format returns the gofmt-ed contents of the Generator's buffer. -func (g *Generator) format() []byte { - src, err := format.Source(g.buf.Bytes()) - if err != nil { - // Should never happen, but can arise when developing this code. - // The user can compile the output to see the error. - log.Printf("warning: internal error: invalid Go generated: %s", err) - log.Printf("warning: compile the package to analyze the error") - return g.buf.Bytes() - } - return src -} - -// Value represents a declared constant. -type Value struct { - originalName string // The name of the constant. - name string // The name with trimmed prefix. - // The value is stored as a bit pattern alone. The boolean tells us - // whether to interpret it as an int64 or a uint64; the only place - // this matters is when sorting. - // Much of the time the str field is all we need; it is printed - // by Value.String. - value uint64 // Will be converted to int64 when needed. - signed bool // Whether the constant is a signed type. - str string // The string representation given by the "go/constant" package. -} - -func (v *Value) String() string { - return v.str -} - -// byValue lets us sort the constants into increasing order. -// We take care in the Less method to sort in signed or unsigned order, -// as appropriate. -type byValue []Value - -func (b byValue) Len() int { return len(b) } -func (b byValue) Swap(i, j int) { b[i], b[j] = b[j], b[i] } -func (b byValue) Less(i, j int) bool { - if b[i].signed { - return int64(b[i].value) < int64(b[j].value) - } - return b[i].value < b[j].value -} - -// genDecl processes one declaration clause. -func (f *File) genDecl(node ast.Node) bool { - decl, ok := node.(*ast.GenDecl) - if !ok || decl.Tok != token.CONST { - // We only care about const declarations. - return true - } - // The name of the type of the constants we are declaring. - // Can change if this is a multi-element declaration. - typ := "" - // Loop over the elements of the declaration. Each element is a ValueSpec: - // a list of names possibly followed by a type, possibly followed by values. - // If the type and value are both missing, we carry down the type (and value, - // but the "go/types" package takes care of that). - for _, spec := range decl.Specs { - vspec := spec.(*ast.ValueSpec) // Guaranteed to succeed as this is CONST. - if vspec.Type == nil && len(vspec.Values) > 0 { - // "X = 1". With no type but a value. If the constant is untyped, - // skip this vspec and reset the remembered type. - typ = "" - - // If this is a simple type conversion, remember the type. - // We don't mind if this is actually a call; a qualified call won't - // be matched (that will be SelectorExpr, not Ident), and only unusual - // situations will result in a function call that appears to be - // a type conversion. - ce, ok := vspec.Values[0].(*ast.CallExpr) - if !ok { - continue - } - id, ok := ce.Fun.(*ast.Ident) - if !ok { - continue - } - typ = id.Name - } - if vspec.Type != nil { - // "X T". We have a type. Remember it. - ident, ok := vspec.Type.(*ast.Ident) - if !ok { - continue - } - typ = ident.Name - } - if typ != f.typeName { - // This is not the type we're looking for. - continue - } - // We now have a list of names (from one line of source code) all being - // declared with the desired type. - // Grab their names and actual values and store them in f.values. - for _, name := range vspec.Names { - if name.Name == "_" { - continue - } - // This dance lets the type checker find the values for us. It's a - // bit tricky: look up the object declared by the name, find its - // types.Const, and extract its value. - obj, ok := f.pkg.defs[name] - if !ok { - log.Fatalf("no value for constant %s", name) - } - info := obj.Type().Underlying().(*types.Basic).Info() - if info&types.IsInteger == 0 { - log.Fatalf("can't handle non-integer constant type %s", typ) - } - value := obj.(*types.Const).Val() // Guaranteed to succeed as this is CONST. - if value.Kind() != constant.Int { - log.Fatalf("can't happen: constant is not an integer %s", name) - } - i64, isInt := constant.Int64Val(value) - u64, isUint := constant.Uint64Val(value) - if !isInt && !isUint { - log.Fatalf("internal error: value of %s is not an integer: %s", name, value.String()) - } - if !isInt { - u64 = uint64(i64) - } - v := Value{ - originalName: name.Name, - value: u64, - signed: info&types.IsUnsigned == 0, - str: value.String(), - } - if c := vspec.Comment; f.lineComment && c != nil && len(c.List) == 1 { - v.name = strings.TrimSpace(c.Text()) - } else { - v.name = strings.TrimPrefix(v.originalName, f.trimPrefix) - } - f.values = append(f.values, v) - } - } - return false -} - -// Helpers - -// usize returns the number of bits of the smallest unsigned integer -// type that will hold n. Used to create the smallest possible slice of -// integers to use as indexes into the concatenated strings. -func usize(n int) int { - switch { - case n < 1<<8: - return 8 - case n < 1<<16: - return 16 - default: - // 2^32 is enough constants for anyone. - return 32 - } -} - -// declareIndexAndNameVars declares the index slices and concatenated names -// strings representing the runs of values. -func (g *Generator) declareIndexAndNameVars(runs [][]Value, typeName string) { - var indexes, names []string - for i, run := range runs { - index, name := g.createIndexAndNameDecl(run, typeName, fmt.Sprintf("_%d", i)) - if len(run) != 1 { - indexes = append(indexes, index) - } - names = append(names, name) - } - g.Printf("const (\n") - for _, name := range names { - g.Printf("\t%s\n", name) - } - g.Printf(")\n\n") - - if len(indexes) > 0 { - g.Printf("var (") - for _, index := range indexes { - g.Printf("\t%s\n", index) - } - g.Printf(")\n\n") - } -} - -// declareIndexAndNameVar is the single-run version of declareIndexAndNameVars -func (g *Generator) declareIndexAndNameVar(run []Value, typeName string) { - index, name := g.createIndexAndNameDecl(run, typeName, "") - g.Printf("const %s\n", name) - g.Printf("var %s\n", index) -} - -// createIndexAndNameDecl returns the pair of declarations for the run. The caller will add "const" and "var". -func (g *Generator) createIndexAndNameDecl(run []Value, typeName string, suffix string) (string, string) { - b := new(bytes.Buffer) - indexes := make([]int, len(run)) - for i := range run { - b.WriteString(run[i].name) - indexes[i] = b.Len() - } - nameConst := fmt.Sprintf("_%s_name%s = %q", typeName, suffix, b.String()) - nameLen := b.Len() - b.Reset() - fmt.Fprintf(b, "_%s_index%s = [...]uint%d{0, ", typeName, suffix, usize(nameLen)) - for i, v := range indexes { - if i > 0 { - fmt.Fprintf(b, ", ") - } - fmt.Fprintf(b, "%d", v) - } - fmt.Fprintf(b, "}") - return b.String(), nameConst -} - -// declareNameVars declares the concatenated names string representing all the values in the runs. -func (g *Generator) declareNameVars(runs [][]Value, typeName string, suffix string) { - g.Printf("const _%s_name%s = \"", typeName, suffix) - for _, run := range runs { - for i := range run { - g.Printf("%s", run[i].name) - } - } - g.Printf("\"\n") -} - -// buildOneRun generates the variables and String method for a single run of contiguous values. -func (g *Generator) buildOneRun(runs [][]Value, typeName string) { - values := runs[0] - g.Printf("\n") - g.declareIndexAndNameVar(values, typeName) - // The generated code is simple enough to write as a Printf format. - lessThanZero := "" - if values[0].signed { - lessThanZero = "i < 0 || " - } - if values[0].value == 0 { // Signed or unsigned, 0 is still 0. - g.Printf(stringOneRun, typeName, usize(len(values)), lessThanZero) - } else { - g.Printf(stringOneRunWithOffset, typeName, values[0].String(), usize(len(values)), lessThanZero) - } -} - -// Arguments to format are: -// -// [1]: type name -// [2]: size of index element (8 for uint8 etc.) -// [3]: less than zero check (for signed types) -const stringOneRun = `func (i %[1]s) String() string { - if %[3]si >= %[1]s(len(_%[1]s_index)-1) { - return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _%[1]s_name[_%[1]s_index[i]:_%[1]s_index[i+1]] -} -` - -// Arguments to format are: -// [1]: type name -// [2]: lowest defined value for type, as a string -// [3]: size of index element (8 for uint8 etc.) -// [4]: less than zero check (for signed types) -/* - */ -const stringOneRunWithOffset = `func (i %[1]s) String() string { - i -= %[2]s - if %[4]si >= %[1]s(len(_%[1]s_index)-1) { - return "%[1]s(" + strconv.FormatInt(int64(i + %[2]s), 10) + ")" - } - return _%[1]s_name[_%[1]s_index[i] : _%[1]s_index[i+1]] -} -` - -// buildMultipleRuns generates the variables and String method for multiple runs of contiguous values. -// For this pattern, a single Printf format won't do. -func (g *Generator) buildMultipleRuns(runs [][]Value, typeName string) { - g.Printf("\n") - g.declareIndexAndNameVars(runs, typeName) - g.Printf("func (i %s) String() string {\n", typeName) - g.Printf("\tswitch {\n") - for i, values := range runs { - if len(values) == 1 { - g.Printf("\tcase i == %s:\n", &values[0]) - g.Printf("\t\treturn _%s_name_%d\n", typeName, i) - continue - } - if values[0].value == 0 && !values[0].signed { - // For an unsigned lower bound of 0, "0 <= i" would be redundant. - g.Printf("\tcase i <= %s:\n", &values[len(values)-1]) - } else { - g.Printf("\tcase %s <= i && i <= %s:\n", &values[0], &values[len(values)-1]) - } - if values[0].value != 0 { - g.Printf("\t\ti -= %s\n", &values[0]) - } - g.Printf("\t\treturn _%s_name_%d[_%s_index_%d[i]:_%s_index_%d[i+1]]\n", - typeName, i, typeName, i, typeName, i) - } - g.Printf("\tdefault:\n") - g.Printf("\t\treturn \"%s(\" + strconv.FormatInt(int64(i), 10) + \")\"\n", typeName) - g.Printf("\t}\n") - g.Printf("}\n") -} - -// buildMap handles the case where the space is so sparse a map is a reasonable fallback. -// It's a rare situation but has simple code. -func (g *Generator) buildMap(runs [][]Value, typeName string) { - g.Printf("\n") - g.declareNameVars(runs, typeName, "") - g.Printf("\nvar _%s_map = map[%s]string{\n", typeName, typeName) - n := 0 - for _, values := range runs { - for _, value := range values { - g.Printf("\t%s: _%s_name[%d:%d],\n", &value, typeName, n, n+len(value.name)) - n += len(value.name) - } - } - g.Printf("}\n\n") - g.Printf(stringMap, typeName) -} - -// Argument to format is the type name. -const stringMap = `func (i %[1]s) String() string { - if str, ok := _%[1]s_map[i]; ok { - return str - } - return "%[1]s(" + strconv.FormatInt(int64(i), 10) + ")" -} -` diff --git a/tools/vendor/helm.sh/helm/v3/internal/version/version.go b/tools/vendor/helm.sh/helm/v3/internal/version/version.go index 414957bc9..d20f25897 100644 --- a/tools/vendor/helm.sh/helm/v3/internal/version/version.go +++ b/tools/vendor/helm.sh/helm/v3/internal/version/version.go @@ -29,7 +29,7 @@ var ( // // Increment major number for new feature additions and behavioral changes. // Increment minor number for bug fixes and performance enhancements. - version = "v3.14" + version = "v3.15" // metadata is extra build time data metadata = "" diff --git a/tools/vendor/helm.sh/helm/v3/pkg/action/action.go b/tools/vendor/helm.sh/helm/v3/pkg/action/action.go index 5693f4838..863c48f07 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/action/action.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/action/action.go @@ -103,7 +103,7 @@ type Configuration struct { // TODO: As part of the refactor the duplicate code in cmd/helm/template.go should be removed // // This code has to do with writing files to disk. -func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Values, releaseName, outputDir string, subNotes, useReleaseName, includeCrds bool, pr postrender.PostRenderer, interactWithRemote, enableDNS bool) ([]*release.Hook, *bytes.Buffer, string, error) { +func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Values, releaseName, outputDir string, subNotes, useReleaseName, includeCrds bool, pr postrender.PostRenderer, interactWithRemote, enableDNS, hideSecret bool) ([]*release.Hook, *bytes.Buffer, string, error) { hs := []*release.Hook{} b := bytes.NewBuffer(nil) @@ -200,7 +200,11 @@ func (cfg *Configuration) renderResources(ch *chart.Chart, values chartutil.Valu for _, m := range manifests { if outputDir == "" { - fmt.Fprintf(b, "---\n# Source: %s\n%s\n", m.Name, m.Content) + if hideSecret && m.Head.Kind == "Secret" && m.Head.Version == "v1" { + fmt.Fprintf(b, "---\n# Source: %s\n# HIDDEN: The Secret output has been suppressed\n", m.Name) + } else { + fmt.Fprintf(b, "---\n# Source: %s\n%s\n", m.Name, m.Content) + } } else { newDir := outputDir if useReleaseName { diff --git a/tools/vendor/helm.sh/helm/v3/pkg/action/install.go b/tools/vendor/helm.sh/helm/v3/pkg/action/install.go index e3538a4f5..de612e3b7 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/action/install.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/action/install.go @@ -69,11 +69,14 @@ type Install struct { ChartPathOptions - ClientOnly bool - Force bool - CreateNamespace bool - DryRun bool - DryRunOption string + ClientOnly bool + Force bool + CreateNamespace bool + DryRun bool + DryRunOption string + // HideSecret can be set to true when DryRun is enabled in order to hide + // Kubernetes Secrets in the output. It cannot be used outside of DryRun. + HideSecret bool DisableHooks bool Replace bool Wait bool @@ -230,6 +233,11 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma } } + // HideSecret must be used with dry run. Otherwise, return an error. + if !i.isDryRun() && i.HideSecret { + return nil, errors.New("Hiding Kubernetes secrets requires a dry-run mode") + } + if err := i.availableName(); err != nil { return nil, err } @@ -301,7 +309,7 @@ func (i *Install) RunWithContext(ctx context.Context, chrt *chart.Chart, vals ma rel := i.createRelease(chrt, vals, i.Labels) var manifestDoc *bytes.Buffer - rel.Hooks, manifestDoc, rel.Info.Notes, err = i.cfg.renderResources(chrt, valuesToRender, i.ReleaseName, i.OutputDir, i.SubNotes, i.UseReleaseName, i.IncludeCRDs, i.PostRenderer, interactWithRemote, i.EnableDNS) + rel.Hooks, manifestDoc, rel.Info.Notes, err = i.cfg.renderResources(chrt, valuesToRender, i.ReleaseName, i.OutputDir, i.SubNotes, i.UseReleaseName, i.IncludeCRDs, i.PostRenderer, interactWithRemote, i.EnableDNS, i.HideSecret) // Even for errors, attach this if available if manifestDoc != nil { rel.Manifest = manifestDoc.String() diff --git a/tools/vendor/helm.sh/helm/v3/pkg/action/package.go b/tools/vendor/helm.sh/helm/v3/pkg/action/package.go index b79fcb54f..013b32f55 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/action/package.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/action/package.go @@ -161,7 +161,7 @@ func passphraseFileFetcher(passphraseFile string, stdin *os.File) (provenance.Pa if err != nil { return nil, err } - return func(name string) ([]byte, error) { + return func(_ string) ([]byte, error) { return passphrase, nil }, nil } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/action/upgrade.go b/tools/vendor/helm.sh/helm/v3/pkg/action/upgrade.go index ffb7538a6..2bd40a850 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/action/upgrade.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/action/upgrade.go @@ -74,6 +74,9 @@ type Upgrade struct { DryRun bool // DryRunOption controls whether the operation is prepared, but not executed with options on whether or not to interact with the remote cluster. DryRunOption string + // HideSecret can be set to true when DryRun is enabled in order to hide + // Kubernetes Secrets in the output. It cannot be used outside of DryRun. + HideSecret bool // Force will, if set to `true`, ignore certain warnings and perform the upgrade anyway. // // This should be used with caution. @@ -191,6 +194,11 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin return nil, nil, errMissingChart } + // HideSecret must be used with dry run. Otherwise, return an error. + if !u.isDryRun() && u.HideSecret { + return nil, nil, errors.New("Hiding Kubernetes secrets requires a dry-run mode") + } + // finds the last non-deleted release with the given name lastRelease, err := u.cfg.Releases.Last(name) if err != nil { @@ -259,7 +267,7 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin interactWithRemote = true } - hooks, manifestDoc, notesTxt, err := u.cfg.renderResources(chart, valuesToRender, "", "", u.SubNotes, false, false, u.PostRenderer, interactWithRemote, u.EnableDNS) + hooks, manifestDoc, notesTxt, err := u.cfg.renderResources(chart, valuesToRender, "", "", u.SubNotes, false, false, u.PostRenderer, interactWithRemote, u.EnableDNS, u.HideSecret) if err != nil { return nil, nil, err } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go b/tools/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go index 7cc8878a8..f59c35a5e 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/chart/loader/load.go @@ -134,6 +134,9 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { if c.Metadata == nil { c.Metadata = new(chart.Metadata) } + if c.Metadata.APIVersion != chart.APIVersionV1 { + log.Printf("Warning: Dependency locking is handled in Chart.lock since apiVersion \"v2\". We recommend migrating to Chart.lock.") + } if c.Metadata.APIVersion == chart.APIVersionV1 { c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data}) } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/chartutil/create.go b/tools/vendor/helm.sh/helm/v3/pkg/chartutil/create.go index 0bb5a83cd..50212f9d5 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/chartutil/create.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/chartutil/create.go @@ -448,7 +448,7 @@ const defaultNotes = `1. Get the application URL by running these commands: echo http://$NODE_IP:$NODE_PORT {{- else if contains "LoadBalancer" .Values.service.type }} NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include ".fullname" . }}' + You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include ".fullname" . }}' export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include ".fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") echo http://$SERVICE_IP:{{ .Values.service.port }} {{- else if contains "ClusterIP" .Values.service.type }} diff --git a/tools/vendor/helm.sh/helm/v3/pkg/cli/environment.go b/tools/vendor/helm.sh/helm/v3/pkg/cli/environment.go index 4f74f2642..438ba1515 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/cli/environment.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/cli/environment.go @@ -44,7 +44,7 @@ const defaultMaxHistory = 10 // defaultBurstLimit sets the default client-side throttling limit const defaultBurstLimit = 100 -// defaultQPS sets the default QPS value to 0 to to use library defaults unless specified +// defaultQPS sets the default QPS value to 0 to use library defaults unless specified const defaultQPS = float32(0) // EnvSettings describes all of the environment settings. @@ -112,7 +112,7 @@ func New() *EnvSettings { env.Debug, _ = strconv.ParseBool(os.Getenv("HELM_DEBUG")) // bind to kubernetes config flags - env.config = &genericclioptions.ConfigFlags{ + config := &genericclioptions.ConfigFlags{ Namespace: &env.namespace, Context: &env.KubeContext, BearerToken: &env.KubeToken, @@ -133,6 +133,11 @@ func New() *EnvSettings { return config }, } + if env.BurstLimit != defaultBurstLimit { + config = config.WithDiscoveryBurst(env.BurstLimit) + } + env.config = config + return env } @@ -244,6 +249,9 @@ func (s *EnvSettings) Namespace() string { if ns, _, err := s.config.ToRawKubeConfigLoader().Namespace(); err == nil { return ns } + if s.namespace != "" { + return s.namespace + } return "default" } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/downloader/manager.go b/tools/vendor/helm.sh/helm/v3/pkg/downloader/manager.go index 68c9c6e00..d5340575d 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/downloader/manager.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/downloader/manager.go @@ -246,7 +246,7 @@ func (m *Manager) downloadAll(deps []*chart.Dependency) error { } destPath := filepath.Join(m.ChartPath, "charts") - tmpPath := filepath.Join(m.ChartPath, "tmpcharts") + tmpPath := filepath.Join(m.ChartPath, fmt.Sprintf("tmpcharts-%d", os.Getpid())) // Check if 'charts' directory is not actually a directory. If it does not exist, create it. if fi, err := os.Stat(destPath); err == nil { diff --git a/tools/vendor/helm.sh/helm/v3/pkg/engine/engine.go b/tools/vendor/helm.sh/helm/v3/pkg/engine/engine.go index 61c0782fc..058cfa749 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/engine/engine.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/engine/engine.go @@ -239,7 +239,7 @@ func (e Engine) initFunMap(t *template.Template) { // When DNS lookups are not enabled override the sprig function and return // an empty string. if !e.EnableDNS { - funcMap["getHostByName"] = func(name string) string { + funcMap["getHostByName"] = func(_ string) string { return "" } } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go b/tools/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go index 209786bd7..0547cdcbb 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/getter/ocigetter.go @@ -119,6 +119,7 @@ func (g *OCIGetter) newRegistryClient() (*registry.Client, error) { IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, + Proxy: http.ProxyFromEnvironment, } }) diff --git a/tools/vendor/helm.sh/helm/v3/pkg/ignore/rules.go b/tools/vendor/helm.sh/helm/v3/pkg/ignore/rules.go index a80923baf..88de407ad 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/ignore/rules.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/ignore/rules.go @@ -173,7 +173,7 @@ func (r *Rules) parseRule(rule string) error { if strings.HasPrefix(rule, "/") { // Require path matches the root path. - p.match = func(n string, fi os.FileInfo) bool { + p.match = func(n string, _ os.FileInfo) bool { rule = strings.TrimPrefix(rule, "/") ok, err := filepath.Match(rule, n) if err != nil { @@ -184,7 +184,7 @@ func (r *Rules) parseRule(rule string) error { } } else if strings.Contains(rule, "/") { // require structural match. - p.match = func(n string, fi os.FileInfo) bool { + p.match = func(n string, _ os.FileInfo) bool { ok, err := filepath.Match(rule, n) if err != nil { log.Printf("Failed to compile %q: %s", rule, err) @@ -193,7 +193,7 @@ func (r *Rules) parseRule(rule string) error { return ok } } else { - p.match = func(n string, fi os.FileInfo) bool { + p.match = func(n string, _ os.FileInfo) bool { // When there is no slash in the pattern, we evaluate ONLY the // filename. n = filepath.Base(n) diff --git a/tools/vendor/helm.sh/helm/v3/pkg/kube/wait.go b/tools/vendor/helm.sh/helm/v3/pkg/kube/wait.go index ecdd38940..36110d0de 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/kube/wait.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/kube/wait.go @@ -19,6 +19,7 @@ package kube // import "helm.sh/helm/v3/pkg/kube" import ( "context" "fmt" + "net/http" "time" "github.com/pkg/errors" @@ -32,6 +33,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/cli-runtime/pkg/resource" "k8s.io/apimachinery/pkg/util/wait" ) @@ -50,10 +52,27 @@ func (w *waiter) waitForResources(created ResourceList) error { ctx, cancel := context.WithTimeout(context.Background(), w.timeout) defer cancel() + numberOfErrors := make([]int, len(created)) + for i := range numberOfErrors { + numberOfErrors[i] = 0 + } + return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(ctx context.Context) (bool, error) { - for _, v := range created { + waitRetries := 30 + for i, v := range created { ready, err := w.c.IsReady(ctx, v) - if !ready || err != nil { + + if waitRetries > 0 && w.isRetryableError(err, v) { + numberOfErrors[i]++ + if numberOfErrors[i] > waitRetries { + w.log("Max number of retries reached") + return false, err + } + w.log("Retrying as current number of retries %d less than max number of retries %d", numberOfErrors[i]-1, waitRetries) + return false, nil + } + numberOfErrors[i] = 0 + if !ready { return false, err } } @@ -61,6 +80,25 @@ func (w *waiter) waitForResources(created ResourceList) error { }) } +func (w *waiter) isRetryableError(err error, resource *resource.Info) bool { + if err == nil { + return false + } + w.log("Error received when checking status of resource %s. Error: '%s', Resource details: '%s'", resource.Name, err, resource) + if ev, ok := err.(*apierrors.StatusError); ok { + statusCode := ev.Status().Code + retryable := w.isRetryableHTTPStatusCode(statusCode) + w.log("Status code received: %d. Retryable error? %t", statusCode, retryable) + return retryable + } + w.log("Retryable error? %t", true) + return true +} + +func (w *waiter) isRetryableHTTPStatusCode(httpStatusCode int32) bool { + return httpStatusCode == 0 || httpStatusCode == http.StatusTooManyRequests || (httpStatusCode >= 500 && httpStatusCode != http.StatusNotImplemented) +} + // waitForDeletedResources polls to check if all the resources are deleted or a timeout is reached func (w *waiter) waitForDeletedResources(deleted ResourceList) error { w.log("beginning wait for %d resources to be deleted with timeout of %v", len(deleted), w.timeout) @@ -68,7 +106,7 @@ func (w *waiter) waitForDeletedResources(deleted ResourceList) error { ctx, cancel := context.WithTimeout(context.Background(), w.timeout) defer cancel() - return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(ctx context.Context) (bool, error) { + return wait.PollUntilContextCancel(ctx, 2*time.Second, true, func(_ context.Context) (bool, error) { for _, v := range deleted { err := v.Get() if err == nil || !apierrors.IsNotFound(err) { diff --git a/tools/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go b/tools/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go index aa1dbb701..661c7f963 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/lint/rules/template.go @@ -275,10 +275,10 @@ func validateMetadataNameFunc(obj *K8sYamlStruct) validation.ValidateNameFunc { case "certificatesigningrequest": // No validation. // https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/certificates/validation/validation.go#L137-L140 - return func(name string, prefix bool) []string { return nil } + return func(_ string, _ bool) []string { return nil } case "role", "clusterrole", "rolebinding", "clusterrolebinding": // https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/rbac/validation/validation.go#L32-L34 - return func(name string, prefix bool) []string { + return func(name string, _ bool) []string { return apipath.IsValidPathSegmentName(name) } default: diff --git a/tools/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go b/tools/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go index 94154d389..b37a0c605 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/pusher/ocipusher.go @@ -29,6 +29,7 @@ import ( "helm.sh/helm/v3/internal/tlsutil" "helm.sh/helm/v3/pkg/chart/loader" "helm.sh/helm/v3/pkg/registry" + "helm.sh/helm/v3/pkg/time/ctime" ) // OCIPusher is the default OCI backend handler @@ -89,6 +90,9 @@ func (pusher *OCIPusher) push(chartRef, href string) error { path.Join(strings.TrimPrefix(href, fmt.Sprintf("%s://", registry.OCIScheme)), meta.Metadata.Name), meta.Metadata.Version) + chartCreationTime := ctime.Created(stat) + pushOpts = append(pushOpts, registry.PushOptCreationTime(chartCreationTime.Format(time.RFC3339))) + _, err = client.Push(chartBytes, ref, pushOpts...) return err } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/registry/client.go b/tools/vendor/helm.sh/helm/v3/pkg/registry/client.go index 7538cf69b..42f736816 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/registry/client.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/registry/client.go @@ -124,7 +124,7 @@ func NewClient(options ...ClientOption) (*Client, error) { "User-Agent": {version.GetUserAgent()}, }, Cache: cache, - Credential: func(ctx context.Context, reg string) (registryauth.Credential, error) { + Credential: func(_ context.Context, reg string) (registryauth.Credential, error) { dockerClient, ok := client.authorizer.(*dockerauth.Client) if !ok { return registryauth.EmptyCredential, errors.New("unable to obtain docker client") @@ -198,7 +198,7 @@ func ClientOptPlainHTTP() ClientOption { // ClientOptResolver returns a function that sets the resolver setting on a client options set func ClientOptResolver(resolver remotes.Resolver) ClientOption { return func(client *Client) { - client.resolver = func(ref registry.Reference) (remotes.Resolver, error) { + client.resolver = func(_ registry.Reference) (remotes.Resolver, error) { return resolver, nil } } @@ -527,9 +527,9 @@ type ( } pushOperation struct { - provData []byte - strictMode bool - test bool + provData []byte + strictMode bool + creationTime string } ) @@ -583,7 +583,7 @@ func (c *Client) Push(data []byte, ref string, options ...PushOption) (*PushResu descriptors = append(descriptors, provDescriptor) } - ociAnnotations := generateOCIAnnotations(meta, operation.test) + ociAnnotations := generateOCIAnnotations(meta, operation.creationTime) manifestData, manifest, err := content.GenerateManifest(&configDescriptor, ociAnnotations, descriptors...) if err != nil { @@ -652,10 +652,10 @@ func PushOptStrictMode(strictMode bool) PushOption { } } -// PushOptTest returns a function that sets whether test setting on push -func PushOptTest(test bool) PushOption { +// PushOptCreationDate returns a function that sets the creation time +func PushOptCreationTime(creationTime string) PushOption { return func(operation *pushOperation) { - operation.test = test + operation.creationTime = creationTime } } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/registry/util.go b/tools/vendor/helm.sh/helm/v3/pkg/registry/util.go index 8baf0852a..45fbdd0b5 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/registry/util.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/registry/util.go @@ -156,6 +156,7 @@ func NewRegistryClientWithTLS(out io.Writer, certFile, keyFile, caFile string, i ClientOptHTTPClient(&http.Client{ Transport: &http.Transport{ TLSClientConfig: tlsConf, + Proxy: http.ProxyFromEnvironment, }, }), ) @@ -166,10 +167,10 @@ func NewRegistryClientWithTLS(out io.Writer, certFile, keyFile, caFile string, i } // generateOCIAnnotations will generate OCI annotations to include within the OCI manifest -func generateOCIAnnotations(meta *chart.Metadata, test bool) map[string]string { +func generateOCIAnnotations(meta *chart.Metadata, creationTime string) map[string]string { // Get annotations from Chart attributes - ociAnnotations := generateChartOCIAnnotations(meta, test) + ociAnnotations := generateChartOCIAnnotations(meta, creationTime) // Copy Chart annotations annotations: @@ -190,7 +191,7 @@ annotations: } // getChartOCIAnnotations will generate OCI annotations from the provided chart -func generateChartOCIAnnotations(meta *chart.Metadata, test bool) map[string]string { +func generateChartOCIAnnotations(meta *chart.Metadata, creationTime string) map[string]string { chartOCIAnnotations := map[string]string{} chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationDescription, meta.Description) @@ -198,10 +199,12 @@ func generateChartOCIAnnotations(meta *chart.Metadata, test bool) map[string]str chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationVersion, meta.Version) chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationURL, meta.Home) - if !test { - chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationCreated, helmtime.Now().UTC().Format(time.RFC3339)) + if len(creationTime) == 0 { + creationTime = helmtime.Now().UTC().Format(time.RFC3339) } + chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationCreated, creationTime) + if len(meta.Sources) > 0 { chartOCIAnnotations = addToMap(chartOCIAnnotations, ocispec.AnnotationSource, meta.Sources[0]) } diff --git a/tools/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go b/tools/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go index d9022ee6e..970e96da2 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/repo/chartrepo.go @@ -96,7 +96,7 @@ func (r *ChartRepository) Load() error { // FIXME: Why are we recursively walking directories? // FIXME: Why are we not reading the repositories.yaml to figure out // what repos to use? - filepath.Walk(r.Config.Name, func(path string, f os.FileInfo, err error) error { + filepath.Walk(r.Config.Name, func(path string, f os.FileInfo, _ error) error { if !f.IsDir() { if strings.Contains(f.Name(), "-index.yaml") { i, err := LoadIndexFile(path) diff --git a/tools/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go b/tools/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go index 8f5714f15..2ef951184 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/storage/driver/sql.go @@ -98,9 +98,9 @@ func (s *SQL) Name() string { // Check if all migrations al func (s *SQL) checkAlreadyApplied(migrations []*migrate.Migration) bool { // make map (set) of ids for fast search - migrationsIds := make(map[string]struct{}) + migrationsIDs := make(map[string]struct{}) for _, migration := range migrations { - migrationsIds[migration.Id] = struct{}{} + migrationsIDs[migration.Id] = struct{}{} } // get list of applied migrations @@ -113,15 +113,15 @@ func (s *SQL) checkAlreadyApplied(migrations []*migrate.Migration) bool { } for _, record := range records { - if _, ok := migrationsIds[record.Id]; ok { + if _, ok := migrationsIDs[record.Id]; ok { s.Log("checkAlreadyApplied: found previous migration (Id: %v) applied at %v", record.Id, record.AppliedAt) - delete(migrationsIds, record.Id) + delete(migrationsIDs, record.Id) } } // check if all migrations appliyed - if len(migrationsIds) != 0 { - for id := range migrationsIds { + if len(migrationsIDs) != 0 { + for id := range migrationsIDs { s.Log("checkAlreadyApplied: find unapplied migration (id: %v)", id) } return false diff --git a/tools/vendor/helm.sh/helm/v3/pkg/storage/storage.go b/tools/vendor/helm.sh/helm/v3/pkg/storage/storage.go index 0a18b34a0..0da0688fd 100644 --- a/tools/vendor/helm.sh/helm/v3/pkg/storage/storage.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/storage/storage.go @@ -111,7 +111,7 @@ func (s *Storage) ListDeployed() ([]*rspb.Release, error) { } // Deployed returns the last deployed release with the provided release name, or -// returns ErrReleaseNotFound if not found. +// returns driver.NewErrNoDeployedReleases if not found. func (s *Storage) Deployed(name string) (*rspb.Release, error) { ls, err := s.DeployedAll(name) if err != nil { @@ -130,7 +130,7 @@ func (s *Storage) Deployed(name string) (*rspb.Release, error) { } // DeployedAll returns all deployed releases with the provided name, or -// returns ErrReleaseNotFound if not found. +// returns driver.NewErrNoDeployedReleases if not found. func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) { s.Log("getting deployed releases from %q history", name) @@ -149,7 +149,7 @@ func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) { } // History returns the revision history for the release with the provided name, or -// returns ErrReleaseNotFound if no such release name exists. +// returns driver.ErrReleaseNotFound if no such release name exists. func (s *Storage) History(name string) ([]*rspb.Release, error) { s.Log("getting release history for %q", name) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/doc.go b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go similarity index 71% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/doc.go rename to tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go index d969260e5..f2998d76d 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/doc.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime.go @@ -1,11 +1,11 @@ /* -Copyright 2018 The Kubernetes Authors. +Copyright The Helm 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 + 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, @@ -13,6 +13,13 @@ 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 ctime -// Package scaffolds contains libraries for scaffolding code to use with controller-runtime -package scaffolds +import ( + "os" + "time" +) + +func Created(fi os.FileInfo) time.Time { + return created(fi) +} diff --git a/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go new file mode 100644 index 000000000..c3cea1d78 --- /dev/null +++ b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_linux.go @@ -0,0 +1,30 @@ +//go:build linux + +/* +Copyright The Helm 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 ctime + +import ( + "os" + "syscall" + "time" +) + +func created(fi os.FileInfo) time.Time { + st := fi.Sys().(*syscall.Stat_t) + //nolint + return time.Unix(int64(st.Ctim.Sec), int64(st.Ctim.Nsec)) +} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/doc.go b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go similarity index 71% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/doc.go rename to tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go index 71ae0484c..f21ed7347 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/doc.go +++ b/tools/vendor/helm.sh/helm/v3/pkg/time/ctime/ctime_other.go @@ -1,11 +1,13 @@ +//go:build !linux + /* -Copyright 2020 The Kubernetes Authors. +Copyright The Helm 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 + 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, @@ -13,6 +15,13 @@ 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 ctime + +import ( + "os" + "time" +) -// Package scaffolds contains libraries for scaffolding code to use with controller-runtime -package scaffolds +func created(fi os.FileInfo) time.Time { + return fi.ModTime() +} diff --git a/tools/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go b/tools/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go index 5180610e2..03b666842 100644 --- a/tools/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go +++ b/tools/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go @@ -66,7 +66,7 @@ func (m *mapper) infoForData(data []byte, source string) (*Info, error) { mapping, err := restMapper.RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { if _, ok := err.(*meta.NoKindMatchError); ok { - return nil, fmt.Errorf("resource mapping not found for name: %q namespace: %q from %q: %v\nensure CRDs are installed first", + return nil, fmt.Errorf("resource mapping not found for name: %q namespace: %q from %q: %w\nensure CRDs are installed first", name, namespace, source, err) } return nil, fmt.Errorf("unable to recognize %q: %v", source, err) diff --git a/tools/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go b/tools/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go index 6d38fade3..2218b9f5b 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go +++ b/tools/vendor/k8s.io/kubectl/pkg/cmd/util/helpers.go @@ -427,9 +427,10 @@ type FeatureGate string const ( ApplySet FeatureGate = "KUBECTL_APPLYSET" CmdPluginAsSubcommand FeatureGate = "KUBECTL_ENABLE_CMD_SHADOW" - InteractiveDelete FeatureGate = "KUBECTL_INTERACTIVE_DELETE" OpenAPIV3Patch FeatureGate = "KUBECTL_OPENAPIV3_PATCH" RemoteCommandWebsockets FeatureGate = "KUBECTL_REMOTE_COMMAND_WEBSOCKETS" + PortForwardWebsockets FeatureGate = "KUBECTL_PORT_FORWARD_WEBSOCKETS" + DebugCustomProfile FeatureGate = "KUBECTL_DEBUG_CUSTOM_PROFILE" ) // IsEnabled returns true iff environment variable is set to true. @@ -523,11 +524,9 @@ func AddLabelSelectorFlagVar(cmd *cobra.Command, p *string) { cmd.Flags().StringVarP(p, "selector", "l", *p, "Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). Matching objects must satisfy all of the specified label constraints.") } -func AddPruningFlags(cmd *cobra.Command, prune *bool, pruneAllowlist *[]string, pruneWhitelist *[]string, all *bool, applySetRef *string) { +func AddPruningFlags(cmd *cobra.Command, prune *bool, pruneAllowlist *[]string, all *bool, applySetRef *string) { // Flags associated with the original allowlist-based alpha cmd.Flags().StringArrayVar(pruneAllowlist, "prune-allowlist", *pruneAllowlist, "Overwrite the default allowlist with for --prune") - cmd.Flags().StringArrayVar(pruneWhitelist, "prune-whitelist", *pruneWhitelist, "Overwrite the default whitelist with for --prune") // TODO: Remove this in kubectl 1.28 or later - _ = cmd.Flags().MarkDeprecated("prune-whitelist", "Use --prune-allowlist instead.") cmd.Flags().BoolVar(all, "all", *all, "Select all resources in the namespace of the specified resource types.") // Flags associated with the new ApplySet-based alpha diff --git a/tools/vendor/k8s.io/kubectl/pkg/scheme/install.go b/tools/vendor/k8s.io/kubectl/pkg/scheme/install.go index 52a7ce6a8..34c987822 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/scheme/install.go +++ b/tools/vendor/k8s.io/kubectl/pkg/scheme/install.go @@ -45,6 +45,7 @@ import ( rbacv1beta1 "k8s.io/api/rbac/v1beta1" schedulingv1alpha1 "k8s.io/api/scheduling/v1alpha1" storagev1 "k8s.io/api/storage/v1" + storagev1alpha1 "k8s.io/api/storage/v1alpha1" storagev1beta1 "k8s.io/api/storage/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" @@ -78,5 +79,5 @@ func init() { utilruntime.Must(Scheme.SetVersionPriority(policyv1beta1.SchemeGroupVersion, policyv1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(rbacv1.SchemeGroupVersion, rbacv1beta1.SchemeGroupVersion, rbacv1alpha1.SchemeGroupVersion)) utilruntime.Must(Scheme.SetVersionPriority(schedulingv1alpha1.SchemeGroupVersion)) - utilruntime.Must(Scheme.SetVersionPriority(storagev1.SchemeGroupVersion, storagev1beta1.SchemeGroupVersion)) + utilruntime.Must(Scheme.SetVersionPriority(storagev1.SchemeGroupVersion, storagev1beta1.SchemeGroupVersion, storagev1alpha1.SchemeGroupVersion)) } diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/de_DE/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/de_DE/LC_MESSAGES/k8s.po index cd5d53c88..18b6a6215 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/de_DE/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/de_DE/LC_MESSAGES/k8s.po @@ -736,7 +736,7 @@ msgstr "kubectl kontrolliert den Kubernetes-Cluster-Manager" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #~ msgstr "" #~ "\n" @@ -754,7 +754,7 @@ msgstr "kubectl kontrolliert den Kubernetes-Cluster-Manager" #~ "\n" #~ "\t\t# Wende die Konfiguration im manifest.yaml an und lösche alle " #~ "ConfigMaps, die nicht in der Datei sind.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #, c-format diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/default/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/default/LC_MESSAGES/k8s.po index 538c7b2d5..609c85d7c 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/default/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/default/LC_MESSAGES/k8s.po @@ -260,7 +260,7 @@ msgid "" "\n" "\t\t# Apply the configuration in manifest.yaml and delete all the other " "config maps that are not in the file\n" -"\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +"\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" "ConfigMap" msgstr "" "\n" @@ -282,7 +282,7 @@ msgstr "" "\n" "\t\t# Apply the configuration in manifest.yaml and delete all the other " "config maps that are not in the file\n" -"\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +"\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" "ConfigMap" #: staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go:48 diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/en_US/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/en_US/LC_MESSAGES/k8s.po index d07da117b..c4f0e403f 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/en_US/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/en_US/LC_MESSAGES/k8s.po @@ -260,7 +260,7 @@ msgid "" "\n" "\t\t# Apply the configuration in manifest.yaml and delete all the other " "config maps that are not in the file\n" -"\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +"\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" "ConfigMap" msgstr "" "\n" @@ -282,7 +282,7 @@ msgstr "" "\n" "\t\t# Apply the configuration in manifest.yaml and delete all the other " "config maps that are not in the file\n" -"\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +"\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" "ConfigMap" #: staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go:48 diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/it_IT/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/it_IT/LC_MESSAGES/k8s.po index ca119f64f..ff6d83262 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/it_IT/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/it_IT/LC_MESSAGES/k8s.po @@ -815,7 +815,7 @@ msgstr "Kubectl controlla il gestore cluster di Kubernetes" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #~ msgstr "" #~ "\n" @@ -833,7 +833,7 @@ msgstr "Kubectl controlla il gestore cluster di Kubernetes" #~ "\n" #~ "\t\t# Applica la configurazione manifest.yaml ed elimina tutti gli altri " #~ "configmaps non presenti nel file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #, c-format diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/ja_JP/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/ja_JP/LC_MESSAGES/k8s.po index d6f4aa2c4..7036ad59a 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/ja_JP/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/ja_JP/LC_MESSAGES/k8s.po @@ -891,7 +891,7 @@ msgstr "kubectl controls the Kubernetes cluster manager" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #~ msgstr "" #~ "\n" @@ -909,7 +909,7 @@ msgstr "kubectl controls the Kubernetes cluster manager" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #, c-format diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/pt_BR/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/pt_BR/LC_MESSAGES/k8s.po index dad451281..7fe6d2cf1 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/pt_BR/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/pt_BR/LC_MESSAGES/k8s.po @@ -814,7 +814,7 @@ msgstr "kubectl controla o gerenciador de cluster do Kubernetes" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/" #~ "v1/ConfigMap" #~ msgstr "" #~ "\n" @@ -832,7 +832,7 @@ msgstr "kubectl controla o gerenciador de cluster do Kubernetes" #~ "\n" #~ "\t\t# Aplica a configuração do manifest.yaml e remove todos os outros " #~ "configmaps que não estão no arquivo.\n" -#~ "\t\tkubectl apply —prune -f manifest.yaml —all —prune-whitelist=core/v1/" +#~ "\t\tkubectl apply —prune -f manifest.yaml —all —prune-allowlist=core/v1/" #~ "ConfigMap" #, c-format diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/zh_CN/LC_MESSAGES/k8s.po b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/zh_CN/LC_MESSAGES/k8s.po index 29bd5844d..ffdf03cb6 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/zh_CN/LC_MESSAGES/k8s.po +++ b/tools/vendor/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/zh_CN/LC_MESSAGES/k8s.po @@ -854,7 +854,7 @@ msgstr "kubectl 控制 Kubernetes 集群管理器" #~ "\n" #~ "\t\t# Apply the configuration in manifest.yaml and delete all the other " #~ "configmaps that are not in the file.\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" #~ "ConfigMap" #~ msgstr "" #~ "\n" @@ -870,7 +870,7 @@ msgstr "kubectl 控制 Kubernetes 集群管理器" #~ "\t\tkubectl apply --prune -f manifest.yaml -l app=nginx\n" #~ "\n" #~ "\t\t# 应用 manifest.yaml 的配置并删除所有不在这个文件中的 ConfigMaps。\n" -#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-whitelist=core/v1/" +#~ "\t\tkubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/" #~ "ConfigMap" #, c-format diff --git a/tools/vendor/k8s.io/kubectl/pkg/util/openapi/doc.go b/tools/vendor/k8s.io/kubectl/pkg/util/openapi/doc.go index 08194d580..7d3bc6124 100644 --- a/tools/vendor/k8s.io/kubectl/pkg/util/openapi/doc.go +++ b/tools/vendor/k8s.io/kubectl/pkg/util/openapi/doc.go @@ -18,4 +18,4 @@ limitations under the License. // from a Kubernetes server and then indexing the type definitions. // The openapi spec contains the object model definitions and extensions metadata // such as the patchStrategy and patchMergeKey for creating patches. -package openapi // k8s.io/kubectl/pkg/util/openapi +package openapi // import "k8s.io/kubectl/pkg/util/openapi" diff --git a/tools/vendor/modules.txt b/tools/vendor/modules.txt index f6e63c8c2..5a1fd81ad 100644 --- a/tools/vendor/modules.txt +++ b/tools/vendor/modules.txt @@ -5,8 +5,8 @@ github.com/AdaLogics/go-fuzz-headers ## explicit; go 1.16 github.com/Azure/go-ansiterm github.com/Azure/go-ansiterm/winterm -# github.com/BurntSushi/toml v1.3.2 -## explicit; go 1.16 +# github.com/BurntSushi/toml v1.4.0 +## explicit; go 1.18 github.com/BurntSushi/toml github.com/BurntSushi/toml/internal # github.com/MakeNowJust/heredoc v1.0.0 @@ -24,8 +24,8 @@ github.com/Masterminds/sprig/v3 # github.com/Masterminds/squirrel v1.5.4 ## explicit; go 1.14 github.com/Masterminds/squirrel -# github.com/Microsoft/go-winio v0.6.1 -## explicit; go 1.17 +# github.com/Microsoft/go-winio v0.6.2 +## explicit; go 1.21 github.com/Microsoft/go-winio github.com/Microsoft/go-winio/backuptar github.com/Microsoft/go-winio/internal/fs @@ -34,8 +34,8 @@ github.com/Microsoft/go-winio/internal/stringbuffer github.com/Microsoft/go-winio/pkg/bindfilter github.com/Microsoft/go-winio/pkg/guid github.com/Microsoft/go-winio/vhd -# github.com/Microsoft/hcsshim v0.12.0-rc.1 -## explicit; go 1.18 +# github.com/Microsoft/hcsshim v0.12.5 +## explicit; go 1.21 github.com/Microsoft/hcsshim github.com/Microsoft/hcsshim/computestorage github.com/Microsoft/hcsshim/internal/cow @@ -86,11 +86,11 @@ github.com/chai2010/gettext-go github.com/chai2010/gettext-go/mo github.com/chai2010/gettext-go/plural github.com/chai2010/gettext-go/po -# github.com/containerd/cgroups/v3 v3.0.2 +# github.com/containerd/cgroups/v3 v3.0.3 ## explicit; go 1.18 github.com/containerd/cgroups/v3/cgroup1/stats -# github.com/containerd/containerd v1.7.12 -## explicit; go 1.19 +# github.com/containerd/containerd v1.7.18 +## explicit; go 1.21 github.com/containerd/containerd/api/events github.com/containerd/containerd/api/runtime/sandbox/v1 github.com/containerd/containerd/api/types @@ -100,6 +100,7 @@ github.com/containerd/containerd/archive/tarheader github.com/containerd/containerd/containers github.com/containerd/containerd/content github.com/containerd/containerd/content/local +github.com/containerd/containerd/contrib/seccomp/kernelversion github.com/containerd/containerd/errdefs github.com/containerd/containerd/events github.com/containerd/containerd/filters @@ -137,6 +138,9 @@ github.com/containerd/containerd/version ## explicit; go 1.19 github.com/containerd/continuity/fs github.com/containerd/continuity/sysx +# github.com/containerd/errdefs v0.1.0 +## explicit; go 1.20 +github.com/containerd/errdefs # github.com/containerd/log v0.1.0 ## explicit; go 1.20 github.com/containerd/log @@ -144,20 +148,20 @@ github.com/containerd/log ## explicit; go 1.19 github.com/containerd/stargz-snapshotter/estargz github.com/containerd/stargz-snapshotter/estargz/errorutil -# github.com/containerd/ttrpc v1.2.2 -## explicit; go 1.13 +# github.com/containerd/ttrpc v1.2.4 +## explicit; go 1.19 github.com/containerd/ttrpc # github.com/containerd/typeurl/v2 v2.1.1 ## explicit; go 1.13 github.com/containerd/typeurl/v2 -# github.com/containers/common v0.57.1 -## explicit; go 1.18 +# github.com/containers/common v0.60.4 +## explicit; go 1.21.0 github.com/containers/common/pkg/auth github.com/containers/common/pkg/capabilities github.com/containers/common/pkg/completion github.com/containers/common/pkg/password -# github.com/containers/image/v5 v5.29.0 -## explicit; go 1.19 +# github.com/containers/image/v5 v5.32.2 +## explicit; go 1.21.0 github.com/containers/image/v5/docker github.com/containers/image/v5/docker/policyconfiguration github.com/containers/image/v5/docker/reference @@ -170,6 +174,7 @@ github.com/containers/image/v5/internal/imagesource/impl github.com/containers/image/v5/internal/imagesource/stubs github.com/containers/image/v5/internal/iolimits github.com/containers/image/v5/internal/manifest +github.com/containers/image/v5/internal/multierr github.com/containers/image/v5/internal/pkg/platform github.com/containers/image/v5/internal/private github.com/containers/image/v5/internal/putblobdigest @@ -182,7 +187,6 @@ github.com/containers/image/v5/internal/uploadreader github.com/containers/image/v5/internal/useragent github.com/containers/image/v5/manifest github.com/containers/image/v5/pkg/blobinfocache/none -github.com/containers/image/v5/pkg/compression github.com/containers/image/v5/pkg/compression/internal github.com/containers/image/v5/pkg/compression/types github.com/containers/image/v5/pkg/docker/config @@ -195,13 +199,12 @@ github.com/containers/image/v5/version # github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 ## explicit github.com/containers/libtrust -# github.com/containers/ocicrypt v1.1.9 -## explicit; go 1.20 +# github.com/containers/ocicrypt v1.2.0 +## explicit; go 1.21 github.com/containers/ocicrypt/spec -# github.com/containers/storage v1.51.0 -## explicit; go 1.19 -github.com/containers/storage/pkg/chunked/compressor -github.com/containers/storage/pkg/chunked/internal +# github.com/containers/storage v1.55.0 +## explicit; go 1.21 +github.com/containers/storage/pkg/fileutils github.com/containers/storage/pkg/homedir github.com/containers/storage/pkg/idtools github.com/containers/storage/pkg/ioutils @@ -212,8 +215,8 @@ github.com/containers/storage/pkg/reexec github.com/containers/storage/pkg/regexp github.com/containers/storage/pkg/system github.com/containers/storage/pkg/unshare -# github.com/cyphar/filepath-securejoin v0.2.4 -## explicit; go 1.13 +# github.com/cyphar/filepath-securejoin v0.3.1 +## explicit; go 1.20 github.com/cyphar/filepath-securejoin # github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc ## explicit @@ -247,7 +250,7 @@ github.com/docker/docker/api/types/versions github.com/docker/docker/errdefs github.com/docker/docker/pkg/ioutils github.com/docker/docker/registry -# github.com/docker/docker-credential-helpers v0.8.0 +# github.com/docker/docker-credential-helpers v0.8.2 ## explicit; go 1.19 github.com/docker/docker-credential-helpers/client github.com/docker/docker-credential-helpers/credentials @@ -267,7 +270,7 @@ github.com/emicklei/go-restful/v3/log # github.com/evanphx/json-patch v5.7.0+incompatible ## explicit github.com/evanphx/json-patch -# github.com/evanphx/json-patch/v5 v5.8.0 +# github.com/evanphx/json-patch/v5 v5.9.0 ## explicit; go 1.18 github.com/evanphx/json-patch/v5 github.com/evanphx/json-patch/v5/internal/json @@ -321,15 +324,15 @@ github.com/go-logr/stdr # github.com/go-logr/zapr v1.3.0 ## explicit; go 1.18 github.com/go-logr/zapr -# github.com/go-openapi/jsonpointer v0.20.2 -## explicit; go 1.19 +# github.com/go-openapi/jsonpointer v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonpointer -# github.com/go-openapi/jsonreference v0.20.4 -## explicit; go 1.19 +# github.com/go-openapi/jsonreference v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonreference github.com/go-openapi/jsonreference/internal -# github.com/go-openapi/swag v0.22.9 -## explicit; go 1.19 +# github.com/go-openapi/swag v0.23.0 +## explicit; go 1.20 github.com/go-openapi/swag # github.com/gobuffalo/envy v1.6.5 ## explicit @@ -351,7 +354,7 @@ github.com/gobwas/glob/util/strings ## explicit; go 1.15 github.com/gogo/protobuf/proto github.com/gogo/protobuf/sortkeys -# github.com/golang-migrate/migrate/v4 v4.17.0 +# github.com/golang-migrate/migrate/v4 v4.17.1 ## explicit; go 1.18 github.com/golang-migrate/migrate/v4/source github.com/golang-migrate/migrate/v4/source/file @@ -407,7 +410,7 @@ github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value -# github.com/google/go-containerregistry v0.19.1 +# github.com/google/go-containerregistry v0.20.0 ## explicit; go 1.18 github.com/google/go-containerregistry/internal/and github.com/google/go-containerregistry/internal/compression @@ -512,8 +515,8 @@ github.com/jbenet/go-context/io ## explicit; go 1.10 github.com/jmoiron/sqlx github.com/jmoiron/sqlx/reflectx -# github.com/joelanford/ignore v0.0.0-20210607151042-0d25dc18b62d -## explicit; go 1.16 +# github.com/joelanford/ignore v0.1.0 +## explicit; go 1.21 github.com/joelanford/ignore # github.com/joho/godotenv v1.3.0 ## explicit @@ -524,19 +527,15 @@ github.com/josharian/intern # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/klauspost/compress v1.17.4 -## explicit; go 1.19 +# github.com/klauspost/compress v1.17.9 +## explicit; go 1.20 github.com/klauspost/compress -github.com/klauspost/compress/flate github.com/klauspost/compress/fse github.com/klauspost/compress/huff0 github.com/klauspost/compress/internal/cpuinfo github.com/klauspost/compress/internal/snapref github.com/klauspost/compress/zstd github.com/klauspost/compress/zstd/internal/xxhash -# github.com/klauspost/pgzip v1.2.6 -## explicit -github.com/klauspost/pgzip # github.com/kr/text v0.2.0 ## explicit github.com/kr/text @@ -571,7 +570,7 @@ github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.20 ## explicit; go 1.15 github.com/mattn/go-isatty -# github.com/mattn/go-runewidth v0.0.15 +# github.com/mattn/go-runewidth v0.0.16 ## explicit; go 1.9 github.com/mattn/go-runewidth # github.com/mattn/go-sqlite3 v1.14.22 @@ -599,12 +598,15 @@ github.com/moby/locker ## explicit; go 1.13 github.com/moby/spdystream github.com/moby/spdystream/spdy -# github.com/moby/sys/mountinfo v0.7.1 -## explicit; go 1.16 +# github.com/moby/sys/mountinfo v0.7.2 +## explicit; go 1.17 github.com/moby/sys/mountinfo # github.com/moby/sys/sequential v0.5.0 ## explicit; go 1.17 github.com/moby/sys/sequential +# github.com/moby/sys/user v0.2.0 +## explicit; go 1.21 +github.com/moby/sys/user # github.com/moby/term v0.5.0 ## explicit; go 1.18 github.com/moby/term @@ -631,18 +633,15 @@ github.com/onsi/gomega/types # github.com/opencontainers/go-digest v1.0.0 ## explicit; go 1.13 github.com/opencontainers/go-digest -# github.com/opencontainers/image-spec v1.1.0-rc6 +# github.com/opencontainers/image-spec v1.1.0 ## explicit; go 1.18 github.com/opencontainers/image-spec/specs-go github.com/opencontainers/image-spec/specs-go/v1 -# github.com/opencontainers/runc v1.1.14 -## explicit; go 1.18 -github.com/opencontainers/runc/libcontainer/user -# github.com/opencontainers/runtime-spec v1.1.0 +# github.com/opencontainers/runtime-spec v1.2.0 ## explicit github.com/opencontainers/runtime-spec/specs-go -# github.com/operator-framework/ansible-operator-plugins v1.35.0 -## explicit; go 1.21 +# github.com/operator-framework/ansible-operator-plugins v1.36.1 +## explicit; go 1.22.0 github.com/operator-framework/ansible-operator-plugins/internal/version github.com/operator-framework/ansible-operator-plugins/pkg/plugins github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1 @@ -658,8 +657,8 @@ github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/sc github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/playbooks github.com/operator-framework/ansible-operator-plugins/pkg/plugins/ansible/v1/scaffolds/internal/templates/roles github.com/operator-framework/ansible-operator-plugins/pkg/plugins/util -# github.com/operator-framework/api v0.23.0 -## explicit; go 1.21 +# github.com/operator-framework/api v0.24.0 +## explicit; go 1.22.0 github.com/operator-framework/api/pkg/apis/scorecard/v1alpha3 github.com/operator-framework/api/pkg/constraints github.com/operator-framework/api/pkg/encoding @@ -680,8 +679,8 @@ github.com/operator-framework/operator-manifest-tools/pkg/image github.com/operator-framework/operator-manifest-tools/pkg/imagename github.com/operator-framework/operator-manifest-tools/pkg/imageresolver github.com/operator-framework/operator-manifest-tools/pkg/pullspec -# github.com/operator-framework/operator-registry v1.39.0 -## explicit; go 1.21 +# github.com/operator-framework/operator-registry v1.42.0 +## explicit; go 1.22.0 github.com/operator-framework/operator-registry/alpha/action github.com/operator-framework/operator-registry/alpha/declcfg github.com/operator-framework/operator-registry/alpha/model @@ -692,14 +691,15 @@ github.com/operator-framework/operator-registry/pkg/image github.com/operator-framework/operator-registry/pkg/image/containerdregistry github.com/operator-framework/operator-registry/pkg/image/execregistry github.com/operator-framework/operator-registry/pkg/lib/bundle +github.com/operator-framework/operator-registry/pkg/lib/log github.com/operator-framework/operator-registry/pkg/lib/semver github.com/operator-framework/operator-registry/pkg/lib/validation github.com/operator-framework/operator-registry/pkg/prettyunmarshaler github.com/operator-framework/operator-registry/pkg/registry github.com/operator-framework/operator-registry/pkg/sqlite github.com/operator-framework/operator-registry/pkg/sqlite/migrations -# github.com/operator-framework/operator-sdk v1.37.0 -## explicit; go 1.21 +# github.com/operator-framework/operator-sdk v1.38.0 +## explicit; go 1.22.5 github.com/operator-framework/operator-sdk/cmd/operator-sdk github.com/operator-framework/operator-sdk/internal/annotations/metrics github.com/operator-framework/operator-sdk/internal/annotations/scorecard @@ -743,7 +743,6 @@ github.com/operator-framework/operator-sdk/internal/olm/operator/registry/config github.com/operator-framework/operator-sdk/internal/olm/operator/registry/fbcindex github.com/operator-framework/operator-sdk/internal/olm/operator/registry/index github.com/operator-framework/operator-sdk/internal/plugins -github.com/operator-framework/operator-sdk/internal/plugins/envtest/v1 github.com/operator-framework/operator-sdk/internal/plugins/helm/v1 github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/chartutil github.com/operator-framework/operator-sdk/internal/plugins/helm/v1/scaffolds @@ -766,7 +765,7 @@ github.com/operator-framework/operator-sdk/internal/version # github.com/otiai10/copy v1.14.0 ## explicit; go 1.18 github.com/otiai10/copy -# github.com/pelletier/go-toml/v2 v2.1.0 +# github.com/pelletier/go-toml/v2 v2.2.2 ## explicit; go 1.16 github.com/pelletier/go-toml/v2 github.com/pelletier/go-toml/v2/internal/characters @@ -782,8 +781,10 @@ github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/prometheus/client_golang v1.19.1 +# github.com/prometheus/client_golang v1.20.5 ## explicit; go 1.20 +github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil +github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/collectors github.com/prometheus/client_golang/prometheus/internal @@ -800,7 +801,7 @@ github.com/prometheus/common/model github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/rivo/uniseg v0.4.4 +# github.com/rivo/uniseg v0.4.7 ## explicit; go 1.18 github.com/rivo/uniseg # github.com/rubenv/sql-migrate v1.5.2 @@ -845,8 +846,8 @@ github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 ## explicit; go 1.12 github.com/spf13/pflag -# github.com/spf13/viper v1.18.2 -## explicit; go 1.18 +# github.com/spf13/viper v1.19.0 +## explicit; go 1.20 github.com/spf13/viper github.com/spf13/viper/internal/encoding github.com/spf13/viper/internal/encoding/dotenv @@ -873,17 +874,9 @@ github.com/syndtr/gocapability/capability # github.com/thoas/go-funk v0.8.0 ## explicit; go 1.13 github.com/thoas/go-funk -# github.com/ulikunitz/xz v0.5.11 -## explicit; go 1.12 -github.com/ulikunitz/xz -github.com/ulikunitz/xz/internal/hash -github.com/ulikunitz/xz/internal/xlog -github.com/ulikunitz/xz/lzma # github.com/vbatts/tar-split v0.11.5 ## explicit; go 1.17 github.com/vbatts/tar-split/archive/tar -github.com/vbatts/tar-split/tar/asm -github.com/vbatts/tar-split/tar/storage # github.com/x448/float16 v0.8.4 ## explicit; go 1.11 github.com/x448/float16 @@ -899,8 +892,8 @@ github.com/xeipuuv/gojsonschema # github.com/xlab/treeprint v1.2.0 ## explicit; go 1.13 github.com/xlab/treeprint -# go.etcd.io/bbolt v1.3.9 -## explicit; go 1.17 +# go.etcd.io/bbolt v1.3.10 +## explicit; go 1.21 go.etcd.io/bbolt # go.opencensus.io v0.24.0 ## explicit; go 1.13 @@ -1020,7 +1013,7 @@ golang.org/x/net/internal/timeseries golang.org/x/net/proxy golang.org/x/net/trace golang.org/x/net/websocket -# golang.org/x/oauth2 v0.21.0 +# golang.org/x/oauth2 v0.22.0 ## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/internal @@ -1069,7 +1062,6 @@ golang.org/x/text/width golang.org/x/time/rate # golang.org/x/tools v0.26.0 ## explicit; go 1.22.0 -golang.org/x/tools/cmd/stringer golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/packages @@ -1091,7 +1083,7 @@ golang.org/x/tools/internal/stdlib golang.org/x/tools/internal/typeparams golang.org/x/tools/internal/typesinternal golang.org/x/tools/internal/versions -# google.golang.org/genproto v0.0.0-20240221002015-b0ce06bbee7c +# google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de ## explicit; go 1.19 google.golang.org/genproto/protobuf/field_mask # google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 @@ -1229,8 +1221,8 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# helm.sh/helm/v3 v3.14.3 -## explicit; go 1.21 +# helm.sh/helm/v3 v3.15.4 +## explicit; go 1.22.0 helm.sh/helm/v3/internal/fileutil helm.sh/helm/v3/internal/resolver helm.sh/helm/v3/internal/sympath @@ -1266,6 +1258,7 @@ helm.sh/helm/v3/pkg/repo helm.sh/helm/v3/pkg/storage helm.sh/helm/v3/pkg/storage/driver helm.sh/helm/v3/pkg/time +helm.sh/helm/v3/pkg/time/ctime helm.sh/helm/v3/pkg/uploader # k8s.io/api v0.31.2 ## explicit; go 1.22.0 @@ -1439,8 +1432,8 @@ k8s.io/apiserver/pkg/util/version k8s.io/apiserver/pkg/util/webhook k8s.io/apiserver/pkg/util/x509metrics k8s.io/apiserver/pkg/warning -# k8s.io/cli-runtime v0.29.3 -## explicit; go 1.21 +# k8s.io/cli-runtime v0.30.5 +## explicit; go 1.22.0 k8s.io/cli-runtime/pkg/genericclioptions k8s.io/cli-runtime/pkg/genericiooptions k8s.io/cli-runtime/pkg/printers @@ -1649,8 +1642,8 @@ k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson k8s.io/kube-openapi/pkg/validation/validate -# k8s.io/kubectl v0.29.3 -## explicit; go 1.21 +# k8s.io/kubectl v0.30.5 +## explicit; go 1.22.0 k8s.io/kubectl/pkg/cmd/util k8s.io/kubectl/pkg/scheme k8s.io/kubectl/pkg/util/deployment @@ -1697,8 +1690,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client -# sigs.k8s.io/controller-runtime v0.17.4 -## explicit; go 1.21 +# sigs.k8s.io/controller-runtime v0.18.5 +## explicit; go 1.22.0 sigs.k8s.io/controller-runtime/pkg/client sigs.k8s.io/controller-runtime/pkg/client/apiutil sigs.k8s.io/controller-runtime/pkg/client/config @@ -1734,88 +1727,52 @@ sigs.k8s.io/controller-tools/pkg/webhook ## explicit; go 1.18 sigs.k8s.io/json sigs.k8s.io/json/internal/golang/encoding/json -# sigs.k8s.io/kubebuilder/v3 v3.14.2 -## explicit; go 1.21 -sigs.k8s.io/kubebuilder/v3/pkg/cli -sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha -sigs.k8s.io/kubebuilder/v3/pkg/config -sigs.k8s.io/kubebuilder/v3/pkg/config/store -sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml -sigs.k8s.io/kubebuilder/v3/pkg/config/v2 -sigs.k8s.io/kubebuilder/v3/pkg/config/v3 -sigs.k8s.io/kubebuilder/v3/pkg/internal/validation -sigs.k8s.io/kubebuilder/v3/pkg/machinery -sigs.k8s.io/kubebuilder/v3/pkg/model/resource -sigs.k8s.io/kubebuilder/v3/pkg/model/stage -sigs.k8s.io/kubebuilder/v3/pkg/plugin -sigs.k8s.io/kubebuilder/v3/pkg/plugin/external -sigs.k8s.io/kubebuilder/v3/pkg/plugin/util -sigs.k8s.io/kubebuilder/v3/pkg/plugins -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples -sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook -sigs.k8s.io/kubebuilder/v3/pkg/plugins/external -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4 -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e -sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils -sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha -sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds -sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates -sigs.k8s.io/kubebuilder/v3/pkg/rescaffold +# sigs.k8s.io/kubebuilder/v4 v4.1.1 +## explicit; go 1.22 +sigs.k8s.io/kubebuilder/v4/pkg/cli +sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha +sigs.k8s.io/kubebuilder/v4/pkg/config +sigs.k8s.io/kubebuilder/v4/pkg/config/store +sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml +sigs.k8s.io/kubebuilder/v4/pkg/config/v3 +sigs.k8s.io/kubebuilder/v4/pkg/internal/validation +sigs.k8s.io/kubebuilder/v4/pkg/machinery +sigs.k8s.io/kubebuilder/v4/pkg/model/resource +sigs.k8s.io/kubebuilder/v4/pkg/model/stage +sigs.k8s.io/kubebuilder/v4/pkg/plugin +sigs.k8s.io/kubebuilder/v4/pkg/plugin/external +sigs.k8s.io/kubebuilder/v4/pkg/plugin/util +sigs.k8s.io/kubebuilder/v4/pkg/plugins +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2 +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples +sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook +sigs.k8s.io/kubebuilder/v4/pkg/plugins/external +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1 +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4 +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e +sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils +sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha +sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds +sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates +sigs.k8s.io/kubebuilder/v4/pkg/rescaffold # sigs.k8s.io/kustomize/api v0.18.0 ## explicit; go 1.22.7 sigs.k8s.io/kustomize/api/filters/annotations diff --git a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go index c0ebb39e3..451f7b2a1 100644 --- a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go +++ b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/client.go @@ -124,19 +124,15 @@ func newClient(config *rest.Config, options Options) (*client, error) { config.UserAgent = rest.DefaultKubernetesUserAgent() } - if !options.WarningHandler.SuppressWarnings { - // surface warnings - logger := log.Log.WithName("KubeAPIWarningLogger") - // Set a WarningHandler, the default WarningHandler - // is log.KubeAPIWarningLogger with deduplication enabled. - // See log.KubeAPIWarningLoggerOptions for considerations - // regarding deduplication. - config.WarningHandler = log.NewKubeAPIWarningLogger( - logger, - log.KubeAPIWarningLoggerOptions{ - Deduplicate: !options.WarningHandler.AllowDuplicateLogs, - }, - ) + // By default, we de-duplicate and surface warnings. + config.WarningHandler = log.NewKubeAPIWarningLogger( + log.Log.WithName("KubeAPIWarningLogger"), + log.KubeAPIWarningLoggerOptions{ + Deduplicate: !options.WarningHandler.AllowDuplicateLogs, + }, + ) + if options.WarningHandler.SuppressWarnings { + config.WarningHandler = rest.NoWarnings{} } // Use the rest HTTP client for the provided config if unset @@ -523,8 +519,8 @@ func (co *SubResourceCreateOptions) ApplyOptions(opts []SubResourceCreateOption) return co } -// ApplyToSubresourceCreate applies the the configuration on the given create options. -func (co *SubResourceCreateOptions) ApplyToSubresourceCreate(o *SubResourceCreateOptions) { +// ApplyToSubResourceCreate applies the the configuration on the given create options. +func (co *SubResourceCreateOptions) ApplyToSubResourceCreate(o *SubResourceCreateOptions) { co.CreateOptions.ApplyToCreate(&co.CreateOptions) } diff --git a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/fieldowner.go b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/fieldowner.go index 2f2f892ef..07183cd19 100644 --- a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/fieldowner.go +++ b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/client/fieldowner.go @@ -30,28 +30,28 @@ import ( // will be overridden. func WithFieldOwner(c Client, fieldOwner string) Client { return &clientWithFieldManager{ - manager: fieldOwner, - c: c, - Reader: c, + owner: fieldOwner, + c: c, + Reader: c, } } type clientWithFieldManager struct { - manager string - c Client + owner string + c Client Reader } func (f *clientWithFieldManager) Create(ctx context.Context, obj Object, opts ...CreateOption) error { - return f.c.Create(ctx, obj, append([]CreateOption{FieldOwner(f.manager)}, opts...)...) + return f.c.Create(ctx, obj, append([]CreateOption{FieldOwner(f.owner)}, opts...)...) } func (f *clientWithFieldManager) Update(ctx context.Context, obj Object, opts ...UpdateOption) error { - return f.c.Update(ctx, obj, append([]UpdateOption{FieldOwner(f.manager)}, opts...)...) + return f.c.Update(ctx, obj, append([]UpdateOption{FieldOwner(f.owner)}, opts...)...) } func (f *clientWithFieldManager) Patch(ctx context.Context, obj Object, patch Patch, opts ...PatchOption) error { - return f.c.Patch(ctx, obj, patch, append([]PatchOption{FieldOwner(f.manager)}, opts...)...) + return f.c.Patch(ctx, obj, patch, append([]PatchOption{FieldOwner(f.owner)}, opts...)...) } func (f *clientWithFieldManager) Delete(ctx context.Context, obj Object, opts ...DeleteOption) error { @@ -73,7 +73,7 @@ func (f *clientWithFieldManager) IsObjectNamespaced(obj runtime.Object) (bool, e func (f *clientWithFieldManager) Status() StatusWriter { return &subresourceClientWithFieldOwner{ - owner: f.manager, + owner: f.owner, subresourceWriter: f.c.Status(), } } @@ -81,7 +81,7 @@ func (f *clientWithFieldManager) Status() StatusWriter { func (f *clientWithFieldManager) SubResource(subresource string) SubResourceClient { c := f.c.SubResource(subresource) return &subresourceClientWithFieldOwner{ - owner: f.manager, + owner: f.owner, subresourceWriter: c, SubResourceReader: c, } diff --git a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go index 05153f74c..176ce0db0 100644 --- a/tools/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go +++ b/tools/vendor/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil/controllerutil.go @@ -52,12 +52,22 @@ func newAlreadyOwnedError(obj metav1.Object, owner metav1.OwnerReference) *Alrea } } +// OwnerReferenceOption is a function that can modify a `metav1.OwnerReference`. +type OwnerReferenceOption func(*metav1.OwnerReference) + +// WithBlockOwnerDeletion allows configuring the BlockOwnerDeletion field on the `metav1.OwnerReference`. +func WithBlockOwnerDeletion(blockOwnerDeletion bool) OwnerReferenceOption { + return func(ref *metav1.OwnerReference) { + ref.BlockOwnerDeletion = &blockOwnerDeletion + } +} + // SetControllerReference sets owner as a Controller OwnerReference on controlled. // This is used for garbage collection of the controlled object and for // reconciling the owner object on changes to controlled (with a Watch + EnqueueRequestForOwner). // Since only one OwnerReference can be a controller, it returns an error if // there is another OwnerReference with Controller flag set. -func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Scheme) error { +func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Scheme, opts ...OwnerReferenceOption) error { // Validate the owner. ro, ok := owner.(runtime.Object) if !ok { @@ -80,6 +90,9 @@ func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Sch BlockOwnerDeletion: ptr.To(true), Controller: ptr.To(true), } + for _, opt := range opts { + opt(&ref) + } // Return early with an error if the object is already controlled. if existing := metav1.GetControllerOf(controlled); existing != nil && !referSameObject(*existing, ref) { @@ -94,7 +107,7 @@ func SetControllerReference(owner, controlled metav1.Object, scheme *runtime.Sch // SetOwnerReference is a helper method to make sure the given object contains an object reference to the object provided. // This allows you to declare that owner has a dependency on the object without specifying it as a controller. // If a reference to the same object already exists, it'll be overwritten with the newly provided version. -func SetOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme) error { +func SetOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme, opts ...OwnerReferenceOption) error { // Validate the owner. ro, ok := owner.(runtime.Object) if !ok { @@ -115,6 +128,9 @@ func SetOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme) erro UID: owner.GetUID(), Name: owner.GetName(), } + for _, opt := range opts { + opt(&ref) + } // Update owner references and return. upsertOwnerRef(ref, object) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v2/config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v2/config.go deleted file mode 100644 index f00e5fa64..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v2/config.go +++ /dev/null @@ -1,267 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "strings" - - "sigs.k8s.io/yaml" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" -) - -// Version is the config.Version for project configuration 2 -var Version = config.Version{Number: 2} - -type cfg struct { - // Version - Version config.Version `json:"version"` - - // String fields - Domain string `json:"domain,omitempty"` - Repository string `json:"repo,omitempty"` - - // Boolean fields - MultiGroup bool `json:"multigroup,omitempty"` - - // Resources - Gvks []resource.GVK `json:"resources,omitempty"` -} - -// New returns a new config.Config -func New() config.Config { - return &cfg{Version: Version} -} - -func init() { - config.Register(Version, New) -} - -// GetVersion implements config.Config -func (c cfg) GetVersion() config.Version { - return c.Version -} - -// GetDomain implements config.Config -func (c cfg) GetDomain() string { - return c.Domain -} - -// SetDomain implements config.Config -func (c *cfg) SetDomain(domain string) error { - c.Domain = domain - return nil -} - -// GetRepository implements config.Config -func (c cfg) GetRepository() string { - return c.Repository -} - -// SetRepository implements config.Config -func (c *cfg) SetRepository(repository string) error { - c.Repository = repository - return nil -} - -// GetProjectName implements config.Config -func (c cfg) GetProjectName() string { - return "" -} - -// SetProjectName implements config.Config -func (c *cfg) SetProjectName(string) error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "project name", - } -} - -// GetPluginChain implements config.Config -func (c cfg) GetPluginChain() []string { - return []string{"go.kubebuilder.io/v2"} -} - -// SetPluginChain implements config.Config -func (c *cfg) SetPluginChain([]string) error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "plugin chain", - } -} - -// IsMultiGroup implements config.Config -func (c cfg) IsMultiGroup() bool { - return c.MultiGroup -} - -// SetMultiGroup implements config.Config -func (c *cfg) SetMultiGroup() error { - c.MultiGroup = true - return nil -} - -// ClearMultiGroup implements config.Config -func (c *cfg) ClearMultiGroup() error { - c.MultiGroup = false - return nil -} - -// IsComponentConfig implements config.Config -func (c cfg) IsComponentConfig() bool { - return false -} - -// SetComponentConfig implements config.Config -func (c *cfg) SetComponentConfig() error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "component config", - } -} - -// ClearComponentConfig implements config.Config -func (c *cfg) ClearComponentConfig() error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "component config", - } -} - -// ResourcesLength implements config.Config -func (c cfg) ResourcesLength() int { - return len(c.Gvks) -} - -// HasResource implements config.Config -func (c cfg) HasResource(gvk resource.GVK) bool { - gvk.Domain = "" // Version 2 does not include domain per resource - - for _, trackedGVK := range c.Gvks { - if gvk.IsEqualTo(trackedGVK) { - return true - } - } - - return false -} - -// GetResource implements config.Config -func (c cfg) GetResource(gvk resource.GVK) (resource.Resource, error) { - gvk.Domain = "" // Version 2 does not include domain per resource - - for _, trackedGVK := range c.Gvks { - if gvk.IsEqualTo(trackedGVK) { - return resource.Resource{ - GVK: trackedGVK, - }, nil - } - } - - return resource.Resource{}, config.ResourceNotFoundError{GVK: gvk} -} - -// GetResources implements config.Config -func (c cfg) GetResources() ([]resource.Resource, error) { - resources := make([]resource.Resource, 0, len(c.Gvks)) - for _, gvk := range c.Gvks { - resources = append(resources, resource.Resource{ - GVK: gvk, - }) - } - - return resources, nil -} - -// AddResource implements config.Config -func (c *cfg) AddResource(res resource.Resource) error { - // As res is passed by value it is already a shallow copy, and we are only using - // fields that do not require a deep copy, so no need to make a deep copy - - res.Domain = "" // Version 2 does not include domain per resource - - if !c.HasResource(res.GVK) { - c.Gvks = append(c.Gvks, res.GVK) - } - - return nil -} - -// UpdateResource implements config.Config -func (c *cfg) UpdateResource(res resource.Resource) error { - return c.AddResource(res) -} - -// HasGroup implements config.Config -func (c cfg) HasGroup(group string) bool { - // Return true if the target group is found in the tracked resources - for _, r := range c.Gvks { - if strings.EqualFold(group, r.Group) { - return true - } - } - - // Return false otherwise - return false -} - -// ListCRDVersions implements config.Config -func (c cfg) ListCRDVersions() []string { - return make([]string, 0) -} - -// ListWebhookVersions implements config.Config -func (c cfg) ListWebhookVersions() []string { - return make([]string, 0) -} - -// DecodePluginConfig implements config.Config -func (c cfg) DecodePluginConfig(string, interface{}) error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "plugins", - } -} - -// EncodePluginConfig implements config.Config -func (c cfg) EncodePluginConfig(string, interface{}) error { - return config.UnsupportedFieldError{ - Version: Version, - Field: "plugins", - } -} - -// Marshal implements config.Config -func (c cfg) MarshalYAML() ([]byte, error) { - content, err := yaml.Marshal(c) - if err != nil { - return nil, config.MarshalError{Err: err} - } - - return content, nil -} - -// Unmarshal implements config.Config -func (c *cfg) UnmarshalYAML(b []byte) error { - if err := yaml.UnmarshalStrict(b, c); err != nil { - return config.UnmarshalError{Err: err} - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/helpers.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/helpers.go deleted file mode 100644 index 87d953f26..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/helpers.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 util - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" -) - -// Deprecated: go/v4 no longer supports v1beta1 option -// HasDifferentCRDVersion returns true if any other CRD version is tracked in the project configuration. -func HasDifferentCRDVersion(config config.Config, crdVersion string) bool { - return hasDifferentAPIVersion(config.ListCRDVersions(), crdVersion) -} - -// Deprecated: go/v4 no longer supports v1beta1 option -// HasDifferentWebhookVersion returns true if any other webhook version is tracked in the project configuration. -func HasDifferentWebhookVersion(config config.Config, webhookVersion string) bool { - return hasDifferentAPIVersion(config.ListWebhookVersions(), webhookVersion) -} - -// Deprecated: go/v4 no longer supports v1beta1 option -func hasDifferentAPIVersion(versions []string, version string) bool { - return !(len(versions) == 0 || (len(versions) == 1 && versions[0] == version)) -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/api.go deleted file mode 100644 index 708ea60e0..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/api.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v2 -package v1 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds" -) - -var _ plugin.CreateAPISubcommand = &createAPISubcommand{} - -type createAPISubcommand struct { - createSubcommand -} - -func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { - if err := p.configure(); err != nil { - return err - } - scaffolder := scaffolds.NewAPIScaffolder(p.config, *p.resource, p.force) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/create.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/create.go deleted file mode 100644 index ad2c850a1..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/create.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v2 -package v1 - -import ( - "strconv" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" -) - -type createSubcommand struct { - config config.Config - resource *resource.Resource - - flagSet *pflag.FlagSet - - // force indicates whether to scaffold files even if they exist. - force bool -} - -func (p *createSubcommand) BindFlags(fs *pflag.FlagSet) { p.flagSet = fs } - -func (p *createSubcommand) InjectConfig(c config.Config) error { - p.config = c - return nil -} - -func (p *createSubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - return nil -} - -func (p *createSubcommand) configure() (err error) { - if forceFlag := p.flagSet.Lookup("force"); forceFlag != nil { - if p.force, err = strconv.ParseBool(forceFlag.Value.String()); err != nil { - return err - } - - } - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/init.go deleted file mode 100644 index 825d32e15..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/init.go +++ /dev/null @@ -1,147 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v2 -package v1 - -import ( - "fmt" - "os" - "path/filepath" - "runtime" - "strings" - - log "github.com/sirupsen/logrus" - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds" -) - -var _ plugin.InitSubcommand = &initSubcommand{} - -// Verify if the local environment is supported by this plugin -var supportedArchs = []string{"linux/amd64", - "linux/arm64", - "darwin/amd64"} - -type initSubcommand struct { - config config.Config - - // config options - domain string - name string - componentConfig bool -} - -func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = fmt.Sprintf(`Initialize a common project including the following files: - - a "PROJECT" file that stores project configuration - - several YAML files for project deployment under the "config" directory - - NOTE: The kustomize/v1 plugin used to do this scaffold uses the v3 release (%s). -Therefore, darwin/arm64 is not supported since Kustomize does not provide v3 -binaries for this architecture. The currently supported architectures are %q. -More info: https://github.com/kubernetes-sigs/kustomize/issues/4612. - -`, KustomizeVersion, supportedArchs) - - subcmdMeta.Examples = fmt.Sprintf(` # Initialize a common project with your domain and name in copyright - %[1]s init --plugins common/v3 --domain example.org - - # Initialize a common project defining a specific project version - %[1]s init --plugins common/v3 --project-version 3 -`, cliMeta.CommandName) -} - -func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) { - fs.StringVar(&p.domain, "domain", "my.domain", "domain for groups") - fs.StringVar(&p.name, "project-name", "", "name of this project") - fs.BoolVar(&p.componentConfig, "component-config", false, - "create a versioned ComponentConfig file, may be 'true' or 'false'") -} - -func (p *initSubcommand) InjectConfig(c config.Config) error { - p.config = c - - if err := p.config.SetDomain(p.domain); err != nil { - return err - } - - // Assign a default project name - if p.name == "" { - dir, err := os.Getwd() - if err != nil { - return fmt.Errorf("error getting current directory: %v", err) - } - p.name = strings.ToLower(filepath.Base(dir)) - } - // Check if the project name is a valid k8s namespace (DNS 1123 label). - if err := validation.IsDNS1123Label(p.name); err != nil { - return fmt.Errorf("project name (%s) is invalid: %v", p.name, err) - } - if err := p.config.SetProjectName(p.name); err != nil { - return err - } - - if p.componentConfig { - if err := p.config.SetComponentConfig(); err != nil { - return err - } - } - - return nil -} - -func (p *initSubcommand) PreScaffold(machinery.Filesystem) error { - arch := runtime.GOARCH - // It probably will never return x86_64. However, we are here checking the support for the binaries - // So that, x86_64 means getting the Linux/amd64 binary. Then, we just keep this line to ensure - // that it complies with the same code implementation that we have in the targets. In case someone - // call the command inform the GOARCH=x86_64 then, we will properly handle the scenario - // since it will work successfully and will instal the Linux/amd64 binary via the Makefile target. - arch = strings.Replace(arch, "x86_64", "amd64", -1) - localPlatform := fmt.Sprintf("%s/%s", strings.TrimSpace(runtime.GOOS), strings.TrimSpace(arch)) - - if !hasSupportFor(localPlatform) { - log.Warnf("the platform of this environment (%s) is not suppported by kustomize v3 (%s) which is "+ - "used in this scaffold. You will be unable to download a binary for the kustomize version supported "+ - "and used by this plugin. The currently supported platforms are: %q", - localPlatform, - KustomizeVersion, - supportedArchs) - } - - return nil -} - -func hasSupportFor(localPlatform string) bool { - for _, value := range supportedArchs { - if value == localPlatform { - return true - } - } - return false -} - -func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewInitScaffolder(p.config) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/plugin.go deleted file mode 100644 index 492149d21..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/plugin.go +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v2 -package v1 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" -) - -// KustomizeVersion is the kubernetes-sigs/kustomize version to be used in the project -const KustomizeVersion = "v3.8.7" - -const pluginName = "kustomize.common." + plugins.DefaultNameQualifier - -var ( - pluginVersion = plugin.Version{Number: 1} - supportedProjectVersions = []config.Version{cfgv3.Version} -) - -var ( - _ plugin.Init = Plugin{} - _ plugin.CreateAPI = Plugin{} - _ plugin.CreateWebhook = Plugin{} -) - -// Plugin implements the plugin.Full interface -type Plugin struct { - initSubcommand - createAPISubcommand - createWebhookSubcommand -} - -// Name returns the name of the plugin -func (Plugin) Name() string { return pluginName } - -// Version returns the version of the plugin -func (Plugin) Version() plugin.Version { return pluginVersion } - -// SupportedProjectVersions returns an array with all project versions supported by the plugin -func (Plugin) SupportedProjectVersions() []config.Version { return supportedProjectVersions } - -// GetInitSubcommand will return the subcommand which is responsible for scaffolding init project -func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p.initSubcommand } - -// GetCreateAPISubcommand will return the subcommand which is responsible for scaffolding apis -func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { return &p.createAPISubcommand } - -// GetCreateWebhookSubcommand will return the subcommand which is responsible for scaffolding webhooks -func (p Plugin) GetCreateWebhookSubcommand() plugin.CreateWebhookSubcommand { - return &p.createWebhookSubcommand -} - -func (p Plugin) DeprecationWarning() string { - return "This version is deprecated.The kustomize/v1 plugin used within go/v3 projects uses an old version " + - "of kustomize (v3). It is recommended that you upgrade your project to use the go/v4 and kustomize/v2 plugins." -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/api.go deleted file mode 100644 index c3fefbd5c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/api.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples" -) - -var _ plugins.Scaffolder = &apiScaffolder{} - -// apiScaffolder contains configuration for generating scaffolding for Go type -// representing the API and controller that implements the behavior for the API. -type apiScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem - - // force indicates whether to scaffold files even if they exist. - force bool -} - -// NewAPIScaffolder returns a new Scaffolder for API/controller creation operations -func NewAPIScaffolder(config config.Config, res resource.Resource, force bool) plugins.Scaffolder { - return &apiScaffolder{ - config: config, - resource: res, - force: force, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *apiScaffolder) Scaffold() error { - log.Println("Writing kustomize manifests for you to edit...") - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithResource(&s.resource), - ) - - // Keep track of these values before the update - if s.resource.HasAPI() { - if err := scaffold.Execute( - &samples.CRDSample{Force: s.force}, - &rbac.CRDEditorRole{}, - &rbac.CRDViewerRole{}, - &patches.EnableWebhookPatch{}, - &patches.EnableCAInjectionPatch{}, - &crd.Kustomization{}, - &crd.KustomizeConfig{}, - ); err != nil { - return fmt.Errorf("error scaffolding kustomize API manifests: %v", err) - } - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/init.go deleted file mode 100644 index c4c0227fc..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/init.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 scaffolds - -import ( - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac" -) - -const ( - imageName = "controller:latest" -) - -var _ plugins.Scaffolder = &initScaffolder{} - -type initScaffolder struct { - config config.Config - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewInitScaffolder returns a new Scaffolder for project initialization operations -func NewInitScaffolder(config config.Config) plugins.Scaffolder { - return &initScaffolder{ - config: config, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *initScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *initScaffolder) Scaffold() error { - log.Println("Writing kustomize manifests for you to edit...") - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - ) - - templates := []machinery.Builder{ - &rbac.Kustomization{}, - &rbac.AuthProxyRole{}, - &rbac.AuthProxyRoleBinding{}, - &rbac.AuthProxyService{}, - &rbac.AuthProxyClientRole{}, - &rbac.RoleBinding{}, - &rbac.LeaderElectionRole{}, - &rbac.LeaderElectionRoleBinding{}, - &rbac.ServiceAccount{}, - &manager.Kustomization{}, - &manager.Config{Image: imageName}, - &kdefault.Kustomization{}, - &kdefault.ManagerAuthProxyPatch{}, - &kdefault.ManagerConfigPatch{}, - &prometheus.Kustomization{}, - &prometheus.Monitor{}, - } - - if s.config.IsComponentConfig() { - templates = append(templates, &manager.ControllerManagerConfig{}) - } - - return scaffold.Execute(templates...) -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/certificate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/certificate.go deleted file mode 100644 index 710f21b32..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/certificate.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Certificate{} - -// Certificate scaffolds a file that defines the issuer CR and the certificate CR -type Certificate struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Certificate) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "certificate.yaml") - } - - f.TemplateBody = certManagerTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const certManagerTemplate = `# The following manifests contain a self-signed issuer CR and a certificate CR. -# More document can be found at https://docs.cert-manager.io -# WARNING: Targets CertManager v1.0. Check https://cert-manager.io/docs/installation/upgrading/ for breaking changes. -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - labels: - app.kubernetes.io/name: issuer - app.kubernetes.io/instance: selfsigned-issuer - app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: selfsigned-issuer - namespace: system -spec: - selfSigned: {} ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - labels: - app.kubernetes.io/name: certificate - app.kubernetes.io/instance: serving-cert - app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: serving-cert # this name should match the one appeared in kustomizeconfig.yaml - namespace: system -spec: - # $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize - dnsNames: - - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc - - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local - issuerRef: - kind: Issuer - name: selfsigned-issuer - secretName: webhook-server-cert # this secret will not be prefixed, since it's not managed by kustomize -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomization.go deleted file mode 100644 index 2e31a62d4..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomization.go +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the certmanager folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "kustomization.yaml") - } - - f.TemplateBody = kustomizationTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const kustomizationTemplate = `resources: -- certificate.yaml - -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go deleted file mode 100644 index c89e1f9a5..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the certmanager folder -type KustomizeConfig struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -//nolint:lll -const kustomizeConfigTemplate = `# This configuration is for teaching kustomize how to update name ref and var substitution -nameReference: -- kind: Issuer - group: cert-manager.io - fieldSpecs: - - kind: Certificate - group: cert-manager.io - path: spec/issuerRef/name - -varReference: -- kind: Certificate - group: cert-manager.io - path: spec/commonName -- kind: Certificate - group: cert-manager.io - path: spec/dnsNames -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomization.go deleted file mode 100644 index 0dd55f520..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomization.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 crd - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var ( - _ machinery.Template = &Kustomization{} - _ machinery.Inserter = &Kustomization{} -) - -// Kustomization scaffolds a file that defines the kustomization scheme for the crd folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "crd", "kustomization.yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = fmt.Sprintf(kustomizationTemplate, - machinery.NewMarkerFor(f.Path, resourceMarker), - machinery.NewMarkerFor(f.Path, webhookPatchMarker), - machinery.NewMarkerFor(f.Path, caInjectionPatchMarker), - ) - - return nil -} - -//nolint:gosec to ignore false complain G101: Potential hardcoded credentials (gosec) -const ( - resourceMarker = "crdkustomizeresource" - webhookPatchMarker = "crdkustomizewebhookpatch" - caInjectionPatchMarker = "crdkustomizecainjectionpatch" -) - -// GetMarkers implements file.Inserter -func (f *Kustomization) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(f.Path, resourceMarker), - machinery.NewMarkerFor(f.Path, webhookPatchMarker), - machinery.NewMarkerFor(f.Path, caInjectionPatchMarker), - } -} - -const ( - resourceCodeFragment = `- bases/%s_%s.yaml -` - webhookPatchCodeFragment = `#- patches/webhook_in_%s.yaml -` - caInjectionPatchCodeFragment = `#- patches/cainjection_in_%s.yaml -` -) - -// GetCodeFragments implements file.Inserter -func (f *Kustomization) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 3) - - // Generate resource code fragments - res := make([]string, 0) - res = append(res, fmt.Sprintf(resourceCodeFragment, f.Resource.QualifiedGroup(), f.Resource.Plural)) - - // Generate resource code fragments - webhookPatch := make([]string, 0) - webhookPatch = append(webhookPatch, fmt.Sprintf(webhookPatchCodeFragment, f.Resource.Plural)) - - // Generate resource code fragments - caInjectionPatch := make([]string, 0) - caInjectionPatch = append(caInjectionPatch, fmt.Sprintf(caInjectionPatchCodeFragment, f.Resource.Plural)) - - // Only store code fragments in the map if the slices are non-empty - if len(res) != 0 { - fragments[machinery.NewMarkerFor(f.Path, resourceMarker)] = res - } - if len(webhookPatch) != 0 { - fragments[machinery.NewMarkerFor(f.Path, webhookPatchMarker)] = webhookPatch - } - if len(caInjectionPatch) != 0 { - fragments[machinery.NewMarkerFor(f.Path, caInjectionPatchMarker)] = caInjectionPatch - } - - return fragments -} - -var kustomizationTemplate = `# This kustomization.yaml is not intended to be run by itself, -# since it depends on service name and namespace that are out of this kustomize package. -# It should be run by config/default -resources: -%s - -patchesStrategicMerge: -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. -# patches here are for enabling the conversion webhook for each CRD -%s - -# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix. -# patches here are for enabling the CA injection for each CRD -%s - -# the following config is for teaching kustomize how to do kustomization for CRDs. -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomizeconfig.go deleted file mode 100644 index 428bfde8b..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/kustomizeconfig.go +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 crd - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the crd folder -type KustomizeConfig struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "crd", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigTemplate - - return nil -} - -//nolint:lll -const kustomizeConfigTemplate = `# This file is for teaching kustomize how to substitute name and namespace reference in CRD -nameReference: -- kind: Service - version: v1 - fieldSpecs: - - kind: CustomResourceDefinition - version: {{ .Resource.API.CRDVersion }} - group: apiextensions.k8s.io - {{- if ne .Resource.API.CRDVersion "v1" }} - path: spec/conversion/webhookClientConfig/service/name - {{- else }} - path: spec/conversion/webhook/clientConfig/service/name - {{- end }} - -namespace: -- kind: CustomResourceDefinition - version: {{ .Resource.API.CRDVersion }} - group: apiextensions.k8s.io - {{- if ne .Resource.API.CRDVersion "v1" }} - path: spec/conversion/webhookClientConfig/service/namespace - {{- else }} - path: spec/conversion/webhook/clientConfig/service/namespace - {{- end }} - create: false - -varReference: -- path: metadata/annotations -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go deleted file mode 100644 index 042f2228a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 patches - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &EnableCAInjectionPatch{} - -// EnableCAInjectionPatch scaffolds a file that defines the patch that injects CA into the CRD -type EnableCAInjectionPatch struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *EnableCAInjectionPatch) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("config", "crd", "patches", "cainjection_in_%[group]_%[plural].yaml") - } else { - f.Path = filepath.Join("config", "crd", "patches", "cainjection_in_%[plural].yaml") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = enableCAInjectionPatchTemplate - - return nil -} - -//nolint:lll -const enableCAInjectionPatchTemplate = `# The following patch adds a directive for certmanager to inject CA into the CRD -{{- if ne .Resource.API.CRDVersion "v1" }} -# CRD conversion requires k8s 1.13 or later. -{{- end }} -apiVersion: apiextensions.k8s.io/{{ .Resource.API.CRDVersion }} -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) - name: {{ .Resource.Plural }}.{{ .Resource.QualifiedGroup }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go deleted file mode 100644 index 35662c647..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go +++ /dev/null @@ -1,78 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 patches - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &EnableWebhookPatch{} - -// EnableWebhookPatch scaffolds a file that defines the patch that enables conversion webhook for the CRD -type EnableWebhookPatch struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *EnableWebhookPatch) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("config", "crd", "patches", "webhook_in_%[group]_%[plural].yaml") - } else { - f.Path = filepath.Join("config", "crd", "patches", "webhook_in_%[plural].yaml") - } - - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = enableWebhookPatchTemplate - - return nil -} - -const enableWebhookPatchTemplate = `# The following patch enables a conversion webhook for the CRD -{{- if ne .Resource.API.CRDVersion "v1" }} -# CRD conversion requires k8s 1.13 or later. -{{- end }} -apiVersion: apiextensions.k8s.io/{{ .Resource.API.CRDVersion }} -kind: CustomResourceDefinition -metadata: - name: {{ .Resource.Plural }}.{{ .Resource.QualifiedGroup }} -spec: - conversion: - strategy: Webhook - {{- if ne .Resource.API.CRDVersion "v1" }} - webhookClientConfig: - service: - namespace: system - name: webhook-service - path: /convert - {{- else }} - webhook: - clientConfig: - service: - namespace: system - name: webhook-service - path: /convert - conversionReviewVersions: - - {{ .Resource.API.CRDVersion }} - {{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go deleted file mode 100644 index e52e7f8dd..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &WebhookCAInjectionPatch{} - -// WebhookCAInjectionPatch scaffolds a file that defines the patch that adds annotation to webhooks -type WebhookCAInjectionPatch struct { - machinery.TemplateMixin - machinery.ResourceMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *WebhookCAInjectionPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "webhookcainjection_patch.yaml") - } - - f.TemplateBody = injectCAPatchTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const injectCAPatchTemplate = `# This patch add annotation to admission webhook config and -# the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize. -apiVersion: admissionregistration.k8s.io/{{ .Resource.Webhooks.WebhookVersion }} -kind: MutatingWebhookConfiguration -metadata: - labels: - app.kubernetes.io/name: mutatingwebhookconfiguration - app.kubernetes.io/instance: mutating-webhook-configuration - app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: mutating-webhook-configuration - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) ---- -apiVersion: admissionregistration.k8s.io/{{ .Resource.Webhooks.WebhookVersion }} -kind: ValidatingWebhookConfiguration -metadata: - labels: - app.kubernetes.io/name: validatingwebhookconfiguration - app.kubernetes.io/instance: validating-webhook-configuration - app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: validating-webhook-configuration - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/kustomization.go deleted file mode 100644 index dac2814a2..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/kustomization.go +++ /dev/null @@ -1,122 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the default overlay folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ProjectNameMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "kustomization.yaml") - } - - f.TemplateBody = kustomizeTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeTemplate = `# Adds namespace to all resources. -namespace: {{ .ProjectName }}-system - -# Value of this field is prepended to the -# names of all resources, e.g. a deployment named -# "wordpress" becomes "alices-wordpress". -# Note that it should also match with the prefix (text before '-') of the namespace -# field above. -namePrefix: {{ .ProjectName }}- - -# Labels to add to all resources and selectors. -#commonLabels: -# someName: someValue - -bases: -- ../crd -- ../rbac -- ../manager -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in -# crd/kustomization.yaml -#- ../webhook -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required. -#- ../certmanager -# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. -#- ../prometheus - -patchesStrategicMerge: -# Protect the /metrics endpoint by putting it behind auth. -# If you want your controller-manager to expose the /metrics -# endpoint w/o any authn/z, please comment the following line. -- manager_auth_proxy_patch.yaml - -{{ if .ComponentConfig }} -# Mount the controller config file for loading manager configurations -# through a ComponentConfig type -- manager_config_patch.yaml{{ end }} - -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in -# crd/kustomization.yaml -#- manager_webhook_patch.yaml - -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. -# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks. -# 'CERTMANAGER' needs to be enabled to use ca injection -#- webhookcainjection_patch.yaml - -# the following config is for teaching kustomize how to do var substitution -vars: -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix. -#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR -# objref: -# kind: Certificate -# group: cert-manager.io -# version: v1 -# name: serving-cert # this name should match the one in certificate.yaml -# fieldref: -# fieldpath: metadata.namespace -#- name: CERTIFICATE_NAME -# objref: -# kind: Certificate -# group: cert-manager.io -# version: v1 -# name: serving-cert # this name should match the one in certificate.yaml -#- name: SERVICE_NAMESPACE # namespace of the service -# objref: -# kind: Service -# version: v1 -# name: webhook-service -# fieldref: -# fieldpath: metadata.namespace -#- name: SERVICE_NAME -# objref: -# kind: Service -# version: v1 -# name: webhook-service -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go deleted file mode 100644 index 4e28d3577..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go +++ /dev/null @@ -1,87 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerAuthProxyPatch{} - -// ManagerAuthProxyPatch scaffolds a file that defines the patch that enables prometheus metrics for the manager -type ManagerAuthProxyPatch struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements file.Template -func (f *ManagerAuthProxyPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_auth_proxy_patch.yaml") - } - - f.TemplateBody = kustomizeAuthProxyPatchTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeAuthProxyPatchTemplate = `# This patch inject a sidecar container which is a HTTP proxy for the -# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: kube-rbac-proxy - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - "ALL" - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 - args: - - "--secure-listen-address=0.0.0.0:8443" - - "--upstream=http://127.0.0.1:8080/" - - "--logtostderr=true" - - "--v=0" - ports: - - containerPort: 8443 - protocol: TCP - name: https - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi -{{- if not .ComponentConfig }} - - name: manager - args: - - "--health-probe-bind-address=:8081" - - "--metrics-bind-address=127.0.0.1:8080" - - "--leader-elect" -{{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_config_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_config_patch.go deleted file mode 100644 index bf7fce47d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/manager_config_patch.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerConfigPatch{} - -// ManagerConfigPatch scaffolds a ManagerConfigPatch for a Resource -type ManagerConfigPatch struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements input.Template -func (f *ManagerConfigPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_config_patch.yaml") - } - - f.TemplateBody = managerConfigPatchTemplate - - return nil -} - -const managerConfigPatchTemplate = `apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: manager -{{- if .ComponentConfig }} - args: - - "--config=controller_manager_config.yaml" - volumeMounts: - - name: manager-config - mountPath: /controller_manager_config.yaml - subPath: controller_manager_config.yaml - volumes: - - name: manager-config - configMap: - name: manager-config -{{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go deleted file mode 100644 index 7f993dbd3..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerWebhookPatch{} - -// ManagerWebhookPatch scaffolds a file that defines the patch that enables webhooks on the manager -type ManagerWebhookPatch struct { - machinery.TemplateMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *ManagerWebhookPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_webhook_patch.yaml") - } - - f.TemplateBody = managerWebhookPatchTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - } - - return nil -} - -const managerWebhookPatchTemplate = `apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: manager - ports: - - containerPort: 9443 - name: webhook-server - protocol: TCP - volumeMounts: - - mountPath: /tmp/k8s-webhook-server/serving-certs - name: cert - readOnly: true - volumes: - - name: cert - secret: - defaultMode: 420 - secretName: webhook-server-cert -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/config.go deleted file mode 100644 index 0a471835d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/config.go +++ /dev/null @@ -1,152 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 manager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Config{} - -// Config scaffolds a file that defines the namespace and the manager deployment -type Config struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin - machinery.ProjectNameMixin - - // Image is controller manager image name - Image string -} - -// SetTemplateDefaults implements file.Template -func (f *Config) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "manager", "manager.yaml") - } - - f.TemplateBody = configTemplate - - return nil -} - -const configTemplate = `apiVersion: v1 -kind: Namespace -metadata: - labels: - control-plane: controller-manager - app.kubernetes.io/name: namespace - app.kubernetes.io/instance: system - app.kubernetes.io/component: manager - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: system ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system - labels: - control-plane: controller-manager - app.kubernetes.io/name: deployment - app.kubernetes.io/instance: controller-manager - app.kubernetes.io/component: manager - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize -spec: - selector: - matchLabels: - control-plane: controller-manager - replicas: 1 - template: - metadata: - annotations: - kubectl.kubernetes.io/default-container: manager - labels: - control-plane: controller-manager - spec: - # TODO(user): Uncomment the following code to configure the nodeAffinity expression - # according to the platforms which are supported by your solution. - # It is considered best practice to support multiple architectures. You can - # build your manager image using the makefile target docker-buildx. - # affinity: - # nodeAffinity: - # requiredDuringSchedulingIgnoredDuringExecution: - # nodeSelectorTerms: - # - matchExpressions: - # - key: kubernetes.io/arch - # operator: In - # values: - # - amd64 - # - arm64 - # - ppc64le - # - s390x - # - key: kubernetes.io/os - # operator: In - # values: - # - linux - securityContext: - runAsNonRoot: true - # TODO(user): For common cases that do not require escalating privileges - # it is recommended to ensure that all your Pods/Containers are restrictive. - # More info: https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted - # Please uncomment the following code if your project does NOT have to work on old Kubernetes - # versions < 1.19 or on vendors versions which do NOT support this field by default (i.e. Openshift < 4.11 ). - # seccompProfile: - # type: RuntimeDefault - containers: - - command: - - /manager -{{- if not .ComponentConfig }} - args: - - --leader-elect -{{- end }} - image: {{ .Image }} - name: manager - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - "ALL" - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - # TODO(user): Configure the resources accordingly based on the project requirements. - # More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - serviceAccountName: controller-manager - terminationGracePeriodSeconds: 10 -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/controller_manager_config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/controller_manager_config.go deleted file mode 100644 index 317352560..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/controller_manager_config.go +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 manager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ControllerManagerConfig{} - -// ControllerManagerConfig scaffolds the config file in config/manager folder. -type ControllerManagerConfig struct { - machinery.TemplateMixin - machinery.DomainMixin - machinery.RepositoryMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements input.Template -func (f *ControllerManagerConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "manager", "controller_manager_config.yaml") - } - - f.TemplateBody = controllerManagerConfigTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const controllerManagerConfigTemplate = `apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 -kind: ControllerManagerConfig -metadata: - labels: - app.kubernetes.io/name: controllermanagerconfig - app.kubernetes.io/instance: controller-manager-configuration - app.kubernetes.io/component: manager - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize -health: - healthProbeBindAddress: :8081 -metrics: - bindAddress: 127.0.0.1:8080 -webhook: - port: 9443 -leaderElection: - leaderElect: true - resourceName: {{ hashFNV .Repo }}.{{ .Domain }} -# leaderElectionReleaseOnCancel defines if the leader should step down volume -# when the Manager ends. This requires the binary to immediately end when the -# Manager is stopped, otherwise, this setting is unsafe. Setting this significantly -# speeds up voluntary leader transitions as the new leader don't have to wait -# LeaseDuration time first. -# In the default scaffold provided, the program ends immediately after -# the manager stops, so would be fine to enable this option. However, -# if you are doing or is intended to do any operation such as perform cleanups -# after the manager stops then its usage might be unsafe. -# leaderElectionReleaseOnCancel: true -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/kustomization.go deleted file mode 100644 index 1faa0750c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/manager/kustomization.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 manager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the manager folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "manager", "kustomization.yaml") - } - - f.TemplateBody = kustomizeManagerTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeManagerTemplate = `resources: -- manager.yaml - -{{- if .ComponentConfig }} - -generatorOptions: - disableNameSuffixHash: true - -configMapGenerator: -- name: manager-config - files: - - controller_manager_config.yaml -{{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/monitor.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/monitor.go deleted file mode 100644 index 2a541cd5e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/monitor.go +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 prometheus - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Monitor{} - -// Monitor scaffolds a file that defines the prometheus service monitor -type Monitor struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Monitor) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "prometheus", "monitor.yaml") - } - - f.TemplateBody = serviceMonitorTemplate - - return nil -} - -const serviceMonitorTemplate = ` -# Prometheus Monitor Service (Metrics) -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - labels: - control-plane: controller-manager - app.kubernetes.io/name: servicemonitor - app.kubernetes.io/instance: controller-manager-metrics-monitor - app.kubernetes.io/component: metrics - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: controller-manager-metrics-monitor - namespace: system -spec: - endpoints: - - path: /metrics - port: https - scheme: https - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token - tlsConfig: - insecureSkipVerify: true - selector: - matchLabels: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go deleted file mode 100644 index 680eae637..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyClientRole{} - -// AuthProxyClientRole scaffolds a file that defines the role for the metrics reader -type AuthProxyClientRole struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyClientRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_client_clusterrole.yaml") - } - - f.TemplateBody = clientClusterRoleTemplate - - return nil -} - -const clientClusterRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: clusterrole - app.kubernetes.io/instance: metrics-reader - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: metrics-reader -rules: -- nonResourceURLs: - - "/metrics" - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role.go deleted file mode 100644 index c08756c32..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRole{} - -// AuthProxyRole scaffolds a file that defines the role for the auth proxy -type AuthProxyRole struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role.yaml") - } - - f.TemplateBody = proxyRoleTemplate - - return nil -} - -const proxyRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: clusterrole - app.kubernetes.io/instance: proxy-role - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: proxy-role -rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go deleted file mode 100644 index c0df0d2d8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRoleBinding{} - -// AuthProxyRoleBinding scaffolds a file that defines the role binding for the auth proxy -type AuthProxyRoleBinding struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role_binding.yaml") - } - - f.TemplateBody = proxyRoleBindinggTemplate - - return nil -} - -const proxyRoleBindinggTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/name: clusterrolebinding - app.kubernetes.io/instance: proxy-rolebinding - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: proxy-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: proxy-role -subjects: -- kind: ServiceAccount - name: controller-manager - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_service.go deleted file mode 100644 index beda972e9..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/auth_proxy_service.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyService{} - -// AuthProxyService scaffolds a file that defines the service for the auth proxy -type AuthProxyService struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyService) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_service.yaml") - } - - f.TemplateBody = authProxyServiceTemplate - - return nil -} - -const authProxyServiceTemplate = `apiVersion: v1 -kind: Service -metadata: - labels: - control-plane: controller-manager - app.kubernetes.io/name: service - app.kubernetes.io/instance: controller-manager-metrics-service - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: controller-manager-metrics-service - namespace: system -spec: - ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https - selector: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_editor_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_editor_role.go deleted file mode 100644 index 6e122f362..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_editor_role.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDEditorRole{} - -// CRDEditorRole scaffolds a file that defines the role that allows to edit plurals -type CRDEditorRole struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.ResourceMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *CRDEditorRole) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("config", "rbac", "%[group]_%[kind]_editor_role.yaml") - } else { - f.Path = filepath.Join("config", "rbac", "%[kind]_editor_role.yaml") - } - - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = crdRoleEditorTemplate - - return nil -} - -const crdRoleEditorTemplate = `# permissions for end users to edit {{ .Resource.Plural }}. -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: clusterrole - app.kubernetes.io/instance: {{ lower .Resource.Kind }}-editor-role - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: {{ lower .Resource.Kind }}-editor-role -rules: -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }} - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }}/status - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_viewer_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_viewer_role.go deleted file mode 100644 index ed75bb88b..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/crd_viewer_role.go +++ /dev/null @@ -1,79 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDViewerRole{} - -// CRDViewerRole scaffolds a file that defines the role that allows to view plurals -type CRDViewerRole struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.ResourceMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *CRDViewerRole) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("config", "rbac", "%[group]_%[kind]_viewer_role.yaml") - } else { - f.Path = filepath.Join("config", "rbac", "%[kind]_viewer_role.yaml") - } - - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = crdRoleViewerTemplate - - return nil -} - -const crdRoleViewerTemplate = `# permissions for end users to view {{ .Resource.Plural }}. -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: clusterrole - app.kubernetes.io/instance: {{ lower .Resource.Kind }}-viewer-role - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: {{ lower .Resource.Kind }}-viewer-role -rules: -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }} - verbs: - - get - - list - - watch -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }}/status - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/kustomization.go deleted file mode 100644 index d3ea9b22f..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/kustomization.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the rbac folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "kustomization.yaml") - } - - f.TemplateBody = kustomizeRBACTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeRBACTemplate = `resources: -# All RBAC will be applied under this service account in -# the deployment namespace. You may comment out this resource -# if your manager will use a service account that exists at -# runtime. Be sure to update RoleBinding and ClusterRoleBinding -# subjects if changing service account names. -- service_account.yaml -- role.yaml -- role_binding.yaml -- leader_election_role.yaml -- leader_election_role_binding.yaml -# Comment the following 4 lines if you want to disable -# the auth proxy (https://github.com/brancz/kube-rbac-proxy) -# which protects your /metrics endpoint. -- auth_proxy_service.yaml -- auth_proxy_role.yaml -- auth_proxy_role_binding.yaml -- auth_proxy_client_clusterrole.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role.go deleted file mode 100644 index 79143b86c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role.go +++ /dev/null @@ -1,88 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &LeaderElectionRole{} - -// LeaderElectionRole scaffolds a file that defines the role that allows leader election -type LeaderElectionRole struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *LeaderElectionRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "leader_election_role.yaml") - } - - f.TemplateBody = leaderElectionRoleTemplate - - return nil -} - -const leaderElectionRoleTemplate = `# permissions to do leader election. -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/name: role - app.kubernetes.io/instance: leader-election-role - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: leader-election-role -rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go deleted file mode 100644 index b40b4a5fa..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &LeaderElectionRoleBinding{} - -// LeaderElectionRoleBinding scaffolds a file that defines the role binding that allows leader election -type LeaderElectionRoleBinding struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *LeaderElectionRoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "leader_election_role_binding.yaml") - } - - f.TemplateBody = leaderElectionRoleBindingTemplate - - return nil -} - -const leaderElectionRoleBindingTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/name: rolebinding - app.kubernetes.io/instance: leader-election-rolebinding - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: leader-election-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: leader-election-role -subjects: -- kind: ServiceAccount - name: controller-manager - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/role_binding.go deleted file mode 100644 index f975ee97a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/role_binding.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &RoleBinding{} - -// RoleBinding scaffolds a file that defines the role binding for the manager -type RoleBinding struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *RoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "role_binding.yaml") - } - - f.TemplateBody = managerBindingTemplate - - return nil -} - -const managerBindingTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/name: clusterrolebinding - app.kubernetes.io/instance: manager-rolebinding - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: manager-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: manager-role -subjects: -- kind: ServiceAccount - name: controller-manager - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/service_account.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/service_account.go deleted file mode 100644 index eace20658..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/rbac/service_account.go +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ServiceAccount{} - -// ServiceAccount scaffolds a file that defines the service account the manager is deployed in. -type ServiceAccount struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *ServiceAccount) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "service_account.yaml") - } - - f.TemplateBody = serviceAccountTemplate - - return nil -} - -const serviceAccountTemplate = `apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/name: serviceaccount - app.kubernetes.io/instance: controller-manager - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: controller-manager - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples/crd_sample.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples/crd_sample.go deleted file mode 100644 index 06b2376d9..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/samples/crd_sample.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 samples - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDSample{} - -// CRDSample scaffolds a file that defines a sample manifest for the CRD -type CRDSample struct { - machinery.TemplateMixin - machinery.ResourceMixin - machinery.ProjectNameMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *CRDSample) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "samples", "%[group]_%[version]_%[kind].yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - f.TemplateBody = crdSampleTemplate - - return nil -} - -const crdSampleTemplate = `apiVersion: {{ .Resource.QualifiedGroup }}/{{ .Resource.Version }} -kind: {{ .Resource.Kind }} -metadata: - labels: - app.kubernetes.io/name: {{ lower .Resource.Kind }} - app.kubernetes.io/instance: {{ lower .Resource.Kind }}-sample - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: {{ .ProjectName }} - name: {{ lower .Resource.Kind }}-sample -spec: - # TODO(user): Add fields here -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomizeconfig.go deleted file mode 100644 index 524f11e71..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomizeconfig.go +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the webhook folder -type KustomizeConfig struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigWebhookTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -//nolint:lll -const kustomizeConfigWebhookTemplate = `# the following config is for teaching kustomize where to look at when substituting vars. -# It requires kustomize v2.1.0 or newer to work properly. -nameReference: -- kind: Service - version: v1 - fieldSpecs: - - kind: MutatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/name - - kind: ValidatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/name - -namespace: -- kind: MutatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/namespace - create: true -- kind: ValidatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/namespace - create: true - -varReference: -- path: metadata/annotations -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/service.go deleted file mode 100644 index c9a292a16..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/service.go +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Service{} - -// Service scaffolds a file that defines the webhook service -type Service struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Service) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "service.yaml") - } - - f.TemplateBody = serviceTemplate - - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const serviceTemplate = ` -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: service - app.kubernetes.io/instance: webhook-service - app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: {{ .ProjectName }} - app.kubernetes.io/part-of: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: webhook-service - namespace: system -spec: - ports: - - port: 443 - protocol: TCP - targetPort: 9443 - selector: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/webhook.go deleted file mode 100644 index 6e494f194..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/webhook.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/certmanager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/kdefault" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook" -) - -var _ plugins.Scaffolder = &webhookScaffolder{} - -type webhookScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem - - // force indicates whether to scaffold files even if they exist. - force bool -} - -// NewWebhookScaffolder returns a new Scaffolder for v2 webhook creation operations -func NewWebhookScaffolder(config config.Config, resource resource.Resource, force bool) plugins.Scaffolder { - return &webhookScaffolder{ - config: config, - resource: resource, - force: force, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *webhookScaffolder) InjectFS(fs machinery.Filesystem) { s.fs = fs } - -// Scaffold implements cmdutil.Scaffolder -func (s *webhookScaffolder) Scaffold() error { - log.Println("Writing kustomize manifests for you to edit...") - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithResource(&s.resource), - ) - - if err := s.config.UpdateResource(s.resource); err != nil { - return fmt.Errorf("error updating resource: %w", err) - } - - if err := scaffold.Execute( - &kdefault.WebhookCAInjectionPatch{}, - &kdefault.ManagerWebhookPatch{}, - &webhook.Kustomization{Force: s.force}, - &webhook.KustomizeConfig{}, - &webhook.Service{}, - &certmanager.Certificate{}, - &certmanager.Kustomization{}, - &certmanager.KustomizeConfig{}, - ); err != nil { - return fmt.Errorf("error scaffolding kustomize webhook manifests: %v", err) - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/webhook.go deleted file mode 100644 index b97151598..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/webhook.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v2 -package v1 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds" -) - -var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} - -type createWebhookSubcommand struct { - createSubcommand -} - -func (p *createWebhookSubcommand) Scaffold(fs machinery.Filesystem) error { - if err := p.configure(); err != nil { - return err - } - scaffolder := scaffolds.NewWebhookScaffolder(p.config, *p.resource, p.force) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go deleted file mode 100644 index d8d572619..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go +++ /dev/null @@ -1,87 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerAuthProxyPatch{} - -// ManagerAuthProxyPatch scaffolds a file that defines the patch that enables prometheus metrics for the manager -type ManagerAuthProxyPatch struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements file.Template -func (f *ManagerAuthProxyPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_auth_proxy_patch.yaml") - } - - f.TemplateBody = kustomizeAuthProxyPatchTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeAuthProxyPatchTemplate = `# This patch inject a sidecar container which is a HTTP proxy for the -# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: kube-rbac-proxy - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - "ALL" - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.16.0 - args: - - "--secure-listen-address=0.0.0.0:8443" - - "--upstream=http://127.0.0.1:8080/" - - "--logtostderr=true" - - "--v=0" - ports: - - containerPort: 8443 - protocol: TCP - name: https - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi -{{- if not .ComponentConfig }} - - name: manager - args: - - "--health-probe-bind-address=:8081" - - "--metrics-bind-address=127.0.0.1:8080" - - "--leader-elect" -{{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_config_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_config_patch.go deleted file mode 100644 index bf7fce47d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_config_patch.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerConfigPatch{} - -// ManagerConfigPatch scaffolds a ManagerConfigPatch for a Resource -type ManagerConfigPatch struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements input.Template -func (f *ManagerConfigPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_config_patch.yaml") - } - - f.TemplateBody = managerConfigPatchTemplate - - return nil -} - -const managerConfigPatchTemplate = `apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: manager -{{- if .ComponentConfig }} - args: - - "--config=controller_manager_config.yaml" - volumeMounts: - - name: manager-config - mountPath: /controller_manager_config.yaml - subPath: controller_manager_config.yaml - volumes: - - name: manager-config - configMap: - name: manager-config -{{- end }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/controller_manager_config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/controller_manager_config.go deleted file mode 100644 index 90178e367..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/controller_manager_config.go +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 manager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ControllerManagerConfig{} - -// ControllerManagerConfig scaffolds the config file in config/manager folder. -type ControllerManagerConfig struct { - machinery.TemplateMixin - machinery.DomainMixin - machinery.RepositoryMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements input.Template -func (f *ControllerManagerConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "manager", "controller_manager_config.yaml") - } - - f.TemplateBody = controllerManagerConfigTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const controllerManagerConfigTemplate = `apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 -kind: ControllerManagerConfig -metadata: - labels: - app.kubernetes.io/name: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize -health: - healthProbeBindAddress: :8081 -metrics: - bindAddress: 127.0.0.1:8080 -webhook: - port: 9443 -leaderElection: - leaderElect: true - resourceName: {{ hashFNV .Repo }}.{{ .Domain }} -# leaderElectionReleaseOnCancel defines if the leader should step down volume -# when the Manager ends. This requires the binary to immediately end when the -# Manager is stopped, otherwise, this setting is unsafe. Setting this significantly -# speeds up voluntary leader transitions as the new leader don't have to wait -# LeaseDuration time first. -# In the default scaffold provided, the program ends immediately after -# the manager stops, so would be fine to enable this option. However, -# if you are doing or is intended to do any operation such as perform cleanups -# after the manager stops then its usage might be unsafe. -# leaderElectionReleaseOnCancel: true -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go deleted file mode 100644 index 76bf6e1c5..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 prometheus - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the prometheus folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "prometheus", "kustomization.yaml") - } - - f.TemplateBody = kustomizationTemplate - - return nil -} - -const kustomizationTemplate = `resources: -- monitor.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go deleted file mode 100644 index a348524ab..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyClientRole{} - -// AuthProxyClientRole scaffolds a file that defines the role for the metrics reader -type AuthProxyClientRole struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyClientRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_client_clusterrole.yaml") - } - - f.TemplateBody = clientClusterRoleTemplate - - return nil -} - -const clientClusterRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: metrics-reader -rules: -- nonResourceURLs: - - "/metrics" - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go deleted file mode 100644 index d1b639c0e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRole{} - -// AuthProxyRole scaffolds a file that defines the role for the auth proxy -type AuthProxyRole struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role.yaml") - } - - f.TemplateBody = proxyRoleTemplate - - return nil -} - -const proxyRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/name: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: proxy-role -rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go deleted file mode 100644 index 4ee86ed5c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRoleBinding{} - -// AuthProxyRoleBinding scaffolds a file that defines the role binding for the auth proxy -type AuthProxyRoleBinding struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role_binding.yaml") - } - - f.TemplateBody = proxyRoleBindinggTemplate - - return nil -} - -const proxyRoleBindinggTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/name: {{ .ProjectName }} - app.kubernetes.io/managed-by: kustomize - name: proxy-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: proxy-role -subjects: -- kind: ServiceAccount - name: controller-manager - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go deleted file mode 100644 index 3f55f70a1..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the webhook folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ResourceMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "kustomization.yaml") - } - - f.TemplateBody = kustomizeWebhookTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - // If file exists (ex. because a webhook was already created), skip creation. - f.IfExistsAction = machinery.SkipFile - } - - return nil -} - -const kustomizeWebhookTemplate = `resources: -- manifests{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}.{{ .Resource.Webhooks.WebhookVersion }}{{ end }}.yaml -- service.yaml - -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/api.go deleted file mode 100644 index c3c99eade..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/api.go +++ /dev/null @@ -1,150 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 v1 - -import ( - "errors" - "fmt" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds" - goPluginV2 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2" - goPluginV3 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3" -) - -const ( - // kbDeclarativePattern is the sigs.k8s.io/kubebuilder-declarative-pattern version - kbDeclarativePatternForV2 = "v0.0.0-20200522144838-848d48e5b073" - kbDeclarativePatternForV3 = "18dbaf5fcd851e6adc3f2f8a8facb669a1420797" - kbDeclarativePatternForV4 = "9a410556b95de526e12acfe0d6f56fd35c0b0135" -) - -var _ plugin.CreateAPISubcommand = &createAPISubcommand{} - -type createAPISubcommand struct { - config config.Config - - resource *resource.Resource -} - -func (p *createAPISubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = ` -Scaffold a Kubernetes API by writing a Resource definition and a Controller. - -After the scaffold is written, the dependencies will be updated and -make generate will be run. -` - subcmdMeta.Examples = fmt.Sprintf(` # Create a frigates API with Group: ship, Version: v1beta1 and Kind: Frigate - %[1]s create api --group ship --version v1beta1 --kind Frigate --resource --controller - - # Edit the API Scheme - nano api/v1beta1/frigate_types.go - - # Edit the Controller Test - nano controllers/frigate/frigate_controller_test.go - - # Generate the manifests - make manifests - - # Install CRDs into the Kubernetes cluster using kubectl apply - make install - - # Regenerate code and run against the Kubernetes cluster configured by ~/.kube/config - make run -`, cliMeta.CommandName) -} - -func (p *createAPISubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - - if !p.resource.HasAPI() || !p.resource.HasController() { - return plugin.ExitError{ - Plugin: pluginName, - Reason: "declarative pattern is only supported when API and controller are scaffolded", - } - } - - return nil -} - -func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { - log.Println("updating scaffold with declarative pattern...") - - scaffolder := scaffolds.NewAPIScaffolder(p.config, *p.resource) - scaffolder.InjectFS(fs) - err := scaffolder.Scaffold() - if err != nil { - return err - } - - // Update Dockerfile - // nolint:staticcheck - err = updateDockerfile(plugin.IsLegacyLayout(p.config)) - if err != nil { - return err - } - - // Track the resources following a declarative approach - cfg := pluginConfig{} - if err := p.config.DecodePluginConfig(pluginKey, &cfg); errors.As(err, &config.UnsupportedFieldError{}) { - // Config doesn't support per-plugin configuration, so we can't track them - } else { - // Fail unless they key wasn't found, which just means it is the first resource tracked - if err != nil && !errors.As(err, &config.PluginKeyNotFoundError{}) { - return err - } - - cfg.Resources = append(cfg.Resources, p.resource.GVK) - if err := p.config.EncodePluginConfig(pluginKey, cfg); err != nil { - return err - } - } - - // Ensure that we are pinning sigs.k8s.io/kubebuilder-declarative-pattern version - // Just pin an old value for go/v2. It shows fine for now. However, we should improve/change it - // if we see that more rules based on the plugins version are required. - kbDeclarativePattern := kbDeclarativePatternForV4 - for _, pluginKey := range p.config.GetPluginChain() { - if pluginKey == plugin.KeyFor(goPluginV2.Plugin{}) { - kbDeclarativePattern = kbDeclarativePatternForV2 - break - } - if pluginKey == plugin.KeyFor(goPluginV3.Plugin{}) { - kbDeclarativePattern = kbDeclarativePatternForV3 - break - } - } - err = util.RunCmd("Get declarative pattern", "go", "get", - "sigs.k8s.io/kubebuilder-declarative-pattern@"+kbDeclarativePattern) - if err != nil { - return err - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/init.go deleted file mode 100644 index 0dd7e05f6..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/init.go +++ /dev/null @@ -1,95 +0,0 @@ -/* -Copyright 2021 The Kubernetes 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 v1 - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" -) - -var _ plugin.InitSubcommand = &initSubcommand{} - -type initSubcommand struct { - config config.Config -} - -func (p *initSubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *initSubcommand) Scaffold(_ machinery.Filesystem) error { - //nolint:staticcheck - err := updateDockerfile(plugin.IsLegacyLayout(p.config)) - if err != nil { - return err - } - return nil -} - -// updateDockerfile will add channels staging required for declarative plugin -func updateDockerfile(isLegacyLayout bool) error { - log.Println("updating Dockerfile to add channels/ directory in the image") - dockerfile := filepath.Join("Dockerfile") - - controllerPath := "internal/controller/" - if isLegacyLayout { - controllerPath = "controllers/" - } - // nolint:lll - err := insertCodeIfDoesNotExist(dockerfile, - fmt.Sprintf("COPY %s %s", controllerPath, controllerPath), - "\n# https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/blob/master/docs/addon/walkthrough/README.md#adding-a-manifest\n# Stage channels and make readable\nCOPY channels/ /channels/\nRUN chmod -R a+rx /channels/") - if err != nil { - return err - } - - err = insertCodeIfDoesNotExist(dockerfile, - "COPY --from=builder /workspace/manager .", - "\n# copy channels\nCOPY --from=builder /channels /channels\n") - if err != nil { - return err - } - return nil -} - -// insertCodeIfDoesNotExist insert code if it does not already exists -func insertCodeIfDoesNotExist(filename, target, code string) error { - // false positive - // nolint:gosec - contents, err := os.ReadFile(filename) - if err != nil { - return err - } - - idx := strings.Index(string(contents), code) - if idx != -1 { - return nil - } - - return util.InsertCode(filename, target, code) -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/plugin.go deleted file mode 100644 index bb553a3aa..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/plugin.go +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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. -*/ - -// Deprecated: The declarative plugin has been deprecated. -// The Declarative plugin is an implementation derived from the kubebuilder-declarative-pattern project. -// As the project maintainers possess the most comprehensive knowledge about its changes and Kubebuilder -// allows the creation of custom plugins using its library, it has been decided that this plugin will be -// better maintained within the kubebuilder-declarative-pattern project -// itself, which falls under its domain of responsibility. This decision aims to improve the maintainability -// of both the plugin and Kubebuilder, ultimately providing an enhanced user experience. -// To follow up on this work, please refer to the Issue #293: -// https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/issues/293. -package v1 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" -) - -const pluginName = "declarative." + golang.DefaultNameQualifier - -var ( - pluginVersion = plugin.Version{Number: 1} - supportedProjectVersions = []config.Version{cfgv2.Version, cfgv3.Version} - pluginKey = plugin.KeyFor(Plugin{}) -) - -var _ plugin.CreateAPI = Plugin{} - -// Plugin implements the plugin.Full interface -type Plugin struct { - initSubcommand - createAPISubcommand -} - -// Name returns the name of the plugin -func (Plugin) Name() string { return pluginName } - -// Version returns the version of the plugin -func (Plugin) Version() plugin.Version { return pluginVersion } - -// SupportedProjectVersions returns an array with all project versions supported by the plugin -func (Plugin) SupportedProjectVersions() []config.Version { return supportedProjectVersions } - -// GetInitSubcommand will return the subcommand which is responsible for initializing and common scaffolding -func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p.initSubcommand } - -// GetCreateAPISubcommand will return the subcommand which is responsible for scaffolding apis -func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { return &p.createAPISubcommand } - -type pluginConfig struct { - Resources []resource.GVK `json:"resources,omitempty"` -} - -func (p Plugin) DeprecationWarning() string { - return "The declarative plugin has been deprecated. \n" + - "The Declarative plugin is an implementation derived from the kubebuilder-declarative-pattern project. " + - "As the project maintainers possess the most comprehensive knowledge about its changes and Kubebuilder " + - "allows the creation of custom plugins using its library, it has been decided that this plugin will be " + - "better maintained within the kubebuilder-declarative-pattern project " + - "itself, which falls under its domain of responsibility. This decision aims to improve the maintainability " + - "of both the plugin and Kubebuilder, ultimately providing an enhanced user experience." + - "To follow up on this work, please refer to the Issue #293: " + - "https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern/issues/293." -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/api.go deleted file mode 100644 index 10273b195..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/api.go +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 scaffolds - -import ( - "fmt" - "path/filepath" - - "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates" -) - -const ( - exampleManifestVersion = "0.0.1" -) - -var _ plugins.Scaffolder = &apiScaffolder{} - -type apiScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewAPIScaffolder returns a new Scaffolder for declarative -func NewAPIScaffolder(config config.Config, res resource.Resource) plugins.Scaffolder { - return &apiScaffolder{ - config: config, - resource: res, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *apiScaffolder) Scaffold() error { - // Load the boilerplate - boilerplate, err := afero.ReadFile(s.fs.FS, filepath.Join("hack", "boilerplate.go.txt")) - if err != nil { - return fmt.Errorf("error updating scaffold: unable to load boilerplate: %w", err) - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - machinery.WithResource(&s.resource), - ) - - //nolint:staticcheck - err = scaffold.Execute( - &templates.Types{IsLegacyLayout: plugin.IsLegacyLayout(s.config)}, - &templates.Controller{IsLegacyLayout: plugin.IsLegacyLayout(s.config)}, - &templates.Channel{ManifestVersion: exampleManifestVersion}, - &templates.Manifest{ManifestVersion: exampleManifestVersion}, - ) - if err != nil { - return fmt.Errorf("error updating scaffold: %w", err) - } - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/channel.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/channel.go deleted file mode 100644 index 4d5431d83..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/channel.go +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 templates - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Channel{} - -// Channel scaffolds the file for the channel -type Channel struct { - machinery.TemplateMixin - - ManifestVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *Channel) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("channels", "stable") - } - log.Println(f.Path) - - f.TemplateBody = channelTemplate - - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const channelTemplate = `# Versions for the stable channel -manifests: -- version: {{ .ManifestVersion }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/controller.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/controller.go deleted file mode 100644 index 12c60f429..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/controller.go +++ /dev/null @@ -1,150 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 templates - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Controller{} - -// Controller scaffolds the file that defines the controller for a CRD or a builtin resource -// nolint:maligned -type Controller struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - IsLegacyLayout bool - PackageName string -} - -// SetTemplateDefaults implements file.Template -func (f *Controller) SetTemplateDefaults() error { - if f.Path == "" { - if f.IsLegacyLayout { - if f.MultiGroup { - f.Path = filepath.Join("controllers", "%[group]", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("controllers", "%[kind]_controller.go") - } - } else { - if f.MultiGroup { - f.Path = filepath.Join("internal", "controller", "%[group]", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("internal", "controller", "%[kind]_controller.go") - } - } - - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.PackageName = "controller" - if f.IsLegacyLayout { - f.PackageName = "controllers" - } - - f.TemplateBody = controllerTemplate - - f.IfExistsAction = machinery.OverwriteFile - - return nil -} - -//nolint:lll -const controllerTemplate = `{{ .Boilerplate }} - -package {{ .PackageName }} - -import ( - "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/runtime" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller" - "sigs.k8s.io/controller-runtime/pkg/handler" - "sigs.k8s.io/controller-runtime/pkg/reconcile" - "sigs.k8s.io/controller-runtime/pkg/source" - "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon" - "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/status" - "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative" - - {{ .Resource.ImportAlias }} "{{ .Resource.Path }}" -) - -var _ reconcile.Reconciler = &{{ .Resource.Kind }}Reconciler{} - -// {{ .Resource.Kind }}Reconciler reconciles a {{ .Resource.Kind }} object -type {{ .Resource.Kind }}Reconciler struct { - client.Client - Log logr.Logger - Scheme *runtime.Scheme - - declarative.Reconciler -} - -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch - -// SetupWithManager sets up the controller with the Manager. -func (r *{{ .Resource.Kind }}Reconciler) SetupWithManager(mgr ctrl.Manager) error { - addon.Init() - - labels := map[string]string{ - "k8s-app": "{{ lower .Resource.Kind }}", - } - - watchLabels := declarative.SourceLabel(mgr.GetScheme()) - - if err := r.Reconciler.Init(mgr, &{{ .Resource.ImportAlias }}.{{ .Resource.Kind }}{}, - declarative.WithObjectTransform(declarative.AddLabels(labels)), - declarative.WithOwner(declarative.SourceAsOwner), - declarative.WithLabels(watchLabels), - declarative.WithStatus(status.NewBasic(mgr.GetClient())), - // TODO: add an application to your manifest: declarative.WithObjectTransform(addon.TransformApplicationFromStatus), - // TODO: add an application to your manifest: declarative.WithManagedApplication(watchLabels), - declarative.WithObjectTransform(addon.ApplyPatches), - ); err != nil { - return err - } - - c, err := controller.New("{{ lower .Resource.Kind }}-controller", mgr, controller.Options{Reconciler: r}) - if err != nil { - return err - } - - // Watch for changes to {{ .Resource.Kind }} - err = c.Watch(source.Kind(mgr.GetCache(), &{{ .Resource.ImportAlias }}.{{ .Resource.Kind }}{}), &handler.EnqueueRequestForObject{}) - if err != nil { - return err - } - - // Watch for changes to deployed objects - err = declarative.WatchAll(mgr.GetConfig(), c, r, watchLabels) - if err != nil { - return err - } - - return nil -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/manifest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/manifest.go deleted file mode 100644 index d91f779ae..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/manifest.go +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 templates - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Manifest{} - -// Manifest scaffolds the file that acts as a placeholder for the manifest -type Manifest struct { - machinery.TemplateMixin - machinery.ResourceMixin - - ManifestVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *Manifest) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("channels", "packages", "%[kind]", f.ManifestVersion, "manifest.yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = manifestTemplate - - f.IfExistsAction = machinery.SkipFile - - return nil -} - -const manifestTemplate = `# Placeholder manifest - replace with the manifest for your addon -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/types.go deleted file mode 100644 index 9187c886c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/declarative/v1/scaffolds/internal/templates/types.go +++ /dev/null @@ -1,157 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 templates - -import ( - "fmt" - "path/filepath" - "text/template" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Types{} - -// Types scaffolds the file that defines the schema for a CRD -// nolint:maligned -type Types struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - IsLegacyLayout bool -} - -// SetTemplateDefaults implements file.Template -func (f *Types) SetTemplateDefaults() error { - if f.Path == "" { - if f.IsLegacyLayout { - if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } - } else { - if f.MultiGroup { - f.Path = filepath.Join("api", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } - } - - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = typesTemplate - - f.IfExistsAction = machinery.OverwriteFile - - return nil -} - -// GetFuncMap implements file.UseCustomFuncMap -func (f Types) GetFuncMap() template.FuncMap { - funcMap := machinery.DefaultFuncMap() - funcMap["JSONTag"] = func(tag string) string { - return fmt.Sprintf("`json:%q`", tag) - } - return funcMap -} - -const typesTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - addonv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/apis/v1alpha1" -) - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// {{ .Resource.Kind }}Spec defines the desired state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Spec struct { - addonv1alpha1.CommonSpec {{ JSONTag ",inline" }} - addonv1alpha1.PatchSpec {{ JSONTag ",inline" }} - - // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster - // Important: Run "make" to regenerate code after modifying this file -} - -// {{ .Resource.Kind }}Status defines the observed state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Status struct { - addonv1alpha1.CommonStatus {{ JSONTag ",inline" }} - - // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster - // Important: Run "make" to regenerate code after modifying this file -} - -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status -{{- if not .Resource.API.Namespaced }} -//+kubebuilder:resource:scope=Cluster -{{- end }} - -// {{ .Resource.Kind }} is the Schema for the {{ .Resource.Plural }} API -type {{ .Resource.Kind }} struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ObjectMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - - Spec {{ .Resource.Kind }}Spec ` + "`" + `json:"spec,omitempty"` + "`" + ` - Status {{ .Resource.Kind }}Status ` + "`" + `json:"status,omitempty"` + "`" + ` -} - -var _ addonv1alpha1.CommonObject = &{{ .Resource.Kind }}{} - -func (o *{{ .Resource.Kind }}) ComponentName() string { - return "{{ lower .Resource.Kind }}" -} - -func (o *{{ .Resource.Kind }}) CommonSpec() addonv1alpha1.CommonSpec { - return o.Spec.CommonSpec -} - -func (o *{{ .Resource.Kind }}) PatchSpec() addonv1alpha1.PatchSpec { - return o.Spec.PatchSpec -} - -func (o *{{ .Resource.Kind }}) GetCommonStatus() addonv1alpha1.CommonStatus { - return o.Status.CommonStatus -} - -func (o *{{ .Resource.Kind }}) SetCommonStatus(s addonv1alpha1.CommonStatus) { - o.Status.CommonStatus = s -} - -//+kubebuilder:object:root=true - -// {{ .Resource.Kind }}List contains a list of {{ .Resource.Kind }} -type {{ .Resource.Kind }}List struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ListMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - Items []{{ .Resource.Kind }} ` + "`" + `json:"items"` + "`" + ` -} - -func init() { - SchemeBuilder.Register(&{{ .Resource.Kind }}{}, &{{ .Resource.Kind }}List{}) -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/api.go deleted file mode 100644 index 88ccd3d18..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/api.go +++ /dev/null @@ -1,176 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "bufio" - "errors" - "fmt" - "os" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds" -) - -var _ plugin.CreateAPISubcommand = &createAPISubcommand{} - -type createAPISubcommand struct { - config config.Config - - options *goPlugin.Options - - resource *resource.Resource - - // Check if we have to scaffold resource and/or controller - resourceFlag *pflag.Flag - controllerFlag *pflag.Flag - - // force indicates that the resource should be created even if it already exists - force bool - - // runMake indicates whether to run make or not after scaffolding APIs - runMake bool -} - -func (p *createAPISubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = `Scaffold a Kubernetes API by writing a Resource definition and/or a Controller. - -If information about whether the resource and controller should be scaffolded -was not explicitly provided, it will prompt the user if they should be. - -After the scaffold is written, the dependencies will be updated and -make generate will be run. -` - subcmdMeta.Examples = fmt.Sprintf(` # Create a frigates API with Group: ship, Version: v1beta1 and Kind: Frigate - %[1]s create api --group ship --version v1beta1 --kind Frigate - - # Edit the API Scheme - nano api/v1beta1/frigate_types.go - - # Edit the Controller - nano controllers/frigate/frigate_controller.go - - # Edit the Controller Test - nano controllers/frigate/frigate_controller_test.go - - # Generate the manifests - make manifests - - # Install CRDs into the Kubernetes cluster using kubectl apply - make install - - # Regenerate code and run against the Kubernetes cluster configured by ~/.kube/config - make run -`, cliMeta.CommandName) -} - -func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.runMake, "make", true, "if true, run `make generate` after generating files") - - fs.BoolVar(&p.force, "force", false, - "attempt to create resource even if it already exists") - - p.options = &goPlugin.Options{CRDVersion: "v1beta1"} - // p.options.Plural can be set to specify an irregular plural form - - fs.BoolVar(&p.options.DoAPI, "resource", true, - "if set, generate the resource without prompting the user") - p.resourceFlag = fs.Lookup("resource") - fs.BoolVar(&p.options.Namespaced, "namespaced", true, "resource is namespaced") - - fs.BoolVar(&p.options.DoController, "controller", true, - "if set, generate the controller without prompting the user") - p.controllerFlag = fs.Lookup("controller") -} - -func (p *createAPISubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - - if p.resource.Group == "" { - return fmt.Errorf("group cannot be empty") - } - - // Ask for API and Controller if not specified - reader := bufio.NewReader(os.Stdin) - if !p.resourceFlag.Changed { - fmt.Println("Create Resource [y/n]") - p.options.DoAPI = util.YesNo(reader) - } - if !p.controllerFlag.Changed { - fmt.Println("Create Controller [y/n]") - p.options.DoController = util.YesNo(reader) - } - - p.options.UpdateResource(p.resource, p.config) - - if err := p.resource.Validate(); err != nil { - return err - } - - // In case we want to scaffold a resource API we need to do some checks - if p.options.DoAPI { - // Check that resource doesn't have the API scaffolded or flag force was set - if res, err := p.config.GetResource(p.resource.GVK); err == nil && res.HasAPI() && !p.force { - return errors.New("API resource already exists") - } - - // Check that the provided group can be added to the project - if !p.config.IsMultiGroup() && p.config.ResourcesLength() != 0 && !p.config.HasGroup(p.resource.Group) { - return fmt.Errorf("multiple groups are not allowed by default, to enable multi-group visit %s", - "https://kubebuilder.io/migration/multi-group.html") - } - } - - return nil -} - -func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewAPIScaffolder(p.config, *p.resource, p.force) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} - -func (p *createAPISubcommand) PostScaffold() error { - err := util.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - - if p.runMake && p.resource.HasAPI() { - err = util.RunCmd("Running make", "make", "generate") - if err != nil { - return err - } - fmt.Print("Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:\n$ make manifests \n") - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/edit.go deleted file mode 100644 index d8e04f394..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/edit.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "fmt" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds" -) - -var _ plugin.EditSubcommand = &editSubcommand{} - -type editSubcommand struct { - config config.Config - - multigroup bool -} - -func (p *editSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = `This command will edit the project configuration. -Features supported: - - Toggle between single or multi group projects. -` - subcmdMeta.Examples = fmt.Sprintf(` # Enable the multigroup layout - %[1]s edit --multigroup - - # Disable the multigroup layout - %[1]s edit --multigroup=false -`, cliMeta.CommandName) -} - -func (p *editSubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.multigroup, "multigroup", false, "enable or disable multigroup layout") -} - -func (p *editSubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *editSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewEditScaffolder(p.config, p.multigroup) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/init.go deleted file mode 100644 index 7d5f00771..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/init.go +++ /dev/null @@ -1,187 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds" -) - -// Variables and function to check Go version requirements. -var ( - goVerMin = golang.MustParse("go1.13") - goVerMax = golang.MustParse("go2.0alpha1") -) - -var _ plugin.InitSubcommand = &initSubcommand{} - -type initSubcommand struct { - config config.Config - - // For help text. - commandName string - - // boilerplate options - license string - owner string - - // config options - domain string - repo string - name string - - // flags - fetchDeps bool - skipGoVersionCheck bool -} - -func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - p.commandName = cliMeta.CommandName - - subcmdMeta.Description = `Initialize a new project including the following files: - - a "go.mod" with project dependencies - - a "PROJECT" file that stores project configuration - - a "Makefile" with several useful make targets for the project - - several YAML files for project deployment under the "config" directory - - a "main.go" file that creates the manager that will run the project controllers -` - subcmdMeta.Examples = fmt.Sprintf(` # Initialize a new project with your domain and name in copyright - %[1]s init --plugins go/v2 --domain example.org --owner "Your name" - - # Initialize a new project defining a specific project version - %[1]s init --plugins go/v2 --project-version 2 -`, cliMeta.CommandName) -} - -func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.skipGoVersionCheck, "skip-go-version-check", - false, "if specified, skip checking the Go version") - - // dependency args - fs.BoolVar(&p.fetchDeps, "fetch-deps", true, "ensure dependencies are downloaded") - - // boilerplate args - fs.StringVar(&p.license, "license", "apache2", - "license to use to boilerplate, may be one of 'apache2', 'none'") - fs.StringVar(&p.owner, "owner", "", "owner to add to the copyright") - - // project args - fs.StringVar(&p.domain, "domain", "my.domain", "domain for groups") - fs.StringVar(&p.repo, "repo", "", "name to use for go module (e.g., github.com/user/repo), "+ - "defaults to the go package of the current working directory.") - fs.StringVar(&p.name, "project-name", "", "name of this project") -} - -func (p *initSubcommand) InjectConfig(c config.Config) error { - p.config = c - - if err := p.config.SetDomain(p.domain); err != nil { - return err - } - - // Try to guess repository if flag is not set. - if p.repo == "" { - repoPath, err := golang.FindCurrentRepo() - if err != nil { - return fmt.Errorf("error finding current repository: %v", err) - } - p.repo = repoPath - } - if err := p.config.SetRepository(p.repo); err != nil { - return err - } - - if p.config.GetVersion().Compare(cfgv2.Version) > 0 { - // Assign a default project name - if p.name == "" { - dir, err := os.Getwd() - if err != nil { - return fmt.Errorf("error getting current directory: %v", err) - } - p.name = strings.ToLower(filepath.Base(dir)) - } - // Check if the project name is a valid k8s namespace (DNS 1123 label). - if err := validation.IsDNS1123Label(p.name); err != nil { - return fmt.Errorf("project name (%s) is invalid: %v", p.name, err) - } - if err := p.config.SetProjectName(p.name); err != nil { - return err - } - } - - return nil -} - -func (p *initSubcommand) PreScaffold(machinery.Filesystem) error { - // Ensure Go version is in the allowed range if check not turned off. - if !p.skipGoVersionCheck { - if err := golang.ValidateGoVersion(goVerMin, goVerMax); err != nil { - return err - } - } - - return nil -} - -func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewInitScaffolder(p.config, p.license, p.owner) - scaffolder.InjectFS(fs) - err := scaffolder.Scaffold() - if err != nil { - return err - } - - if !p.fetchDeps { - log.Println("Skipping fetching dependencies.") - return nil - } - - // Ensure that we are pinning controller-runtime version - // xref: https://github.com/kubernetes-sigs/kubebuilder/issues/997 - err = util.RunCmd("Get controller runtime", "go", "get", - "sigs.k8s.io/controller-runtime@"+scaffolds.ControllerRuntimeVersion) - if err != nil { - return err - } - - return nil -} - -func (p *initSubcommand) PostScaffold() error { - err := util.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - - fmt.Printf("Next: define a resource with:\n$ %s create api\n", p.commandName) - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/plugin.go deleted file mode 100644 index 894a660dd..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/plugin.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" -) - -const pluginName = "go." + plugins.DefaultNameQualifier - -var ( - pluginVersion = plugin.Version{Number: 2} - supportedProjectVersions = []config.Version{cfgv2.Version, cfgv3.Version} -) - -var _ plugin.Full = Plugin{} - -// Plugin implements the plugin.Full interface -type Plugin struct { - initSubcommand - createAPISubcommand - createWebhookSubcommand - editSubcommand -} - -// Name returns the name of the plugin -func (Plugin) Name() string { return pluginName } - -// Version returns the version of the plugin -func (Plugin) Version() plugin.Version { return pluginVersion } - -// SupportedProjectVersions returns an array with all project versions supported by the plugin -func (Plugin) SupportedProjectVersions() []config.Version { return supportedProjectVersions } - -// GetInitSubcommand will return the subcommand which is responsible for initializing and common scaffolding -func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p.initSubcommand } - -// GetCreateAPISubcommand will return the subcommand which is responsible for scaffolding apis -func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { return &p.createAPISubcommand } - -// GetCreateWebhookSubcommand will return the subcommand which is responsible for scaffolding webhooks -func (p Plugin) GetCreateWebhookSubcommand() plugin.CreateWebhookSubcommand { - return &p.createWebhookSubcommand -} - -// GetEditSubcommand will return the subcommand which is responsible for editing the scaffold of the project -func (p Plugin) GetEditSubcommand() plugin.EditSubcommand { return &p.editSubcommand } - -func (p Plugin) DeprecationWarning() string { - return "This version is deprecated and is no longer scaffolded by default since `28 Apr 2021`." + - "The `go/v2` plugin cannot scaffold projects in which CRDs and/or Webhooks have a `v1` API version." + - "Be aware that v1beta1 API for CRDs and Webhooks was deprecated on Kubernetes 1.16 and are" + - "removed as of the Kubernetes 1.22 release. Therefore, since this plugin cannot produce projects that" + - "work on Kubernetes versions >= 1.22, it is recommended to upgrade your project " + - "to the latest versions available." -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/api.go deleted file mode 100644 index 0b190c627..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/api.go +++ /dev/null @@ -1,139 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack" -) - -var _ plugins.Scaffolder = &apiScaffolder{} - -// apiScaffolder contains configuration for generating scaffolding for Go type -// representing the API and controller that implements the behavior for the API. -type apiScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem - - // force indicates whether to scaffold controller files even if it exists or not - force bool -} - -// NewAPIScaffolder returns a new Scaffolder for API/controller creation operations -func NewAPIScaffolder(config config.Config, res resource.Resource, force bool) plugins.Scaffolder { - return &apiScaffolder{ - config: config, - resource: res, - force: force, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *apiScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Load the boilerplate - boilerplate, err := afero.ReadFile(s.fs.FS, hack.DefaultBoilerplatePath) - if err != nil { - return fmt.Errorf("error scaffolding API/controller: unable to load boilerplate: %w", err) - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - machinery.WithResource(&s.resource), - ) - - // Keep track of these values before the update - doAPI := s.resource.HasAPI() - doController := s.resource.HasController() - - // Project version v2 only tracked GVK triplets of each resource. - // As they were only tracked when the API was scaffolded, the presence of a - // resource in the config file was used in webhook creation to verify that - // the API had been scaffolded previously. From project version v3 onwards - // this information is stored in the API field of the resource, so we can - // update the resources except for project version 2 when no API was scaffolded. - if doAPI || s.config.GetVersion().Compare(cfgv2.Version) == 1 { - if err := s.config.UpdateResource(s.resource); err != nil { - return fmt.Errorf("error updating resource: %w", err) - } - } - - if doAPI { - if err := scaffold.Execute( - &api.Types{Force: s.force}, - &api.Group{}, - &samples.CRDSample{Force: s.force}, - &rbac.CRDEditorRole{}, - &rbac.CRDViewerRole{}, - &patches.EnableWebhookPatch{}, - &patches.EnableCAInjectionPatch{}, - ); err != nil { - return fmt.Errorf("error scaffolding APIs: %w", err) - } - - if err := scaffold.Execute( - &crd.Kustomization{}, - &crd.KustomizeConfig{}, - ); err != nil { - return fmt.Errorf("error scaffolding kustomization: %v", err) - } - } - - if doController { - if err := scaffold.Execute( - &controllers.SuiteTest{Force: s.force}, - &controllers.Controller{ControllerRuntimeVersion: ControllerRuntimeVersion, Force: s.force}, - ); err != nil { - return fmt.Errorf("error scaffolding controller: %v", err) - } - } - - if err := scaffold.Execute( - &templates.MainUpdater{WireResource: doAPI, WireController: doController}, - ); err != nil { - return fmt.Errorf("error updating main.go: %v", err) - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/edit.go deleted file mode 100644 index 0e4f39751..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/edit.go +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - "fmt" - "strings" - - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" -) - -var _ plugins.Scaffolder = &editScaffolder{} - -type editScaffolder struct { - config config.Config - multigroup bool - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewEditScaffolder returns a new Scaffolder for configuration edit operations -func NewEditScaffolder(config config.Config, multigroup bool) plugins.Scaffolder { - return &editScaffolder{ - config: config, - multigroup: multigroup, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *editScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *editScaffolder) Scaffold() error { - filename := "Dockerfile" - bs, err := afero.ReadFile(s.fs.FS, filename) - if err != nil { - return err - } - str := string(bs) - - // update dockerfile - if s.multigroup { - str, err = ensureExistAndReplace( - str, - "COPY api/ api/", - `COPY apis/ apis/`) - } else { - str, err = ensureExistAndReplace( - str, - "COPY apis/ apis/", - `COPY api/ api/`) - } - - // Ignore the error encountered, if the file is already in desired format. - if err != nil && s.multigroup != s.config.IsMultiGroup() { - return err - } - - if s.multigroup { - _ = s.config.SetMultiGroup() - } else { - _ = s.config.ClearMultiGroup() - } - - // Check if the str is not empty, because when the file is already in desired format it will return empty string - // because there is nothing to replace. - if str != "" { - // TODO: instead of writing it directly, we should use the scaffolding machinery for consistency - return afero.WriteFile(s.fs.FS, filename, []byte(str), 0644) - } - - return nil -} - -func ensureExistAndReplace(input, match, replace string) (string, error) { - if !strings.Contains(input, match) { - return "", fmt.Errorf("can't find %q", match) - } - return strings.Replace(input, match, replace, -1), nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/init.go deleted file mode 100644 index eb883d9c7..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/init.go +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 scaffolds - -import ( - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack" -) - -const ( - // ControllerRuntimeVersion is the kubernetes-sigs/controller-runtime version to be used in the project - ControllerRuntimeVersion = "v0.6.4" - // ControllerToolsVersion is the kubernetes-sigs/controller-tools version to be used in the project - ControllerToolsVersion = "v0.3.0" - // KustomizeVersion is the kubernetes-sigs/kustomize version to be used in the project - // @Deprecate: KustomizeVersion came from the Kustomize plugin since go/v3 - // Go/v2 plugin exist only to ensure the backwards compatibility with the old scaffold - // produced with kubebuilder >= 2.0.0 < 3.0.0. It does not take advantage of the plugin system - // (see that the PROJECT file does not have the layout of the plugin and uses the old/legacy - // version/schema.) This plugin will be deprecated with go/v4 and can be removed - // when go/v4 stable is published. - KustomizeVersion = "v3.5.4" - - imageName = "controller:latest" -) - -var _ plugins.Scaffolder = &initScaffolder{} - -type initScaffolder struct { - config config.Config - boilerplatePath string - license string - owner string - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewInitScaffolder returns a new Scaffolder for project initialization operations -func NewInitScaffolder(config config.Config, license, owner string) plugins.Scaffolder { - return &initScaffolder{ - config: config, - boilerplatePath: hack.DefaultBoilerplatePath, - license: license, - owner: owner, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *initScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *initScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Initialize the machinery.Scaffold that will write the boilerplate file to disk - // The boilerplate file needs to be scaffolded as a separate step as it is going to - // be used by the rest of the files, even those scaffolded in this command call. - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - ) - - bpFile := &hack.Boilerplate{ - License: s.license, - Owner: s.owner, - } - bpFile.Path = s.boilerplatePath - if err := scaffold.Execute(bpFile); err != nil { - return err - } - - boilerplate, err := afero.ReadFile(s.fs.FS, s.boilerplatePath) - if err != nil { - return err - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold = machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - ) - - return scaffold.Execute( - &rbac.Kustomization{}, - &rbac.AuthProxyRole{}, - &rbac.AuthProxyRoleBinding{}, - &rbac.AuthProxyService{}, - &rbac.AuthProxyClientRole{}, - &rbac.RoleBinding{}, - &rbac.LeaderElectionRole{}, - &rbac.LeaderElectionRoleBinding{}, - &manager.Kustomization{}, - &manager.Config{Image: imageName}, - &templates.Main{}, - &templates.GoMod{ControllerRuntimeVersion: ControllerRuntimeVersion}, - &templates.GitIgnore{}, - &templates.Makefile{ - Image: imageName, - BoilerplatePath: s.boilerplatePath, - ControllerToolsVersion: ControllerToolsVersion, - KustomizeVersion: KustomizeVersion, - }, - &templates.Dockerfile{}, - &kdefault.Kustomization{}, - &kdefault.ManagerAuthProxyPatch{}, - &kdefault.ManagerWebhookPatch{}, - &kdefault.WebhookCAInjectionPatch{}, - &webhook.Kustomization{}, - &webhook.KustomizeConfig{}, - &webhook.Service{}, - &prometheus.Kustomization{}, - &prometheus.Monitor{}, - &certmanager.Certificate{}, - &certmanager.Kustomization{}, - &certmanager.KustomizeConfig{}, - ) -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/group.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/group.go deleted file mode 100644 index ba9f21f6a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/group.go +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 api - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Group{} - -// Group scaffolds the file that defines the registration methods for a certain group and version -type Group struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Group) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "groupversion_info.go") - } else { - f.Path = filepath.Join("api", "%[version]", "groupversion_info.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = groupTemplate - - return nil -} - -//nolint:lll -const groupTemplate = `{{ .Boilerplate }} - -// Package {{ .Resource.Version }} contains API Schema definitions for the {{ .Resource.Group }} {{ .Resource.Version }} API group -//+kubebuilder:object:generate=true -//+groupName={{ .Resource.QualifiedGroup }} -package {{ .Resource.Version }} - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -var ( - // GroupVersion is group version used to register these objects - GroupVersion = schema.GroupVersion{Group: "{{ .Resource.QualifiedGroup }}", Version: "{{ .Resource.Version }}"} - - // SchemeBuilder is used to add go types to the GroupVersionKind scheme - SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} - - // AddToScheme adds the types in this group-version to the given scheme. - AddToScheme = SchemeBuilder.AddToScheme -) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/types.go deleted file mode 100644 index 688751e1f..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/types.go +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 api - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Types{} - -// Types scaffolds the file that defines the schema for a CRD -// nolint:maligned -type Types struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Types) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = typesTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - return nil -} - -const typesTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// {{ .Resource.Kind }}Spec defines the desired state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Spec struct { - // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster - // Important: Run "make" to regenerate code after modifying this file - - // Foo is an example field of {{ .Resource.Kind }}. Edit {{ lower .Resource.Kind }}_types.go to remove/update - Foo string ` + "`" + `json:"foo,omitempty"` + "`" + ` -} - -// {{ .Resource.Kind }}Status defines the observed state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Status struct { - // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster - // Important: Run "make" to regenerate code after modifying this file -} - -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status -{{- if not .Resource.API.Namespaced }} -//+kubebuilder:resource:scope=Cluster -{{- end }} - -// {{ .Resource.Kind }} is the Schema for the {{ .Resource.Plural }} API -type {{ .Resource.Kind }} struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ObjectMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - - Spec {{ .Resource.Kind }}Spec ` + "`" + `json:"spec,omitempty"` + "`" + ` - Status {{ .Resource.Kind }}Status ` + "`" + `json:"status,omitempty"` + "`" + ` -} - -//+kubebuilder:object:root=true - -// {{ .Resource.Kind }}List contains a list of {{ .Resource.Kind }} -type {{ .Resource.Kind }}List struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ListMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - Items []{{ .Resource.Kind }} ` + "`" + `json:"items"` + "`" + ` -} - -func init() { - SchemeBuilder.Register(&{{ .Resource.Kind }}{}, &{{ .Resource.Kind }}List{}) -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/webhook.go deleted file mode 100644 index 1d6536172..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api/webhook.go +++ /dev/null @@ -1,141 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 api - -import ( - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Webhook{} - -// Webhook scaffolds the file that defines a webhook for a CRD or a builtin resource -type Webhook struct { // nolint:maligned - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - // Is the Group domain for the Resource replacing '.' with '-' - QualifiedGroupWithDash string -} - -// SetTemplateDefaults implements file.Template -func (f *Webhook) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_webhook.go") - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_webhook.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - webhookTemplate := webhookTemplate - if f.Resource.HasDefaultingWebhook() { - webhookTemplate = webhookTemplate + defaultingWebhookTemplate - } - if f.Resource.HasValidationWebhook() { - webhookTemplate = webhookTemplate + validatingWebhookTemplate - } - f.TemplateBody = webhookTemplate - - f.IfExistsAction = machinery.Error - - f.QualifiedGroupWithDash = strings.Replace(f.Resource.QualifiedGroup(), ".", "-", -1) - - return nil -} - -const ( - webhookTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - ctrl "sigs.k8s.io/controller-runtime" - logf "sigs.k8s.io/controller-runtime/pkg/log" - {{- if .Resource.HasValidationWebhook }} - "k8s.io/apimachinery/pkg/runtime" - {{- end }} - {{- if or .Resource.HasValidationWebhook .Resource.HasDefaultingWebhook }} - "sigs.k8s.io/controller-runtime/pkg/webhook" - {{- end }} -) - -// log is for logging in this package. -var {{ lower .Resource.Kind }}log = logf.Log.WithName("{{ lower .Resource.Kind }}-resource") - -func (r *{{ .Resource.Kind }}) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(r). - Complete() -} - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! -` - - //nolint:lll - defaultingWebhookTemplate = ` -//+kubebuilder:webhook:path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io - -var _ webhook.Defaulter = &{{ .Resource.Kind }}{} - -// Default implements webhook.Defaulter so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) Default() { - {{ lower .Resource.Kind }}log.Info("default", "name", r.Name) - - // TODO(user): fill in your defaulting logic. -} -` - //nolint:lll - validatingWebhookTemplate = ` -// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation. -//+kubebuilder:webhook:verbs=create;update,path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io - -var _ webhook.Validator = &{{ .Resource.Kind }}{} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateCreate() error { - {{ lower .Resource.Kind }}log.Info("validate create", "name", r.Name) - - // TODO(user): fill in your validation logic upon object creation. - return nil -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateUpdate(old runtime.Object) error { - {{ lower .Resource.Kind }}log.Info("validate update", "name", r.Name) - - // TODO(user): fill in your validation logic upon object update. - return nil -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateDelete() error { - {{ lower .Resource.Kind }}log.Info("validate delete", "name", r.Name) - - // TODO(user): fill in your validation logic upon object deletion. - return nil -} -` -) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/certificate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/certificate.go deleted file mode 100644 index 0fd4bffa4..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/certificate.go +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Certificate{} - -// Certificate scaffolds a file that defines the issuer CR and the certificate CR -type Certificate struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Certificate) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "certificate.yaml") - } - - f.TemplateBody = certManagerTemplate - - return nil -} - -const certManagerTemplate = `# The following manifests contain a self-signed issuer CR and a certificate CR. -# More document can be found at https://docs.cert-manager.io -# WARNING: Targets CertManager 0.11 check https://docs.cert-manager.io/en/latest/tasks/upgrading/index.html for -# breaking changes -apiVersion: cert-manager.io/v1alpha2 -kind: Issuer -metadata: - name: selfsigned-issuer - namespace: system -spec: - selfSigned: {} ---- -apiVersion: cert-manager.io/v1alpha2 -kind: Certificate -metadata: - name: serving-cert # this name should match the one appeared in kustomizeconfig.yaml - namespace: system -spec: - # $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize - dnsNames: - - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc - - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local - issuerRef: - kind: Issuer - name: selfsigned-issuer - secretName: webhook-server-cert # this secret will not be prefixed, since it's not managed by kustomize -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomization.go deleted file mode 100644 index 78b2c5e94..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomization.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the certmanager folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "kustomization.yaml") - } - - f.TemplateBody = kustomizationTemplate - - return nil -} - -const kustomizationTemplate = `resources: -- certificate.yaml - -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go deleted file mode 100644 index a67b834e9..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 certmanager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the certmanager folder -type KustomizeConfig struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "certmanager", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigTemplate - - return nil -} - -//nolint:lll -const kustomizeConfigTemplate = `# This configuration is for teaching kustomize how to update name ref and var substitution -nameReference: -- kind: Issuer - group: cert-manager.io - fieldSpecs: - - kind: Certificate - group: cert-manager.io - path: spec/issuerRef/name - -varReference: -- kind: Certificate - group: cert-manager.io - path: spec/commonName -- kind: Certificate - group: cert-manager.io - path: spec/dnsNames -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomization.go deleted file mode 100644 index 7f23dbb5d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomization.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 crd - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var ( - _ machinery.Template = &Kustomization{} - _ machinery.Inserter = &Kustomization{} -) - -// Kustomization scaffolds a file that defines the kustomization scheme for the crd folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "crd", "kustomization.yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = fmt.Sprintf(kustomizationTemplate, - machinery.NewMarkerFor(f.Path, resourceMarker), - machinery.NewMarkerFor(f.Path, webhookPatchMarker), - machinery.NewMarkerFor(f.Path, caInjectionPatchMarker), - ) - - return nil -} - -//nolint:gosec to ignore false complain G101: Potential hardcoded credentials (gosec) -const ( - resourceMarker = "crdkustomizeresource" - webhookPatchMarker = "crdkustomizewebhookpatch" - caInjectionPatchMarker = "crdkustomizecainjectionpatch" -) - -// GetMarkers implements file.Inserter -func (f *Kustomization) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(f.Path, resourceMarker), - machinery.NewMarkerFor(f.Path, webhookPatchMarker), - machinery.NewMarkerFor(f.Path, caInjectionPatchMarker), - } -} - -const ( - resourceCodeFragment = `- bases/%s_%s.yaml -` - webhookPatchCodeFragment = `#- patches/webhook_in_%s.yaml -` - caInjectionPatchCodeFragment = `#- patches/cainjection_in_%s.yaml -` -) - -// GetCodeFragments implements file.Inserter -func (f *Kustomization) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 3) - - // Generate resource code fragments - res := make([]string, 0) - res = append(res, fmt.Sprintf(resourceCodeFragment, f.Resource.QualifiedGroup(), f.Resource.Plural)) - - // Generate resource code fragments - webhookPatch := make([]string, 0) - webhookPatch = append(webhookPatch, fmt.Sprintf(webhookPatchCodeFragment, f.Resource.Plural)) - - // Generate resource code fragments - caInjectionPatch := make([]string, 0) - caInjectionPatch = append(caInjectionPatch, fmt.Sprintf(caInjectionPatchCodeFragment, f.Resource.Plural)) - - // Only store code fragments in the map if the slices are non-empty - if len(res) != 0 { - fragments[machinery.NewMarkerFor(f.Path, resourceMarker)] = res - } - if len(webhookPatch) != 0 { - fragments[machinery.NewMarkerFor(f.Path, webhookPatchMarker)] = webhookPatch - } - if len(caInjectionPatch) != 0 { - fragments[machinery.NewMarkerFor(f.Path, caInjectionPatchMarker)] = caInjectionPatch - } - - return fragments -} - -var kustomizationTemplate = `# This kustomization.yaml is not intended to be run by itself, -# since it depends on service name and namespace that are out of this kustomize package. -# It should be run by config/default -resources: -%s - -patchesStrategicMerge: -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. -# patches here are for enabling the conversion webhook for each CRD -%s - -# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix. -# patches here are for enabling the CA injection for each CRD -%s - -# the following config is for teaching kustomize how to do kustomization for CRDs. -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go deleted file mode 100644 index 0013026f8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 crd - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the crd folder -type KustomizeConfig struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "crd", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigTemplate - - return nil -} - -//nolint:lll -const kustomizeConfigTemplate = `# This file is for teaching kustomize how to substitute name and namespace reference in CRD -nameReference: -- kind: Service - version: v1 - fieldSpecs: - - kind: CustomResourceDefinition - group: apiextensions.k8s.io - path: spec/conversion/webhookClientConfig/service/name - -namespace: -- kind: CustomResourceDefinition - group: apiextensions.k8s.io - path: spec/conversion/webhookClientConfig/service/namespace - create: false - -varReference: -- path: metadata/annotations -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go deleted file mode 100644 index 60debd5dc..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 patches - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &EnableCAInjectionPatch{} - -// EnableCAInjectionPatch scaffolds a file that defines the patch that injects CA into the CRD -type EnableCAInjectionPatch struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *EnableCAInjectionPatch) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("config", "crd", "patches", "cainjection_in_%[group]_%[plural].yaml") - } else { - f.Path = filepath.Join("config", "crd", "patches", "cainjection_in_%[plural].yaml") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = enableCAInjectionPatchTemplate - - return nil -} - -const enableCAInjectionPatchTemplate = `# The following patch adds a directive for certmanager to inject CA into the CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) - name: {{ .Resource.Plural }}.{{ .Resource.QualifiedGroup }} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go deleted file mode 100644 index 1472028b6..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 patches - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &EnableWebhookPatch{} - -// EnableWebhookPatch scaffolds a file that defines the patch that enables conversion webhook for the CRD -type EnableWebhookPatch struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *EnableWebhookPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "crd", "patches", "webhook_in_%[plural].yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = enableWebhookPatchTemplate - - return nil -} - -const enableWebhookPatchTemplate = `# The following patch enables conversion webhook for CRD -# CRD conversion requires k8s 1.13 or later. -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: {{ .Resource.Plural }}.{{ .Resource.QualifiedGroup }} -spec: - conversion: - strategy: Webhook - webhookClientConfig: - # this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank, - # but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager) - caBundle: Cg== - service: - namespace: system - name: webhook-service - path: /convert -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go deleted file mode 100644 index 3cee6b859..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &WebhookCAInjectionPatch{} - -// WebhookCAInjectionPatch scaffolds a file that defines the patch that adds annotation to webhooks -type WebhookCAInjectionPatch struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *WebhookCAInjectionPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "webhookcainjection_patch.yaml") - } - - f.TemplateBody = injectCAPatchTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const injectCAPatchTemplate = `# This patch add annotation to admission webhook config and -# the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize. -apiVersion: admissionregistration.k8s.io/v1beta1 -kind: MutatingWebhookConfiguration -metadata: - name: mutating-webhook-configuration - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) ---- -apiVersion: admissionregistration.k8s.io/v1beta1 -kind: ValidatingWebhookConfiguration -metadata: - name: validating-webhook-configuration - annotations: - cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/kustomization.go deleted file mode 100644 index 68ecc351c..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/kustomization.go +++ /dev/null @@ -1,127 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 kdefault - -import ( - "os" - "path/filepath" - "strings" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the default overlay folder -type Kustomization struct { - machinery.TemplateMixin - machinery.ProjectNameMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "kustomization.yaml") - } - - f.TemplateBody = kustomizeTemplate - - f.IfExistsAction = machinery.Error - - if f.ProjectName == "" { - // Use directory name as project name, which will be empty if the project version is < v3. - dir, err := os.Getwd() - if err != nil { - return err - } - f.ProjectName = strings.ToLower(filepath.Base(dir)) - } - - return nil -} - -const kustomizeTemplate = `# Adds namespace to all resources. -namespace: {{ .ProjectName }}-system - -# Value of this field is prepended to the -# names of all resources, e.g. a deployment named -# "wordpress" becomes "alices-wordpress". -# Note that it should also match with the prefix (text before '-') of the namespace -# field above. -namePrefix: {{ .ProjectName }}- - -# Labels to add to all resources and selectors. -#commonLabels: -# someName: someValue - -bases: -- ../crd -- ../rbac -- ../manager -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in -# crd/kustomization.yaml -#- ../webhook -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required. -#- ../certmanager -# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. -#- ../prometheus - -patchesStrategicMerge: - # Protect the /metrics endpoint by putting it behind auth. - # If you want your controller-manager to expose the /metrics - # endpoint w/o any authn/z, please comment the following line. -- manager_auth_proxy_patch.yaml - -# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in -# crd/kustomization.yaml -#- manager_webhook_patch.yaml - -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. -# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks. -# 'CERTMANAGER' needs to be enabled to use ca injection -#- webhookcainjection_patch.yaml - -# the following config is for teaching kustomize how to do var substitution -vars: -# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix. -#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR -# objref: -# kind: Certificate -# group: cert-manager.io -# version: v1alpha2 -# name: serving-cert # this name should match the one in certificate.yaml -# fieldref: -# fieldpath: metadata.namespace -#- name: CERTIFICATE_NAME -# objref: -# kind: Certificate -# group: cert-manager.io -# version: v1alpha2 -# name: serving-cert # this name should match the one in certificate.yaml -#- name: SERVICE_NAMESPACE # namespace of the service -# objref: -# kind: Service -# version: v1 -# name: webhook-service -# fieldref: -# fieldpath: metadata.namespace -#- name: SERVICE_NAME -# objref: -# kind: Service -# version: v1 -# name: webhook-service -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go deleted file mode 100644 index c764cde5b..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/manager_auth_proxy_patch.go +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerAuthProxyPatch{} - -// ManagerAuthProxyPatch scaffolds a file that defines the patch that enables prometheus metrics for the manager -type ManagerAuthProxyPatch struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *ManagerAuthProxyPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_auth_proxy_patch.yaml") - } - - f.TemplateBody = kustomizeAuthProxyPatchTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeAuthProxyPatchTemplate = `# This patch inject a sidecar container which is a HTTP proxy for the -# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: kube-rbac-proxy - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 - args: - - "--secure-listen-address=0.0.0.0:8443" - - "--upstream=http://127.0.0.1:8080/" - - "--logtostderr=true" - - "--v=10" - ports: - - containerPort: 8443 - name: https - - name: manager - args: - - "--metrics-addr=127.0.0.1:8080" - - "--enable-leader-election" -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go deleted file mode 100644 index a9e0844bf..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 kdefault - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &ManagerWebhookPatch{} - -// ManagerWebhookPatch scaffolds a file that defines the patch that enables webhooks on the manager -type ManagerWebhookPatch struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *ManagerWebhookPatch) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "default", "manager_webhook_patch.yaml") - } - - f.TemplateBody = managerWebhookPatchTemplate - - return nil -} - -const managerWebhookPatchTemplate = `apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system -spec: - template: - spec: - containers: - - name: manager - ports: - - containerPort: 9443 - name: webhook-server - protocol: TCP - volumeMounts: - - mountPath: /tmp/k8s-webhook-server/serving-certs - name: cert - readOnly: true - volumes: - - name: cert - secret: - defaultMode: 420 - secretName: webhook-server-cert -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/config.go deleted file mode 100644 index 1e08e1349..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/config.go +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 manager - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Config{} - -// Config scaffolds a file that defines the namespace and the manager deployment -type Config struct { - machinery.TemplateMixin - - // Image is controller manager image name - Image string -} - -// SetTemplateDefaults implements file.Template -func (f *Config) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "manager", "manager.yaml") - } - - f.TemplateBody = configTemplate - - return nil -} - -const configTemplate = `apiVersion: v1 -kind: Namespace -metadata: - labels: - control-plane: controller-manager - name: system ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: controller-manager - namespace: system - labels: - control-plane: controller-manager -spec: - selector: - matchLabels: - control-plane: controller-manager - replicas: 1 - template: - metadata: - labels: - control-plane: controller-manager - spec: - containers: - - command: - - /manager - args: - - --enable-leader-election - image: {{ .Image }} - name: manager - resources: - limits: - cpu: 100m - memory: 30Mi - requests: - cpu: 100m - memory: 20Mi - terminationGracePeriodSeconds: 10 -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/kustomization.go deleted file mode 100644 index c271a6a3d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/kustomization.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 prometheus - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the prometheus folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "prometheus", "kustomization.yaml") - } - - f.TemplateBody = kustomizationTemplate - - return nil -} - -const kustomizationTemplate = `resources: -- monitor.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/monitor.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/monitor.go deleted file mode 100644 index 261282075..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/prometheus/monitor.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 prometheus - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Monitor{} - -// Monitor scaffolds a file that defines the prometheus service monitor -type Monitor struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Monitor) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "prometheus", "monitor.yaml") - } - - f.TemplateBody = serviceMonitorTemplate - - return nil -} - -const serviceMonitorTemplate = ` -# Prometheus Monitor Service (Metrics) -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - labels: - control-plane: controller-manager - name: controller-manager-metrics-monitor - namespace: system -spec: - endpoints: - - path: /metrics - port: https - scheme: https - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token - tlsConfig: - insecureSkipVerify: true - selector: - matchLabels: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go deleted file mode 100644 index 1eee0af20..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_client_role.go +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyClientRole{} - -// AuthProxyClientRole scaffolds a file that defines the role for the metrics reader -type AuthProxyClientRole struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyClientRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_client_clusterrole.yaml") - } - - f.TemplateBody = clientClusterRoleTemplate - - return nil -} - -const clientClusterRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: metrics-reader -rules: -- nonResourceURLs: ["/metrics"] - verbs: ["get"] -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go deleted file mode 100644 index df22ef8dc..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role.go +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRole{} - -// AuthProxyRole scaffolds a file that defines the role for the auth proxy -type AuthProxyRole struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role.yaml") - } - - f.TemplateBody = proxyRoleTemplate - - return nil -} - -const proxyRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: proxy-role -rules: -- apiGroups: ["authentication.k8s.io"] - resources: - - tokenreviews - verbs: ["create"] -- apiGroups: ["authorization.k8s.io"] - resources: - - subjectaccessreviews - verbs: ["create"] -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go deleted file mode 100644 index eafc45f6e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_role_binding.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyRoleBinding{} - -// AuthProxyRoleBinding scaffolds a file that defines the role binding for the auth proxy -type AuthProxyRoleBinding struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyRoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_role_binding.yaml") - } - - f.TemplateBody = proxyRoleBindinggTemplate - - return nil -} - -const proxyRoleBindinggTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: proxy-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: proxy-role -subjects: -- kind: ServiceAccount - name: default - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go deleted file mode 100644 index 6287d360e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &AuthProxyService{} - -// AuthProxyService scaffolds a file that defines the service for the auth proxy -type AuthProxyService struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *AuthProxyService) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_service.yaml") - } - - f.TemplateBody = authProxyServiceTemplate - - return nil -} - -const authProxyServiceTemplate = `apiVersion: v1 -kind: Service -metadata: - labels: - control-plane: controller-manager - name: controller-manager-metrics-service - namespace: system -spec: - ports: - - name: https - port: 8443 - targetPort: https - selector: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go deleted file mode 100644 index 702454962..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDEditorRole{} - -// CRDEditorRole scaffolds a file that defines the role that allows to edit plurals -type CRDEditorRole struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *CRDEditorRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "%[kind]_editor_role.yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = crdRoleEditorTemplate - - return nil -} - -const crdRoleEditorTemplate = `# permissions for end users to edit {{ .Resource.Plural }}. -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ lower .Resource.Kind }}-editor-role -rules: -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }} - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }}/status - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go deleted file mode 100644 index 741774766..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDViewerRole{} - -// CRDViewerRole scaffolds a file that defines the role that allows to view plurals -type CRDViewerRole struct { - machinery.TemplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *CRDViewerRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "%[kind]_viewer_role.yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = crdRoleViewerTemplate - - return nil -} - -const crdRoleViewerTemplate = `# permissions for end users to view {{ .Resource.Plural }}. -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ lower .Resource.Kind }}-viewer-role -rules: -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }} - verbs: - - get - - list - - watch -- apiGroups: - - {{ .Resource.QualifiedGroup }} - resources: - - {{ .Resource.Plural }}/status - verbs: - - get -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/kustomization.go deleted file mode 100644 index f5b164e5b..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/kustomization.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the rbac folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "kustomization.yaml") - } - - f.TemplateBody = kustomizeRBACTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeRBACTemplate = `resources: -- role.yaml -- role_binding.yaml -- leader_election_role.yaml -- leader_election_role_binding.yaml -# Comment the following 4 lines if you want to disable -# the auth proxy (https://github.com/brancz/kube-rbac-proxy) -# which protects your /metrics endpoint. -- auth_proxy_service.yaml -- auth_proxy_role.yaml -- auth_proxy_role_binding.yaml -- auth_proxy_client_clusterrole.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go deleted file mode 100644 index 6de4d48b7..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &LeaderElectionRole{} - -// LeaderElectionRole scaffolds a file that defines the role that allows leader election -type LeaderElectionRole struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *LeaderElectionRole) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "leader_election_role.yaml") - } - - f.TemplateBody = leaderElectionRoleTemplate - - return nil -} - -const leaderElectionRoleTemplate = `# permissions to do leader election. -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: leader-election-role -rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - configmaps/status - verbs: - - get - - update - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go deleted file mode 100644 index 9dd75b7ff..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &LeaderElectionRoleBinding{} - -// LeaderElectionRoleBinding scaffolds a file that defines the role binding that allows leader election -type LeaderElectionRoleBinding struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *LeaderElectionRoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "leader_election_role_binding.yaml") - } - - f.TemplateBody = leaderElectionRoleBindingTemplate - - return nil -} - -const leaderElectionRoleBindingTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: leader-election-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: leader-election-role -subjects: -- kind: ServiceAccount - name: default - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/role_binding.go deleted file mode 100644 index 0cc6687e8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/rbac/role_binding.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 rbac - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &RoleBinding{} - -// RoleBinding scaffolds a file that defines the role binding for the manager -type RoleBinding struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *RoleBinding) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "role_binding.yaml") - } - - f.TemplateBody = managerBindingTemplate - - return nil -} - -const managerBindingTemplate = `apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: manager-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: manager-role -subjects: -- kind: ServiceAccount - name: default - namespace: system -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples/crd_sample.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples/crd_sample.go deleted file mode 100644 index 4a8eee252..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/samples/crd_sample.go +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 samples - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &CRDSample{} - -// CRDSample scaffolds a file that defines a sample manifest for the CRD -type CRDSample struct { - machinery.TemplateMixin - machinery.ResourceMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *CRDSample) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "samples", "%[group]_%[version]_%[kind].yaml") - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - f.TemplateBody = crdSampleTemplate - - return nil -} - -const crdSampleTemplate = `apiVersion: {{ .Resource.QualifiedGroup }}/{{ .Resource.Version }} -kind: {{ .Resource.Kind }} -metadata: - name: {{ lower .Resource.Kind }}-sample -spec: - # TODO(user): Add fields here -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomization.go deleted file mode 100644 index 7157dd838..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomization.go +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Kustomization{} - -// Kustomization scaffolds a file that defines the kustomization scheme for the webhook folder -type Kustomization struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "kustomization.yaml") - } - - f.TemplateBody = kustomizeWebhookTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const kustomizeWebhookTemplate = `resources: -- manifests.yaml -- service.yaml - -configurations: -- kustomizeconfig.yaml -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go deleted file mode 100644 index ac2c92cc8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &KustomizeConfig{} - -// KustomizeConfig scaffolds a file that configures the kustomization for the webhook folder -type KustomizeConfig struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *KustomizeConfig) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "kustomizeconfig.yaml") - } - - f.TemplateBody = kustomizeConfigWebhookTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -//nolint:lll -const kustomizeConfigWebhookTemplate = `# the following config is for teaching kustomize where to look at when substituting vars. -# It requires kustomize v2.1.0 or newer to work properly. -nameReference: -- kind: Service - version: v1 - fieldSpecs: - - kind: MutatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/name - - kind: ValidatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/name - -namespace: -- kind: MutatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/namespace - create: true -- kind: ValidatingWebhookConfiguration - group: admissionregistration.k8s.io - path: webhooks/clientConfig/service/namespace - create: true - -varReference: -- path: metadata/annotations -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/service.go deleted file mode 100644 index 7783aa136..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/webhook/service.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 webhook - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Service{} - -// Service scaffolds a file that defines the webhook service -type Service struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Service) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join("config", "webhook", "service.yaml") - } - - f.TemplateBody = serviceTemplate - - f.IfExistsAction = machinery.Error - - return nil -} - -const serviceTemplate = ` -apiVersion: v1 -kind: Service -metadata: - name: webhook-service - namespace: system -spec: - ports: - - port: 443 - targetPort: 9443 - selector: - control-plane: controller-manager -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller.go deleted file mode 100644 index 7c800b50e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller.go +++ /dev/null @@ -1,120 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 controllers - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Controller{} - -// Controller scaffolds the file that defines the controller for a CRD or a builtin resource -// nolint:maligned -type Controller struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - ControllerRuntimeVersion string - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Controller) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("controllers", "%[group]", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("controllers", "%[kind]_controller.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = controllerTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - return nil -} - -//nolint:lll -const controllerTemplate = `{{ .Boilerplate }} - -package controllers - -import ( - "context" - "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/runtime" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - {{ if not (isEmptyStr .Resource.Path) -}} - {{ .Resource.ImportAlias }} "{{ .Resource.Path }}" - {{- end }} -) - -// {{ .Resource.Kind }}Reconciler reconciles a {{ .Resource.Kind }} object -type {{ .Resource.Kind }}Reconciler struct { - client.Client - Log logr.Logger - Scheme *runtime.Scheme -} - -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch - -// Reconcile is part of the main kubernetes reconciliation loop which aims to -// move the current state of the cluster closer to the desired state. -// TODO(user): Modify the Reconcile function to compare the state specified by -// the {{ .Resource.Kind }} object against the actual cluster state, and then -// perform operations to make the cluster state reflect the state specified by -// the user. -// -// For more details, check Reconcile and its Result here: -// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@{{ .ControllerRuntimeVersion }}/pkg/reconcile -func (r *{{ .Resource.Kind }}Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { - _ = context.Background() - _ = r.Log.WithValues("{{ .Resource.Kind | lower }}", req.NamespacedName) - - // TODO(user): your logic here - - return ctrl.Result{}, nil -} - -// SetupWithManager sets up the controller with the Manager. -func (r *{{ .Resource.Kind }}Reconciler) SetupWithManager(mgr ctrl.Manager) error { - return ctrl.NewControllerManagedBy(mgr). - {{ if not (isEmptyStr .Resource.Path) -}} - For(&{{ .Resource.ImportAlias }}.{{ .Resource.Kind }}{}). - {{- else -}} - // Uncomment the following line adding a pointer to an instance of the controlled resource as an argument - // For(). - {{- end }} - Complete(r) -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller_suitetest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller_suitetest.go deleted file mode 100644 index d8a0b9750..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/controllers/controller_suitetest.go +++ /dev/null @@ -1,184 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 controllers - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &SuiteTest{} -var _ machinery.Inserter = &SuiteTest{} - -// SuiteTest scaffolds the file that sets up the controller tests -// nolint:maligned -type SuiteTest struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - // CRDDirectoryRelativePath define the Path for the CRD - CRDDirectoryRelativePath string - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *SuiteTest) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - f.Path = filepath.Join("controllers", "%[group]", "suite_test.go") - } else { - f.Path = filepath.Join("controllers", "suite_test.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = fmt.Sprintf(controllerSuiteTestTemplate, - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - ) - - // If is multigroup the path needs to be ../../ since it has - // the group dir. - f.CRDDirectoryRelativePath = `".."` - if f.MultiGroup { - f.CRDDirectoryRelativePath = `"..", ".."` - } - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } - - return nil -} - -const ( - importMarker = "imports" - addSchemeMarker = "scheme" -) - -// GetMarkers implements file.Inserter -func (f *SuiteTest) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - } -} - -const ( - apiImportCodeFragment = `%s "%s" -` - addschemeCodeFragment = `err = %s.AddToScheme(scheme.Scheme) -Expect(err).NotTo(HaveOccurred()) - -` -) - -// GetCodeFragments implements file.Inserter -func (f *SuiteTest) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 2) - - // Generate import code fragments - imports := make([]string, 0) - if f.Resource.Path != "" { - imports = append(imports, fmt.Sprintf(apiImportCodeFragment, f.Resource.ImportAlias(), f.Resource.Path)) - } - - // Generate add scheme code fragments - addScheme := make([]string, 0) - if f.Resource.Path != "" { - addScheme = append(addScheme, fmt.Sprintf(addschemeCodeFragment, f.Resource.ImportAlias())) - } - - // Only store code fragments in the map if the slices are non-empty - if len(imports) != 0 { - fragments[machinery.NewMarkerFor(f.Path, importMarker)] = imports - } - if len(addScheme) != 0 { - fragments[machinery.NewMarkerFor(f.Path, addSchemeMarker)] = addScheme - } - - return fragments -} - -const controllerSuiteTestTemplate = `{{ .Boilerplate }} - -package controllers - -import ( - "path/filepath" - "testing" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/envtest" - "sigs.k8s.io/controller-runtime/pkg/envtest/printer" - logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - %s -) - -// These tests use Ginkgo (BDD-style Go testing framework). Refer to -// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. - -var cfg *rest.Config -var k8sClient client.Client -var testEnv *envtest.Environment - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecsWithDefaultAndCustomReporters(t, - "Controller Suite", - []Reporter{printer.NewlineReporter{}}) -} - -var _ = BeforeSuite(func(done Done) { - logf.SetLogger(zap.LoggerTo(GinkgoWriter, true)) - - By("bootstrapping test environment") - testEnv = &envtest.Environment{ - CRDDirectoryPaths: []string{filepath.Join({{ .CRDDirectoryRelativePath }}, "config", "crd", "bases")}, - } - - var err error - // cfg is defined in this file globally. - cfg, err = testEnv.Start() - Expect(err).ToNot(HaveOccurred()) - Expect(cfg).ToNot(BeNil()) - - %s - - k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) - Expect(err).ToNot(HaveOccurred()) - Expect(k8sClient).ToNot(BeNil()) - - close(done) -}, 60) - -var _ = AfterSuite(func() { - By("tearing down the test environment") - err := testEnv.Stop() - Expect(err).ToNot(HaveOccurred()) -}) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/dockerfile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/dockerfile.go deleted file mode 100644 index 38e4c4716..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/dockerfile.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Dockerfile{} - -// Dockerfile scaffolds a file that defines the containerized build process -type Dockerfile struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Dockerfile) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "Dockerfile" - } - - f.TemplateBody = dockerfileTemplate - - return nil -} - -const dockerfileTemplate = `# Build the manager binary -FROM golang:1.13 as builder - -WORKDIR /workspace -# Copy the Go Modules manifests -COPY go.mod go.mod -COPY go.sum go.sum -# cache deps before building and copying source so that we don't need to re-download as much -# and so that source changes don't invalidate our downloaded layer -RUN go mod download - -# Copy the go source -COPY main.go main.go -COPY api/ api/ -COPY controllers/ controllers/ - -# Build -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go - -# Use distroless as minimal base image to package the manager binary -# Refer to https://github.com/GoogleContainerTools/distroless for more details -FROM gcr.io/distroless/static:nonroot -WORKDIR / -COPY --from=builder /workspace/manager . -USER nonroot:nonroot - -ENTRYPOINT ["/manager"] -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gitignore.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gitignore.go deleted file mode 100644 index b4a5c6911..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gitignore.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &GitIgnore{} - -// GitIgnore scaffolds a file that defines which files should be ignored by git -type GitIgnore struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *GitIgnore) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = ".gitignore" - } - - f.TemplateBody = gitignoreTemplate - - return nil -} - -const gitignoreTemplate = ` -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib -bin - -# Test binary, build with ` + "`go test -c`" + ` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Kubernetes Generated files - skip generated files, except for vendored files - -!vendor/**/zz_generated.* - -# editor and IDE paraphernalia -.idea -.vscode -*.swp -*.swo -*~ -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gomod.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gomod.go deleted file mode 100644 index e369bc985..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/gomod.go +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &GoMod{} - -// GoMod scaffolds a file that defines the project dependencies -type GoMod struct { - machinery.TemplateMixin - machinery.RepositoryMixin - - ControllerRuntimeVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *GoMod) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "go.mod" - } - - f.TemplateBody = goModTemplate - - f.IfExistsAction = machinery.OverwriteFile - - return nil -} - -const goModTemplate = ` -module {{ .Repo }} - -go 1.13 - -require ( - sigs.k8s.io/controller-runtime {{ .ControllerRuntimeVersion }} -) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack/boilerplate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack/boilerplate.go deleted file mode 100644 index 1d07c79b4..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack/boilerplate.go +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2018 The Kubernetes 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 hack - -import ( - "fmt" - "path/filepath" - "time" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -// DefaultBoilerplatePath is the default path to the boilerplate file -var DefaultBoilerplatePath = filepath.Join("hack", "boilerplate.go.txt") - -var _ machinery.Template = &Boilerplate{} - -// Boilerplate scaffolds a file that defines the common header for the rest of the files -type Boilerplate struct { - machinery.TemplateMixin - machinery.BoilerplateMixin - - // License is the License type to write - License string - - // Licenses maps License types to their actual string - Licenses map[string]string - - // Owner is the copyright owner - e.g. "The Kubernetes Authors" - Owner string - - // Year is the copyright year - Year string -} - -// Validate implements file.RequiresValidation -func (f Boilerplate) Validate() error { - if f.License == "" { - // A default license will be set later - } else if _, found := knownLicenses[f.License]; found { - // One of the know licenses - } else if _, found := f.Licenses[f.License]; found { - // A map containing the requested license was also provided - } else { - return fmt.Errorf("unknown specified license %s", f.License) - } - - return nil -} - -// SetTemplateDefaults implements file.Template -func (f *Boilerplate) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = DefaultBoilerplatePath - } - - if f.License == "" { - f.License = "apache2" - } - - if f.Licenses == nil { - f.Licenses = make(map[string]string, len(knownLicenses)) - } - - for key, value := range knownLicenses { - if _, hasLicense := f.Licenses[key]; !hasLicense { - f.Licenses[key] = value - } - } - - if f.Year == "" { - f.Year = fmt.Sprintf("%v", time.Now().Year()) - } - - // Boilerplate given - if len(f.Boilerplate) > 0 { - f.TemplateBody = f.Boilerplate - return nil - } - - f.TemplateBody = boilerplateTemplate - - return nil -} - -const boilerplateTemplate = `/* -{{ if .Owner -}} -Copyright {{ .Year }} {{ .Owner }}. -{{- else -}} -Copyright {{ .Year }}. -{{- end }} -{{ index .Licenses .License }}*/` - -var knownLicenses = map[string]string{ - "apache2": apache2, - "none": "", -} - -const apache2 = ` -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. -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/main.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/main.go deleted file mode 100644 index c2bd6928d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/main.go +++ /dev/null @@ -1,242 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 templates - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -const defaultMainPath = "main.go" - -var _ machinery.Template = &Main{} - -// Main scaffolds a file that defines the controller manager entry point -type Main struct { - machinery.TemplateMixin - machinery.BoilerplateMixin - machinery.DomainMixin - machinery.RepositoryMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Main) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join(defaultMainPath) - } - - f.TemplateBody = fmt.Sprintf(mainTemplate, - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - machinery.NewMarkerFor(f.Path, setupMarker), - ) - - return nil -} - -var _ machinery.Inserter = &MainUpdater{} - -// MainUpdater updates main.go to run Controllers -type MainUpdater struct { //nolint:maligned - machinery.RepositoryMixin - machinery.MultiGroupMixin - machinery.ResourceMixin - - // Flags to indicate which parts need to be included when updating the file - WireResource, WireController, WireWebhook bool -} - -// GetPath implements file.Builder -func (*MainUpdater) GetPath() string { - return defaultMainPath -} - -// GetIfExistsAction implements file.Builder -func (*MainUpdater) GetIfExistsAction() machinery.IfExistsAction { - return machinery.OverwriteFile -} - -const ( - importMarker = "imports" - addSchemeMarker = "scheme" - setupMarker = "builder" -) - -// GetMarkers implements file.Inserter -func (f *MainUpdater) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(defaultMainPath, importMarker), - machinery.NewMarkerFor(defaultMainPath, addSchemeMarker), - machinery.NewMarkerFor(defaultMainPath, setupMarker), - } -} - -const ( - apiImportCodeFragment = `%s "%s" -` - controllerImportCodeFragment = `"%s/controllers" -` - multiGroupControllerImportCodeFragment = `%scontroller "%s/controllers/%s" -` - addschemeCodeFragment = `utilruntime.Must(%s.AddToScheme(scheme)) -` - reconcilerSetupCodeFragment = `if err = (&controllers.%sReconciler{ - Client: mgr.GetClient(), - Log: ctrl.Log.WithName("controllers").WithName("%s"), - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "%s") - os.Exit(1) - } -` - multiGroupReconcilerSetupCodeFragment = `if err = (&%scontroller.%sReconciler{ - Client: mgr.GetClient(), - Log: ctrl.Log.WithName("controllers").WithName("%s"), - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "%s") - os.Exit(1) - } -` - webhookSetupCodeFragment = `if err = (&%s.%s{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", "webhook", "%s") - os.Exit(1) - } -` -) - -// GetCodeFragments implements file.Inserter -func (f *MainUpdater) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 3) - - // If resource is not being provided we are creating the file, not updating it - if f.Resource == nil { - return fragments - } - - // Generate import code fragments - imports := make([]string, 0) - if f.WireResource { - imports = append(imports, fmt.Sprintf(apiImportCodeFragment, f.Resource.ImportAlias(), f.Resource.Path)) - } - - if f.WireController { - if !f.MultiGroup { - imports = append(imports, fmt.Sprintf(controllerImportCodeFragment, f.Repo)) - } else { - imports = append(imports, fmt.Sprintf(multiGroupControllerImportCodeFragment, - f.Resource.PackageName(), f.Repo, f.Resource.Group)) - } - } - - // Generate add scheme code fragments - addScheme := make([]string, 0) - if f.WireResource { - addScheme = append(addScheme, fmt.Sprintf(addschemeCodeFragment, f.Resource.ImportAlias())) - } - - // Generate setup code fragments - setup := make([]string, 0) - if f.WireController { - if !f.MultiGroup { - setup = append(setup, fmt.Sprintf(reconcilerSetupCodeFragment, - f.Resource.Kind, f.Resource.Kind, f.Resource.Kind)) - } else { - setup = append(setup, fmt.Sprintf(multiGroupReconcilerSetupCodeFragment, - f.Resource.PackageName(), f.Resource.Kind, f.Resource.Kind, f.Resource.Kind)) - } - } - if f.WireWebhook { - setup = append(setup, fmt.Sprintf(webhookSetupCodeFragment, - f.Resource.ImportAlias(), f.Resource.Kind, f.Resource.Kind)) - } - - // Only store code fragments in the map if the slices are non-empty - if len(imports) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, importMarker)] = imports - } - if len(addScheme) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, addSchemeMarker)] = addScheme - } - if len(setup) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, setupMarker)] = setup - } - - return fragments -} - -var mainTemplate = `{{ .Boilerplate }} - -package main - -import ( - "flag" - "os" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - %s -) - -var ( - scheme = runtime.NewScheme() - setupLog = ctrl.Log.WithName("setup") -) - -func init() { - utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - - %s -} - -func main() { - var metricsAddr string - var enableLeaderElection bool - flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.") - flag.BoolVar(&enableLeaderElection, "enable-leader-election", false, - "Enable leader election for controller manager. " + - "Enabling this will ensure there is only one active controller manager.") - flag.Parse() - - ctrl.SetLogger(zap.New(zap.UseDevMode(true))) - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - MetricsBindAddress: metricsAddr, - Port: 9443, - LeaderElection: enableLeaderElection, - LeaderElectionID: "{{ hashFNV .Repo }}.{{ .Domain }}", - }) - if err != nil { - setupLog.Error(err, "unable to start manager") - os.Exit(1) - } - - %s - - setupLog.Info("starting manager") - if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.Error(err, "problem running manager") - os.Exit(1) - } -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/makefile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/makefile.go deleted file mode 100644 index 94ecf72fa..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/makefile.go +++ /dev/null @@ -1,182 +0,0 @@ -/* -Copyright 2019 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Makefile{} - -// Makefile scaffolds a file that defines project management CLI commands -type Makefile struct { - machinery.TemplateMixin - - // Image is controller manager image name - Image string - // BoilerplatePath is the path to the boilerplate file - BoilerplatePath string - // Controller tools version to use in the project - ControllerToolsVersion string - // Kustomize version to use in the project - KustomizeVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *Makefile) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "Makefile" - } - - f.TemplateBody = makefileTemplate - - f.IfExistsAction = machinery.Error - - if f.Image == "" { - f.Image = "controller:latest" - } - - return nil -} - -//nolint:lll -const makefileTemplate = ` -# Image URL to use all building/pushing image targets -IMG ?= {{ .Image }} -# Produce CRDs that work back to Kubernetes 1.11 (no version conversion) -CRD_OPTIONS ?= "crd:trivialVersions=true" - -# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) -ifeq (,$(shell go env GOBIN)) -GOBIN=$(shell go env GOPATH)/bin -else -GOBIN=$(shell go env GOBIN) -endif - -.PHONY: all -all: build - -##@ General - -# The help target prints out all targets with their descriptions organized -# beneath their categories. The categories are represented by '##@' and the -# target descriptions by '##'. The awk command is responsible for reading the -# entire set of makefiles included in this invocation, looking for lines of the -# file as xyz: ## something, and then pretty-format the target and help. Then, -# if there's a line with ##@ something, that gets pretty-printed as a category. -# More info on the usage of ANSI control characters for terminal formatting: -# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters -# More info on the awk command: -# http://linuxcommand.org/lc3_adv_awk.php - -.PHONY: help -help: ## Display this help. - @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) - -##@ Development - -.PHONY: manifests -manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. - $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases - -.PHONY: generate -generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. - $(CONTROLLER_GEN) object:headerFile={{printf "%q" .BoilerplatePath}} paths="./..." - -.PHONY: fmt -fmt: ## Run go fmt against code. - go fmt ./... - -.PHONY: vet -vet: ## Run go vet against code. - go vet ./... - -.PHONY: test -test: manifests generate fmt vet ## Run tests. - go test ./... -coverprofile cover.out - -##@ Build - -.PHONY: build -build: generate fmt vet ## Build manager binary. - go build -o bin/manager main.go - -# Backwards compatibility -.PHONY: manager -manager: build ## Build manager binary (alias for build target). - -.PHONY: run -run: manifests generate fmt vet ## Run a controller from your host. - go run ./main.go - -.PHONY: docker-build -docker-build: test ## Build docker image with the manager. - docker build -t ${IMG} . - -.PHONY: docker-push -docker-push: ## Push docker image with the manager. - docker push ${IMG} - -##@ Deployment - -ifndef ignore-not-found - ignore-not-found = false -endif - -.PHONY: install -install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. - $(KUSTOMIZE) build config/crd | kubectl apply -f - - -.PHONY: uninstall -uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. - $(KUSTOMIZE) build config/crd | kubectl delete --ignore-not-found=$(ignore-not-found) -f - - -.PHONY: deploy -deploy: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config. - cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} - $(KUSTOMIZE) build config/default | kubectl apply -f - - -.PHONY: undeploy -undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. - $(KUSTOMIZE) build config/default | kubectl delete --ignore-not-found=$(ignore-not-found) -f - - -##@ Build Dependencies - -## Location to install dependencies to -LOCALBIN ?= $(shell pwd)/bin -$(LOCALBIN): ## Ensure that the directory exists - mkdir -p $(LOCALBIN) - -## Tool Binaries -KUSTOMIZE ?= $(LOCALBIN)/kustomize -CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen - -## Tool Versions -KUSTOMIZE_VERSION ?= {{ .KustomizeVersion }} -CONTROLLER_TOOLS_VERSION ?= {{ .ControllerToolsVersion }} - -KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" -.PHONY: kustomize -kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. -$(KUSTOMIZE): $(LOCALBIN) - test -s $(LOCALBIN)/kustomize || { curl -Ss $(KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN); } - -.PHONY: controller-gen -controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. -$(CONTROLLER_GEN): $(LOCALBIN) - test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/webhook.go deleted file mode 100644 index 3e34cbf0a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/webhook.go +++ /dev/null @@ -1,91 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/hack" -) - -var _ plugins.Scaffolder = &webhookScaffolder{} - -type webhookScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewWebhookScaffolder returns a new Scaffolder for v2 webhook creation operations -func NewWebhookScaffolder(config config.Config, resource resource.Resource) plugins.Scaffolder { - return &webhookScaffolder{ - config: config, - resource: resource, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *webhookScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *webhookScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Load the boilerplate - boilerplate, err := afero.ReadFile(s.fs.FS, hack.DefaultBoilerplatePath) - if err != nil { - return fmt.Errorf("error scaffolding webhook: unable to load boilerplate: %w", err) - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - machinery.WithResource(&s.resource), - ) - - if err := s.config.UpdateResource(s.resource); err != nil { - return fmt.Errorf("error updating resource: %w", err) - } - - if err := scaffold.Execute( - &api.Webhook{}, - &templates.MainUpdater{WireWebhook: true}, - ); err != nil { - return err - } - - if s.resource.HasConversionWebhook() { - fmt.Println(`Webhook server has been set up for you. -You need to implement the conversion.Hub and conversion.Convertible interfaces for your CRD types.`) - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/webhook.go deleted file mode 100644 index 02a7ae91e..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/webhook.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated -package v2 - -import ( - "fmt" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds" -) - -var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} - -type createWebhookSubcommand struct { - config config.Config - // For help text. - commandName string - - options *goPlugin.Options - - resource *resource.Resource -} - -func (p *createWebhookSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - p.commandName = cliMeta.CommandName - - subcmdMeta.Description = `Scaffold a webhook for an API resource. You can choose to scaffold defaulting, -validating and/or conversion webhooks. -` - subcmdMeta.Examples = fmt.Sprintf(` # Create defaulting and validating webhooks for Group: ship, Version: v1beta1 - # and Kind: Frigate - %[1]s create webhook --group ship --version v1beta1 --kind Frigate --defaulting --programmatic-validation - - # Create conversion webhook for Group: ship, Version: v1beta1 - # and Kind: Frigate - %[1]s create webhook --group ship --version v1beta1 --kind Frigate --conversion -`, cliMeta.CommandName) -} - -func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) { - p.options = &goPlugin.Options{WebhookVersion: "v1beta1"} - - fs.StringVar(&p.options.Plural, "resource", "", "resource irregular plural form") - - fs.BoolVar(&p.options.DoDefaulting, "defaulting", false, - "if set, scaffold the defaulting webhook") - fs.BoolVar(&p.options.DoValidation, "programmatic-validation", false, - "if set, scaffold the validating webhook") - fs.BoolVar(&p.options.DoConversion, "conversion", false, - "if set, scaffold the conversion webhook") -} - -func (p *createWebhookSubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *createWebhookSubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - - if p.resource.Group == "" { - return fmt.Errorf("group cannot be empty") - } - - p.options.UpdateResource(p.resource, p.config) - - if err := p.resource.Validate(); err != nil { - return err - } - - if !p.resource.HasDefaultingWebhook() && !p.resource.HasValidationWebhook() && !p.resource.HasConversionWebhook() { - return fmt.Errorf("%s create webhook requires at least one of --defaulting,"+ - " --programmatic-validation and --conversion to be true", p.commandName) - } - - // check if resource exist to create webhook - if p.config.GetVersion().Compare(cfgv2.Version) == 0 { - if !p.config.HasResource(p.resource.GVK) { - return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName) - } - } else { - if r, err := p.config.GetResource(p.resource.GVK); err != nil { - return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName) - } else if r.Webhooks != nil && !r.Webhooks.IsEmpty() { - return fmt.Errorf("webhook resource already exists") - } - } - - return nil -} - -func (p *createWebhookSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewWebhookScaffolder(p.config, *p.resource) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/api.go deleted file mode 100644 index bf981aaf8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/api.go +++ /dev/null @@ -1,214 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "bufio" - "errors" - "fmt" - "os" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" -) - -const ( - // defaultCRDVersion is the default CRD API version to scaffold. - defaultCRDVersion = "v1" -) - -// DefaultMainPath is default file path of main.go -const DefaultMainPath = "main.go" - -var _ plugin.CreateAPISubcommand = &createAPISubcommand{} - -type createAPISubcommand struct { - config config.Config - - options *goPlugin.Options - - resource *resource.Resource - - // Check if we have to scaffold resource and/or controller - resourceFlag *pflag.Flag - controllerFlag *pflag.Flag - - // force indicates that the resource should be created even if it already exists - force bool - - // runMake indicates whether to run make or not after scaffolding APIs - runMake bool -} - -func (p *createAPISubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = `Scaffold a Kubernetes API by writing a Resource definition and/or a Controller. - -If information about whether the resource and controller should be scaffolded -was not explicitly provided, it will prompt the user if they should be. - -After the scaffold is written, the dependencies will be updated and -make generate will be run. -` - subcmdMeta.Examples = fmt.Sprintf(` # Create a frigates API with Group: ship, Version: v1beta1 and Kind: Frigate - %[1]s create api --group ship --version v1beta1 --kind Frigate - - # Edit the API Scheme - nano api/v1beta1/frigate_types.go - - # Edit the Controller - nano controllers/frigate/frigate_controller.go - - # Edit the Controller Test - nano controllers/frigate/frigate_controller_test.go - - # Generate the manifests - make manifests - - # Install CRDs into the Kubernetes cluster using kubectl apply - make install - - # Regenerate code and run against the Kubernetes cluster configured by ~/.kube/config - make run -`, cliMeta.CommandName) -} - -func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.runMake, "make", true, "if true, run `make generate` after generating files") - - fs.BoolVar(&p.force, "force", false, - "attempt to create resource even if it already exists") - - p.options = &goPlugin.Options{} - - fs.StringVar(&p.options.Plural, "plural", "", "resource irregular plural form") - - fs.BoolVar(&p.options.DoAPI, "resource", true, - "if set, generate the resource without prompting the user") - p.resourceFlag = fs.Lookup("resource") - fs.StringVar(&p.options.CRDVersion, "crd-version", defaultCRDVersion, - "version of CustomResourceDefinition to scaffold. Options: [v1, v1beta1]") - fs.BoolVar(&p.options.Namespaced, "namespaced", true, "resource is namespaced") - - fs.BoolVar(&p.options.DoController, "controller", true, - "if set, generate the controller without prompting the user") - p.controllerFlag = fs.Lookup("controller") - - // (not required raise an error in this case) - // nolint:errcheck,gosec - fs.MarkDeprecated("crd-version", deprecateMsg) -} - -func (p *createAPISubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - - // TODO: re-evaluate whether y/n input still makes sense. We should probably always - // scaffold the resource and controller. - // Ask for API and Controller if not specified - reader := bufio.NewReader(os.Stdin) - if !p.resourceFlag.Changed { - fmt.Println("Create Resource [y/n]") - p.options.DoAPI = util.YesNo(reader) - } - if !p.controllerFlag.Changed { - fmt.Println("Create Controller [y/n]") - p.options.DoController = util.YesNo(reader) - } - - p.options.UpdateResource(p.resource, p.config) - - if err := p.resource.Validate(); err != nil { - return err - } - - // In case we want to scaffold a resource API we need to do some checks - if p.options.DoAPI { - // Check that resource doesn't have the API scaffolded or flag force was set - if r, err := p.config.GetResource(p.resource.GVK); err == nil && r.HasAPI() && !p.force { - return errors.New("API resource already exists") - } - - // Check that the provided group can be added to the project - if !p.config.IsMultiGroup() && p.config.ResourcesLength() != 0 && !p.config.HasGroup(p.resource.Group) { - return fmt.Errorf("multiple groups are not allowed by default, " + - "to enable multi-group visit https://kubebuilder.io/migration/multi-group.html") - } - - // Check CRDVersion against all other CRDVersions in p.config for compatibility. - // nolint:staticcheck - if util.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { - return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", - p.resource.API.CRDVersion) - } - } - - return nil -} - -func (p *createAPISubcommand) PreScaffold(machinery.Filesystem) error { - // check if main.go is present in the root directory - if _, err := os.Stat(DefaultMainPath); os.IsNotExist(err) { - return fmt.Errorf("%s file should present in the root directory", DefaultMainPath) - } - - return nil -} - -func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewAPIScaffolder(p.config, *p.resource, p.force) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} - -func (p *createAPISubcommand) PostScaffold() error { - - // Update the makefile to allow generate Webhooks to ensure backwards compatibility - // todo: it should be removed for go/v4 - // nolint:lll,gosec - if p.resource.API.CRDVersion == "v1beta1" { - if err := applyScaffoldCustomizationsForVbeta1(); err != nil { - return err - } - } - - err := util.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - if p.runMake && p.resource.HasAPI() { - err = util.RunCmd("Running make", "make", "generate") - if err != nil { - return err - } - fmt.Print("Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:\n$ make manifests\n") - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/commons.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/commons.go deleted file mode 100644 index cd8c1eb86..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/commons.go +++ /dev/null @@ -1,172 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" -) - -const deprecateMsg = "The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported since " + - "the Kubernetes release 1.22. This flag no longer required to exist in future releases. Also, we would like to " + - "recommend you no longer use these API versions." + - "More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22" - -// Update the makefile to allow generate CRDs/Webhooks with v1beta1 to ensure backwards compatibility -// nolint:lll,gosec -func applyScaffoldCustomizationsForVbeta1() error { - makefilePath := filepath.Join("Makefile") - bs, err := os.ReadFile(makefilePath) - if err != nil { - return err - } - if !strings.Contains(string(bs), "CRD_OPTIONS") { - - log.Warn("The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported " + - "since the Kubernetes release 1.22. In order to help you out use these versions" + - "we will need to try to update the Makefile and go.mod files of this project. Please," + - "ensure that these changes were done accordingly with your customizations.\n" + - "Also, we would like to recommend you no longer use these API versions." + - "More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22") - - const makefileTarget = `$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases` - const makefileTargetForV1beta1 = `$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases` - - if err := util.ReplaceInFile("Makefile", makefileTarget, makefileTargetForV1beta1); err != nil { - fmt.Printf("unable to update the makefile to allow the usage of v1beta1: %s", err) - } - - const makegentarget = `manifests: controller-gen` - const makegenV1beta1Options = `# Produce CRDs that work back to Kubernetes 1.11 (no version conversion) -CRD_OPTIONS ?= "crd:crdVersions={v1beta1},trivialVersions=true,preserveUnknownFields=false" -manifests: controller-gen` - - if err := util.ReplaceInFile("Makefile", makegentarget, makegenV1beta1Options); err != nil { - log.Warnf("unable to update the Makefile with %s: %s", makegenV1beta1Options, err) - } - - // latest version of controller-tools where v1beta1 is supported - const controllerToolsVersionForVBeta1 = "v0.6.2" - if err := util.ReplaceInFile("Makefile", - fmt.Sprintf("CONTROLLER_TOOLS_VERSION ?= %s", - scaffolds.ControllerToolsVersion), - fmt.Sprintf("CONTROLLER_TOOLS_VERSION ?= %s", - controllerToolsVersionForVBeta1)); err != nil { - log.Warnf("unable to update the Makefile with %s: %s", fmt.Sprintf("controller-gen@%s", - controllerToolsVersionForVBeta1), err) - } - - if err := util.ReplaceInFile("Makefile", - "ENVTEST_K8S_VERSION = 1.26.1", - "ENVTEST_K8S_VERSION = 1.21"); err != nil { - log.Warnf("unable to update the Makefile with %s: %s", "ENVTEST_K8S_VERSION = 1.21", err) - } - - // DO NOT UPDATE THIS VERSION - // Note that this implementation will update the go.mod to downgrade the versions for those that are - // compatible v1beta1 CRD/Webhooks k8s core APIs if/when a user tries to create an API with - // create api [options] crd-version=v1beta1. The flag/feature is deprecated. however, to ensure that backwards - // compatible we must introduce this logic. Also, note that when we bump the k8s dependencies we need to - // ensure that the following replacements will be done accordingly to downgrade the versions. - // The next version of the Golang base plugin (go/v4) no longer provide this feature. - const controllerRuntimeVersionForVBeta1 = "v0.9.2" - - if err := util.ReplaceInFile("go.mod", - fmt.Sprintf("sigs.k8s.io/controller-runtime %s", scaffolds.ControllerRuntimeVersion), - fmt.Sprintf("sigs.k8s.io/controller-runtime %s", controllerRuntimeVersionForVBeta1)); err != nil { - log.Warnf("unable to update the go.mod with sigs.k8s.io/controller-runtime %s: %s", - controllerRuntimeVersionForVBeta1, err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/api v0.24.2", - "k8s.io/api v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/api v0.21.2: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/apimachinery v0.24.2", - "k8s.io/apimachinery v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/apimachinery v0.21.2: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/client-go v0.24.2", - "k8s.io/client-go v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/client-go v0.21.2: %s", err) - } - - // During the scaffolding phase, this gets added to go.mod file, running go mod tidy bumps back - // the version from 21.2 to the latest - if err := util.ReplaceInFile("go.mod", - "k8s.io/api v0.24.2", - "k8s.io/api v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/api v0.21.2: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/apiextensions-apiserver v0.24.2", - "k8s.io/apiextensions-apiserver v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/apiextensions-apiserver v0.21.2: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/component-base v0.24.2", - "k8s.io/component-base v0.21.2"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/component-base v0.21.2: %s", err) - } - - // Cannot use v1+ unless controller runtime is v0.11 - if err := util.ReplaceInFile("go.mod", - "github.com/go-logr/logr v1.2.0", - "github.com/go-logr/logr v0.4.0"); err != nil { - log.Warnf("unable to update the go.mod with github.com/go-logr/logr v0.4.0: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "github.com/go-logr/zapr v1.2.0", - "github.com/go-logr/zapr v0.4.0"); err != nil { - log.Warnf("unable to update the go.mod with github.com/go-logr/zapr v0.4.0: %s", err) - } - - if err := util.ReplaceInFile("go.mod", - "k8s.io/klog/v2 v2.60.1", - "k8s.io/klog/v2 v2.9.0"); err != nil { - log.Warnf("unable to update the go.mod with k8s.io/klog/v2 v2.9.0: %s", err) - } - - // Due to some indirect dependency changes with a bump in k8s packages from 0.23.x --> 0.24.x we need to - // clear out all indirect dependencies before we run `go mod tidy` so that the above changes get resolved correctly - if err := util.ReplaceRegexInFile("go.mod", `(require \(\n(\t.* \/\/ indirect\n)+\))`, ""); err != nil { - log.Warnf("unable to update the go.mod indirect dependencies: %s", err) - } - - err = util.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - } - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/edit.go deleted file mode 100644 index 679902ab0..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/edit.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "fmt" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" -) - -var _ plugin.EditSubcommand = &editSubcommand{} - -type editSubcommand struct { - config config.Config - - multigroup bool -} - -func (p *editSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - subcmdMeta.Description = `This command will edit the project configuration. -Features supported: - - Toggle between single or multi group projects. -` - subcmdMeta.Examples = fmt.Sprintf(` # Enable the multigroup layout - %[1]s edit --multigroup - - # Disable the multigroup layout - %[1]s edit --multigroup=false -`, cliMeta.CommandName) -} - -func (p *editSubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.multigroup, "multigroup", false, "enable or disable multigroup layout") -} - -func (p *editSubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *editSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewEditScaffolder(p.config, p.multigroup) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/init.go deleted file mode 100644 index 6264118f7..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/init.go +++ /dev/null @@ -1,211 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "unicode" - - log "github.com/sirupsen/logrus" - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" -) - -// Variables and function to check Go version requirements. -var ( - goVerMin = golang.MustParse("go1.19.0") - goVerMax = golang.MustParse("go2.0alpha1") -) - -var _ plugin.InitSubcommand = &initSubcommand{} - -type initSubcommand struct { - config config.Config - // For help text. - commandName string - - // boilerplate options - license string - owner string - - // go config options - repo string - - // flags - fetchDeps bool - skipGoVersionCheck bool -} - -func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - p.commandName = cliMeta.CommandName - - subcmdMeta.Description = `Initialize a new project including the following files: - - a "go.mod" with project dependencies - - a "PROJECT" file that stores project configuration - - a "Makefile" with several useful make targets for the project - - several YAML files for project deployment under the "config" directory - - a "main.go" file that creates the manager that will run the project controllers -` - subcmdMeta.Examples = fmt.Sprintf(` # Initialize a new project with your domain and name in copyright - %[1]s init --plugins go/v3 --domain example.org --owner "Your name" - - # Initialize a new project defining a specific project version - %[1]s init --plugins go/v3 --project-version 3 -`, cliMeta.CommandName) -} - -func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) { - fs.BoolVar(&p.skipGoVersionCheck, "skip-go-version-check", - false, "if specified, skip checking the Go version") - - // dependency args - fs.BoolVar(&p.fetchDeps, "fetch-deps", true, "ensure dependencies are downloaded") - - // boilerplate args - fs.StringVar(&p.license, "license", "apache2", - "license to use to boilerplate, may be one of 'apache2', 'none'") - fs.StringVar(&p.owner, "owner", "", "owner to add to the copyright") - - // project args - fs.StringVar(&p.repo, "repo", "", "name to use for go module (e.g., github.com/user/repo), "+ - "defaults to the go package of the current working directory.") -} - -func (p *initSubcommand) InjectConfig(c config.Config) error { - p.config = c - - // Try to guess repository if flag is not set. - if p.repo == "" { - repoPath, err := golang.FindCurrentRepo() - if err != nil { - return fmt.Errorf("error finding current repository: %v", err) - } - p.repo = repoPath - } - - return p.config.SetRepository(p.repo) -} - -func (p *initSubcommand) PreScaffold(machinery.Filesystem) error { - // Ensure Go version is in the allowed range if check not turned off. - if !p.skipGoVersionCheck { - if err := golang.ValidateGoVersion(goVerMin, goVerMax); err != nil { - return err - } - } - - // Check if the current directory has not files or directories which does not allow to init the project - return checkDir() -} - -func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewInitScaffolder(p.config, p.license, p.owner) - scaffolder.InjectFS(fs) - err := scaffolder.Scaffold() - if err != nil { - return err - } - - if !p.fetchDeps { - log.Println("Skipping fetching dependencies.") - return nil - } - - // Ensure that we are pinning controller-runtime version - // xref: https://github.com/kubernetes-sigs/kubebuilder/issues/997 - err = util.RunCmd("Get controller runtime", "go", "get", - "sigs.k8s.io/controller-runtime@"+scaffolds.ControllerRuntimeVersion) - if err != nil { - return err - } - - return nil -} - -func (p *initSubcommand) PostScaffold() error { - err := util.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - - fmt.Printf("Next: define a resource with:\n$ %s create api\n", p.commandName) - return nil -} - -// checkDir will return error if the current directory has files which are not allowed. -// Note that, it is expected that the directory to scaffold the project is cleaned. -// Otherwise, it might face issues to do the scaffold. -func checkDir() error { - err := filepath.Walk(".", - func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - // Allow directory trees starting with '.' - if info.IsDir() && strings.HasPrefix(info.Name(), ".") && info.Name() != "." { - return filepath.SkipDir - } - // Allow files starting with '.' - if strings.HasPrefix(info.Name(), ".") { - return nil - } - // Allow files ending with '.md' extension - if strings.HasSuffix(info.Name(), ".md") && !info.IsDir() { - return nil - } - // Allow capitalized files except PROJECT - isCapitalized := true - for _, l := range info.Name() { - if !unicode.IsUpper(l) { - isCapitalized = false - break - } - } - if isCapitalized && info.Name() != "PROJECT" { - return nil - } - // Allow files in the following list - allowedFiles := []string{ - "go.mod", // user might run `go mod init` instead of providing the `--flag` at init - "go.sum", // auto-generated file related to go.mod - } - for _, allowedFile := range allowedFiles { - if info.Name() == allowedFile { - return nil - } - } - // Do not allow any other file - return fmt.Errorf( - "target directory is not empty (only %s, files and directories with the prefix \".\", "+ - "files with the suffix \".md\" or capitalized files name are allowed); "+ - "found existing file %q", strings.Join(allowedFiles, ", "), path) - }) - if err != nil { - return err - } - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/plugin.go deleted file mode 100644 index 6fb800b63..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/plugin.go +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" -) - -const pluginName = "base." + golang.DefaultNameQualifier - -var ( - pluginVersion = plugin.Version{Number: 3} - supportedProjectVersions = []config.Version{cfgv3.Version} -) - -var _ plugin.Full = Plugin{} - -// Plugin implements the plugin.Full interface -type Plugin struct { - initSubcommand - createAPISubcommand - createWebhookSubcommand - editSubcommand -} - -// Name returns the name of the plugin -func (Plugin) Name() string { return pluginName } - -// Version returns the version of the plugin -func (Plugin) Version() plugin.Version { return pluginVersion } - -// SupportedProjectVersions returns an array with all project versions supported by the plugin -func (Plugin) SupportedProjectVersions() []config.Version { return supportedProjectVersions } - -// GetInitSubcommand will return the subcommand which is responsible for initializing and common scaffolding -func (p Plugin) GetInitSubcommand() plugin.InitSubcommand { return &p.initSubcommand } - -// GetCreateAPISubcommand will return the subcommand which is responsible for scaffolding apis -func (p Plugin) GetCreateAPISubcommand() plugin.CreateAPISubcommand { return &p.createAPISubcommand } - -// GetCreateWebhookSubcommand will return the subcommand which is responsible for scaffolding webhooks -func (p Plugin) GetCreateWebhookSubcommand() plugin.CreateWebhookSubcommand { - return &p.createWebhookSubcommand -} - -// GetEditSubcommand will return the subcommand which is responsible for editing the scaffold of the project -func (p Plugin) GetEditSubcommand() plugin.EditSubcommand { return &p.editSubcommand } - -func (p Plugin) DeprecationWarning() string { - return "This version is deprecated." + - "The `go/v3` cannot scaffold projects using kustomize versions v4x+" + - " and cannot fully support Kubernetes 1.25+." + - "It is recommended to upgrade your project to the latest versions available (go/v4)." + - "Please, check the migration guide to learn how to upgrade your project" -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/api.go deleted file mode 100644 index bccb6e843..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/api.go +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack" -) - -var _ plugins.Scaffolder = &apiScaffolder{} - -// apiScaffolder contains configuration for generating scaffolding for Go type -// representing the API and controller that implements the behavior for the API. -type apiScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem - - // force indicates whether to scaffold controller files even if it exists or not - force bool -} - -// NewAPIScaffolder returns a new Scaffolder for API/controller creation operations -func NewAPIScaffolder(config config.Config, res resource.Resource, force bool) plugins.Scaffolder { - return &apiScaffolder{ - config: config, - resource: res, - force: force, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *apiScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Load the boilerplate - boilerplate, err := afero.ReadFile(s.fs.FS, hack.DefaultBoilerplatePath) - if err != nil { - return fmt.Errorf("error scaffolding API/controller: unable to load boilerplate: %w", err) - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - machinery.WithResource(&s.resource), - ) - - // Keep track of these values before the update - doAPI := s.resource.HasAPI() - doController := s.resource.HasController() - - if err := s.config.UpdateResource(s.resource); err != nil { - return fmt.Errorf("error updating resource: %w", err) - } - - if doAPI { - if err := scaffold.Execute( - &api.Types{Force: s.force}, - &api.Group{}, - ); err != nil { - return fmt.Errorf("error scaffolding APIs: %v", err) - } - } - - if doController { - if err := scaffold.Execute( - &controllers.SuiteTest{Force: s.force}, - &controllers.Controller{ControllerRuntimeVersion: ControllerRuntimeVersion, Force: s.force}, - ); err != nil { - return fmt.Errorf("error scaffolding controller: %v", err) - } - } - - if err := scaffold.Execute( - &templates.MainUpdater{WireResource: doAPI, WireController: doController}, - ); err != nil { - return fmt.Errorf("error updating main.go: %v", err) - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/edit.go deleted file mode 100644 index e099a8a7b..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/edit.go +++ /dev/null @@ -1,102 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - "fmt" - "strings" - - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" -) - -var _ plugins.Scaffolder = &editScaffolder{} - -type editScaffolder struct { - config config.Config - multigroup bool - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewEditScaffolder returns a new Scaffolder for configuration edit operations -func NewEditScaffolder(config config.Config, multigroup bool) plugins.Scaffolder { - return &editScaffolder{ - config: config, - multigroup: multigroup, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *editScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *editScaffolder) Scaffold() error { - filename := "Dockerfile" - bs, err := afero.ReadFile(s.fs.FS, filename) - if err != nil { - return err - } - str := string(bs) - - // update dockerfile - if s.multigroup { - str, err = ensureExistAndReplace( - str, - "COPY api/ api/", - `COPY apis/ apis/`) - - } else { - str, err = ensureExistAndReplace( - str, - "COPY apis/ apis/", - `COPY api/ api/`) - } - - // Ignore the error encountered, if the file is already in desired format. - if err != nil && s.multigroup != s.config.IsMultiGroup() { - return err - } - - if s.multigroup { - _ = s.config.SetMultiGroup() - } else { - _ = s.config.ClearMultiGroup() - } - - // Check if the str is not empty, because when the file is already in desired format it will return empty string - // because there is nothing to replace. - if str != "" { - // TODO: instead of writing it directly, we should use the scaffolding machinery for consistency - return afero.WriteFile(s.fs.FS, filename, []byte(str), 0644) - } - - return nil -} - -func ensureExistAndReplace(input, match, replace string) (string, error) { - if !strings.Contains(input, match) { - return "", fmt.Errorf("can't find %q", match) - } - return strings.Replace(input, match, replace, -1), nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/init.go deleted file mode 100644 index ffba15e92..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/init.go +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - kustomizecommonv1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1" - kustomizecommonv2alpha "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack" -) - -const ( - // ControllerRuntimeVersion is the kubernetes-sigs/controller-runtime version to be used in the project - ControllerRuntimeVersion = "v0.14.4" - // ControllerToolsVersion is the kubernetes-sigs/controller-tools version to be used in the project - ControllerToolsVersion = "v0.11.3" - - imageName = "controller:latest" -) - -var _ plugins.Scaffolder = &initScaffolder{} - -var kustomizeVersion string - -type initScaffolder struct { - config config.Config - boilerplatePath string - license string - owner string - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem -} - -// NewInitScaffolder returns a new Scaffolder for project initialization operations -func NewInitScaffolder(config config.Config, license, owner string) plugins.Scaffolder { - return &initScaffolder{ - config: config, - boilerplatePath: hack.DefaultBoilerplatePath, - license: license, - owner: owner, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *initScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *initScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Initialize the machinery.Scaffold that will write the boilerplate file to disk - // The boilerplate file needs to be scaffolded as a separate step as it is going to - // be used by the rest of the files, even those scaffolded in this command call. - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - ) - - bpFile := &hack.Boilerplate{ - License: s.license, - Owner: s.owner, - } - bpFile.Path = s.boilerplatePath - if err := scaffold.Execute(bpFile); err != nil { - return err - } - - boilerplate, err := afero.ReadFile(s.fs.FS, s.boilerplatePath) - if err != nil { - return err - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold = machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - ) - - // If the KustomizeV2 was used to do the scaffold then - // we need to ensure that we use its supported Kustomize Version - // in order to support it - kustomizeVersion = kustomizecommonv1.KustomizeVersion - kustomizev2 := kustomizecommonv2alpha.Plugin{} - gov4alpha := "go.kubebuilder.io/v4-alpha" - pluginKeyForKustomizeV2 := plugin.KeyFor(kustomizev2) - - for _, pluginKey := range s.config.GetPluginChain() { - if pluginKey == pluginKeyForKustomizeV2 || pluginKey == gov4alpha { - kustomizeVersion = kustomizecommonv2alpha.KustomizeVersion - break - } - } - - return scaffold.Execute( - &templates.Main{}, - &templates.GoMod{ - ControllerRuntimeVersion: ControllerRuntimeVersion, - }, - &templates.GitIgnore{}, - &templates.Makefile{ - Image: imageName, - BoilerplatePath: s.boilerplatePath, - ControllerToolsVersion: ControllerToolsVersion, - KustomizeVersion: kustomizeVersion, - ControllerRuntimeVersion: ControllerRuntimeVersion, - }, - &templates.Dockerfile{}, - &templates.DockerIgnore{}, - &templates.Readme{}, - ) -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/group.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/group.go deleted file mode 100644 index 8c93af689..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/group.go +++ /dev/null @@ -1,78 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 api - -import ( - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Group{} - -// Group scaffolds the file that defines the registration methods for a certain group and version -type Group struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Group) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - if f.Resource.Group != "" { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "groupversion_info.go") - } else { - f.Path = filepath.Join("apis", "%[version]", "groupversion_info.go") - } - } else { - f.Path = filepath.Join("api", "%[version]", "groupversion_info.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = groupTemplate - - return nil -} - -//nolint:lll -const groupTemplate = `{{ .Boilerplate }} - -// Package {{ .Resource.Version }} contains API Schema definitions for the {{ .Resource.Group }} {{ .Resource.Version }} API group -//+kubebuilder:object:generate=true -//+groupName={{ .Resource.QualifiedGroup }} -package {{ .Resource.Version }} - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -var ( - // GroupVersion is group version used to register these objects - GroupVersion = schema.GroupVersion{Group: "{{ .Resource.QualifiedGroup }}", Version: "{{ .Resource.Version }}"} - - // SchemeBuilder is used to add go types to the GroupVersionKind scheme - SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} - - // AddToScheme adds the types in this group-version to the given scheme. - AddToScheme = SchemeBuilder.AddToScheme -) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/types.go deleted file mode 100644 index 03241a661..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/types.go +++ /dev/null @@ -1,124 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 api - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Types{} - -// Types scaffolds the file that defines the schema for a CRD -// nolint:maligned -type Types struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Types) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - if f.Resource.Group != "" { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("apis", "%[version]", "%[kind]_types.go") - } - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = typesTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - return nil -} - -const typesTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! -// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. - -// {{ .Resource.Kind }}Spec defines the desired state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Spec struct { - // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster - // Important: Run "make" to regenerate code after modifying this file - - // Foo is an example field of {{ .Resource.Kind }}. Edit {{ lower .Resource.Kind }}_types.go to remove/update - Foo string ` + "`" + `json:"foo,omitempty"` + "`" + ` -} - -// {{ .Resource.Kind }}Status defines the observed state of {{ .Resource.Kind }} -type {{ .Resource.Kind }}Status struct { - // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster - // Important: Run "make" to regenerate code after modifying this file -} - -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status -{{- if and (not .Resource.API.Namespaced) (not .Resource.IsRegularPlural) }} -//+kubebuilder:resource:path={{ .Resource.Plural }},scope=Cluster -{{- else if not .Resource.API.Namespaced }} -//+kubebuilder:resource:scope=Cluster -{{- else if not .Resource.IsRegularPlural }} -//+kubebuilder:resource:path={{ .Resource.Plural }} -{{- end }} - -// {{ .Resource.Kind }} is the Schema for the {{ .Resource.Plural }} API -type {{ .Resource.Kind }} struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ObjectMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - - Spec {{ .Resource.Kind }}Spec ` + "`" + `json:"spec,omitempty"` + "`" + ` - Status {{ .Resource.Kind }}Status ` + "`" + `json:"status,omitempty"` + "`" + ` -} - -//+kubebuilder:object:root=true - -// {{ .Resource.Kind }}List contains a list of {{ .Resource.Kind }} -type {{ .Resource.Kind }}List struct { - metav1.TypeMeta ` + "`" + `json:",inline"` + "`" + ` - metav1.ListMeta ` + "`" + `json:"metadata,omitempty"` + "`" + ` - Items []{{ .Resource.Kind }} ` + "`" + `json:"items"` + "`" + ` -} - -func init() { - SchemeBuilder.Register(&{{ .Resource.Kind }}{}, &{{ .Resource.Kind }}List{}) -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook.go deleted file mode 100644 index a019844c2..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook.go +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 api - -import ( - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Webhook{} - -// Webhook scaffolds the file that defines a webhook for a CRD or a builtin resource -type Webhook struct { // nolint:maligned - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - // Is the Group domain for the Resource replacing '.' with '-' - QualifiedGroupWithDash string - - // Define value for AdmissionReviewVersions marker - AdmissionReviewVersions string - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Webhook) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - if f.Resource.Group != "" { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_webhook.go") - } else { - f.Path = filepath.Join("apis", "%[version]", "%[kind]_webhook.go") - } - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_webhook.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - webhookTemplate := webhookTemplate - if f.Resource.HasDefaultingWebhook() { - webhookTemplate = webhookTemplate + defaultingWebhookTemplate - } - if f.Resource.HasValidationWebhook() { - webhookTemplate = webhookTemplate + validatingWebhookTemplate - } - f.TemplateBody = webhookTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - f.AdmissionReviewVersions = "v1" - if f.Resource.Webhooks.WebhookVersion == "v1beta1" { - f.AdmissionReviewVersions = "{v1,v1beta1}" - } - - f.QualifiedGroupWithDash = strings.Replace(f.Resource.QualifiedGroup(), ".", "-", -1) - - return nil -} - -const ( - webhookTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - ctrl "sigs.k8s.io/controller-runtime" - logf "sigs.k8s.io/controller-runtime/pkg/log" - {{- if .Resource.HasValidationWebhook }} - "k8s.io/apimachinery/pkg/runtime" - {{- end }} - {{- if or .Resource.HasValidationWebhook .Resource.HasDefaultingWebhook }} - "sigs.k8s.io/controller-runtime/pkg/webhook" - {{- end }} -) - -// log is for logging in this package. -var {{ lower .Resource.Kind }}log = logf.Log.WithName("{{ lower .Resource.Kind }}-resource") - -func (r *{{ .Resource.Kind }}) SetupWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(r). - Complete() -} - -// TODO(user): EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! -` - - //nolint:lll - defaultingWebhookTemplate = ` -//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} - -var _ webhook.Defaulter = &{{ .Resource.Kind }}{} - -// Default implements webhook.Defaulter so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) Default() { - {{ lower .Resource.Kind }}log.Info("default", "name", r.Name) - - // TODO(user): fill in your defaulting logic. -} -` - - //nolint:lll - validatingWebhookTemplate = ` -// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation. -//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} - -var _ webhook.Validator = &{{ .Resource.Kind }}{} - -// ValidateCreate implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateCreate() error { - {{ lower .Resource.Kind }}log.Info("validate create", "name", r.Name) - - // TODO(user): fill in your validation logic upon object creation. - return nil -} - -// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateUpdate(old runtime.Object) error { - {{ lower .Resource.Kind }}log.Info("validate update", "name", r.Name) - - // TODO(user): fill in your validation logic upon object update. - return nil -} - -// ValidateDelete implements webhook.Validator so a webhook will be registered for the type -func (r *{{ .Resource.Kind }}) ValidateDelete() error { - {{ lower .Resource.Kind }}log.Info("validate delete", "name", r.Name) - - // TODO(user): fill in your validation logic upon object deletion. - return nil -} -` -) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook_suitetest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook_suitetest.go deleted file mode 100644 index 1a580d094..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api/webhook_suitetest.go +++ /dev/null @@ -1,244 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 api - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &WebhookSuite{} -var _ machinery.Inserter = &WebhookSuite{} - -// WebhookSuite scaffolds the file that sets up the webhook tests -type WebhookSuite struct { //nolint:maligned - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - // todo: currently is not possible to know if an API was or not scaffolded. We can fix it when #1826 be addressed - WireResource bool - - // BaseDirectoryRelativePath define the Path for the base directory when it is multigroup - BaseDirectoryRelativePath string -} - -// SetTemplateDefaults implements file.Template -func (f *WebhookSuite) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup { - if f.Resource.Group != "" { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "webhook_suite_test.go") - } else { - f.Path = filepath.Join("apis", "%[version]", "webhook_suite_test.go") - } - } else { - f.Path = filepath.Join("api", "%[version]", "webhook_suite_test.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = fmt.Sprintf(webhookTestSuiteTemplate, - machinery.NewMarkerFor(f.Path, importMarker), - admissionImportAlias, - machinery.NewMarkerFor(f.Path, addSchemeMarker), - machinery.NewMarkerFor(f.Path, addWebhookManagerMarker), - "%s", - "%d", - ) - - // If is multigroup the path needs to be ../../.. since it has the group dir. - f.BaseDirectoryRelativePath = `"..", ".."` - if f.MultiGroup && f.Resource.Group != "" { - f.BaseDirectoryRelativePath = `"..", "..",".."` - } - - return nil -} - -const ( - // TODO: admission webhook versions should be based on the input of the user. For More Info #1664 - admissionImportAlias = "admissionv1beta1" - admissionPath = "k8s.io/api/admission/v1beta1" - importMarker = "imports" - addWebhookManagerMarker = "webhook" - addSchemeMarker = "scheme" -) - -// GetMarkers implements file.Inserter -func (f *WebhookSuite) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - machinery.NewMarkerFor(f.Path, addWebhookManagerMarker), - } -} - -const ( - apiImportCodeFragment = `%s "%s" -` - - addWebhookManagerCodeFragment = `err = (&%s{}).SetupWebhookWithManager(mgr) -Expect(err).NotTo(HaveOccurred()) - -` -) - -// GetCodeFragments implements file.Inserter -func (f *WebhookSuite) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 3) - - // Generate import code fragments - imports := make([]string, 0) - imports = append(imports, fmt.Sprintf(apiImportCodeFragment, admissionImportAlias, admissionPath)) - - // Generate add scheme code fragments - addScheme := make([]string, 0) - - // Generate add webhookManager code fragments - addWebhookManager := make([]string, 0) - addWebhookManager = append(addWebhookManager, fmt.Sprintf(addWebhookManagerCodeFragment, f.Resource.Kind)) - - // Only store code fragments in the map if the slices are non-empty - if len(addWebhookManager) != 0 { - fragments[machinery.NewMarkerFor(f.Path, addWebhookManagerMarker)] = addWebhookManager - } - if len(imports) != 0 { - fragments[machinery.NewMarkerFor(f.Path, importMarker)] = imports - } - if len(addScheme) != 0 { - fragments[machinery.NewMarkerFor(f.Path, addSchemeMarker)] = addScheme - } - - return fragments -} - -const webhookTestSuiteTemplate = `{{ .Boilerplate }} - -package {{ .Resource.Version }} - -import ( - "context" - "path/filepath" - "testing" - "fmt" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - %s - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "k8s.io/apimachinery/pkg/runtime" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/envtest" - logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/log/zap" -) - -// These tests use Ginkgo (BDD-style Go testing framework). Refer to -// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. - -var cfg *rest.Config -var k8sClient client.Client -var testEnv *envtest.Environment -var ctx context.Context -var cancel context.CancelFunc - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Webhook Suite") -} - -var _ = BeforeSuite(func() { - logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) - - ctx, cancel = context.WithCancel(context.TODO()) - - By("bootstrapping test environment") - testEnv = &envtest.Environment{ - CRDDirectoryPaths: []string{filepath.Join({{ .BaseDirectoryRelativePath }}, "config", "crd", "bases")}, - ErrorIfCRDPathMissing: {{ .WireResource }}, - WebhookInstallOptions: envtest.WebhookInstallOptions{ - Paths: []string{filepath.Join({{ .BaseDirectoryRelativePath }}, "config", "webhook")}, - }, - } - - var err error - // cfg is defined in this file globally. - cfg, err = testEnv.Start() - Expect(err).NotTo(HaveOccurred()) - Expect(cfg).NotTo(BeNil()) - - scheme := runtime.NewScheme() - err = AddToScheme(scheme) - Expect(err).NotTo(HaveOccurred()) - - err = %s.AddToScheme(scheme) - Expect(err).NotTo(HaveOccurred()) - - %s - - k8sClient, err = client.New(cfg, client.Options{Scheme: scheme}) - Expect(err).NotTo(HaveOccurred()) - Expect(k8sClient).NotTo(BeNil()) - - // start webhook server using Manager - webhookInstallOptions := &testEnv.WebhookInstallOptions - mgr, err := ctrl.NewManager(cfg, ctrl.Options{ - Scheme: scheme, - Host: webhookInstallOptions.LocalServingHost, - Port: webhookInstallOptions.LocalServingPort, - CertDir: webhookInstallOptions.LocalServingCertDir, - LeaderElection: false, - MetricsBindAddress: "0", - }) - Expect(err).NotTo(HaveOccurred()) - - %s - - go func() { - defer GinkgoRecover() - err = mgr.Start(ctx) - Expect(err).NotTo(HaveOccurred()) - }() - - // wait for the webhook server to get ready - dialer := &net.Dialer{Timeout: time.Second} - addrPort := fmt.Sprintf("%s:%s", webhookInstallOptions.LocalServingHost, webhookInstallOptions.LocalServingPort) - Eventually(func() error { - conn, err := tls.DialWithDialer(dialer, "tcp", addrPort, &tls.Config{InsecureSkipVerify: true}) - if err != nil { - return err - } - conn.Close() - return nil - }).Should(Succeed()) - -}) - -var _ = AfterSuite(func() { - cancel() - By("tearing down the test environment") - err := testEnv.Stop() - Expect(err).NotTo(HaveOccurred()) -}) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller.go deleted file mode 100644 index e2dd50ddc..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 controllers - -import ( - "path/filepath" - - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Controller{} - -// Controller scaffolds the file that defines the controller for a CRD or a builtin resource -// nolint:maligned -type Controller struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - ControllerRuntimeVersion string - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *Controller) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup && f.Resource.Group != "" { - f.Path = filepath.Join("controllers", "%[group]", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("controllers", "%[kind]_controller.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - log.Println(f.Path) - - f.TemplateBody = controllerTemplate - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } else { - f.IfExistsAction = machinery.Error - } - - return nil -} - -//nolint:lll -const controllerTemplate = `{{ .Boilerplate }} - -package {{ if and .MultiGroup .Resource.Group }}{{ .Resource.PackageName }}{{ else }}controllers{{ end }} - -import ( - "context" - "k8s.io/apimachinery/pkg/runtime" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/log" - {{ if not (isEmptyStr .Resource.Path) -}} - {{ .Resource.ImportAlias }} "{{ .Resource.Path }}" - {{- end }} -) - -// {{ .Resource.Kind }}Reconciler reconciles a {{ .Resource.Kind }} object -type {{ .Resource.Kind }}Reconciler struct { - client.Client - Scheme *runtime.Scheme -} - -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/finalizers,verbs=update - -// Reconcile is part of the main kubernetes reconciliation loop which aims to -// move the current state of the cluster closer to the desired state. -// TODO(user): Modify the Reconcile function to compare the state specified by -// the {{ .Resource.Kind }} object against the actual cluster state, and then -// perform operations to make the cluster state reflect the state specified by -// the user. -// -// For more details, check Reconcile and its Result here: -// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@{{ .ControllerRuntimeVersion }}/pkg/reconcile -func (r *{{ .Resource.Kind }}Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - _ = log.FromContext(ctx) - - // TODO(user): your logic here - - return ctrl.Result{}, nil -} - -// SetupWithManager sets up the controller with the Manager. -func (r *{{ .Resource.Kind }}Reconciler) SetupWithManager(mgr ctrl.Manager) error { - return ctrl.NewControllerManagedBy(mgr). - {{ if not (isEmptyStr .Resource.Path) -}} - For(&{{ .Resource.ImportAlias }}.{{ .Resource.Kind }}{}). - {{- else -}} - // Uncomment the following line adding a pointer to an instance of the controlled resource as an argument - // For(). - {{- end }} - Complete(r) -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller_suitetest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller_suitetest.go deleted file mode 100644 index c199d774f..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/controllers/controller_suitetest.go +++ /dev/null @@ -1,187 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 controllers - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &SuiteTest{} -var _ machinery.Inserter = &SuiteTest{} - -// SuiteTest scaffolds the file that sets up the controller tests -// nolint:maligned -type SuiteTest struct { - machinery.TemplateMixin - machinery.MultiGroupMixin - machinery.BoilerplateMixin - machinery.ResourceMixin - - // CRDDirectoryRelativePath define the Path for the CRD - CRDDirectoryRelativePath string - - Force bool -} - -// SetTemplateDefaults implements file.Template -func (f *SuiteTest) SetTemplateDefaults() error { - if f.Path == "" { - if f.MultiGroup && f.Resource.Group != "" { - f.Path = filepath.Join("controllers", "%[group]", "suite_test.go") - } else { - f.Path = filepath.Join("controllers", "suite_test.go") - } - } - f.Path = f.Resource.Replacer().Replace(f.Path) - - f.TemplateBody = fmt.Sprintf(controllerSuiteTestTemplate, - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - ) - - // If is multigroup the path needs to be ../../ since it has - // the group dir. - f.CRDDirectoryRelativePath = `".."` - if f.MultiGroup && f.Resource.Group != "" { - f.CRDDirectoryRelativePath = `"..", ".."` - } - - if f.Force { - f.IfExistsAction = machinery.OverwriteFile - } - - return nil -} - -const ( - importMarker = "imports" - addSchemeMarker = "scheme" -) - -// GetMarkers implements file.Inserter -func (f *SuiteTest) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - } -} - -const ( - apiImportCodeFragment = `%s "%s" -` - addschemeCodeFragment = `err = %s.AddToScheme(scheme.Scheme) -Expect(err).NotTo(HaveOccurred()) - -` -) - -// GetCodeFragments implements file.Inserter -func (f *SuiteTest) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 2) - - // Generate import code fragments - imports := make([]string, 0) - if f.Resource.Path != "" { - imports = append(imports, fmt.Sprintf(apiImportCodeFragment, f.Resource.ImportAlias(), f.Resource.Path)) - } - - // Generate add scheme code fragments - addScheme := make([]string, 0) - if f.Resource.Path != "" { - addScheme = append(addScheme, fmt.Sprintf(addschemeCodeFragment, f.Resource.ImportAlias())) - } - - // Only store code fragments in the map if the slices are non-empty - if len(imports) != 0 { - fragments[machinery.NewMarkerFor(f.Path, importMarker)] = imports - } - if len(addScheme) != 0 { - fragments[machinery.NewMarkerFor(f.Path, addSchemeMarker)] = addScheme - } - - return fragments -} - -const controllerSuiteTestTemplate = `{{ .Boilerplate }} - -{{if and .MultiGroup .Resource.Group }} -package {{ .Resource.PackageName }} -{{else}} -package controllers -{{end}} - -import ( - "path/filepath" - "testing" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/envtest" - logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - %s -) - -// These tests use Ginkgo (BDD-style Go testing framework). Refer to -// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. - -var cfg *rest.Config -var k8sClient client.Client -var testEnv *envtest.Environment - -func TestAPIs(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Controller Suite") -} - -var _ = BeforeSuite(func() { - logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) - - By("bootstrapping test environment") - testEnv = &envtest.Environment{ - CRDDirectoryPaths: []string{filepath.Join({{ .CRDDirectoryRelativePath }}, "config", "crd", "bases")}, - ErrorIfCRDPathMissing: {{ .Resource.HasAPI }}, - } - - var err error - // cfg is defined in this file globally. - cfg, err = testEnv.Start() - Expect(err).NotTo(HaveOccurred()) - Expect(cfg).NotTo(BeNil()) - - %s - - k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) - Expect(err).NotTo(HaveOccurred()) - Expect(k8sClient).NotTo(BeNil()) - -}) - -var _ = AfterSuite(func() { - By("tearing down the test environment") - err := testEnv.Stop() - Expect(err).NotTo(HaveOccurred()) -}) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerfile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerfile.go deleted file mode 100644 index 1d1c1b536..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerfile.go +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Dockerfile{} - -// Dockerfile scaffolds a file that defines the containerized build process -type Dockerfile struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Dockerfile) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "Dockerfile" - } - - f.TemplateBody = dockerfileTemplate - - return nil -} - -const dockerfileTemplate = `# Build the manager binary -FROM golang:1.19 as builder -ARG TARGETOS -ARG TARGETARCH - -WORKDIR /workspace -# Copy the Go Modules manifests -COPY go.mod go.mod -COPY go.sum go.sum -# cache deps before building and copying source so that we don't need to re-download as much -# and so that source changes don't invalidate our downloaded layer -RUN go mod download - -# Copy the go source -COPY main.go main.go -COPY api/ api/ -COPY controllers/ controllers/ - -# Build -# the GOARCH has not a default value to allow the binary be built according to the host where the command -# was called. For example, if we call make docker-build in a local env which has the Apple Silicon M1 SO -# the docker BUILDPLATFORM arg will be linux/arm64 when for Apple x86 it will be linux/amd64. Therefore, -# by leaving it empty we can ensure that the container and binary shipped on it will have the same platform. -RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go - -# Use distroless as minimal base image to package the manager binary -# Refer to https://github.com/GoogleContainerTools/distroless for more details -FROM gcr.io/distroless/static:nonroot -WORKDIR / -COPY --from=builder /workspace/manager . -USER 65532:65532 - -ENTRYPOINT ["/manager"] -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerignore.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerignore.go deleted file mode 100644 index 3826dc2b8..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/dockerignore.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &DockerIgnore{} - -// DockerIgnore scaffolds a file that defines which files should be ignored by the containerized build process -type DockerIgnore struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *DockerIgnore) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = ".dockerignore" - } - - f.TemplateBody = dockerignorefileTemplate - - return nil -} - -const dockerignorefileTemplate = `# More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file -# Ignore build and test binaries. -bin/ -testbin/ -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gitignore.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gitignore.go deleted file mode 100644 index f79f6a32d..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gitignore.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &GitIgnore{} - -// GitIgnore scaffolds a file that defines which files should be ignored by git -type GitIgnore struct { - machinery.TemplateMixin -} - -// SetTemplateDefaults implements file.Template -func (f *GitIgnore) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = ".gitignore" - } - - f.TemplateBody = gitignoreTemplate - - return nil -} - -const gitignoreTemplate = ` -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib -bin -testbin/* -Dockerfile.cross - -# Test binary, build with ` + "`go test -c`" + ` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Kubernetes Generated files - skip generated files, except for vendored files - -!vendor/**/zz_generated.* - -# editor and IDE paraphernalia -.idea -.vscode -*.swp -*.swo -*~ -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gomod.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gomod.go deleted file mode 100644 index 0191ede97..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/gomod.go +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &GoMod{} - -// GoMod scaffolds a file that defines the project dependencies -type GoMod struct { - machinery.TemplateMixin - machinery.RepositoryMixin - - ControllerRuntimeVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *GoMod) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "go.mod" - } - - f.TemplateBody = goModTemplate - - f.IfExistsAction = machinery.OverwriteFile - - return nil -} - -const goModTemplate = ` -module {{ .Repo }} - -go 1.19 - -require ( - sigs.k8s.io/controller-runtime {{ .ControllerRuntimeVersion }} -) -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack/boilerplate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack/boilerplate.go deleted file mode 100644 index 3efbe592a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack/boilerplate.go +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 hack - -import ( - "fmt" - "path/filepath" - "time" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -// DefaultBoilerplatePath is the default path to the boilerplate file -var DefaultBoilerplatePath = filepath.Join("hack", "boilerplate.go.txt") - -var _ machinery.Template = &Boilerplate{} - -// Boilerplate scaffolds a file that defines the common header for the rest of the files -type Boilerplate struct { - machinery.TemplateMixin - machinery.BoilerplateMixin - - // License is the License type to write - License string - - // Licenses maps License types to their actual string - Licenses map[string]string - - // Owner is the copyright owner - e.g. "The Kubernetes Authors" - Owner string - - // Year is the copyright year - Year string -} - -// Validate implements file.RequiresValidation -func (f Boilerplate) Validate() error { - if f.License == "" { - // A default license will be set later - } else if _, found := knownLicenses[f.License]; found { - // One of the know licenses - } else if _, found := f.Licenses[f.License]; found { - // A map containing the requested license was also provided - } else { - return fmt.Errorf("unknown specified license %s", f.License) - } - - return nil -} - -// SetTemplateDefaults implements file.Template -func (f *Boilerplate) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = DefaultBoilerplatePath - } - - if f.License == "" { - f.License = "apache2" - } - - if f.Licenses == nil { - f.Licenses = make(map[string]string, len(knownLicenses)) - } - - for key, value := range knownLicenses { - if _, hasLicense := f.Licenses[key]; !hasLicense { - f.Licenses[key] = value - } - } - - if f.Year == "" { - f.Year = fmt.Sprintf("%v", time.Now().Year()) - } - - // Boilerplate given - if len(f.Boilerplate) > 0 { - f.TemplateBody = f.Boilerplate - return nil - } - - f.TemplateBody = boilerplateTemplate - - return nil -} - -const boilerplateTemplate = `/* -{{ if .Owner -}} -Copyright {{ .Year }} {{ .Owner }}. -{{- else -}} -Copyright {{ .Year }}. -{{- end }} -{{ index .Licenses .License }}*/` - -var knownLicenses = map[string]string{ - "apache2": apache2, - "none": "", -} - -const apache2 = ` -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. -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go deleted file mode 100644 index 496fbfbd4..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/main.go +++ /dev/null @@ -1,319 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "fmt" - "path/filepath" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -const defaultMainPath = "main.go" - -var _ machinery.Template = &Main{} - -// Main scaffolds a file that defines the controller manager entry point -type Main struct { - machinery.TemplateMixin - machinery.BoilerplateMixin - machinery.DomainMixin - machinery.RepositoryMixin - machinery.ComponentConfigMixin -} - -// SetTemplateDefaults implements file.Template -func (f *Main) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = filepath.Join(defaultMainPath) - } - - f.TemplateBody = fmt.Sprintf(mainTemplate, - machinery.NewMarkerFor(f.Path, importMarker), - machinery.NewMarkerFor(f.Path, addSchemeMarker), - machinery.NewMarkerFor(f.Path, setupMarker), - ) - - return nil -} - -var _ machinery.Inserter = &MainUpdater{} - -// MainUpdater updates main.go to run Controllers -type MainUpdater struct { //nolint:maligned - machinery.RepositoryMixin - machinery.MultiGroupMixin - machinery.ResourceMixin - - // Flags to indicate which parts need to be included when updating the file - WireResource, WireController, WireWebhook bool -} - -// GetPath implements file.Builder -func (*MainUpdater) GetPath() string { - return defaultMainPath -} - -// GetIfExistsAction implements file.Builder -func (*MainUpdater) GetIfExistsAction() machinery.IfExistsAction { - return machinery.OverwriteFile -} - -const ( - importMarker = "imports" - addSchemeMarker = "scheme" - setupMarker = "builder" -) - -// GetMarkers implements file.Inserter -func (f *MainUpdater) GetMarkers() []machinery.Marker { - return []machinery.Marker{ - machinery.NewMarkerFor(defaultMainPath, importMarker), - machinery.NewMarkerFor(defaultMainPath, addSchemeMarker), - machinery.NewMarkerFor(defaultMainPath, setupMarker), - } -} - -const ( - apiImportCodeFragment = `%s "%s" -` - controllerImportCodeFragment = `"%s/controllers" -` - multiGroupControllerImportCodeFragment = `%scontrollers "%s/controllers/%s" -` - addschemeCodeFragment = `utilruntime.Must(%s.AddToScheme(scheme)) -` - reconcilerSetupCodeFragment = `if err = (&controllers.%sReconciler{ - Client: mgr.GetClient(), - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "%s") - os.Exit(1) - } -` - multiGroupReconcilerSetupCodeFragment = `if err = (&%scontrollers.%sReconciler{ - Client: mgr.GetClient(), - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "%s") - os.Exit(1) - } -` - webhookSetupCodeFragment = `if err = (&%s.%s{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create webhook", "webhook", "%s") - os.Exit(1) - } -` -) - -// GetCodeFragments implements file.Inserter -func (f *MainUpdater) GetCodeFragments() machinery.CodeFragmentsMap { - fragments := make(machinery.CodeFragmentsMap, 3) - - // If resource is not being provided we are creating the file, not updating it - if f.Resource == nil { - return fragments - } - - // Generate import code fragments - imports := make([]string, 0) - if f.WireResource { - imports = append(imports, fmt.Sprintf(apiImportCodeFragment, f.Resource.ImportAlias(), f.Resource.Path)) - } - - if f.WireController { - if !f.MultiGroup || f.Resource.Group == "" { - imports = append(imports, fmt.Sprintf(controllerImportCodeFragment, f.Repo)) - } else { - imports = append(imports, fmt.Sprintf(multiGroupControllerImportCodeFragment, - f.Resource.PackageName(), f.Repo, f.Resource.Group)) - } - } - - // Generate add scheme code fragments - addScheme := make([]string, 0) - if f.WireResource { - addScheme = append(addScheme, fmt.Sprintf(addschemeCodeFragment, f.Resource.ImportAlias())) - } - - // Generate setup code fragments - setup := make([]string, 0) - if f.WireController { - if !f.MultiGroup || f.Resource.Group == "" { - setup = append(setup, fmt.Sprintf(reconcilerSetupCodeFragment, - f.Resource.Kind, f.Resource.Kind)) - } else { - setup = append(setup, fmt.Sprintf(multiGroupReconcilerSetupCodeFragment, - f.Resource.PackageName(), f.Resource.Kind, f.Resource.Kind)) - } - } - if f.WireWebhook { - setup = append(setup, fmt.Sprintf(webhookSetupCodeFragment, - f.Resource.ImportAlias(), f.Resource.Kind, f.Resource.Kind)) - } - - // Only store code fragments in the map if the slices are non-empty - if len(imports) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, importMarker)] = imports - } - if len(addScheme) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, addSchemeMarker)] = addScheme - } - if len(setup) != 0 { - fragments[machinery.NewMarkerFor(defaultMainPath, setupMarker)] = setup - } - - return fragments -} - -var mainTemplate = `{{ .Boilerplate }} - -package main - -import ( - "crypto/tls" - "flag" - "os" - - // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) - // to ensure that exec-entrypoint and run can make use of them. - _ "k8s.io/client-go/plugin/pkg/client/auth" - - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - "sigs.k8s.io/controller-runtime/pkg/healthz" - "sigs.k8s.io/controller-runtime/pkg/webhook" - %s -) - -var ( - scheme = runtime.NewScheme() - setupLog = ctrl.Log.WithName("setup") -) - -func init() { - utilruntime.Must(clientgoscheme.AddToScheme(scheme)) - - %s -} - -func main() { -{{- if not .ComponentConfig }} - var metricsAddr string - var enableLeaderElection bool - var probeAddr string - var enableHTTP2 bool - flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") - flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") - flag.BoolVar(&enableLeaderElection, "leader-elect", false, - "Enable leader election for controller manager. " + - "Enabling this will ensure there is only one active controller manager.") - flag.BoolVar(&enableHTTP2, "enable-http2", false, - "If set, HTTP/2 will be enabled for the metrics and webhook servers") -{{- else }} - var configFile string - flag.StringVar(&configFile, "config", "", - "The controller will load its initial configuration from this file. " + - "Omit this flag to use the default configuration values. " + - "Command-line flags override configuration from this file.") -{{- end }} - opts := zap.Options{ - Development: true, - } - opts.BindFlags(flag.CommandLine) - flag.Parse() - - ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) - -{{ if not .ComponentConfig }} - // if the enable-http2 flag is false (the default), http/2 should be disabled - // due to its vulnerabilities. More specifically, disabling http/2 will - // prevent from being vulnerable to the HTTP/2 Stream Cancellation and - // Rapid Reset CVEs. For more information see: - // - https://github.com/advisories/GHSA-qppj-fm5r-hxr3 - // - https://github.com/advisories/GHSA-4374-p667-p6c8 - disableHTTP2 := func(c *tls.Config) { - setupLog.Info("disabling http/2") - c.NextProtos = []string{"http/1.1"} - } - - tlsOpts := []func(*tls.Config){} - if !enableHTTP2 { - tlsOpts = append(tlsOpts, disableHTTP2) - } - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - MetricsBindAddress: metricsAddr, - WebhookServer: &webhook.Server{ - TLSOpts: tlsOpts, - }, - Port: 9443, - HealthProbeBindAddress: probeAddr, - LeaderElection: enableLeaderElection, - LeaderElectionID: "{{ hashFNV .Repo }}.{{ .Domain }}", - // LeaderElectionReleaseOnCancel defines if the leader should step down voluntarily - // when the Manager ends. This requires the binary to immediately end when the - // Manager is stopped, otherwise, this setting is unsafe. Setting this significantly - // speeds up voluntary leader transitions as the new leader don't have to wait - // LeaseDuration time first. - // - // In the default scaffold provided, the program ends immediately after - // the manager stops, so would be fine to enable this option. However, - // if you are doing or is intended to do any operation such as perform cleanups - // after the manager stops then its usage might be unsafe. - // LeaderElectionReleaseOnCancel: true, - }) -{{- else }} - var err error - options := ctrl.Options{Scheme: scheme} - if configFile != "" { - options, err = options.AndFrom(ctrl.ConfigFile().AtPath(configFile)) - if err != nil { - setupLog.Error(err, "unable to load the config file") - os.Exit(1) - } - } - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) -{{- end }} - if err != nil { - setupLog.Error(err, "unable to start manager") - os.Exit(1) - } - - %s - - if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up health check") - os.Exit(1) - } - if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up ready check") - os.Exit(1) - } - - setupLog.Info("starting manager") - if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.Error(err, "problem running manager") - os.Exit(1) - } -} -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/makefile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/makefile.go deleted file mode 100644 index 6b5d7dfc4..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/makefile.go +++ /dev/null @@ -1,218 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 templates - -import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Makefile{} - -// Makefile scaffolds a file that defines project management CLI commands -type Makefile struct { - machinery.TemplateMixin - machinery.ComponentConfigMixin - machinery.ProjectNameMixin - - // Image is controller manager image name - Image string - // BoilerplatePath is the path to the boilerplate file - BoilerplatePath string - // Controller tools version to use in the project - ControllerToolsVersion string - // Kustomize version to use in the project - KustomizeVersion string - // ControllerRuntimeVersion version to be used to download the envtest setup script - ControllerRuntimeVersion string -} - -// SetTemplateDefaults implements file.Template -func (f *Makefile) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "Makefile" - } - - f.TemplateBody = makefileTemplate - - f.IfExistsAction = machinery.Error - - if f.Image == "" { - f.Image = "controller:latest" - } - - return nil -} - -//nolint:lll -const makefileTemplate = ` -# Image URL to use all building/pushing image targets -IMG ?= {{ .Image }} -# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. -ENVTEST_K8S_VERSION = 1.26.1 - -# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) -ifeq (,$(shell go env GOBIN)) -GOBIN=$(shell go env GOPATH)/bin -else -GOBIN=$(shell go env GOBIN) -endif - -# Setting SHELL to bash allows bash commands to be executed by recipes. -# Options are set to exit when a recipe line exits non-zero or a piped command fails. -SHELL = /usr/bin/env bash -o pipefail -.SHELLFLAGS = -ec - -.PHONY: all -all: build - -##@ General - -# The help target prints out all targets with their descriptions organized -# beneath their categories. The categories are represented by '##@' and the -# target descriptions by '##'. The awk command is responsible for reading the -# entire set of makefiles included in this invocation, looking for lines of the -# file as xyz: ## something, and then pretty-format the target and help. Then, -# if there's a line with ##@ something, that gets pretty-printed as a category. -# More info on the usage of ANSI control characters for terminal formatting: -# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters -# More info on the awk command: -# http://linuxcommand.org/lc3_adv_awk.php - -.PHONY: help -help: ## Display this help. - @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) - -##@ Development - -.PHONY: manifests -manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. - $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases - -.PHONY: generate -generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. - $(CONTROLLER_GEN) object:headerFile={{printf "%q" .BoilerplatePath}} paths="./..." - -.PHONY: fmt -fmt: ## Run go fmt against code. - go fmt ./... - -.PHONY: vet -vet: ## Run go vet against code. - go vet ./... - -.PHONY: test -test: manifests generate fmt vet envtest ## Run tests. - KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out - -##@ Build - -.PHONY: build -build: manifests generate fmt vet ## Build manager binary. - go build -o bin/manager main.go - -.PHONY: run -run: manifests generate fmt vet ## Run a controller from your host. - go run ./main.go - -# If you wish to build the manager image targeting other platforms you can use the --platform flag. -# (i.e. docker build --platform linux/arm64). However, you must enable docker buildKit for it. -# More info: https://docs.docker.com/develop/develop-images/build_enhancements/ -.PHONY: docker-build -docker-build: test ## Build docker image with the manager. - docker build -t ${IMG} . - -.PHONY: docker-push -docker-push: ## Push docker image with the manager. - docker push ${IMG} - -# PLATFORMS defines the target platforms for the manager image be built to provide support to multiple -# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to: -# - be able to use docker buildx. More info: https://docs.docker.com/build/buildx/ -# - have enabled BuildKit. More info: https://docs.docker.com/develop/develop-images/build_enhancements/ -# - be able to push the image to your registry (i.e. if you do not set a valid value via IMG=> then the export will fail) -# To adequately provide solutions that are compatible with multiple platforms, you should consider using this option. -PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le -.PHONY: docker-buildx -docker-buildx: test ## Build and push docker image for the manager for cross-platform support - # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile - sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross - - docker buildx create --name project-v3-builder - docker buildx use project-v3-builder - - docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross . - - docker buildx rm project-v3-builder - rm Dockerfile.cross - -##@ Deployment - -ifndef ignore-not-found - ignore-not-found = false -endif - -.PHONY: install -install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. - $(KUSTOMIZE) build config/crd | kubectl apply -f - - -.PHONY: uninstall -uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. - $(KUSTOMIZE) build config/crd | kubectl delete --ignore-not-found=$(ignore-not-found) -f - - -.PHONY: deploy -deploy: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config. - cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} - $(KUSTOMIZE) build config/default | kubectl apply -f - - -.PHONY: undeploy -undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. - $(KUSTOMIZE) build config/default | kubectl delete --ignore-not-found=$(ignore-not-found) -f - - -##@ Build Dependencies - -## Location to install dependencies to -LOCALBIN ?= $(shell pwd)/bin -$(LOCALBIN): - mkdir -p $(LOCALBIN) - -## Tool Binaries -KUSTOMIZE ?= $(LOCALBIN)/kustomize -CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen -ENVTEST ?= $(LOCALBIN)/setup-envtest - -## Tool Versions -KUSTOMIZE_VERSION ?= {{ .KustomizeVersion }} -CONTROLLER_TOOLS_VERSION ?= {{ .ControllerToolsVersion }} - -KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" -.PHONY: kustomize -kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. If wrong version is installed, it will be removed before downloading. -$(KUSTOMIZE): $(LOCALBIN) - @if test -x $(LOCALBIN)/kustomize && ! $(LOCALBIN)/kustomize version | grep -q $(KUSTOMIZE_VERSION); then \ - echo "$(LOCALBIN)/kustomize version is not expected $(KUSTOMIZE_VERSION). Removing it before installing."; \ - rm -rf $(LOCALBIN)/kustomize; \ - fi - test -s $(LOCALBIN)/kustomize || { curl -Ss $(KUSTOMIZE_INSTALL_SCRIPT) --output install_kustomize.sh && bash install_kustomize.sh $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN); rm install_kustomize.sh; } - -.PHONY: controller-gen -controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. If wrong version is installed, it will be overwritten. -$(CONTROLLER_GEN): $(LOCALBIN) - test -s $(LOCALBIN)/controller-gen && $(LOCALBIN)/controller-gen --version | grep -q $(CONTROLLER_TOOLS_VERSION) || \ - GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) - -.PHONY: envtest -envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. -$(ENVTEST): $(LOCALBIN) - test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest -` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/readme.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/readme.go deleted file mode 100644 index 577f5a62a..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/readme.go +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright 2022 The Kubernetes 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 templates - -import ( - "fmt" - "strings" - - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" -) - -var _ machinery.Template = &Readme{} - -// Readme scaffolds a README.md file -type Readme struct { - machinery.TemplateMixin - machinery.BoilerplateMixin - machinery.ProjectNameMixin - - License string -} - -// SetTemplateDefaults implements file.Template -func (f *Readme) SetTemplateDefaults() error { - if f.Path == "" { - f.Path = "README.md" - } - - f.License = strings.Replace( - strings.Replace(f.Boilerplate, "/*", "", 1), - "*/", "", 1) - - f.TemplateBody = fmt.Sprintf(readmeFileTemplate, - codeFence("kubectl apply -k config/samples/"), - codeFence("make docker-build docker-push IMG=/{{ .ProjectName }}:tag"), - codeFence("make deploy IMG=/{{ .ProjectName }}:tag"), - codeFence("make uninstall"), - codeFence("make undeploy"), - codeFence("make install"), - codeFence("make run"), - codeFence("make manifests")) - - return nil -} - -//nolint:lll -const readmeFileTemplate = `# {{ .ProjectName }} -// TODO(user): Add simple overview of use/purpose - -## Description -// TODO(user): An in-depth paragraph about your project and overview of use - -## Getting Started -You’ll need a Kubernetes cluster to run against. You can use [KIND](https://sigs.k8s.io/kind) to get a local cluster for testing, or run against a remote cluster. -**Note:** Your controller will automatically use the current context in your kubeconfig file (i.e. whatever cluster ` + "`kubectl cluster-info`" + ` shows). - -### Running on the cluster -1. Install Instances of Custom Resources: - -%s - -2. Build and push your image to the location specified by ` + "`IMG`" + `: - -%s - -3. Deploy the controller to the cluster with the image specified by ` + "`IMG`" + `: - -%s - -### Uninstall CRDs -To delete the CRDs from the cluster: - -%s - -### Undeploy controller -UnDeploy the controller from the cluster: - -%s - -## Contributing -// TODO(user): Add detailed information on how you would like others to contribute to this project - -### How it works -This project aims to follow the Kubernetes [Operator pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/). - -It uses [Controllers](https://kubernetes.io/docs/concepts/architecture/controller/), -which provide a reconcile function responsible for synchronizing resources until the desired state is reached on the cluster. - -### Test It Out -1. Install the CRDs into the cluster: - -%s - -2. Run your controller (this will run in the foreground, so switch to a new terminal if you want to leave it running): - -%s - -**NOTE:** You can also run this in one step by running: ` + "`make install run`" + ` - -### Modifying the API definitions -If you are editing the API definitions, generate the manifests such as CRs or CRDs using: - -%s - -**NOTE:** Run ` + "`make --help`" + ` for more information on all potential ` + "`make`" + ` targets - -More information can be found via the [Kubebuilder Documentation](https://book.kubebuilder.io/introduction.html) - -## License -{{ .License }} -` - -func codeFence(code string) string { - return "```sh" + "\n" + code + "\n" + "```" -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/webhook.go deleted file mode 100644 index b77aefadb..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/webhook.go +++ /dev/null @@ -1,109 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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 scaffolds - -import ( - "fmt" - - log "github.com/sirupsen/logrus" - "github.com/spf13/afero" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds/internal/templates/hack" -) - -var _ plugins.Scaffolder = &webhookScaffolder{} - -type webhookScaffolder struct { - config config.Config - resource resource.Resource - - // fs is the filesystem that will be used by the scaffolder - fs machinery.Filesystem - - // force indicates whether to scaffold controller files even if it exists or not - force bool -} - -// NewWebhookScaffolder returns a new Scaffolder for v2 webhook creation operations -func NewWebhookScaffolder(config config.Config, resource resource.Resource, force bool) plugins.Scaffolder { - return &webhookScaffolder{ - config: config, - resource: resource, - force: force, - } -} - -// InjectFS implements cmdutil.Scaffolder -func (s *webhookScaffolder) InjectFS(fs machinery.Filesystem) { - s.fs = fs -} - -// Scaffold implements cmdutil.Scaffolder -func (s *webhookScaffolder) Scaffold() error { - log.Println("Writing scaffold for you to edit...") - - // Load the boilerplate - boilerplate, err := afero.ReadFile(s.fs.FS, hack.DefaultBoilerplatePath) - if err != nil { - return fmt.Errorf("error scaffolding webhook: unable to load boilerplate: %w", err) - } - - // Initialize the machinery.Scaffold that will write the files to disk - scaffold := machinery.NewScaffold(s.fs, - machinery.WithConfig(s.config), - machinery.WithBoilerplate(string(boilerplate)), - machinery.WithResource(&s.resource), - ) - - // Keep track of these values before the update - doDefaulting := s.resource.HasDefaultingWebhook() - doValidation := s.resource.HasValidationWebhook() - doConversion := s.resource.HasConversionWebhook() - - if err := s.config.UpdateResource(s.resource); err != nil { - return fmt.Errorf("error updating resource: %w", err) - } - - if err := scaffold.Execute( - &api.Webhook{Force: s.force}, - &templates.MainUpdater{WireWebhook: true}, - ); err != nil { - return err - } - - if doConversion { - fmt.Println(`Webhook server has been set up for you. -You need to implement the conversion.Hub and conversion.Convertible interfaces for your CRD types.`) - } - - // TODO: Add test suite for conversion webhook after #1664 has been merged & conversion tests supported in envtest. - if doDefaulting || doValidation { - if err := scaffold.Execute( - &api.WebhookSuite{}, - ); err != nil { - return err - } - } - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/webhook.go deleted file mode 100644 index ef38fe1f5..000000000 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/webhook.go +++ /dev/null @@ -1,151 +0,0 @@ -/* -Copyright 2020 The Kubernetes 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:deprecated This package has been deprecated in favor of v4 -package v3 - -import ( - "fmt" - - "github.com/spf13/pflag" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" -) - -// defaultWebhookVersion is the default mutating/validating webhook config API version to scaffold. -const defaultWebhookVersion = "v1" - -var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} - -type createWebhookSubcommand struct { - config config.Config - // For help text. - commandName string - - options *goPlugin.Options - - resource *resource.Resource - - // force indicates that the resource should be created even if it already exists - force bool -} - -func (p *createWebhookSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { - p.commandName = cliMeta.CommandName - - subcmdMeta.Description = `Scaffold a webhook for an API resource. You can choose to scaffold defaulting, -validating and/or conversion webhooks. -` - subcmdMeta.Examples = fmt.Sprintf(` # Create defaulting and validating webhooks for Group: ship, Version: v1beta1 - # and Kind: Frigate - %[1]s create webhook --group ship --version v1beta1 --kind Frigate --defaulting --programmatic-validation - - # Create conversion webhook for Group: ship, Version: v1beta1 - # and Kind: Frigate - %[1]s create webhook --group ship --version v1beta1 --kind Frigate --conversion -`, cliMeta.CommandName) -} - -func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) { - p.options = &goPlugin.Options{} - - fs.StringVar(&p.options.Plural, "plural", "", "resource irregular plural form") - - fs.StringVar(&p.options.WebhookVersion, "webhook-version", defaultWebhookVersion, - "version of {Mutating,Validating}WebhookConfigurations to scaffold. Options: [v1, v1beta1]") - fs.BoolVar(&p.options.DoDefaulting, "defaulting", false, - "if set, scaffold the defaulting webhook") - fs.BoolVar(&p.options.DoValidation, "programmatic-validation", false, - "if set, scaffold the validating webhook") - fs.BoolVar(&p.options.DoConversion, "conversion", false, - "if set, scaffold the conversion webhook") - - fs.BoolVar(&p.force, "force", false, - "attempt to create resource even if it already exists") - - // (not required raise an error in this case) - // nolint:errcheck,gosec - fs.MarkDeprecated("webhook-version", deprecateMsg) -} - -func (p *createWebhookSubcommand) InjectConfig(c config.Config) error { - p.config = c - - return nil -} - -func (p *createWebhookSubcommand) InjectResource(res *resource.Resource) error { - p.resource = res - - p.options.UpdateResource(p.resource, p.config) - - if err := p.resource.Validate(); err != nil { - return err - } - - if !p.resource.HasDefaultingWebhook() && !p.resource.HasValidationWebhook() && !p.resource.HasConversionWebhook() { - return fmt.Errorf("%s create webhook requires at least one of --defaulting,"+ - " --programmatic-validation and --conversion to be true", p.commandName) - } - - // check if resource exist to create webhook - if r, err := p.config.GetResource(p.resource.GVK); err != nil { - return fmt.Errorf("%s create webhook requires a previously created API ", p.commandName) - } else if r.Webhooks != nil && !r.Webhooks.IsEmpty() && !p.force { - return fmt.Errorf("webhook resource already exists") - } - - // nolint:staticcheck - if pluginutil.HasDifferentWebhookVersion(p.config, p.resource.Webhooks.WebhookVersion) { - return fmt.Errorf("only one webhook version can be used for all resources, cannot add %q", - p.resource.Webhooks.WebhookVersion) - } - - return nil -} - -func (p *createWebhookSubcommand) Scaffold(fs machinery.Filesystem) error { - scaffolder := scaffolds.NewWebhookScaffolder(p.config, *p.resource, p.force) - scaffolder.InjectFS(fs) - return scaffolder.Scaffold() -} - -func (p *createWebhookSubcommand) PostScaffold() error { - if p.resource.Webhooks.WebhookVersion == "v1beta1" { - if err := applyScaffoldCustomizationsForVbeta1(); err != nil { - return err - } - } - - err := pluginutil.RunCmd("Update dependencies", "go", "mod", "tidy") - if err != nil { - return err - } - - err = pluginutil.RunCmd("Running make", "make", "generate") - if err != nil { - return err - } - fmt.Print("Next: implement your new Webhook and generate the manifests with:\n$ make manifests\n") - - return nil -} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/LICENSE b/tools/vendor/sigs.k8s.io/kubebuilder/v4/LICENSE similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/LICENSE rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/LICENSE diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha.go index 7f4d1f128..ab392e323 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha.go @@ -21,7 +21,7 @@ import ( "strings" "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha" + "sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha" ) const ( @@ -35,7 +35,7 @@ var alphaCommands = []*cobra.Command{ func newAlphaCommand() *cobra.Command { cmd := &cobra.Command{ - //TODO: If we need to create alpha commands please add a new file for each command + // TODO: If we need to create alpha commands please add a new file for each command } return cmd } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha/generate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha/generate.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha/generate.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha/generate.go index d35a4219b..48e991fbd 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/alpha/generate.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/alpha/generate.go @@ -17,7 +17,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/rescaffold" + "sigs.k8s.io/kubebuilder/v4/pkg/rescaffold" ) // NewScaffoldCommand return a new scaffold command diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/api.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/api.go index 6d4f8a179..2d43aeec1 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/api.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const apiErrorMsg = "failed to create API" diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cli.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cli.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cli.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cli.go index a5d08b429..e4dc3fff9 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cli.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cli.go @@ -26,11 +26,11 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - yamlstore "sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + yamlstore "sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const ( @@ -444,7 +444,7 @@ func (c *CLI) addExtraCommands() error { func (c CLI) printDeprecationWarnings() { for _, p := range c.resolvedPlugins { if p != nil && p.(plugin.Deprecated) != nil && len(p.(plugin.Deprecated).DeprecationWarning()) > 0 { - fmt.Fprintf(os.Stderr, noticeColor, fmt.Sprintf(deprecationFmt, p.(plugin.Deprecated).DeprecationWarning())) + _, _ = fmt.Fprintf(os.Stderr, noticeColor, fmt.Sprintf(deprecationFmt, p.(plugin.Deprecated).DeprecationWarning())) } } } @@ -462,3 +462,8 @@ func (c CLI) metadata() plugin.CLIMetadata { func (c CLI) Run() error { return c.cmd.Execute() } + +// Command returns the underlying root command. +func (c CLI) Command() *cobra.Command { + return c.cmd +} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cmd_helpers.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cmd_helpers.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cmd_helpers.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cmd_helpers.go index cbcb1c7e9..a800806eb 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/cmd_helpers.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/cmd_helpers.go @@ -23,12 +23,12 @@ import ( "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/config/store" - yamlstore "sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config/store" + yamlstore "sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) // noResolvedPluginError is returned by subcommands that require a plugin when none was resolved. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/completion.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/completion.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/completion.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/completion.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/create.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/create.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/create.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/create.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/doc.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/doc.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/doc.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/doc.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/edit.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/edit.go index 8f8677904..b5a4b8ce7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/edit.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const editErrorMsg = "failed to edit project" diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/init.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/init.go index 38837e544..1ad2a6783 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/init.go @@ -24,8 +24,8 @@ import ( "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const initErrorMsg = "failed to initialize project" diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/options.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/options.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/options.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/options.go index a720239ed..208b1c748 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/options.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/options.go @@ -29,11 +29,11 @@ import ( "github.com/spf13/afero" "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/external" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/external" ) var retrievePluginsRoot = getPluginsRoot @@ -153,6 +153,18 @@ func WithCompletion() Option { } } +// WithFilesystem is an Option that allows to set the filesystem used in the CLI. +func WithFilesystem(fs machinery.Filesystem) Option { + return func(c *CLI) error { + if fs.FS == nil { + return errors.New("invalid filesystem") + } + + c.fs = fs + return nil + } +} + // parseExternalPluginArgs returns the program arguments. func parseExternalPluginArgs() (args []string) { // Loop through os.Args and only get flags and their values that should be passed to the plugins @@ -294,7 +306,7 @@ func DiscoverExternalPlugins(fs afero.Fs) (ps []plugin.Plugin, err error) { ep := external.Plugin{ PName: pluginInfo.Name(), Path: filepath.Join(pluginsRoot, pluginInfo.Name(), version.Name(), pluginFile.Name()), - PSupportedProjectVersions: []config.Version{cfgv2.Version, cfgv3.Version}, + PSupportedProjectVersions: []config.Version{cfgv3.Version}, Args: parseExternalPluginArgs(), } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/resource.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/resource.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/resource.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/resource.go index e181fcc2d..87973f2cb 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/resource.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/resource.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) const ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/root.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/root.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/root.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/root.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/version.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/version.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/version.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/version.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/webhook.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/webhook.go index bea5b0b17..ad4ae80e4 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/cli/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/cli/webhook.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) const webhookErrorMsg = "failed to create webhook" diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/errors.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/errors.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/errors.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/errors.go index 4bbbd43da..cede46cce 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/errors.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/errors.go @@ -19,7 +19,7 @@ package config import ( "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // UnsupportedVersionError is returned by New when a project configuration version is not supported. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/interface.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/interface.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/interface.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/interface.go index e7659e80a..9ce7da8ba 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/interface.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/interface.go @@ -17,7 +17,7 @@ limitations under the License. package config import ( - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // Config defines the interface that project configuration types must follow. @@ -62,16 +62,6 @@ type Config interface { // ClearMultiGroup disables multi-group. ClearMultiGroup() error - // IsComponentConfig checks if component config is enabled. - // This method was introduced in project version 3. - IsComponentConfig() bool - // SetComponentConfig enables component config. - // This method was introduced in project version 3. - SetComponentConfig() error - // ClearComponentConfig disables component config. - // This method was introduced in project version 3. - ClearComponentConfig() error - /* Resources */ // ResourcesLength returns the number of tracked resources. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/registry.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/registry.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/registry.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/registry.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/errors.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/errors.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/errors.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/errors.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/interface.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/interface.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/interface.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/interface.go index 8014bcaa2..f615d513e 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/interface.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/interface.go @@ -17,7 +17,7 @@ limitations under the License. package store import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) // Store represents a persistence backend for config.Config diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml/store.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml/store.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml/store.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml/store.go index 8f3531dc6..3f3bd766b 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml/store.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml/store.go @@ -23,9 +23,9 @@ import ( "github.com/spf13/afero" "sigs.k8s.io/yaml" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/config/store" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config/store" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) const ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v3/config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/v3/config.go similarity index 93% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v3/config.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/v3/config.go index 58f2eda3d..a3420bb3e 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/v3/config.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/v3/config.go @@ -22,8 +22,8 @@ import ( "sigs.k8s.io/yaml" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // Version is the config.Version for project configuration 3 @@ -63,8 +63,7 @@ type Cfg struct { PluginChain stringSlice `json:"layout,omitempty"` // Boolean fields - MultiGroup bool `json:"multigroup,omitempty"` - ComponentConfig bool `json:"componentConfig,omitempty"` + MultiGroup bool `json:"multigroup,omitempty"` // Resources Resources []resource.Resource `json:"resources,omitempty"` @@ -154,23 +153,6 @@ func (c *Cfg) ClearMultiGroup() error { return nil } -// IsComponentConfig implements config.Config -func (c Cfg) IsComponentConfig() bool { - return c.ComponentConfig -} - -// SetComponentConfig implements config.Config -func (c *Cfg) SetComponentConfig() error { - c.ComponentConfig = true - return nil -} - -// ClearComponentConfig implements config.Config -func (c *Cfg) ClearComponentConfig() error { - c.ComponentConfig = false - return nil -} - // ResourcesLength implements config.Config func (c Cfg) ResourcesLength() int { return len(c.Resources) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/version.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/version.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/version.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/version.go index 9d6cd86ed..d2f11c8e4 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/config/version.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/config/version.go @@ -23,7 +23,7 @@ import ( "strconv" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" ) var ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/internal/validation/dns.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/internal/validation/dns.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/internal/validation/dns.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/internal/validation/dns.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/errors.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/errors.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/errors.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/errors.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/file.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/file.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/file.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/file.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/filesystem.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/filesystem.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/filesystem.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/filesystem.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/funcmap.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/funcmap.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/funcmap.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/funcmap.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/injector.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/injector.go similarity index 88% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/injector.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/injector.go index cbce1a05c..84593d645 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/injector.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/injector.go @@ -17,8 +17,8 @@ limitations under the License. package machinery import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // injector is used to inject certain fields to file templates. @@ -49,9 +49,6 @@ func (i injector) injectInto(builder Builder) { if builderWithMultiGroup, hasMultiGroup := builder.(HasMultiGroup); hasMultiGroup { builderWithMultiGroup.InjectMultiGroup(i.config.IsMultiGroup()) } - if builderWithComponentConfig, hasComponentConfig := builder.(HasComponentConfig); hasComponentConfig { - builderWithComponentConfig.InjectComponentConfig(i.config.IsComponentConfig()) - } } // Inject boilerplate if builderWithBoilerplate, hasBoilerplate := builder.(HasBoilerplate); hasBoilerplate { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/interfaces.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/interfaces.go similarity index 78% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/interfaces.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/interfaces.go index cf28d9c8f..4b83e219f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/interfaces.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/interfaces.go @@ -19,7 +19,7 @@ package machinery import ( "text/template" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // Builder defines the basic methods that any file builder must implement @@ -83,20 +83,6 @@ type HasMultiGroup interface { InjectMultiGroup(bool) } -// Deprecated: The ComponentConfig has been deprecated in the Controller-Runtime since its version 0.15.0. -// Fur further information see: https://github.com/kubernetes-sigs/controller-runtime/issues/895 -// Moreover, it has undergone breaking changes and is no longer functioning as intended. -// As a result, Kubebuilder, which heavily relies on the Controller Runtime, has also deprecated this feature, -// no longer guaranteeing its functionality from version 3.11.0 onwards. -// -// Please, be aware that it will force Kubebuilder remove this option soon in future release. -// -// HasComponentConfig allows the component-config flag to be used on a template -type HasComponentConfig interface { - // InjectComponentConfig sets the template component-config flag - InjectComponentConfig(bool) -} - // HasBoilerplate allows a boilerplate to be used on a template type HasBoilerplate interface { // InjectBoilerplate sets the template boilerplate diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/marker.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/marker.go similarity index 69% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/marker.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/marker.go index e048615c6..194e795d3 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/marker.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/marker.go @@ -22,7 +22,7 @@ import ( "strings" ) -const prefix = "+kubebuilder:scaffold:" +const kbPrefix = "+kubebuilder:scaffold:" var commentsByExt = map[string]string{ ".go": "//", @@ -33,16 +33,28 @@ var commentsByExt = map[string]string{ // Marker represents a machine-readable comment that will be used for scaffolding purposes type Marker struct { + prefix string comment string value string } -// NewMarkerFor creates a new marker customized for the specific file -// Supported file extensions: .go, .yaml, .yml +// NewMarkerFor creates a new marker customized for the specific file. The created marker +// is prefixed with `+kubebuilder:scaffold:` the default prefix for kubebuilder. +// Supported file extensions: .go, .yaml, .yml. func NewMarkerFor(path string, value string) Marker { + return NewMarkerWithPrefixFor(kbPrefix, path, value) +} + +// NewMarkerWithPrefixFor creates a new custom prefixed marker customized for the specific file +// Supported file extensions: .go, .yaml, .yml +func NewMarkerWithPrefixFor(prefix string, path string, value string) Marker { ext := filepath.Ext(path) if comment, found := commentsByExt[ext]; found { - return Marker{comment, value} + return Marker{ + prefix: markerPrefix(prefix), + comment: comment, + value: value, + } } extensions := make([]string, 0, len(commentsByExt)) @@ -54,13 +66,13 @@ func NewMarkerFor(path string, value string) Marker { // String implements Stringer func (m Marker) String() string { - return m.comment + prefix + m.value + return m.comment + " " + m.prefix + m.value } // EqualsLine compares a marker with a string representation to check if they are the same marker func (m Marker) EqualsLine(line string) bool { line = strings.TrimSpace(strings.TrimPrefix(strings.TrimSpace(line), m.comment)) - return line == prefix+m.value + return line == m.prefix+m.value } // CodeFragments represents a set of code fragments @@ -69,3 +81,17 @@ type CodeFragments []string // CodeFragmentsMap binds Markers and CodeFragments together type CodeFragmentsMap map[Marker]CodeFragments + +func markerPrefix(prefix string) string { + trimmed := strings.TrimSpace(prefix) + var builder strings.Builder + if !strings.HasPrefix(trimmed, "+") { + builder.WriteString("+") + } + builder.WriteString(trimmed) + if !strings.HasSuffix(trimmed, ":") { + builder.WriteString(":") + } + + return builder.String() +} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/mixins.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/mixins.go similarity index 80% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/mixins.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/mixins.go index a4045f56e..0f1493528 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/mixins.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/mixins.go @@ -17,7 +17,7 @@ limitations under the License. package machinery import ( - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // PathMixin provides file builders with a path field @@ -129,25 +129,6 @@ func (m *MultiGroupMixin) InjectMultiGroup(flag bool) { m.MultiGroup = flag } -// Deprecated: The ComponentConfig has been deprecated in the Controller-Runtime since its version 0.15.0. -// Fur further information see: https://github.com/kubernetes-sigs/controller-runtime/issues/895 -// Moreover, it has undergone breaking changes and is no longer functioning as intended. -// As a result, Kubebuilder, which heavily relies on the Controller Runtime, has also deprecated this feature, -// no longer guaranteeing its functionality from version 3.11.0 onwards. -// -// Please, be aware that it will force Kubebuilder remove this option soon in future release. -// -// ComponentConfigMixin provides templates with a injectable component-config flag field -type ComponentConfigMixin struct { - // ComponentConfig is the component-config flag - ComponentConfig bool -} - -// InjectComponentConfig implements HasComponentConfig -func (m *ComponentConfigMixin) InjectComponentConfig(flag bool) { - m.ComponentConfig = flag -} - // BoilerplateMixin provides templates with a injectable boilerplate field type BoilerplateMixin struct { // Boilerplate is the contents of a Boilerplate go header file diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/scaffold.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/scaffold.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/scaffold.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/scaffold.go index ffc5ba1c2..3c016033a 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/machinery/scaffold.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/machinery/scaffold.go @@ -28,8 +28,8 @@ import ( "github.com/spf13/afero" "golang.org/x/tools/imports" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) const ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/api.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/api.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/gvk.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/gvk.go similarity index 90% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/gvk.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/gvk.go index a17e7fd28..266859be7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/gvk.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/gvk.go @@ -18,24 +18,19 @@ package resource import ( "fmt" - "regexp" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" + "sigs.k8s.io/kubebuilder/v4/pkg/internal/validation" ) const ( - versionPattern = "^v\\d+(?:alpha\\d+|beta\\d+)?$" + versionInternal = "__internal" groupRequired = "group cannot be empty if the domain is empty" versionRequired = "version cannot be empty" kindRequired = "kind cannot be empty" ) -var ( - versionRegex = regexp.MustCompile(versionPattern) -) - // GVK stores the Group - Version - Kind triplet that uniquely identifies a resource. // In kubebuilder, the k8s fully qualified group is stored as Group and Domain to improve UX. type GVK struct { @@ -60,8 +55,9 @@ func (gvk GVK) Validate() error { if gvk.Version == "" { return fmt.Errorf(versionRequired) } - if !versionRegex.MatchString(gvk.Version) { - return fmt.Errorf("Version must match %s (was %s)", versionPattern, gvk.Version) + errs := validation.IsDNS1123Subdomain(gvk.Version) + if len(errs) > 0 && gvk.Version != versionInternal { + return fmt.Errorf("Version must respect DNS-1123 (was %s)", gvk.Version) } // Check if kind has a valid DNS1035 label value diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/resource.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/resource.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/resource.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/resource.go index b2b9504a2..7d4a9c409 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/resource.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/resource.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" + "sigs.k8s.io/kubebuilder/v4/pkg/internal/validation" ) // Resource contains the information required to scaffold files for a resource. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/utils.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/utils.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/utils.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/utils.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/webhooks.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/webhooks.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/resource/webhooks.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/resource/webhooks.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/stage/stage.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/stage/stage.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/model/stage/stage.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/model/stage/stage.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/bundle.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/bundle.go similarity index 64% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/bundle.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/bundle.go index 47e4f879e..f5dd6fc6c 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/bundle.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/bundle.go @@ -19,7 +19,7 @@ package plugin import ( "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) type bundle struct { @@ -58,42 +58,6 @@ func WithDeprecationMessage(msg string) BundleOption { } -// NewBundle creates a new Bundle with the provided name and version, and that wraps the provided plugins. -// The list of supported project versions is computed from the provided plugins. -// -// Deprecated: Use the NewBundle informing the options from now one. Replace its use for as the -// following example. Example: -// -// mylanguagev1Bundle, _ := plugin.NewBundle(plugin.WithName(language.DefaultNameQualifier), -// plugin.WithVersion(plugin.Version{Number: 1}), -// plugin.WithPlugins(kustomizecommonv1.Plugin{}, mylanguagev1.Plugin{}), -func NewBundle(name string, version Version, deprecateWarning string, plugins ...Plugin) (Bundle, error) { - supportedProjectVersions := CommonSupportedProjectVersions(plugins...) - if len(supportedProjectVersions) == 0 { - return nil, fmt.Errorf("in order to bundle plugins, they must all support at least one common project version") - } - - // Plugins may be bundles themselves, so unbundle here - // NOTE(Adirio): unbundling here ensures that Bundle.Plugin always returns a flat list of Plugins instead of also - // including Bundles, and therefore we don't have to use a recursive algorithm when resolving. - allPlugins := make([]Plugin, 0, len(plugins)) - for _, plugin := range plugins { - if pluginBundle, isBundle := plugin.(Bundle); isBundle { - allPlugins = append(allPlugins, pluginBundle.Plugins()...) - } else { - allPlugins = append(allPlugins, plugin) - } - } - - return bundle{ - name: name, - version: version, - plugins: allPlugins, - supportedProjectVersions: supportedProjectVersions, - deprecateWarning: deprecateWarning, - }, nil -} - // NewBundleWithOptions creates a new Bundle with the provided BundleOptions. // The list of supported project versions is computed from the provided plugins in options. func NewBundleWithOptions(opts ...BundleOption) (Bundle, error) { @@ -149,7 +113,7 @@ func (b bundle) Plugins() []Plugin { return b.plugins } -// Plugins implements Bundle +// DeprecationWarning return the warning message func (b bundle) DeprecationWarning() string { return b.deprecateWarning } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/errors.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/errors.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/errors.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/errors.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/external/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/external/types.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/external/types.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/external/types.go index e9ac27d74..914ab054d 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/external/types.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/external/types.go @@ -16,7 +16,7 @@ limitations under the License. package external -import "sigs.k8s.io/kubebuilder/v3/pkg/plugin" +import "sigs.k8s.io/kubebuilder/v4/pkg/plugin" // PluginRequest contains all information kubebuilder received from the CLI // and plugins executed before it. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/filter.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/filter.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/filter.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/filter.go index 041c5e1c6..d678b081e 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/filter.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/filter.go @@ -19,7 +19,7 @@ package plugin import ( "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) // FilterPluginsByKey returns the set of plugins that match the provided key (may be not-fully qualified) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/helpers.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/helpers.go similarity index 82% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/helpers.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/helpers.go index a957d4cb0..4898358c7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/helpers.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/helpers.go @@ -22,8 +22,8 @@ import ( "sort" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/internal/validation" ) // KeyFor returns a Plugin's unique identifying string. @@ -40,26 +40,6 @@ func SplitKey(key string) (string, string) { return keyParts[0], keyParts[1] } -// GetShortName returns plugin's short name (name before domain) if name -// is fully qualified (has a domain suffix), otherwise GetShortName returns name. -// Deprecated -func GetShortName(name string) string { - return strings.SplitN(name, ".", 2)[0] -} - -// Deprecated: it was added to ensure backwards compatibility and should -// be removed when we remove the go/v3 plugin -// IsLegacyLayout returns true when is possible to identify that the project -// was scaffolded with the previous layout -func IsLegacyLayout(config config.Config) bool { - for _, pluginKey := range config.GetPluginChain() { - if strings.Contains(pluginKey, "go.kubebuilder.io/v3") || strings.Contains(pluginKey, "go.kubebuilder.io/v2") { - return true - } - } - return false -} - // Validate ensures a Plugin is valid. func Validate(p Plugin) error { if err := validateName(p.Name()); err != nil { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/metadata.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/metadata.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/metadata.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/metadata.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/plugin.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/plugin.go index 564c238b3..0a22ac0cf 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/plugin.go @@ -17,7 +17,7 @@ limitations under the License. package plugin import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) // Plugin is an interface that defines the common base for all plugins. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/subcommand.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/subcommand.go similarity index 95% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/subcommand.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/subcommand.go index 30985f3dd..acf5f0d45 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/subcommand.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/subcommand.go @@ -19,9 +19,9 @@ package plugin import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) // UpdatesMetadata is an interface that implements the optional metadata update method. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/exec.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/exec.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/exec.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/exec.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/stdin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/stdin.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/stdin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/stdin.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/util.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/util.go similarity index 78% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/util.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/util.go index ebf5418ad..407e32584 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/util/util.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/util/util.go @@ -97,6 +97,36 @@ func InsertCodeIfNotExist(filename, target, code string) error { return InsertCode(filename, target, code) } +// AppendCodeIfNotExist checks if the code does not already exist in the file, and if not, appends it to the end. +func AppendCodeIfNotExist(filename, code string) error { + contents, err := os.ReadFile(filename) + if err != nil { + return err + } + + if strings.Contains(string(contents), code) { + return nil // Code already exists, no need to append. + } + + return AppendCodeAtTheEnd(filename, code) +} + +// AppendCodeAtTheEnd appends the given code at the end of the file. +func AppendCodeAtTheEnd(filename, code string) error { + f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) + if err != nil { + return err + } + defer func() { + if err := f.Close(); err != nil { + return + } + }() + + _, err = f.WriteString(code) + return err +} + // UncommentCode searches for target in the file and remove the comment prefix // of the target content. The target content may span multiple lines. func UncommentCode(filename, target, prefix string) error { @@ -146,6 +176,48 @@ func UncommentCode(filename, target, prefix string) error { return os.WriteFile(filename, out.Bytes(), 0644) } +// CommentCode searches for target in the file and adds the comment prefix +// to the target content. The target content may span multiple lines. +func CommentCode(filename, target, prefix string) error { + // Read the file content + content, err := os.ReadFile(filename) + if err != nil { + return err + } + strContent := string(content) + + // Find the target code to be commented + idx := strings.Index(strContent, target) + if idx < 0 { + return fmt.Errorf("unable to find the code %s to be commented", target) + } + + // Create a buffer to hold the modified content + out := new(bytes.Buffer) + _, err = out.Write(content[:idx]) + if err != nil { + return err + } + + // Add the comment prefix to each line of the target code + scanner := bufio.NewScanner(bytes.NewBufferString(target)) + for scanner.Scan() { + _, err := out.WriteString(prefix + scanner.Text() + "\n") + if err != nil { + return err + } + } + + // Write the rest of the file content + _, err = out.Write(content[idx+len(target):]) + if err != nil { + return err + } + + // Write the modified content back to the file + return os.WriteFile(filename, out.Bytes(), 0644) +} + // ImplementWebhooks will mock an webhook data func ImplementWebhooks(filename string) error { // false positive diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/version.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/version.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/version.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/version.go index 8f8a4bed4..fb4c0e834 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugin/version.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugin/version.go @@ -22,7 +22,7 @@ import ( "strconv" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" ) var ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/api.go similarity index 86% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/api.go index 98059f0ae..5ca0ca619 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/api.go @@ -17,9 +17,9 @@ limitations under the License. package v2 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds" ) var _ plugin.CreateAPISubcommand = &createAPISubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/create.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/create.go similarity index 93% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/create.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/create.go index a0aac2764..cc96b4d86 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/create.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/create.go @@ -21,8 +21,8 @@ import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) type createSubcommand struct { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/init.go similarity index 70% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/init.go index fbe022ce0..9f67953e0 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/init.go @@ -24,11 +24,11 @@ import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/internal/validation" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/internal/validation" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds" ) var _ plugin.InitSubcommand = &initSubcommand{} @@ -37,9 +37,8 @@ type initSubcommand struct { config config.Config // config options - domain string - name string - componentConfig bool + domain string + name string } func (p *initSubcommand) UpdateMetadata(cliMeta plugin.CLIMetadata, subcmdMeta *plugin.SubcommandMetadata) { @@ -60,13 +59,6 @@ NOTE: This plugin requires kustomize version v5 and kubectl >= 1.22. func (p *initSubcommand) BindFlags(fs *pflag.FlagSet) { fs.StringVar(&p.domain, "domain", "my.domain", "domain for groups") fs.StringVar(&p.name, "project-name", "", "name of this project") - fs.BoolVar(&p.componentConfig, "component-config", false, - "create a versioned ComponentConfig file, may be 'true' or 'false'") - _ = fs.MarkDeprecated("component-config", "the ComponentConfig has been deprecated in the "+ - "Controller-Runtime since its version 0.15.0. Moreover, it has undergone breaking changes and is no longer "+ - "functioning as intended. As a result, this tool, which heavily relies on the Controller Runtime, "+ - "has also deprecated this feature, no longer guaranteeing its functionality from version 3.11.0 onwards. "+ - "You can find additional details on https://github.com/kubernetes-sigs/controller-runtime/issues/895.") } func (p *initSubcommand) InjectConfig(c config.Config) error { @@ -92,12 +84,6 @@ func (p *initSubcommand) InjectConfig(c config.Config) error { return err } - if p.componentConfig { - if err := p.config.SetComponentConfig(); err != nil { - return err - } - } - return nil } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/plugin.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/plugin.go index 22b6e5de4..c47e8067f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/plugin.go @@ -17,15 +17,15 @@ limitations under the License. package v2 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" ) // KustomizeVersion is the kubernetes-sigs/kustomize version to be used in the project -const KustomizeVersion = "v5.3.0" +const KustomizeVersion = "v5.4.2" const pluginName = "kustomize.common." + plugins.DefaultNameQualifier diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/api.go similarity index 78% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/api.go index dc875d012..e0b4b6474 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/api.go @@ -20,16 +20,16 @@ import ( "fmt" "strings" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd" + pluginutil "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd" log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples" ) var _ plugins.Scaffolder = &apiScaffolder{} @@ -102,28 +102,37 @@ func (s *apiScaffolder) Scaffold() error { // Add scaffolded CRD Editor and Viewer roles in config/rbac/kustomization.yaml rbacKustomizeFilePath := "config/rbac/kustomization.yaml" - comment := ` -# For each CRD, "Editor" and "Viewer" roles are scaffolded by -# default, aiding admins in cluster management. Those roles are -# not used by the Project itself. You can comment the following lines -# if you do not want those helpers be installed with your Project.` - err = pluginutil.InsertCodeIfNotExist(rbacKustomizeFilePath, - "- auth_proxy_client_clusterrole.yaml", comment) + err = pluginutil.AppendCodeIfNotExist(rbacKustomizeFilePath, + editViewRulesCommentFragment) if err != nil { - log.Errorf("Unable to add a comment in the file "+ + log.Errorf("Unable to append the edit/view roles comment in the file "+ "%s.", rbacKustomizeFilePath) } crdName := strings.ToLower(s.resource.Kind) if s.config.IsMultiGroup() && s.resource.Group != "" { crdName = strings.ToLower(s.resource.Group) + "_" + crdName } - err = pluginutil.InsertCodeIfNotExist(rbacKustomizeFilePath, comment, + err = pluginutil.InsertCodeIfNotExist(rbacKustomizeFilePath, editViewRulesCommentFragment, fmt.Sprintf("\n- %[1]s_editor_role.yaml\n- %[1]s_viewer_role.yaml", crdName)) if err != nil { log.Errorf("Unable to add Editor and Viewer roles in the file "+ "%s.", rbacKustomizeFilePath) } + // Add an empty line at the end of the file + err = pluginutil.AppendCodeIfNotExist(rbacKustomizeFilePath, + ` + +`) + if err != nil { + log.Errorf("Unable to append empty line at the end of the file"+ + "%s.", rbacKustomizeFilePath) + } } return nil } + +const editViewRulesCommentFragment = `# For each CRD, "Editor" and "Viewer" roles are scaffolded by +# default, aiding admins in cluster management. Those roles are +# not used by the Project itself. You can comment the following lines +# if you do not want those helpers be installed with your Project.` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/init.go similarity index 76% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/init.go index baea4bb55..0d9442787 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/init.go @@ -19,13 +19,13 @@ package scaffolds import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac" ) const ( @@ -64,29 +64,24 @@ func (s *initScaffolder) Scaffold() error { templates := []machinery.Builder{ &rbac.Kustomization{}, - &rbac.AuthProxyRole{}, - &rbac.AuthProxyRoleBinding{}, - &rbac.AuthProxyService{}, - &rbac.AuthProxyClientRole{}, + &kdefault.MetricsService{}, &rbac.RoleBinding{}, // We need to create a Role because if the project // has not CRD define the controller-gen will not generate this file &rbac.Role{}, + &rbac.MetricsAuthRole{}, + &rbac.MetricsAuthRoleBinding{}, + &rbac.MetricsReaderRole{}, &rbac.LeaderElectionRole{}, &rbac.LeaderElectionRoleBinding{}, &rbac.ServiceAccount{}, &manager.Kustomization{}, + &kdefault.ManagerMetricsPatch{}, &manager.Config{Image: imageName}, &kdefault.Kustomization{}, - &kdefault.ManagerAuthProxyPatch{}, - &kdefault.ManagerConfigPatch{}, &prometheus.Kustomization{}, &prometheus.Monitor{}, } - if s.config.IsComponentConfig() { - templates = append(templates, &manager.ControllerManagerConfig{}) - } - return scaffold.Execute(templates...) } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go index 6a5376313..04bf0cdd1 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/certificate.go @@ -19,7 +19,7 @@ package certmanager import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Certificate{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go index 2e31a62d4..446a694b8 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomization.go @@ -19,7 +19,7 @@ package certmanager import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go index 981fe79c2..974303b81 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager/kustomizeconfig.go @@ -19,7 +19,7 @@ package certmanager import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &KustomizeConfig{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go index badbb55cd..b77d2137b 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomization.go @@ -20,7 +20,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go index c5006e2b1..00376b0be 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/kustomizeconfig.go @@ -19,7 +19,7 @@ package crd import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &KustomizeConfig{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go index 526f17da5..0ef72c500 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablecainjection_patch.go @@ -19,7 +19,7 @@ package patches import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &EnableCAInjectionPatch{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go index 28452cc96..3bb955e53 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches/enablewebhook_patch.go @@ -19,7 +19,7 @@ package patches import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &EnableWebhookPatch{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go index 8420149f3..b327b2de2 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/enablecainection_patch.go @@ -19,7 +19,7 @@ package kdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &WebhookCAInjectionPatch{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go similarity index 92% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go index 319bcf1a6..7c9f9ec84 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/kustomization.go @@ -19,7 +19,7 @@ package kdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} @@ -28,7 +28,6 @@ var _ machinery.Template = &Kustomization{} type Kustomization struct { machinery.TemplateMixin machinery.ProjectNameMixin - machinery.ComponentConfigMixin } // SetTemplateDefaults implements file.Template @@ -71,19 +70,16 @@ resources: #- ../certmanager # [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. #- ../prometheus +# [METRICS] Expose the controller manager metrics service. +- metrics_service.yaml +# Uncomment the patches line if you enable Metrics, and/or are using webhooks and cert-manager patches: -# Protect the /metrics endpoint by putting it behind auth. -# If you want your controller-manager to expose the /metrics -# endpoint w/o any authn/z, please comment the following line. -- path: manager_auth_proxy_patch.yaml - -{{ if .ComponentConfig -}} -# Mount the controller config file for loading manager configurations -# through a ComponentConfig type -- path: manager_config_patch.yaml - -{{ end -}} +# [METRICS] The following patch will enable the metrics endpoint using HTTPS and the port :8443. +# More info: https://book.kubebuilder.io/reference/metrics +- path: manager_metrics_patch.yaml + target: + kind: Deployment # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in # crd/kustomization.yaml diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_metrics_patch.go similarity index 53% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_metrics_patch.go index 1faa0750c..6cd3c4bd6 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/manager_metrics_patch.go @@ -14,46 +14,36 @@ See the License for the specific language governing permissions and limitations under the License. */ -package manager +package kdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) -var _ machinery.Template = &Kustomization{} +var _ machinery.Template = &ManagerMetricsPatch{} -// Kustomization scaffolds a file that defines the kustomization scheme for the manager folder -type Kustomization struct { +// ManagerMetricsPatch scaffolds a file that defines the patch that enables prometheus metrics for the manager +type ManagerMetricsPatch struct { machinery.TemplateMixin - machinery.ComponentConfigMixin } // SetTemplateDefaults implements file.Template -func (f *Kustomization) SetTemplateDefaults() error { +func (f *ManagerMetricsPatch) SetTemplateDefaults() error { if f.Path == "" { - f.Path = filepath.Join("config", "manager", "kustomization.yaml") + f.Path = filepath.Join("config", "default", "manager_metrics_patch.yaml") } - f.TemplateBody = kustomizeManagerTemplate + f.TemplateBody = kustomizeMetricsPatchTemplate f.IfExistsAction = machinery.Error return nil } -const kustomizeManagerTemplate = `resources: -- manager.yaml - -{{- if .ComponentConfig }} - -generatorOptions: - disableNameSuffixHash: true - -configMapGenerator: -- name: manager-config - files: - - controller_manager_config.yaml -{{- end }} +const kustomizeMetricsPatchTemplate = `# This patch adds the args to allow exposing the metrics endpoint using HTTPS +- op: add + path: /spec/template/spec/containers/0/args/0 + value: --metrics-bind-address=:8443 ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/metrics_service.go similarity index 70% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/metrics_service.go index 219efc86e..06a299902 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/auth_proxy_service.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/metrics_service.go @@ -14,34 +14,34 @@ See the License for the specific language governing permissions and limitations under the License. */ -package rbac +package kdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) -var _ machinery.Template = &AuthProxyService{} +var _ machinery.Template = &MetricsService{} -// AuthProxyService scaffolds a file that defines the service for the auth proxy -type AuthProxyService struct { +// MetricsService scaffolds a file that defines the service for the auth proxy +type MetricsService struct { machinery.TemplateMixin machinery.ProjectNameMixin } // SetTemplateDefaults implements file.Template -func (f *AuthProxyService) SetTemplateDefaults() error { +func (f *MetricsService) SetTemplateDefaults() error { if f.Path == "" { - f.Path = filepath.Join("config", "rbac", "auth_proxy_service.yaml") + f.Path = filepath.Join("config", "default", "metrics_service.yaml") } - f.TemplateBody = authProxyServiceTemplate + f.TemplateBody = metricsServiceTemplate return nil } -const authProxyServiceTemplate = `apiVersion: v1 +const metricsServiceTemplate = `apiVersion: v1 kind: Service metadata: labels: @@ -55,7 +55,7 @@ spec: - name: https port: 8443 protocol: TCP - targetPort: https + targetPort: 8443 selector: control-plane: controller-manager ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go index 7f993dbd3..5bf6c1913 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault/webhook_manager_patch.go @@ -19,7 +19,7 @@ package kdefault import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ManagerWebhookPatch{} @@ -27,6 +27,7 @@ var _ machinery.Template = &ManagerWebhookPatch{} // ManagerWebhookPatch scaffolds a file that defines the patch that enables webhooks on the manager type ManagerWebhookPatch struct { machinery.TemplateMixin + machinery.ProjectNameMixin Force bool } @@ -54,6 +55,9 @@ kind: Deployment metadata: name: controller-manager namespace: system + labels: + app.kubernetes.io/name: {{ .ProjectName }} + app.kubernetes.io/managed-by: kustomize spec: template: spec: diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go index 271ccd633..298d4a0ce 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go @@ -19,7 +19,7 @@ package manager import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Config{} @@ -27,7 +27,6 @@ var _ machinery.Template = &Config{} // Config scaffolds a file that defines the namespace and the manager deployment type Config struct { machinery.TemplateMixin - machinery.ComponentConfigMixin machinery.ProjectNameMixin // Image is controller manager image name @@ -107,10 +106,9 @@ spec: containers: - command: - /manager -{{- if not .ComponentConfig }} args: - - --leader-elect -{{- end }} + - --leader-elect + - --health-probe-bind-address=:8081 image: {{ .Image }} name: manager securityContext: diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go similarity index 93% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go index f8d5ecd7e..1331da901 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v2/scaffolds/internal/templates/config/manager/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/kustomization.go @@ -1,5 +1,5 @@ /* -Copyright 2019 The Kubernetes Authors. +Copyright 2020 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package manager import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go index 76bf6e1c5..65547bdf4 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/prometheus/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/kustomization.go @@ -19,7 +19,7 @@ package prometheus import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go similarity index 65% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go index 339ca03f0..73ce389aa 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/prometheus/monitor.go @@ -19,7 +19,7 @@ package prometheus import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Monitor{} @@ -54,10 +54,19 @@ metadata: spec: endpoints: - path: /metrics - port: https + port: https # Ensure this is the name of the port that exposes HTTPS metrics scheme: https bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token tlsConfig: + # TODO(user): The option insecureSkipVerify: true is not recommended for production since it disables + # certificate verification. This poses a significant security risk by making the system vulnerable to + # man-in-the-middle attacks, where an attacker could intercept and manipulate the communication between + # Prometheus and the monitored services. This could lead to unauthorized access to sensitive metrics data, + # compromising the integrity and confidentiality of the information. + # Please use the following options for secure configurations: + # caFile: /etc/metrics-certs/ca.crt + # certFile: /etc/metrics-certs/tls.crt + # keyFile: /etc/metrics-certs/tls.key insecureSkipVerify: true selector: matchLabels: diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go index e1fc2b9ed..c7668c821 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_editor_role.go @@ -22,7 +22,7 @@ import ( "path/filepath" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRDEditorRole{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go index 505e5ea4b..18d3f0a57 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/crd_viewer_role.go @@ -22,7 +22,7 @@ import ( "path/filepath" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRDViewerRole{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go similarity index 76% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go index d3ea9b22f..aad8b278d 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/kustomization.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} @@ -53,11 +53,13 @@ const kustomizeRBACTemplate = `resources: - role_binding.yaml - leader_election_role.yaml - leader_election_role_binding.yaml -# Comment the following 4 lines if you want to disable -# the auth proxy (https://github.com/brancz/kube-rbac-proxy) -# which protects your /metrics endpoint. -- auth_proxy_service.yaml -- auth_proxy_role.yaml -- auth_proxy_role_binding.yaml -- auth_proxy_client_clusterrole.yaml +# The following RBAC configurations are used to protect +# the metrics endpoint with authn/authz. These configurations +# ensure that only authorized users and service accounts +# can access the metrics endpoint. Comment the following +# permissions if you want to disable this protection. +# More info: https://book.kubebuilder.io/reference/metrics.html +- metrics_auth_role.yaml +- metrics_auth_role_binding.yaml +- metrics_reader_role.yaml ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go index 059c900c4..df0fc5cb7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &LeaderElectionRole{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go index 8a080f95a..374377f1a 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/leader_election_role_binding.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &LeaderElectionRoleBinding{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role.go new file mode 100644 index 000000000..8d353b128 --- /dev/null +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role.go @@ -0,0 +1,58 @@ +/* + Copyright 2020 The Kubernetes 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 rbac + +import ( + "path/filepath" + + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" +) + +var _ machinery.Template = &MetricsAuthRole{} + +// MetricsAuthRole scaffolds a file that defines the role for the auth proxy +type MetricsAuthRole struct { + machinery.TemplateMixin + machinery.ProjectNameMixin +} + +// SetTemplateDefaults implements file.Template +func (f *MetricsAuthRole) SetTemplateDefaults() error { + if f.Path == "" { + f.Path = filepath.Join("config", "rbac", "metrics_auth_role.yaml") + } + + f.TemplateBody = metricsAuthRoleTemplate + + return nil +} + +const metricsAuthRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: metrics-auth-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role_binding.go new file mode 100644 index 000000000..dc7f1630d --- /dev/null +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_auth_role_binding.go @@ -0,0 +1,53 @@ +/* + Copyright 2020 The Kubernetes 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 rbac + +import ( + "path/filepath" + + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" +) + +var _ machinery.Template = &MetricsAuthRole{} + +// MetricsAuthRoleBinding scaffolds a file that defines the role binding for the auth proxy +type MetricsAuthRoleBinding struct { + machinery.TemplateMixin + machinery.ProjectNameMixin +} + +// SetTemplateDefaults implements file.Template +func (f *MetricsAuthRoleBinding) SetTemplateDefaults() error { + if f.Path == "" { + f.Path = filepath.Join("config", "rbac", "metrics_auth_role_binding.yaml") + } + + f.TemplateBody = metricsAuthRoleBindingTemplate + + return nil +} + +const metricsAuthRoleBindingTemplate = `apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: metrics-auth-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: metrics-auth-role +subjects: +- kind: ServiceAccount + name: controller-manager + namespace: system +` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_reader_role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_reader_role.go new file mode 100644 index 000000000..4e037536d --- /dev/null +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/metrics_reader_role.go @@ -0,0 +1,50 @@ +/* + Copyright 2020 The Kubernetes 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 rbac + +import ( + "path/filepath" + + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" +) + +var _ machinery.Template = &MetricsReaderRole{} + +// MetricsReaderRole scaffolds a file that defines the role for the auth proxy +type MetricsReaderRole struct { + machinery.TemplateMixin + machinery.ProjectNameMixin +} + +// SetTemplateDefaults implements file.Template +func (f *MetricsReaderRole) SetTemplateDefaults() error { + if f.Path == "" { + f.Path = filepath.Join("config", "rbac", "metrics_reader_role.yaml") + } + + f.TemplateBody = metricsReaderRoleTemplate + + return nil +} + +const metricsReaderRoleTemplate = `apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: metrics-reader +rules: +- nonResourceURLs: + - "/metrics" + verbs: + - get +` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go index 1a80d1db5..e48a1ef56 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Role{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go index 5dd937b7e..aae5b22db 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/role_binding.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &RoleBinding{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go index 19373ba97..d65487db3 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/rbac/service_account.go @@ -19,7 +19,7 @@ package rbac import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ServiceAccount{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go index 1c3b53d75..89150f8cd 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/crd_sample.go @@ -19,7 +19,7 @@ package samples import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRDSample{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go index 9b0f528d5..f5b19b307 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/samples/kustomization.go @@ -20,7 +20,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomization.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomization.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go index 3f55f70a1..290485441 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds/internal/templates/config/webhook/kustomization.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomization.go @@ -19,7 +19,7 @@ package webhook import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Kustomization{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go index 167fa852e..625dc1aa6 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/kustomizeconfig.go @@ -19,7 +19,7 @@ package webhook import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &KustomizeConfig{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go index 1b96404a0..1c085dc73 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook/service.go @@ -19,7 +19,7 @@ package webhook import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Service{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go similarity index 82% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go index 976a2c701..bdb2b00b8 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/webhook.go @@ -20,17 +20,17 @@ import ( "fmt" log "github.com/sirupsen/logrus" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches" - - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook" + pluginutil "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/crd/patches" + + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/certmanager" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/kdefault" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/webhook" ) var _ plugins.Scaffolder = &webhookScaffolder{} @@ -98,6 +98,15 @@ func (s *webhookScaffolder) Scaffold() error { } } + err = pluginutil.UncommentCode(kustomizeFilePath, "#patches:", `#`) + if err != nil { + hasWebHookUncommented, err := pluginutil.HasFragment(kustomizeFilePath, "patches:") + if !hasWebHookUncommented || err != nil { + log.Errorf("Unable to find the line '#patches:' to uncomment in the file "+ + "%s.", kustomizeFilePath) + } + } + err = pluginutil.UncommentCode(kustomizeFilePath, "#- path: manager_webhook_patch.yaml", `#`) if err != nil { hasWebHookUncommented, err := pluginutil.HasFragment(kustomizeFilePath, "- path: manager_webhook_patch.yaml") diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/webhook.go similarity index 86% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/webhook.go index d7964b2c0..21e35177d 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/webhook.go @@ -17,9 +17,9 @@ limitations under the License. package v2 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds" ) var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/domain.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/domain.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/domain.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/domain.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/api.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/api.go index bff39f674..4a06c8044 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/api.go @@ -19,10 +19,10 @@ package external import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/external" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/external" ) var _ plugin.CreateAPISubcommand = &createAPISubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/edit.go similarity index 90% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/edit.go index b048bbd55..0cb7a9ee5 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/edit.go @@ -19,9 +19,9 @@ package external import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/external" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/external" ) var _ plugin.EditSubcommand = &editSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/helpers.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/helpers.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/helpers.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/helpers.go index a1bc75931..abf7489aa 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/helpers.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/helpers.go @@ -30,9 +30,9 @@ import ( "github.com/spf13/afero" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/external" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/external" ) var outputGetter ExecOutputGetter = &execOutputGetter{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/init.go similarity index 90% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/init.go index 221eef95e..176b9b044 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/init.go @@ -19,9 +19,9 @@ package external import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/external" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/external" ) var _ plugin.InitSubcommand = &initSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/plugin.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/plugin.go index 8b94b70d5..6a1bd1646 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/plugin.go @@ -17,8 +17,8 @@ limitations under the License. package external import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" ) var _ plugin.Full = Plugin{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/webhook.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/webhook.go index af49ee066..259d42822 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/external/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/external/webhook.go @@ -19,10 +19,10 @@ package external import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/external" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/external" ) var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/api.go similarity index 83% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/api.go index 923a6813e..eacd1da38 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/api.go @@ -25,25 +25,15 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + goPlugin "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds" ) -const ( - // defaultCRDVersion is the default CRD API version to scaffold. - defaultCRDVersion = "v1" -) - -const deprecateMsg = "The v1beta1 API version for CRDs and Webhooks are deprecated and are no longer supported since " + - "the Kubernetes release 1.22. This flag no longer required to exist in future releases. Also, we would like to " + - "recommend you no longer use these API versions." + - "More info: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-22" - var _ plugin.CreateAPISubcommand = &createAPISubcommand{} type createAPISubcommand struct { @@ -129,14 +119,7 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { p.options = &goPlugin.Options{} - fs.StringVar(&p.options.CRDVersion, "crd-version", defaultCRDVersion, - "version of CustomResourceDefinition to scaffold. Options: [v1, v1beta1]") - fs.StringVar(&p.options.Plural, "plural", "", "resource irregular plural form") - - // (not required raise an error in this case) - // nolint:errcheck,gosec - fs.MarkDeprecated("crd-version", deprecateMsg) } func (p *createAPISubcommand) InjectConfig(c config.Config) error { @@ -163,20 +146,6 @@ func (p *createAPISubcommand) InjectResource(res *resource.Resource) error { "to enable multi-group visit https://kubebuilder.io/migration/multi-group.html") } - // Check CRDVersion against all other CRDVersions in p.config for compatibility. - // nolint:staticcheck - if util.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { - return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", - p.resource.API.CRDVersion) - } - - // Check CRDVersion against all other CRDVersions in p.config for compatibility. - // nolint:staticcheck - if util.HasDifferentCRDVersion(p.config, p.resource.API.CRDVersion) { - return fmt.Errorf("only one CRD version can be used for all resources, cannot add %q", - p.resource.API.CRDVersion) - } - return nil } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go similarity index 90% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go index 8356de833..55047cae0 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/plugin.go @@ -17,11 +17,11 @@ limitations under the License. package v1alpha1 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" ) const pluginName = "deploy-image." + golang.DefaultNameQualifier diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go similarity index 76% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go index 16dbe43f3..f9a8eeb17 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/api.go @@ -24,19 +24,16 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - kustomizev1scaffolds "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1/scaffolds" - kustomizev2scaffolds "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2/scaffolds" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers" - golangv3scaffolds "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v3/scaffolds" - golangv4scaffolds "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + kustomizev2scaffolds "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers" + golangv4scaffolds "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds" ) var _ plugins.Scaffolder = &apiScaffolder{} @@ -79,10 +76,7 @@ func (s *apiScaffolder) InjectFS(fs machinery.Filesystem) { func (s *apiScaffolder) Scaffold() error { log.Println("Writing scaffold for you to edit...") - //nolint: staticcheck - isGoV3 := plugin.IsLegacyLayout(s.config) - - if err := s.scaffoldCreateAPIFromPlugins(isGoV3); err != nil { + if err := s.scaffoldCreateAPI(); err != nil { return err } @@ -100,7 +94,7 @@ func (s *apiScaffolder) Scaffold() error { ) if err := scaffold.Execute( - &api.Types{Port: s.port, IsLegacyLayout: isGoV3}, + &api.Types{Port: s.port}, ); err != nil { return fmt.Errorf("error updating APIs: %v", err) } @@ -112,12 +106,7 @@ func (s *apiScaffolder) Scaffold() error { } controller := &controllers.Controller{ - ControllerRuntimeVersion: golangv3scaffolds.ControllerRuntimeVersion, - IsLegacyLayout: isGoV3, - } - - if !isGoV3 { - controller.ControllerRuntimeVersion = golangv4scaffolds.ControllerRuntimeVersion + ControllerRuntimeVersion: golangv4scaffolds.ControllerRuntimeVersion, } if err := scaffold.Execute( @@ -131,15 +120,12 @@ func (s *apiScaffolder) Scaffold() error { } defaultMainPath := "cmd/main.go" - if isGoV3 { - defaultMainPath = "main.go" - } if err := s.updateMainByAddingEventRecorder(defaultMainPath); err != nil { return fmt.Errorf("error updating main.go: %v", err) } if err := scaffold.Execute( - &controllers.ControllerTest{Port: s.port, IsLegacyLayout: isGoV3}, + &controllers.ControllerTest{Port: s.port}, ); err != nil { return fmt.Errorf("error creating controller/**_controller_test.go: %v", err) } @@ -172,14 +158,14 @@ func (s *apiScaffolder) addEnvVarIntoManager() error { return nil } -// scaffoldCreateAPIFromPlugins will reuse the code from the kustomize and base golang +// scaffoldCreateAPI will reuse the code from the kustomize and base golang // plugins to do the default scaffolds which an API is created -func (s *apiScaffolder) scaffoldCreateAPIFromPlugins(isLegacyLayout bool) error { - if err := s.scaffoldCreateAPIFromGolang(isLegacyLayout); err != nil { +func (s *apiScaffolder) scaffoldCreateAPI() error { + if err := s.scaffoldCreateAPIFromGolang(); err != nil { return fmt.Errorf("error scaffolding golang files for the new API: %v", err) } - if err := s.scaffoldCreateAPIFromKustomize(isLegacyLayout); err != nil { + if err := s.scaffoldCreateAPIFromKustomize(); err != nil { return fmt.Errorf("error scaffolding kustomize manifests for the new API: %v", err) } return nil @@ -281,25 +267,12 @@ func (s *apiScaffolder) updateControllerCode(controller controllers.Controller) return nil } -func (s *apiScaffolder) scaffoldCreateAPIFromKustomize(isLegacyLayout bool) error { - // Now we need call the kustomize/v1 plugin to do its scaffolds when we create a new API - // todo: when we have the go/v4 plugin we will also need to check what is the plugin used - // in the Project layout to know if we should use kustomize/v1 OR kustomize/v2-alpha - var kustomizeScaffolder plugins.Scaffolder - - if isLegacyLayout { - kustomizeScaffolder = kustomizev1scaffolds.NewAPIScaffolder( - s.config, - s.resource, - true, - ) - } else { - kustomizeScaffolder = kustomizev2scaffolds.NewAPIScaffolder( - s.config, - s.resource, - true, - ) - } +func (s *apiScaffolder) scaffoldCreateAPIFromKustomize() error { + kustomizeScaffolder := kustomizev2scaffolds.NewAPIScaffolder( + s.config, + s.resource, + true, + ) kustomizeScaffolder.InjectFS(s.fs) @@ -310,16 +283,7 @@ func (s *apiScaffolder) scaffoldCreateAPIFromKustomize(isLegacyLayout bool) erro return nil } -func (s *apiScaffolder) scaffoldCreateAPIFromGolang(isLegacyLayout bool) error { - // Now we need call the kustomize/v1 plugin to do its scaffolds when we create a new API - // todo: when we have the go/v4 plugin we will also need to check what is the plugin used - // in the Project layout to know if we should use kustomize/v1 OR kustomize/v2-alpha - if isLegacyLayout { - golangV3Scaffolder := golangv3scaffolds.NewAPIScaffolder(s.config, - s.resource, true) - golangV3Scaffolder.InjectFS(s.fs) - return golangV3Scaffolder.Scaffold() - } +func (s *apiScaffolder) scaffoldCreateAPIFromGolang() error { golangV4Scaffolder := golangv4scaffolds.NewAPIScaffolder(s.config, s.resource, true) golangV4Scaffolder.InjectFS(s.fs) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go similarity index 83% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go index e7b73cf7d..0bfb00c5c 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/api/types.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Types{} @@ -36,30 +36,15 @@ type Types struct { // Port if informed we will create the scaffold with this spec Port string - - IsLegacyLayout bool } // SetTemplateDefaults implements file.Template func (f *Types) SetTemplateDefaults() error { if f.Path == "" { - - if f.IsLegacyLayout { - if f.MultiGroup { - if f.Resource.Group != "" { - f.Path = filepath.Join("apis", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("apis", "%[version]", "%[kind]_types.go") - } - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } + if f.MultiGroup && f.Resource.Group != "" { + f.Path = filepath.Join("api", "%[group]", "%[version]", "%[kind]_types.go") } else { - if f.MultiGroup && f.Resource.Group != "" { - f.Path = filepath.Join("api", "%[group]", "%[version]", "%[kind]_types.go") - } else { - f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") - } + f.Path = filepath.Join("api", "%[version]", "%[kind]_types.go") } } @@ -118,14 +103,14 @@ type {{ .Resource.Kind }}Status struct { Conditions []metav1.Condition ` + "`" + `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` + "`" + ` } -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status {{- if and (not .Resource.API.Namespaced) (not .Resource.IsRegularPlural) }} -//+kubebuilder:resource:path={{ .Resource.Plural }},scope=Cluster +// +kubebuilder:resource:path={{ .Resource.Plural }},scope=Cluster {{- else if not .Resource.API.Namespaced }} -//+kubebuilder:resource:scope=Cluster +// +kubebuilder:resource:scope=Cluster {{- else if not .Resource.IsRegularPlural }} -//+kubebuilder:resource:path={{ .Resource.Plural }} +// +kubebuilder:resource:path={{ .Resource.Plural }} {{- end }} // {{ .Resource.Kind }} is the Schema for the {{ .Resource.Plural }} API @@ -137,7 +122,7 @@ type {{ .Resource.Kind }} struct { Status {{ .Resource.Kind }}Status ` + "`" + `json:"status,omitempty"` + "`" + ` } -//+kubebuilder:object:root=true +// +kubebuilder:object:root=true // {{ .Resource.Kind }}List contains a list of {{ .Resource.Kind }} type {{ .Resource.Kind }}List struct { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go index 397a2fed1..030b52c8a 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/config/samples/crd_sample.go @@ -18,7 +18,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CRDSample{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go index 47c8e8cc1..e6b50239d 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller-test.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ControllerTest{} @@ -34,36 +34,23 @@ type ControllerTest struct { machinery.BoilerplateMixin machinery.ResourceMixin - Port string - IsLegacyLayout bool - PackageName string + Port string + PackageName string } // SetTemplateDefaults implements file.Template func (f *ControllerTest) SetTemplateDefaults() error { if f.Path == "" { if f.MultiGroup && f.Resource.Group != "" { - if f.IsLegacyLayout { - f.Path = filepath.Join("controllers", "%[group]", "%[kind]_controller_test.go") - } else { - f.Path = filepath.Join("internal", "controller", "%[group]", "%[kind]_controller_test.go") - } + f.Path = filepath.Join("internal", "controller", "%[group]", "%[kind]_controller_test.go") } else { - if f.IsLegacyLayout { - f.Path = filepath.Join("controllers", "%[kind]_controller_test.go") - } else { - f.Path = filepath.Join("internal", "controller", "%[kind]_controller_test.go") - } + f.Path = filepath.Join("internal", "controller", "%[kind]_controller_test.go") } } f.Path = f.Resource.Replacer().Replace(f.Path) log.Println(f.Path) f.PackageName = "controller" - if f.IsLegacyLayout { - f.PackageName = "controllers" - } - f.IfExistsAction = machinery.OverwriteFile log.Println("creating import for %", f.Resource.Path) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go index 83137e45a..ddbd43508 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1/scaffolds/internal/templates/controllers/controller.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Controller{} @@ -37,36 +37,22 @@ type Controller struct { ControllerRuntimeVersion string - // IsLegacyLayout is added to ensure backwards compatibility and should - // be removed when we remove the go/v3 plugin - IsLegacyLayout bool - PackageName string + PackageName string } // SetTemplateDefaults implements file.Template func (f *Controller) SetTemplateDefaults() error { if f.Path == "" { if f.MultiGroup && f.Resource.Group != "" { - if f.IsLegacyLayout { - f.Path = filepath.Join("controllers", "%[group]", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("internal", "controller", "%[group]", "%[kind]_controller.go") - } + f.Path = filepath.Join("internal", "controller", "%[group]", "%[kind]_controller.go") } else { - if f.IsLegacyLayout { - f.Path = filepath.Join("controllers", "%[kind]_controller.go") - } else { - f.Path = filepath.Join("internal", "controller", "%[kind]_controller.go") - } + f.Path = filepath.Join("internal", "controller", "%[kind]_controller.go") } } f.Path = f.Resource.Replacer().Replace(f.Path) log.Println(f.Path) f.PackageName = "controller" - if f.IsLegacyLayout { - f.PackageName = "controllers" - } log.Println("creating import for %", f.Resource.Path) f.TemplateBody = controllerTemplate @@ -128,12 +114,12 @@ type {{ .Resource.Kind }}Reconciler struct { // when the command is executed. // To know more about markers see: https://book.kubebuilder.io/reference/markers.html -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/finalizers,verbs=update -//+kubebuilder:rbac:groups=core,resources=events,verbs=create;patch -//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/finalizers,verbs=update +// +kubebuilder:rbac:groups=core,resources=events,verbs=create;patch +// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch // Reconcile is part of the main kubernetes reconciliation loop which aims to // move the current state of the cluster closer to the desired state. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/domain.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/domain.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/domain.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/domain.go index 092260856..048b07cb3 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/domain.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/domain.go @@ -16,7 +16,7 @@ limitations under the License. package golang -import "sigs.k8s.io/kubebuilder/v3/pkg/plugins" +import "sigs.k8s.io/kubebuilder/v4/pkg/plugins" // DefaultNameQualifier is the suffix appended to all kubebuilder plugin names for Golang operators. const DefaultNameQualifier = "go." + plugins.DefaultNameQualifier diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/go_version.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/go_version.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/go_version.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/go_version.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/options.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/options.go similarity index 70% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/options.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/options.go index 33665f747..865f61379 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/options.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/options.go @@ -19,10 +19,8 @@ package golang import ( "path" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv2 "sigs.k8s.io/kubebuilder/v3/pkg/config/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" ) var ( @@ -58,11 +56,6 @@ type Options struct { // Plural is the resource's kind plural form. Plural string - // CRDVersion is the CustomResourceDefinition API version that will be used for the resource. - CRDVersion string - // WebhookVersion is the {Validating,Mutating}WebhookConfiguration API version that will be used for the resource. - WebhookVersion string - // Namespaced is true if the resource should be namespaced. Namespaced bool @@ -82,14 +75,10 @@ func (opts Options) UpdateResource(res *resource.Resource, c config.Config) { if opts.DoAPI { //nolint:staticcheck - if plugin.IsLegacyLayout(c) { - res.Path = resource.APIPackagePathLegacy(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) - } else { - res.Path = resource.APIPackagePath(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) - } + res.Path = resource.APIPackagePath(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) res.API = &resource.API{ - CRDVersion: opts.CRDVersion, + CRDVersion: "v1", Namespaced: opts.Namespaced, } @@ -100,15 +89,10 @@ func (opts Options) UpdateResource(res *resource.Resource, c config.Config) { } if opts.DoDefaulting || opts.DoValidation || opts.DoConversion { - // IsLegacyLayout is added to ensure backwards compatibility and should - // be removed when we remove the go/v3 plugin //nolint:staticcheck - if plugin.IsLegacyLayout(c) { - res.Path = resource.APIPackagePathLegacy(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) - } else { - res.Path = resource.APIPackagePath(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) - } - res.Webhooks.WebhookVersion = opts.WebhookVersion + res.Path = resource.APIPackagePath(c.GetRepository(), res.Group, res.Version, c.IsMultiGroup()) + + res.Webhooks.WebhookVersion = "v1" if opts.DoDefaulting { res.Webhooks.Defaulting = true } @@ -128,12 +112,8 @@ func (opts Options) UpdateResource(res *resource.Resource, c config.Config) { // TODO: need to support '--resource-pkg-path' flag for specifying resourcePath if !opts.DoAPI { var alreadyHasAPI bool - if c.GetVersion().Compare(cfgv2.Version) == 0 { - alreadyHasAPI = c.HasResource(res.GVK) - } else { - loadedRes, err := c.GetResource(res.GVK) - alreadyHasAPI = err == nil && loadedRes.HasAPI() - } + loadedRes, err := c.GetResource(res.GVK) + alreadyHasAPI = err == nil && loadedRes.HasAPI() if !alreadyHasAPI { if domain, found := coreGroups[res.Group]; found { res.Domain = domain diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/repository.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/repository.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/repository.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/repository.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/api.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/api.go index 6b54f0605..3f0f27958 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/api.go @@ -25,18 +25,13 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds" -) - -const ( - // defaultCRDVersion is the default CRD API version to scaffold. - defaultCRDVersion = "v1" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + goPlugin "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds" ) // DefaultMainPath is default file path of main.go @@ -117,8 +112,6 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { func (p *createAPISubcommand) InjectConfig(c config.Config) error { p.config = c - // go/v4 no longer supports v1beta1 option - p.options.CRDVersion = defaultCRDVersion return nil } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/edit.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/edit.go index 438c01681..a53c12b16 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/edit.go @@ -21,10 +21,10 @@ import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds" ) var _ plugin.EditSubcommand = &editSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/init.go similarity index 95% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/init.go index 564ffdc52..26de76c52 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/init.go @@ -26,12 +26,12 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds" ) // Variables and function to check Go version requirements. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/plugin.go similarity index 90% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/plugin.go index 704912cf3..fdc341f27 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/plugin.go @@ -17,11 +17,11 @@ limitations under the License. package v4 import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" ) const pluginName = "base." + golang.DefaultNameQualifier diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/api.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/api.go similarity index 88% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/api.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/api.go index 7e65326d8..58dd0dde5 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/api.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/api.go @@ -23,14 +23,14 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" ) var _ plugins.Scaffolder = &apiScaffolder{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/doc.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/doc.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/doc.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/doc.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/edit.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/edit.go index 2d2ab1c56..17d015393 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/edit.go @@ -19,9 +19,9 @@ package scaffolds import ( "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" ) var _ plugins.Scaffolder = &editScaffolder{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/init.go similarity index 83% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/init.go index 4648d4bd8..847e699e2 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/init.go @@ -22,25 +22,24 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - kustomizecommonv1 "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v1" - kustomizecommonv2alpha "sigs.k8s.io/kubebuilder/v3/pkg/plugins/common/kustomize/v2" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + kustomizecommonv2 "sigs.k8s.io/kubebuilder/v4/pkg/plugins/common/kustomize/v2" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils" ) const ( // ControllerRuntimeVersion is the kubernetes-sigs/controller-runtime version to be used in the project - ControllerRuntimeVersion = "v0.17.3" + ControllerRuntimeVersion = "v0.18.4" // ControllerToolsVersion is the kubernetes-sigs/controller-tools version to be used in the project - ControllerToolsVersion = "v0.14.0" + ControllerToolsVersion = "v0.15.0" // EnvtestK8SVersion is the k8s version used to do the scaffold - EnvtestK8SVersion = "1.29.0" + EnvtestK8SVersion = "1.30.0" imageName = "controller:latest" ) @@ -129,20 +128,21 @@ func (s *initScaffolder) Scaffold() error { // If the KustomizeV2 was used to do the scaffold then // we need to ensure that we use its supported Kustomize Version // in order to support it - kustomizeVersion = kustomizecommonv1.KustomizeVersion - kustomizev2 := kustomizecommonv2alpha.Plugin{} + kustomizev2 := kustomizecommonv2.Plugin{} gov4 := "go.kubebuilder.io/v4" pluginKeyForKustomizeV2 := plugin.KeyFor(kustomizev2) for _, pluginKey := range s.config.GetPluginChain() { if pluginKey == pluginKeyForKustomizeV2 || pluginKey == gov4 { - kustomizeVersion = kustomizecommonv2alpha.KustomizeVersion + kustomizeVersion = kustomizecommonv2.KustomizeVersion break } } return scaffold.Execute( - &templates.Main{}, + &templates.Main{ + ControllerRuntimeVersion: ControllerRuntimeVersion, + }, &templates.GoMod{ ControllerRuntimeVersion: ControllerRuntimeVersion, }, diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go index 4e692b705..7835052ab 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/group.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Group{} @@ -55,8 +55,8 @@ func (f *Group) SetTemplateDefaults() error { const groupTemplate = `{{ .Boilerplate }} // Package {{ .Resource.Version }} contains API Schema definitions for the {{ .Resource.Group }} {{ .Resource.Version }} API group -//+kubebuilder:object:generate=true -//+groupName={{ .Resource.QualifiedGroup }} +// +kubebuilder:object:generate=true +// +groupName={{ .Resource.QualifiedGroup }} package {{ .Resource.Version }} import ( diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go index 55961e2b5..9b4f1149f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/types.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Types{} @@ -87,14 +87,14 @@ type {{ .Resource.Kind }}Status struct { // Important: Run "make" to regenerate code after modifying this file } -//+kubebuilder:object:root=true -//+kubebuilder:subresource:status +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status {{- if and (not .Resource.API.Namespaced) (not .Resource.IsRegularPlural) }} -//+kubebuilder:resource:path={{ .Resource.Plural }},scope=Cluster +// +kubebuilder:resource:path={{ .Resource.Plural }},scope=Cluster {{- else if not .Resource.API.Namespaced }} -//+kubebuilder:resource:scope=Cluster +// +kubebuilder:resource:scope=Cluster {{- else if not .Resource.IsRegularPlural }} -//+kubebuilder:resource:path={{ .Resource.Plural }} +// +kubebuilder:resource:path={{ .Resource.Plural }} {{- end }} // {{ .Resource.Kind }} is the Schema for the {{ .Resource.Plural }} API @@ -106,7 +106,7 @@ type {{ .Resource.Kind }} struct { Status {{ .Resource.Kind }}Status ` + "`" + `json:"status,omitempty"` + "`" + ` } -//+kubebuilder:object:root=true +// +kubebuilder:object:root=true // {{ .Resource.Kind }}List contains a list of {{ .Resource.Kind }} type {{ .Resource.Kind }}List struct { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go similarity index 81% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go index 6bcbab243..5dee1272f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook.go @@ -22,7 +22,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Webhook{} @@ -110,7 +110,7 @@ func (r *{{ .Resource.Kind }}) SetupWebhookWithManager(mgr ctrl.Manager) error { //nolint:lll defaultingWebhookTemplate = ` -//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} +// +kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/mutate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=true,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=m{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} var _ webhook.Defaulter = &{{ .Resource.Kind }}{} @@ -127,7 +127,7 @@ func (r *{{ .Resource.Kind }}) Default() { // TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation. // NOTE: The 'path' attribute must follow a specific pattern and should not be modified directly here. // Modifying the path for an invalid path can cause API server errors; failing to locate the webhook. -//+kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} +// +kubebuilder:webhook:{{ if ne .Resource.Webhooks.WebhookVersion "v1" }}webhookVersions={{"{"}}{{ .Resource.Webhooks.WebhookVersion }}{{"}"}},{{ end }}path=/validate-{{ .QualifiedGroupWithDash }}-{{ .Resource.Version }}-{{ lower .Resource.Kind }},mutating=false,failurePolicy=fail,sideEffects=None,groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=create;update,versions={{ .Resource.Version }},name=v{{ lower .Resource.Kind }}.kb.io,admissionReviewVersions={{ .AdmissionReviewVersions }} var _ webhook.Validator = &{{ .Resource.Kind }}{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go index e60392123..ced8d7ae5 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_suitetest.go @@ -22,7 +22,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &WebhookSuite{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go index 9a23081f9..d3123b1d8 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api/webhook_test_template.go @@ -23,7 +23,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &WebhookTest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go similarity index 88% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go index 3842da93b..27d4a7fc2 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Controller{} @@ -85,9 +85,9 @@ type {{ .Resource.Kind }}Reconciler struct { Scheme *runtime.Scheme } -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch -//+kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/finalizers,verbs=update +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }},verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/status,verbs=get;update;patch +// +kubebuilder:rbac:groups={{ .Resource.QualifiedGroup }},resources={{ .Resource.Plural }}/finalizers,verbs=update // Reconcile is part of the main kubernetes reconciliation loop which aims to // move the current state of the cluster closer to the desired state. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go index 462989cf6..cafb287a0 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_suitetest.go @@ -22,7 +22,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &SuiteTest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go index abe04cffb..2ff84220a 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/controllers/controller_test_template.go @@ -21,7 +21,7 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ControllerTest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go index 30ab49d14..ceb487605 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerfile.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Dockerfile{} @@ -39,7 +39,7 @@ func (f *Dockerfile) SetTemplateDefaults() error { } const dockerfileTemplate = `# Build the manager binary -FROM golang:1.21 AS builder +FROM golang:1.22 AS builder ARG TARGETOS ARG TARGETARCH diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go index dbdb8172d..04d541e3f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/dockerignore.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &DockerIgnore{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go index a2d7ad8c7..7080926de 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gitignore.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &GitIgnore{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go similarity index 92% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go index 769642180..f4376036a 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/golangci.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Golangci{} @@ -66,6 +66,7 @@ linters: - dupl - errcheck - exportloopref + - ginkgolinter - goconst - gocyclo - gofmt @@ -77,9 +78,15 @@ linters: - misspell - nakedret - prealloc + - revive - staticcheck - typecheck - unconvert - unparam - unused + +linters-settings: + revive: + rules: + - name: comment-spacings ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go similarity index 95% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go index 9ef1d5e0a..fa86c604c 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/gomod.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &GoMod{} @@ -45,7 +45,7 @@ func (f *GoMod) SetTemplateDefaults() error { const goModTemplate = `module {{ .Repo }} -go 1.21 +go 1.22.0 require ( sigs.k8s.io/controller-runtime {{ .ControllerRuntimeVersion }} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go index 15584e775..24469331f 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack/boilerplate.go @@ -21,7 +21,7 @@ import ( "path/filepath" "time" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) // DefaultBoilerplatePath is the default path to the boilerplate file diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go similarity index 79% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go index 308bd92c7..03d0979be 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/main.go @@ -20,7 +20,7 @@ import ( "fmt" "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) const defaultMainPath = "cmd/main.go" @@ -33,7 +33,8 @@ type Main struct { machinery.BoilerplateMixin machinery.DomainMixin machinery.RepositoryMixin - machinery.ComponentConfigMixin + + ControllerRuntimeVersion string } // SetTemplateDefaults implements file.Template @@ -182,6 +183,7 @@ func (f *MainUpdater) GetCodeFragments() machinery.CodeFragmentsMap { return fragments } +// nolint:lll var mainTemplate = `{{ .Boilerplate }} package main @@ -201,6 +203,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/healthz" + "sigs.k8s.io/controller-runtime/pkg/metrics/filters" "sigs.k8s.io/controller-runtime/pkg/webhook" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" %s @@ -218,28 +221,22 @@ func init() { } func main() { -{{- if not .ComponentConfig }} var metricsAddr string var enableLeaderElection bool var probeAddr string var secureMetrics bool var enableHTTP2 bool - flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") + var tlsOpts []func(*tls.Config) + flag.StringVar(&metricsAddr, "metrics-bind-address", "0", "The address the metrics endpoint binds to. " + + "Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. " + "Enabling this will ensure there is only one active controller manager.") - flag.BoolVar(&secureMetrics, "metrics-secure", false, - "If set the metrics endpoint is served securely") - flag.BoolVar(&enableHTTP2, "enable-http2", false, + flag.BoolVar(&secureMetrics, "metrics-secure", true, + "If set, the metrics endpoint is served securely via HTTPS. Use --metrics-secure=false to use HTTP instead.") + flag.BoolVar(&enableHTTP2, "enable-http2", false, "If set, HTTP/2 will be enabled for the metrics and webhook servers") -{{- else }} - var configFile string - flag.StringVar(&configFile, "config", "", - "The controller will load its initial configuration from this file. " + - "Omit this flag to use the default configuration values. " + - "Command-line flags override configuration from this file.") -{{- end }} opts := zap.Options{ Development: true, } @@ -248,7 +245,6 @@ func main() { ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) -{{ if not .ComponentConfig }} // if the enable-http2 flag is false (the default), http/2 should be disabled // due to its vulnerabilities. More specifically, disabling http/2 will // prevent from being vulnerable to the HTTP/2 Stream Cancellation and @@ -260,7 +256,6 @@ func main() { c.NextProtos = []string{"http/1.1"} } - tlsOpts := []func(*tls.Config){} if !enableHTTP2 { tlsOpts = append(tlsOpts, disableHTTP2) } @@ -269,14 +264,34 @@ func main() { TLSOpts: tlsOpts, }) + // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server. + // More info: + // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@{{ .ControllerRuntimeVersion }}/pkg/metrics/server + // - https://book.kubebuilder.io/reference/metrics.html + metricsServerOptions := metricsserver.Options{ + BindAddress: metricsAddr, + SecureServing: secureMetrics, + // TODO(user): TLSOpts is used to allow configuring the TLS config used for the server. If certificates are + // not provided, self-signed certificates will be generated by default. This option is not recommended for + // production environments as self-signed certificates do not offer the same level of trust and security + // as certificates issued by a trusted Certificate Authority (CA). The primary risk is potentially allowing + // unauthorized access to sensitive metrics data. Consider replacing with CertDir, CertName, and KeyName + // to provide certificates, ensuring the server communicates using trusted and secure certificates. + TLSOpts: tlsOpts, + } + + if secureMetrics { + // FilterProvider is used to protect the metrics endpoint with authn/authz. + // These configurations ensure that only authorized users and service accounts + // can access the metrics endpoint. The RBAC are configured in 'config/rbac/kustomization.yaml'. More info: + // https://pkg.go.dev/sigs.k8s.io/controller-runtime@{{ .ControllerRuntimeVersion }}/pkg/metrics/filters#WithAuthenticationAndAuthorization + metricsServerOptions.FilterProvider = filters.WithAuthenticationAndAuthorization + } + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - Metrics: metricsserver.Options{ - BindAddress: metricsAddr, - SecureServing: secureMetrics, - TLSOpts: tlsOpts, - }, - WebhookServer: webhookServer, + Scheme: scheme, + Metrics: metricsServerOptions, + WebhookServer: webhookServer, HealthProbeBindAddress: probeAddr, LeaderElection: enableLeaderElection, {{- if not .Domain }} @@ -290,25 +305,12 @@ func main() { // speeds up voluntary leader transitions as the new leader don't have to wait // LeaseDuration time first. // - // In the default scaffold provided, the program ends immediately after - // the manager stops, so would be fine to enable this option. However, - // if you are doing or is intended to do any operation such as perform cleanups + // In the default scaffold provided, the program ends immediately after + // the manager stops, so would be fine to enable this option. However, + // if you are doing or is intended to do any operation such as perform cleanups // after the manager stops then its usage might be unsafe. // LeaderElectionReleaseOnCancel: true, }) -{{- else }} - var err error - options := ctrl.Options{Scheme: scheme} - if configFile != "" { - options, err = options.AndFrom(ctrl.ConfigFile().AtPath(configFile)) - if err != nil { - setupLog.Error(err, "unable to load the config file") - os.Exit(1) - } - } - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options) -{{- end }} if err != nil { setupLog.Error(err, "unable to start manager") os.Exit(1) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go similarity index 92% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go index f041315e0..45ff7cee7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/makefile.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Makefile{} @@ -25,7 +25,6 @@ var _ machinery.Template = &Makefile{} // Makefile scaffolds a file that defines project management CLI commands type Makefile struct { machinery.TemplateMixin - machinery.ComponentConfigMixin machinery.ProjectNameMixin // Image is controller manager image name @@ -75,7 +74,7 @@ func (f *Makefile) SetTemplateDefaults() error { const makefileTemplate = `# Image URL to use all building/pushing image targets IMG ?= {{ .Image }} # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. -ENVTEST_K8S_VERSION = 1.29.0 +ENVTEST_K8S_VERSION = 1.30.0 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -147,7 +146,7 @@ test-e2e: go test ./test/e2e/ -v -ginkgo.v .PHONY: lint -lint: golangci-lint ## Run golangci-lint linter & yamllint +lint: golangci-lint ## Run golangci-lint linter $(GOLANGCI_LINT) run .PHONY: lint-fix @@ -186,10 +185,10 @@ PLATFORMS ?= linux/arm64,linux/amd64,linux/s390x,linux/ppc64le docker-buildx: ## Build and push docker image for the manager for cross-platform support # copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfile sed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross - - $(CONTAINER_TOOL) buildx create --name project-v3-builder - $(CONTAINER_TOOL) buildx use project-v3-builder + - $(CONTAINER_TOOL) buildx create --name {{ .ProjectName }}-builder + $(CONTAINER_TOOL) buildx use {{ .ProjectName }}-builder - $(CONTAINER_TOOL) buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile.cross . - - $(CONTAINER_TOOL) buildx rm project-v3-builder + - $(CONTAINER_TOOL) buildx rm {{ .ProjectName }}-builder rm Dockerfile.cross .PHONY: build-installer @@ -230,16 +229,16 @@ $(LOCALBIN): ## Tool Binaries KUBECTL ?= kubectl -KUSTOMIZE ?= $(LOCALBIN)/kustomize-$(KUSTOMIZE_VERSION) -CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen-$(CONTROLLER_TOOLS_VERSION) -ENVTEST ?= $(LOCALBIN)/setup-envtest-$(ENVTEST_VERSION) -GOLANGCI_LINT = $(LOCALBIN)/golangci-lint-$(GOLANGCI_LINT_VERSION) +KUSTOMIZE ?= $(LOCALBIN)/kustomize +CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen +ENVTEST ?= $(LOCALBIN)/setup-envtest +GOLANGCI_LINT = $(LOCALBIN)/golangci-lint ## Tool Versions KUSTOMIZE_VERSION ?= {{ .KustomizeVersion }} CONTROLLER_TOOLS_VERSION ?= {{ .ControllerToolsVersion }} ENVTEST_VERSION ?= {{ .EnvtestVersion }} -GOLANGCI_LINT_VERSION ?= v1.57.2 +GOLANGCI_LINT_VERSION ?= v1.59.1 .PHONY: kustomize kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. @@ -259,19 +258,21 @@ $(ENVTEST): $(LOCALBIN) .PHONY: golangci-lint golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary. $(GOLANGCI_LINT): $(LOCALBIN) - $(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,${GOLANGCI_LINT_VERSION}) + $(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION)) # go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist -# $1 - target path with name of binary (ideally with version) +# $1 - target path with name of binary # $2 - package url which can be installed # $3 - specific version of package define go-install-tool -@[ -f $(1) ] || { \ +@[ -f "$(1)-$(3)" ] || { \ set -e; \ package=$(2)@$(3) ;\ echo "Downloading $${package}" ;\ +rm -f $(1) || true ;\ GOBIN=$(LOCALBIN) go install $${package} ;\ -mv "$$(echo "$(1)" | sed "s/-$(3)$$//")" $(1) ;\ -} +mv $(1) $(1)-$(3) ;\ +} ;\ +ln -sf $(1)-$(3) $(1) endef ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go index 6cc9a530a..ab8c88eba 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/readme.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Readme{} @@ -70,7 +70,7 @@ const readmeFileTemplate = `# {{ .ProjectName }} ## Getting Started ### Prerequisites -- go version v1.21.0+ +- go version v1.22.0+ - docker version 17.03+. - kubectl version v1.11.3+. - Access to a Kubernetes v1.11.3+ cluster. diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go index 5dfe394be..53ca8f807 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/suite.go @@ -17,7 +17,7 @@ limitations under the License. package e2e import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &SuiteTest{} @@ -53,7 +53,7 @@ import ( // Run e2e tests using the Ginkgo runner. func TestE2E(t *testing.T) { RegisterFailHandler(Fail) - fmt.Fprintf(GinkgoWriter, "Starting {{ .ProjectName }} suite\n") + _, _ = fmt.Fprintf(GinkgoWriter, "Starting {{ .ProjectName }} suite\n") RunSpecs(t, "e2e suite") } ` diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go similarity index 98% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go index 54f4b148d..d6de3ed83 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/e2e/test.go @@ -17,7 +17,7 @@ limitations under the License. package e2e import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &SuiteTest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go similarity index 93% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go index b19f08621..012195059 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/test/utils/utils.go @@ -17,7 +17,7 @@ limitations under the License. package utils import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &Utils{} @@ -60,7 +60,7 @@ const ( ) func warnError(err error) { - fmt.Fprintf(GinkgoWriter, "warning: %v\n", err) + _, _ = fmt.Fprintf(GinkgoWriter, "warning: %v\n", err) } // InstallPrometheusOperator installs the prometheus Operator to be used to export the enabled metrics. @@ -77,12 +77,12 @@ func Run(cmd *exec.Cmd) ([]byte, error) { cmd.Dir = dir if err := os.Chdir(cmd.Dir); err != nil { - fmt.Fprintf(GinkgoWriter, "chdir dir: %s\n", err) + _, _ = fmt.Fprintf(GinkgoWriter, "chdir dir: %s\n", err) } cmd.Env = append(os.Environ(), "GO111MODULE=on") command := strings.Join(cmd.Args, " ") - fmt.Fprintf(GinkgoWriter, "running: %s\n", command) + _, _ = fmt.Fprintf(GinkgoWriter, "running: %s\n", command) output, err := cmd.CombinedOutput() if err != nil { return output, fmt.Errorf("%s failed with error: (%v) %s", command, err, string(output)) @@ -128,7 +128,7 @@ func InstallCertManager() error { return err } -// LoadImageToKindCluster loads a local docker image to the kind cluster +// LoadImageToKindClusterWithName loads a local docker image to the kind cluster func LoadImageToKindClusterWithName(name string) error { cluster := "kind" if v, ok := os.LookupEnv("KIND_CLUSTER"); ok { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/webhook.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/webhook.go index ab853d8f5..8b46a17e6 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/webhook.go @@ -22,13 +22,13 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/api" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/api" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds/internal/templates/hack" ) var _ plugins.Scaffolder = &webhookScaffolder{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/webhook.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/webhook.go similarity index 86% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/webhook.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/webhook.go index 6e017ab1f..9fe89cb33 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/webhook.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/webhook.go @@ -21,18 +21,15 @@ import ( "github.com/spf13/pflag" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - pluginutil "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - goPlugin "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/v4/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + pluginutil "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + goPlugin "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/v4/scaffolds" ) -// defaultWebhookVersion is the default mutating/validating webhook config API version to scaffold. -const defaultWebhookVersion = "v1" - var _ plugin.CreateWebhookSubcommand = &createWebhookSubcommand{} type createWebhookSubcommand struct { @@ -82,8 +79,6 @@ func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) { func (p *createWebhookSubcommand) InjectConfig(c config.Config) error { p.config = c - // go/v4 no longer supports v1beta1 option - p.options.WebhookVersion = defaultWebhookVersion return nil } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/commons.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/commons.go similarity index 96% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/commons.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/commons.go index a372a94e9..27f8bc0d3 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/commons.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/commons.go @@ -19,7 +19,7 @@ package v1alpha import ( "errors" - "sigs.k8s.io/kubebuilder/v3/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config" ) func InsertPluginMetaToConfig(target config.Config, cfg pluginConfig) error { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/constants.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/constants.go similarity index 100% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/constants.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/constants.go diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/edit.go similarity index 88% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/edit.go index 2205e8df9..e49513ede 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/edit.go @@ -19,10 +19,10 @@ package v1alpha import ( "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds" ) var _ plugin.EditSubcommand = &editSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/init.go similarity index 88% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/init.go index b824bfcb2..2df721a95 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/init.go @@ -19,10 +19,10 @@ package v1alpha import ( "fmt" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds" ) var _ plugin.InitSubcommand = &initSubcommand{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/plugin.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/plugin.go similarity index 89% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/plugin.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/plugin.go index 3f386dba4..f3d8c1f32 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/plugin.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/plugin.go @@ -17,11 +17,11 @@ limitations under the License. package v1alpha import ( - "sigs.k8s.io/kubebuilder/v3/pkg/config" - cfgv3 "sigs.k8s.io/kubebuilder/v3/pkg/config/v3" - "sigs.k8s.io/kubebuilder/v3/pkg/model/stage" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + cfgv3 "sigs.k8s.io/kubebuilder/v4/pkg/config/v3" + "sigs.k8s.io/kubebuilder/v4/pkg/model/stage" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" ) const pluginName = "grafana." + plugins.DefaultNameQualifier diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go similarity index 95% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go index 0773fa1e0..26a1a19e0 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/edit.go @@ -24,9 +24,9 @@ import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates" "sigs.k8s.io/yaml" ) @@ -179,7 +179,7 @@ func (s *editScaffolder) Scaffold() error { if err == nil && len(configItems) > 0 { templatesBuilder = append(templatesBuilder, &templates.CustomMetricsDashManifest{Items: configItems}) } else if err != nil { - fmt.Fprintf(os.Stderr, "Error on scaffolding manifest for custom metris:\n%v", err) + _, _ = fmt.Fprintf(os.Stderr, "Error on scaffolding manifest for custom metris:\n%v", err) } return scaffold.Execute(templatesBuilder...) diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go similarity index 91% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go index 07eeacea9..09fa2feb0 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/init.go @@ -19,9 +19,9 @@ package scaffolds import ( log "github.com/sirupsen/logrus" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates" ) var _ plugins.Scaffolder = &initScaffolder{} @@ -53,4 +53,5 @@ func (s *initScaffolder) Scaffold() error { &templates.ResourcesManifest{}, &templates.CustomMetricsConfigManifest{ConfigPath: string(configFilePath)}, ) + } diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go similarity index 97% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go index 2e4e0810e..1dfe4af97 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom.go @@ -17,7 +17,7 @@ limitations under the License. package templates import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &CustomMetricsConfigManifest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go index 2a1d532dd..711946ea7 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/custom_metrics.go @@ -23,7 +23,7 @@ import ( "strings" "text/template" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) type CustomMetricsConfig struct { diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go index fa19c5de2..8bd61f2bb 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/resources.go @@ -19,7 +19,7 @@ package templates import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &ResourcesManifest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go similarity index 99% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go index 01c2e856f..f5b1ca464 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/grafana/v1alpha/scaffolds/internal/templates/runtime.go @@ -19,7 +19,7 @@ package templates import ( "path/filepath" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) var _ machinery.Template = &RuntimeManifest{} diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/scaffolder.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/scaffolder.go similarity index 94% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/scaffolder.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/scaffolder.go index b738caa99..76ba28237 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/plugins/scaffolder.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/plugins/scaffolder.go @@ -17,7 +17,7 @@ limitations under the License. package plugins import ( - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" ) // Scaffolder interface creates files to set up a controller manager diff --git a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/rescaffold/migrate.go b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/rescaffold/migrate.go similarity index 95% rename from tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/rescaffold/migrate.go rename to tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/rescaffold/migrate.go index af2c4eaa6..410a3f4db 100644 --- a/tools/vendor/sigs.k8s.io/kubebuilder/v3/pkg/rescaffold/migrate.go +++ b/tools/vendor/sigs.k8s.io/kubebuilder/v4/pkg/rescaffold/migrate.go @@ -23,13 +23,13 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/afero" - "sigs.k8s.io/kubebuilder/v3/pkg/config" - "sigs.k8s.io/kubebuilder/v3/pkg/config/store" - "sigs.k8s.io/kubebuilder/v3/pkg/config/store/yaml" - "sigs.k8s.io/kubebuilder/v3/pkg/machinery" - "sigs.k8s.io/kubebuilder/v3/pkg/model/resource" - "sigs.k8s.io/kubebuilder/v3/pkg/plugin/util" - "sigs.k8s.io/kubebuilder/v3/pkg/plugins/golang/deploy-image/v1alpha1" + "sigs.k8s.io/kubebuilder/v4/pkg/config" + "sigs.k8s.io/kubebuilder/v4/pkg/config/store" + "sigs.k8s.io/kubebuilder/v4/pkg/config/store/yaml" + "sigs.k8s.io/kubebuilder/v4/pkg/machinery" + "sigs.k8s.io/kubebuilder/v4/pkg/model/resource" + "sigs.k8s.io/kubebuilder/v4/pkg/plugin/util" + "sigs.k8s.io/kubebuilder/v4/pkg/plugins/golang/deploy-image/v1alpha1" ) type MigrateOptions struct { @@ -287,6 +287,8 @@ func getAPIResourceFlags(resource resource.Resource) []string { args = append(args, "--resource") if resource.API.Namespaced { args = append(args, "--namespaced") + } else { + args = append(args, "--namespaced=false") } } @@ -330,7 +332,7 @@ func copyFile(src, des string) error { if err != nil { return fmt.Errorf("Source file path: %s does not exist. %v", src, err) } - //Copy all the contents to the desitination file + // Copy all the contents to the desitination file // nolint:gosec return os.WriteFile(des, bytesRead, 0755) }